Télécharger hhoitg.eso

Retour à la liste

Numérotation des lignes :

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

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