Télécharger massxr.eso

Retour à la liste

Numérotation des lignes :

massxr
  1. C MASSXR SOURCE OF166741 25/02/21 21:18:01 12166
  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.  
  28. -INC PPARAM
  29. -INC CCOPTIO
  30.  
  31. -INC SMRIGID
  32. -INC SMINTE
  33. -INC SMMODEL
  34. -INC SMELEME
  35.  
  36. -INC TMPTVAL
  37.  
  38. CHARACTER*8 CMATE
  39. PARAMETER (NBENRMAX=5)
  40. INTEGER LOCIRI(10,(1+NBENRMAX))
  41.  
  42. c write(ioimp,*) '##### entree dans MASSxr #####'
  43. IRETER=0
  44. C
  45. Ccccc on active le modele, les caracteristiques materiau
  46. c segact,imodel deja actif
  47. mele = nefmod
  48.  
  49. C element XQ4R (2D rupture) ou element XC8R (3D rupture)
  50. IF (mele.ne.263 .and. mele.ne.264) then
  51. call erreur (21)
  52. RETURN
  53. ENDIF
  54.  
  55. C mptval=ivacar
  56. c segact mptval deja actif
  57.  
  58. Ccccc on initialise LOCIRI
  59. do i1=1,10
  60. do i2=1,(1+NBENRMAX)
  61. LOCIRI(i1,i2) = 0
  62. enddo
  63. enddo
  64. C
  65. 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'
  78. CALL ERREUR(21)
  79. return
  80. endif
  81. c write(ioimp,*) 'nrigsup=',nrigsup
  82. C if (nrigsup.gt.0)
  83. C & write(ioimp,*) 'on doit augmenter IRIGEL de MASS de',nrigsup,
  84. C & ' rigidites elementaires'
  85.  
  86. c write(ioimp,*) 'ccccc on ouvre en modification MRIGID'
  87. MRIGID=IPMASS
  88. segact,MRIGID*mod
  89.  
  90. NRIGE = IRIGEL(/1)
  91. nrigini = IRIGEL(/2)
  92. NRIGEL = nrigini + nrigsup
  93. IF (nrigsup.gt.0) then
  94. segadj,MRIGID
  95. ENDIF
  96.  
  97. c write(ioimp,*) 'ccccc remplissage de MRIGID'
  98. *
  99. c Cas ou il ya une partie std -----------------------
  100. if (LOCIRI(1,1).ne.0) then
  101. *
  102. c + partie non enrichie (=std)
  103. do i1 = 1, NRIGE
  104. IRIGEL(i1,isouss)=LOCIRI(i1,1)
  105. enddo
  106. COERIG(isouss)= 1.D0
  107.  
  108. c + partie enrichie
  109. if (nrigsup.gt.0) then
  110. C write(ioimp,*) 'c modification de la taille de MRIGID de MASS'
  111. C & ,isouss,'->',isouss+nrigsup
  112. ia = ISOUSS
  113. iloc = 1
  114. do i = 1, nrigsup
  115. ia = ia + 1
  116. c petit ajout pour le cas ou on a "sauté" le H-enrichissement
  117. 1000 continue
  118. iloc = iloc + 1
  119. C write(ioimp,*) 'massxr: nrigini,ia,iloc=',nrigini,ia,iloc
  120. if( (LOCIRI(1,iloc)) .eq. 0) goto 1000
  121. do i1 = 1,NRIGE
  122. C write(ioimp,*)'IRIGEL(',i1,ia,')=LOCIRI(',i1,iloc,')=',LOCIRI(i1,iloc)
  123. IRIGEL(i1,ia) = LOCIRI(i1,iloc)
  124. enddo
  125. COERIG(ia)= 1.D0
  126. enddo
  127. ISOUSS = ISOUSS + nrigsup
  128. endif
  129. c
  130. c Cas ou il n y a pas (plus) de partie std -----------------------
  131. ELSE
  132.  
  133. c + partie enrichie
  134. ia = ISOUSS - 1
  135. iloc = 1
  136. do i = 0, nrigsup
  137. ia = ia + 1
  138. c petit ajout pour le cas ou on a "sauté" le H-enrichissement
  139. 2000 continue
  140. iloc = iloc + 1
  141. if( (LOCIRI(1,iloc)) .eq. 0) goto 2000
  142. do i1=1,NRIGE
  143. IRIGEL(i1,ia) = LOCIRI(i1,iloc)
  144. enddo
  145. COERIG(ia)= 1.D0
  146. enddo
  147. ISOUSS = ISOUSS + nrigsup
  148.  
  149. endif
  150. *
  151. c write(ioimp,*) 'IRIGEL=',(IRIGEL(1,iou),iou=1,NRIGEL)
  152.  
  153. return
  154. end
  155.  
  156.  
  157.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales