Télécharger tube_scal_complet.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : tube_scal_complet.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. ******************************************************************
  5. * Transport d'un scalaire dans un tube *
  6. * *
  7. * FORMULATION VF COMPRESSIBLE EXPLICITE/IMPLICITE *
  8. * SOLVEURS: UPWIND/CENTERED *
  9. * *
  10. * A. BECCANTINI LTMF NOVEMBRE 2001 *
  11. ******************************************************************
  12.  
  13. 'OPTION' 'DIME' 2 'ELEM' 'QUA4' 'ISOV' 'SULI'
  14. 'ECHO' 1 'TRAC' 'X' ;
  15.  
  16. GRAPH = FAUX ;
  17. *GRAPH = VRAI ;
  18.  
  19. *******************
  20. *******************
  21. **** MESH *****
  22. *******************
  23. *******************
  24.  
  25. RAF = 16 ;
  26. NY = 4 ;
  27. NX = 12 '*' RAF ;
  28.  
  29. L = 1.0D0 ;
  30. DX = L '/' NX '/' 2.0D0;
  31. H = NY '*' DX ;
  32.  
  33. xD = 0.5D0 '*' L ;
  34. xG = -1.0D0 '*' xD ;
  35. yH = 0.5D0 '*' H ;
  36. yB = -1.0D0 '*' yH ;
  37.  
  38. A1 = xG yB ;
  39. A2 = 0.0D0 yB ;
  40. A3 = xD yB ;
  41. A4 = xD yH ;
  42. A5 = 0.0D0 yH ;
  43. A6 = xG yH ;
  44. VECTG = XG 0.0D0 ;
  45. VECTD = XD 0.0D0 ;
  46.  
  47. xBG = xG '-' DX;
  48. XBD = xD '+' DX;
  49.  
  50. B1 = xBG yB;
  51. B2 = xBG yH;
  52. B3 = xBD yB;
  53. B4 = xBD yH;
  54.  
  55. BAS1 = A1 'DROI' NX A2 ;
  56. BAS2 = A2 'DROI' NX A3 ;
  57. HAU2 = A4 'DROI' NX A5 ;
  58. HAU1 = A5 'DROI' NX A6 ;
  59. LATG = B1 'DROI' NY B2 ;
  60. LAT1 = A1 'DROI' NY A6 ;
  61. LAT12 = A2 'DROI' NY A5 ;
  62. LAT2 = A3 'DROI' NY A4 ;
  63. LATD = B3 'DROI' NY B4 ;
  64.  
  65.  
  66. DOM1 = LAT12 'TRANSLATION' NX VECTG ;
  67. DOM2 = LAT12 'TRANSLATION' NX VECTD ;
  68.  
  69. VECTFG = (-1.0D0 '*' DX) 0.0D0 ;
  70. VECTFD = DX 0.0D0 ;
  71.  
  72. FRONTG = LAT1 'TRANSLATION' 1 VECTFG ;
  73. FRONTG = FRONTG 'COUL' ROUG ;
  74.  
  75.  
  76. *
  77. *** Rotation
  78. *
  79.  
  80. ANGLE = 30.0D0;
  81. ORIG = 0.0D0 0.0D0;
  82.  
  83. DOM1 = DOM1 'TOURNER' ANGLE ORIG;
  84. DOM2 = DOM2 'TOURNER' ANGLE ORIG;
  85. FRONTG = FRONTG 'TOURNER' ANGLE ORIG;
  86.  
  87. DOMINT = DOM1 'ET' DOM2 ;
  88. 'ELIMINATION' DOMINT 1D-6;
  89.  
  90. DOMTOT = DOMINT 'ET' FRONTG ;
  91. 'ELIMINATION' DOMTOT 1D-6;
  92.  
  93. *
  94. **** EULER model to make the domaine table
  95. *
  96.  
  97. $DOMINT = 'MODE' DOMINT 'EULER' ;
  98. $FRONTG = 'MODE' FRONTG 'EULER' ;
  99. $DOMTOT = 'MODE' DOMTOT 'EULER' ;
  100.  
  101. TDOMTOT = 'DOMA' $DOMTOT 'VF' ;
  102. TDOMINT = 'DOMA' $DOMINT 'VF' ;
  103. TFRONTG = 'DOMA' $FRONTG 'VF' ;
  104.  
  105. QDOMINT = TDOMINT . 'QUAF' ;
  106. QFRONTG = TFRONTG . 'QUAF' ;
  107. QDOMTOT = TDOMTOT . 'QUAF' ;
  108. 'ELIMINATION' QDOMTOT 1D-6 QDOMINT ;
  109. 'ELIMINATION' QDOMTOT 1D-6 QFRONTG ;
  110.  
  111. *
  112. ******* Post-Treatment line
  113. *
  114.  
  115. 'OPTION' 'ELEM' 'QUA4' ;
  116. XINIT = XG '+' (0.5D0 '*' DX) ;
  117. YINIT = YB '+' (0.5D0 '*' DX) ;
  118. XFIN = XD '-' (0.5D0 '*' DX) ;
  119. YFIN = YINIT ;
  120. PINI = XINIT YINIT;
  121. PFIN = XFIN YFIN ;
  122. IAUX = (2 '*' NX) '-' 1 ;
  123. COURB = PINI 'DROIT' IAUX PFIN;
  124. COURB = COURB 'TOURNER' ANGLE ORIG;
  125. COURB = COURB 'COULEUR' 'VERT';
  126. 'ELIMINATION' 0.00001 Courb ('DOMA' $DOMTOT 'CENTRE') ;
  127.  
  128. 'SI' GRAPH ;
  129. 'TRACER' (DOMTOT 'ET' COURB) 'TITRE' ('CHAINE' 'Maillage ');
  130. 'FINSI' ;
  131.  
  132. **********************************
  133. **********************************
  134. **** INITIAL CONDITIONS ****
  135. **********************************
  136. **********************************
  137.  
  138. *
  139. *** Left state
  140. *
  141.  
  142. rog = 1.0 ;
  143.  
  144. *
  145. *** Right state
  146. *
  147.  
  148. rod = 1.250D-1 ;
  149.  
  150. * Speed
  151.  
  152. unscal = 1.0 ;
  153.  
  154. UX = unscal '*' ('COS' ANGLE) ;
  155. UY = unscal '*' ('SIN' ANGLE) ;
  156.  
  157. RO_f = 'MANUEL' 'CHPO' ('DOMA' $FRONTG 'CENTRE') 1 'SCAL' rog
  158. 'NATU' 'DISCRET';
  159.  
  160. RO_i = 'MANUEL' 'CHPO' ('DOMA' $DOMINT 'CENTRE') 1 'SCAL' rod
  161. 'NATU' 'DISCRET';
  162.  
  163. RN = RO_f et RO_i ;
  164.  
  165. UN = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'FACE') 2 'UX' UX 'UY' UY ;
  166.  
  167. *
  168. *** I.C. graphics
  169. *
  170.  
  171. MOD1 = 'MODELISER' ('DOMA' $DOMTOT 'MAILLAGE') 'THERMIQUE' ;
  172.  
  173. 'SI' GRAPH ;
  174. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
  175. 'TRACER' CHM_RN MOD1 'TITR' ('CHAINE' 'RO at t=' 0.0);
  176. 'FINSI' ;
  177.  
  178. *******************************************
  179. *******************************************
  180. ******** EXECUTION ************************
  181. *******************************************
  182. *******************************************
  183.  
  184. RN0 = 'COPIER' RN ;
  185.  
  186. *
  187. **** Computation parameters
  188. *
  189.  
  190. TPS = 0.0 ;
  191. SF = 2. ;
  192. *
  193. * SF = safety factor
  194. * In a regular mesh SF = 2 <-> CFL = 1
  195. *
  196. TFINAL = 0.5 ;
  197. METO = 'UPWIND' ;
  198. TEMPDIS = 'EXPLICIT' ;
  199.  
  200. *
  201. * METO = 'CENTERED'
  202. * 'UPWIND'
  203. *
  204. * TEMPDIS = 'EXPLICIT' -> Forward Euler scheme
  205. * 'IMPLICIT' -> Backward Euler scheme
  206. * 'CN' -> Cranck-Nicholson
  207. * 'SDIRK' -> Singly Diagonal Implicit Runge Kutta
  208. *
  209.  
  210. *
  211. **** Temporal loop
  212. *
  213.  
  214. 'MESSAGE' ;
  215. 'MESSAGE' ('CHAINE' 'SF = ' SF) ;
  216. 'MESSAGE' ;
  217.  
  218. *
  219. **** Jacobian and global matrix
  220. *
  221.  
  222. RF = 'PRET' 'CLAUDEIS' 'FACE' 1 $DOMTOT RN ;
  223. JACO = 'KONV' 'VF' 'CLAUDEIS' 'FACE' 'JACO' METO
  224. $DOMTOT RF UN ;
  225. RESI DELTAT = 'KONV' 'VF' 'CLAUDEIS' 'FACE' 'RESI' METO
  226. $DOMTOT RF UN ;
  227.  
  228. DT_CON = SF '*' DELTAT ;
  229.  
  230. 'SI' ('EGA' TEMPDIS 'IMPLICIT') ;
  231. MJACO = 'KOPS' 'MULT' -1. JACO ;
  232. MATIDE = 'KOPS' 'MATIDE' ('MOTS' 'SCAL')
  233. ('DOMA' $DOMTOT 'CENTRE') 'MATRIK' ;
  234. MATASS = ('KOPS' 'MULT' (1. '/' DT_CON) MATIDE) 'ET'
  235. MJACO ;
  236. 'FINSI' ;
  237.  
  238. 'SI' ('EGA' TEMPDIS 'CN');
  239. MJACO = 'KOPS' 'MULT' -0.5 JACO ;
  240. MATIDE = 'KOPS' 'MATIDE' ('MOTS' 'SCAL')
  241. ('DOMA' $DOMTOT 'CENTRE') 'MATRIK' ;
  242. MATASS = ('KOPS' 'MULT' (1. '/' DT_CON) MATIDE) 'ET'
  243. MJACO ;
  244. 'FINSI' ;
  245.  
  246. 'SI' ('EGA' TEMPDIS 'SDIRK') ;
  247. A11 = (3. '+' (3 '**' 0.5)) '/' 6. ;
  248. A22 = A11 ;
  249. A21 = 1. '-' (2. '*' A11) ;
  250. B1 = 0.5 ;
  251. B2 = 0.5 ;
  252. MJACO = 'KOPS' 'MULT' (-1. '*' A11) JACO ;
  253. MATIDE = 'KOPS' 'MATIDE' ('MOTS' 'SCAL')
  254. ('DOMA' $DOMTOT 'CENTRE') 'MATRIK' ;
  255. MATASS = ('KOPS' 'MULT' (1. '/' DT_CON) MATIDE) 'ET'
  256. MJACO ;
  257. 'FINSI' ;
  258.  
  259.  
  260. CLIM = 'MANUEL' 'CHPO' ('DOMA' $FRONTG 'CENTRE') 1 'SCAL' 0.0 ;
  261.  
  262. ***********************************
  263. **** Matrix inversion *************
  264. ***********************************
  265.  
  266. MATTAB = 'TABLE' 'METHINV' ;
  267. MATTAB . 'TYPINV' = 5 ;
  268. MATTAB . 'IMPINV' = 0 ;
  269.  
  270. * Methode de numerotation de DDL
  271. MATTAB . 'TYRENU' = 'SLOA' ;
  272. MATTAB . 'PCMLAG' = 'APR2' ;
  273. MATTAB . 'GMRESTRT' = 50 ;
  274. * ILU
  275. MATTAB . 'PRECOND' = 3 ;
  276. MATTAB . 'NITMAX' = 1000 ;
  277. MATTAB . 'RESID' = 1.D-10 ;
  278. DELTAR = RN '*' 0.0 ;
  279.  
  280. MATTAB . 'MATASS' = MATASS ;
  281. MATTAB . 'MAPREC' = MATASS ;
  282. MATTAB . 'XINIT' = DELTAR ;
  283.  
  284. ******************************
  285. **** Temporal loop *******
  286. ******************************
  287.  
  288. 'REPETER' BL1 -1 ;
  289.  
  290. RF = 'PRET' 'CLAUDEIS' 'FACE' 1 $DOMTOT RN ;
  291.  
  292. RESI DELTAT = 'KONV' 'VF' 'CLAUDEIS' 'FACE' 'RESI' METO
  293. $DOMTOT RF UN ;
  294.  
  295. DT_CON = SF '*' DELTAT ;
  296.  
  297. DTTPS = 'MAXIMUM' ('PROG' ((TFINAL '-' TPS) '*' (1.0001))
  298. 1.0E-15) ;
  299.  
  300. DTMIN = 'MINIMUM' ('PROG' DT_CON DTTPS) ;
  301.  
  302.  
  303. 'SI' ('EGA' TEMPDIS 'IMPLICIT') ;
  304. *
  305. ******* Implicit
  306. *
  307. 'SI' (DTMIN < DT_CON) ;
  308. MATASS = ('KOPS' 'MULT' (1. '/' DTMIN) MATIDE) 'ET'
  309. MJACO ;
  310. MATTAB . 'MATASS' = MATASS ;
  311. MATTAB . 'MAPREC' = MATASS ;
  312. 'FINSI' ;
  313. *
  314. DELTAR = 'KRES' MATASS
  315. 'TYPI' (MATTAB)
  316. 'CLIM' CLIM
  317. 'SMBR' RESI
  318. 'IMPR' 0 ;
  319. 'FINSI' ;
  320. *
  321. 'SI' ('EGA' TEMPDIS 'CN') ;
  322. 'SI' (DTMIN < DT_CON) ;
  323. MATASS = ('KOPS' 'MULT' (1. '/' DTMIN) MATIDE)
  324. 'ET' MJACO ;
  325. MATTAB . 'MATASS' = MATASS ;
  326. MATTAB . 'MAPREC' = MATASS ;
  327. 'FINSI' ;
  328. *
  329. DELTAR = 'KRES' MATASS
  330. 'TYPI' (MATTAB)
  331. 'CLIM' CLIM
  332. 'SMBR' RESI
  333. 'IMPR' 0 ;
  334. 'FINSI' ;
  335. *
  336. 'SI' ('EGA' TEMPDIS 'SDIRK') ;
  337. 'SI' (DTMIN < DT_CON) ;
  338. MATASS = ('KOPS' 'MULT' (1. '/' DTMIN) MATIDE) 'ET'
  339. MJACO ;
  340. MATTAB . 'MATASS' = MATASS ;
  341. MATTAB . 'MAPREC' = MATASS ;
  342. 'FINSI' ;
  343. *
  344. DELTAR1 = 'KRES' MATASS
  345. 'TYPI' (MATTAB)
  346. 'CLIM' CLIM
  347. 'SMBR' RESI
  348. 'IMPR' 0 ;
  349.  
  350. RF = 'PRET' 'CLAUDEIS' 'FACE' 1 $DOMTOT (RN '+' (A21 '*'
  351. DELTAR1)) ;
  352.  
  353. RESI DELTAT = 'KONV' 'VF' 'CLAUDEIS' 'FACE' 'RESI' METO
  354. $DOMTOT RF UN ;
  355.  
  356. DELTAR2 = 'KRES' MATASS
  357. 'TYPI' (MATTAB)
  358. 'CLIM' CLIM
  359. 'SMBR' RESI
  360. 'IMPR' 0 ;
  361.  
  362. DELTAR = (B1 '*' DELTAR1) '+' (B2 '*' DELTAR2) ;
  363.  
  364. 'FINSI' ;
  365. *
  366. 'SI' ('EGA' TEMPDIS 'EXPLICIT') ;
  367. DELTAR = RESI * DTMIN ;
  368. 'FINSI' ;
  369. *
  370. **** Increment of the variables (convection)
  371. *
  372.  
  373. RN = RN '+' DELTAR ;
  374.  
  375. TPS = TPS '+' DTMIN ;
  376.  
  377. 'SI' (((&BL1 '/' 20) '*' 20) 'EGA' &BL1) ;
  378. 'MESSAGE' ('CHAINE' 'ITER = ' &BL1 ' TPS = ' TPS) ;
  379. 'FINSI' ;
  380.  
  381. 'SI' (TPS > TFINAL) ;
  382. 'QUITTER' BL1 ;
  383. 'FINSI' ;
  384.  
  385. 'FIN' BL1 ;
  386.  
  387. *
  388. *** Solutions
  389. *
  390.  
  391. 'SI' GRAPH ;
  392. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
  393. 'TRACER' CHM_RN MOD1 'TITR' ('CHAINE' 'RO at t=' TFINAL);
  394. 'FINSI' ;
  395.  
  396. *
  397. *** Objects evolutions
  398. *
  399.  
  400. xx yy = 'COORDONNEE' Courb;
  401. ss = 'KOPS' ('KOPS' ('COS' ANGLE) '*' xx) '+'
  402. ('KOPS' ('SIN' ANGLE) '*' yy);
  403.  
  404. evxx = 'EVOL' 'CHPO' ss Courb ;
  405. lxx = 'EXTRAIRE' evxx 'ORDO' ;
  406.  
  407. x0 = 'MINIMUM' lxx;
  408. x1 = 'MAXIMUM' lxx ;
  409.  
  410. * ro
  411.  
  412. evro = 'EVOL' 'CHPO' RN Courb ;
  413. lro = 'EXTRAIRE' evro 'ORDO' ;
  414. evro = 'EVOL' 'MANU' 'x' lxx 'ro' lro;
  415. tro = 'CHAINE' '1D ' METO ', ' TEMPDIS ' : RO '
  416. ' tmps ' TFINAL ' elem ' 'QUA4' ;
  417.  
  418. LROAN = 'PROG' ;
  419. XPOS = (TPS '*' UNSCAL) '-' (L '/' 2.) ;
  420.  
  421. 'REPETER' BL1 ('DIME' lxx) ;
  422. Xcel = 'EXTRAIRE' lxx &BL1 ;
  423. 'SI' (XCEL < XPOS) ;
  424. LROAN = LROAN 'ET' ('PROG' rOG) ;
  425. 'SINON' ;
  426. LROAN = LROAN 'ET' ('PROG' rOD) ;
  427. 'FINSI' ;
  428. 'FIN' BL1 ;
  429. evroan = 'EVOL' 'MANU' 'x' lxx 'ro' lroan;
  430.  
  431. 'SI' GRAPH ;
  432. 'DESSIN' (EVRO 'ET' EVROAN) 'TITRE' tro ;
  433. 'FINSI' ;
  434.  
  435. ERRO = 'MAXIMUM' ('EXTRAIRE' (EVRO '-' EVROAN) 'ORDO') 'ABS' ;
  436.  
  437. 'SI' (ERRO > 1.0D-6) ;
  438. 'MESSAGE' 'Transport of passive scalars: problem' ;
  439. 'ERREUR' 5 ;
  440. 'FINSI' ;
  441.  
  442. 'FIN' ;
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  

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