Download cv2ma9.eso

Back to the list

   1 : C CV2MA9    SOURCE    CHAT      09/10/09    21:16:48     6519           
   2 :       SUBROUTINE CV2MA9(MDISCP,NCVARP,MDISCD,NCVARD,
   3 :      $     IMTLS9,
   4 :      $     MYFALS,
   5 :      $     MATLS9,
   6 :      $     IMPR,IRET)
   7 :       IMPLICIT REAL*8 (A-H,O-Z)
   8 :       IMPLICIT INTEGER (I-N)
   9 : C***********************************************************************
  10 : C NOM         : CV2MA9
  11 : C DESCRIPTION : Transforme un MCHAEL (mon champ par éléments)
  12 : C               représentant un ensemble de matrices élémentaires en
  13 : C               RIGIDITE...
  14 : C     
  15 : C LANGAGE     : ESOPE
  16 : C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  17 : C               mél : gounand@semt2.smts.cea.fr
  18 : C***********************************************************************
  19 : C APPELES          : KEEF   (recherche de l'élément fini)
  20 : C APPELES (E/S)    : ECROBJ, PRLIST (écriture entier, objet,
  21 : C                    impression)
  22 : C APPELE PAR       : PRLS92
  23 : C***********************************************************************
  24 : C ENTREES            :
  25 : C ENTREES/SORTIES    : -
  26 : C SORTIES            :
  27 : C TRAVAIL            : * MYMEL (type MELEME) : maillage élémentaire.
  28 : C                      * JMTLS9 (type MCHEVA) : valeurs du champ IMTLS9
  29 : C                        sur le maillage élémentaire.
  30 : C                        Structure (cf.include SMCHAEL) :
  31 : C                        (nb. ddl dual, nb. ddl primal,
  32 : C                         nb. comp. duales, nb. comp. primales,
  33 : C                         1, nb. éléments)
  34 : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  35 : C***********************************************************************
  36 : C VERSION    : v1, 26/09/03, version initiale
  37 : C HISTORIQUE : v1, 26/09/03, création
  38 : C HISTORIQUE :
  39 : C HISTORIQUE :
  40 : C***********************************************************************
  41 : C Prière de PRENDRE LE TEMPS de compléter les commentaires
  42 : C en cas de modification de ce sous-programme afin de faciliter
  43 : C la maintenance !
  44 : C***********************************************************************
  45 : -INC CCOPTIO
  46 : -INC SMLMOTS
  47 :       POINTEUR NCVARP.MLMOTS
  48 :       POINTEUR NCVARD.MLMOTS
  49 : -INC SMELEME
  50 :       POINTEUR MYMEL.MELEME
  51 :       POINTEUR RIGMEL.MELEME
  52 :       INTEGER NBNN,NBELEM,NBSOUS,NBREF
  53 : -INC SMLENTI
  54 :       POINTEUR LPOQUF.MLENTI
  55 :       POINTEUR KPOQUF.MLENTI
  56 :       INTEGER JG
  57 : -INC SMRIGID
  58 :       POINTEUR MATLS9.MRIGID
  59 :       POINTEUR MYDSCR.DESCR
  60 :       POINTEUR MYIMAT.IMATRI
  61 :       POINTEUR MYXMAT.XMATRI
  62 :       INTEGER NRIGE,NRIGEL,NELRIG,NLIGRP,NLIGRD
  63 : *     
  64 : * Includes persos
  65 : *     
  66 : CBEGININCLUDE SMCHAEL
  67 :       SEGMENT MCHAEL
  68 :       POINTEUR IMACHE(N1).MELEME
  69 :       POINTEUR ICHEVA(N1).MCHEVA
  70 :       ENDSEGMENT
  71 :       SEGMENT MCHEVA
  72 :       REAL*8 VELCHE(NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM)
  73 :       ENDSEGMENT
  74 :       SEGMENT LCHEVA
  75 :       POINTEUR LISCHE(NBCHE).MCHEVA
  76 :       ENDSEGMENT
  77 : CENDINCLUDE SMCHAEL
  78 :       POINTEUR IMTLS9.MCHAEL
  79 :       POINTEUR JMTLS9.MCHEVA
  80 :       INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM
  81 : CBEGININCLUDE SFALRF
  82 :       SEGMENT FALRF
  83 :       CHARACTER*(LNNFA) NOMFA
  84 :       INTEGER NUQUAF(NBLRF)
  85 :       POINTEUR ELEMF(NBLRF).ELREF
  86 :       ENDSEGMENT
  87 :       SEGMENT FALRFS
  88 :       POINTEUR LISFA(0).FALRF
  89 :       ENDSEGMENT
  90 : CENDINCLUDE SFALRF
  91 :       POINTEUR MYFALS.FALRFS
  92 : CBEGININCLUDE SELREF
  93 :       SEGMENT ELREF
  94 :       CHARACTER*(LNNOM)  NOMLRF
  95 :       CHARACTER*(LNFORM) FORME 
  96 :       CHARACTER*(LNTYPL) TYPEL 
  97 :       CHARACTER*(LNESP)  ESPACE
  98 :       INTEGER DEGRE
  99 :       REAL*8 XCONOD(NDIMEL,NBNOD)
 100 :       INTEGER NPQUAF(NBDDL)
 101 :       INTEGER NUMCMP(NBDDL)
 102 :       INTEGER QUENOD(NBDDL)
 103 :       INTEGER ORDDER(NDIMEL,NBDDL)
 104 :       POINTEUR MBPOLY.POLYNS
 105 :       ENDSEGMENT
 106 :       SEGMENT ELREFS
 107 :       POINTEUR LISEL(0).ELREF
 108 :       ENDSEGMENT
 109 : CENDINCLUDE SELREF
 110 :       POINTEUR LRFPRI.ELREF
 111 :       POINTEUR LRFDUA.ELREF
 112 : *     
 113 :       CHARACTER*4 MDISCP,MDISCD
 114 :       INTEGER IMPR,IRET
 115 : *     
 116 :       INTEGER IBNN,IBELEM
 117 :       INTEGER ITQUAF,NDDLPR,NDDLDU
 118 :       INTEGER        IDDLPR,IDDLDU
 119 :       INTEGER               NSOUS,NPOQUF
 120 :       INTEGER ISOUS
 121 :       INTEGER ILIGRP,ILIGRD,IELRIG,ICMPP,ICMPD
 122 : 
 123 : *     
 124 : * Executable statements
 125 : *     
 126 :       IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans cv2ma9'
 127 :       NRIGE=7
 128 :       NRIGEL=0
 129 :       SEGINI,MATLS9
 130 :       MATLS9.MTYMAT='LEASTSQU'
 131 : *     
 132 : *     Remplissage de MRIGID
 133 : *     
 134 :       SEGACT NCVARP
 135 :       SEGACT NCVARD
 136 :       SEGACT IMTLS9
 137 :       NSOUS=IMTLS9.IMACHE(/1)
 138 : C      SEGPRT,NCVARP
 139 : C      SEGPRT,NCVARD
 140 : C      SEGPRT,IMTLS9
 141 :       DO ISOUS=1,NSOUS
 142 :          JMTLS9=IMTLS9.ICHEVA(ISOUS)
 143 :          IF (JMTLS9.NE.0) THEN
 144 : C            SEGPRT,NCVARP
 145 : C            SEGPRT,NCVARD
 146 : C            SEGPRT,JMTLS9
 147 :             MYMEL =IMTLS9.IMACHE(ISOUS)
 148 :             SEGACT MYMEL
 149 :             ITQUAF=MYMEL.ITYPEL
 149 :             CALL KEEF(ITQUAF,MDISCP,MYFALS,
 150 :      $           LRFPRI,IMPR,IRET)
 151 :             IF (IRET.NE.0) GOTO 9999
 152 :             SEGACT LRFPRI
 153 :             NDDLPR=LRFPRI.NPQUAF(/1)
 153 :             CALL KEEF(ITQUAF,MDISCD,MYFALS,
 154 :      $           LRFDUA,IMPR,IRET)
 155 :             IF (IRET.NE.0) GOTO 9999
 156 :             SEGACT LRFDUA
 157 :             NDDLDU=LRFDUA.NPQUAF(/1)
 158 : *     
 159 : * remplissage du segment DISCR
 160 : *     
 161 : *  Construction de la liste des points du QUAF sur lesquels il y a des
 162 : *  ddl
 163 :             JG=0
 164 :             SEGINI LPOQUF
 165 :             DO IDDLPR=1,NDDLPR
 166 :                LPOQUF.LECT(**)=LRFPRI.NPQUAF(IDDLPR)
 167 :             ENDDO
 168 :             DO IDDLDU=1,NDDLDU
 169 :                LPOQUF.LECT(**)=LRFDUA.NPQUAF(IDDLDU)
 170 :             ENDDO
 171 : * Suppression des doublons
 171 :             CALL IUNIQ(LPOQUF.LECT,LPOQUF.LECT(/1),
 172 :      $           LPOQUF.LECT,NPOQUF,
 173 :      $           IMPR,IRET)
 174 :             IF (IRET.NE.0) GOTO 9999
 175 :             JG=NPOQUF
 176 :             SEGADJ,LPOQUF
 177 : * Segment de repérage dans cette liste
 178 :             JG=MYMEL.NUM(/1)
 179 :             SEGINI,KPOQUF
 179 :             CALL RSETXI(KPOQUF.LECT,LPOQUF.LECT,LPOQUF.LECT(/1))
 180 :             NLIGRP=NDDLPR
 181 :             NLIGRD=NDDLDU
 182 :             SEGINI MYDSCR
 183 :             DO ILIGRP=1,NLIGRP
 184 :                ICMPP=LRFPRI.NUMCMP(ILIGRP)
 185 :                MYDSCR.LISINC(ILIGRP)=NCVARP.MOTS(ICMPP)
 186 :                MYDSCR.NOELEP(ILIGRP)=
 187 :      $              KPOQUF.LECT(LRFPRI.NPQUAF(ILIGRP)) 
 188 :             ENDDO
 189 :             DO ILIGRD=1,NLIGRD
 190 :                ICMPD=LRFDUA.NUMCMP(ILIGRD)
 191 :                MYDSCR.LISDUA(ILIGRD)=NCVARD.MOTS(ICMPD)
 192 :                MYDSCR.NOELED(ILIGRD)=
 193 :      $              KPOQUF.LECT(LRFDUA.NPQUAF(ILIGRD))
 194 :             ENDDO
 195 :             SEGDES MYDSCR
 196 :             SEGDES LRFDUA
 197 :             SEGDES LRFPRI
 198 :             SEGSUP KPOQUF
 199 : *     
 200 : * remplissage du maillage pour la rigidité
 201 : *     
 202 :             NBNN=NPOQUF
 203 :             NBELEM=MYMEL.NUM(/2)
 204 :             NBSOUS=0
 205 :             NBREF=0
 206 :             SEGINI,RIGMEL
 207 : * Type 32 POLY
 208 :             RIGMEL.ITYPEL=32
 209 :             DO IBELEM=1,NBELEM
 210 :                DO IBNN=1,NBNN
 211 :                   RIGMEL.NUM(IBNN,IBELEM)=
 212 :      $                 MYMEL.NUM(LPOQUF.LECT(IBNN),IBELEM)
 213 :                ENDDO
 214 :             ENDDO
 215 :             SEGDES RIGMEL
 216 :             SEGSUP LPOQUF
 217 :             SEGDES MYMEL
 218 : *     
 219 : * remplissage des matrices élémentaires
 220 : *     
 221 :             SEGACT JMTLS9
 222 :             NBLIG=JMTLS9.VELCHE(/1)
 223 :             NBCOL=JMTLS9.VELCHE(/2)
 224 :             N2LIG=JMTLS9.VELCHE(/3)
 225 :             N2COL=JMTLS9.VELCHE(/4)
 226 :             NBPOI=JMTLS9.VELCHE(/5)
 227 :             NBELM=JMTLS9.VELCHE(/6)
 228 :             IF (NBLIG.NE.NDDLDU.OR.NBCOL.NE.NDDLPR.OR.N2LIG.NE.1
 229 :      $           .OR.N2COL.NE.1.OR.NBPOI.NE.1) THEN
 230 :                WRITE(IOIMP,*) 'Erreur dims JMTLS9'
 231 :                GOTO 9999
 232 :             ENDIF
 233 :             NELRIG=NBELM
 234 :                         nligrp=nddlpr
 235 :                         nligrd=nddldu
 236 :             SEGINI MYxMAT
 237 :             DO IELRIG=1,NELRIG
 238 : *               NLIGRP=NDDLPR
 239 : *               NLIGRD=NDDLDU
 240 : *               SEGINI MYXMAT
 241 :                DO ILIGRP=1,NLIGRP
 242 :                   DO ILIGRD=1,NLIGRD
 243 :                      MYXMAT.RE(ILIGRD,ILIGRP,ielrig)=
 244 :      $                    JMTLS9.VELCHE(ILIGRD,ILIGRP,1,1,1,IELRIG)
 245 :                   ENDDO
 246 :                ENDDO
 247 : *               SEGDES MYXMAT
 248 : *               MYIMAT.IMATTT(IELRIG)=MYXMAT
 249 :             ENDDO
 250 :             SEGDES MYxMAT
 251 :             SEGDES JMTLS9
 252 : *     
 253 : * remplissage du chapeau
 254 : *     
 255 :             NRIGE=MATLS9.IRIGEL(/1)
 256 :             NRIGEL=MATLS9.IRIGEL(/2)+1
 257 :             SEGADJ,MATLS9
 258 :             MATLS9.COERIG(NRIGEL)=1.D0
 259 :             MATLS9.IRIGEL(1,NRIGEL)=RIGMEL
 260 :             MATLS9.IRIGEL(2,NRIGEL)=0
 261 :             MATLS9.IRIGEL(3,NRIGEL)=MYDSCR
 262 :             MATLS9.IRIGEL(4,NRIGEL)=MYxMAT
 263 :             MATLS9.IRIGEL(5,NRIGEL)=0
 264 :             MATLS9.IRIGEL(6,NRIGEL)=0
 265 : *     
 266 : * la matrice ne possède pas de symétries (a priori...)
 267 : *     
 268 :             MATLS9.IRIGEL(7,NRIGEL)=2
 269 :          ENDIF
 270 :       ENDDO
 271 :       SEGDES IMTLS9
 272 :       SEGDES NCVARD
 273 :       SEGDES NCVARP
 274 :       SEGDES MATLS9
 275 :       IF (IMPR.GT.3) THEN
 276 :          WRITE(IOIMP,*) 'On a créé MATLS9=',MATLS9
 276 :          CALL ECROBJ('RIGIDITE',MATLS9)
 276 :          CALL PRLIST
 277 :       ENDIF
 278 : *     
 279 : * Normal termination
 280 : *     
 281 :       IRET=0
 282 :       RETURN
 283 : *     
 284 : * Format handling
 285 : *     
 286 : *     
 287 : * Error handling
 288 : *     
 289 :  9999 CONTINUE
 290 :       IRET=1
 291 :       WRITE(IOIMP,*) 'An error was detected in subroutine cv2ma9'
 292 :       RETURN
 293 : *     
 294 : * End of subroutine CV2MA9
 295 : *     
 296 :       END
 297 : 
 298 :  
 299 :  
 300 :  

© Cast3M 2003 - All rights reserved.
Disclaimer