Télécharger fsckei.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : fsckei.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. ************************************************************************************
  5. * *
  6. * Maillage d'un sous-canal d'un faisceau de tube *
  7. * à pas carré *
  8. * *
  9. ************************************************************************************
  10.  
  11. OPTION DIME 2 ELEM QUA8;
  12.  
  13. COMPLET=FAUX;
  14. *COMPLET=VRAI;
  15.  
  16. NBIT = 10 ;
  17. GRAPH = FAUX ;
  18. DT = 1. ;
  19.  
  20. Si COMPLET;
  21. GRAPH = VRAI ;
  22. NBIT = 1000;
  23. DT = 0.2;
  24. Finsi ;
  25.  
  26. sqrt2 = 2.**0.5 ;
  27. tole = 1e-5;
  28.  
  29.  
  30. ******************************************************************
  31. * Paramètres géométriques du sous-canal
  32. ******************************************************************
  33.  
  34. * Espacement entre deux centres de cylindres
  35. b0 = 8.;
  36.  
  37. * Rayon d'un cylindre
  38. r0 = 4. ;
  39.  
  40. * demi-diagonale "fluide"
  41. diag1 = (b0*sqrt2)+((-1.)*r0) ;
  42.  
  43.  
  44. ******************************************************************
  45. * Paramètres du maillage
  46. ******************************************************************
  47.  
  48. * distance entre le point p0 (centre du sous canal) et le point pint01
  49. * c'est une portion (entre 0 et 1) de diag1
  50. alpha01 = 0.7 ;
  51.  
  52. * distance entre le point p3 et pint23 (portion entre 0 et 1 de la distance entre p2 et p3)
  53. alpha23 = 0.5 ;
  54.  
  55. * nombre de points sur le cylindre
  56. n2 = 8 ;
  57.  
  58. * nombre de points sur la diagonale proche du cylindre
  59. n12 = 10 ;
  60.  
  61. * nombre de points sur la diagonale loin du cylindre
  62. n11 = 5 ;
  63.  
  64.  
  65. ******************************************************************
  66. * Paramètres lié à l'écoulement
  67. ******************************************************************
  68.  
  69. * Constante du modèle de turbulence
  70. CMU = 0.09 ;
  71.  
  72. * Viscosité cinématique du fluide
  73. NU = 1.e-6;
  74.  
  75. * Vitesse d'entrée
  76. UI = 1.e-6;
  77. UI = 0.1 ;
  78.  
  79. * Diamètre hydraulique du sous-canal
  80. DH = ((4*b0**2)+((-1.*PI)*(r0**2)))/(2*PI*r0) ;
  81.  
  82.  
  83.  
  84.  
  85. ******************************************************************
  86. * Paramètres liés à la résolution numérique
  87. ******************************************************************
  88.  
  89. KPRESS = 'CENTREP1' ;
  90. DISCR = 'MACRO' ;
  91.  
  92. * Nombre d'itérations
  93. NITMA = NBIT;
  94.  
  95. * Pas de temps
  96.  
  97. * Distance à la paroi
  98. YP = 1e-3;
  99.  
  100. ******************************************************************
  101. * PROCEDURE
  102. ******************************************************************
  103.  
  104. DEBPROC CALCUL;
  105. ARGU RVX*'TABLE' ;
  106. RV = RVX.'EQEX' ;
  107. Tps = rv.'Tps' ;
  108. DT = rv.'DT' ;
  109. NUPAT = rv.'NUPAT' + 1;
  110. Tps = Tps + DT ;
  111. rv.'Tps' = Tps ;
  112. rv.'NUPAT'=NUPAT ;
  113. un = rv.'INCO'.'UN' ;
  114.  
  115.  
  116. rv.ltps=rv.ltps et (prog tps) ;
  117.  
  118. rc.'pts1_1'=rc.'pts1_1'
  119. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_1')));
  120. rc.'pts1_2'=rc.'pts1_2'
  121. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_2')));
  122. rc.'pts1_3'=rc.'pts1_3'
  123. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_3')));
  124. rc.'pts1_4'=rc.'pts1_4'
  125. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_4')));
  126. rc.'pts1_5'=rc.'pts1_5'
  127. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_5')));
  128. rc.'pts1_6'=rc.'pts1_6'
  129. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_6')));
  130. rc.'pts1_7'=rc.'pts1_7'
  131. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_7')));
  132. rc.'pts1_8'=rc.'pts1_8'
  133. et (PROG (extr tn 'SCAL' (TABTEC.'pts1_8')));
  134.  
  135. rc.'pts1_1u'=rc.'pts1_1u'
  136. et (PROG (extr un 'UX' (TABTEC.'pts1_1')));
  137. rc.'pts1_2u'=rc.'pts1_2u'
  138. et (PROG (extr un 'UX' (TABTEC.'pts1_2')));
  139. rc.'pts1_3u'=rc.'pts1_3u'
  140. et (PROG (extr un 'UX' (TABTEC.'pts1_3')));
  141. rc.'pts1_4u'=rc.'pts1_4u'
  142. et (PROG (extr un 'UX' (TABTEC.'pts1_4')));
  143.  
  144. rc.'pts2_1'=rc.'pts2_1'
  145. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_1')));
  146. rc.'pts2_2'=rc.'pts2_2'
  147. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_2')));
  148. rc.'pts2_3'=rc.'pts2_3'
  149. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_3')));
  150. rc.'pts2_4'=rc.'pts2_4'
  151. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_4')));
  152. rc.'pts2_5'=rc.'pts2_5'
  153. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_5')));
  154. rc.'pts2_6'=rc.'pts2_6'
  155. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_6')));
  156. rc.'pts2_7'=rc.'pts2_7'
  157. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_7')));
  158. rc.'pts2_8'=rc.'pts2_8'
  159. et (PROG (extr tn 'SCAL' (TABTEC.'pts2_8')));
  160.  
  161. rc.'pts3_1'=rc.'pts3_1'
  162. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_1')));
  163. rc.'pts3_2'=rc.'pts3_2'
  164. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_2')));
  165. rc.'pts3_3'=rc.'pts3_3'
  166. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_3')));
  167. rc.'pts3_4'=rc.'pts3_4'
  168. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_4')));
  169. rc.'pts3_5'=rc.'pts3_5'
  170. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_5')));
  171. rc.'pts3_6'=rc.'pts3_6'
  172. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_6')));
  173. rc.'pts3_7'=rc.'pts3_7'
  174. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_7')));
  175. rc.'pts3_8'=rc.'pts3_8'
  176. et (PROG (extr tn 'SCAL' (TABTEC.'pts3_8')));
  177.  
  178. rc.'pts3_1v'=rc.'pts3_1v'
  179. et (PROG (extr un 'UY' (TABTEC.'pts3_1')));
  180. rc.'pts3_2v'=rc.'pts3_2v'
  181. et (PROG (extr un 'UY' (TABTEC.'pts3_2')));
  182. rc.'pts3_3v'=rc.'pts3_3v'
  183. et (PROG (extr un 'UY' (TABTEC.'pts3_3')));
  184. rc.'pts3_4v'=rc.'pts3_4v'
  185. et (PROG (extr un 'UY' (TABTEC.'pts3_4')));
  186. * evs1 = (evol manu rv.ltps 'Temps (s)' rc.'pts3_1v' 'UY')
  187. * et (evol manu rv.ltps 'Temps (s)' rc.'pts3_2v' 'UY')
  188. * et (evol manu rv.ltps 'Temps (s)' rc.'pts3_3v' 'UY')
  189. * et (evol manu rv.ltps 'Temps (s)' rc.'pts3_4v' 'UY');
  190. * dess evs1 'NCLK' TITR 'Composante UY de la vitesse section 3 ' ;
  191.  
  192. Mess ' Pas de temps ' NUPAT ' Temps ' tps ;
  193. mess 'Ufr=' Ufr 'Uc=' Uc ;
  194.  
  195.  
  196.  
  197. ai = modulo NUPAT 100;
  198. si (EGA ai 0);
  199.  
  200. Mess ' *******************************************' ;
  201. Mess ' Pas de temps ' NUPAT ' Temps ' tps ;
  202. mess 'Ufr=' Ufr 'Uc=' Uc ;
  203. Mess ' *******************************************' ;
  204.  
  205. oeil =1.e4 -1.e4 1.e4 ;
  206. oeil2=-1.e4 -1.e4 1.e4 ;
  207. THIS = FAUX ;
  208. TECT = FAUX ;
  209. POST THIS TECT ;
  210. Finsi ;
  211.  
  212. aii = modulo NUPAT 1000;
  213. si (EGA aii 0);
  214. THIS = VRAI ;
  215. TECT = VRAI ;
  216. POST THIS TECT ;
  217. THIS = FAUX ;
  218. TECT = FAUX ;
  219. Finsi ;
  220.  
  221. qc=dbit un $schaud ;
  222. qf=(dbit un $sfroid)*(-1.) ;
  223. qs=dbit un $sortie ;
  224. mess 'Tps = ' Tps ' QC =' qc ' QF ' qf ' QS ' qs ;
  225.  
  226. *mess ' FIN CALCUL ' ;
  227.  
  228. as2 ama1 = 'KOPS' 'MATRIK' ;
  229. finproc as2 ama1 ;
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. ******************************************************************
  244. * Construction du maillage
  245. ******************************************************************
  246.  
  247. * Centre du cylindre
  248. c0 = (-1.*b0) b0;
  249.  
  250. * Points pour construire le maillage élémentaire
  251. p0 = 0. 0. ;
  252. p1 = (-1.*diag1*0.5*sqrt2) (diag1*0.5*sqrt2) ;
  253. p2 = (-1.*b0) (b0+((-1.)*r0));
  254. p3 = (-1.*b0) 0 ;
  255. pint01 = (-1.*alpha01*diag1*0.5*sqrt2) (alpha01*diag1*0.5*sqrt2);
  256. pint23 = (-1.*b0) ((-1.)*(1.-alpha01)*diag1 + b0 + (-1.*r0));
  257.  
  258. * Points pour créer les maillages symétriques
  259. p4 = 0. b0 ;
  260. p5 = b0 0. ;
  261. p6 = (r0 + (-1.*b0)) b0;
  262.  
  263.  
  264. * Construction des cotés élémentaires
  265. cot11 = DROI n11 p0 pint01 ;
  266. cot12 = DROI (-1*n12) pint01 p1 'DINI' 0.1 'DFIN' 0.1 ;
  267. cot2 = CERC n2 p1 c0 p2 ;
  268. cot31bis = DROI (-1*n12) pint23 p2 'DINI' 0.1 'DFIN' 0.1 ;
  269. cot32 = DROI n11 pint23 p3;
  270. cot31 = INVE cot31bis;
  271. cot4 = DROI n2 p3 p0 ;
  272. elim tole (cot11 et cot12 et cot2 et cot31 et cot32 et cot4) ;
  273.  
  274.  
  275. * Reconstitution de 4 cotés pour utiliser la fonction DALLER
  276. cot1 = cot11 et cot12;
  277. cot3 = cot31 et cot32;
  278.  
  279.  
  280. dom1 = daller cot1 cot2 cot3 cot4 ;
  281. dom2 = dom1 SYME 'DROIT' c0 p0 ;
  282. dom3 = (dom1 et dom2) SYME 'DROIT' p0 p4 ;
  283. dom4 = (dom1 et dom2 et dom3) SYME 'DROIT' p3 p5 ;
  284.  
  285.  
  286. * Description du domaine de calcul et des frontières
  287. domtot = (dom1 et dom2 et dom3 et dom4) ;
  288.  
  289. ouest = cot3 et (cot3 SYME 'DROIT' p3 p0) ;
  290. est = ouest SYME 'DROIT' p0 p4 ;
  291. nord = ouest SYME 'DROIT' p0 c0 ;
  292. sud = nord SYME 'DROIT' p3 p5 ;
  293.  
  294. bordNO = CERC (2*n2) p6 c0 p2 ;
  295. bordNE = bordNO SYME 'DROIT' p0 p4 ;
  296. bordSO = bordNO SYME 'DROIT' p0 p3 ;
  297. bordSE = bordSO SYME 'DROIT' p0 p4 ;
  298.  
  299. elim tole (domtot et bordNO et bordNE et bordSO et bordSE
  300. et ouest et est et nord et sud) ;
  301.  
  302.  
  303.  
  304. *tracer (domtot et ouest et est et nord et sud et bordNO
  305. * et bordNE et bordSO et bordSE) ;
  306.  
  307. NN = 'NBEL' domtot;
  308. 'MESSAGE' 'Nombre d éléments du maillage' NN;
  309.  
  310. WALL0 = bordNO et bordNE et bordSO et bordSE;
  311.  
  312. ********************************************************************
  313. * Changement des éléments du maillage en DISCR:
  314. ********************************************************************
  315.  
  316. £domtot = 'CHANGER' domtot QUAF ;
  317. £bordNO = 'CHANGER' bordNO QUAF ;
  318. £bordNE = 'CHANGER' bordNE QUAF ;
  319. £bordSO = 'CHANGER' bordSO QUAF ;
  320. £bordSE = 'CHANGER' bordSE QUAF ;
  321. £ouest = 'CHANGER' ouest QUAF ;
  322. £est = 'CHANGER' est QUAF ;
  323. £nord = 'CHANGER' nord QUAF ;
  324. £sud = 'CHANGER' sud QUAF ;
  325.  
  326. elim tole (£domtot et £bordNO et £bordNE et £bordSO et £bordSE
  327. et £ouest et £est et £nord et £sud) ;
  328.  
  329.  
  330. **************************************************************
  331. * Formulation du domaine Navier Stokes:
  332. **************************************************************
  333.  
  334. $domtot = 'MODE' £domtot 'NAVIER_STOKES' DISCR ;
  335. $bordNO = 'MODE' £bordNO 'NAVIER_STOKES' DISCR ;
  336. $bordNE = 'MODE' £bordNE 'NAVIER_STOKES' DISCR ;
  337. $bordSO = 'MODE' £bordSO 'NAVIER_STOKES' DISCR ;
  338. $bordSE = 'MODE' £bordSE 'NAVIER_STOKES' DISCR ;
  339. $ouest = 'MODE' £ouest 'NAVIER_STOKES' DISCR ;
  340. $est = 'MODE' £est 'NAVIER_STOKES' DISCR ;
  341. $nord = 'MODE' £nord 'NAVIER_STOKES' DISCR ;
  342. $sud = 'MODE' £sud 'NAVIER_STOKES' DISCR ;
  343.  
  344.  
  345.  
  346. $WALL0 = $bordNO et $bordNE et $bordSE et $bordSO;
  347.  
  348.  
  349. *****************************************************************
  350. * Création de la table des inconnues et initialisation:
  351. *****************************************************************
  352.  
  353.  
  354. KE = (0.05 * UI)*(0.05 * UI)/2.;
  355. EE = (KE**1.5)/r0 ;
  356. mess 'UI=' ui 'KE=' KE 'EE=' EE 'Teta=' (KE/EE) ;
  357.  
  358.  
  359. RV = EQEX $domtot 'ITMA' NITMA
  360. 'OPTI' 'EF' 'IMPL' 'CENTREE'
  361. 'ZONE' $WALL0 'OPER' 'FPU' 1. 'UN' NU 'UF' YP 'INCO' 'UN' 'KN' 'EN'
  362. 'ZONE' $domtot 'OPER' 'KEPSILON' 1. 'UN' NU 'DT' 'INCO' 'KN' 'EN'
  363. 'ZONE' $domtot 'OPER' 'NS' 1. 'UN' 'MUF' 'INCO' 'UN'
  364. 'ZONE' $domtot 'OPER' 'TSCA' 1. 'UN' 'MUF' 'INCO' 'TN'
  365.  
  366. ;
  367.  
  368. * Condition limite sur les surfaces des cylindres
  369. *RV = EQEX RV 'CLIM' 'UN' 'UIMP' bordNO 0. 'UN' 'VIMP' bordNO 0.;
  370. *RV = EQEX RV 'CLIM' 'UN' 'UIMP' bordSO 0. 'UN' 'VIMP' bordSO 0.;
  371. *RV = EQEX RV 'CLIM' 'UN' 'UIMP' bordNE 0. 'UN' 'VIMP' bordNE 0.;
  372. *RV = EQEX RV 'CLIM' 'UN' 'UIMP' bordSE 0. 'UN' 'VIMP' bordSE 0.;
  373.  
  374.  
  375.  
  376. * Condition limite sur les frontières libres
  377. * Remarque : pas besoin d'imposer une condition à la sortie car en utilisant la fonction 'CENTREP1'
  378. * pour la pression, si aucune valeur n'est précisé, son intégrale sur cette frontière est maintenue nulle.
  379. RV = EQEX RV 'CLIM' 'UN' 'UIMP' ouest UI;
  380. RV = EQEX RV 'CLIM' 'UN' 'VIMP' ouest 0.;
  381. RV = EQEX RV 'CLIM' 'TN' 'TIMP' ouest 1.;
  382. RV = EQEX RV 'CLIM' 'TN' 'TIMP' nord 0.;
  383. RV = EQEX RV 'CLIM' 'KN' 'TIMP' ouest KE;
  384. RV = EQEX RV 'CLIM' 'EN' 'TIMP' ouest EE;
  385. RV = EQEX RV 'CLIM' 'UN' 'VIMP' nord 0.;
  386. RV = EQEX RV 'CLIM' 'UN' 'VIMP' sud 0.;
  387.  
  388.  
  389. RV = EQEX RV 'OPTI' 'EFM1' 'CENTREE'
  390. 'ZONE' $domtot 'OPER' DFDT 1. 'UN' 'DT' 'INCO' 'UN';
  391.  
  392.  
  393. *opti donn 5;
  394. RVP = EQEX 'OPTI' 'EF' KPRESS
  395. 'ZONE' $domtot 'OPER' 'KBBT' -1. 'INCO' 'UN' 'PRES'
  396. 'ZONE' $bordNO 'OPER' 'VNIMP' $domtot 0. 'INCO' 'UN' 'PRES'
  397. 'ZONE' $bordNE 'OPER' 'VNIMP' $domtot 0. 'INCO' 'UN' 'PRES'
  398. 'ZONE' $bordSO 'OPER' 'VNIMP' $domtot 0. 'INCO' 'UN' 'PRES'
  399. 'ZONE' $bordSE 'OPER' 'VNIMP' $domtot 0. 'INCO' 'UN' 'PRES'
  400. ;
  401.  
  402. RV.'PROJ'= RVP ;
  403.  
  404.  
  405. RV.INCO= 'TABLE' INCO;
  406. RV.INCO.'UN' = 'KCHT' $domtot 'VECT' 'SOMMET' (0.D0 0.D0);
  407. RV.INCO.'UNM1' = 'KCHT' $domtot 'VECT' 'SOMMET' (0.D0 0.D0);
  408. RV.INCO.'KN' = KCHT $domtot 'SCAL' 'SOMMET' KE;
  409. RV.INCO.'TN' = KCHT $domtot 'SCAL' 'SOMMET' 0.;
  410. RV.INCO.'EN' = KCHT $domtot 'SCAL' 'SOMMET' EE;
  411. RV.INCO.'TT' = KCHT $domtot 'SCAL' 'SOMMET' (KE/EE);
  412. RV.INCO.'PRES' = 'KCHT' $domtot 'SCAL' KPRESS 0.;
  413. * Vitesse de frottement
  414. RV.INCO.'UF' = 'KCHT' $WALL0 'SCAL' 'SOMMET' 5.E-2;
  415. RV.INCO.'DT' = DT ;
  416.  
  417. RV.INCO.'MUF' = NU;
  418.  
  419.  
  420. exec rv ;
  421.  
  422.  
  423. un= rv.inco.'UN' ;
  424. pres = exco rv.inco.'PRESSION' 'PRES';
  425. pn = elno $domtot pres 'CENTREP1';
  426. u2= pscal un (mots '1UN' '2UN') un (mots '1UN' '2UN');
  427.  
  428. Si GRAPH ;
  429. trace pn domtot (cont domtot) TITR ' Pression' ;
  430.  
  431. pp= pn - (0.5*u2) ;
  432.  
  433. trace pp domtot (cont domtot) TITR ' Pression - u2' ;
  434. nun = (pscal un (mots 'UX' 'UY') un (mots 'UX' 'UY'))**0.5 ;
  435. trace nun domtot (cont domtot) TITR 'Norme de la vitesse' ;
  436. *trace pres domtot;
  437.  
  438. ung = vect un 5. ux uy jaune ;
  439. trace ung domtot;
  440.  
  441. nut = rv.inco.'MUF' - NU;
  442. trace (nut*(1./NU)) domtot (cont domtot) TITR 'Nut/NU' ;
  443.  
  444. Finsi ;
  445. FIN ;
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  

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