Télécharger transport4.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : transport4.dgibi
  2. ******************** CAS TEST : transport4.dgibi ************************
  3. *
  4. GRAPH = faux ;
  5. CRIT1 = 1.D-3 ;
  6. 'SAUTER' 'PAGE';
  7.  
  8. ************************************************************************
  9. *
  10. * Petit programme testant le transport en milieu poreux avec
  11. * - limite de solubilité diminuant linéairement vers l'aval.
  12. * l'équilibre chimique soluté/précipité à cinétique linéaire
  13. * (théta-méthode)
  14. * - coefficient de retard constant
  15. * (équilibre soluté/adsorbat instantané linéaire)
  16. *
  17. * pour un cas test 2D simple :
  18. * Une petite source baignant dans un champ de vitesse uniforme.
  19. *
  20. * P4 *---------------* P3
  21. * | |
  22. * | |
  23. * | |
  24. * P5 |---------------| P2
  25. * | |
  26. * | |
  27. * | |
  28. * | |
  29. * P6 *----* P9 - - - * P11
  30. * | | |
  31. * P7 *----* P8 - - - * P10
  32. * | |
  33. * | |
  34. * P0 *---------------* P1
  35. *
  36. ************************************************************************
  37. 'OPTION' 'ECHO' 0 ;
  38. 'SAUTER' 'PAGE';
  39. 'TITRE' 'Validation du transport';
  40. * ==============
  41. * | PARAMETRES |
  42. * ==============
  43. *
  44. * Paramètres internes :
  45. * =====================
  46. 'OPTION' 'ECHO' 0 'DIME' 2 'ELEM' 'QUA4' ;
  47. 'OPTION' 'ISOV' 'SURFACE' ;
  48. 'OPTION' 'TRAC' 'PSC' ;
  49.  
  50. * Paramètres de convivialité :
  51. * ============================
  52. * Trace les limites de solubilité ?
  53. TrLimSol= vrai ;
  54. * Trace le coefficient de dissolution ?
  55. TrCoDis = Vrai ;
  56. * Trace le coefficient de retard ?
  57. TrRet = vrai ;
  58. * Trace les profils de concentration suivant certaines lignes ?
  59. TrLEvol = Vrai ;
  60. * Trace les évolutions de concentration en certaines points ?
  61. TrPEvol = Vrai ;
  62. * Trace les champs de concentration en soluté, précipité ?
  63. TrConc = vrai ;
  64. TrPrec = vrai ;
  65. * Trace la quantité de précipité dissout ?
  66. TrLib = Vrai ;
  67. * Trace le flux à travers une ligne ?
  68. TrFlux = Vrai ;
  69.  
  70. SI ('EGA' GRAPH 'N');
  71. TrLEvol = faux ;
  72. TrPEvol = faux ;
  73. TrConc = faux ;
  74. TrPrec = faux ;
  75. TrLib = faux ;
  76. TrFlux = faux ;
  77. TrLimSol= faux ;
  78. TrCoDis = faux ;
  79. TrRet = faux ;
  80. FINSI;
  81.  
  82. * Grandeurs physiques :
  83. * =====================
  84. * VITESSE DE DARCY
  85. UXImp = 0.;
  86. UYImp = 1.;
  87.  
  88. * POROSITE
  89. ValPor = 1.;
  90.  
  91. *-- Facteur de forme :
  92. FacForme = 1.;
  93.  
  94. * RETARD
  95. *-- Coefficient de retard et matrice de retard
  96. * (éventuellement scalaire) :
  97. CofRetar = 10. ;
  98. * LIMITE DE SOLUBILITE
  99. *-- Limite de solubilité en mol/l (global et fond):
  100. * Cette valeur ne sert que si la dissolution est instantanée ou
  101. * d'ordre 1.
  102. CSat1 = 1. ;
  103. CSat2 = 0.1 ;
  104.  
  105. * DIFFUSIVITE
  106. *-- Diffusivité moléculaire du traceur en m²/s
  107. DifMolec = 2.d0;
  108.  
  109. * NATURE DISSOLUTION
  110. *-- Nature de la dissolution (si existe) et logiques associés :
  111. *NaturDis = 'Pas de dissolution';
  112. *NaturDis = 'Imposée';
  113. NaturDis = 'Ordre 1';
  114. *NaturDis = 'Instant_Pénal';
  115. *NaturDis = 'Instant_PFDis';
  116.  
  117. Solub = 'NEG' NaturDis 'Pas de dissolution';
  118. SoluA = 'EGA' NaturDis 'Imposée';
  119. SoluP = 'EGA' NaturDis 'Ordre 1';
  120. SoluI = ('EGA' NaturDis 'Instant_PFDis')
  121. OU ('EGA' NaturDis 'Instant_Pénal');
  122. SoluL = SoluP OU SoluI;
  123.  
  124. * PARAM. NUM. DISSOLUTION
  125. *-- Grandeur(s) associée(s) à la dissolution :
  126. si SoluP;
  127. * Coefficient de dissolution
  128. ValCoDis = LOG 2.;
  129. finsi;
  130.  
  131. * QUANTITES INITIALES
  132. *-- Concentration en marqueur dans la source à t=0 (mol/l d'eau):
  133. CActif0 = CSat1;
  134.  
  135. *-- Précipité de marqueur dans la source à t=0 (mol/dm² de milieu):
  136. SI Solub;
  137. PActif0 = 10. * CSat1 * CofRetar;
  138. FINSI;
  139.  
  140. * TEMPS DE CALCUL
  141. * initial, final, et pas de temps :
  142. TIni = 0.;
  143. TFin = 100.;
  144. DelTaT = 10. ;
  145.  
  146. * METHODES NUMERIQUES
  147. *-- Coef. d'implicitation (1 = implicite, 0 = explicite)
  148. * Diffusion :
  149. TetaDif = 1. ;
  150. * Convection :
  151. TetaCnv = 1. ;
  152. * Dissolution progressive
  153. TetaDis = 1. ;
  154.  
  155. *-- Coefficient d'élimination :
  156. EpsElim = .1 ;
  157.  
  158. *-- Précision de la machine :
  159. EpsPrec = 1.D-14;
  160.  
  161. * ============
  162. * | MAILLAGE |
  163. * ============
  164. * Dimensions (m) :
  165. * ----------------
  166. LX1 = 1.;
  167. LXM = 5.;
  168. LY1 = 4.;
  169. LY2 = 5.;
  170. LY3 = 8.;
  171. LYM = 12.;
  172.  
  173. * Découpages :
  174. * ------------
  175. N = 1;
  176. NX = 'ENTIER' (N * LXM);
  177. NY = 'ENTIER' (N * LYM + 1);
  178. NX1 = 'MAXIMUM' ('LECT' ('ENTIER' (NX * LX1 / LXM)) 1);
  179. NX2 = NX - NX1;
  180. NY1 = 'MAXIMUM' ('LECT' ('ENTIER' (NY * LY1 / LYM)) 1);
  181. NY2 = 'MAXIMUM' ('LECT' ('ENTIER' (NY * (LY2 - LY1) / LYM)) 1);
  182. NY3 = 'MAXIMUM' ('LECT' ('ENTIER' (NY * (LY3 - LY2) / LYM)) 1);
  183. NY4 = 'MAXIMUM' ('LECT' ('ENTIER' (NY * (LYM - LY3) / LYM)) 1);
  184. NY = NY1 + NY2 + NY3 + NY4;
  185.  
  186. * Points :
  187. * --------
  188. p0 = 0. 0.;
  189. p1 = LXM 0.;
  190. p2 = LXM LY3;
  191. p3 = LXM LYM;
  192. p4 = 0. LYM;
  193. p5 = 0. LY3;
  194. p6 = 0. LY2;
  195. p7 = 0. LY1;
  196. p8 = LX1 LY1;
  197. p9 = LX1 LY2;
  198. p10 = LXM LY1;
  199. p11 = LXM LY2;
  200.  
  201. * Droites :
  202. * ---------
  203. 'OPTION' 'COULEUR' 'BLAN';
  204. D4D5 = 'DROITE' P4 NY4 P5;
  205. D5D6 = 'DROITE' P5 NY3 P6;
  206. D6D7 = 'DROITE' P6 NY2 P7;
  207. D7D0 = 'DROITE' P7 NY1 P0;
  208. D2D5 = 'DROITE' P2 NX P5;
  209. 'OPTION' 'COULEUR' 'TURQ';
  210. D0D1 = 'DROITE' P0 NX P1;
  211. D1D10 = 'DROITE' P1 NY1 P10;
  212. D10D11= 'DROITE' P10 NY2 P11;
  213. D11D2 = 'DROITE' P11 NY3 P2;
  214. D2D3 = 'DROITE' P2 NY4 P3;
  215. D3D4 = 'DROITE' P3 NX P4;
  216. D7D8 = 'DROITE' P7 NX1 P8;
  217. D8D9 = 'DROITE' P8 NY2 P9;
  218. D9D6 = 'DROITE' P9 NX1 P6;
  219. D10D8 = 'DROITE' P10 NX2 P8;
  220. D11D9 = 'DROITE' P11 NX2 P9;
  221. D2D5 = 'DROITE' P2 NX P5;
  222. D8D7 = 'INVERSE' D7D8;
  223. D8D10 = 'INVERSE' D10D8;
  224. D9D8 = 'INVERSE' D8D9;
  225. D6D9 = 'INVERSE' D9D6;
  226. D9D11 = 'INVERSE' D11D9;
  227. D5D2 = 'INVERSE' D2D5;
  228. D4D3 = 'INVERSE' D3D4;
  229.  
  230. *-- Pour les conditions aux limites :
  231. LInf = D0D1;
  232. Lsup = D3D4;
  233. LDroit = D1D10 ET D10D11 ET D11D2 ET D2D3;
  234. LGau = 'INVERSE' (D4D5 ET D5D6 ET D6D7 ET D7D0);
  235.  
  236. *-- Pour faire la somme des flux :
  237. * pour le tranfert d'activité (loin des conditions aux limites) :
  238. LFlux = D5D2;
  239.  
  240. * Surfaces maillées :
  241. * -------------------
  242. SActif = 'ORIENTER' ('COULEUR' ('DALLER' D7D8 D8D9 D9D6 D6D7) 'ROUG') ;
  243. SFond = 'ORIENTER' ('COULEUR' ('DALLER' D2D3 D3D4 D4D5 D5D2) 'VERT') ;
  244. SCoeur = 'ORIENTER' ('COULEUR' (
  245. ('DALLER' D0D1 D1D10 (D10D8 ET D8D7) D7D0)
  246. ET ('DALLER' D8D10 D10D11 D11D9 D9D8)
  247. ET ('DALLER' (D6D9 ET D9D11) D11D2 D2D5 D5D6)
  248. ) 'TURQ' ) ;
  249. SGran = 'COULEUR' (SCoeur et SFond) 'TURQ' ;
  250. Mtot = SActif ET SGran;
  251.  
  252. LTrame = 'COULEUR' ((CONT SActif) ET (CONT SGran)) 'BLAN';
  253. *
  254. * Elements contenant tous les points de calcul
  255.  
  256. QMtot = 'CHAN' Mtot 'QUAF' ;
  257. QFond = 'CHAN' SFond 'QUAF' ;
  258. QActif = 'CHAN' SActif 'QUAF' ;
  259. QGran = 'CHAN' SGran 'QUAF' ;
  260. QInf = 'CHAN' LInf 'QUAF' ;
  261. QDro = 'CHAN' LDroit 'QUAF' ;
  262. QSup = 'CHAN' Lsup 'QUAF' ;
  263. QGau = 'CHAN' LGau 'QUAF' ;
  264. QLFlux = 'CHAN' LFlux 'QUAF' ;
  265. ELIM 0.001 ( QMtot ET QActif ET QFond ET QGran ET QLFlux ET
  266. QGau ET QInf ET QDro ET QSup) ;
  267.  
  268. * Domaines :
  269. * ----------
  270. * Modèle (Mo) :
  271. MoHydro = 'MODELE' QMtot DARCY ISOTROPE ;
  272. MoFond = 'MODELE' QFond DARCY ISOTROPE ;
  273. MoActif = 'MODELE' QActif DARCY ISOTROPE ;
  274. MoGran = 'MODELE' QGran DARCY ISOTROPE ;
  275. MoInf = 'MODELE' QInf DARCY ISOTROPE ;
  276. MoDro = 'MODELE' QDro DARCY ISOTROPE ;
  277. MoSup = 'MODELE' QSup DARCY ISOTROPE ;
  278. MoGau = 'MODELE' QGau DARCY ISOTROPE ;
  279. MoFlux = 'MODELE' QLFlux DARCY ISOTROPE ;
  280.  
  281. * Longueurs, Normales et Orientations des arêtes du domaine ;
  282. Chyb1 = 'DOMA' MoHydro 'SURFACE';
  283. Chyb2 = 'DOMA' MoHydro 'NORMALE';
  284. VolChPro = 'DOMA' MoHydro 'VOLUME';
  285. CeHydro = 'DOMA' MoHydro 'CENTRE';
  286. CeFlux = 'DOMA' MoFlux 'CENTRE';
  287.  
  288. * Création des normales à la ligne sur laquelle on mesure les flux :
  289. NleFlux = 'MANU' 'CHPO' CeFlux 2 'UX' 0. 'UY' +1. NATURE DIFFUS;
  290. DFluxTIT = 'CHAINE' 'la ligne y=' 'FORMAT' '(F5.0)'
  291. ('COOR' 2 P2) 'm';
  292.  
  293. * Points où l'on suivra la concentration :
  294. * ----------------------------------------
  295. PEvol = 'TABLE';
  296. * Centre du combustible :
  297. PEvol.1 = 'TABLE';
  298. PEvol.1 .'T' = 'CHAINE' 'dans la source' ;
  299. PEvol.1 .'P' = 'CENTRE';
  300. PEvol.1 .'M' = ( (.5 * LX1) ((LY2 + LY1) / 2.) );
  301. PEvol.1 .'M' = CeHydro 'POINT' 'PROC' (PEvol.1 .'M');
  302. * Juste après la transition aval :
  303. PEvol.2 = 'TABLE';
  304. PEvol.2 .'T' = 'CHAINE' 'post-transition aval' ;
  305. PEvol.2 .'P' = 'CENTRE';
  306. PEvol.2 .'M' = CeHydro 'POINT'
  307. 'PROC' (P5 'PLUS' (0.05 0.05));
  308.  
  309. * Lignes où capturer les évolutions des concentrations :
  310. * ------------------------------------------------------
  311. LEvol = 'TABLE';
  312.  
  313. 'REPETER' Bcl8 ('NBEL' LGau);
  314. pt = CeHydro 'POINT' 'PROC'
  315. ((LGau 'POINT' &Bcl8) 'PLUS' (0 0.01));
  316. SI (&Bcl8 > 2);
  317. LGauC = LGauC ET ('MANU' 'SEG2' pt0 pt);
  318. FINSI;
  319. SI (&Bcl8 'EGA' 2);
  320. LGauC = ('MANU' 'SEG2' pt0 pt);
  321. FINSI;
  322. pt0 = pt;
  323. 'FIN' Bcl8;
  324. 'OUBLIER' pt0;
  325. 'OUBLIER' pt;
  326.  
  327. LEvol.1 = 'TABLE';
  328. LEvol.1 .M = 'COULEUR' LGauC 'BLAN';
  329. LEvol.1 .P = 'CENTRE';
  330. LEvol.1 .L = 'Y (m)';
  331. LEvol.1 .T = 'CHAINE' 'longitudinale' ;
  332.  
  333. * ===============
  334. * | HYDRAULIQUE |
  335. * ===============
  336. * La donnée est U. Pour obtenir VDarcy et QF, on simule une résolution
  337. * de Darcy. On prend pour cela K = 1 et grad h = U :
  338.  
  339. * Matériau associé (Ma) :
  340. MaHydro = 'MATERIAU' MoHydro 'K' 1.;
  341.  
  342. * Matrice hybride élémentaire :
  343. MeHydro = 'MHYB' MoHydro MaHydro;
  344.  
  345. * Trace de Concentration :
  346. FAHydro= 'DOMA' MoHydro 'FACE' ;
  347. XX YY = 'COOR' FAHydro ;
  348. Un = 'MANU' 'CHPO' FAHydro 1 'SCAL' 1.;
  349. THHydro = (-1.) * (UXImp * XX) - (UYImp * YY) + Un;
  350. THHydro = 'NOMC' THHydro 'TH';
  351.  
  352. * Concentration :
  353. XX YY = 'COOR' CeHydro ;
  354. Un = 'MANU' 'CHPO' CeHydro 1 'SCAL' 1.;
  355. HHydro = (-1.) * (UXImp * XX) - (UYImp * YY) + Un;
  356. HHydro = 'NOMC' HHydro 'H';
  357.  
  358. * Flux et vitesses :
  359. QFHydro = 'HDEB' MoHydro MeHydro HHydro THHydro ;
  360. VCDarcy = 'HVIT' MoHydro QFHydro ;
  361.  
  362. * =============
  363. * | TRANSPORT |
  364. * =============
  365. * Modèle propre au transport :
  366. * ----------------------------
  367. MoTransp = 'MODELE' QMtot DARCY ISOTROPE ;
  368.  
  369. * Matrice Porosité cinématique (Type ChamElem) :
  370. * ----------------------------------------------
  371. CeTransp= 'DOMA' MoTransp 'CENTRE' ;
  372. MaPor1 = 'MANU' 'CHPO' CeTransp 1 'CK' ValPor NATURE DIFFUS;
  373. MaPor = 'KCHA' MoTransp MaPor1 'CHAM';
  374. MaPorVol= VolChPro * ('EXCO' 'CK' MaPor1 'SCAL');
  375.  
  376. * Matrice coef. de retard (Type Scalaire car constant) :
  377. * ----------------------------------------------
  378. MaRet1 = CofRetar;
  379.  
  380. * Porosité * retard * volume de maille (x Ccentre = soluté + adsorbat par maille)
  381. * ------------------------------------
  382. PorVoRet = MaPorVol * MaRet1;
  383.  
  384. * Temps :
  385. * -------
  386. * Temps à calculer
  387. LiTCalc = 'PROG' TIni 'PAS' DeltaT Tfin;
  388. NTCalc = 'DIME' LiTCalc;
  389. 'REMPLACER' LiTCalc NTCalc Tfin;
  390.  
  391. * Ecriture de ces temps sous forme de table ;
  392. TabTCalc = 'TABLE';
  393. 'REPETER' Bcl26 NTCalc;
  394. Id = &Bcl26 - 1;
  395. Tps = 'EXTR' LiTCalc &Bcl26;
  396. TabTCalc.Id = Tps;
  397. 'FIN' Bcl26;
  398.  
  399. * Temps sauvegardés
  400. LiTSauv = LiTCalc ;
  401. NTSauv = NTCalc ;
  402.  
  403. * Temps de tracage des champs
  404. LiIndGph = 'LECT' 0 5 10 ;
  405. NTGrph = 'DIME' LiIndGph;
  406.  
  407. * Temps de tracage des évolutions
  408. LiTEvol = litsauv ;
  409. liindEvl = 'LECT' 0 pas 1 (ntsauv - 1) ;
  410. NTEvol = 'DIME' litevol;
  411.  
  412. * Temps servant à la création des chargements
  413. TSup = 1.2 * TFin;
  414. DelTDef = 0.001 * TSup;
  415.  
  416. * ====================================
  417. * | CONSTRUCTION DES DONNEES DE BASE |
  418. * ====================================
  419. * Dissolution / Libération ;
  420. * --------------------------
  421. *-- Matrice Limite de solubilité ;
  422. * Variation linéaire décroissance de l'amont vers l'aval :
  423. XX YY = 'COOR' CeHydro;
  424. MaSol4 = 'MANU' 'CHPO' CeHydro 1 'H' (CSat2 - CSat1)
  425. NATURE DIFFUS;
  426. MaSol1 = (YY * MaSol4 / LYM) + CSat1;
  427.  
  428. * Matrice Coefficient de dissolution :
  429. * ------------------------------------
  430. SI SoluP;
  431. MaCoDis1 = 'MANU' 'CHPO' CeHydro 1 'SCAL' ValCoDis;
  432. FINSI;
  433.  
  434. * Matériau associé au transport :
  435. * -------------------------------
  436. * Terme diffusif pur (diffusivité effective) = Porosité * Diffusivité :
  437. DifEff = DifMolec * FacForme * MaPor;
  438. MaTransp = 'MATERIAU' MoTransp 'K' DifEff ;
  439.  
  440. * Matrice hybride élémentaire :
  441. * -----------------------------
  442. MeTransp = 'MHYB' MoTransp MaTransp;
  443.  
  444. * Conditions Initiales :
  445. * ----------------------
  446. *-- Traces de concentration (quelconque car le transport est implicité).
  447. TC0 = 'MANU' 'CHPO' FaHydro 1 'TH' 0. 'NATURE' 'DISCRET';
  448.  
  449. *-- Concentration aux centres des éléments (sert à définir la quantité
  450. * initiale d'élément) :
  451. Conc01 = 'MANU' 'CHPO' CeHydro 1 'H' 0. 'NATURE' 'DISCRET';
  452. Conc02 = 'MANU' 'CHPO' ('DOMA' MoActif 'CENTRE') 1 'H' CActif0
  453. 'NATURE' 'DISCRET';
  454. Conc0 = Conc01 ET Conc02;
  455. Conc0 = 'NOMC'
  456. ('KCHT' MoHydro 'SCAL' 'CENTRE' ('NOMC' Conc0 'SCAL')) 'H';
  457.  
  458. *-- Flux diffusif initial (aux centres des faces) - décoratif puisque la
  459. * diffusion est implicite :
  460. QFDif0 = 'MANU' 'CHPO' FaHydro 1 'FLUX' 0. 'NATURE' 'DISCRET';
  461.  
  462. *-- Précipité :
  463. SI Solub;
  464. Prec01 = 'MANU' 'CHPO' ( 'DOMA' MoActif 'CENTRE') 1 'H'
  465. PActif0 'NATURE' 'DISCRET';
  466. Prec02 = 'MANU' 'CHPO' CeHydro 1 'H' 0. 'NATURE' 'DISCRET';
  467. Prec0 = Prec01 ET Prec02;
  468. Prec0 = 'NOMC'
  469. ('KCHT' MoHydro 'SCAL' 'CENTRE' ('NOMC' Prec0 'SCAL')) 'H';
  470. FINSI;
  471.  
  472. *-- Libération de soluté à partir du précipité (décoratif aussi):
  473. SI Solub;
  474. Libe0 = 'MANU' 'CHPO' CeHydro 1 'H' 0. 'NATURE' 'DISCRET';
  475. FINSI;
  476.  
  477. * Conditions aux limites (type CHARGEMENT) :
  478. * ------------------------------------------
  479. * Concentration imposée en amont et en aval, flux nul ailleurs.
  480. Ceinf= DOMA MoInf 'CENTRE' ;
  481. CeSup= DOMA MoSup 'CENTRE' ;
  482. CCL = 'MANU' 'CHPO' (Ceinf et CeSup) 1 'TH' 0.
  483. 'NATURE' 'DISCRET';
  484. RigCL = 'BLOQUE' (CeInf et CeSup) 'TH';
  485. CharCL = 'DEPIMPOSE' RigCL CCL ;
  486. ChgCL = 'CHARG' CharCL
  487. ('EVOL' 'MANU' ('PROG' 0. TSup) ('PROG' 1. 1.));
  488.  
  489. * ===============================
  490. * | Vérification des paramètres |
  491. * | de CONVERGENCE |
  492. * ===============================
  493. MESS 'Vérification des paramètres de CONVERGENCE :';
  494. MESS '--------------------------------------------';
  495.  
  496. * Cohérence dissolution progressive :
  497. * -----------------------------------
  498. * Pour éviter que la dissolution progressive ne soit si rapide que
  499. * l'on dépasse régulièrement la limite de solubilité, au risque
  500. * d'osciller, voire de diverger, vérifier que Codis * DeltaT < 1 :
  501. SI SoluP;
  502. Stietel = (1. - TetaDis) * MaCoDis1 * DeltaT;
  503. SI ('NEG' (TYPE Stietel) 'CHPOINT ');
  504. StietelM = Stietel;
  505. SINON;
  506. StietelM = 'MAXIMUM' Stietel;
  507. FINSI;
  508. MESS 'Le nombre de Stietel (dissolution progressive) atteint '
  509. StietelM ;
  510. SI (StietelM > 1.);
  511. MESS 'Attention, il est supérieur à 1';
  512. SI ('NEG' (TYPE MaCoDis1) 'CHPOINT ');
  513. MinCoDis = MaCoDis1;
  514. SINON;
  515. MinCoDis = 'MINIMUM' MaCoDis1;
  516. FINSI;
  517. MESS 'Il faut prendre un pas de temps d au plus'
  518. (1. / MinCoDis) 'ans. ';
  519. SINON;
  520. MESS 'Il est bien inférieur à 1';
  521. FINSI;
  522. MESS ' ';
  523. FINSI;
  524. * ==============
  525. * | Résolution |
  526. * ==============
  527. *-- Table de transport :
  528. Transp = 'TABLE';
  529. Transp.'TEMPS' = 'TABLE';
  530. Transp.'TRACE_CONC' = 'TABLE';
  531. Transp.'CONCENTRATION' = 'TABLE';
  532. Transp.'FLUX' = 'TABLE';
  533. SI Solub;
  534. Transp.'PRECIPITE' = 'TABLE';
  535. Transp.'DISSOLUTION' = 'TABLE';
  536. FINSI;
  537.  
  538. Transp.'SOUSTYPE' = 'DARCY_TRANSITOIRE';
  539. Transp.'MODELE' = MoTransp;
  540. Transp.'CARACTERISTIQUES' = MaTransp;
  541. Transp.'POROSITE' = MaPor;
  542. Transp.'CONVECTION' = QFHydro;
  543. Transp.'COEF_RETARD' = MaRet1;
  544. SI SoluL;
  545. Transp.'LIMITE_SOLUBILITE' = MaSol1;
  546. FINSI;
  547. SI SoluP;
  548. Transp.'COEF_DISSOLUTION' = MaCoDis1;
  549. FINSI;
  550.  
  551. * Conditions initiales :
  552. Transp.'TEMPS'. 0 = TIni;
  553. Transp.'TRACE_CONC'. 0 = TC0;
  554. Transp.'CONCENTRATION'. 0 = Conc0;
  555. Transp.'FLUX'. 0 = QFDif0;
  556. SI Solub;
  557. Transp.'PRECIPITE'. 0 = Prec0;
  558. Transp.'DISSOLUTION'. 0 = Libe0;
  559. FINSI;
  560.  
  561. * Conditions aux limites :
  562. Transp.'BLOCAGE' = RigCL;
  563. Transp.'TRACE_IMPOSE' = ChgCL;
  564.  
  565. * Paramètres numériques :
  566. Transp.'THETA_DIFF' = TetaDif;
  567. Transp.'THETA_CONVECTION' = TetaCnv;
  568. SI SoluP;
  569. Transp.'THETA_DISS' = TetaDis;
  570. FINSI;
  571. Transp.'TEMPS_CALCULES' = LiTCalc;
  572. Transp.'TEMPS_SAUVES' = LiTSauv;
  573.  
  574. * ==========
  575. * | CALCUL |
  576. * ==========
  577.  
  578. DARCYTRA Transp;
  579.  
  580. * ===================
  581. * | POST-TRAITEMENT |
  582. * ===================
  583.  
  584. MESS ' ';
  585. MESS 'Post-Traitement :';
  586. MESS '-----------------';
  587. MESS ' ';
  588.  
  589. IndTSauv = 'INDEX' (Transp.temps);
  590.  
  591. * Préparation tracé :
  592. * -------------------
  593. * Calcul du flux à travers une certaine ligne :
  594. * ---------------------------------------------
  595. * Les propriétés de la ligne sont stockées dans DFlux et NleFlux.
  596. * Le nom de la ligne doit etre mis dans DFluxTIT .
  597. NORHydro = 'DOMA' MoTransp 'NORMALE' ;
  598. Ori2 = 'PSCAL' ('REDU' NORHydro CeFlux ) NleFlux
  599. ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY');
  600. FlInt = 0.;
  601. liabs2 = 'ENLEVER' litcalc 1;
  602. 'REPETER' Bcl21 (NTSauv - 1);
  603. i = &Bcl21 + 1;
  604. Id = IndTSauv.i;
  605. Tps = Transp.Temps.Id;
  606. Id1 = IndTSauv.(i - 1);
  607. Tp1 = Transp.Temps.(id - 1);
  608. dt = Tps - Tp1;
  609.  
  610. *-- Flux diffusif et convectif à l'instant d'indice Id
  611. * (diffusion implicite TetaDif et convection implicite TetaCnv) :
  612. * méthode par produit scalaire flux * normale sur 1 ligne
  613.  
  614. * Débit diffusif sortant :
  615. DebD1 = ((1. - TetaDif) * Transp.Flux.Id1)
  616. + (TetaDif * Transp.Flux.Id);
  617. DebD2 = 'REDU' DebD1 CeFlux ;
  618. DebD3 = 'RESULT' (DebD2 * Ori2);
  619. FlD = ('MAXIMUM' DebD3);
  620. Fl = FlD;
  621.  
  622. * Débit convectif sortant :
  623. THCnv = ((1. - TetaCnv) * Transp.Trace_Conc.Id1)
  624. + (TetaCnv * Transp.Trace_Conc.Id);
  625. DebC1 = ('EXCO' 'TH' THCnv 'SCAL') * Transp.Convection;
  626. DebC2 = 'REDU' DebC1 CeFlux ;
  627. DebC3 = 'RESULT' (DebC2 * Ori2);
  628. FlC = ('MAXIMUM' DebC3);
  629. Fl = FlC + FlD;
  630.  
  631. FlInt = FlInt + (Fl * dt);
  632.  
  633. SI (i 'EGA' 2);
  634. LiFlC = 'PROG' FlC;
  635. LiFlD = 'PROG' FlD;
  636. LiFl = 'PROG' Fl;
  637. LiFlI = 'PROG' FlInt;
  638. SINON;
  639. LiFlC = 'INSERER' LiFlC (i - 1) FlC;
  640. LiFlD = 'INSERER' LiFlD (i - 1) FlD;
  641. LiFl = 'INSERER' LiFl (i - 1) Fl;
  642. LiFlI = 'INSERER' LiFlI (i - 1) FlInt;
  643. FINSI;
  644. 'FIN' Bcl21;
  645.  
  646. EvFlC = 'EVOL' 'JAUN' 'MANU' 't (ans)' LiAbs2 'Debit_Conv' LiFlC;
  647. EvFlD = 'EVOL' 'BLEU' 'MANU' 't (ans)' LiAbs2 'Debit_Diff' LiFlD;
  648. EvFl = 'EVOL' 'VERT' 'MANU' 't (ans)' LiAbs2 'Debit' LiFl;
  649. EvFlI = 'EVOL' 'VERT' 'MANU' 't (ans)' LiAbs2 'Debit_int.' LiFlI;
  650.  
  651. * Tracé :
  652. * ------
  653. * Décalage des champs les uns par rapport aux autres :
  654. Decal1 = (1.2 * LXM) 0.;
  655. Decal2 = (2.4 * LXM) 0.;
  656.  
  657. * Tracé du champ de limite de solubilité :
  658. * ----------------------------------------
  659. SI (TrLimSol ET SoluL);
  660. 'OPTION' ISOV SURF;
  661. 'TITRE' 'Limite de solubilite';
  662. MaSol2 = 'KCHA' MoTransp MaSol1 'CHAM';
  663. 'TRAC' MoTransp MaSol2 LTrame;
  664. FINSI;
  665.  
  666. * Tracé du champ de coefficient de dissolution :
  667. * ----------------------------------------------
  668. SI (TrCoDis ET SoluP);
  669. 'TITRE' 'Coefficient de dissolution (1/an)';
  670. MaCoDis2 = 'KCHA' MoTransp MaCoDis1 'CHAM';
  671. 'OPTION' ISOV SURF;
  672. 'TRAC' MoTransp MaCoDis2 LTrame;
  673. FINSI;
  674.  
  675. * Tracé du champ de coefficient de retard :
  676. * -----------------------------------------
  677. SI (TrRet ET ('EXISTE' Transp COEF_RETARD));
  678. 'TITRE' 'Coefficient de Retard';
  679. MaRet0 = Transp.COEF_RETARD;
  680. SI ('EGA' (TYPE MaRet0) 'FLOTTANT');
  681. MaRet1 = MANU 'CHPO' CeTransp 1 'SCAL' MaRet0;
  682. SINON;
  683. MaRet1 = MaRet0;
  684. FINSI;
  685. MaRet2 = 'KCHA' MoTransp MaRet1 'CHAM';
  686. MaRet3 = 'KCHT' MoTransp 'SCAL' 'CENTRE' ('NOMC' MaRet1 'SCAL');
  687. MaRet4 = 'ELNO' MoTransp MaRet3;
  688. 'OPTION' ISOV SURF;
  689.  
  690. Rmin = 'MINIMUM' MaRet1;
  691. Rmax = 'MAXIMUM' MaRet1;
  692. SI (('MINIMUM' MaRet1) < (('MAXIMUM' MaRet1) - EpsPrec));
  693. Ech = 'PROG' Rmin 'PAS' ((Rmax - Rmin) / 4.) Rmax;
  694. 'TRAC' MoTransp MaRet2 LTrame Ech;
  695. SINON;
  696. Ech = 'PROG' 0. ('MAXIMUM' MaRet1);
  697. 'TRAC' MoTransp MaRet2 LTrame Ech;
  698. FINSI;
  699. FINSI;
  700.  
  701. * Tracé des profils de conc, prec, diss le long des lignes choisies :
  702. * -------------------------------------------------------------------
  703. SI TrLEvol;
  704.  
  705. IndLEvol = 'INDEX' LEvol;
  706. TabEvlC = table;
  707. SI Solub;
  708. TabEvlP = table;
  709. TabEvlL = table;
  710. Finsi;
  711.  
  712. 'REPETER' Bcl ('DIME' LEvol);
  713. * pour chaque ligne i où suivre les valeurs :
  714. i = IndLEvol.&Bcl;
  715.  
  716. * détermination du nom de la composante à suivre et évolution de
  717. * la limite de solubilité :
  718. si ('EGA' (LEvol.i.'P') 'CENTRE');
  719. mot1 = 'H';
  720. finsi;
  721. si ('EGA' (LEvol.i.'P') 'FACE');
  722. mot1 = 'TH';
  723. finsi;
  724. si ('EGA' (LEvol.i.'P') 'SOMMET');
  725. mot1 = 'SCAL';
  726. finsi;
  727.  
  728. * Evolution des concentrations :
  729. TitDesC = 'CHAINE' 'Concentration ' (LEvol.i.'T') ;
  730. TabEvlC.i = TRACHIS Transp 'CONCENTRATION' (LEvol.i.'M') LiIndevl
  731. ('MOTS' mot1) ('MOTS' ' ') 'PREF' ' ' ;
  732.  
  733. si (SoluL et ('NEG' (LEvol.i.'P') 'FACE'));
  734. * Adjonction de la limite de solubilité :
  735. si ('EGA' (LEvol.i.'P') 'CENTRE');
  736. EvSatL = 'EVOL' 'BLAN' 'CHPO' MaSol1 'H' (LEvol.I.'M');
  737. finsi;
  738. si ('EGA' (LEvol.i.'P') 'SOMMET');
  739. EvSatL = 'EVOL' 'BLAN' 'CHPO' MaSolS 'SCAL' (LEvol.I.'M');
  740. finsi;
  741. EvSatL = 'EXTR' EvSatL 'COUR' 1;
  742. nn = 'DIME' TabEvlC.i ;
  743. 'REPETER' bcl2 nn ;
  744. j = nn - &bcl2 + 1;
  745. TabEvlC.i.(j + 1) = TabEvlC.i.j;
  746. 'FIN' bcl2;
  747. TabEvlC.i.1 = table;
  748. TabEvlC.i.1 .'VALEUR' = EvSatL ;
  749. TabEvlC.i.1 .'LEGEND1' = 'Csat' ;
  750. TabEvlC.i.1 .'LEGEND2' = ' ';
  751. finsi;
  752.  
  753. DESTRA (TabEvlC.i) 'MIMA' 'AXES'
  754. 'TITR' TitDesC 'TITX' (LEvol.i.'L') 'TITY' 'C (mol/l)'
  755. 'YBOR' 0. CSat1 ;
  756.  
  757. SI (Solub et ('NEG' (LEvol.i.'P') 'FACE'));;
  758. * Evolution des précipités :
  759. TitDesP = 'CHAINE' 'Precipite ' (LEvol.i.'T') ;
  760. TabEvlP.i = TRACHIS Transp 'PRECIPITE' (LEvol.i.'M') LiIndevl
  761. ('MOTS' mot1) ('MOTS' ' ') 'PREF' ' ' ;
  762. DESTRA (TabEvlP.i) 'MIMA' 'AXES' 'TITR' TitDesP
  763. 'TITX' (LEvol.i.'L') 'TITY' 'P (mol/dm3)' ;
  764. * Evolution des dissolutions :
  765. TitDesL = 'CHAINE' 'Dissolution ' (LEvol.i.'T') ;
  766. TabEvlL.i = TRACHIS Transp 'DISSOLUTION' (LEvol.i.'M') LiIndevl
  767. ('MOTS' mot1) ('MOTS' ' ') 'PREF' ' ' ;
  768. DESTRA (TabEvlL.i) 'MIMA' 'AXES' 'TITR' TitDesL
  769. 'TITX' (LEvol.i.'L') 'TITY' 'L (mol/dm3/an)' ;
  770. Finsi;
  771.  
  772. 'FIN' bcl;
  773.  
  774. FINSI;
  775.  
  776. * Tracé des évolutions de conc, prec, diss aux points choisis :
  777. * -------------------------------------------------------------
  778. * (L'indice 0 est réservé à un point de la source)
  779. SI (TrPEvol ET (('DIME' ('INDEX' PEVol)) > 0));
  780.  
  781. IndPEvol = 'INDEX' PEvol;
  782. TabEvpC = table;
  783. SI Solub;
  784. TabEvpP = table;
  785. TabEvpL = table;
  786. Finsi;
  787.  
  788. 'REPETER' Bcl ('DIME' PEvol);
  789. * pour chaque point i où suivre les valeurs :
  790. i = IndPEvol.&Bcl;
  791.  
  792. * détermination du nom de la composante à suivre et évolution de
  793. * la limite de solubilité :
  794. si ('EGA' (PEvol.i.'P') 'CENTRE');
  795. mot1 = 'H';
  796. finsi;
  797. si ('EGA' (PEvol.i.'P') 'FACE');
  798. mot1 = 'TH';
  799. finsi;
  800. si ('EGA' (PEvol.i.'P') 'SOMMET');
  801. mot1 = 'SCAL';
  802. finsi;
  803.  
  804. * Evolution des concentrations :
  805. TitDesC = 'CHAINE' 'Concentration ' (PEvol.i.'T') ;
  806. TabEvpC.i = TRACHIT Transp 'CONCENTRATION'
  807. ('MANU' 'POI1' (PEvol.i.'M')) LiIndEvl
  808. ('MOTS' mot1) 'PREF' ' ' ;
  809.  
  810. si (SoluL et ('NEG' (PEvol.i.'P') 'FACE'));
  811. * Adjonction de la limite de solubilité :
  812. si ('EGA' (PEvol.i.'P') 'CENTRE');
  813. ValCSat = MaSol1 'EXTR' 'H' (PEvol.i.'M');
  814. finsi;
  815. si ('EGA' (PEvol.i.'P') 'SOMMET');
  816. ValCSat = MaSolS 'EXTR' 'SCAL' (PEvol.i.'M');
  817. finsi;
  818. EvSatP = 'EVOL' 'MANU' ('PROG' 0. TFin) ('PROG' 2*ValCSat);
  819. nn = 'DIME' TabEvpC.i ;
  820. 'REPETER' bcl2 nn ;
  821. j = nn - &bcl2 + 1;
  822. TabEvpC.i.(j + 1) = TabEvpC.i.j;
  823. 'FIN' bcl2;
  824. TabEvpC.i.1 = table;
  825. TabEvpC.i.1 .'VALEUR' = EvSatP ;
  826. TabEvpC.i.1 .'LEGEND1' = 'Csat' ;
  827. TabEvpC.i.1 .'LEGEND2' = ' ';
  828. FINSI;
  829.  
  830. DESTRA (TabEvpC.i) 'MIMA' 'AXES'
  831. 'TITR' TitDesC 'TITX' 't (an)' 'TITY' 'C (mol/l)'
  832. 'YBOR' 0. CSat1 'XBOR' Tini TFin ;
  833.  
  834. SI (Solub et ('NEG' (PEvol.i.'P') 'FACE'));;
  835. * Evolution des précipités :
  836. TitDesP = 'CHAINE' 'Precipite ' (PEvol.i.'T') ;
  837. TabEvpP.i = TRACHIT Transp 'PRECIPITE'
  838. ('MANU' 'POI1' (PEvol.i.'M')) LiIndevl
  839. ('MOTS' mot1) 'PREF' ' ' ;
  840. DESTRA (TabEvpP.i) 'MIMA' 'AXES' 'TITR' TitDesP
  841. 'TITX' 't (an)' 'TITY' 'P (mol/dm3)'
  842. 'XBOR' Tini TFin ;
  843. * Evolution des dissolutions :
  844. TitDesL = 'CHAINE' 'Dissolution ' (PEvol.i.'T') ;
  845. TabEvpL.i = TRACHIT Transp 'DISSOLUTION'
  846. ('MANU' 'POI1' (PEvol.i.'M')) LiIndevl
  847. ('MOTS' mot1) 'PREF' ' ' ;
  848. DESTRA (TabEvpL.i) 'MIMA' 'AXES' 'TITR' TitDesL
  849. 'TITX' 't (an)' 'TITY' 'L (mol/dm3/an)'
  850. 'XBOR' Tini TFin ;
  851. Finsi;
  852.  
  853. 'FIN' bcl;
  854.  
  855. FINSI; COMM 'SI TrPEvol';
  856.  
  857. * Tracé des champs de conc, prec, aux différents instants :
  858. * ---------------------------------------------------------
  859. * On déplace les supports des chpos pour tracer les fractions de
  860. * précipité à côté des concentrations :
  861. TrPrec = TrPrec ET Solub;
  862.  
  863. *-- On trace pour chaque temps choisi :
  864. SI (TrConc OU TrPrec);
  865.  
  866. *-- Echelles :
  867. SI TrConc;
  868. SI SoluL;
  869. CMinD = 'MINIMUM' MaSol1;
  870. CMaxD = 'MAXIMUM' MaSol1;
  871. SINON;
  872. CMinD = 0.;
  873. CMaxD = 0.;
  874. FINSI;
  875. FINSI;
  876.  
  877. 'REPETER' Bcl17 NTSauv;
  878. i = &Bcl17;
  879. Id = IndTSauv.i;
  880. SI TrConc;
  881. CMinD = 'MINIMUM'
  882. ('PROG' CMinD ('MINIMUM' Transp.Concentration.Id));
  883. CMaxD = 'MAXIMUM'
  884. ('PROG' CMaxD ('MAXIMUM' Transp.Concentration.Id));
  885. FINSI;
  886. 'FIN' Bcl17;
  887.  
  888. SI TrConc;
  889. CMinD = 'MINIMUM' ('PROG' CMinD (CMaxD * 1.e-2));
  890. CMinD = 'MAXIMUM' ('PROG' CMinD 0.);
  891. EchC0 = 'PROG' 0. 'PAS' (CMaxD / 13.) CMaxD;
  892. FINSI;
  893.  
  894. 'REPETER' Bcl3 NTGrph;
  895. Id = 'EXTR' LiIndgph &Bcl3;
  896. Tps = Transp.Temps.Id;
  897. TitGraph = ' ' ;
  898. SI TrConc;
  899. TitGraph = 'CHAINE' TitGraph 'Solute ';
  900. FINSI;
  901. SI (TrConc ET TrPrec);
  902. TitGraph = 'CHAINE' TitGraph 'et ';
  903. FINSI;
  904. SI TrPrec;
  905. TitGraph = 'CHAINE' TitGraph 'Precipite ';
  906. FINSI;
  907. TitGraph = 'CHAINE' TitGraph 'a t=' Tps ' ans ';
  908. 'TITRE' TitGraph;
  909.  
  910. SI TrConc;
  911. Conc2 = 'KCHA' MoTransp Transp.Concentration.Id 'CHAM';
  912. MoTot = MoTransp;
  913. Tot2 = Conc2;
  914. FINSI;
  915. SI TrPrec;
  916. Prec1 = 'KCHA' MoTransp Transp.Precipite.Id 'CHAM';
  917. MoTra2 Prec2 = MoTransp Prec1 'PLUS' Decal1;
  918. LTra2 = LTrame 'PLUS' Decal1;
  919. 'ELIMINATION' (ltra2 'ET' ('EXTR' Prec2 'MAIL')) epselim;
  920. SI (NON TrConc);
  921. Tot2 = Prec2;
  922. MoTot = MoTra2;
  923. SINON;
  924. Tot2 = Tot2 ET Prec2;
  925. MoTot = MoTot ET MoTra2;
  926. FINSI;
  927. FINSI;
  928. 'OPTION' ISOV SURF;
  929.  
  930. SI (('MINIMUM' Tot2) < (('MAXIMUM' Tot2) - EpsPrec));
  931. SI (TrConc ET (NON TrPrec));
  932. SI (('MINIMUM' Conc2) < (('MAXIMUM' Conc2) - EpsPrec));
  933. 'TRACER' Motot conc2 echc0 LTrame;
  934. FINSI;
  935. SINON;
  936. SI TrConc;
  937. 'TRACER' MoTot Tot2 echc0 ;
  938. SINON;
  939. 'TRACER' MoTot Tot2 echc0 ltra2 ;
  940. FINSI;
  941. FINSI;
  942. FINSI;
  943. 'FIN' Bcl3;
  944. FINSI;
  945.  
  946. * Tracé des champs de dissolution :
  947. * ---------------------------------
  948. TrLib = TrLib ET Solub;
  949. SI TrLib;
  950. 'REPETER' Bcl22 (NTgrph - 1);
  951. Id = ('EXTR' LiIndgph (&Bcl22 + 1)) - 1 ;
  952. Tps = Transp.Temps.Id;
  953. Id2 = Id + 1;
  954. Tp2 = Transp.Temps.Id2;
  955. dt = Tp2 - Tps;
  956. TitGraph = 'CHAINE' 'Quantite dissoute entre '
  957. Tps ' et ' Tp2 ' annees (mol/m3/an)';
  958. 'TITRE' TitGraph;
  959. Libe2 = Transp.Dissolution.Id2;
  960. Libe3 = 'KCHA' MoTransp Libe2 'CHAM';;
  961. SI ((('MAXIMUM' Libe3) - ('MINIMUM' Libe3)) > EpsPrec);
  962. 'OPTION' ISOV SURF;
  963. 'TRAC' MoTransp Libe3 Ltrame ;
  964. FINSI;
  965. 'FIN' Bcl22;
  966. FINSI;
  967.  
  968. * Tracé du flux traversant la ligne choisie (en mol/l/an) :
  969. * ---------------------------------------------------------
  970. SI TrFlux ;
  971.  
  972. TitDess = 'CHAINE' 'Flux traversant ' DFluxTIT ;
  973. TabDess = 'TABLE';
  974. TabDess.1 = 'MARQ CARR' ;
  975. TabDess.2 = 'MARQ TRIA' ;
  976. TabDess.3 = 'MARQ PLUS' ;
  977. TabDess.'TITRE' = 'TABLE';
  978. TabDess.'TITRE' . 1 = 'Debit_Convectif';
  979. TabDess.'TITRE' . 2 = 'Debit_Diffusif';
  980. TabDess.'TITRE' . 3 = 'Debit_Total';
  981. EvTot = EvFlC ET EvFlD ET EvFl;
  982. 'DESSIN' EvTot 'MIMA' TabDess 'TITR' TitDess 'TITX' 't (an)' 'TITY'
  983. 'mol/l/an' 'LEGE' 'AXES' 'XBOR' TIni TFin;
  984. FINSI;
  985.  
  986. * ===========================
  987. * | TEST DE BON DEROULEMENT |
  988. * ===========================
  989. * Le test se fait en comparant le flux total traversant la ligne avec
  990. * une liste obtenue par un calcul préalable.
  991. liflsav = 'PROG' .30290 .58543 .78354 .92082 1.0185 1.0894 1.0285
  992. .86475 .69182 .54609 ;
  993.  
  994. *'LISTE' lifl ;
  995.  
  996. err1 = 'MAXIMUM' ('ABS' (lifl - liflsav)) / ('MAXIMUM' liflsav);
  997. mess 'Erreur = ' err1 ;
  998.  
  999. si (err1 > CRIT1);
  1000. 'ERREUR' 5;
  1001. sinon;
  1002. 'ERREUR' 0;
  1003. finsi;
  1004.  
  1005. Fin;
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  

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