Télécharger trangeol.procedur

Retour à la liste

Numérotation des lignes :

  1. * TRANGEOL PROCEDUR GBM 07/08/08 21:15:06 5841
  2. * TRANGEOL PROCEDUR GBM 02/10/15 21:15:06 2149
  3. 'DEBPROC' TRANGEOL MoDARCY*'MMODEL' TRANS1*'TABLE' TRANS2/'TABLE' ;
  4.  
  5. *---------------------------------------------------------------------
  6. *------------------- Gestion de la réinitialisation ------------------
  7. *---------------------------------------------------------------------
  8.  
  9. * on reinitialise les calculs en l'absence de la table trans2
  10. * qui contient tous les objets de préconditionnement, ou si
  11. * l'indice INITIALI dans trans1 est VRAI.
  12. * Il est mis à FAUX à la fin de la procédure.
  13. REINIT = VRAI ;
  14. 'SI' ('EXISTE' trans1 'INITIALI') ;
  15. REINIT = trans1 . 'INITIALI' ;
  16. 'FINSI' ;
  17.  
  18. * En l'absence de table de préconditionnement
  19. * Il faut reinitialiser les calculs. On écrase la valeur donnée
  20. * éventuellement par l'indice INITIALI.
  21. 'SI' ('NON' (EXISTE trans2)) ;
  22. REINIT = VRAI ;
  23. 'FINSI' ;
  24.  
  25. CHTR = FAUX ;
  26. 'SI' ('EXISTE' trans1 'CHIMIETRANSPORT') ;
  27. CHTR = trans1 . 'CHIMIETRANSPORT' ;
  28. 'FINSI' ;
  29.  
  30.  
  31.  
  32.  
  33. *---------------------------------------------------------------------
  34. *------------------- Gestion des entrées obligatoires ----------------
  35. *---------------------------------------------------------------------
  36.  
  37.  
  38. Cini = TRANS1 . 'CONCENTRATION' ;
  39. LMLump = TRANS1 . 'LUMP' ;
  40. discreti = TRANS1 . 'TYPDISCRETISATION' ;
  41. TetaDiff = TRANS1 . 'THETA_DIFFUSION' ;
  42. TetaConv = TRANS1 . 'THETA_CONVECTION' ;
  43. DECENTR = TRANS1 . 'DECENTREMENT' ;
  44. DeltaT = TRANS1 . 'DELTAT' ;
  45. MateDiff = TRANS1 . 'DIFFUSIVITE' ;
  46. Porosite = TRANS1 . 'POROSITE' ;
  47.  
  48. tetalin = tetadiff ;
  49.  
  50.  
  51. *---------------------------------------------------------------------
  52. *------------------- Gestion des entrées optionnelles ----------------
  53. *---------------------------------------------------------------------
  54.  
  55.  
  56. ************* relcalcul général des discrétisations ***********
  57.  
  58.  
  59. 'SI' ('EXISTE' TRANS1 'RECALCUL') ;
  60. recalc = TRANS1 . 'RECALCUL' ;
  61. 'SI' (recalc) ;
  62. TABMODI = TABLE ;
  63. TABMODI . 'POROSITE' = VRAI ;
  64. TABMODI . 'CONVECTI' = VRAI ;
  65. TABMODI . 'DELTAT' = VRAI ;
  66. TABMODI . 'COEF_LIN' = VRAI ;
  67. TABMODI . 'DIFFUSIV' = VRAI ;
  68. 'SINON' ;
  69. TABMODI = TABLE ;
  70. TABMODI . 'POROSITE' = FAUX ;
  71. TABMODI . 'CONVECTI' = FAUX ;
  72. TABMODI . 'DELTAT' = FAUX ;
  73. TABMODI . 'COEF_LIN' = FAUX ;
  74. TABMODI . 'DIFFUSIV' = FAUX ;
  75. 'FINSI' ;
  76. 'SINON' ;
  77. 'SI' ('EXISTE' TRANS1 'MODIFICATI') ;
  78. * table plus détaillée de modification, n'est pas lue si RECALCUL
  79. * est donné
  80. TABMODI = TRANS1 . 'MODIFICATI' ;
  81. 'SINON' ;
  82. TABMODI = TABLE ;
  83. TABMODI . 'POROSITE' = FAUX ;
  84. TABMODI . 'CONVECTI' = FAUX ;
  85. TABMODI . 'DELTAT' = FAUX ;
  86. TABMODI . 'COEF_LIN' = FAUX ;
  87. TABMODI . 'DIFFUSIV' = FAUX ;
  88. 'FINSI' ;
  89. 'FINSI' ;
  90.  
  91.  
  92.  
  93.  
  94. **************** solveur ****************
  95.  
  96. 'SI' (REINIT) ;
  97. * IL faut initialiser la matrice des options de résolution
  98. 'SI' ('EXISTE' TRANS1 'METHINV') ;
  99. dumm = 'INDEX' (TRANS1 . 'METHINV') ;
  100. OPTRES = 'TABLE' METHINV ;
  101. 'REPETER' bou1 (('DIME' dumm) '-' 1) ;
  102. OPTRES . (mot dumm . (&bou1 '+' 1))
  103. = TRANS1 . 'METHINV' . (mot dumm . (&bou1 '+' 1)) ;
  104. 'FIN' bou1 ;
  105. 'SINON' ;
  106. OPTRES = TABLE 'METHINV' ;
  107. 'FINSI' ;
  108. * On surcharges les options de résolution
  109. 'SI' ('EXISTE' TRANS1 'SOLVEUR') ;
  110. OPTRES . 'TYPINV' = TRANS1 . 'SOLVEUR' ;
  111. 'FINSI' ;
  112. 'SI' ('EXISTE' TRANS1 'PRECONDITIONNEUR') ;
  113. OPTRES . 'PRECOND' = TRANS1 . 'PRECONDITIONNEUR' ;
  114. 'FINSI' ;
  115. 'SI' ('EXISTE' TRANS1 'MAXITER') ;
  116. OPTRES . 'NITMAX' = TRANS1 . 'MAXITER' ;
  117. 'FINSI' ;
  118. 'SI' ('EXISTE' TRANS1 'EPSILON') ;
  119. OPTRES . 'RESID' = TRANS1 . 'EPSILON' ;
  120. 'FINSI' ;
  121.  
  122.  
  123. 'SINON' ;
  124. 'SI' ('EXISTE' TRANS2) ;
  125. * obligatoires
  126. OPTRES = TRANS2 . 'METHINV' ;
  127. 'FINSI' ;
  128. 'FINSI' ;
  129.  
  130.  
  131. * On stocke le peclet dans optresol , a changer + tard
  132.  
  133. SI (EXISTE TRANS1 'NUM_PECLET') ;
  134. OPTRES . 'PECLET' = TRANS1 . 'NUM_PECLET' ;
  135. SINON ;
  136. OPTRES . 'PECLET' = 2.D0 ;
  137. FINSI ;
  138.  
  139.  
  140.  
  141. *************** source ******************
  142.  
  143. 'SI' ('EXISTE' TRANS1 'SOURCE') ;
  144. chpsour = 'COPIER' TRANS1 . 'SOURCE' ;
  145. 'SINON' ;
  146. * source mise à 0 sur le domaine avec les noms de composantes de
  147. * l'inconnue cini. Il vaut mieux faire cette opération en amont
  148. * et transmettre un terme source nul à l'indice SOURCE. Moins cher.
  149. ChPSour = 0.D0 * cini ;
  150. 'FINSI' ;
  151.  
  152.  
  153. ************** convection ***************
  154.  
  155. 'SI' ('EXISTE' TRANS1 'CONVECTION') ;
  156. vitesse = TRANS1 . 'CONVECTION' ;
  157. LCONV = VRAI ;
  158. * Calcul du flux de vitesse pour les EFMH
  159. 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'EFMH')) ;
  160. * utilisation des préconditionnements
  161. 'SI' ('EXISTE' TRANS2) ;
  162. * On cherche l'existance d'un préconditionnement sur le flux
  163. * convectif
  164. 'SI' ('EXISTE' TRANS2 'DEBITFACE') ;
  165. QFACE = TRANS2 . 'DEBITFACE' ;
  166. 'SINON' ;
  167. * Le préconditionnement est absent. Cela peut être dû à
  168. * un calcul où l'on fait apparaître pour la première fois
  169. * une vitesse après plusieurs appels à transgeol
  170. * On calcule le flux
  171. QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ;
  172. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  173. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  174. ('EXTRAIRE' NORMALES 'COMP') ;
  175. 'DETRUIT' QFACE ;
  176. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  177. 'DETRUIT' QFACE1 ;
  178. 'FINSI' ;
  179. 'SINON' ;
  180. QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ;
  181. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  182. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  183. ('EXTRAIRE' NORMALES 'COMP') ;
  184. 'DETRUIT' QFACE ;
  185. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  186. 'DETRUIT' QFACE1 ;
  187. 'FINSI' ;
  188. 'FINSI' ;
  189. 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'VF')) ;
  190. * utilisation des préconditionnements
  191. 'SI' ('EXISTE' TRANS2) ;
  192. * On cherche l'existance d'un préconditionnement sur le flux
  193. * convectif
  194. 'SI' ('EXISTE' TRANS2 'DEBITFACE') ;
  195. QFACE = TRANS2 . 'DEBITFACE' ;
  196. 'SINON' ;
  197. * Le préconditionnement est absent. Cela peut être dû à
  198. * un calcul où l'on fait apparaître pour la première fois
  199. * une vitesse après plusieurs appels à transgeol
  200. * On calcule le flux
  201. QFACE = vitesse ;
  202. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  203. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  204. ('EXTRAIRE' NORMALES 'COMP') ;
  205. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  206. 'DETRUIT' QFACE1 ;
  207. 'FINSI' ;
  208. 'SINON' ;
  209. QFACE = vitesse ;
  210. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  211. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  212. ('EXTRAIRE' NORMALES 'COMP') ;
  213. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  214. 'DETRUIT' QFACE1 ;
  215. 'FINSI' ;
  216. 'FINSI' ;
  217. 'SI' (REINIT 'ET' ('EGA' discreti 'EFMH')) ;
  218. * réinitialisation, cela signifie possibilité d'une nouvelle vitesse
  219. QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ;
  220. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  221. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  222. ('EXTRAIRE' NORMALES 'COMP') ;
  223. 'DETRUIT' QFACE ;
  224. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  225. 'DETRUIT' QFACE1 ;
  226. 'FINSI' ;
  227. 'SI' (REINIT 'ET' ('EGA' discreti 'VF')) ;
  228. * réinitialisation, cela signifie possibilité d'une nouvelle vitesse
  229. QFACE = vitesse ;
  230. NORMALES = 'DOMA' Modarcy 'NORMALE' ;
  231. QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP')
  232. ('EXTRAIRE' NORMALES 'COMP') ;
  233. QFACE = 'NOMC' 'FLUX' QFACE1 ;
  234. 'DETRUIT' QFACE1 ;
  235. 'FINSI' ;
  236. 'SINON' ;
  237. LCONV = FAUX ;
  238. 'FINSI' ;
  239.  
  240.  
  241. * Si il y a une convection, on attend également une
  242. * vitesse aux centres pour le calcul de la dispersivité ou du decentrt
  243.  
  244. LDISPERS = FAUX ;
  245. 'SI' (LCONV) ;
  246. 'SI' (DECENTR) ;
  247. vitelem = TRANS1 . 'VITELEM' ;
  248. 'FINSI' ;
  249. 'SI' ('EXISTE' TRANS1 'ALPHAL') ;
  250. DISPL = TRANS1 . 'ALPHAL' ;
  251. DISPT = TRANS1 . 'ALPHAT' ;
  252. vitelem = TRANS1 . 'VITELEM' ;
  253. LDISPERS = VRAI ;
  254. 'FINSI' ;
  255. 'FINSI' ;
  256.  
  257.  
  258. * On charge les conditions aux limites
  259.  
  260.  
  261. CHCLIM = TRANS1 . 'CLIMITES' ;
  262.  
  263.  
  264. *---------------------------------------------------------------------
  265. *-------- On teste la nécessité de faire un calcul -------------------
  266. *---------------------------------------------------------------------
  267.  
  268. ************* OPtion d'abandon des calculs *********************
  269.  
  270. 'SI' ('EXISTE' TRANS1 'ABANDON') ;
  271. * si limcalc VRAI on teste si la concentration, les sources et flux
  272. * * deltat sont inférieurs à 10**-15. Si oui on ne calcule plus
  273. * les opérateurs de convections diffusion. Les résultats sont donc
  274. * éventuellement erronés (mais là ou les valeurs sont sans intéret)
  275. * âr contre on conserve la masse (bien que négligeable). Ce point
  276. * est peut etre inutile.
  277. limcalc = TRANS1 . 'ABANDON' ;
  278. seuilc = TRANS1 . 'SEUILCALC' ;
  279. SINON ;
  280. limcalc = FAUX ;
  281. FINSI ;
  282.  
  283. SIMPLIF = FAUX ;
  284. * modif depuis le dernier appel
  285. ilyamod = TABMODI . 'POROSITE' 'OU' TABMODI . 'CONVECTI' 'OU'
  286. TABMODI . 'DELTAT' 'OU' TABMODI . 'COEF_LIN' 'OU'
  287. TABMODI . 'DIFFUSIV' ;
  288. * simplification uniquement si pas de modif depuis dernier appel
  289. 'SI' (limcalc 'ET' ('NON' ilyamod)) ;
  290. * on souhaite faire un calcul avec éventuelle simplification
  291. SIMPLIF = VRAI ;
  292.  
  293. lim1 = 'MAXIMUM' ('ABS' cini) ;
  294. 'SI' (lim1 < seuilc) ;
  295. * le terme source n'engendre pas de variations de concentration > 1.D-16
  296. * par pas de temps
  297. VOLL = 'KOPS' (DOMA modarcy VOLUME) * porosite ;
  298. VOL1 = VOLL '/' deltat ;
  299. 'DETRUIT' VOLL ;
  300. VOL2 = 'KOPS' chpsour / VOL1 ;
  301. limmm = 'ABS' VOL2 ;
  302. 'DETRUIT' VOL2 ;
  303. lim1 = 'MAXIMUM' limmm ;
  304. 'DETRUIT' limmm ;
  305. VOL2 = 'MINIMUM' VOL1 ;
  306. 'DETRUIT' VOL1 ;
  307. * 'MESSAGE' 'maxsour' lim1 ;
  308. 'SI' (lim1 < (seuilc / 10.D0)) ;
  309. * idem flux diffusif on le teste là car on ne va pas plus loin
  310. * si le test précédent est faux
  311. 'SI' ('EXISTE' CHCLIM 'NEUMANN') ;
  312. CLFLUX = CHCLIM . 'NEUMANN' ;
  313. limm = clflux '/' VOL2 ;
  314. limmm = 'ABS' limm ;
  315. 'DETRUIT' limm ;
  316. lim1 = 'MAXIMUM' limmm ;
  317. 'DETRUIT' limmm ;
  318. * 'MESSAGE' 'maxfluneum' lim1 ;
  319. 'SI' (lim1 > (seuilc / 10.D0)) ;
  320. SIMPLIF = FAUX ;
  321. 'FINSI' ;
  322. 'FINSI' ;
  323. 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ;
  324. CLFLUX = CHCLIM . 'FLUTOTAL' ;
  325. limm = clflux '/' VOL2 ;
  326. limmm = 'ABS' limm ;
  327. 'DETRUIT' limm ;
  328. lim1 = 'MAXIMUM' limmm ;
  329. 'DETRUIT' limmm ;
  330. * 'MESSAGE' 'maxflutot' lim1 ;
  331. 'SI' (lim1 > (seuilc / 10.D0)) ;
  332. SIMPLIF = FAUX ;
  333. 'FINSI' ;
  334. 'FINSI' ;
  335. 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ;
  336. CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ;
  337. limm = clflux '/' VOL2 ;
  338. limmm = 'ABS' limm ;
  339. 'DETRUIT' limm ;
  340. lim1 = 'MAXIMUM' limmm ;
  341. 'DETRUIT' limmm ;
  342. * 'MESSAGE' 'maxflutot' lim1 ;
  343. 'SI' (lim1 > (seuilc / 10.D0)) ;
  344. SIMPLIF = FAUX ;
  345. 'FINSI' ;
  346. 'FINSI' ;
  347. 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ;
  348. lim1 = 'MAXIMUM' ('ABS' CHCLIM . 'DIRICHLET') ;
  349. 'SI' (lim1 > (seuilc / 10.D0)) ;
  350. SIMPLIF = FAUX ;
  351. 'FINSI' ;
  352. 'FINSI' ;
  353. 'SINON' ;
  354. SIMPLIF = FAUX ;
  355. 'FINSI' ;
  356. 'SINON' ;
  357. SIMPLIF = FAUX ;
  358. 'FINSI' ;
  359. 'FINSI' ;
  360.  
  361. * on ne procede pas aux simplification en cas de reinitialisation
  362. * car les objets preconditionnés ne seraient pas crées
  363. SIMPLIF = SIMPLIF 'ET' ('NON' reinit) ;
  364. *'MESSAGE' 'SIMPLIF'; list simplif;
  365.  
  366. * Calcul simplifié - on sort 0 pour l'instant
  367. 'SI' (SIMPLIF) ;
  368. cfin = 0.D0 * cini ;
  369. ncompo = dime ('EXTRAIRE' cini 'COMP') ;
  370. cflu = 'MANU' 'CHPO' ('DOMA' modarcy 'FACE')
  371. ('EXTRAIRE' ('EXTRAIRE' cini 'COMP') 1) 0.D0 ;
  372. 'SI' (ncompo > 1) ;
  373. repe blocc (ncompo-1) ;
  374. cflu = cflu et 'MANU' 'CHPO' ('DOMA' modarcy 'FACE')
  375. ('EXTRAIRE' ('EXTRAIRE' cini 'COMP')
  376. (&blocc + 1)) 0.D0 ;
  377. fin blocc ;
  378. 'FINSI' ;
  379. cfluco = cflu ;
  380. 'SINON' ;
  381.  
  382. *---------------------------------------------------------------------
  383. *-------------- Gestion des entrées PRECONDITIONNEMENT ---------------
  384. *---------------------------------------------------------------------
  385.  
  386.  
  387. *
  388. * Lecture des indices de trans2 - exceptés debitface et solveur
  389. *
  390. 'SI' ('NON' REINIT) ;
  391. 'SI' ('EXISTE' TRANS2) ;
  392. * obligatoires
  393. mattt = TRANS2 . 'MATRITOTAL' ;
  394. nomespec = TRANS2 . 'NOM_ESPECE' ;
  395. nbespece = TRANS2 . 'NB_ESPECES' ;
  396. nbsource = TRANS2 . 'NB_SOURCES' ;
  397. Diffdisp = TRANS2 . 'DIFFDISP' ;
  398. * optionnel EFMH dep
  399. 'SI' ('EGA' discreti 'EFMH') ;
  400. TbDarTra = TRANS2 . 'TABDARCYTR' ;
  401. MatMaEFM = TRANS2 . 'MATMASEFMH' ;
  402. Tcini = TRANS2 . 'TRACE_CONC' ;
  403. 'FINSI' ;
  404. 'SI' ('EGA' discreti 'VF') ;
  405. Mctot = TRANS2 . 'COEFTOT' ;
  406. Mdiff = TRANS2 . 'COEFDIF' ;
  407. Jaco = TRANS2 . 'JACOBIEN' ;
  408. Matot = TRANS2 . 'MATDIS' ;
  409. Mpor = TRANS2 . 'MPOROS' ;
  410. RESIP = TRANS2 . 'RESIDU' ;
  411. 'FINSI' ;
  412. 'FINSI' ;
  413. 'FINSI' ;
  414.  
  415.  
  416.  
  417.  
  418.  
  419. ********************************************************************
  420. ************** traitement chargements VF ***************************
  421. ********************************************************************
  422.  
  423.  
  424. *************** source ******************
  425.  
  426. 'SI' ('EXISTE' TRANS1 'SOURCE') ;
  427.  
  428. * 'MESSAGE' 'maxisour' ('MAXIMUM' ('ABS' TRANS1 . 'SOURCE')) ;
  429.  
  430. 'SI' ('EGA' discreti 'VF') ;
  431. zozo = ('REDU' ('DOMA' MODARCY VOLUME)
  432. ('EXTRAIRE' chpsour MAILLAGE)) ;
  433. zeze = 'NOMC' 'SCAL' zozo ;
  434. 'DETRUIT' zozo ;
  435. zaza = 'COPIER' chpsour ;
  436. 'DETRUIT' chpsour ;
  437. ChPSour = zaza '/' zeze ;
  438. 'DETRUIT' zaza ;
  439. 'DETRUIT' zeze ;
  440. 'FINSI' ;
  441. 'FINSI' ;
  442.  
  443. ************ Conditions limites **************************************
  444.  
  445. 'SI' ('EGA' discreti 'VF') ;
  446. * flux diffusif
  447. 'SI' ('EXISTE' CHCLIM 'NEUMANN') ;
  448. CLFLUX = CHCLIM . 'NEUMANN' ;
  449. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  450. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  451. zuzu = 'NOMC' 'SCAL' zozo ;
  452. 'DETRUIT' zozo ;
  453. CLFLUX = CLFLUX '/' zuzu ;
  454. 'DETRUIT' zuzu ;
  455. 'DETRUIT' (CHCLIM . 'NEUMANN') ;
  456. CHCLIM . 'NEUMANN' = CLFLUX ;
  457. 'FINSI' ;
  458. * flux mixte
  459. 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ;
  460. CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ;
  461. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  462. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  463. zuzu = 'NOMC' 'SCAL' zozo ;
  464. 'DETRUIT' zozo ;
  465. CLFLUX = CLFLUX '/' zuzu ;
  466. 'DETRUIT' zuzu ;
  467. 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ;
  468. CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ;
  469. 'FINSI' ;
  470. * Flux total
  471. 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ;
  472. CLFLUX = CHCLIM . 'FLUTOTAL' ;
  473. * MESS 'CLFLUX' ; LIST CLFLUX;
  474. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  475. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  476. zuzu = 'NOMC' 'SCAL' zozo ;
  477. 'DETRUIT' zozo ;
  478. CLFLUX = CLFLUX '/' zuzu ;
  479. 'DETRUIT' zuzu ;
  480. * VERRUE
  481. 'DETRUIT' (CHCLIM . 'FLUTOTAL') ;
  482. CHCLIM . 'FLUTOTAL' = CLFLUX ;
  483. * MESS 'CLFLUXTRA' ; LIST CLFLUX;
  484. 'FINSI' ;
  485. 'FINSI' ;
  486.  
  487.  
  488. * 'MESSAGE' 'DELTAT' deltat;
  489. * 'MESSAGE' 'chpsour' ('MAXIMUM' ('ABS' chpsour));
  490. *---------------------------------------------------------------------
  491. *-------- On initialise les calculs lors d'un premier appel ----------
  492. *---------------------------------------------------------------------
  493.  
  494. 'SI' ('EGA' discreti 'EFMH') ;
  495. 'SI' (REINIT) ;
  496.  
  497. * EFMH
  498. * On appelle la procédure d'initialisation
  499. 'SI' (LCONV) ;
  500. * présence de convection
  501.  
  502. * virer le TABMODI DE SORTIE inutile ???????????????
  503. 'SI' ('NON' LDISPERS) ;
  504. * pas de dispersivité
  505. 'SI' (DECENTR) ;
  506. smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource
  507. Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY
  508. Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv
  509. TetaLin QFACE vitelem LMLump DECENTR CHCLIM OPTRES ;
  510. 'SINON' ;
  511. smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource
  512. Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY
  513. Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv
  514. TetaLin QFACE LMLump DECENTR CHCLIM OPTRES ;
  515. 'FINSI' ;
  516. 'SINON' ;
  517. * présence de dispersivité
  518. smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource
  519. Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY
  520. Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv
  521. TetaLin QFACE vitelem displ dispt LMLump DECENTR CHCLIM OPTRES;
  522. 'FINSI' ;
  523. 'SINON' ;
  524. smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource
  525. Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY
  526. Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv
  527. TetaLin LMLump DECENTR CHCLIM OPTRES ;
  528. 'FINSI' ;
  529.  
  530.  
  531. *---------------------------------------------------------------------
  532. *---------- On update les calculs lors d'appels suivants -------------
  533. *---------------------------------------------------------------------
  534.  
  535.  
  536. 'SINON' ;
  537.  
  538. * GBM il faudra prendre en compte conv variable et sortir Diffdisp
  539.  
  540. * On appelle la procédure d'update
  541. 'SI' (LCONV) ;
  542. SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH
  543. * MoDARCY Porosite MateDiff difftot ChPSour
  544. MoDARCY Porosite Matediff diffdisp ChPSour
  545. cini tcini deltat Qface nomespec nbespece nbsource
  546. LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ;
  547. 'SINON' ;
  548. SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH
  549. * MoDARCY Porosite MateDiff difftot ChPSour
  550. MoDARCY Porosite Matediff diffdisp ChPSour
  551. cini tcini deltat nomespec nbespece nbsource
  552. LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ;
  553. 'FINSI' ;
  554. 'FINSI' ;
  555.  
  556.  
  557. *---------------------------------------------------------------------
  558. *------------- On appelle la procédure de résolution ----------------
  559. *---------------------------------------------------------------------
  560.  
  561.  
  562.  
  563. 'SI' (LCONV) ;
  564. matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM
  565. Mattt SMTR Tcini cini Qface nomespec nbespece nbsource OPTRES
  566. tbdartra CHCLIM ;
  567. 'SINON' ;
  568. matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM
  569. Mattt SMTR Tcini cini nomespec nbespece nbsource OPTRES tbdartra
  570. CHCLIM ;
  571. 'FINSI' ;
  572.  
  573.  
  574. 'SINON' ;
  575. 'SI' ('EGA' discreti 'VF') ;
  576. 'SI' ('NON' LCONV) ;
  577. QFACE MA = 'KOPS' 'MATRIK' ;
  578. 'FINSI' ;
  579. 'SI' (REINIT) ;
  580.  
  581. 'SI' ('NON' LDISPERS) ;
  582.  
  583. SMTr Mattt JACO Mpor Mctot Mdiff diffdisp difftot
  584. nomespec nbespece nbsource OPTRES TABMODI Nouvmat =
  585. INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini
  586. TetaDiff TetaConv TetaLin QFACE CHCLIM OPTRES LCONV ;
  587. 'SINON' ;
  588. SMtr Mattt JACO Mpor Mctot Mdiff diffdisp difftot
  589. nomespec nbespece nbsource OPTRES TABMODI Nouvmat =
  590. INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini
  591. TetaDiff TetaConv TetaLin QFACE vitelem displ dispt
  592. CHCLIM OPTRES LCONV ;
  593. 'FINSI' ;
  594. * RESIDU INTERVENANT POUR ORDRE 2 ENTEMPS
  595. RESIP = SMtr ;
  596. *---------------------------------------------------------------------
  597. *---------- On update les calculs lors d'appels suivants -------------
  598. *---------------------------------------------------------------------
  599.  
  600.  
  601. 'SINON' ;
  602. SMTr Mattt Difftot Mctot Mdiff Nouvmat = UPDAVF
  603. MoDARCY Porosite Matediff Diffdisp ChPSour
  604. DeltaT Cini TetaDiff TetaConv
  605. Qface nomespec nbespece nbsource
  606. Mattt Jaco Mctot Mdiff Mpor TABMODI CHCLIM LCONV ;
  607. 'FINSI' ;
  608.  
  609.  
  610. *---------------------------------------------------------------------
  611. *------------- On appelle la procédure de résolution ----------------
  612. *---------------------------------------------------------------------
  613.  
  614. matsor TABRES cfin cflu cfluco RESI = SOLVVF MoDARCY
  615. ChPSour Mattt Smtr Cini Mctot Mdiff Difftot
  616. RESIP Tetadiff Qface nomespec nbespece
  617. nbsource OPTRES CHCLIM Nouvmat LCONV CHTR ;
  618. 'FINSI' ;
  619.  
  620. 'FINSI' ;
  621.  
  622. 'SI' ('EGA' discreti 'VF') ;
  623. * flux diffusif
  624. 'SI' ('EXISTE' CHCLIM 'NEUMANN') ;
  625. CLFLUX = CHCLIM . 'NEUMANN' ;
  626. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  627. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  628. zuzu = 'NOMC' 'SCAL' zozo ;
  629. 'DETRUIT' zozo ;
  630. CLFLUX = CLFLUX '*' zuzu ;
  631. 'DETRUIT' zuzu ;
  632. 'DETRUIT' (CHCLIM . 'NEUMANN') ;
  633. CHCLIM . 'NEUMANN' = CLFLUX ;
  634. 'FINSI' ;
  635. * flux mixte
  636. 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ;
  637. CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ;
  638. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  639. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  640. zuzu = 'NOMC' 'SCAL' zozo ;
  641. 'DETRUIT' zozo ;
  642. CLFLUX = CLFLUX '*' zuzu ;
  643. 'DETRUIT' zuzu ;
  644. 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ;
  645. CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ;
  646. 'FINSI' ;
  647. * Flux total
  648. 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ;
  649. CLFLUX = CHCLIM . 'FLUTOTAL' ;
  650. * MESS 'CLFLUX' ; LIST CLFLUX ;
  651. zozo = 'REDU' ('DOMA' MODARCY SURFACE)
  652. ('EXTRAIRE' CLFLUX MAILLAGE) ;
  653. zuzu = 'NOMC' 'SCAL' zozo ;
  654. 'DETRUIT' zozo ;
  655. CLFLUX = CLFLUX '*' zuzu ;
  656. 'DETRUIT' zuzu ;
  657. * VERRUE
  658. 'DETRUIT' (CHCLIM . 'FLUTOTAL') ;
  659. CHCLIM . 'FLUTOTAL' = CLFLUX ;
  660. * MESS 'CLFLUXTRA' ; LIST CLFLUX;
  661. 'FINSI' ;
  662. 'FINSI' ;
  663. 'FINSI' ;
  664.  
  665. ***********************************************************************
  666. * ON VIENT DE SORTIR DE LA BOUCLE DE
  667. * CALCULS NON SIMPLIFIES, IE DISCRETISES
  668. ***********************************************************************
  669.  
  670.  
  671. *---------------------------------------------------------------------
  672. *---------- On gère les objets de préconditionnement sortant ---------
  673. *---------------------------------------------------------------------
  674.  
  675. * Ces objets ne sont pas censés être modifiés par l'utilisateurs.
  676. * Ce sont des objets intermédiaires permettant de réduire les temps
  677. * de calcul lors d'appels successifs de TRANSGEOL sur un meme probleme.
  678. * La trace de concentration est stockée ici car c'est également un
  679. * objet intermédiaire.
  680.  
  681. SI (SIMPLIF) ;
  682. * Pas de modif de resé dans le cas d'un calcul simplifié
  683. RES2 = TRANS2 ;
  684. SINON ;
  685.  
  686. RES2 = TABLE 'PRECONDI' ;
  687. RES2 . 'MATRITOTAL' = matsor ;
  688. RES2 . 'NOM_ESPECE' = nomespec ;
  689. RES2 . 'NB_ESPECES' = nbespece ;
  690. RES2 . 'NB_SOURCES' = nbsource ;
  691. RES2 . 'METHINV' = TABRES ;
  692. RES2 . 'DIFFDISP' = Diffdisp ;
  693. * optionnel phys dépendant ou EFMH dep
  694. 'SI' ('EGA' discreti 'EFMH') ;
  695. RES2 . 'MATMASEFMH' = MatMaEFM ;
  696. RES2 . 'TRACE_CONC' = Tcfin ;
  697. SI (LCONV) ;
  698. RES2 . 'DEBITFACE' = Qface ;
  699. FINSI ;
  700. RES2 . 'TABDARCYTR' = TbDarTra ;
  701. 'FINSI' ;
  702. 'SI' ('EGA' discreti 'VF') ;
  703. RES2 . 'COEFTOT' = Mctot ;
  704. RES2 . 'COEFDIF' = Mdiff ;
  705. RES2 . 'JACOBIEN' = Jaco ;
  706. RES2 . 'MATDIS' = Mattt ;
  707. RES2 . 'MPOROS' = Mpor ;
  708. RES2 . 'RESIDU' = RESI ;
  709. 'FINSI' ;
  710. 'FINSI' ;
  711.  
  712. *---------------------------------------------------------------------
  713. *---------------------- On crée la table de résultats ---------------
  714. *---------------------------------------------------------------------
  715.  
  716. *RES1 = TABLE 'TRANSPGEOL' ;
  717. RES1 = TABLE ;
  718.  
  719. *
  720. * Recopie de la table trans1, Les valeurs modifiées par TRANSGEOL
  721. * seront écrasées dans RES1. TRANS1 n'est pas modifiée. Les objets
  722. * inchangés ne sont pas recopiés (seulement les pointeurs).
  723. *
  724.  
  725. dumm = 'INDEX' TRANS1 ;
  726. *'REPETER' bou1 (('DIME' dumm) '-' 1) ;
  727. * RES1 . (mot dumm . (&bou1 '+' 1)) = TRANS1 . (mot dumm . (&bou1
  728. * '+' 1)) ;
  729. * list res1;
  730. *'FIN' bou1 ;
  731. 'REPETER' bou1 (('DIME' dumm)) ;
  732. RES1 . (mot dumm . (&bou1)) = TRANS1 . (mot dumm . (&bou1)) ;
  733. 'FIN' bou1 ;
  734.  
  735. * On stocke la concentration calculée
  736.  
  737. RES1 . 'CONCENTRATION' = CFIN ;
  738. *MESS 'CFIN'; LIST CFIN;
  739. *'MESSAGE' (cfin 'MINIMUM') '<'m_charge'<' (cfin 'MAXIMUM' );
  740. * On stocke le flux diffusif aux faces
  741. RES1 . 'FLUXDIFF' = CFLU ;
  742. *'MESSAGE' (CFLU 'MINIMUM') '<CFLU<' (CFLU 'MAXIMUM' );
  743. * On stocke le flux convectif aux faces
  744. RES1 . 'FLUXCONV' = CFLUCO ;
  745. *'MESSAGE' (CFLUCO 'MINIMUM') '<CFLUCO<' (CFLUCO 'MAXIMUM' );
  746. * Par défaut pas de réinitialisation en cas d'appels suivants
  747. RES1 . 'INITIALI' = FAUX ;
  748. * Mettre un indice de recalcul des traces, cini modif ?????????
  749. * RES1 . 'CINIMODIF' = FAUX;
  750.  
  751. 'DETRUIT' chpsour ;
  752.  
  753. 'FINPROC' RES1 RES2 ;
  754.  
  755.  
  756.  

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