Télécharger rigixr.eso

Retour à la liste

Numérotation des lignes :

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

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