Télécharger satnsathoriz.dgibi
* fichier : satnsathoriz.dgibi GRAPH = FAUX ; ******************************************** DEBPROC HHT_pro H1*FLOTTANT ; T1 = H1 * BET ** N + 1. ** m * TSR + TR ; FINPROC T1 ; ******************************************** ******************************************** DEBPROC KKR_pro H0*FLOTTANT ; *K0 = H0 * ALF EXP * KS ; tt = HHT_PRO H0; K0 = (tt '-' tr) '/' TSR ** ALF * KS ; FINPROC K0 ; ******************************************** ******************************************** DEBPROC TH_pro T1*FLOTTANT ; H1 = T1 - TR / TSR ** M1 - 1. ** N1 / BET ; FINPROC H1 ; ******************************************** ******************************************** DEBPROC DHDT_pro H1*FLOTTANT T1*FLOTTANT ; MESS 'Pour Frederic DEBUT'; MESS 'MOINSN' MOINSN; MESS ' '; MESS 'Il y a la une puissance negative FLOTTANT d un '; DHDT0 = BET*H1 ** MOINSN + 1. * H1 / (T1 - TR) * N1 * M1 ; *MESS 'DHDT0' DHDT0; DHDT0 = 1./BET *N1*M1*1./(TSR) * (((T1 - TR / TSR) ** M1 - 1.) ** (N1 - 1.)) *((T1 - TR / TSR) ** (M1 - 1.)) ; *MESS 'DHDT0' DHDT0; FINPROC DHDT0 ; ******************************************** ******************************************** DEBPROC KINPHI int00*FLOTTANT ; phi0 = 0. ; mess 'int00' int00; phit = (2* KS * PSI0) / (DT * int00) ; 'MESS' 'phit' phit ; * phi0 = 1.15; phi0 = phit; int0 = int00 - (phi0/2.); ; repeter b1 (nb-1 ); phi0 = (2. * d0 / int0) + phi0 ; int0 = int0 - phi0 ; fin b1 ; phi0 = 2. * d0 / iNT0 + phi0 ; * list phi_p0 ; * list int_p0 ; MESS 'PNM' PNM1 ; MESS 'int' int ; FINPROC phi_p0 Int_p0 ; ******************************************** ******************************************** DT = T00 - TN0 / NB0 ; SI (EGA MO1 DEMI ) ; T = T00 - (dt*0.5) ; H = TH_pro T ; K = KKR_pro H ; DHDT = DHDT_pro H T ; D = K*DHDT ; C = 1./DHDT ; T = T - DT ; SINON ; T = T00 ; H = TH_pro T ; K = KKR_pro H ; DHDT = DHDT_pro H T ; D = K*DHDT ; C = 1./DHDT ; T = T - DT ; FINSI; repe b0 nb0 ; H = TH_pro T ; K = KKR_pro H ; DHDT = DHDT_pro H T ; D = K*DHDT ; C = 1./DHDT ; T = T - DT ; FIN B0 ; FINPROC h_pr0 K_pr0 D_pr0 C_pr0 T_pr0 ; ******************************************** ******************************************** DEBPROC A x*FLOTTANT ; si (x < 2.9 ) ; X2 = (-1.)*X*X ; sinon ; X2 = X ** (-2.) * -0.5 ; A0 = 108830.*X2+8162.*X2+706.*X2+74.*X2+10.*X2+2.*X2+1.; *A0 = 8162.*X2+706.*X2+74.*X2+10.*X2+2.*X2+1.; *A0 = 706.*X2+74.*X2+10.*X2+2.*X2+1.; *A0 = 74.*X2+10.*X2+2.*X2+1.; FINSI ; FINPROC A0 ; ******************************************** ******************************************** DEBPROC INTN phi*LISTREEL ; XX = PNM1 * 0.5D0 * (DD0 ** -0.5D0) ; IC0 = PNM1*0.5D0 + (2.D0*DD0/PNM1*(A XX)) ; FINPROC IC0 ; ******************************************** 'DEBPROC' CALPHILI ; h_prog K_prog D_prog C_prog T_prog = KPROG T0 TN NB 'TOTA'; mess 'dinf' dinf; mess 'dinf2' dinf; mess 'T1' T1; db0 = 2. / ((T01 - TN1) ** 2.) ; *-------------------------- Dmoy par K *-------------------------- calcul de I 1/2 (j = 1) *???????????????????????????????????? *Int = 1.e-3/(ts - tn)*nb ;list Int ; *Int = int * 2. ; *opti donn 5 ; *-------------------------- calcul de D (I + 1/2) h2_prog K2_prog D2_prog C2_prog T2_prog = KPROG T0 TN nb DEMI ; *-------------------------- calcul de PHI (I + 1/2) phi_prog Int_prog = KINPHI Int ; *I2_evol = evol manu phi_prog T_prog ; *DESS I2_evol ; *opti donn 5 ; *-------------------------- calcul de ICHA (N - 1/2) ICHA = INTN phi_prog ; *-------------------------- DELTA (J=1) *-------------------------- calcul de I 1/2 (j = 2) int1 = int ; Int = int1 - (DELTA * 0.5d0) ; deltI = Int - Int1 ; repeter b2 20 ; *-------------------------- calcul de PHI (I + 1/2) phi_prog Int_prog = KINPHI Int ; 'MESSAGE' 'valeur de xphi'; 'LISTE' ('EXTRAIRE' 1 phi_prog); *-------------------------- calcul de ICHA (N - 1/2) ICHA = INTN phi_prog ; *-------------------------- DELTA (J=1) delta1 = DELTA ; *-------------------------- calcul de I 1/2 int1 = int ; *int = int1 - (DELTA * delta1 / (DELTA + delta1)) ; *int = int1 - (DELTA * deltI / (DELTA + delta1)) ; Int = int1 - (DELTA * 0.5d0 ) ; deltI = Int - Int1 ; si ( (DELTA abs) < (ICHA*1.e-4)) quitter b2 ; finsi; menage ; fin b2 ; 'FINPROC' phi_prog h_prog T_prog ; xf = 0.0; PSI0 = 1.D0; mess 'PSI0' PSI0; ALF = 0.08 * 100. ; KS = 5.85E-2 / 3600. ; TS = 0.3 ; TR = 0.055 ; TSR = TS - TR ; N = 2.0304 ; N1 = 1./N ; MOINSN = (-1.)*N ; M = -0.5075 ; M1 = 1./M ; BET = -0.029227 * 100. ; nb = 500 ; H00 = -1.E-20 ; *H00 = 0; Hinf = -1.15D0 ; RA2PI = PI ** (-0.5) * 2. ; phi0 = 0. ; HN = HINF ; DN = KN*DHDTN ; CN = 1./DHDTN ; T0 = HHT_pro H00 ; DT = T0 - TN / NB ; lastemps = 0. ; TETSAT = TS ; TETNSAT = HHT_pro HINF ; OLDXDTET = (TETSAT - TETNSAT) * xf ; * * * CALCUL DE PHI, H et TETA * phi_prog h_prog t_prog = CALPHILI ; xfini = xf; 'REPETER' BTEMPS ntemps ; DELTEMP = ttemps - lastemps ; * profile de la charge dans la zone saturée LXNSAT = phi_prog * ((TTEMPS)** 0.5) ; mess 'phif' phif; xfr = xfini + (phif*(ttemps**0.5)); LXNSAT = LXNSAT + (ID*xfini) ; LHNSAT = h_prog ; LTETNSAT = t_prog ; * LX = LXSAT ET LXNSAT ; LTET = LTETSAT ET LTETNSAT ; LH = LHSAT ET LHNSAT ; 'SI' (&BTEMPS 'EGA' 1) ; * (LH = 'ORDO' LH CROISSANT); 'SINON' ; * (LH = 'ORDO' LH CROISSANT) ; 'FINSI' ; * 'FIN' BTEMPS ; TAB1 = 'TABLE' ; TAB1 . 'TITRE' = 'TABLE' ; TAB1 . 'TITRE' . 1 = 'exacte 1000' ; TAB1 . 'TITRE' . 2 = 'exacte 2000' ; TAB1 . 'TITRE' . 3 = 'exacte 3000' ; TAB1 . 1 = 'TIRR '; TAB1 . 2 = 'TIRR '; TAB1 . 3 = 'TIRR '; 'SI' (GRAPH); 'FINSI' ; ******************** CAS TEST : cacul.dgibi ************************ * * * Test de fonctionnement de DARCYSAT en 2D sans effet de gravité. * =================================================================== * Infiltration d'eau dans une colonne horizontale de sable uniformément * désaturé. * * - condition initiale : désaturation uniforme correspondant à une * succion de 1,15 m ; * - a l'instant initial, une extrémité de la colonne est noyée. * La frontière est supposée rester a pression nulle ; * * =================================================================== * Les options de modélisation declarées dans la table transmise à * la procédure DARCYSAT sont les suivantes : * * * - les effets gravitationnels ne sont pas pris en compte : pression = * charge (indice GRAVITE absent ; valeur par défaut : FAUX); * * - Une liste de temps de sauvegarde est fournie en valeur de l'indice * TEMPS_SAUVES ; * * - Le pas de temps est d'abord automatique (indice TEMPS_CALCULES absent) * L'utilisateur fournit * > le pas de temps initial (indice 'DT_INITIAL'), * > le nombre d'itérations recherché par pas de temps (indice 'NITER') * > le nombre de pas de temps (indice 'NPAS') * * - Le calcul est ensuite refais avec une liste de temps de calcul * donnée à l'indice TEMPS_CALCULES ; * * - L'homogenéisation spatiale des propriétes physiques s'effectue * par moyenne arithmétique des valeurs obtenues aux faces (indice * HOMOGENEISATION de valeur DECENTRE) * *!!!!!!!!!!!!!!!!!!!!!!!! * - La précision de convergence demandée est de 0,5 mm (indice RESIDU_MAX) * cas test tiré du rapport DMT 97/25 : * "Implémentation dans CASTEM 2000 d'un modèle de transfert hydrique * en milieu poreux non saturé" * * ********************* CAS TEST : cacul.dgibi ************************ 'OPTION' 'ECHO' 1 ; 'SAUTER' 'PAGE'; * *'OPTION' 'ISOV' 'LIGN' ; *'TRACER' 'PSC' ; ************************************************************************ * Fonction qui calcule la perméabilité en fonction de la * saturation réduite. * * Loi puissance : * Perméabilité : K = Ks S^B * * Paramètres physiques à définir dans la table LOI : * -------------------------------------------------- * ALPHA : coef. B (s.d.) * PERMSAT : coef. Ks, perméabilité à saturation (m/s) * * Entrée : * -------- * LOI : table de données décrite ci-dessus * SAT : saturation réduite * TEST : mot facultatif 'NOTEST' qui permet de shunter les tests. * * Sortie : * -------- * K1 : perméabilité totale en eau (m/s) * ************************************************************************ *-------------------------------------------------------------------- * Création maillage * *- Discrétisation : ENX = 1 ; ENY = 50 ; *- Création des points et des droites * A0 = -0.5 1.0D0; B0 = 0.5 1.0D0; A1 = -0.5 0.5D0; B1 = 0.5 0.5D0; A2 = -0.5 0.25D0 ; B2 = 0.5 0.25D0 ; A3 = -0.5 0.0D0; B3 = 0.5 0.0D0 ; *- Création des droites * AB0 = 'DROIT' ENX A0 B0 ; AB1 = 'DROIT' ENX A1 B1 ; AB2 = 'DROIT' ENX A2 B2 ; AB3 = 'DROIT' ENX A3 B3 ; *- Creation des surfaces * MASSIF0 = AB3 'REGLER' AB2 'REGLER' AB1 'REGLER' AB0 ; ENTR = 'COULEUR' ('INVERSE' AB0) 'ROUGE' ; 'SI' GRAPH ; 'FINSI' ; *- Creation des maillages contenant tous les points * QFTOT = 'CHANGER' MASSIF0 'QUAF' ; QFENTR = 'CHANGER' ENTR 'QUAF' ; 'ELIMINATION' 0.00001 (QFTOT 'ET' QFSORT 'ET' QFENTR) ; *- Modèles * MODHYB = 'MODELE' QFTOT 'DARCY' 'ISOTROPE' ; MODENTR = 'MODELE' QFENTR 'DARCY' 'ISOTROPE' ; MODSORT = 'MODELE' QFSORT 'DARCY' 'ISOTROPE' ; *- Création ligne de suivi pour le post-traitement et le test * ligne des points centres (cas 1D) * 'REPETER' BCL (ENY - 1) ; IP = &BCL ; JP = IP + 1 ; PI = 'POINT' HYCEN IP ; PJ = 'POINT' HYCEN JP ; 'SI' (IP 'EGA' 1); 'SINON' ; 'FINSI' ; FIN BCL ; *-------------------------------------------------------------------- *- pression initiale (metre d'eau) dans le sable HN = -1.15 ; *-------------------------------------------------------------------- *- Conditions aux limites * GBM modifie supprime bloque *- frontière en limite du domaine de calcul (milieu désaturé) *- frontière mouillée *- chargement des CLs *-------------------------------------------------------------------- *- initialisation des inconnues * (doit être compatible avec les conditions aux limites) * *- trace de charge d'eau *TH0 = 'MANU' 'CHPO' ('DIFF' CEENTR HYFAC) 1 'TH' HN 'NATURE' 'DISCRET'; *TH0 = TH0 + SIMPE ; *- charge d'eau SUPERIEUR 0.98D0; H0 = 1 '-' H0; H0 = (HN * H0) + ((1.D0 - H0) * 1.D0); *- flux * --------------------------- * = Table DARCY_TRANSITOIRE = * --------------------------- *- initialisation table SATUR = 'TABLE' ; SATUR. 'TEMPS' = 'TABLE' ; SATUR. 'CHARGE' = 'TABLE' ; SATUR . 'ITMAX' = 45; *- données géommétriques SATUR. 'SOUSTYPE' = 'DARCY_TRANSATUR' ; SATUR. 'MODELE' = MODHYB ; *- instant initial SATUR. 'TEMPS' . 0 = 0. ; SATUR. 'CHARGE' . 0 = 'COPIER' H0 ; ********************************************* * GBM *- conditions aux limites et chargements *SATUR. 'BLOCAGES_DARCY' = BSORT 'ET' BENTR ; *SATUR. 'CHARGEMENT' = VALI0 ; SATUR . 'TRACE_IMPOSE' = VALI0 ; SATUR . 'TYPDISCRETISATION' = 'VF' ; * GBM MODIFIE TABRES = table METHINV; TABRES . 'TYPINV' = 1; TABRES . 'PRECOND' = 5; SATUR . 'METHINV' = TABRES; SATUR . 'METHINV' . RESID = 1.D-20; ******************************************* ******************************************* *- données physiques * loi de perméabilité LoiP = 'TABLE' 'PUISSANCE'; LoiP. 'ALPHA' = 8. ; LoiP. 'PERMSAT' = 5.85E-2 / 3600. ; SATUR.'LOI_PERMEABILITE' = 'TABLE' LoiP ; * loi de succion LoiS = 'TABLE' 'VAN_GENUCHTEN'; LoiS. 'PORO' = 0.3 ; LoiS. 'TERESIDU' = 0.055 ; LoiS. 'NEXP' = 2.0304 ; LoiS. 'MEXP' = 0.5075 ; LoiS. 'BHETA' = 0.029227 * 100. ; SATUR.'LOI_SATURATION' = 'TABLE' LoiS ; SATUR . 'COEF_EMMAGASINEMENT' = 0.D-6; *SATUR . 'XI' = 1.D-5; *- données numériques SATUR. 'TEMPS_FINAL' = 2000.D0 ; SATUR. 'HOMOGENEISATION' = 'CHAINE' 'DECENTRE' ; SATUR.'SOUS_RELAXATION' = 1.; SATUR. 'NPAS' = 10000 ; SATUR. 'RESIDU_MAX' = 1.D-4 ; SATUR. 'NITER' = 10 ; SATUR. 'DT_INITIAL' = 0.1D0 ; *SATUR. 'TEMPS_CALCULES' = ('PROG' 1 'PAS' 1 3.)*1000. ; SATUR. 'MESSAGES' = 2 ; *-------------------------------------------------------------------- *- Vérification du choix du dp minimum pour le calcul de la capacité. * droite support des variables dx = 'DROIT' (0. -1.15 ) 1000 (0. 0.) ; * calcul de la teneur en eau pour la pression zc 'SI' GRAPH ; 'DESSIN' evt 'TITX' 'Pc(m)' 'TITY' 'S(%)' 'TITRE' 'Loi capillaire S(Pc)' ; 'FINSI' ; * calcul de la teneur en eau pour la pression zc - dp dp = 1.e-4 ; * représentation de la capacité c1 = (t0 - t1) / dp; 'SI' GRAPH ; 'TITRE' 'Capacite capillaire' ; 'FINSI' ; * =========================== * | 1er CALCUL | * =========================== *- fonctionnement avec temps automatiques DARCYSAT SATUR ; * Post-traitement * =============== * le fichier lu est produit par resanalyphilhorsatnsat.dgibi TDES . 3 = 'TABLE' ; TDES . 3 . LEGEND2 = TAB1 . TITRE . 1; TDES . 3 . LEGEND1 = ' ' ; TDES . 4 = 'TABLE' ; TDES . 4 . LEGEND2 = TAB1 . TITRE . 2; TDES . 4 . LEGEND1 = ' ' ; * TDES . 5 = 'TABLE' ; * TDES . 5 . VALEUR = 'EXTRAIRE' courb 'COUR' 3; * TDES . 5 . LEGEND2 = TAB1 . TITRE . 3; * TDES . 5 . LEGEND1 = ' ' ; 'SI' GRAPH ; 'FINSI' ; 'LISTE' inta1; err1 = 'ABS' (inta1); 'LISTE' err1; 'SI' ((err1 '-' 2.95D-2) > 1.D-3) ; 'ERREUR' 5; 'FINSI' ; *opti donn 5; * =========================== * | 2nd CALCUL | * =========================== *- fonctionnement avec une liste de temps calculés SATUR. 'TEMPS' = 'TABLE' ; SATUR. 'TRACE_CHARGE' = 'TABLE' ; SATUR. 'CHARGE' = 'TABLE' ; SATUR. 'TEMPS' . 0 = 0. ; SATUR. 'TRACE_CHARGE' = TABLE ; SATUR. 'CHARGE' . 0 = H0 ; SATUR . 'TYPDISCRETISATION' = 'EFMH' ; DARCYSAT SATUR ; * Post-traitement * =============== *-- Test de non régression * Le test est effectué en vérifiant la solution *- solution après 10 pas de temps *-- Tracé (tous les temps) TDES . 3 = 'TABLE' ; TDES . 3 . LEGEND2 = TAB1 . TITRE . 1; TDES . 3 . LEGEND1 = ' ' ; TDES . 4 = 'TABLE' ; TDES . 4 . LEGEND2 = TAB1 . TITRE . 2; TDES . 4 . LEGEND1 = ' ' ; 'SI' GRAPH ; 'FINSI' ; 'MESSAGE' inta1 inta2; err2 = 'ABS' (inta2); 'LISTE' err2; 'SI' ((err2 '-' 1.22D-2) > 1.D-3) ; 'ERREUR' 5; 'FINSI' ; 'MESSAGE' err1 err2; 'FIN';
© Cast3M 2003 - Tous droits réservés.
Mentions légales