Télécharger ylap12.eso

Retour à la liste

Numérotation des lignes :

ylap12
  1. C YLAP12 SOURCE CB215821 20/11/25 13:44:01 10792
  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. C**** Variables de COOPTIO
  106. C
  107. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  108. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  109. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  110. C & ,IECHO, IIMPI, IOSPI
  111. C & ,IDIM
  112. CC & ,MCOORD
  113. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  114. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  115. C & ,NORINC,NORVAL,NORIND,NORVAD
  116. C & ,NUCROU, IPSAUV
  117. CC
  118. INTEGER IROC,IVITC,IGRVC,IGRTC,IVIMP,ITAUIM,IQIMP
  119. & ,ISURF,INORM,IDIAM,ICHFLU
  120. & ,NFAC, NLCF, NGCF, NGCF1, NGCEG, NGCED
  121. & ,NLCEG,NLCED,NLFVI,NLFTI,NLFQI
  122. & , ICOORX, IGEOM
  123.  
  124. REAL*8 MU,KAPPA,CV,LAMBRO,DT, UNSDT
  125. & ,UXG,UYG
  126. & ,XG,YG,XFMXG,YFMYG,DRG
  127. & ,UXD,UYD
  128. & ,XD,YD,XFMXD,YFMYD,DRD,ALPHA,UMALPH
  129. & ,UXF,UYF,DUXXF,DUXYF,DUYXF,DUYYF,DTXF,DTYF
  130. & ,DSTDU,TAUXX,TAUXY,TAUYY,QX,QY,XF,YF
  131. & ,CNX, CNY, ORIENT, RO, DIAM, DIAM2, CELL, SURF
  132. C
  133. CHARACTER*8 TYPE
  134. C
  135. C**** Initialisation de 1/DT
  136. C
  137. UNSDT = 0.0D0
  138. LAMBRO = KAPPA / CV
  139. C
  140. C**** KRIPAD pour la correspondance global/local de centre
  141. C
  142. CALL KRIPAD(MELEMC,MLCENT)
  143. C
  144. C EN KRIPAD
  145. C SEGACT MELEMC
  146. C SEGACT MLCENT
  147. C
  148. CALL LICHT(IROC,MPROC,TYPE,IGEOM)
  149. CALL LICHT(IVITC,MPVITC,TYPE,IGEOM)
  150. CALL LICHT(IGRVC,MPGRVF,TYPE,IGEOM)
  151. CALL LICHT(IGRTC,MPGRTF,TYPE,IGEOM)
  152. CALL LICHT(ISURF,MPSURF,TYPE,IGEOM)
  153. CALL LICHT(INORM,MPNORM,TYPE,IGEOM)
  154. CALL LICHT(IDIAM,MPDIAM,TYPE,IGEOM)
  155. CALL LICHT(ICHFLU,MPFLUX,TYPE,IGEOM)
  156. C
  157. C EN LICHT
  158. C SEGACT*MOD MPROC
  159. C SEGACT*MOD MPVITC
  160. C SEGACT*MOD MPGRVF
  161. C SEGACT*MOD MPGRTF
  162. C SEGACT*MOD MPSURF
  163. C SEGACT*MOD MPNORM
  164. C SEGACT*MOD MPDIAM
  165. C SEGACT*MOD MPFLUX
  166. C
  167. IF(IVIMP .NE. 0)THEN
  168. CALL LICHT(IVIMP,MPVIMP,TYPE,IGEOM)
  169. C SEGACT*MOD MPVIMP
  170. CALL KRIPAD(IGEOM,MLEVIM)
  171. C SEGACT IGEOM
  172. C SEGACT MLEVIM
  173. MELEME = IGEOM
  174. SEGDES MELEME
  175. ENDIF
  176. IF(ITAUIM .NE. 0)THEN
  177. CALL LICHT(ITAUIM,MPTAUI,TYPE,IGEOM)
  178. C SEGACT*MOD MPTAUI
  179. CALL KRIPAD(IGEOM,MLETAI)
  180. C SEGACT IGEOM
  181. C SEGACT MLETAI
  182. MELEME = IGEOM
  183. SEGDES MELEME
  184. ENDIF
  185. IF(IQIMP .NE. 0)THEN
  186. CALL LICHT(IQIMP,MPQIMP,TYPE,IGEOM)
  187. C SEGACT*MOD MPQIMP
  188. CALL KRIPAD(IGEOM,MLEQIM)
  189. C SEGACT IGEOM
  190. C SEGACT MLEQIM
  191. MELEME = IGEOM
  192. SEGDES MELEME
  193. ENDIF
  194. C
  195. SEGACT MELEFL
  196. SEGACT MELEMF
  197. NFAC = MELEMF.NUM(/2)
  198. C
  199. C**** Boucle sur les faces
  200. C
  201. DO NLCF = 1, NFAC, 1
  202. C
  203. C******* NLCF = numero local du centre de facel
  204. C NGCF = numero global du centre de facel
  205. C NLCF1 = numero local du centre de face
  206. C NGCEG = numero global du centre ELT "gauche"
  207. C NLCEG = numero local du centre ELT "gauche"
  208. C NGCED = numero global du centre ELT "droite"
  209. C NLCED = numero local du centre ELT "droite"
  210. C
  211. NGCF = MELEMF.NUM(1,NLCF)
  212. NGCF1 = MELEFL.NUM(2,NLCF)
  213. IF(NGCF .NE. NGCF1)THEN
  214. MOTERR(1:40)= 'FACEL et FACE = ? '
  215. CALL ERREUR(5)
  216. GOTO 9999
  217. ENDIF
  218. C
  219. NGCEG = MELEFL.NUM(1,NLCF)
  220. NGCED = MELEFL.NUM(3,NLCF)
  221. NLCEG = MLCENT.LECT(NGCEG)
  222. NLCED = MLCENT.LECT(NGCED)
  223. C
  224. C******* On controlle si sur NGCF on impose de CL
  225. C
  226. C NLFVI = numero local du centre de face sul le maillage des
  227. C "vitesses" "imposées"
  228. C
  229. C NLFTI = numero local du centre de face sul le maillage des
  230. C "tau" "imposés"
  231. C
  232. C NLFQI = numero local du centre de face sul le maillage des
  233. C "q" "imposés"
  234. C
  235. IF(IVIMP .NE. 0)THEN
  236. NLFVI = MLEVIM.LECT(NGCF)
  237. ELSE
  238. NLFVI = 0
  239. ENDIF
  240. C
  241. IF(ITAUIM .NE. 0)THEN
  242. NLFTI = MLETAI.LECT(NGCF)
  243. ELSE
  244. NLFTI = 0
  245. ENDIF
  246. C
  247. IF(IQIMP .NE. 0)THEN
  248. NLFQI = MLEQIM.LECT(NGCF)
  249. ELSE
  250. NLFQI = 0
  251. ENDIF
  252. C
  253. IF(NGCEG .NE. NGCED)THEN
  254. C
  255. C********** Parametres geometriques
  256. C
  257. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  258. XF = MCOORD.XCOOR(ICOORX)
  259. YF = MCOORD.XCOOR(ICOORX+1)
  260. C
  261. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  262. XG = MCOORD.XCOOR(ICOORX)
  263. YG = MCOORD.XCOOR(ICOORX+1)
  264. XFMXG = XF - XG
  265. YFMYG = YF - YG
  266. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG))
  267. C
  268. ICOORX = ((IDIM + 1) * (NGCED - 1))+1
  269. XD = MCOORD.XCOOR(ICOORX)
  270. YD = MCOORD.XCOOR(ICOORX+1)
  271. XFMXD = XF - XD
  272. YFMYD = YF - YD
  273. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD))
  274. C
  275. C********** F=G -> DRG = 0 -> ALPHA = 0
  276. C
  277. ALPHA=DRG/(DRG+DRD)
  278. UMALPH= 1.0D0 - ALPHA
  279. C
  280. C********** Les valeurs à l'interface
  281. C
  282. C DRG=0 -> F=G
  283. C
  284. C
  285. C********** Tenseur de contraintes visqueux
  286. C
  287. DUXXF = MPGRVF.VPOCHA(NLCF,1)
  288. DUXYF = MPGRVF.VPOCHA(NLCF,2)
  289. DUYXF = MPGRVF.VPOCHA(NLCF,3)
  290. DUYYF = MPGRVF.VPOCHA(NLCF,4)
  291. C
  292. IF (NLFTI .GT. 0) THEN
  293. TAUXX = MPTAUI.VPOCHA(NLFTI,1)
  294. TAUYY = MPTAUI.VPOCHA(NLFTI,2)
  295. TAUXY = MPTAUI.VPOCHA(NLFTI,3)
  296. ELSE
  297. DSTDU = 2.0D0/3.0D0 * (DUXXF + DUYYF)
  298. TAUXX = MU * (2.0D0 * DUXXF - DSTDU)
  299. TAUXY = MU * (DUXYF + DUYXF)
  300. TAUYY = MU * (2.0D0 * DUYYF - DSTDU)
  301. ENDIF
  302. C
  303. C********** Vitesse
  304. C
  305. IF( NLFVI .GT. 0) THEN
  306. UXF = MPVIMP.VPOCHA(NLFVI,1)
  307. UYF = MPVIMP.VPOCHA(NLFVI,2)
  308. ELSE
  309. C************* Gauche
  310. UXG = MPVITC.VPOCHA(NLCEG,1)
  311. UYG = MPVITC.VPOCHA(NLCEG,2)
  312. C************* Droite
  313. UXD = MPVITC.VPOCHA(NLCED,1)
  314. UYD = MPVITC.VPOCHA(NLCED,2)
  315. C************* Face
  316. UXF = UMALPH * UXG + ALPHA * UXD
  317. UYF = UMALPH * UYG + ALPHA * UYD
  318. C************* Correction de la vitesse lineaire exacte
  319. UXF = UXF +
  320. & (DUXXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  321. & (DUXYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA)))
  322. UYF = UYF +
  323. & (DUYXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  324. & (DUYYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA)))
  325. ENDIF
  326. C
  327. C********** Flux de chaleur
  328. C
  329. IF(NLFQI .GT. 0)THEN
  330. QX = MPQIMP.VPOCHA(NLFQI,1)
  331. QY = MPQIMP.VPOCHA(NLFQI,2)
  332. ELSE
  333. C************* Gauche
  334. DTXF = MPGRTF.VPOCHA(NLCF,1)
  335. DTYF = MPGRTF.VPOCHA(NLCF,2)
  336. C
  337. QX = -1.0D0 * KAPPA * DTXF
  338. QY = -1.0D0 * KAPPA * DTYF
  339. C
  340. ENDIF
  341. ELSE
  342. C
  343. C********** MURS
  344. C
  345. C Etat a gauche = Etat droite
  346. C
  347. ALPHA=0.0D0
  348. UMALPH=1.0D0
  349. C
  350. C********** Parametres geometriques
  351. C
  352. ICOORX = ((IDIM + 1) * (NGCF - 1))+1
  353. XF = MCOORD.XCOOR(ICOORX)
  354. YF = MCOORD.XCOOR(ICOORX+1)
  355. C
  356. ICOORX = ((IDIM + 1) * (NGCEG - 1))+1
  357. XG = MCOORD.XCOOR(ICOORX)
  358. YG = MCOORD.XCOOR(ICOORX+1)
  359. XFMXG = XF - XG
  360. YFMYG = YF - YG
  361. C
  362. C********** Tenseur de contraintes visqueux
  363. C
  364. DUXXF = MPGRVF.VPOCHA(NLCF,1)
  365. DUXYF = MPGRVF.VPOCHA(NLCF,2)
  366. DUYXF = MPGRVF.VPOCHA(NLCF,3)
  367. DUYYF = MPGRVF.VPOCHA(NLCF,4)
  368. C
  369. IF (NLFTI .GT. 0) THEN
  370. TAUXX = MPTAUI.VPOCHA(NLFTI,1)
  371. TAUYY = MPTAUI.VPOCHA(NLFTI,2)
  372. TAUXY = MPTAUI.VPOCHA(NLFTI,3)
  373. ELSE
  374. DSTDU = 2.0D0/3.0D0 * (DUXXF + DUYYF)
  375. TAUXX = MU * (2.0D0 * DUXXF - DSTDU)
  376. TAUXY = MU * (DUXYF + DUYXF)
  377. TAUYY = MU * (2.0D0 * DUYYF - DSTDU)
  378. ENDIF
  379. C
  380. C********** Vitesse
  381. C
  382. IF( NLFVI .GT. 0) THEN
  383. UXF = MPVIMP.VPOCHA(NLFVI,1)
  384. UYF = MPVIMP.VPOCHA(NLFVI,2)
  385. ELSE
  386. UXF = MPVITC.VPOCHA(NLCEG,1)
  387. UYF = MPVITC.VPOCHA(NLCEG,2)
  388. C************* Correction de la vitesse lineaire exacte
  389. UXF = UXF +
  390. & (DUXXF * XFMXG ) +
  391. & (DUXYF * YFMYG )
  392. UYF = UYF +
  393. & (DUYXF * XFMXG ) +
  394. & (DUYYF * YFMYG )
  395. ENDIF
  396. C
  397. C********** Flux de chaleur
  398. C
  399. IF(NLFQI .GT. 0)THEN
  400. QX = MPQIMP.VPOCHA(NLFQI,1)
  401. QY = MPQIMP.VPOCHA(NLFQI,2)
  402. ELSE
  403. C************* Gauche
  404. DTXF = MPGRTF.VPOCHA(NLCF,1)
  405. DTYF = MPGRTF.VPOCHA(NLCF,2)
  406. C
  407. QX = -1.0D0 * KAPPA * DTXF
  408. QY = -1.0D0 * KAPPA * DTYF
  409. C
  410. ENDIF
  411. ENDIF
  412. C
  413. C******* On calcule le sign du pruduit scalare
  414. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  415. C
  416. CNX = MPNORM.VPOCHA(NLCF,1)
  417. CNY = MPNORM.VPOCHA(NLCF,2)
  418. ORIENT = CNX * XFMXG + CNY * YFMYG
  419. ORIENT = SIGN(1.0D0,ORIENT)
  420. IF(ORIENT .NE. 1.0D0)THEN
  421. MOTERR(1:40)=
  422. & 'LAPN , subroutine ylap12.eso. '
  423. WRITE(IOIMP,*) MOTERR(1:40)
  424. CALL ERREUR(5)
  425. GOTO 9999
  426. ENDIF
  427. C
  428. C******* Le flux aux interfaces
  429. C
  430. SURF = MPSURF.VPOCHA(NLCF,1)
  431. MPFLUX.VPOCHA(NLCF,1) = ((TAUXX * CNX) + (TAUXY * CNY))
  432. & * SURF * (-1.0D0)
  433. MPFLUX.VPOCHA(NLCF,2) = ((TAUXY * CNX) + (TAUYY * CNY))
  434. & * SURF * (-1.0D0)
  435. MPFLUX.VPOCHA(NLCF,3) = (
  436. & ((TAUXX * UXF + TAUXY * UYF - QX) * CNX) +
  437. & ((TAUXY * UXF + TAUYY * UYF - QY) * CNY))
  438. & * SURF * (-1.0D0)
  439. C
  440. C****** Le pas de temps
  441. C
  442. RO=UMALPH*MPROC.VPOCHA(NLCEG,1) +
  443. & ALPHA*MPROC.VPOCHA(NLCED,1)
  444. DIAM = UMALPH*MPDIAM.VPOCHA(NLCEG,1) +
  445. & ALPHA*MPDIAM.VPOCHA(NLCED,1)
  446. DIAM2=DIAM*DIAM
  447. CELL = 4.0D0*MU / (DIAM2*RO)
  448. CELL = MAX(CELL, (4.0D0*LAMBRO/(DIAM2*RO)))
  449. C
  450. IF(CELL .GT. UNSDT)THEN
  451. UNSDT = CELL
  452. ENDIF
  453. C
  454. ENDDO
  455. C
  456. C
  457. DT = 1.0D0 / (UNSDT + XPETIT)
  458. C
  459. SEGDES MELEFL
  460. SEGDES MELEMF
  461. SEGDES MELEMC
  462. SEGDES MPSURF
  463. SEGDES MPNORM
  464. SEGDES MPDIAM
  465. SEGSUP MLCENT
  466. C
  467. SEGDES MPROC
  468. SEGDES MPVITC
  469. SEGDES MPGRVF
  470. SEGDES MPGRTF
  471. SEGDES MPFLUX
  472. C
  473. IF(IVIMP .NE. 0) THEN
  474. SEGDES MPVIMP
  475. SEGSUP MLEVIM
  476. ENDIF
  477. IF(ITAUIM .NE. 0)THEN
  478. SEGDES MPTAUI
  479. SEGSUP MLETAI
  480. ENDIF
  481. IF(IQIMP .NE. 0)THEN
  482. SEGDES MPQIMP
  483. SEGDES MLEQIM
  484. ENDIF
  485. C
  486. 9999 CONTINUE
  487. RETURN
  488. END
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  

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