Télécharger hhoitg.eso

Retour à la liste

Numérotation des lignes :

hhoitg
  1. C HHOITG SOURCE OF166741 25/02/21 21:17:25 12166
  2.  
  3. C----------------------------------------------------------------------*
  4. C Elements FORMULATION 'HHO'
  5. C HHO integration d'un champ par element (INTG)
  6. C----------------------------------------------------------------------*
  7.  
  8. SUBROUTINE HHOITG(imoHHO, IVCOMP,
  9. & IVACAR, NCARR, IPMINT, NBPTEL,
  10. & VALHHO, IVMELT, iret)
  11.  
  12. IMPLICIT INTEGER(I-N)
  13. IMPLICIT REAL*8(A-H,O-Z)
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC CCREEL
  18.  
  19. -INC CCHHOPA
  20. -INC CCHHOPR
  21.  
  22. c* si besoin des coordonnees-INC SMCOORD
  23. -INC SMMODEL
  24. -INC SMCHAML
  25. -INC SMELEME
  26. -INC SMINTE
  27. -INC SMLENTI
  28.  
  29. -INC TMPTVAL
  30.  
  31. c* si besoin des coordonnees SEGMENT MWKHHO
  32. c* si besoin des coordonnees INTEGER TABINT(NBINT)
  33. c* si besoin des coordonnees REAL*8 TABFLO(NBFLO)
  34. c* si besoin des coordonnees ENDSEGMENT
  35.  
  36. iret = 0
  37.  
  38. imodel = imoHHO
  39. c* segact,imodel <- actif en entree/sortie
  40.  
  41. C- Premieres verifications :
  42. CALL HHONOB(imoHHO, nobHHO, iret)
  43. IF (nobHHO.LE.0)THEN
  44. write(ioimp,*) 'HHOITG: IMODEL incorrect (not HHO)'
  45. iret = 5
  46. RETURN
  47. END IF
  48.  
  49. C- Recuperation des donnees de infell en entree
  50. c* MELE = imodel.NEFMOD
  51. c* MFR = imodel.infele(13)
  52. meleme = imodel.IMAMOD
  53. c* segact,meleme <- actif en entree/sortie
  54. NBNOE = meleme.NUM(/1)
  55. NBELT = meleme.NUM(/2)
  56.  
  57. mlenti = imodel.IVAMOD(nobHHO+1)
  58. c* segact,mlenti
  59. mlent2 = imodel.IVAMOD(nobHHO+4)
  60. c* segact,mlent2
  61.  
  62. NBPGAU = mlenti.lect(8)
  63. nbel4 = mlent2.lect(/1) / 2
  64.  
  65. IF (NBNOE .NE. mlenti.lect(6)) THEN
  66. write(ioimp,*) 'HHOITG: Bizarre nb_vertices'
  67. END IF
  68. c NBPGAU =? (NBPTEL = imodel.INFELE(4))
  69. IF (NBPGAU .NE. NBPTEL) then
  70. write(ioimp,*) 'HHOITG: Bizarre nb.p.gau(1)'
  71. END IF
  72. c NBPGAU =? minte.POIGAU(/1)
  73. minte = IPMINT
  74. c* SEGACT minte <- actif en E/S
  75. if (NBPGAU .NE. minte.POIGAU(/1)) then
  76. write(ioimp,*) 'HHOITG: Bizarre nb.p.gau (2)'
  77. end if
  78. c-dbg write(ioimp,*) 'HHOBSG nbpgau=',NBPGAU
  79. if (nbel4.NE.NBELT) then
  80. write(ioimp,*) 'HHOITG: Bizarre nbel4'
  81. end if
  82.  
  83. C- Composante a integrer :
  84. melval = IVCOMP
  85. IGCO = melval.VELCHE(/1)
  86. IECO = melval.VELCHE(/2)
  87. c-dbg write(ioimp,*) 'IVCOMP',melval,igco,ieco
  88.  
  89. C- Verification des caracteristiques :
  90. if (IVACAR.EQ.0) THEN
  91. if (ncarr.ne.0) write(ioimp,*) 'HHOITG: ivacar=0 & ncarr!=0'
  92. IVPIHO = 0
  93. IVDIM3 = 0
  94. ELSE
  95. if (NCARR.lt.2) then
  96. write(ioimp,*) 'HHOITG: NCARR incorrect'
  97. iret = 5
  98. return
  99. endif
  100. mptval = IVACAR
  101. IVPIHO = mptval.IVAL(1)
  102. IVDIM3 = mptval.IVAL(2)
  103. if (IVPIHO.eq.0) then
  104. write(ioimp,*) 'HHOITG: PIHO incorrect'
  105. iret = 5
  106. return
  107. endif
  108. ENDIF
  109. IF (IVPIHO.NE.0) THEN
  110. melval = IVPIHO
  111. IGPI = melval.VELCHE(/1)
  112. IEPI = melval.VELCHE(/2)
  113. c-dbg write(ioimp,*) 'IVPIHO',melval,igpi,iepi,tyval(1)
  114. IF (IGPI.NE.NBPGAU .AND. IGPI.NE.1) THEN
  115. write(ioimp,*) 'HHOITG: PIHO vector size incorrect'
  116. iret = 21
  117. RETURN
  118. END IF
  119. ELSE
  120. IGPI = 0
  121. IEPI = 0
  122. ENDIF
  123.  
  124. XDIM3 = 1.D0
  125. IF (IVDIM3.NE.0) THEN
  126. melval = IVDIM3
  127. IGD3 = melval.VELCHE(/1)
  128. IED3 = melval.VELCHE(/2)
  129. c-dbg write(ioimp,*) 'IVDIM3',melval,igd3,ied3
  130. ELSE
  131. IGD3 = 0
  132. IED3 = 0
  133. END IF
  134.  
  135. c* si besoin des coordonnees
  136. c* si besoin des coordonneesC- Indices et tableau de travail
  137. c* si besoin des coordonnees ir_coo = 0
  138. c* si besoin des coordonnees ir_fin = ir_coo + (IDIM*NBNOE)
  139. c* si besoin des coordonnees NBINT = 0
  140. c* si besoin des coordonnees NBFLO = ir_fin
  141. c* si besoin des coordonnees SEGINI,MWKHHO
  142. c* si besoin des coordonnees SEGACT,mcoord*nomod
  143.  
  144. VALHHO = XZERO
  145.  
  146. C-------------------------
  147. C Boucle sur les elements
  148. C-------------------------
  149. DO IEL = 1, NBELT
  150.  
  151. c* si besoin des coordonneesC- Recuperation des coordonnees des noeuds de l element IEL
  152. c* si besoin des coordonnees CALL HHOCOO(meleme.num,NBNOE, mcoord.xcoor, IEL,
  153. c* si besoin des coordonnees & TABFLO(ir_coo+1), iret)
  154. c* si besoin des coordonnees IF (iret.NE.0) RETURN
  155.  
  156. JECO = MIN(IEL,IECO)
  157. JEPI = MIN(IEL,IEPI)
  158. JED3 = MIN(IEL,IED3)
  159.  
  160. VALELT = XZero
  161. C-- -- -- -- -- -- -- -- --
  162. C - Boucle sur les points de Gauss
  163. C-- -- -- -- -- -- -- -- --
  164. DO IGAU = 1, NBPGAU
  165.  
  166. C -- Recuperation de la composante a integrer
  167. melval = IVCOMP
  168. JGCO = MIN(IGAU,IGCO)
  169. XCOM = melval.velche(JGCO,IECO)
  170.  
  171. C -- Recuperation des "poids d'integration"
  172. IF (IVPIHO.NE.0) THEN
  173. melval = IVPIHO
  174. JGPI = MIN(IGAU,IGPI)
  175. XPGA = melval.VELCHE(JGPI,JEPI)
  176. ELSE
  177. XPGA = minte.POIGAU(IGAU)
  178. END IF
  179.  
  180. C -- Recuperation de l'epaisseur ("DIM3")
  181. IF (IVDIM3.NE.0) THEN
  182. melval = IVDIM3
  183. JGD3 = MIN(IGAU,IGD3)
  184. XDIM3 = melval.VELCHE(JGD3,JED3)
  185. END IF
  186.  
  187. VALELT = VALELT + (XCOM * XPGA * XDIM3)
  188. C-- -- -- -- -- -- -- -- --
  189. END DO
  190. C-- -- -- -- -- -- -- -- --
  191.  
  192. VALHHO = VALHHO + VALELT
  193.  
  194. IF (IVMELT.NE.0) THEN
  195. melval = IVMELT
  196. melval.VELCHE(1,IEL) = VALELT
  197. END IF
  198.  
  199. C-------------------------
  200. END DO
  201. C-------------------------
  202. c* si besoin des coordonnees SEGSUP,MWKHHO
  203.  
  204. c* RETURN
  205. END
  206.  
  207.  
  208.  

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