Télécharger rlexf3.eso

Retour à la liste

Numérotation des lignes :

rlexf3
  1. C RLEXF3 SOURCE OF166741 24/12/13 21:17:31 12097
  2. SUBROUTINE RLEXF3(MCHCEN,MCHLI1,MCHLI2,MCHNOR,MCHELM,MCHGRA)
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : RLEXF3
  8. C
  9. C DESCRIPTION : Appelle par PENDI3
  10. C
  11. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  12. C
  13. C AUTEUR : A. BECCANTINI
  14. C
  15. C************************************************************************
  16. C
  17. C Inputs:
  18. C
  19. C MCHGRA : CHAMPOINT we want to compute the gradient of which
  20. C
  21. C MCHLI1 : CHAMPOINT Dirichlet BC
  22. C
  23. C MCHLI2 : CHAMPOINT: VN BC
  24. C
  25. C MCHNOR : CHAMPOINT: interfaces normales
  26. C
  27. C MCHELM : MCHAML which contains the coeff. to coppute the gradient
  28. C
  29. C Output:
  30. C
  31. C MCHGRA : CHAMPOINT, gradient of MCHGRA
  32. C
  33. IMPLICIT INTEGER(I-N)
  34.  
  35. -INC PPARAM
  36. -INC CCOPTIO
  37. INTEGER NBNN, NBELEM
  38. -INC SMELEME
  39. -INC SMCHAML
  40. C
  41. -INC SMCHPOI
  42. POINTEUR MCHCEN.MCHPOI, MCHLI1.MCHPOI, MCHLI2.MCHPOI
  43. & ,MCHGRA.MCHPOI, MCHNOR.MCHPOI
  44. POINTEUR MPOCEN.MPOVAL, MPOLI1.MPOVAL, MPOLI2.MPOVAL,MPOGRA.MPOVAL
  45. & ,MPONOR.MPOVAL
  46. C
  47. -INC SMLENTI
  48. POINTEUR MLECEN.MLENTI, MLELI1.MLENTI,MLELI2.MLENTI,MLEGRA.MLENTI
  49. C
  50. INTEGER IGEOM, NCOM, ISOUS, NBSOUS, IELEM, IVOI, NGV, NLF
  51. & ,NLV,NLL1,NLL2,ICOM,I2,NLNO
  52. REAL*8 VAL
  53. CHARACTER*(LOCOMP) NOM1
  54. C
  55. C**** We read MCHCEN, MPOCEN (its MPOVAL)
  56. C and we create MLECEN
  57. C
  58. CALL LICHT(MCHCEN,MPOCEN,NOM1,IGEOM)
  59. IF(IERR.NE.0)GOTO 9999
  60. NCOM=MPOCEN.VPOCHA(/2)
  61. C En LICHT SEGACT*MOD MPOCEN
  62. CALL KRIPAD(IGEOM,MLECEN)
  63. IF(IERR.NE.0)GOTO 9999
  64. C SEGACT IGEOM
  65. C SEGINI MLECEN
  66. MELEME=IGEOM
  67. SEGDES MELEME
  68. C
  69. C**** For the boundary conditions
  70. C
  71. C MPOLI1, MLELI1,
  72. C MPOLI2, MLELI2
  73. C
  74. IF(MCHLI1.GT.0)THEN
  75. CALL LICHT(MCHLI1,MPOLI1,NOM1,IGEOM)
  76. IF(IERR.NE.0)GOTO 9999
  77. C En LICHT SEGACT*MOD MPOLI1
  78. CALL KRIPAD(IGEOM,MLELI1)
  79. IF(IERR.NE.0)GOTO 9999
  80. C SEGACT IGEOM
  81. C SEGINI MLELI1
  82. MELEME=IGEOM
  83. SEGDES MELEME
  84. ELSE
  85. MPOLI1=0
  86. CALL KRIPAD(0,MLELI1)
  87. ENDIF
  88. C
  89. IF(MCHLI2.GT.0)THEN
  90. CALL LICHT(MCHLI2,MPOLI2,NOM1,IGEOM)
  91. IF(IERR.NE.0)GOTO 9999
  92. C En LICHT SEGACT*MOD MPOLI2
  93. CALL KRIPAD(IGEOM,MLELI2)
  94. IF(IERR.NE.0)GOTO 9999
  95. C SEGACT IGEOM
  96. C SEGINI MLELI2
  97. MELEME=IGEOM
  98. SEGDES MELEME
  99. ELSE
  100. MPOLI2=0
  101. CALL KRIPAD(0,MLELI2)
  102. ENDIF
  103. C
  104. C**** The gradient
  105. C
  106. C MPOGRA, MLEGRA
  107. C
  108. CALL LICHT(MCHGRA,MPOGRA,NOM1,IGEOM)
  109. IF(IERR.NE.0)GOTO 9999
  110. C En LICHT SEGACT*MOD MPOGRA
  111. CALL KRIPAD(IGEOM,MLEGRA)
  112. IF(IERR.NE.0)GOTO 9999
  113. C En KRIPAD
  114. C SEGACT IGEOM
  115. C SEGINI MLEGRA
  116. C
  117. MELEME=IGEOM
  118. SEGDES MELEME
  119. C
  120. C**** The normals
  121. C
  122. C MPONOR (same order as MPOGRA)
  123. C
  124. CALL LICHT(MCHNOR,MPONOR,NOM1,IGEOM)
  125. IF(IERR.NE.0)GOTO 9999
  126. C En LICHT SEGACT*MOD MPONOR
  127. C
  128. C**** Computation
  129. C
  130. SEGACT MCHELM
  131. NBSOUS=MCHELM.IMACHE(/1)
  132. C
  133. DO ISOUS=1,NBSOUS,1
  134. MELEME=MCHELM.IMACHE(ISOUS)
  135. MCHAM1=MCHELM.ICHAML(ISOUS)
  136. SEGACT MELEME
  137. SEGACT MCHAM1
  138. MELVA1=MCHAM1.IELVAL(1)
  139. MELVA2=MCHAM1.IELVAL(2)
  140. SEGACT MELVA1
  141. SEGACT MELVA2
  142. NOM1=MCHAM1.NOMCHE(1)
  143. IF(NOM1 .NE. 'alphax ')THEN
  144. WRITE(IOIMP,*) NOM1, '!=', 'alphax '
  145. C 21 2
  146. C Données incompatibles
  147. CALL ERREUR(21)
  148. GOTO 9999
  149. ENDIF
  150. NOM1=MCHAM1.NOMCHE(2)
  151. IF(NOM1 .NE. 'alphay ')THEN
  152. WRITE(IOIMP,*) NOM1, '!=', 'alphay '
  153. C 21 2
  154. C Données incompatibles
  155. CALL ERREUR(21)
  156. GOTO 9999
  157. ENDIF
  158. IF(IDIM.EQ.3)THEN
  159. MELVA3=MCHAM1.IELVAL(3)
  160. SEGACT MELVA3
  161. NOM1=MCHAM1.NOMCHE(3)
  162. IF(NOM1 .NE. 'alphaz ')THEN
  163. WRITE(IOIMP,*) NOM1, '!=', 'alphaz '
  164. C 21 2
  165. C Données incompatibles
  166. CALL ERREUR(21)
  167. GOTO 9999
  168. ENDIF
  169. ENDIF
  170. C
  171. NBNN=MELEME.NUM(/1)
  172. NBELEM=MELEME.NUM(/2)
  173. C
  174. DO IELEM=1,NBELEM,1
  175. DO IVOI=1,NBNN,1
  176. NGV=MELEME.NUM(IVOI,IELEM)
  177. IF(IVOI .EQ. 1)THEN
  178. NLF=MLEGRA.LECT(NGV)
  179. C write(*,*) 'NGF=',ngv
  180. IF(NLF.EQ.0)THEN
  181. WRITE (IOIMP,*) 'MCHAML of coefficients???'
  182. C 21 2
  183. C Données incompatibles
  184. CALL ERREUR(21)
  185. GOTO 9999
  186. ENDIF
  187. NLV=0
  188. NLL1=MLELI1.LECT(NGV)
  189. NLL2=MLELI2.LECT(NGV)
  190. ELSE
  191. NLV=MLECEN.LECT(NGV)
  192. NLL1=MLELI1.LECT(NGV)
  193. NLL2=MLELI2.LECT(NGV)
  194. ENDIF
  195. C write(*,*) 'NGV=',ngv
  196. IF((NLL1*NLL2) .NE. 0)THEN
  197. WRITE(IOIMP,*) 'Boundary conditions.'
  198. C 21 2
  199. C Données incompatibles
  200. CALL ERREUR(21)
  201. GOTO 9999
  202. ENDIF
  203. C
  204. DO ICOM = 1, NCOM, 1
  205. IF(NLV.NE.0)THEN
  206. VAL=MPOCEN.VPOCHA(NLV,ICOM)
  207. ELSEIF(NLL1.NE.0)THEN
  208. VAL=MPOLI1.VPOCHA(NLL1,ICOM)
  209. ELSEIF(NLL2.NE.0)THEN
  210. NLNO=MLEGRA.LECT(NGV)
  211. I2=(ICOM-1)*IDIM+1
  212. VAL=(MPOLI2.VPOCHA(NLL2,I2)*MPONOR.VPOCHA(NLNO,1))+
  213. & (MPOLI2.VPOCHA(NLL2,I2+1)*MPONOR.VPOCHA(NLNO,2))
  214. IF(IDIM .EQ. 3) VAL=VAL+
  215. & (MPOLI2.VPOCHA(NLL2,I2+2)*MPONOR.VPOCHA(NLNO,3))
  216. ELSEIF(IVOI .EQ. 1)THEN
  217. VAL=0.0D0
  218. C They can be all equal to 0 just at the first
  219. C iteration (internal FACE point not belonging to BC)
  220. C We chack that the MELVAL are 0
  221. C
  222. IF((MELVA1.VELCHE(IVOI,IELEM) .NE. 0) .OR.
  223. & (MELVA2.VELCHE(IVOI,IELEM) .NE. 0))THEN
  224. WRITE(IOIMP,*) 'Boundary conditions'
  225. C 21 2
  226. C Données incompatibles
  227. CALL ERREUR(21)
  228. GOTO 9999
  229. ELSEIF(IDIM .EQ.3)THEN
  230. IF(MELVA3.VELCHE(IVOI,IELEM) .NE. 0)THEN
  231. WRITE(IOIMP,*) 'Boundary conditions'
  232. C 21 2
  233. C Données incompatibles
  234. CALL ERREUR(21)
  235. GOTO 9999
  236. ENDIF
  237. ENDIF
  238. ELSE
  239. WRITE(IOIMP,*) 'Boundary conditions'
  240. C 21 2
  241. C Données incompatibles
  242. CALL ERREUR(21)
  243. GOTO 9999
  244. ENDIF
  245. C write(*,*) 'VAL =',VAL
  246. I2=(ICOM-1)*IDIM+1
  247. MPOGRA.VPOCHA(NLF,I2)=MPOGRA.VPOCHA(NLF,I2)+
  248. & (MELVA1.VELCHE(IVOI,IELEM)*VAL)
  249. MPOGRA.VPOCHA(NLF,I2+1)=MPOGRA.VPOCHA(NLF,I2+1)+
  250. & (MELVA2.VELCHE(IVOI,IELEM)*VAL)
  251. IF(IDIM.EQ.3)
  252. & MPOGRA.VPOCHA(NLF,I2+2)=MPOGRA.VPOCHA(NLF,I2+2)+
  253. & (MELVA3.VELCHE(IVOI,IELEM)*VAL)
  254. ENDDO
  255. ENDDO
  256. ENDDO
  257. SEGDES MELEME
  258. SEGDES MCHAM1
  259. SEGDES MELVA1
  260. SEGDES MELVA2
  261. IF(IDIM.EQ.3) SEGDES MELVA3
  262. ENDDO
  263. C
  264. SEGDES MCHELM
  265. IF(MPOLI1 .NE. 0) SEGDES MPOLI1
  266. SEGSUP MLELI1
  267. IF(MPOLI2 .NE. 0) SEGDES MPOLI2
  268. SEGSUP MLELI2
  269. SEGDES MPOGRA
  270. SEGDES MPOCEN
  271. SEGSUP MLECEN
  272. SEGSUP MLEGRA
  273. SEGDES MPONOR
  274. C
  275. 9999 RETURN
  276. END
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  

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