Télécharger xlap12.eso

Retour à la liste

Numérotation des lignes :

xlap12
  1. C XLAP12 SOURCE OF166741 24/12/13 21:17:37 12097
  2. SUBROUTINE XLAP12(IMUC,IKAPC,ICVC,IROC,IVITC,IGRVC,
  3. & IGRTC,IVIMP,ITAUIM,IQIMP,
  4. & MELEMC,MELEMF,MELEFL,ISURF,INORM,IDIAM,
  5. & ICHFLU,DT)
  6. C
  7. C************************************************************************
  8. C
  9. C PROJET : CASTEM 2000
  10. C
  11. C NOM : XLAP12
  12. C
  13. C DESCRIPTION : Subroutine appellée par ZLAP11
  14. C
  15. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  16. C
  17. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF
  18. C
  19. C************************************************************************
  20. C
  21. C
  22. C ENTRÉES:
  23. C *******
  24. C
  25. C IMUC : pointeur du CHAMPOINT "CENTRE"
  26. C viscosité dynamique (kg/m^3 * m^2/s dans le SI)
  27. C
  28. C IKAPC : pointeur du CHAMPOINT "CENTRE"
  29. C conductivité thermique (J / (s m K))
  30. C
  31. C ICVC : pointeur du CHAMPOINT "CENTRE"
  32. C chaleur spécifique à volume constant (J / (kg K))
  33. C
  34. C IROC : pointeur du CHAMPOINT "CENTRE" densité (kg/m^3)
  35. C
  36. C IVITC : pointeur du CHAMPOINT "CENTRE" vitesse
  37. C
  38. C IGRVC : pointeur du CHAMPOINT "FACE" gradient de vitesse
  39. C
  40. C IGRTC : pointeur du CHAMPOINT "FACE" gradient de
  41. C température
  42. C
  43. C IVIMP : pointeur de CHAMPOINT vitesse imposé (sur des
  44. C points FACE)
  45. C
  46. C ITAUIM : pointeur de CHAMPOINT tenseur de contraintes
  47. C visqueux imposé (sur des points FACE)
  48. C
  49. C IQIMP : pointeur de CHAMPOINT flux de chaleur imposé
  50. C (sur des points FACE)
  51. C
  52. C MELEMC : pointeur du maillage "CENTRE"
  53. C
  54. C MELEMF : pointeur du maillage "FACE"
  55. C
  56. C MELEFL : pointeur du maillage "FACEL"
  57. C
  58. C ISURF : pointeur du CHAMPOINT "FACE" qui contient les
  59. C surfaces de faces
  60. C
  61. C INORM : pointeur du CHAMPOINT "FACE" qui contient les
  62. C normales aux faces
  63. C
  64. C IDIAM : pointeur du CHAMPOINT "CENTRE" qui contient le
  65. C diamètre des elts
  66. C
  67. C
  68. C SORTIES
  69. C *******
  70. C
  71. C ICHFLU : pointeur du CHAMPOINT "FACE" qui contient les
  72. C flux diffusives aux interface
  73. C
  74. C DT (REAL*8) : pas de temps de stabilité donné par le critère
  75. C de Fourier
  76. C
  77. C***********************************************************************
  78. C
  79. C**** N.B.: Traitement des conditions aux bords
  80. C
  81. C 'VIMP' : la vitesse imposé n'importe ou!
  82. C
  83. C 'QIMP' : flux de chaleur imposé n'importe ou
  84. C
  85. C 'TAUI' : tenseur de contraintes visqueux imposé n'importe ou
  86. C
  87. C
  88. IMPLICIT INTEGER(I-N)
  89.  
  90. -INC PPARAM
  91. -INC CCOPTIO
  92. -INC CCREEL
  93. -INC SMCHPOI
  94. -INC SMELEME
  95. -INC SMCOORD
  96. -INC SMLENTI
  97. -INC SMLMOTS
  98. C
  99. POINTEUR MPMUC.MPOVAL,MPKAPC.MPOVAL,MPCVC.MPOVAL,
  100. $ MPROC.MPOVAL, MPVITC.MPOVAL, MPGRVF.MPOVAL,
  101. & MPGRTF.MPOVAL,
  102. & MPVIMP.MPOVAL, MPTAUI.MPOVAL, MPQIMP.MPOVAL,
  103. & MPSURF.MPOVAL, MPNORM.MPOVAL, MPDIAM.MPOVAL,
  104. & MPFLUX.MPOVAL
  105. C
  106. POINTEUR MELEMC.MELEME,MELEMF.MELEME,MELEFL.MELEME
  107. POINTEUR MLCENT.MLENTI,MLEVIM.MLENTI,MLEQIM.MLENTI,MLETAI.MLENTI
  108. C
  109. INTEGER IMUC,IKAPC,ICVC,
  110. $ IROC,IVITC,IGRVC,IGRTC,IVIMP,ITAUIM,IQIMP
  111. & ,ISURF,INORM,IDIAM,ICHFLU
  112. & ,NFAC, NLCF, NGCF, NGCF1, NGCEG, NGCED
  113. & ,NLCEG,NLCED,NLFVI,NLFTI,NLFQI
  114. & , ICOORX, IGEOM
  115.  
  116. REAL*8 MU,KAPPA,LAMBRO,CV,DT, UNSDT
  117. & ,UXG,UYG
  118. & ,XG,YG,XFMXG,YFMYG,DRG
  119. & ,UXD,UYD
  120. & ,XD,YD,XFMXD,YFMYD,DRD,ALPHA,UMALPH
  121. & ,UXF,UYF,DUXXF,DUXYF,DUYXF,DUYYF,DTXF,DTYF
  122. & ,DSTDU,TAUXX,TAUXY,TAUYY,QX,QY,XF,YF
  123. & ,CNX, CNY, ORIENT, RO, DIAM, DIAM2, CELL, SURF
  124. C
  125. CHARACTER*8 TYPE
  126. C
  127. C**** Initialisation de 1/DT
  128. C
  129. UNSDT = 0.0D0
  130. C
  131. C**** KRIPAD pour la correspondance global/local de centre
  132. C
  133. CALL KRIPAD(MELEMC,MLCENT)
  134. C
  135. C EN KRIPAD
  136. C SEGACT MELEMC
  137. C SEGACT MLCENT
  138. C
  139. CALL LICHT(IMUC,MPMUC,TYPE,IGEOM)
  140. CALL LICHT(IKAPC,MPKAPC,TYPE,IGEOM)
  141. CALL LICHT(ICVC,MPCVC,TYPE,IGEOM)
  142. CALL LICHT(IROC,MPROC,TYPE,IGEOM)
  143. CALL LICHT(IVITC,MPVITC,TYPE,IGEOM)
  144. CALL LICHT(IGRVC,MPGRVF,TYPE,IGEOM)
  145. CALL LICHT(IGRTC,MPGRTF,TYPE,IGEOM)
  146. CALL LICHT(ISURF,MPSURF,TYPE,IGEOM)
  147. CALL LICHT(INORM,MPNORM,TYPE,IGEOM)
  148. CALL LICHT(IDIAM,MPDIAM,TYPE,IGEOM)
  149. CALL LICHT(ICHFLU,MPFLUX,TYPE,IGEOM)
  150. C
  151. C EN LICHT
  152. C SEGACT*MOD MPMUC
  153. C SEGACT*MOD MPKAPC
  154. C SEGACT*MOD MPCVC
  155. C SEGACT*MOD MPROC
  156. C SEGACT*MOD MPVITC
  157. C SEGACT*MOD MPGRVF
  158. C SEGACT*MOD MPGRTF
  159. C SEGACT*MOD MPSURF
  160. C SEGACT*MOD MPNORM
  161. C SEGACT*MOD MPDIAM
  162. C SEGACT*MOD MPFLUX
  163. C
  164. IF(IVIMP .NE. 0)THEN
  165. CALL LICHT(IVIMP,MPVIMP,TYPE,IGEOM)
  166. C SEGACT*MOD MPVIMP
  167. CALL KRIPAD(IGEOM,MLEVIM)
  168. C SEGACT IGEOM
  169. C SEGACT MLEVIM
  170. MELEME = IGEOM
  171. SEGDES MELEME
  172. ENDIF
  173. IF(ITAUIM .NE. 0)THEN
  174. CALL LICHT(ITAUIM,MPTAUI,TYPE,IGEOM)
  175. C SEGACT*MOD MPTAUI
  176. CALL KRIPAD(IGEOM,MLETAI)
  177. C SEGACT IGEOM
  178. C SEGACT MLETAI
  179. MELEME = IGEOM
  180. SEGDES MELEME
  181. ENDIF
  182. IF(IQIMP .NE. 0)THEN
  183. CALL LICHT(IQIMP,MPQIMP,TYPE,IGEOM)
  184. C SEGACT*MOD MPQIMP
  185. CALL KRIPAD(IGEOM,MLEQIM)
  186. C SEGACT IGEOM
  187. C SEGACT MLEQIM
  188. MELEME = IGEOM
  189. SEGDES MELEME
  190. ENDIF
  191. C
  192. SEGACT MELEFL
  193. SEGACT MELEMF
  194. NFAC = MELEMF.NUM(/2)
  195. C
  196. C**** Boucle sur les faces
  197. C
  198. DO NLCF = 1, NFAC, 1
  199. C
  200. C******* NLCF = numero local du centre de facel
  201. C NGCF = numero global du centre de facel
  202. C NLCF1 = numero local du centre de face
  203. C NGCEG = numero global du centre ELT "gauche"
  204. C NLCEG = numero local du centre ELT "gauche"
  205. C NGCED = numero global du centre ELT "droite"
  206. C NLCED = numero local du centre ELT "droite"
  207. C
  208. NGCF = MELEMF.NUM(1,NLCF)
  209. NGCF1 = MELEFL.NUM(2,NLCF)
  210. IF(NGCF .NE. NGCF1)THEN
  211. MOTERR(1:40)= 'FACEL et FACE = ? '
  212. CALL ERREUR(5)
  213. GOTO 9999
  214. ENDIF
  215. C
  216. NGCEG = MELEFL.NUM(1,NLCF)
  217. NGCED = MELEFL.NUM(3,NLCF)
  218. NLCEG = MLCENT.LECT(NGCEG)
  219. NLCED = MLCENT.LECT(NGCED)
  220. C
  221. C******* On controlle si sur NGCF on impose de CL
  222. C
  223. C NLFVI = numero local du centre de face sul le maillage des
  224. C "vitesses" "imposées"
  225. C
  226. C NLFTI = numero local du centre de face sul le maillage des
  227. C "tau" "imposés"
  228. C
  229. C NLFQI = numero local du centre de face sul le maillage des
  230. C "q" "imposés"
  231. C
  232. IF(IVIMP .NE. 0)THEN
  233. NLFVI = MLEVIM.LECT(NGCF)
  234. ELSE
  235. NLFVI = 0
  236. ENDIF
  237. C
  238. IF(ITAUIM .NE. 0)THEN
  239. NLFTI = MLETAI.LECT(NGCF)
  240. ELSE
  241. NLFTI = 0
  242. ENDIF
  243. C
  244. IF(IQIMP .NE. 0)THEN
  245. NLFQI = MLEQIM.LECT(NGCF)
  246. ELSE
  247. NLFQI = 0
  248. ENDIF
  249. C
  250. IF(NGCEG .NE. NGCED)THEN
  251. C
  252. C********** Parametres geometriques
  253. C
  254. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  255. XF = MCOORD.XCOOR(ICOORX)
  256. YF = MCOORD.XCOOR(ICOORX+1)
  257. C
  258. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  259. XG = MCOORD.XCOOR(ICOORX)
  260. YG = MCOORD.XCOOR(ICOORX+1)
  261. XFMXG = XF - XG
  262. YFMYG = YF - YG
  263. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG))
  264. C
  265. ICOORX = ((IDIM + 1) * (NGCED - 1))+1
  266. XD = MCOORD.XCOOR(ICOORX)
  267. YD = MCOORD.XCOOR(ICOORX+1)
  268. XFMXD = XF - XD
  269. YFMYD = YF - YD
  270. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD))
  271. C
  272. C********** F=G -> DRG = 0 -> ALPHA = 0
  273. C
  274. ALPHA=DRG/(DRG+DRD)
  275. UMALPH= 1.0D0 - ALPHA
  276. C
  277. C********** Les valeurs à l'interface
  278. C
  279. C DRG=0 -> F=G
  280. C
  281. C
  282. C********** Tenseur de contraintes visqueux
  283. C
  284. DUXXF = MPGRVF.VPOCHA(NLCF,1)
  285. DUXYF = MPGRVF.VPOCHA(NLCF,2)
  286. DUYXF = MPGRVF.VPOCHA(NLCF,3)
  287. DUYYF = MPGRVF.VPOCHA(NLCF,4)
  288. C
  289. IF (NLFTI .GT. 0) THEN
  290. TAUXX = MPTAUI.VPOCHA(NLFTI,1)
  291. TAUYY = MPTAUI.VPOCHA(NLFTI,2)
  292. TAUXY = MPTAUI.VPOCHA(NLFTI,3)
  293. ELSE
  294. MU=UMALPH*MPMUC.VPOCHA(NLCEG,1) +
  295. & ALPHA*MPMUC.VPOCHA(NLCED,1)
  296. DSTDU = 2.0D0/3.0D0 * (DUXXF + DUYYF)
  297. TAUXX = MU * (2.0D0 * DUXXF - DSTDU)
  298. TAUXY = MU * (DUXYF + DUYXF)
  299. TAUYY = MU * (2.0D0 * DUYYF - DSTDU)
  300. ENDIF
  301. C
  302. C********** Vitesse
  303. C
  304. IF( NLFVI .GT. 0) THEN
  305. UXF = MPVIMP.VPOCHA(NLFVI,1)
  306. UYF = MPVIMP.VPOCHA(NLFVI,2)
  307. ELSE
  308. C************* Gauche
  309. UXG = MPVITC.VPOCHA(NLCEG,1)
  310. UYG = MPVITC.VPOCHA(NLCEG,2)
  311. C************* Droite
  312. UXD = MPVITC.VPOCHA(NLCED,1)
  313. UYD = MPVITC.VPOCHA(NLCED,2)
  314. C************* Face
  315. UXF = UMALPH * UXG + ALPHA * UXD
  316. UYF = UMALPH * UYG + ALPHA * UYD
  317. C************* Correction de la vitesse lineaire exacte
  318. UXF = UXF +
  319. & (DUXXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  320. & (DUXYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA)))
  321. UYF = UYF +
  322. & (DUYXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  323. & (DUYYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA)))
  324. ENDIF
  325. C
  326. C********** Flux de chaleur
  327. C
  328. IF(NLFQI .GT. 0)THEN
  329. QX = MPQIMP.VPOCHA(NLFQI,1)
  330. QY = MPQIMP.VPOCHA(NLFQI,2)
  331. ELSE
  332. C************* Gauche
  333. DTXF = MPGRTF.VPOCHA(NLCF,1)
  334. DTYF = MPGRTF.VPOCHA(NLCF,2)
  335. C
  336. KAPPA=UMALPH*MPKAPC.VPOCHA(NLCEG,1) +
  337. & ALPHA*MPKAPC.VPOCHA(NLCED,1)
  338. QX = -1.0D0 * KAPPA * DTXF
  339. QY = -1.0D0 * KAPPA * DTYF
  340. C
  341. ENDIF
  342. ELSE
  343. C
  344. C********** MURS
  345. C
  346. C Etat a gauche = Etat droite
  347. C
  348. ALPHA=0.0D0
  349. UMALPH=1.0D0
  350. C
  351. C********** Parametres geometriques
  352. C
  353. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  354. XF = MCOORD.XCOOR(ICOORX)
  355. YF = MCOORD.XCOOR(ICOORX+1)
  356. C
  357. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  358. XG = MCOORD.XCOOR(ICOORX)
  359. YG = MCOORD.XCOOR(ICOORX+1)
  360. XFMXG = XF - XG
  361. YFMYG = YF - YG
  362. C
  363. C********** Tenseur de contraintes visqueux
  364. C
  365. DUXXF = MPGRVF.VPOCHA(NLCF,1)
  366. DUXYF = MPGRVF.VPOCHA(NLCF,2)
  367. DUYXF = MPGRVF.VPOCHA(NLCF,3)
  368. DUYYF = MPGRVF.VPOCHA(NLCF,4)
  369. C
  370. IF (NLFTI .GT. 0) THEN
  371. TAUXX = MPTAUI.VPOCHA(NLFTI,1)
  372. TAUYY = MPTAUI.VPOCHA(NLFTI,2)
  373. TAUXY = MPTAUI.VPOCHA(NLFTI,3)
  374. ELSE
  375. MU=UMALPH*MPMUC.VPOCHA(NLCEG,1) +
  376. & ALPHA*MPMUC.VPOCHA(NLCED,1)
  377. DSTDU = 2.0D0/3.0D0 * (DUXXF + DUYYF)
  378. TAUXX = MU * (2.0D0 * DUXXF - DSTDU)
  379. TAUXY = MU * (DUXYF + DUYXF)
  380. TAUYY = MU * (2.0D0 * DUYYF - DSTDU)
  381. ENDIF
  382. C
  383. C********** Vitesse
  384. C
  385. IF( NLFVI .GT. 0) THEN
  386. UXF = MPVIMP.VPOCHA(NLFVI,1)
  387. UYF = MPVIMP.VPOCHA(NLFVI,2)
  388. ELSE
  389. UXF = MPVITC.VPOCHA(NLCEG,1)
  390. UYF = MPVITC.VPOCHA(NLCEG,2)
  391. C************* Correction de la vitesse lineaire exacte
  392. UXF = UXF +
  393. & (DUXXF * XFMXG ) +
  394. & (DUXYF * YFMYG )
  395. UYF = UYF +
  396. & (DUYXF * XFMXG ) +
  397. & (DUYYF * YFMYG )
  398. ENDIF
  399. C
  400. C********** Flux de chaleur
  401. C
  402. IF(NLFQI .GT. 0)THEN
  403. QX = MPQIMP.VPOCHA(NLFQI,1)
  404. QY = MPQIMP.VPOCHA(NLFQI,2)
  405. ELSE
  406. C************* Gauche
  407. DTXF = MPGRTF.VPOCHA(NLCF,1)
  408. DTYF = MPGRTF.VPOCHA(NLCF,2)
  409. C
  410. KAPPA=UMALPH*MPKAPC.VPOCHA(NLCEG,1) +
  411. & ALPHA*MPKAPC.VPOCHA(NLCED,1)
  412. QX = -1.0D0 * KAPPA * DTXF
  413. QY = -1.0D0 * KAPPA * DTYF
  414. C
  415. ENDIF
  416. ENDIF
  417. C
  418. C******* On calcule le sign du pruduit scalare
  419. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  420. C
  421. CNX = MPNORM.VPOCHA(NLCF,1)
  422. CNY = MPNORM.VPOCHA(NLCF,2)
  423. ORIENT = CNX * XFMXG + CNY * YFMYG
  424. ORIENT = SIGN(1.0D0,ORIENT)
  425. IF(ORIENT .NE. 1.0D0)THEN
  426. MOTERR(1:40)=
  427. & 'LAPN , subroutine xlap12.eso. '
  428. WRITE(IOIMP,*) MOTERR(1:40)
  429. CALL ERREUR(5)
  430. GOTO 9999
  431. ENDIF
  432. C
  433. C******* Le flux aux interfaces
  434. C
  435. SURF = MPSURF.VPOCHA(NLCF,1)
  436. MPFLUX.VPOCHA(NLCF,1) = ((TAUXX * CNX) + (TAUXY * CNY))
  437. & * SURF * (-1.0D0)
  438. MPFLUX.VPOCHA(NLCF,2) = ((TAUXY * CNX) + (TAUYY * CNY))
  439. & * SURF * (-1.0D0)
  440. MPFLUX.VPOCHA(NLCF,3) = (
  441. & ((TAUXX * UXF + TAUXY * UYF - QX) * CNX) +
  442. & ((TAUXY * UXF + TAUYY * UYF - QY) * CNY))
  443. & * SURF * (-1.0D0)
  444. C
  445. C****** Le pas de temps
  446. C
  447. CV=UMALPH*MPCVC.VPOCHA(NLCEG,1) +
  448. & ALPHA*MPCVC.VPOCHA(NLCED,1)
  449. RO=UMALPH*MPROC.VPOCHA(NLCEG,1) +
  450. & ALPHA*MPROC.VPOCHA(NLCED,1)
  451. DIAM = UMALPH*MPDIAM.VPOCHA(NLCEG,1) +
  452. & ALPHA*MPDIAM.VPOCHA(NLCED,1)
  453. DIAM2=DIAM*DIAM
  454. CELL = 4.0D0*MU / (DIAM2*RO)
  455. LAMBRO=KAPPA/CV
  456. CELL = MAX(CELL, (4.0D0*LAMBRO/(DIAM2*RO)))
  457. C
  458. IF(CELL .GT. UNSDT)THEN
  459. UNSDT = CELL
  460. ENDIF
  461. C
  462. ENDDO
  463. C
  464. C
  465. DT = 1.0D0 / (UNSDT + XPETIT)
  466. C
  467. SEGDES MELEFL
  468. SEGDES MELEMF
  469. SEGDES MELEMC
  470. SEGDES MPSURF
  471. SEGDES MPNORM
  472. SEGDES MPDIAM
  473. SEGSUP MLCENT
  474. C
  475. SEGDES MPKAPC
  476. SEGDES MPMUC
  477. SEGDES MPCVC
  478. SEGDES MPROC
  479. SEGDES MPVITC
  480. SEGDES MPGRVF
  481. SEGDES MPGRTF
  482. SEGDES MPFLUX
  483. C
  484. IF(IVIMP .NE. 0) THEN
  485. SEGDES MPVIMP
  486. SEGSUP MLEVIM
  487. ENDIF
  488. IF(ITAUIM .NE. 0)THEN
  489. SEGDES MPTAUI
  490. SEGSUP MLETAI
  491. ENDIF
  492. IF(IQIMP .NE. 0)THEN
  493. SEGDES MPQIMP
  494. SEGDES MLEQIM
  495. ENDIF
  496. C
  497. 9999 CONTINUE
  498. RETURN
  499. END
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  

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