Télécharger elquoi.eso

Retour à la liste

Numérotation des lignes :

elquoi
  1. C ELQUOI SOURCE MB234859 25/09/08 21:15:21 12358
  2.  
  3. C=======================================================================
  4. C= Sous-programme ELQUOI =
  5. C= --------------------- =
  6. C= =
  7. C= Ce sous programme cree le(s) segment(s) d'integration =
  8. C= =
  9. C= Entrees : =
  10. C= --------- =
  11. C= IMODEL : pointeur sur un IMODEL, zone elementaire d'un MMODEL =
  12. C= INTTYP : type d'integration utilisee par l'operateur =
  13. C= =
  14. C= Sorties : =
  15. C= --------- =
  16. C= Si INTTYP > 0 : =
  17. C= IPTR : pointeur sur le segment d'integration au support INTTYP =
  18. C= Si INTTYP < 0 : =
  19. C= Complete le table INFMOD selon : =
  20. C= |ITYPI| =
  21. C= ----------------------------------------------------------------- =
  22. C= INFMOD(3) | 1 | NOEUDS ( appel a RENOEU ) =
  23. C= INFMOD(4) | 2 | points de GAUSS pour centre de GRAVITE =
  24. C= INFMOD(5) | 3 | points de GAUSS pour la RIGIDITE =
  25. C= INFMOD(6) | 4 | points de GAUSS pour la MASSE =
  26. C= INFMOD(7) | 5 | points de GAUSS pour les CONTRAINTES =
  27. C= | 6 | pas de calcul de segment d'integration =
  28. C= | 7 | FACE =
  29. C= | 8 | CENTREP1 =
  30. C= | 9 | MSOMMET =
  31. C= IPTR : pointeur sur le segment d'integration stockee a INFELE(11) =
  32. C=======================================================================
  33. SUBROUTINE ELQUOI(IMODEL,INTTYP,IPTR)
  34. C
  35. IMPLICIT INTEGER(I-N)
  36. IMPLICIT REAL*8(A-H,O-Z)
  37. C
  38. -INC PPARAM
  39. -INC CCOPTIO
  40. -INC CCGEOME
  41. -INC CCHAMP
  42. C= DEB === Formulation HHO ===== Include specifique ====================
  43. -INC CCHHOPA
  44. C= FIN === Formulation HHO =============================================
  45. -INC SMMODEL
  46. -INC SMELEME
  47. -INC SMLMOTS
  48. -INC SMINTE
  49. C=======================================================================
  50. C= INTEGR : SAVE local des pointeurs sur les segments d'integration =
  51. C= CAS GENERAL =
  52. C= NELFI : Nombre de types d'element FINI (= LNOMTP de bdata.eso) =
  53. C= NBMODE : Nombre de MODEs de calcul (= nb valeurs possibles IFOMOD) =
  54. C= NTYNTE : Nombre de TYPEs de segment D'INTEGRATION possibles =
  55. C= (voir la description de INTTYP ci-dessus) =
  56. C= NINFOS : Dimension (JG) du tableau infell (segment INFO) = 16 =
  57. C= On sauvegarde dans INTEGR(I,J) le pointeur sur un segment d'inte- =
  58. C= gration correspondant a l'element fini de type I et une integration =
  59. C= de type J. =
  60. C=======================================================================
  61. C Valeurs de IFOMOD : -1 0 1 2 3 4 5 6
  62. C PLAN AXIS FOUR TRID UNID UNID UNID FREQ
  63. C PLAN AXIS SPHE
  64. PARAMETER ( NELFI = 300 , NTYNTE = 9 , NBMODE = 8 )
  65. PARAMETER ( NINTEG = NELFI * NTYNTE * NBMODE , NINFOS = 16 )
  66. C
  67. INTEGER INTEGR(NELFI,NTYNTE,NBMODE)
  68. LOGICAL bstocke,bxelt
  69. C
  70. SAVE INTEGR
  71. DATA INTEGR / NINTEG*0 /
  72. C
  73. C Tests de verification :
  74. IF (NELFI.LT.LNOMTP) THEN
  75. WRITE(IOIMP,*)
  76. WRITE(IOIMP,*) 'ELQUOI : valeur de NELFI incorrecte !'
  77. WRITE(IOIMP,*) ' NELFI = ',NELFI,LNOMTP
  78. CALL ERREUR(5)
  79. RETURN
  80. ENDIF
  81. C
  82. C On se place sur la bonne "tranche" du tableau INTEGR :
  83. IBMODE = IFOMOD + 2
  84. IF (NBMODE.LT.IBMODE) THEN
  85. WRITE(IOIMP,*)
  86. WRITE(IOIMP,*) 'ELQUOI : valeur de NBMODE incorrecte !'
  87. WRITE(IOIMP,*) ' IBMODE = ',IBMODE,NBMODE,IFOMOD
  88. CALL ERREUR(5)
  89. RETURN
  90. ENDIF
  91. C
  92. MELE = IMODEL.NEFMOD
  93. C
  94. IF (MELE.GT.NELFI) THEN
  95. WRITE(IOIMP,*)
  96. WRITE(IOIMP,*) 'ELQUOI : incoherence NELFI & MELE ',NELFI,MELE
  97. CALL ERREUR(5)
  98. RETURN
  99. ENDIF
  100. C
  101. IF (IMODEL.INFMOD(/1).LT.1) THEN
  102. WRITE(IOIMP,*)
  103. WRITE(IOIMP,*) 'ELQUOI : INFMOD(/1) incorrect',INFMOD(/1),' < 1'
  104. CALL ERREUR(5)
  105. ENDIF
  106. C
  107. NPINT = INFMOD(1)
  108. NBGM = INFELE(3)
  109. NBGST = INFELE(4)
  110. NBG = INFELE(6)
  111. NBSH = INFELE(8)
  112. IELE = INFELE(14)
  113. C
  114. bstocke=(INTTYP.LT.0)
  115. IF (bstocke) THEN
  116. IDEB = 1
  117. IFIN = ABS(INTTYP)
  118. ELSE
  119. IDEB = INTTYP
  120. IFIN = IDEB
  121. ENDIF
  122. C
  123. IDETY = 0
  124. bxelt=((MELE.EQ.263).OR.(MELE.EQ.264))
  125. C =================================================================
  126. C Cas particulier XFEM
  127. C =================================================================
  128. IF (bxelt) THEN
  129. DO 20 ITYPI=IDEB,IFIN
  130. C
  131. C Infos pour l'element MELE, mode de calcul IBMODE deja creees
  132. IPT2=INTEGR(MELE,ITYPI,IBMODE)
  133. IF (IPT2.NE.0) GOTO 19
  134. C
  135. C ---------------------------------------------------------------
  136. C 1 : Segment d'integration aux noeuds
  137. C ---------------------------------------------------------------
  138. IF (ITYPI.EQ.1) THEN
  139. CALL RENOEU(IELE,MELE,NBSH,IPT2,IRT1)
  140. C ---------------------------------------------------------------
  141. C 2 : Segment d'integration au centre de gravite
  142. C ---------------------------------------------------------------
  143. ELSE IF (ITYPI.EQ.2) THEN
  144. CALL RESHPT(1,NBSH,IELE,MELE,NPINT,IPT2,IRT1)
  145. C ---------------------------------------------------------------
  146. C 3 : Segment d'integration pour la rigidite
  147. C ---------------------------------------------------------------
  148. ELSE IF (ITYPI.EQ.3) THEN
  149. CALL RESHPX(NBG,NBSH,IELE,MELE,NPINT,IPT2,IRT1)
  150. C ---------------------------------------------------------------
  151. C 4 : Segment d'integration pour la masse
  152. C ---------------------------------------------------------------
  153. ELSE IF (ITYPI.EQ.4) THEN
  154. CALL RESHPX(NBGM,NBSH,IELE,MELE,NPINT,IPT2,IRT1)
  155. C ---------------------------------------------------------------
  156. C 5 : Segment d'integration pour les contraintes
  157. C ---------------------------------------------------------------
  158. ELSE IF (ITYPI.EQ.5) THEN
  159. CALL RESHPX(NBG,NBSH,IELE,MELE,NPINT,IPT2,IRT1)
  160. ENDIF
  161. IF (IERR.NE.0) RETURN
  162. C
  163. IF (IPT2.NE.0) CALL SAVSEG(IPT2)
  164. INTEGR(MELE,ITYPI,IBMODE) = IPT2
  165. 19 CONTINUE
  166. IF (bstocke) IMODEL.INFMOD(2+ITYPI) = IPT2
  167. C
  168. 20 CONTINUE
  169. C
  170. C XQ4R : calculer egalement les fcts de forme du QUA4
  171. IF (MELE.EQ.263) THEN
  172. IDETY = 5
  173. MELE = 8
  174. NBSH = 4
  175. NBG = 4
  176. NBGM = 4
  177. NBGST = 4
  178. C XC8R : calculer egalement les fcts de forme du CUB8
  179. ELSE IF (MELE.EQ.264) THEN
  180. IDETY = 5
  181. MELE = 14
  182. NBSH = 8
  183. NBG = 8
  184. NBGM = 8
  185. NBGST = 8
  186. ENDIF
  187. C
  188. ENDIF
  189. C =================================================================
  190. C
  191. DO 10 ITYPI=IDEB,IFIN
  192. C
  193. C Elements de THERMIQUE (non utilise)
  194. IF (MELE.GE.57.AND.MELE.LE.68) THEN
  195. C CALL TINTR(MELE,IPT1)
  196. GOTO 10
  197. ENDIF
  198. C
  199. C Infos pour l'element MELE, mode de calcul IBMODE deja creees
  200. IPT1=INTEGR(MELE,ITYPI,IBMODE)
  201. IF (IPT1.NE.0) GOTO 9
  202. C
  203. C ---------------------------------------------------------------
  204. C 1 : Segment d'integration aux noeuds
  205. C ---------------------------------------------------------------
  206. IF (ITYPI.EQ.1) THEN
  207. C sg : uniquement les elements fluide en reshpt
  208. IF (MELE.GE.195.AND.MELE.LE.257) THEN
  209. CALL RESHPT(NBG,NBSH,IELE,MELE,0,IPT1,IRT1)
  210. ELSE
  211. CALL RENOEU(IELE,MELE,NBSH,IPT1,IRT1)
  212. ENDIF
  213. C ---------------------------------------------------------------
  214. C 2 : Segment d'integration au centre de gravite
  215. C ---------------------------------------------------------------
  216. ELSE IF (ITYPI.EQ.2) THEN
  217. CALL RESHPT(1,NBSH,IELE,MELE,NPINT,IPT1,IRT1)
  218. C ---------------------------------------------------------------
  219. C 3 : Segment d'integration pour la rigidite
  220. C ---------------------------------------------------------------
  221. ELSE IF (ITYPI.EQ.3) THEN
  222. CALL RESHPT(NBG,NBSH,IELE,MELE,NPINT,IPT1,IRT1)
  223. C ---------------------------------------------------------------
  224. C 4 : Segment d'integration pour la masse
  225. C ---------------------------------------------------------------
  226. ELSE IF (ITYPI.EQ.4) THEN
  227. CALL RESHPT(NBGM,NBSH,IELE,MELE,NPINT,IPT1,IRT1)
  228. C ---------------------------------------------------------------
  229. C 5 : Segment d'integration pour les contraintes
  230. C ---------------------------------------------------------------
  231. ELSE IF (ITYPI.EQ.5) THEN
  232. IF (MELE.GE.195.AND.MELE.LE.257) THEN
  233. IPT1=0
  234. ELSE
  235. CALL RESHPT(NBGST,NBSH,IELE,MELE,NPINT,IPT1,IRT1)
  236. ENDIF
  237. C ---------------------------------------------------------------
  238. C 6 : Pas de segment d'integration
  239. C ---------------------------------------------------------------
  240. ELSE IF (ITYPI.EQ.6) THEN
  241. IPT1 = 0
  242. C ---------------------------------------------------------------
  243. C 7 : Segment d'integration pour la rigidite autres pdg
  244. C ---------------------------------------------------------------
  245. ELSE IF (ITYPI.EQ.7) THEN
  246. CALL RESHPT(NBG,NBSH,IELE,MELE,NPINT,IPT1,IRT1)
  247. C ---------------------------------------------------------------
  248. C 8 : Segment d'integration CENTREP1 (Elements Navier Stokes)
  249. C ---------------------------------------------------------------
  250. ELSE IF (ITYPI.EQ.8) THEN
  251. C
  252. C Cas MACRO 2D QUAF 2D --> TRI3
  253. IF (MELE.EQ.217.OR.MELE.EQ.224.OR.MELE.EQ.231
  254. & .OR.MELE.EQ.238.OR.MELE.EQ.245.OR.MELE.EQ.252) NBSH = 3
  255. C Cas MACRO 2D QUAF 2D --> QUA4
  256. IF (MELE.EQ.218.OR.MELE.EQ.225.OR.MELE.EQ.232
  257. & .OR.MELE.EQ.239.OR.MELE.EQ.246.OR.MELE.EQ.253) NBSH = 3
  258. C Cas MACRO 3D QUAF 3D
  259. C IF ((MELE.GE.226.AND.MELE.LE.229).OR.
  260. C & (MELE.GE.247.AND.MELE.LE.250)) NBSH = 4
  261. CALL RESHPT(NBG,NBSH,IELE,MELE,1,IPT1,IRT1)
  262. C ---------------------------------------------------------------
  263. C 9 : Segment d'integration MSOMMET (Elements Navier Stokes)
  264. C ---------------------------------------------------------------
  265. ELSE IF (ITYPI.EQ.9) THEN
  266. C
  267. C Cas MACRO QUAF 1D --> SEG2
  268. IF (MELE.EQ.216.OR.MELE.EQ.223.OR.MELE.EQ.230
  269. & .OR.MELE.EQ.237.OR.MELE.EQ.244.OR.MELE.EQ.251) IELE = 2
  270. C Cas MACRO QUAF 2D --> TRI3
  271. IF (MELE.EQ.217.OR.MELE.EQ.224.OR.MELE.EQ.231
  272. & .OR.MELE.EQ.238.OR.MELE.EQ.245.OR.MELE.EQ.252) IELE = 4
  273. C Cas MACRO QUAF 2D --> QUA4
  274. IF (MELE.EQ.218.OR.MELE.EQ.225.OR.MELE.EQ.232
  275. & .OR.MELE.EQ.239.OR.MELE.EQ.246.OR.MELE.EQ.253) IELE = 8
  276. C Cas MACRO QUAF 3D --> CUB8
  277. IF (MELE.EQ.233.OR.MELE.EQ.254) IELE = 14
  278. C Cas MACRO QUAF 3D --> PRI6
  279. IF (MELE.EQ.234.OR.MELE.EQ.255) IELE = 16
  280. C Cas MACRO QUAF 3D --> TET4
  281. IF (MELE.EQ.235.OR.MELE.EQ.256) IELE = 23
  282. C Cas MACRO QUAF 3D --> PYR5
  283. IF (MELE.EQ.236.OR.MELE.EQ.257) IELE = 25
  284. NBSH = NBNNE(IELE)
  285. C
  286. CALL RESHPT(NBG,NBSH,IELE,MELE,2,IPT1,IRT1)
  287. ENDIF
  288. IF (IERR.NE.0) RETURN
  289. C
  290. IF (IPT1.NE.0) CALL SAVSEG(IPT1)
  291. INTEGR(MELE,ITYPI,IBMODE) = IPT1
  292. 9 CONTINUE
  293. IF (bstocke) IMODEL.INFMOD(2+ITYPI+IDETY) = IPT1
  294. C
  295. 10 CONTINUE
  296. C
  297. MINTE=IPT1
  298. IF(MINTE.GT.0) SEGACT,MINTE
  299. IPTR=IPT1
  300.  
  301. END
  302.  
  303.  

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