Télécharger zlap12.eso

Retour à la liste

Numérotation des lignes :

zlap12
  1. C ZLAP12 SOURCE CB215821 20/11/25 13:45:01 10792
  2. SUBROUTINE ZLAP12(PROPHY,IROC,ITEMC,
  3. & ITIMP,IRIMP,
  4. & MELEMC,MELEMF,MELEFL,ISURF,INORM,IDIAM,
  5. & ICHFLU,DT)
  6. C***********************************************************************
  7. C NOM : ZLAP12
  8. C DESCRIPTION : Calcul des flux diffusifs Navier-Stokes2D multi-espèces.
  9. C
  10. C
  11. C LANGAGE : ESOPE
  12. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  13. C mél : gounand@semt2.smts.cea.fr
  14. C***********************************************************************
  15. C APPELES (UTIL) : KRIPAD : MELEME -> (num. globale->locale)
  16. C LICHT : Lecture des pointeurs (maillages, valeurs)
  17. C d'un objet de type MCHPOI.
  18. C ERREUR : Gestion des erreurs par GIBI.
  19. C APPELE PAR : ZLAP11 : Chapeau de l'opérateur Gibiane 'LAPN'
  20. C option 'VF'.
  21. C***********************************************************************
  22. C ENTREES : PROPHY (type PROPHY) : propriétés des espèces
  23. C PROPH2 (type PROPH2) : précond. de PROPHY
  24. C IROC (type MCHPOI) : masse volumique par
  25. C élément.
  26. C ITEMC (type MCHPOI) : température par
  27. C élément.
  28. C ITIMP (type MCHPOI) : CL de
  29. C Dirichlet sur la température.
  30. C IRIMP (type MCHPOI) : CL de
  31. C Dirichlet sur la densité.
  32. C MELEMC (type MELEME) : maillage des centres des
  33. C éléments.
  34. C MELEMF (type MELEME) : maillage des faces des
  35. C éléments.
  36. C MELEFL (type MELEME) : connectivités face-(centre
  37. C gauche, centre droit).
  38. C ISURF (type MCHPOI) : surface des faces.
  39. C INORM (type MCHPOI) : normale aux faces.
  40. C IDIAM (type MCHPOI) : diamètre des éléments.
  41. C ENTREES/SORTIES : -
  42. C SORTIES : ICHFLU (type MCHPOI) : flux diffusif aux
  43. C interfaces.
  44. C DT (type REAL*8) : pas de temps de stabilité
  45. C (Fourier)
  46. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  47. C***********************************************************************
  48. C VERSION : v1, 25/02/2002, version initiale
  49. C HISTORIQUE : v1, 25/02/2002, création
  50. C HISTORIQUE :
  51. C HISTORIQUE :
  52. C***********************************************************************
  53. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  54. C en cas de modification de ce sous-programme afin de faciliter
  55. C la maintenance !
  56. C***********************************************************************
  57. IMPLICIT INTEGER(I-N)
  58.  
  59. -INC PPARAM
  60. -INC CCOPTIO
  61. -INC CCREEL
  62. -INC SMCHPOI
  63. -INC SMELEME
  64. -INC SMCOORD
  65. -INC SMLENTI
  66. -INC SMLMOTS
  67. C
  68. POINTEUR IROC.MCHPOI,ITEMC.MCHPOI,ICDIFF.MCHPOI,IGRYKF.MCHPOI
  69. POINTEUR MPROC.MPOVAL,MPTEMC.MPOVAL,
  70. & MPTIMP.MPOVAL,MPRIMP.MPOVAL,MPCDIF.MPOVAL,MPGRYK.MPOVAL,
  71. & MPSURF.MPOVAL, MPNORM.MPOVAL, MPDIAM.MPOVAL,
  72. & MPFLUX.MPOVAL,MPCDIN.MPOVAL
  73. C
  74. POINTEUR MELEMC.MELEME,MELEMF.MELEME,MELEFL.MELEME
  75. POINTEUR MLCENT.MLENTI,MLETIM.MLENTI,MLERIM.MLENTI
  76. C
  77. INTEGER NESP
  78. SEGMENT PROPHY
  79. CHARACTER*4 NOMESP(NESP+1)
  80. REAL*8 CV(NESP+1)
  81. REAL*8 R(NESP+1)
  82. REAL*8 H0K(NESP+1)
  83. POINTEUR CDIFF(NESP+1).MCHPOI
  84. POINTEUR YK(NESP+1).MCHPOI
  85. POINTEUR GRADYK(NESP+1).MCHPOI
  86. POINTEUR CGRYK(NESP+1).MCHELM
  87. POINTEUR CLYK(NESP+1).MCHPOI
  88. ENDSEGMENT
  89. SEGMENT LIPOVA
  90. POINTEUR MPGRAD(0).MPOVAL
  91. ENDSEGMENT
  92. SEGMENT LIPOV2
  93. POINTEUR MPDIFF(0).MPOVAL
  94. ENDSEGMENT
  95. C
  96. INTEGER ITIMP,IRIMP
  97. & ,ISURF,INORM,IDIAM,ICHFLU
  98. & ,NFAC, NLCF, NGCF, NGCF1, NGCEG, NGCED
  99. & ,NLCEG,NLCED,NLFTI,NLFRI
  100. & , ICOORX, IGEOM
  101.  
  102. REAL*8 DT, UNSDT
  103. & ,XG,YG,XFMXG,YFMYG,DRG
  104. & ,XD,YD,XFMXD,YFMYD,DRD,ALPHA,UMALPH
  105. & ,XF,YF
  106. & ,CNX, CNY, ORIENT, DIAM, DIAM2, CELL, SURF
  107. INTEGER IESP
  108. REAL*8 CPK,DK,DYKDX,DYKDY,HKF,CPN,DN,HNF
  109. REAL*8 RHOD,RHOF,RHOG
  110. REAL*8 TEMD,TEMF,TEMG
  111. C
  112. CHARACTER*8 TYPE
  113. C
  114. C**** Initialisation de 1/DT
  115. C
  116. UNSDT = 0.0D0
  117. C
  118. C**** KRIPAD pour la correspondance global/local de centre
  119. C
  120. CALL KRIPAD(MELEMC,MLCENT)
  121. C
  122. C EN KRIPAD
  123. C SEGACT MELEMC
  124. C SEGACT MLCENT
  125. C
  126. CALL LICHT(IROC,MPROC,TYPE,IGEOM)
  127. CALL LICHT(ITEMC,MPTEMC,TYPE,IGEOM)
  128. CALL LICHT(ISURF,MPSURF,TYPE,IGEOM)
  129. CALL LICHT(INORM,MPNORM,TYPE,IGEOM)
  130. CALL LICHT(IDIAM,MPDIAM,TYPE,IGEOM)
  131. CALL LICHT(ICHFLU,MPFLUX,TYPE,IGEOM)
  132. C
  133. C EN LICHT
  134. C SEGACT*MOD MPROC
  135. C SEGACT*MOD MPTEMC
  136. C SEGACT*MOD MPSURF
  137. C SEGACT*MOD MPNORM
  138. C SEGACT*MOD MPDIAM
  139. C SEGACT*MOD MPFLUX
  140. C
  141. SEGINI LIPOVA
  142. SEGINI LIPOV2
  143. SEGACT PROPHY
  144. NESP=PROPHY.CV(/1)-1
  145. DO IESP=1,NESP+1
  146. ICDIFF=PROPHY.CDIFF(IESP)
  147. * In licht SEGACT LIPOV2.MPDIFF(*)
  148. CALL LICHT(ICDIFF,MPCDIF,TYPE,IGEOM)
  149. LIPOV2.MPDIFF(**)=MPCDIF
  150. IGRYKF=PROPHY.GRADYK(IESP)
  151. * In licht SEGACT LIPOVA.MPGRAD(*)
  152. CALL LICHT(IGRYKF,MPGRYK,TYPE,IGEOM)
  153. LIPOVA.MPGRAD(**)=MPGRYK
  154. ENDDO
  155.  
  156. IF(ITIMP .NE. 0)THEN
  157. CALL LICHT(ITIMP,MPTIMP,TYPE,IGEOM)
  158. C SEGACT*MOD MPVIMP
  159. CALL KRIPAD(IGEOM,MLETIM)
  160. C SEGACT IGEOM
  161. C SEGACT MLETIM
  162. MELEME = IGEOM
  163. SEGDES MELEME
  164. ENDIF
  165. IF(IRIMP .NE. 0)THEN
  166. CALL LICHT(IRIMP,MPRIMP,TYPE,IGEOM)
  167. C SEGACT*MOD MPVIMP
  168. CALL KRIPAD(IGEOM,MLERIM)
  169. C SEGACT IGEOM
  170. C SEGACT MLERIM
  171. MELEME = IGEOM
  172. SEGDES MELEME
  173. ENDIF
  174.  
  175. C
  176. SEGACT MELEFL
  177. SEGACT MELEMF
  178. NFAC = MELEMF.NUM(/2)
  179. C
  180. C**** Boucle sur les faces
  181. C
  182. DO NLCF = 1, NFAC, 1
  183. C
  184. C******* NLCF = numero local du centre de facel
  185. C NGCF = numero global du centre de facel
  186. C NLCF1 = numero local du centre de face
  187. C NGCEG = numero global du centre ELT "gauche"
  188. C NLCEG = numero local du centre ELT "gauche"
  189. C NGCED = numero global du centre ELT "droite"
  190. C NLCED = numero local du centre ELT "droite"
  191. C
  192. NGCF = MELEMF.NUM(1,NLCF)
  193. NGCF1 = MELEFL.NUM(2,NLCF)
  194. IF(NGCF .NE. NGCF1)THEN
  195. MOTERR(1:40)= 'FACEL et FACE = ? '
  196. CALL ERREUR(5)
  197. GOTO 9999
  198. ENDIF
  199. C
  200. NGCEG = MELEFL.NUM(1,NLCF)
  201. NGCED = MELEFL.NUM(3,NLCF)
  202. NLCEG = MLCENT.LECT(NGCEG)
  203. NLCED = MLCENT.LECT(NGCED)
  204. C
  205. C******* On controlle si sur NGCF on impose de CL
  206. C
  207. C NLFTI = numero local du centre de face sul le maillage des
  208. C "températures" "imposées"
  209. C
  210. IF(ITIMP .NE. 0)THEN
  211. NLFTI = MLETIM.LECT(NGCF)
  212. ELSE
  213. NLFTI = 0
  214. ENDIF
  215. C
  216. IF(IRIMP .NE. 0)THEN
  217. NLFRI = MLERIM.LECT(NGCF)
  218. ELSE
  219. NLFRI = 0
  220. ENDIF
  221. C
  222. IF(NGCEG .NE. NGCED)THEN
  223. C
  224. C********** Parametres geometriques
  225. C
  226. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  227. XF = MCOORD.XCOOR(ICOORX)
  228. YF = MCOORD.XCOOR(ICOORX+1)
  229. C
  230. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  231. XG = MCOORD.XCOOR(ICOORX)
  232. YG = MCOORD.XCOOR(ICOORX+1)
  233. XFMXG = XF - XG
  234. YFMYG = YF - YG
  235. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG))
  236. C
  237. ICOORX = ((IDIM + 1) * (NGCED - 1))+1
  238. XD = MCOORD.XCOOR(ICOORX)
  239. YD = MCOORD.XCOOR(ICOORX+1)
  240. XFMXD = XF - XD
  241. YFMYD = YF - YD
  242. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD))
  243. C
  244. C********** F=G -> DRG = 0 -> ALPHA = 0
  245. C
  246. ALPHA=DRG/(DRG+DRD)
  247. UMALPH= 1.0D0 - ALPHA
  248. C
  249. C********** Les valeurs à l'interface
  250. C
  251. C DRG=0 -> F=G
  252. C
  253. C
  254. C********** Température
  255. C
  256. IF( NLFTI .GT. 0) THEN
  257. TEMF = MPTIMP.VPOCHA(NLFTI,1)
  258. ELSE
  259. C************* Gauche
  260. TEMG = MPTEMC.VPOCHA(NLCEG,1)
  261. C************* Droite
  262. TEMD = MPTEMC.VPOCHA(NLCED,1)
  263. C************* Face
  264. TEMF = UMALPH * TEMG + ALPHA * TEMD
  265. ENDIF
  266. C
  267. C********** Rho
  268. C
  269. IF( NLFRI .GT. 0) THEN
  270. RHOF = MPRIMP.VPOCHA(NLFRI,1)
  271. ELSE
  272. C************* Gauche
  273. RHOG = MPROC.VPOCHA(NLCEG,1)
  274. C************* Droite
  275. RHOD = MPROC.VPOCHA(NLCED,1)
  276. C************* Face
  277. RHOF = UMALPH * RHOG + ALPHA * RHOD
  278. ENDIF
  279. ELSE
  280. C
  281. C********** MURS
  282. C
  283. C Etat a gauche = Etat droite
  284. C
  285. ALPHA=0.0D0
  286. UMALPH=1.0D0
  287. C
  288. C********** Parametres geometriques
  289. C
  290. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  291. XF = MCOORD.XCOOR(ICOORX)
  292. YF = MCOORD.XCOOR(ICOORX+1)
  293. C
  294. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  295. XG = MCOORD.XCOOR(ICOORX)
  296. YG = MCOORD.XCOOR(ICOORX+1)
  297. XFMXG = XF - XG
  298. YFMYG = YF - YG
  299. C
  300. C********** Température
  301. C
  302. IF( NLFTI .GT. 0) THEN
  303. TEMF = MPTIMP.VPOCHA(NLFTI,1)
  304. ELSE
  305. TEMF = MPTEMC.VPOCHA(NLCEG,1)
  306. ENDIF
  307. C
  308. C********** Rho
  309. C
  310. IF( NLFRI .GT. 0) THEN
  311. RHOF = MPRIMP.VPOCHA(NLFRI,1)
  312. ELSE
  313. RHOF = MPROC.VPOCHA(NLCEG,1)
  314. ENDIF
  315. ENDIF
  316. C
  317. C******* On calcule le sign du pruduit scalare
  318. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  319. C
  320. CNX = MPNORM.VPOCHA(NLCF,1)
  321. CNY = MPNORM.VPOCHA(NLCF,2)
  322. ORIENT = CNX * XFMXG + CNY * YFMYG
  323. ORIENT = SIGN(1.0D0,ORIENT)
  324. IF(ORIENT .NE. 1.0D0)THEN
  325. MOTERR(1:40)=
  326. & 'LAPN , subroutine zlap12.eso. '
  327. WRITE(IOIMP,*) MOTERR(1:40)
  328. CALL ERREUR(5)
  329. GOTO 9999
  330. ENDIF
  331. C
  332. C******* Les flux aux interfaces
  333. C
  334. SURF = MPSURF.VPOCHA(NLCF,1)
  335. DIAM = UMALPH*MPDIAM.VPOCHA(NLCEG,1) +
  336. & ALPHA*MPDIAM.VPOCHA(NLCED,1)
  337. DIAM2=DIAM*DIAM
  338. MPCDIN=LIPOV2.MPDIFF(NESP+1)
  339. CPN=PROPHY.CV(NESP+1)+PROPHY.R(NESP+1)
  340. HNF=(CPN*TEMF)+PROPHY.H0K(NESP+1)
  341. DO IESP=1,NESP
  342. MPCDIF=LIPOV2.MPDIFF(IESP)
  343. DK=UMALPH*MPCDIF.VPOCHA(NLCEG,1) +
  344. $ ALPHA*MPCDIF.VPOCHA(NLCED,1)
  345. DN=UMALPH*MPCDIN.VPOCHA(NLCEG,1) +
  346. $ ALPHA*MPCDIN.VPOCHA(NLCED,1)
  347. MPGRYK=LIPOVA.MPGRAD(IESP)
  348. DYKDX=MPGRYK.VPOCHA(NLCF,1)
  349. DYKDY=MPGRYK.VPOCHA(NLCF,2)
  350. CPK=PROPHY.CV(IESP)+PROPHY.R(IESP)
  351. HKF=(CPK*TEMF)+PROPHY.H0K(IESP)
  352. * Contribution pour l'espèce IESP
  353. MPFLUX.VPOCHA(NLCF,IDIM+1+IESP)=
  354. $ RHOF*DK*((DYKDX*CNX)+(DYKDY*CNY))*SURF*(-1.D0)
  355. * Contribution pour l'énergie totale
  356. MPFLUX.VPOCHA(NLCF,IDIM+1)=
  357. $ MPFLUX.VPOCHA(NLCF,IDIM+1)+
  358. $ (RHOF*((HKF*DK)-(HNF*DN))
  359. $ *((DYKDX*CNX)+(DYKDY*CNY))*SURF*(-1.D0))
  360. * Le pas de temps
  361. CELL=(4.0D0*DK)/DIAM2
  362. IF(CELL .GT. UNSDT)THEN
  363. UNSDT=CELL
  364. ENDIF
  365. ENDDO
  366. C DO IESP=1,NESP+1
  367. C MPCDIF=LIPOV2.MPDIFF(IESP)
  368. C DK=UMALPH*MPCDIF.VPOCHA(NLCEG,1) +
  369. C $ ALPHA*MPCDIF.VPOCHA(NLCED,1)
  370. C MPGRYK=LIPOVA.MPGRAD(IESP)
  371. C DYKDX=MPGRYK.VPOCHA(NLCF,1)
  372. C DYKDY=MPGRYK.VPOCHA(NLCF,2)
  373. C CPK=PROPHY.CV(IESP)+PROPHY.R(IESP)
  374. C HKF=(CPK*TEMF)+PROPHY.H0K(IESP)
  375. C* Contribution pour l'espèce IESP
  376. C IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
  377. C MPFLUX.VPOCHA(NLCF,IDIM+1+IESP)=
  378. C $ RHOF*DK*((DYKDX*CNX)+(DYKDY*CNY))*SURF*(-1.D0)
  379. C ENDIF
  380. C* Contribution pour l'énergie totale
  381. C MPFLUX.VPOCHA(NLCF,IDIM+1)=
  382. C $ MPFLUX.VPOCHA(NLCF,IDIM+1)+
  383. C $ (RHOF*HKF*DK*((DYKDX*CNX)+(DYKDY*CNY))*SURF*(-1.D0))
  384. C* Le pas de temps
  385. C CELL=(4.0D0*DK)/DIAM2
  386. C IF(CELL .GT. UNSDT)THEN
  387. C UNSDT=CELL
  388. C ENDIF
  389. C ENDDO
  390. C
  391. ENDDO
  392. C
  393. C
  394. DT = 1.0D0 / (UNSDT + XPETIT)
  395. C
  396. SEGDES MELEFL
  397. SEGDES MELEMF
  398. SEGDES MELEMC
  399. SEGDES MPSURF
  400. SEGDES MPNORM
  401. SEGDES MPDIAM
  402. SEGSUP MLCENT
  403. C
  404. SEGDES MPROC
  405. SEGDES MPTEMC
  406. SEGDES PROPHY
  407. SEGDES LIPOVA.MPGRAD(*)
  408. SEGSUP LIPOVA
  409. SEGDES LIPOV2.MPDIFF(*)
  410. SEGSUP LIPOV2
  411. SEGDES MPFLUX
  412. C
  413. IF(ITIMP .NE. 0) THEN
  414. SEGDES MPTIMP
  415. SEGSUP MLETIM
  416. ENDIF
  417. C
  418. IF(IRIMP .NE. 0) THEN
  419. SEGDES MPRIMP
  420. SEGSUP MLERIM
  421. ENDIF
  422. C
  423. 9999 CONTINUE
  424. RETURN
  425. END
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  

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