Download massxr.eso

Back to the list

   1 : C MASSXR    SOURCE    FANDEUR   11/07/19    21:16:36     7041           
   2 : 
   3 :       subroutine  MASSXR (ISOUSS,IMODEL,
   4 :      $                    IVAMAT,IVACAR,NMATT,CMATE,
   5 :      $                    IIPDPG,IPMASS,IRETER)
   6 : C
   7 : C Les sous programmes affectés à un type d'élément sont chargés
   8 : C de faire le tri des éléments suivant le type d'enrichissement.
   9 : c
  10 : C Par exemple le XQ4R peut sortir :
  11 : c     - des matrices ne comportant que des ddl standard du QUA4,
  12 : c     - des matrices enrichies par le saut du à la fissure, 
  13 : c     - des matrices enrichies par le saut et par les fonctions de 
  14 : c       la mécanique de la rupture
  15 : c
  16 : C Donc pour 1 type d'EF, on crée 1+NENR objet elementaire IMATTT
  17 : C Pour y parvenir, on utilise le tableau LOCIRI (=LOCal IRIgel)
  18 : c qui est l'équivalent local de IRIGEL et qui doit etre rempli
  19 : C par les sous programmes élémentaires (comme MASSX.eso).
  20 : c Il est dimensionné en dur à (10,6) au lieu de (8,1+NENR) 
  21 : c pour etre large.
  22 : C
  23 : C Finalement, MASSXR.eso recupere LOCIRI, ajuste et remplit IRIGEL
  24 : c
  25 :       IMPLICIT REAL*8 (A-H,O-Z)
  26 :       IMPLICIT INTEGER (I-N)
  27 : C
  28 : -INC CCOPTIO
  29 : -INC SMRIGID
  30 : -INC SMINTE
  31 : -INC SMMODEL
  32 : -INC SMELEME
  33 : C
  34 :       CHARACTER*8 CMATE
  35 :       PARAMETER (NBENRMAX=5)
  36 :       INTEGER    LOCIRI(10,(1+NBENRMAX))
  37 : c
  38 :       SEGMENT MPTVAL
  39 :         INTEGER      IPOS(NS),NSOF(NS)
  40 :         INTEGER      IVAL(NCOSOU)
  41 :         CHARACTER*16 TYVAL(NCOSOU)
  42 :       ENDSEGMENT
  43 : c
  44 : c      write(ioimp,*) '##### entree dans MASSxr #####'
  45 :       IRETER=0
  46 : C
  47 : Ccccc on active le modele, les caracteristiques materiau
  48 : c      segact,imodel    deja actif
  49 :       mele = nefmod
  50 : 
  51 : C       element XQ4R (2D rupture) ou element XC8R (3D rupture)
  52 :       IF (mele.ne.263 .and. mele.ne.264) then
  52 :          call erreur (21)
  53 :          RETURN
  54 :       ENDIF
  55 : 
  56 : C      mptval=ivacar
  57 : c      segact mptval    deja actif
  58 : 
  59 : Ccccc on initialise LOCIRI
  60 :       do i1=1,10
  61 :        do i2=1,(1+NBENRMAX)
  62 :          LOCIRI(i1,i2) = 0
  63 :        enddo
  64 :       enddo
  65 : C
  66 : ccccc Appel au calcul des rigidites elementaires
  66 :          call MASSX(ivamat,ivacar,NMATT,CMATE,
  67 :      &              imodel,LOCIRI)
  68 : c
  69 : ccccc de combien faut-il augmenter INFELE ?
  70 : C     write(ioimp,*) 'LOCIRI=',(LOCIRI(1,iou),iou=1,5)
  71 :       nrigsup = -1
  72 :       do i=1,(1+NBENRMAX)
  73 :         if(LOCIRI(1,i).ne.0)  nrigsup=nrigsup+1
  74 :       enddo
  75 :       if (nrigsup.eq.-1) then
  76 :        write(ioimp,*) 'on n a meme pas reussi a construire des ',
  77 :      &                'rigidites associees aux ddl std'
  77 :         CALL ERREUR(21)
  78 :         return
  79 :       endif
  80 : c      write(ioimp,*) 'nrigsup=',nrigsup
  81 : C      if (nrigsup.gt.0)
  82 : C     & write(ioimp,*) 'on doit augmenter IRIGEL de MASS de',nrigsup,
  83 : C     & ' rigidites elementaires'
  84 : 
  85 : c      write(ioimp,*) 'ccccc on ouvre en modification MRIGID'
  86 :       MRIGID=IPMASS
  87 :       segact,MRIGID*mod
  88 : 
  89 :       NRIGE   = IRIGEL(/1)
  90 :       nrigini = IRIGEL(/2)
  91 :       NRIGEL  = nrigini + nrigsup
  92 :       IF (nrigsup.gt.0) then
  93 :         segadj,MRIGID
  94 :       ENDIF
  95 : 
  96 : c      write(ioimp,*) 'ccccc remplissage de MRIGID'
  97 : *
  98 : c  Cas ou il ya une partie std -----------------------
  99 :       if (LOCIRI(1,1).ne.0) then
 100 : *
 101 : c   + partie non enrichie (=std)
 102 :         do i1 = 1, NRIGE
 103 :           IRIGEL(i1,isouss)=LOCIRI(i1,1)
 104 :         enddo
 105 :         COERIG(isouss)= 1.D0
 106 : 
 107 : c   + partie enrichie
 108 :         if (nrigsup.gt.0) then
 109 : C       write(ioimp,*) 'c       modification de la taille de MRIGID de MASS'
 110 : C     &                ,isouss,'->',isouss+nrigsup
 111 :           ia = ISOUSS
 112 :           iloc = 1
 113 :           do i = 1, nrigsup
 114 :             ia = ia + 1
 115 : c       petit ajout pour le cas ou on a "sauté" le H-enrichissement
 116 :  1000       continue
 117 :             iloc = iloc + 1
 118 : C         write(ioimp,*) 'massxr: nrigini,ia,iloc=',nrigini,ia,iloc
 119 :             if( (LOCIRI(1,iloc)) .eq. 0)    goto 1000
 120 :             do i1 = 1,NRIGE
 121 : C     write(ioimp,*)'IRIGEL(',i1,ia,')=LOCIRI(',i1,iloc,')=',LOCIRI(i1,iloc)
 122 :               IRIGEL(i1,ia) = LOCIRI(i1,iloc)
 123 :             enddo
 124 :             COERIG(ia)= 1.D0
 125 :           enddo
 126 :           ISOUSS = ISOUSS + nrigsup
 127 :         endif 
 128 : c
 129 : c  Cas ou il n y a pas (plus) de partie std -----------------------
 130 :       ELSE
 131 :       
 132 : c   + partie enrichie
 133 :         ia = ISOUSS - 1
 134 :         iloc = 1
 135 :         do i = 0, nrigsup
 136 :           ia = ia + 1
 137 : c         petit ajout pour le cas ou on a "sauté" le H-enrichissement
 138 :  2000     continue
 139 :           iloc = iloc + 1
 140 :           if( (LOCIRI(1,iloc)) .eq. 0)    goto 2000
 141 :           do i1=1,NRIGE
 142 :             IRIGEL(i1,ia) = LOCIRI(i1,iloc)
 143 :           enddo
 144 :           COERIG(ia)= 1.D0
 145 :         enddo
 146 :         ISOUSS = ISOUSS + nrigsup
 147 : 
 148 :       endif 
 149 : *
 150 : c      write(ioimp,*) 'IRIGEL=',(IRIGEL(1,iou),iou=1,NRIGEL)
 151 : 
 152 :       return
 153 :       end
 154 :  
 155 :  

© Cast3M 2003 - All rights reserved.
Disclaimer