Download accro3.eso

Back to the list

   1 : C ACCRO3    SOURCE    BP208322  12/12/17    21:15:05     7615           
   2 :       SUBROUTINE ACCRO3
   3 : C========================================================================  
   4 : C   Cree la matrice de liaison entre le champ u et w 
   5 : C   avec une formulation forte  => On utilise les fonctions de forme 
   6 : C   et on identifie le deplacement aux noeuds de la fissure
   7 : c
   8 : c   On prend en compte les enrichissements XFEM
   9 : c
  10 : C   Creation : BP, decembre 2012
  11 : C   Modifications : ...
  12 : C
  13 : C========================================================================  
  14 :                                                                
  15 :       IMPLICIT INTEGER(I-N)
  16 :       IMPLICIT REAL*8 (A-H,O-Z)  
  17 : 
  18 : -INC CCREEL                                                
  19 : -INC CCOPTIO                                                                    
  20 : -INC SMCOORD                                                                    
  21 : -INC SMELEME 
  22 : -INC SMRIGID
  23 : -INC SMLMOTS
  24 : -INC CCHAMP
  25 : -INC CCGEOME
  26 : -INC SMMODEL
  27 : -INC SMINTE
  28 : -INC SMCHAML
  29 : -INC SMLREEL
  30 : 
  31 : 
  32 : C  Segment contenant les informations sur un element
  33 :       SEGMENT INFO
  34 :         INTEGER INFELL(JG)
  35 :       ENDSEGMENT
  36 :      
  37 :       POINTEUR INFO1.INFO,INFO2.INFO
  38 :       POINTEUR    MCHEX1.MCHELM
  39 :       external shape
  40 :       DATA EPSI/1.D-9/
  41 :       DIMENSION ICOR(6),IMEL(6),imtt(10)
  42 :       DIMENSION QSI(3),XPO(3)
  43 :       
  44 : C  INITIALISATION DES INCONNUES obligatoires et facultatives
  45 :       PARAMETER (NOBL=3,NFAC=9)
  46 :       CHARACTER*4 DDLOBL(NOBL),DDLFAC(NFAC),MODDL,MODDL2
  47 :       CHARACTER*4 DUAOBL(NOBL),DUAFAC(NFAC)     
  48 : 
  49 :       DATA DDLOBL/'UX  ','UY  ','UZ  '/
  50 :       DATA DDLFAC/'AX  ','AY  ','AZ  ',
  51 :      >'B1X ','B1Y ','B1Z ',
  52 :      >'B2X ','B2Y ','B2Z '/
  53 :       DATA DUAOBL/'FX  ','FY  ','FZ  '/
  54 :       DATA DUAFAC/'FAX ','FAY ','FAZ ',
  55 :      >'FB1X','FB1Y','FB1Z',
  56 :      >'FB2X','FB2Y','FB2Z'/
  57 : 
  58 : 
  59 : c-----------------------------------------------------
  60 : c     Segment de travail
  61 : c-----------------------------------------------------
  62 :       SEGMENT MTRAV 
  63 :         REAL*8 XE2(3,NBNN2)
  64 :         REAL*8 SHPP1(6,NBNN1)
  65 :         REAL*8 XE1(3,NBNN1)
  66 :         INTEGER IDEJVU(NBPTS)
  67 :       ENDSEGMENT
  68 : 
  69 : c    tableaux comptant le nbre d EF de chaque ddl
  70 :       PARAMETER(NDDLMAX=6)
  71 :       INTEGER NELDDL(NDDLMAX)
  72 : 
  73 :       if(iimpi.ge.2) then
  74 :       write(ioimp,*) '-----------------------------------------------'
  75 :       write(ioimp,*) '               ENTREE dans ACCRO3'
  76 :       write(ioimp,*) '-----------------------------------------------'
  77 :       endif
  78 : 
  79 : c     Preliminaires
  80 :       idim1 = idim + 1
  81 :       SEGACT,MCOORD*mod
  82 :       NBPTS = (XCOOR(/1)/idim1) 
  83 : 
  84 : c-----------------------------------------------------
  85 : c     RECUPERATION DU MAILLAGE MASSIF
  86 : c-----------------------------------------------------
  86 :       CALL LIROBJ ('MMODEL',IPMODL,1,IRETOU)
  87 :       IF(IERR.NE.0) RETURN   
  88 :       MMODE1=IPMODL
  89 :       segact,MMODE1
  90 : c  Récupération du nombre de zones du modèle
  91 :       N1 = MMODE1.KMODEL(/1)
  92 :       if(N1.gt.1) write(ioimp,*) 'attention 1 seule zone a ce jour!'
  93 :       IMODE1 = MMODE1.KMODEL(1)
  94 :       segdes,MMODE1
  95 : C Récupération du maillage et du numéro d'élément du modèle
  96 :       segact,IMODE1
  97 :       nele1 = IMODE1.NEFMOD
  98 :       IPT1 = IMODE1.IMAMOD
  99 :       SEGACT IPT1
 100 : C Récupération du numéro d'élément du maillage, du nombre de noeuds et d'éléments
 101 :       iele1 = IPT1.itypel
 102 :       nbnn1 = IPT1.num(/1)
 103 :       nbel1 = IPT1.num(/2)
 104 : c   récupération des caractéristique EF IPT1
 104 :       call elquoi(nele1,0,3,IPTR1,IMODE1)
 105 :       segdes,IMODE1
 106 :       INFO = IPTR1
 107 :       segact,INFO
 108 :       mele1 =  INFELL(1) 
 109 :       MINTE1 = INFELL(11)
 110 :       segdes,INFO
 111 : 
 112 : c-----------------------------------------------------
 113 : c     RECUPERATION DU MAILLAGE INTERFACE
 114 : c-----------------------------------------------------
 115 :       IPMAI2 = 0
 115 :       CALL LIROBJ ('MMODEL',IPMODL,0,IRETOU)
 116 :       IF(IERR.NE.0) RETURN   
 117 :       if (IRETOU.EQ.1)then
 118 :          MMODE2=IPMODL
 119 :          segact,MMODE2
 120 :          N2 = MMODE2.KMODEL(/1)
 121 :          if(N2.gt.1) write(ioimp,*) 'attention 1 seule zone a ce jour!'
 122 :          IMODE2 = MMODE2.KMODEL(1)
 123 :          segdes,MMODE2
 124 :          segact,IMODE2
 125 :          nele2 = IMODE2.NEFMOD
 126 :          IPT2 = IMODE2.IMAMOD
 127 :          SEGACT IPT2
 128 : c pour l'instant on dit que nele = iele (marche pour iele entre 2 et 26, voir bdata.eso)
 129 :          iele2 = IPT2.itypel
 130 :          nbnn2 = IPT2.num(/1)
 131 :          nbel2 = IPT2.num(/2)
 132 : 
 133 : c   recuperation des caracteritiques de l'element
 134 : c         write(ioimp,*) 'appel elquoi',iele2,nele2
 134 :          call elquoi(nele2,0,3,IPTR2,IMODE2)
 135 :  1       segdes,IMODE2
 136 :          INFO = IPTR2
 137 :          segact,INFO
 138 :          MINTE2 = INFELL(11)
 139 :          ngau2 = INFELL(6)
 140 :          segdes,INFO
 141 :       else
 142 : C Dans le cas où on a un maillage en entrée
 142 :          CALL LIROBJ('MAILLAGE',IPMAI2,1,IRETOU)
 143 :          IF(IERR.NE.0) RETURN
 144 :          IPT2 = IPMAI2  
 145 :          SEGACT IPT2
 146 : c pour l'instant on dit que nele = iele (marche pour iele entre 2 et 26, voir bdata.eso)
 147 :          iele2 = IPT2.itypel
 148 :          nele2 = iele2
 149 :          if (nele2.lt.2.or.nele2.gt.26) then
 150 :          write(ioimp,*)'element geometrique different de l element fini'
 150 :             call erreur(16)
 151 :          endif
 152 :          nbnn2 = IPT2.num(/1)
 153 :          nbel2 = IPT2.num(/2)
 154 : c     SEG2
 155 :          if (nele2.EQ.2) ngau2 = 2
 156 : c     SEG3
 157 :          if (nele2.EQ.3) ngau2 = 3
 158 : c     TRI3
 159 :          if (nele2.EQ.4) ngau2 = 1
 160 : c     TRI6
 161 :          if (nele2.EQ.6) ngau2 = 4
 162 : c     QUA4
 163 :          if (nele2.EQ.8) ngau2 = 4
 164 : c     QUA8
 165 :          if (nele2.EQ.10) ngau2 = 9      
 166 :       endif
 167 : 
 167 :       call RESHPT(ngau2,nbnn2,iele2,nele2,0,IPTR2,IRET)
 168 :       MINTE2 = IPTR2
 169 :       segact,MINTE1,MINTE2
 170 : 
 171 : 
 172 : c-----------------------------------------------------
 173 : c     RECHERCHE DU MCHAML ISSU MCHEX1 D ENRICHISSEMENT
 174 : c-----------------------------------------------------
 175 :       MCHAM1=0
 176 :       NBENR2=0    
 177 :       segact,IMODE1
 178 :       NOBMOD = IMODE1.IVAMOD(/1)
 179 :       IF (NOBMOD.NE.0) THEN
 180 :          DO 1002 iobmo1=1,NOBMOD          
 181 :             if((IMODE1.TYMODE(iobmo1)).ne.'MCHAML')   goto 1002
 182 :             MCHEX1 = IMODE1.IVAMOD(iobmo1)
 183 :             segact,MCHEX1
 184 :             if((MCHEX1.TITCHE).ne.'ENRICHIS')  goto 1003            
 185 :             MCHAM1 = MCHEX1.ICHAML(1)
 186 :             segact,MCHAM1
 187 :             NBENR2 = MCHAM1.IELVAL(/1)
 188 :             do ienr2=1,NBENR2
 189 :                MELVA1=MCHAM1.IELVAL(IENR2)
 190 :                if(MELVA1.ne.0) segact,MELVA1
 191 :             enddo
 192 :  1003       continue            
 193 :             segdes,MCHEX1
 194 :  1002    CONTINUE         
 195 :       ENDIF
 196 : 
 197 : c-------------------------------------
 198 : c     INITIALISATION DES OBJETS DE TRAVAIL : MTRAV et ITYMAT
 199 : c-------------------------------------
 200 :       segini,MTRAV
 201 : *bp : NTYMAT = (U ou H ou HB1 ou HB1B2) 
 202 : *     nbre de types de matrices = NRIGEL = NTYMAT * idim
 203 : c       NTYMAT = 4
 204 :       NTYMAT = 1+NBENR2
 205 : 
 206 : c-------------------------------------
 207 : c     INITIALISATION DU MCOORD
 208 : c-------------------------------------
 209 :       NBPTS0 = NBPTS
 210 :       NBPTS = NBPTS0 + ((nbel2 + 1)*idim*3)
 211 :       SEGADJ,MCOORD
 212 :       NBPTS = NBPTS0
 213 : *     on compte le vrai nombre de LX ajouté via NBPTS     
 214 : 
 215 : c--------------------------------------------------------------------
 216 : c     INITIALISATION DU SEGMENT MRIGID
 217 : c--------------------------------------------------------------------
 218 :       NRIGEL = NTYMAT*idim
 219 :       segini,MRIGID
 220 :       IFORIG = IFOUR
 221 :       MTYMAT ='RIGIDITE' 
 222 : c    -on prepare le meleme
 223 :       NBSOUS = 0
 224 :       NBREF = 0
 225 :       
 226 :       ityty=0
 227 : c on initialise la taille matrice en fonction du type de matrice 
 228 :       do ity=1,NTYMAT
 229 :       do iidim=1,idim
 230 :       
 231 :          ityty=ityty+1
 232 :          COERIG(ityty) = 1.D0
 233 :          
 234 : *     dim de la matrice RE elementaire 
 235 : *     = 1 (LX) + 1 (UX) +   nbnoeud (UX)
 236 : *     = 1 (LX) + 1 (AX) +   nbnoeud (AX)
 237 : *     = 1 (LX) + 1 (AX) + 2*nbnoeud (AX+B1X)
 238 : *     = 1 (LX) + 1 (AX) + 3*nbnoeud (AX+B1X+B2X)
 239 :          nbno1 = nbnn1
 240 :          nenr1 = ity
 241 :          if(nenr1.le.2) then
 242 :            NLIGRP = 1 + 1 + nbno1
 243 :          else
 244 :            NLIGRP = 1 + 1 + ((nenr1-1)*nbno1)
 245 :          endif
 246 :          NLIGRD = NLIGRP
 247 :          
 248 : c       -creation du MELEME 
 249 :          NBNN = 2 + nbno1
 250 :          NBELEM=0
 251 :          SEGINI,MELEME
 252 : c          ITYPEL=28
 253 :          ITYPEL=22
 254 :          IRIGEL(1,ityty) = MELEME
 255 :          
 256 : c       -remplissage du DESCR
 257 :          SEGINI,DESCR
 258 :          IRIGEL(3,ityty) = DESCR
 259 :          iddl=0
 260 : c        remplissage des ddl LX de la fissure 
 261 :          iddl=iddl+1
 262 :          LISINC(iddl)='LX'
 263 :          LISDUA(iddl)='FLX'
 264 :          NOELEP(iddl)=1
 265 :          NOELED(iddl)=1
 266 : c        remplissage des ddl UX de la fissure (ici appelé WX) []*WX=TX
 267 :          iddl=iddl+1
 268 :          if (nenr1.eq.1) then
 269 :            LISINC(iddl)=DDLOBL(iidim)
 270 :            LISDUA(iddl)=DUAOBL(iidim)
 271 :          else
 272 :            LISINC(iddl)=DDLFAC(iidim)
 273 :            LISDUA(iddl)=DUAFAC(iidim)
 274 :          endif
 275 :          NOELEP(iddl)=2
 276 :          NOELED(iddl)=2
 277 : c        remplissage des ddl de la structure
 278 :          if (nenr1.eq.1) then
 279 :            do ino1=1,nbno1
 280 :                iddl=iddl+1
 281 :                LISINC(iddl)=DDLOBL(iidim)
 282 :                LISDUA(iddl)=DUAOBL(iidim)
 283 :                NOELEP(iddl)=2+ino1
 284 :                NOELED(iddl)=2+ino1
 285 :            enddo
 286 :          else
 287 :            do ini1=1,(nenr1-1)
 288 :            do ino1=1,nbno1
 289 :                iddl=iddl+1
 290 :                LISINC(iddl)=DDLFAC(iidim+(3*(ini1-1)))
 291 :                LISDUA(iddl)=DUAFAC(iidim+(3*(ini1-1)))
 292 :                NOELEP(iddl)=2+ino1
 293 :                NOELED(iddl)=2+ino1
 294 :            enddo
 295 :            enddo
 296 :          endif
 297 :          if(iimpi.ge.3) write(ioimp,*) ityty,(LISINC(iou),iou=1,NLIGRP)
 298 :          if(iimpi.ge.3) write(ioimp,*) ityty,(NOELEP(iou),iou=1,NLIGRP)
 299 :          SEGDES,DESCR
 300 :          
 301 : c       -initialisation du XMATRI
 302 :          NELRIG=0
 303 :          SEGINI,XMATRI
 304 :          IRIGEL(4,ityty) = XMATRI
 305 :          IRIGEL(5,ityty) = NIFOUR
 306 :          IRIGEL(6,ityty) = 0
 307 :          IRIGEL(7,ityty) = 0
 308 :          IRIGEL(8,ityty) = 0
 309 :          
 310 :       enddo
 311 :       enddo
 312 :       
 313 : 
 314 : c----------------------------------------------------------------------
 315 : c     1. RECHERCHE DES ELEMENTS DE STRUCTURE CONTENANT DES POINTS DE GAUSS 
 316 : c        DES ELEMENTS DE LA FISSURE
 317 : c     2. REMPLISSAGE DU MRIGID (XMATRI et MELEME)
 318 : c----------------------------------------------------------------------
 319 :       iaccro=0
 320 :       NODES=0
 321 : C 
 322 : c==== Boucle sur les elements de fissure ==============================
 323 :       DO 1100 iem2=1,nbel2     
 324 :             
 324 :          call doxe(xcoor,idim,nbnn2,ipt2.num,iem2,xe2)
 325 :          nbenrj = 0
 326 : 
 327 : c======= Boucle sur les noeuds de fissure ============================
 328 :          DO 1132 ino2=1,nbnn2
 329 :          
 330 : c   on n'attache qu'une seule fois chaque noeud
 331 :             inode2 = IPT2.NUM(ino2,iem2)
 332 :             if(IDEJVU(inode2).ne.0) goto 1132
 333 :             IDEJVU(inode2)=1
 334 :             NODES=NODES+1
 335 :          
 336 : c   récupération des coordonnees du point de gauss dans le repère global
 337 :             XPO(1) = xe2(1,ino2)
 338 :             XPO(2) = xe2(2,ino2)
 339 :             XPO(3) = xe2(3,ino2)
 340 : 
 341 : c---------- Boucle sur les elements de structure ----------------------
 342 :             DO 1131 iem1=1,nbel1
 343 :             
 344 : c   si pas d'enrichissement, on travaille sur tous les elements
 345 :                if(MCHAM1.eq.0) goto 1133
 346 : c   on saute les elements non enrichi car a priori ne contiennent pas la fissure
 347 :                do ienr2=1,NBENR2
 348 :                   MELVA1=MCHAM1.IELVAL(IENR2)
 349 :                   if(MELVA1.ne.0) then
 350 :                     do inode1=1,nbnn1
 351 :                   if(MELVA1.IELCHE(inode1,iem1).ne.0) goto 1133
 352 :                     enddo
 353 :                   endif
 354 :                enddo
 355 :                goto 1131
 356 :  1133          continue
 357 :   
 358 : c   recuperation des coordonnées des noeuds de IPT1 : xe1 (dans le repère x,y,z)
 358 :                call doxe(xcoor,idim,nbnn1,ipt1.num,iem1,xe1)  
 359 : 
 360 : c   calcul des fonctions de formes de IPT1 au pt de Gauss de IPT2
 360 :                call QSIJS(xe1,iele1,nbnn1,idim,XPO,SHPP1,qsi,IRET)
 361 : 
 362 : c   test pour savoir si PG est dans EF de IPT1 
 363 :                DO 1130 ino1=1,NBNN1
 364 :                   if (SHPP1(1,ino1).LT.-1.01D-7) then
 365 :                      go to 1131
 366 :                   endif
 367 :  1130          continue
 368 : c ON a trouvé : l'iem1 élément de structure contient ce noeud de fissure
 369 :                IDEJVU(inode2)=10
 370 :                iaccro=iaccro+1
 371 :             
 372 : c     DETECTION DU TYPE D'ENRICHISSEMENT MAX DE CET ELEMENT = nbenrj
 373 :                DO 3001 IENR2=1,NBENR2
 374 :                  MELVA1=MCHAM1.IELVAL(IENR2)
 375 :                  IF(MELVA1.eq.0) GOTO 3001
 376 :                  DO 3002 ino1=1,nbnn1                  
 377 :                    MLREEL = MELVA1.IELCHE(ino1,iem1)                  
 378 : c                  Test pour savoir si le noeud est enrichi
 379 :                    IF(MLREEL.eq.0) GOTO 3002
 380 :                    nbenrj=max(nbenrj,IENR2)
 381 :  3002            continue
 382 :  3001          continue
 383 : 
 384 :                if(iimpi.ge.3) write(ioimp,*) 'EF fissure ',iem2, 
 385 :      &         ' ptdeG ',ino2,' -> EF MASSIF ',iem1,' nbenrj=',nbenrj
 386 :  
 387 :  
 388 : c Remplissage du MRIGID
 389 : 
 390 : c           ---Boucle sur la Partie standard et enrichie ---
 391 :                do 6000 ity=1,min(2,NTYMAT)              
 392 : c           ---Boucle sur la dimension ---
 393 : c              rem : utile uniquement pour le meleme 
 394 : c          (on pourrait garder le meme xmatri pour les differents iidim)
 395 :                do 6000 iidim=1,idim
 396 :                
 397 :                  if(ity.eq.1) then
 398 :                    ityty = iidim
 399 :                  else
 400 :                    ityty = (nbenrj*idim) + iidim
 401 :                  endif
 402 :                  MELEME = IRIGEL(1,ityty)
 403 :                  XMATRI = IRIGEL(4,ityty)
 404 :                  NBELEM = NUM(/2)+1
 405 :                  NLIGRD = RE(/1)
 406 :                  NLIGRP = RE(/2)
 407 :                  NELRIG = RE(/3)+1
 408 :                  segadj,MELEME
 409 :                  segadj,XMATRI
 410 :                 
 411 : c Remplissage du MELEME
 412 : c                traitement du LX
 413 :                  NBPTS = NBPTS + 1
 414 :                  if(NBPTS.gt.(XCOOR(/1)/idim1)) then
 415 :                    NBPTS0 = NBPTS
 416 :                    NBPTS = NBPTS0 + (nbel2 + 1)
 417 :                    SEGADJ,MCOORD
 418 :                    NBPTS = NBPTS0
 419 :                  endif
 420 :                  NUM(1,NBELEM) = NBPTS
 421 :                  XCOOR((NBPTS-1)*idim1 +1) = XCOOR((inode2-1)*idim1 +1) 
 422 :                  XCOOR((NBPTS-1)*idim1 +2) = XCOOR((inode2-1)*idim1 +2)
 423 :                  if(idim.eq.3)
 424 :      &           XCOOR((NBPTS-1)*idim1 +3) = XCOOR((inode2-1)*idim1 +3) 
 425 : c                traitement du noeud de la fissure
 426 :                  NUM(2,NBELEM) = inode2
 427 : c                traitement des noeuds de la structure
 428 :                  inono=2
 429 : cbp inutile      do j2=1,max(1,nbenrj)
 430 : cbp inutile car noelep boucle deja sur les enrichissement
 431 :                  do ino1=1,nbnn1
 432 :                    inono=inono+1
 433 :                    NUM(inono,NBELEM) = IPT1.NUM(ino1,iem1)
 434 :                  enddo
 435 : c                enddo
 436 :                  
 437 : c Remplissage du XMATRI
 438 : c                traitement du terme LX - ddl fissure
 439 :                  RE(1,2,NELRIG)=1.d0
 440 :                  RE(2,1,NELRIG)=1.d0
 441 : c                traitement des terme LX - ddl structure
 442 :                  inono=2
 443 : c                UX = UX seulement
 444 :                  if(ity.eq.1) then
 445 :                    do ino1=1,nbnn1
 446 :                      inono=inono+1
 447 :                      RE(1,inono,NELRIG)=-1.d0*SHPP1(1,ino1)
 448 :                      RE(inono,1,NELRIG)=-1.d0*SHPP1(1,ino1)
 449 :                    enddo
 450 :                  else
 451 : c                  AX = AX ...
 452 :                    if(nbenrj.ge.1) then
 453 :                      MELVA1 = MCHAM1.IELVAL(1)
 454 :                      do ino1=1,nbnn1
 455 :                        MLREEL = MELVA1.IELCHE(ino1,iem1)
 456 :                        inono=inono+1
 457 :                        if(MLREEL.ne.0) then
 458 :                          RE(1,inono,NELRIG)=-1.d0*SHPP1(1,ino1)
 459 :                          RE(inono,1,NELRIG)=-1.d0*SHPP1(1,ino1)
 460 :                        endif
 461 :                      enddo
 462 :                    endif
 463 : c                  ... + B1X + B2X
 464 :                    if(nbenrj.ge.2) then
 465 :                      do jenrj=2,nbenrj
 466 : c                      on ecrit B1X pour les nbnn1 noeuds, puis B2X ...
 467 :                        MELVA1 = MCHAM1.IELVAL(jenrj)
 468 :                        do ino1=1,nbnn1
 469 :                          MLREEL = MELVA1.IELCHE(ino1,iem1)
 470 :                          if(MLREEL.eq.0) then                   
 471 : c                          pas d'enrichissement => on met 0
 472 :                            RX05   = 0.d0
 473 :                          else
 474 :                            SEGACT,MLREEL
 475 :                            PSIX = 0.d0
 476 :                            do iii0 = 1,nbnn1
 477 :                              PSIX = PSIX + (SHPP1(1,iii0) * PROG(iii0))
 478 :                            enddo
 479 :                            SEGDES,MLREEL
 480 :                            RX05= -1.d0*SQRT(ABS(PSIX))
 481 :                          endif
 482 :                          inono=inono+1
 483 :                          RE(1,inono,NELRIG)=RX05*SHPP1(1,ino1)
 484 :                          RE(inono,1,NELRIG)=RX05*SHPP1(1,ino1)                     
 485 :                        enddo
 486 :                      enddo
 487 :                    endif
 488 :                  endif
 489 : 
 490 :  6000          continue           
 491 : c           ---fin de Boucle sur les XMATRI et MELEME 
 492 : c              des Partie standard et enrichie et sur les dimensions ---
 493 : 
 494 : c              on a trouvé le iem1 élément et on a fait le travail : 
 495 : c              on passe au point de gauss suivant
 496 :                goto 1132               
 497 : 
 498 :  1131       CONTINUE          
 499 : c---------- fin de la Boucle sur les elements de structure -------------
 500 :             if(iimpi.ge.2) write(ioimp,*)
 501 :      1      'Fin de la boucle sur les elements de structure'
 502 :      
 503 :             if(IDEJVU(inode2).ne.10) then
 504 :          write(ioimp,*) 'Attention le noeud ',inode2,' est hors support'
 505 :             endif
 506 : 
 507 :  1132    CONTINUE
 508 : c======= fin de la Boucle sur les noeuds de fissure ===================
 509 :  
 510 : 
 511 : 
 512 :  1100 CONTINUE          
 513 : c==== fin de la Boucle sur les elements de fissure =====================
 514 :       
 515 : c MESSAGE : Nombre de points accrochés %i1  sur  %i2 proposés
 516 :       INTERR(1)=iaccro
 517 :       INTERR(2)=NODES
 517 :       CALL ERREUR(-319)
 518 : 
 519 : c------------------------------------
 520 : c     AJUSTEMENT AVANT DE QUITTER
 521 : c------------------------------------
 522 :       
 523 :       if(iimpi.ge.2) write(ioimp,*) 'AJUSTEMENT AVANT DE QUITTER'
 524 : c     NBPTS est deja le vrai nomber de noeuds
 525 :       SEGADJ,MCOORD
 526 :        
 527 : C     BOUCLE SUR LES SOUS RIGIDITÉS
 528 :       ityok = 0
 529 :       DO 2000 ityty=1,(idim*NTYMAT)        
 530 :          MELEME = IRIGEL(1,ityty)
 531 :          DESCR  = IRIGEL(3,ityty)
 532 :          XMATRI = IRIGEL(4,ityty)
 533 :          NBELEM = NUM(/2)
 534 :          if(NBELEM.ne.0) then
 535 :            ityok = ityok + 1
 536 :            IRIGEL(1,ityok) = MELEME
 537 :            IRIGEL(3,ityok) = DESCR
 538 :            IRIGEL(4,ityok) = XMATRI
 539 :            segdes,MELEME,XMATRI
 540 :          else
 541 :            segsup,MELEME,DESCR,XMATRI           
 542 :          endif
 543 :  2000 continue
 544 :       NRIGEL = ityok
 545 :       segadj,MRIGID
 546 : 
 547 : c-------------------------------
 548 : c     MENAGE AVANT DE QUITTER
 549 : c-------------------------------
 550 : 
 551 :       segsup,MTRAV
 552 :       segdes IPT1,IPT2
 553 :       if(MCHAM1.ne.0) segdes,MCHAM1
 554 :       SEGDES,MRIGID
 555 : 
 556 :       if(iimpi.ge.3) write(ioimp,*) 'ecriture du MRIGID',MRIGID
 556 :       CALL ECROBJ('RIGIDITE',MRIGID) 
 557 : 
 558 :       RETURN
 559 : 
 560 :       END
 561 : 
 562 : 
 563 : 
 564 : 
 565 : 
 566 :      
 567 :  

© Cast3M 2003 - All rights reserved.
Disclaimer