Télécharger trangeol.procedur

Retour à la liste

Numérotation des lignes :

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

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