Télécharger pente3.eso

Retour à la liste

Numérotation des lignes :

pente3
  1. C PENTE3 SOURCE OF166741 24/12/13 21:16:55 12097
  2. SUBROUTINE PENTE3(NFAC,MELEFL,MLECEN,NCOMP,MPOCHP,
  3. & MPOGRA,MPOMIN,MPOMAX,MPOALP)
  4. C
  5. C************************************************************************
  6. C
  7. C PROJET : CASTEM 2000
  8. C
  9. C NOM : PENTE3
  10. C
  11. C DESCRIPTION : Cette subroutine est appellée par la subroutine
  12. C PENTE1 (calcul du gradient d'un CHPOINT 2D de type
  13. C CENTRE)
  14. C Elle contient la partie du calcul du limiteur.
  15. C
  16. C LANGUAGE : ESOPE 2000 avec extensions CISI
  17. C
  18. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  19. C AUTEUR (Modif.) : R. MOREL, DRN/DMT/SEMT/TTMF
  20. C
  21. C************************************************************************
  22. C
  23. C
  24. C APPELES (E/S) : none
  25. C
  26. C APPELES (Calcul) : none
  27. C
  28. C
  29. C************************************************************************
  30. C
  31. C ENTREES : NFAC : nombre de faces
  32. C
  33. C MELEFL : pointeur du MELEME 'FACEL'
  34. C
  35. C MLECEN : pointeur de MLENTI qui contient la table
  36. C numerotation global/local de CENTREs
  37. C
  38. C NCOMP : nombre de composantes de CHPOINT dont on veut
  39. C calculer les pentes
  40. C
  41. C MPOCHP : pointeur de MPOVAL de CHPOINT dont on veut le
  42. C gradient
  43. C
  44. C MPOGRA : pointeur de MPOVAL du gradient
  45. C
  46. C MPOMIN : pointeur de MPOVAL du minimum sur le stencil
  47. C
  48. C MPOMAX : pointeur de MPOVAL du maximum sur le stencil
  49. C
  50. C SORTIES : MPOALP : pointeur de MELVAL du limiteur
  51. C
  52. C************************************************************************
  53. C
  54. C HISTORIQUE (Anomalies et modifications éventuelles)
  55. C
  56. C HISTORIQUE : Cree le 6-4-1998
  57. C
  58. C HISTORIQUE : Modifie le 20-10-1998 pour extension 3D
  59. C
  60. C************************************************************************
  61. C
  62. IMPLICIT INTEGER(I-N)
  63. -INC PPARAM
  64. -INC CCOPTIO
  65. C
  66. INTEGER NFAC,NCOMP
  67. & ,NLCF,NGCF,NGCEG,NLCEG,NGCED,NLCED
  68. & ,INDCEL,I1,IGR,IDIMP1
  69. C
  70. C**** Pour l'instant 2D
  71. C
  72. REAL*8 XG,YG,XD,YD,XC,YC,DXG,DYG,DXD,DYD,DG,DD,DT
  73. & ,PHI,PHIMAX,PHIMIN,DPHIST,GRADX,GRADY,DPHI0,DPHI1,ALPHA
  74. & ,VALEUR
  75. C
  76. C**** Extension 3D
  77. C
  78. REAL*8 ZG,ZD,ZC,DZG,DZD,GRADZ
  79. C
  80. C
  81. -INC SMCOORD
  82. -INC SMCHPOI
  83. -INC SMELEME
  84. -INC SMLENTI
  85. POINTEUR MPOMIN.MPOVAL, MPOMAX.MPOVAL, MPOALP.MPOVAL,
  86. & MPOCHP.MPOVAL, MPOGRA.MPOVAL
  87. POINTEUR MELEFL.MELEME, MLECEN.MLENTI
  88. C
  89. C**** N.B. Tous les pointeurs ici sont déjà activés!
  90. C
  91. C**** Maillage FACEL
  92. C Boucle sur les faces
  93. C
  94. C
  95. C**** NGCEG = Numero global centre d'elt "gauche"
  96. C NLCEG = Numero local centre d'elt "gauche"
  97. C NGCF = " global centre de face
  98. C NLCF = numero local centre de face
  99. C NGCEG = Numero global centre d'elt "gauche"
  100. C NLCEG = Numero local centre d'elt "gauche"
  101. C
  102. IDIMP1 = IDIM+1
  103. C
  104. C Cas de la dimension 2
  105. C
  106. IF (IDIM .EQ. 2) THEN
  107. DO NLCF = 1, NFAC
  108. NGCEG = MELEFL.NUM(1,NLCF)
  109. NLCEG = MLECEN.LECT(NGCEG)
  110. NGCF = MELEFL.NUM(2,NLCF)
  111. NGCED = MELEFL.NUM(3,NLCF)
  112. NLCED = MLECEN.LECT(NGCED)
  113. IF(NGCEG .EQ. NGCED)THEN
  114. C
  115. C********** Limiteur dans le cas mur
  116. C
  117. C
  118. C********** Coordonees et parametres geometriques
  119. C
  120. C
  121. C XCOOR : table de coordonnes de points;
  122. C pour le point de numero global NG
  123. C X_NG = XCOOR((NG-1)*(IDIM+1)+1)
  124. C Y_NG = XCOOR((NG-1)*(IDIM+1)+2)
  125. C Z_NG = XCOOR((NG-1)*(IDIM+1)+3)
  126. C (dans notre cas IDIM=2, i.e. 2D)
  127. C
  128. INDCEL = (NGCEG-1)*IDIMP1
  129. XG = XCOOR(INDCEL+1)
  130. YG = XCOOR(INDCEL+2)
  131. INDCEL = (NGCF-1)*IDIMP1
  132. XC = XCOOR(INDCEL+1)
  133. YC = XCOOR(INDCEL+2)
  134. DXG = XC - XG
  135. DYG = YC - YG
  136. C
  137. C********** Boucle sur le composantes
  138. C
  139. DO I1 = 1, NCOMP
  140. IGR = 2*I1 - 1
  141. C
  142. C************* Limiteur
  143. C
  144. PHI = MPOCHP.VPOCHA(NLCEG,I1)
  145. PHIMAX = MPOMAX.VPOCHA(NLCEG,I1)
  146. PHIMIN = MPOMIN.VPOCHA(NLCEG,I1)
  147. DPHIST = PHIMAX - PHIMIN
  148. GRADX = MPOGRA.VPOCHA(NLCEG,IGR)
  149. GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1)
  150. DPHI0 = GRADX * DXG + GRADY * DYG
  151. ALPHA = MPOALP.VPOCHA(NLCEG,I1)
  152. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  153. VALEUR = 1.0D0
  154. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  155. DPHI1 = PHIMAX - PHI
  156. VALEUR = DPHI1/DPHI0*0.5D0
  157. ELSE
  158. DPHI1 = PHIMIN - PHI
  159. VALEUR = DPHI1/DPHI0*0.5D0
  160. ENDIF
  161. ALPHA = MIN(ALPHA, VALEUR)
  162. MPOALP.VPOCHA(NLCEG,I1) = ALPHA
  163. ENDDO
  164. ELSE
  165. C
  166. C******* NGCEG != NGCED
  167. C
  168. INDCEL = (NGCEG-1)*IDIMP1
  169. XG = XCOOR(INDCEL+1)
  170. YG = XCOOR(INDCEL+2)
  171. INDCEL = (NGCED-1)*IDIMP1
  172. XD = XCOOR(INDCEL+1)
  173. YD = XCOOR(INDCEL+2)
  174. INDCEL = (NGCF-1)*IDIMP1
  175. XC = XCOOR(INDCEL+1)
  176. YC = XCOOR(INDCEL+2)
  177. C
  178. DXG = XC - XG
  179. DYG = YC - YG
  180. DXD = XC - XD
  181. DYD = YC - YD
  182. DG = DXG * DXG + DYG * DYG
  183. DG = SQRT(DG)
  184. DD = DXD * DXD + DYD * DYD
  185. DD = SQRT(DD)
  186. DT = DG + DD
  187. C
  188. C********** Boucle sur le composantes
  189. C
  190. DO I1 = 1, NCOMP
  191. IGR = 2*I1 - 1
  192. C
  193. C************* Limiteur a gauche
  194. C
  195. PHI = MPOCHP.VPOCHA(NLCEG,I1)
  196. PHIMAX = MPOMAX.VPOCHA(NLCEG,I1)
  197. PHIMIN = MPOMIN.VPOCHA(NLCEG,I1)
  198. DPHIST = PHIMAX - PHIMIN
  199. GRADX = MPOGRA.VPOCHA(NLCEG,IGR)
  200. GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1)
  201. DPHI0 = GRADX * DXG + GRADY * DYG
  202. ALPHA = MPOALP.VPOCHA(NLCEG,I1)
  203. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  204. VALEUR = 1.0D0
  205. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  206. DPHI1 = PHIMAX - PHI
  207. VALEUR = DPHI1/DPHI0*DG/DT
  208. ELSE
  209. DPHI1 = PHIMIN - PHI
  210. VALEUR = DPHI1/DPHI0*DG/DT
  211. ENDIF
  212.  
  213. ALPHA = MIN(ALPHA, VALEUR)
  214. MPOALP.VPOCHA(NLCEG,I1) = ALPHA
  215. C
  216. C************* Limiteur a droite
  217. C
  218. PHI = MPOCHP.VPOCHA(NLCED,I1)
  219. PHIMAX = MPOMAX.VPOCHA(NLCED,I1)
  220. PHIMIN = MPOMIN.VPOCHA(NLCED,I1)
  221. DPHIST = PHIMAX - PHIMIN
  222. GRADX = MPOGRA.VPOCHA(NLCED,IGR)
  223. GRADY = MPOGRA.VPOCHA(NLCED,IGR+1)
  224. DPHI0 = GRADX * DXD + GRADY * DYD
  225. ALPHA = MPOALP.VPOCHA(NLCED,I1)
  226. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  227. VALEUR = 1.0D0
  228. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  229. DPHI1 = PHIMAX - PHI
  230. VALEUR = DPHI1/DPHI0*DD/DT
  231. ELSE
  232. DPHI1 = PHIMIN - PHI
  233. VALEUR = DPHI1/DPHI0*DD/DT
  234. ENDIF
  235. ALPHA = MIN(ALPHA, VALEUR)
  236. MPOALP.VPOCHA(NLCED,I1) = ALPHA
  237. ENDDO
  238. ENDIF
  239. ENDDO
  240. C
  241. C Cas de la dimension 3
  242. C
  243. ELSE
  244. DO NLCF = 1, NFAC
  245. NGCEG = MELEFL.NUM(1,NLCF)
  246. NLCEG = MLECEN.LECT(NGCEG)
  247. NGCF = MELEFL.NUM(2,NLCF)
  248. NGCED = MELEFL.NUM(3,NLCF)
  249. NLCED = MLECEN.LECT(NGCED)
  250. IF(NGCEG .EQ. NGCED)THEN
  251. C
  252. C********** Limiteur dans le cas mur
  253. C
  254. C
  255. C********** Coordonees et parametres geometriques
  256. C
  257. C
  258. C XCOOR : table de coordonnes de points;
  259. C pour le point de numero global NG
  260. C X_NG = XCOOR((NG-1)*(IDIM+1)+1)
  261. C Y_NG = XCOOR((NG-1)*(IDIM+1)+2)
  262. C Z_NG = XCOOR((NG-1)*(IDIM+1)+3)
  263. C
  264. INDCEL = (NGCEG-1)*IDIMP1
  265. XG = XCOOR(INDCEL+1)
  266. YG = XCOOR(INDCEL+2)
  267. ZG = XCOOR(INDCEL+3)
  268. INDCEL = (NGCF-1)*IDIMP1
  269. XC = XCOOR(INDCEL+1)
  270. YC = XCOOR(INDCEL+2)
  271. ZC = XCOOR(INDCEL+3)
  272. DXG = XC - XG
  273. DYG = YC - YG
  274. DZG = ZC - ZG
  275. C
  276. C********** Boucle sur le composantes
  277. C
  278. DO I1 = 1, NCOMP
  279. IGR = IDIM*(I1-1)+1
  280. C
  281. C************* Limiteur
  282. C
  283. PHI = MPOCHP.VPOCHA(NLCEG,I1)
  284. PHIMAX = MPOMAX.VPOCHA(NLCEG,I1)
  285. PHIMIN = MPOMIN.VPOCHA(NLCEG,I1)
  286. DPHIST = PHIMAX - PHIMIN
  287. GRADX = MPOGRA.VPOCHA(NLCEG,IGR)
  288. GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1)
  289. GRADZ = MPOGRA.VPOCHA(NLCEG,IGR+2)
  290. DPHI0 = GRADX * DXG + GRADY * DYG + GRADZ * DZG
  291. ALPHA = MPOALP.VPOCHA(NLCEG,I1)
  292. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  293. VALEUR = 1.0D0
  294. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  295. DPHI1 = PHIMAX - PHI
  296. VALEUR = DPHI1/DPHI0*0.5D0
  297. ELSE
  298. DPHI1 = PHIMIN - PHI
  299. VALEUR = DPHI1/DPHI0*0.5D0
  300. ENDIF
  301. ALPHA = MIN(ALPHA, VALEUR)
  302. MPOALP.VPOCHA(NLCEG,I1) = ALPHA
  303. ENDDO
  304. ELSE
  305. C
  306. C******* NGCEG != NGCED
  307. C
  308. INDCEL = (NGCEG-1)*IDIMP1
  309. XG = XCOOR(INDCEL+1)
  310. YG = XCOOR(INDCEL+2)
  311. ZG = XCOOR(INDCEL+3)
  312. INDCEL = (NGCED-1)*IDIMP1
  313. XD = XCOOR(INDCEL+1)
  314. YD = XCOOR(INDCEL+2)
  315. ZD = XCOOR(INDCEL+3)
  316. INDCEL = (NGCF-1)*IDIMP1
  317. XC = XCOOR(INDCEL+1)
  318. YC = XCOOR(INDCEL+2)
  319. ZC = XCOOR(INDCEL+3)
  320. C
  321. DXG = XC - XG
  322. DYG = YC - YG
  323. DZG = ZC - ZG
  324. DXD = XC - XD
  325. DYD = YC - YD
  326. DZD = ZC - ZD
  327. DG = DXG * DXG + DYG * DYG + DZG * DZG
  328. DG = SQRT(DG)
  329. DD = DXD * DXD + DYD * DYD + DZD * DZD
  330. DD = SQRT(DD)
  331. DT = DG + DD
  332. C
  333. C********** Boucle sur le composantes
  334. C
  335. DO I1 = 1, NCOMP
  336. IGR = IDIM*(I1-1)+1
  337. C
  338. C************* Limiteur a gauche
  339. C
  340. PHI = MPOCHP.VPOCHA(NLCEG,I1)
  341. PHIMAX = MPOMAX.VPOCHA(NLCEG,I1)
  342. PHIMIN = MPOMIN.VPOCHA(NLCEG,I1)
  343. DPHIST = PHIMAX - PHIMIN
  344. GRADX = MPOGRA.VPOCHA(NLCEG,IGR)
  345. GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1)
  346. GRADZ = MPOGRA.VPOCHA(NLCEG,IGR+2)
  347. DPHI0 = GRADX * DXG + GRADY * DYG + GRADZ * DZG
  348. ALPHA = MPOALP.VPOCHA(NLCEG,I1)
  349. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  350. VALEUR = 1.0D0
  351. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  352. DPHI1 = PHIMAX - PHI
  353. VALEUR = DPHI1/DPHI0*DG/DT
  354. ELSE
  355. DPHI1 = PHIMIN - PHI
  356. VALEUR = DPHI1/DPHI0*DG/DT
  357. ENDIF
  358.  
  359. ALPHA = MIN(ALPHA, VALEUR)
  360. MPOALP.VPOCHA(NLCEG,I1) = ALPHA
  361. C
  362. C************* Limiteur a droite
  363. C
  364. PHI = MPOCHP.VPOCHA(NLCED,I1)
  365. PHIMAX = MPOMAX.VPOCHA(NLCED,I1)
  366. PHIMIN = MPOMIN.VPOCHA(NLCED,I1)
  367. DPHIST = PHIMAX - PHIMIN
  368. GRADX = MPOGRA.VPOCHA(NLCED,IGR)
  369. GRADY = MPOGRA.VPOCHA(NLCED,IGR+1)
  370. GRADZ = MPOGRA.VPOCHA(NLCED,IGR+2)
  371. DPHI0 = GRADX * DXD + GRADY * DYD + GRADZ * DZD
  372. ALPHA = MPOALP.VPOCHA(NLCED,I1)
  373. IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN
  374. VALEUR = 1.0D0
  375. ELSEIF(DPHI0 .GT. 0.0D0)THEN
  376. DPHI1 = PHIMAX - PHI
  377. VALEUR = DPHI1/DPHI0*DD/DT
  378. ELSE
  379. DPHI1 = PHIMIN - PHI
  380. VALEUR = DPHI1/DPHI0*DD/DT
  381. ENDIF
  382. ALPHA = MIN(ALPHA, VALEUR)
  383. MPOALP.VPOCHA(NLCED,I1) = ALPHA
  384. ENDDO
  385. ENDIF
  386. ENDDO
  387. ENDIF
  388. C
  389. RETURN
  390. END
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  

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