Télécharger ylap12.eso

Retour à la liste

Numérotation des lignes :

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

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