Télécharger cyltest6.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : cyltest6.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTI' 'ECHO' 0 ;
  5. ************************************************************************
  6. * *
  7. * Ecoulement autour d'un cylindre circulaire *
  8. * Résolution des équations de Navier Stokes laminaires instationnaires *
  9. * *
  10. * Pompé sur cyltest.dgibi *
  11. * Ajouts Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) *
  12. * mél : gounand@semt2.smts.cea.fr *
  13. * en date du 20/12/2007 *
  14. * teste une méthode couplée et une méthode de projection *
  15. * algébrique incrémentale : vérification du bilan des forces *
  16. * locales et de la force s'exercant sur le cylindre *
  17. * SG 08/10/2024 : passage aux quadratiques pour la discrétisation *
  18. * du cercle en TRIA RAFT *
  19. * Ajout double projection *
  20. ************************************************************************
  21. 'SAUTER' 2 'LIGNE' ;
  22. 'MESSAGE' ' Execution de cyltest6.dgibi' ;
  23. 'SAUTER' 2 'LIGNE' ;
  24. *
  25. interact = FAUX ;
  26. graph = FAUX ;
  27. *
  28. *****************************************
  29. * *
  30. * Procedure tracvit *
  31. * *
  32. *****************************************
  33. 'DEBPROC' TRACVIT;
  34. 'ARGUMENT' RVX*'TABLE';
  35. rv = rvx . 'EQEX' ;
  36. umax = 2. ;
  37. CHUN = 'VECTEUR' (rv.inco.un) (1. '/' (1. * umax)) UX UY JAUN;
  38. 'TRACER' CHUN mt cmt 'TITRE' 'Champ de vitesse'
  39. 'NCLK' ;
  40. as2 ama1 = 'KOPS' 'MATRIK';
  41. 'RESPRO' as2 ama1;
  42. 'FINP';
  43. *****************************************
  44. * *
  45. * Proc Bloc de pression nul *
  46. * *
  47. *****************************************
  48. 'DEBPROC' BLOCPNUL ;
  49. 'ARGUMENT' rvx*'TABLE' ;
  50. RV = RVX . 'EQEX';
  51. *
  52. 'SI' ('NON' ('EXISTE' rv 'MATPNULL')) ;
  53. *
  54. * Creation d'un bloc de pression nulle
  55. *
  56. 'MESSAGE' ('CHAINE' 'Calcul du bloc de pression') ;
  57. $mt = rvx . 'DOMZ' ;
  58. rt = 'EQEX' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'CENTREP1'
  59. 'ZONE' $mt
  60. 'OPER' 'KMAB' 0. 'INCO' 'UN' 'PN' ;
  61. Rt.'INCO' = RV . 'INCO' ;
  62. smbb matb = kmab rt . '1KMAB' ;
  63. chpv = 'KCHT' $mt 'VECT' 'SOMMET' 'COMP' '1UN' '2UN' (0. 0.) ;
  64. matpres = 'KOPS' 'CMCT' matb chpv matb ;
  65. rv . 'MATPNULL' = matpres ;
  66. 'SINON' ;
  67. matpres =rv . 'MATPNULL' ;
  68. 'FINSI' ;
  69. smbvide matvide = 'KOPS' 'MATRIK' ;
  70. 'FINPROC' smbvide matpres ;
  71. *
  72. * Options globales
  73. *
  74. 'OPTION' 'DIME' 2 'ELEM' 'QUA8' 'ECHO' 0 ;
  75. 'SI' interact ;
  76. 'OPTION' 'TRAC' 'X' ;
  77. 'SINON' ;
  78. 'OPTION' 'TRAC' 'PSC';
  79. 'FINSI' ;
  80. 'OPTION' isov suli;
  81. disv = 'QUAF' ;
  82. DISP = 'CENTREP1';
  83. * iraff : raffinement du maillage
  84. * mproj : méthode de projection ou couplée
  85. * miter : méthode itérative ou directe
  86. iraff = 1 ;
  87. impkres = 0 ;
  88. *
  89. lok = VRAI ;
  90. *
  91. 'REPETER' imet 6 ;
  92. 'SAUTER' 1 'LIGN' ;
  93. iimet = &imet ;
  94. 'SI' ('EGA' iimet 1) ;
  95. mproj = FAUX ;
  96. miter = FAUX ;
  97. 'FINSI' ;
  98. 'SI' ('EGA' iimet 2) ;
  99. mproj = FAUX ;
  100. miter = VRAI ;
  101. 'FINSI' ;
  102. 'SI' ('EGA' iimet 3) ;
  103. mproj = VRAI ; lprec = FAUX ;
  104. miter = FAUX ;
  105. 'FINSI' ;
  106. 'SI' ('EGA' iimet 4) ;
  107. mproj = VRAI ; lprec = FAUX ;
  108. miter = VRAI ;
  109. 'FINSI' ;
  110. 'SI' ('EGA' iimet 5) ;
  111. mproj = VRAI ; lprec = VRAI ;
  112. miter = FAUX ;
  113. 'FINSI' ;
  114. 'SI' ('EGA' iimet 6) ;
  115. mproj = VRAI ; lprec = VRAI ;
  116. miter = VRAI ;
  117. 'FINSI' ;
  118. 'SI' mproj ;
  119. 'SI' lprec ;
  120. 'MESSAGE' 'Methode projection preconditionnee' ;
  121. 'SINON' ;
  122. 'MESSAGE' 'Methode projection' ;
  123. 'FINSI' ;
  124. 'SINON' ;
  125. 'MESSAGE' 'Methode directe' ;
  126. 'FINSI' ;
  127. 'SI' miter ;
  128. 'MESSAGE' 'Solveur itératif' ;
  129. 'SINON' ;
  130. 'MESSAGE' 'Solveur direct' ;
  131. 'FINSI' ;
  132. 'SAUTER' 1 'LIGN' ;
  133. *============================
  134. * Construction du maillage:
  135. *============================
  136. * Construction des points:
  137. nc = 4 ;
  138. nx = 11 ; ny = 6 ;
  139. nc = '*' nc iraff ;
  140. nx = '*' nx iraff ;
  141. ny = '*' ny iraff ;
  142. *
  143. p0 = 0. 0. ;
  144. p1 = 0.5 0. ;
  145. p2 = 0. 0.5 ;
  146. p3 = -0.5 0. ;
  147. p4 = 0. -0.5 ;
  148. *
  149. c1 = 'CERCLE' nc p1 p0 p2 ;
  150. c2 = 'CERCLE' nc p2 p0 p3 ;
  151. c3 = 'CERCLE' nc p3 p0 p4 ;
  152. c4 = 'CERCLE' nc p4 p0 p1 ;
  153. *
  154. ligc = c1 'ET' c2 'ET' c3 'ET' c4 ;
  155. ligc = 'INVERSE' ligc ;
  156. *
  157. *
  158. pA = -6. -6. ;
  159. pB = 15. -6. ;
  160. pC = 15. 6. ;
  161. pD = -6. 6. ;
  162. bas = pA 'DROIT' nx pB ;
  163. dro = pB 'DROIT' ny pC ;
  164. hau = pC 'DROIT' nx pD ;
  165. gau = pD 'DROIT' ny pA ;
  166. *
  167. lige = bas 'ET' dro 'ET' hau 'ET' gau ;
  168. *
  169. cntt = ligc 'ET' lige ;
  170. *
  171. mt = tria cntt ;
  172. xmt ymt = 'COORDONNEE' mt ;
  173. rmt = '**' ('+' ('**' xmt 2) ('**' ymt 2)) 0.5D0 ;
  174. *rmt = '*' rmt 3. ;
  175. rmt = '/' rmt 3. ;
  176. rmt = '/' rmt iraff ;
  177. mtr = 'RAFT' rmt mt ;
  178. 'SI' graph ;
  179. 'TRACER' mtr 'TITR' ('CHAINE' 'nbl=' ('NBEL' mtr)) ;
  180. 'FINSI' ;
  181. *'OPTION' 'DONN' 5 ;
  182. cercle = ligc ;
  183. * Création du domaine total:
  184. mt = mtr;
  185. cmt = 'CONTOUR' mt;
  186. *==============================================
  187. * Changement des éléments du maillage en QUAF:
  188. *==============================================
  189.  
  190. _mt = 'CHANGER' mt 'QUAF';
  191. _cmt = 'CHANGER' cmt 'QUAF';
  192. _cercle = 'CHANGER' cercle 'QUAF';
  193. _entree = 'CHANGER' gau 'QUAF';
  194. _sortie = 'CHANGER' dro 'QUAF';
  195. _hau = 'CHANGER' hau 'QUAF';
  196. _bas = 'CHANGER' bas 'QUAF';
  197. 'ELIM' 1.E-5 (_mt et _cercle et _entree 'ET' _sortie
  198. 'ET' _cmt 'ET' _hau 'ET' _bas);
  199.  
  200. NN = 'NBEL' mt;
  201. 'MESSAGE' 'Nombre d éléments du maillage' NN;
  202.  
  203. *=======================================
  204. * Formulation du domaine Navier Stokes:
  205. *=======================================
  206.  
  207. $mt = 'MODE' _mt 'NAVIER_STOKES' disv ;
  208. $cmt = 'MODE' _cmt 'NAVIER_STOKES' disv ;
  209. $cercle = 'MODE' _cercle 'NAVIER_STOKES' disv ;
  210. $entree = 'MODE' _entree 'NAVIER_STOKES' disv ;
  211. $sortie = 'MODE' _sortie 'NAVIER_STOKES' disv ;
  212. $hau = 'MODE' _hau 'NAVIER_STOKES' disv ;
  213. $bas = 'MODE' _bas 'NAVIER_STOKES' disv ;
  214. *
  215. mt = 'DOMA' $mt 'MAILLAGE' ;
  216. cmt = 'DOMA' $cmt 'MAILLAGE' ;
  217. cercle = 'DOMA' $cercle 'MAILLAGE' ;
  218. entree = 'DOMA' $entree 'MAILLAGE' ;
  219. sortie = 'DOMA' $sortie 'MAILLAGE' ;
  220. hau = 'DOMA' $hau 'MAILLAGE' ;
  221. bas = 'DOMA' $bas 'MAILLAGE' ;
  222.  
  223. *====================================
  224. * Création des tables de résolution:
  225. *====================================
  226.  
  227. dt = .5D0 ;
  228. *rey = 30. ;
  229. rey = 100.;
  230. nu = 1./rey;
  231. arelax = 1.;
  232. *
  233. niter = 6 ;
  234. nitime = 3 ;
  235. *
  236. RV = 'EQEX' 'OMEGA' 1.0 'NITER' niter 'ITMA' 1 'FIDT' 1 ;
  237. *
  238. RV = 'EQEX' RV
  239. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  240. * 'ZONE' $mt 'OPER' 'NS' 'INV_RE' 'INCO' 'UN'
  241. 'ZONE' $mt 'OPER' 'KONV' 1. 'UN' 'INV_RE' 'INCO' 'UN'
  242. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  243. 'ZONE' $mt 'OPER' 'LAPN' 'INV_RE' 'INCO' 'UN'
  244. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  245. 'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM' 'DT' 'INCO' 'UN'
  246. 'OPTI' 'EF' 'IMPL' 'CENTREE' DISP
  247. 'ZONE' $mt
  248. 'OPER' 'KBBT' 1. 'INCO' 'UN' 'PN' ;
  249.  
  250. 'SI' graph ;
  251. rv = 'EQEX' rv
  252. 'ZONE' $mt 'OPER' TRACVIT ;
  253. 'FINSI' ;
  254.  
  255. * Implantation des conditions aux limites:
  256.  
  257. RV = 'EQEX' RV
  258. 'CLIM' 'UN' 'UIMP' cercle 0. 'UN' 'VIMP' cercle 0.
  259. 'UN' 'UIMP' entree 1. 'UN' 'VIMP' entree 0.
  260. 'UN' 'VIMP' hau 0.
  261. 'UN' 'VIMP' bas 0. ;
  262. *
  263. * Choix de la méthode de résolution (couplée, projection)
  264. * et des solveurs (direct, itératif)
  265. *
  266. 'SI' ('NON' mproj) ;
  267. * Solveur pour le système vitesse-pression
  268. rvm = rv . 'METHINV' ;
  269. rvm . 'SCALING' = 1 ;
  270. rvm . 'IMPINV' = impkres ;
  271. 'SI' ('NON' miter) ;
  272. rvm . 'TYPINV' = 1 ;
  273. 'SINON' ;
  274. * On rajoute le bloc de pression nul
  275. rv = 'EQEX' rv 'ZONE' $mt 'OPER' BLOCPNUL ;
  276. *
  277. rvm . 'TYPINV' = 4 ;
  278. rvm . 'LBCG' = 2 ;
  279. rvm . 'PRECOND' = 5 ;
  280. rvm . 'ILUTLFIL' = 3.D0 ;
  281. 'FINSI' ;
  282. 'SINON' ;
  283. rv . 'GPROJ' = 'TABLE' ;
  284. rv . 'GPROJ' . 'NOMVIT' = 'UN' ;
  285. rv . 'GPROJ' . 'NOMPRES' = 'PN' ;
  286. 'SI' ('NON' lprec) ;
  287. rv . 'GPROJ' . 'NOPREC' = VRAI ;
  288. 'FINSI' ;
  289. *! rv . 'GPROJ' . 'dblproj' = faux ;
  290. * Solveur pour les composantes de la vitesse
  291. rvm = rv . 'METHINV' ;
  292. rvm . 'SCALING' = 1 ;
  293. rvm . 'IMPINV' = impkres ;
  294. 'SI' ('NON' miter) ;
  295. rvm . 'TYPINV' = 1 ;
  296. 'SINON' ;
  297. rvm . 'TYPINV' = 4 ;
  298. rvm . 'LBCG' = 2 ;
  299. rvm . 'PRECOND' = 3 ;
  300. 'FINSI' ;
  301. * Solveur pour l'équation de pression
  302. rv . 'GPROJ'. 'METHINV' = 'TABLE' 'METHINV' ;
  303. rvgm = rv . 'GPROJ' . 'METHINV' ;
  304. rvgm . 'SCALING' = 1 ;
  305. rvgm . 'IMPINV' = impkres ;
  306. 'SI' ('NON' miter) ;
  307. rvgm . 'TYPINV' = 1 ;
  308. 'SINON' ;
  309. rvgm . 'TYPINV' = 4 ;
  310. rvgm . 'LBCG' = 2 ;
  311. rvgm . 'PRECOND' = 3 ;
  312. * rvgm . 'PRECOND' = 5 ;
  313. * rvgm . 'ILUTLFIL' = 1.D0 ;
  314. 'FINSI' ;
  315. 'FINSI' ;
  316. * Création de la table des inconnues et initialisation:
  317. RV.INCO = 'TABLE' INCO;
  318. *
  319. RV.INCO.'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (1.E-3 1.E-3);
  320. RV.INCO.'UNM' = 'KCHT' $mt 'VECT' 'SOMMET' (1.E-3 1.E-3);
  321. rv . 'INCO' . 'G' = (0. -9.8) ;
  322. RV.INCO.'DT' = dt ;
  323. RV.INCO.'INV_RE'= nu;
  324. RV.INCO.'PN' = 'KCHT' $mt 'SCAL' DISP 0.;
  325. *
  326. * Table avec les résultats en vitesse
  327. *
  328. res = 'TABLE' ;
  329. itres = 0 ;
  330. res . itres = 'COPIER' (RV.INCO.'UN') ;
  331. ***************************************************
  332. *
  333. * Boucle en temps faite main
  334. *
  335. 'TEMPS' 'ZERO' ;
  336. 'REPETER' iitime nitime ;
  337. rv . 'INCO' . 'UNM' = 'COPIER' (res . itres) ;
  338. EXEC RV;
  339. itres = '+' itres 1 ;
  340. res . itres = 'COPIER' (RV.INCO.'UN') ;
  341. 'FIN' iitime ;
  342. TABTPS = TEMP 'NOEC';
  343. tcpu = TABTPS.'TEMPS_CPU'.'INITIAL' ;
  344. *
  345. ***************************************************
  346. lastime = '-' ('DIME' res) 1 ;
  347. vit = res . lastime ;
  348. vitm1 = res . ('-' lastime 1) ;
  349. umax = 2. ;
  350. *
  351. *
  352. * Créer les matrices
  353. *
  354. bidon matkon = 'KONV' (rv . '1KONV') ;
  355. bidon matlap = 'LAPN' (rv . '2LAPN') ;
  356. chdfdt matdfdt = 'DFDT' (rv . '3DFDT') ;
  357. *
  358. rt = 'EQEX' 'ZONE' $mt
  359. 'OPTI' 'EF' 'IMPL' 'CENTREE' DISP
  360. 'OPER' 'KMBT' -1. 'INCO' 'PN' 'UN'
  361. ;
  362. rt.'INCO' = rv . 'INCO' ;
  363. bidon matgrp = 'KMBT' (rt . '1KMBT') ;
  364. *
  365. pre = rv . 'INCO' . 'PN' ;
  366. nomavv = 'MOTS' 'UX' 'UY' ;
  367. nomapv = 'MOTS' '1UN' '2UN' ;
  368. nomavp = 'MOTS' 'SCAL' ;
  369. nomapp = 'MOTS' 'PN' ;
  370. vit = 'NOMC' nomavv nomapv vit ;
  371. vitm1 = 'NOMC' nomavv nomapv vitm1 ;
  372. pre = 'NOMC' nomavp nomapp pre ;
  373. forlap = 'KOPS' matlap '*' vit ;
  374. forkon = 'KOPS' matkon '*' vit ;
  375. forgrp = 'KOPS' matgrp '*' pre ;
  376. fordfdt = 'KOPS' matdfdt '*' ('-' vit vitm1) ;
  377. *
  378. forlap = ('NOMC' nomapv nomavv forlap) ;
  379. forkon = ('NOMC' nomapv nomavv forkon) ;
  380. forgrp = ('NOMC' nomapv nomavv forgrp) ;
  381. fordfdt = ('NOMC' nomapv nomavv fordfdt) ;
  382. *
  383. fort = forlap '+' forkon '+' forgrp '+' fordfdt ;
  384. *
  385. fmax = 'MAXIMUM' fort 'ABS' ;
  386. echf = '/' 0.5 fmax ;
  387. *
  388. vlap = 'VECTEUR' forlap echf UX UY VERT ;
  389. vkon = 'VECTEUR' forkon echf UX UY ROUG ;
  390. vgrp = 'VECTEUR' forgrp echf UX UY JAUN ;
  391. vdfdt = 'VECTEUR' fordfdt echf UX UY TURQ ;
  392. vf = 'VECTEUR' fort echf UX UY BLAN ;
  393. vtot = vlap 'ET' vkon 'ET' vgrp 'ET' vdfdt 'ET' vf ;
  394. *
  395. 'SI' graph ;
  396. tit = 'CHAINE' 'vert=lap;roug=kon;jaun=grp;turq=dfdt;blan=reac;fmax='
  397. fmax ;
  398. 'TRACER' vtot _mt ('CONTOUR' _mt) 'TITRE' tit ;
  399. 'FINSI' ;
  400. *
  401. pmt = 'CHANGER' mt 'POI1' ;
  402. pcmt = 'CHANGER' cmt 'POI1' ;
  403. pint = 'DIFF' pmt pcmt ;
  404. fortint = 'REDU' fort pint ;
  405. fmaxint = 'MAXIMUM' fortint 'ABS' ;
  406. 'MESSAGE' ('CHAINE' 'fmax=' fmax) ;
  407. 'MESSAGE' ('CHAINE' 'fmaxint=' fmaxint) ;
  408. errbf = '*' ('/' fmaxint fmax) 100. ;
  409. 'MESSAGE' ('CHAINE' 'erreur bilan forces =' errbf ' %') ;
  410. forcer = 'REDU' fort cercle ;
  411. rfor = 'RESULT' forcer ;
  412. 'MESSAGE' 'Resultante des forces sur le cylindre' ;
  413. rfx = 'MAXIMUM' ('EXCO' 'UX' rfor) ;
  414. rfy = 'MAXIMUM' ('EXCO' 'UY' rfor) ;
  415. 'MESSAGE' ('CHAINE' ' en x =' rfx) ;
  416. 'MESSAGE' ('CHAINE' ' en y =' rfy) ;
  417. 'MESSAGE' ('CHAINE' 'tcpu=' tcpu) ;
  418. *
  419. * Tests
  420. * Erreur sur le bilan des forces au 08/10/2024
  421. * 2.e-3 % pour la méthode directe
  422. * 3.5 % pour la méthode projection algébrique
  423. * 5.3e-2 % pour la méthode double projection algébrique
  424. * Valeur de la force de trainée (fx)
  425. * -7.261-1 pour la méthode directe
  426. * -7.029e-1 pour la méthode projection algébrique
  427. * -7.262e-1 pour la méthode double projection algébrique
  428. *
  429. 'SI' mproj ;
  430. * vrbf = 8. ;
  431. * vrbf = 2. ;
  432. vrbf = 0.1 ;
  433. 'SINON' ;
  434. * vrbf = 56.D-3 ;
  435. vrbf = 3.D-3 ;
  436. 'FINSI' ;
  437. *vrft = -6.9e-1 ;
  438. *tol = 0.3e-1 ;
  439. *vrft = -6.94e-1 ;
  440. *tol = 0.02e-1 ;
  441. vrft = -7.261e-1 ;
  442. tol = 0.002e-1 ;
  443. *
  444. tst = '<' errbf vrbf ;
  445. 'SI' ('NON' tst) ;
  446. cherr = 'CHAINE' '!!! Erreur bilan force > ' vrbf ' %' ;
  447. 'MESSAGE' cherr ;
  448. 'FINSI' ;
  449. lok = lok 'ET' tst ;
  450. *
  451. tst = '<' ('ABS' ('-' rfx vrft)) tol ;
  452. 'SI' ('NON' tst) ;
  453. cherr = 'CHAINE' '!!! Erreur force trainee <> ' vrft ' a ' tol
  454. ' pres' ;
  455. 'MESSAGE' cherr ;
  456. 'FINSI' ;
  457. lok = lok 'ET' tst ;
  458. 'FIN' imet ;
  459. 'SAUTER' 2 'LIGNE' ;
  460. 'SI' lok ;
  461. 'MESSAGE' 'Tout sest bien passe' ;
  462. 'SINON' ;
  463. 'MESSAGE' 'Il y a eu des erreurs' ;
  464. 'FINSI' ;
  465. 'SAUTER' 2 'LIGNE' ;
  466. *
  467. 'SI' interact ;
  468. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  469. 'FINSI' ;
  470. 'SI' ('NON' lok) ;
  471. 'ERREUR' 5 ;
  472. 'FINSI' ;
  473. * 'FIN' du jeu de données.
  474. fin;
  475.  
  476.  
  477.  

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