Télécharger couplage_thermique3.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : couplage_thermique3.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. *
  5. *------------ Cas test couplage_thermique3.dgibi -------------------
  6. *
  7. *
  8. * Tests des opérateurs de Castem-fluide
  9. *
  10. *
  11. *- Options générales
  12. *
  13. OPTI DIME 2 ELEM QUA8 ECHO 0 ;
  14. GRAPH = 'N' ;
  15. EPS0 = 1.D-6 ;
  16. *
  17. *-------------------------------------------------------------------
  18. * Couplage thermique entre deux domaines solides l'échange entre les
  19. * deux domaines étant réalisés en assurant la continuité du flux et
  20. * une relation entre les champs inconnues à la frontière : on compare
  21. * à les solutions stationnaires calculée et analytique.
  22. *-------------------------------------------------------------------
  23. * La géométrie est un barreau constitué de deux parties de longueur
  24. * respective L1 et L2 et de diffusivité thermique D1 et D2. On a la
  25. * relation b1*Tg + b2*Tg = b3 à l'interface, bi étant connus et Tg
  26. * (resp. Td) représentant la valeur à la frontière coté gauche (resp.
  27. * coté droit). On note T1(x) (resp. T2(x)) la température dans le
  28. * premier barreau (resp. dans le deuxième).
  29. *
  30. * Chargement : Flux nul sur les frontières haute et basse (1D) et
  31. * température imposées aux deux extrémités (notée T1 et T2).
  32. *
  33. * Solution stationnaire : Soit Tg (resp. Td) la température au niveau
  34. * de l'interface entre les deux barreaux vue du premier barreau (resp.
  35. * du deuxième). A l'état stationnaire, l'égalité des gradients et la
  36. * condition de saut à l'interface donne :
  37. * Tg*det = (a1*T1 + a2*T2)*b2 - b3*a2
  38. * Td*det = b3*a1 - (a1*T1 + a2*T2)*b1
  39. * avec a1=D1/L1, a2=D2/L2 et det=a1b2 - a2b1
  40. * On a alors
  41. * T1(x) = T1 + (Tg-T1) x/L1 pour x in [0,L1]
  42. * T2(x) = T2 + (Td-T2) (L1+L2-x)/L2 pour x in [L1,L1+L2]
  43. *
  44. * Application numérique : D1=2 ; L1=1 ; T1=0 ; D2=3 ; L2=5 ; T2=1 ;
  45. * Relation de saut : 5*Tg - 3*Td = 2
  46. * On obtient alors a1=2 et a2=3/5; Tg=1/3 et Td=-1/9 ;
  47. * T1(x) = x/3
  48. * T2(x) = (2*x-3)/9
  49. *
  50. * ATTENTION : La convergence de l'algorithme de Quarteroni n'est pas
  51. * garantie pour d'autres choix de data !
  52. *
  53. *-------------------------------------------------------------------
  54. * Auteur : F.Dabbene 05/06
  55. *-------------------------------------------------------------------
  56. *
  57. *= Données physico-numériques
  58. *
  59. * DISCR=LINE/MACRO/QUAF
  60. DISCR = 'LINE' ;
  61. *
  62. L1 = 1. ; D1 = 2. ; T1 = 0. ; a1 = D1/L1 ;
  63. L2 = 5. ; D2 = 3. ; T2 = 1. ; a2 = D2/L2 ;
  64. *b1 = 7. ; b2 = 11. ; b3 = 2. ;
  65. *b1 =-5. ; b2 = 5. ; b3 = 10. ;
  66. *b1 = 1. ; b2 = -1. ; b3 = -2. ;
  67. b1 = 5. ; b2 = -3. ; b3 = 2. ;
  68. T0 = T1 + T2 / 2. ;
  69. *
  70. *--------------------------------------- Début de la procédure KEXEC
  71. *
  72. 'DEBP' kexec ;
  73. *
  74. ************************ K E X E C ************************************
  75. *
  76. * Résolution implicite d'un problème de mécanique des fluides décrit
  77. * par l'intermédiaire d'une table structurée par l'opérateur EQEX.
  78. *
  79. * E/ rv : Table décrivant le problème à résoudre
  80. * /S rv : A l'indice INCO, table contenant la solution au temps final
  81. *
  82. * L'utilisateur peut par l'intermédiaire de procédures personnelles
  83. * stocker les résultats aux temps intermédiaires, faire des tracés, ...
  84. *
  85. ************************ K E X E C ************************************
  86. *
  87. 'ARGUMENT' rv*'TABLE ' ;
  88. *
  89. *========================
  90. * TESTS et INITIALISATION
  91. *========================
  92. *
  93. *
  94. * On n'accepte que les formulations en modèle NAVIER_STOKES
  95. 'SI' ('EGA' (rv . 'NAVISTOK') 0) ;
  96. 'MESS' 'Pas de modèle NAVIER_STOKES' ;
  97. 'ERRE' 5 ;
  98. 'FINSI' ;
  99. *
  100. * On n'accepte qu'un schéma en temps d'Euler
  101. * ischt=0 si le schéma en temps n'est ni BDF2, ni BDF4
  102. ischt = 0 ;
  103. dimope = 'DIME' (rv . 'LISTOPER') ;
  104. 'REPETER' bloc0 dimope ;
  105. nomper = 'EXTRAIRE' &bloc0 (rv . 'LISTOPER') ;
  106. notable = 'MOT' ('TEXTE' ('CHAINE' &bloc0 nomper)) ;
  107. 'SI' ('EGA' nomper 'DFDT ') ;
  108. ischt = ischt + rv . notable . 'KOPT' . 'ISCHT' ;
  109. 'FINSI' ;
  110. 'FIN' bloc0 ;
  111. 'SI' ('NEG' ischt 0) ;
  112. 'MESS' 'Pas de schéma en temps autre que Euler' ;
  113. 'ERRE' 5 ;
  114. 'FINSI' ;
  115. *
  116. * Coefficient de relaxation mis à 1 si non initialisé
  117. 'SI' ('NON' ('EXISTE' rv 'OMEGA')) ;
  118. 'MESS' '** WARNING ** OMEGA NON défini --> OMEGA=1' ;
  119. omeg = 1.D0 ;
  120. 'SINON' ;
  121. omeg = rv . 'OMEGA' ;
  122. 'FINSI' ;
  123. *
  124. * Création de la table pour historique
  125. 'SI' ('NON' ('EXISTE' rv 'HIST')) ;
  126. rv . 'HIST' = 'TABLE' ;
  127. 'FINSI' ;
  128. *
  129. * IMPKRES : Niveau d'impression pour KRES
  130. * IMPTCRR : Fréquence d'impression pour TCRR (affichage résidu)
  131. IMPKRES = 0 ;
  132. IMPTCRR = RV . 'IMPR' ;
  133. *
  134. *========================
  135. * RESOLUTION suivant EQEX
  136. *========================
  137. *
  138. *
  139. * 1
  140. * Boucle en temps
  141. *----------------
  142. ITMA = rv . 'ITMA' ;
  143. 'SI' ('<EG' ITMA 1) ; ITMA = 1 ; 'FINSI' ;
  144. 'REPETER' bloc1 ITMA ;
  145. *
  146. * 2
  147. * Boucle de point fixe interne à un pas de temps
  148. *-----------------------------------------------
  149. 'REPETER' bloci (rv . 'NITER') ;
  150. * st mat : Second membre et matrice des opérateurs DFDT
  151. * sf mau : Second membre er matrice des opérateurs sauf DFDT
  152. st mat = 'KOPS' 'MATRIK' ;
  153. sf mau = 'KOPS' 'MATRIK' ;
  154. *
  155. * 3
  156. * Boucle sur les opérateurs de EQEX
  157. *----------------------------------
  158. 'REPETER' bloc2 dimope ;
  159. nomper = 'EXTRAIRE' &bloc2 (rv . 'LISTOPER') ;
  160. notable = 'MOT' ('TEXTE' ('CHAINE' &bloc2 nomper)) ;
  161. 'SI' ('EGA' nomper 'DFDT ') ;
  162. msi mai = ('TEXTE' nomper) (rv . notable) ;
  163. mat = mat 'ET' mai ;
  164. st = st 'ET' msi ;
  165. 'SINO' ;
  166. msi mai = ('TEXTE' nomper) (rv . notable) ;
  167. mau = mau 'ET' mai ;
  168. sf = sf 'ET' msi ;
  169. 'FINSI' ;
  170. 'FIN' bloc2 ;
  171. *--------------------------------------
  172. * Fin Boucle sur les opérateurs de EQEX
  173. * 3
  174. *
  175. s2 = sf 'ET' st ;
  176. ma1 = mau 'ET' mat ;
  177. 'SI' ('EXISTE' rv 'CLIM') ;
  178. s1 = rv . 'CLIM' ;
  179. 'SINON' ;
  180. s1 = ' ' ;
  181. 'FINSI' ;
  182. rv . 'S2' = s2 ;
  183. rv . 'METHINV' . 'MATASS' = ma1 ;
  184. rv . 'METHINV' . 'MAPREC' = ma1 ;
  185. res = 'KRES' ma1 'TYPI' (rv . 'METHINV')
  186. 'CLIM' s1
  187. 'SMBR' s2
  188. 'IMPR' IMPKRES ;
  189. *'LIST' res ;
  190. 'SI' ('EXIS' (rv . 'INCO') 'LX') ;
  191. rv . 'INCO' . 'LXOK' = 1 ;
  192. rv . 'INCO' . 'LX' = 'EXCO' 'LX' res ;
  193. 'FINSI' ;
  194. eps = 'TCRR' res omeg (rv . 'INCO') 'IMPR' IMPTCRR ;
  195. 'MENAGE' ;
  196. 'FIN' bloci ;
  197. *---------------------------------------------------
  198. * Fin Boucle de point fixe interne à un pas de temps
  199. * 2
  200. *
  201. irt = 0 ;
  202. 'SI' ('EGA' (rv . 'ITMA') 0) ;
  203. irt = 'TCNM' rv 'NOUP';
  204. 'SINON' ;
  205. irt = 'TCNM' rv ;
  206. 'FINSI' ;
  207. 'MENAGE' ;
  208. 'SI' ('EGA' irt 1) ;
  209. 'MESSAGE' ' Temps final atteint : ' (rv . 'PASDETPS' . 'TPS') ;
  210. 'QUITTER' bloc1 ;
  211. 'FINSI' ;
  212. 'FIN' bloc1 ;
  213. *--------------------
  214. * Fin Boucle en temps
  215. * 1
  216. *
  217. ************************ K E X E C ************************************
  218. 'FINPROC' ;
  219. *--------------------------------------- Fin de la procédure KEXEC
  220. *
  221. *
  222. *--------------------------------------- Début de la procédure KRELA
  223. *
  224. 'DEBPROC' krela rvx*table ;
  225. *
  226. RV = RVX . 'EQEX' ;
  227. fron = 'DOMA' RVX.'DOMZ' 'MAILLAGE' ;
  228. chp1 mat1 = 'KOPS' 'MATRIK' ;
  229. *
  230. * Imposition du flux pour chaque sous-problème
  231. chp1 mat1 = 'LAPN' rv . '1LAPN' ;
  232. tf1 = 'NOMC' 'T1' rv . 'INCO' . 'T1' ;
  233. val1 = 'KOPS' mat1 'MULT' tf1 ;
  234. val1 = 'NOMC' 'SCAL' val1 ;
  235. chp2 mat2 = 'LAPN' rv . '2LAPN' ;
  236. tf2 = 'NOMC' 'T2' rv . 'INCO' . 'T2' ;
  237. val2 = 'KOPS' mat2 'MULT' tf2 ;
  238. val2 = 'NOMC' 'SCAL' val2 ;
  239. v1 = val1 - val2 / 2. ;
  240. v2 = val2 - val1 / 2. ;
  241. rv . 'INCO' . 'FLU1' = 'KCHT' RVX.'DOMZ' 'SCAL' 'SOMMET' v1 ;
  242. rv . 'INCO' . 'FLU2' = 'KCHT' RVX.'DOMZ' 'SCAL' 'SOMMET' v2 ;
  243. *
  244. rela1 = 'RELA' b1 'UX' fron + b2 'UY' fron ;
  245. smr1 = 'DEPI' rela1 b3 ;
  246. rela2 = 'KOPS' 'RIMA' rela1 ;
  247. rela3 = 'KOPS' 'CHANINCO' rela2
  248. ('MOTS' 'LX' 'UX' 'UY')
  249. ('MOTS' 'LX' 'T1' 'T2')
  250. ('MOTS' 'FLX' 'FX' 'FY')
  251. ('MOTS' 'LX' 'T1' 'T2')
  252. ;
  253. smr3 = 'EXCO' smr1 'FLX' 'LX' ;
  254. *
  255. 'FINP' smr3 rela3 ;
  256. *--------------------------------------- Fin de la procédure KRELA
  257. *
  258. *= MAILLAGE
  259. *
  260. XMIN = 0. ; X1 = XMIN + L1 ; X2 = X1 + L2 ;
  261. YMIN = 0. ; DY = 1. ; Y1 = YMIN + DY ; Y2 = Y1 + DY ;
  262. NX = 5 ; NY = 1 ;
  263. *
  264. *------------------------------------------ Points du premier domaine
  265. P1 = XMIN YMIN ;
  266. P2 = X1 YMIN ;
  267. P3 = X1 Y2 ;
  268. P4 = XMIN Y2 ;
  269. *------------------------------------------ Points du deuxième domaine
  270. PD1 = P2 ;
  271. PD2 = X2 YMIN ;
  272. PD3 = X2 Y2 ;
  273. PD4 = P3 ;
  274. *------------------------------------------ Lignes du premier domaine
  275. P1P2 = P1 'DROIT' NX P2 ;
  276. P2P3 = P2 'DROIT' NY P3 ;
  277. P3P4 = P3 'DROIT' NX P4 ;
  278. P4P1 = P4 'DROIT' NY P1 ;
  279. *------------------------------------------ Lignes du deuxième domaine
  280. PD1PD2 = PD1 'DROIT' NX PD2 ;
  281. PD2PD3 = PD2 'DROIT' NY PD3 ;
  282. PD3PD4 = PD3 'DROIT' NX PD4 ;
  283. PD4PD1 = 'INVERSE' P2P3 ;
  284. *------------------------------------------ Maillages
  285. *
  286. * Afin d'éviter toute confusion de maillages, ces objets sont à écraser
  287. * après la création des modèles (à remplacer par le maillage qui
  288. * soustend le modèle)
  289. DOM1 = 'DALLER' P1P2 P2P3 P3P4 P4P1 ;
  290. DOM2 = 'DALLER' PD1PD2 PD2PD3 PD3PD4 PD4PD1 ;
  291. DGAU = P4P1 ;
  292. DDRO = PD2PD3 ;
  293. DBA1 = P1P2 ;
  294. DBA2 = PD1PD2 ;
  295. *
  296. *= Création des MODELES
  297. *
  298. DDOM1 = 'CHANGER' DOM1 'QUAF' ;
  299. DDOM2 = 'CHANGER' DOM2 'QUAF' ;
  300. DDOMT = DDOM1 'ET' DDOM2 ;
  301. DDBA1 = 'CHANGER' DBA1 'QUAF' ;
  302. DDBA2 = 'CHANGER' DBA2 'QUAF' ;
  303. DDGAU = 'CHANGER' DGAU 'QUAF' ;
  304. DDDRO = 'CHANGER' DDRO 'QUAF' ;
  305. DFRON = 'CHANGER' P2P3 'QUAF' ;
  306. *
  307. $DOM1 = 'MODELISER' DDOM1 'NAVIER_STOKES' DISCR ;
  308. $DOM2 = 'MODELISER' DDOM2 'NAVIER_STOKES' DISCR ;
  309. $DOMT = 'MODELISER' DDOMT 'NAVIER_STOKES' DISCR ;
  310. $DBA1 = 'MODELISER' DDBA1 'NAVIER_STOKES' DISCR ;
  311. $DBA2 = 'MODELISER' DDBA2 'NAVIER_STOKES' DISCR ;
  312. $DGAU = 'MODELISER' DDGAU 'NAVIER_STOKES' DISCR ;
  313. $DDRO = 'MODELISER' DDDRO 'NAVIER_STOKES' DISCR ;
  314. $FRON = 'MODELISER' DFRON 'NAVIER_STOKES' DISCR ;
  315. *
  316. DOM1 = 'DOMA' $DOM1 'MAILLAGE' ;
  317. DOM2 = 'DOMA' $DOM2 'MAILLAGE' ;
  318. DOMT = 'DOMA' $DOMT 'MAILLAGE' ;
  319. DGAU = 'DOMA' $DGAU 'MAILLAGE' ;
  320. DDRO = 'DOMA' $DDRO 'MAILLAGE' ;
  321. FRON = 'DOMA' $FRON 'MAILLAGE' ;
  322. DBA1 = 'DOMA' $DBA1 'MAILLAGE' ;
  323. DBA2 = 'DOMA' $DBA2 'MAILLAGE' ;
  324. *
  325. *= Solution analytique
  326. *
  327. DET0 = a1*b2 - (a2*b1) ;
  328. DET1 = a1*T1 + (a2*T2) * b2 - (a2*b3) ;
  329. DET2 = a1*T1 + (a2*T2) * b1 * -1. + (a1*b3) ;
  330. TG = DET1 / DET0 ;
  331. TD = DET2 / DET0 ;
  332. D1X = 'EXTR' ('EVOL' 'CHPO' DBA1 ('COOR' 1 DBA1)) 'ORDO' 1 ;
  333. D2X = 'EXTR' ('EVOL' 'CHPO' DBA2 ('COOR' 1 DBA2)) 'ORDO' 1 ;
  334. X1X = D1X / L1 ;
  335. NBPT = 'NBEL' ('CHAN' 'POI1' DBA1) ;
  336. X2X = D2X - ('PROG' NBPT*L1) / L2 ;
  337. T1X = (TG-T1)*X1X + ('PROG' NBPT*T1) ;
  338. T2X = (T2-TD)*X2X + ('PROG' NBPT*TD) ;
  339. EV1 = 'EVOL' 'ROUG' 'MANU' D1X T1X ;
  340. EV2 = 'EVOL' 'ROUG' 'MANU' D2X T2X ;
  341. EV3 = EV1 ET EV2 ;
  342. *
  343. *
  344. *
  345. *
  346. * MODELISATION DU PROBLEME
  347. *
  348. *-------------------------------------------------------------------
  349. * L'état stationnaire est obtenu en résolvant le problème contraint par
  350. * la relation sur les températures d'interface, la condition de flux
  351. * continu étant imposée à chaque pas d'un processus itératif (sorte
  352. * d'algorithme de Quarteroni sans découplage mais avec condition de
  353. * Neumann/Neumann à l'interface entre les deux problèmes)
  354. *-------------------------------------------------------------------
  355. *
  356. *= Description du problème (table EQEX)
  357. *
  358. * Description de chaque sous-problème
  359. RV = 'EQEX' $DOMT 'ITMA' 1 'NITER' 200 'ALFA' 1.
  360. 'OPTI' 'EF' 'IMPL'
  361. 'ZONE' $DOM1 'OPER' 'LAPN' D1 'INCO' 'T1'
  362. 'ZONE' $DOM2 'OPER' 'LAPN' D2 'INCO' 'T2' ;
  363. *
  364. * Traitement de l'interface
  365. RV = 'EQEX' RV
  366. 'OPTI' 'EF' 'IMPL' 'CENTREE'
  367. 'ZONE' $FRON 'OPER' 'FIMP' 'FLU1' 'INCO' 'T1'
  368. 'ZONE' $FRON 'OPER' 'FIMP' 'FLU2' 'INCO' 'T2'
  369. 'ZONE' $FRON 'OPER' KRELA
  370. ;
  371. *
  372. * Conditions aux limites (extrémités du domaine)
  373. RV = 'EQEX' RV
  374. 'CLIM' 'T1' 'TIMP' DGAU T1
  375. 'CLIM' 'T2' 'TIMP' DDRO T2 ;
  376. *
  377. *= Initialisation de la table INCO et résolution
  378. *
  379. RV . 'INCO' . 'T1' = 'KCHT' $DOM1 SCAL SOMMET T0 ;
  380. RV . 'INCO' . 'T2' = 'KCHT' $DOM2 SCAL SOMMET T0 ;
  381. RV . 'INCO' . 'FLU1' = 'KCHT' $FRON SCAL SOMMET 0. ;
  382. RV . 'INCO' . 'FLU2' = 'KCHT' $FRON SCAL SOMMET 0. ;
  383. *
  384. chp1 mat1 = 'KOPS' 'MATRIK' ;
  385. RV . 'INCO' . 'LX' = chp1 ;
  386. *
  387. *
  388. * Méthode d'inversion du problème : méthode directe
  389. rv . 'METHINV' . 'TYPINV' = 1 ;
  390. *-------------------- Utilisé en itératif seulement
  391. rv . 'METHINV' . 'IMPINV' = 0 ;
  392. rv . 'METHINV' . 'NITMAX' = 100 ;
  393. rv . 'METHINV' . 'PRECOND' = 3 ;
  394. rv . 'METHINV' . 'RESID' = 1.e-6 ;
  395. rv . 'METHINV' . 'FCPRECT' = 1 ;
  396. rv . 'METHINV' . 'FCPRECI' = 1 ;
  397. rv . 'METHINV' . 'PCMLAG' = 'APR2' ;
  398. *
  399. KEXEC RV ;
  400. *
  401. *= Post-traitement de la solution calculée
  402. *
  403. EVC1 = 'EVOL' 'CHPO' DBA1 RV.'INCO'.'T1' ;
  404. EVC2 = 'EVOL' 'CHPO' DBA2 RV.'INCO'.'T2' ;
  405. CT1 = 'EXTR' EVC1 'ORDO' 1 ;
  406. CT2 = 'EXTR' EVC2 'ORDO' 1 ;
  407. EVC3 = ('EVOL' 'VERT' 'MANU' D1X CT1)
  408. 'ET' ('EVOL' 'VERT' 'MANU' D2X CT2) ;
  409. *
  410. *= Tracés
  411. *
  412. 'SI' ('EGA' GRAPH 'O') ;
  413. CHAM1 = 'CHAN' 'CHAM' RV.'INCO'.'T1' DOM1 ;
  414. CHAM2 = 'CHAN' 'CHAM' RV.'INCO'.'T2' DOM2 ;
  415. 'TRAC' $DOMT (CHAM1 'ET' CHAM2) ;
  416. *
  417. TAB1 = 'TABLE' ;
  418. TAB1 . 'TITRE' = 'TABLE' ;
  419. TAB1 . 'TITRE' . 2 = 'Solution castem' ;
  420. TAB1 . 'TITRE' . 1 = '---------------' ;
  421. TAB1 . 'TITRE' . 4 = 'Solution exacte' ;
  422. TAB1 . 'TITRE' . 3 = '---------------' ;
  423. TAB1 . 1 = 'MARQ CROI NOLI' ;
  424. TAB1 . 2 = 'MARQ CROI NOLI' ;
  425. 'DESS' (EVC3 'ET' EV3) 'TITR' 'Temperature en fonction de x'
  426. 'TITX' 'x' 'TITY' 'T' 'MIMA'
  427. 'LEGE' TAB1 ;
  428. 'FINSI' ;
  429. *
  430. *= Controle erreur
  431. *
  432. SOM1 = 'ABS' (('MAXI' ('INTG' EV3)) - ('MAXI' ('INTG' EVC3))) ;
  433. TEST = SOM1 '<' EPS0 ;
  434. 'SI' TEST ;
  435. 'ERRE' 0 ;
  436. 'SINO' ;
  437. 'MESS' 'Analytic Integration - Computed = Difference ' ;
  438. 'MESS' ('MAXI' ('INTG' EV3))'-' ('MAXI' ('INTG' EVC3)) '=' SOM1 ;
  439. 'ERRE' 5 ;
  440. 'FINSI' ;
  441. 'FIN' ;
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  

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