Télécharger xlap12.eso

Retour à la liste

Numérotation des lignes :

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

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