* CHITRNSP PROCEDUR BP208322 21/01/08 21:15:01 10844 *---------------------------------------------------------------------- * Transport geochimie *---------------------------------------------------------------------- * *------------------------------ * Phrase d'appel (en GIBIANE) : *------------------------------ * * CHITRNSP TABLE ; * *---------------------------------- * Opérandes (à mettre dans TABLE) : *---------------------------------- * * ___________________________________________________________________ * | | * | Indice Contenu | * | | * ------------------------------------------------------------------- * | | * |------------------------------------------------ | * |Données physiques, géométriques et materielles : | * |------------------------------------------------ | * | | * |'MODELE' Objet modèle (MMODEL créé par MODE) | * | | * |'DIFFUSION' Données physiques et materielles : | * | conductivité hydraulique (MCHAML créé par MATE) | * | | * |'POROSITE' Contient pour chaque élément la valeur moyenne de la | * | porosité (défaut 1 ) nom CK | * | | * |'DOMAINE' Références géométriques (TABLE créée par KDOM) | * | | * |'CONVECTION' Flux de la vitesse convective (CHAMPOIN de support | * | DOMAINE.FACE) | * | | * | | * | 'CHIMI1' Table issue de CHI1 | * | | * | 'TAQU' concentration des aqueux au centre des faces | * | CHAMPOIN possedant une composante par composant | * | chimique. | * | | * | 'ITERC' nombre max d'itérations de couplage (défaut 100) | * | | * | 'PRECISION' précision critère de convergence pour le couplage | * | valeur par défaut 1.E-3 | * | | * | 'LOGC' parametres de calcul de CHI2 | * | 'TOT' | * | <'EPS'> <'ITMAX'> <'ITERSOLI'> <'PRECPE'> | * | <'NITERPE'> <'DELPE'> <'NFI'> <'FIONI'> <'NTY4'> <'TEMPE'> | * | <'CLIM'> <'SORTIE'> <'IMPRIM'> | * | | * |-------------------------------------- | * |Conditions aux limites / chargements : | * |-------------------------------------- | * | | * |'BLOCAGE' Contient les matrices de blocage (RIGIDITE) | * | | * |'TRACE_IMPOSE' Valeurs des traces de concentrations imposées | * | chargement de CHPOIN au centre des faces | * | | * |'FLUX_IMPOSE' Valeurs des flux de concentrations imposées | * | chargement de CHPOIN au centre des faces | * | | * |'SOURCE' Valeurs de la source | * | Chargement relatifs aux CHPOIN centre | * | ( défaut CHPOIN centre 0.) | * | | * |--------------------- | * |Algorithme en temps : | * |--------------------- | * | | * |'PAS_DE_TEMPS' Valeur du pas de temps de calcul (FLOTTANT) | * | | * | 'TEMPS_FINAL' Valeur du temps final (FLOTTANT) | * | | * |'TEMPS_SAUVES' Valeur des temps sauvegardés (LISTREEL - défaut | * | on sauve tous les pas de temps) | * | | * |'THETA' Coefficient de relaxation du terme de diffusion | * | compris entre 0. et 1. | * | (theta-méthode) (FLOTTANT - défaut 1.) | * | Possibilité de non-convergence lorsque theta<1/2 | * | Valeurs de theta généralement utilisées : | * | Schéma de Euler explicite : 0. | * | Schéma de Crank-Nicholson : 1/2 | * | Schéma de Euler implicite : 1. | * | | * | | * | 'SORTIE' listmots liste des élèments à conserver (cf CHI2) | * |_________________________________________________________________| * * * *--------------------------------- * Résultats (stockés dans TABLE) : *--------------------------------- * * ___________________________________________________________________ * | | * | Indice Contenu | * | | * ------------------------------------------------------------------- * | | * |'SOUSTYPE' 'GEOCHIMIE' (type MOT) | * | | * |'TEMPS' TABLE contenant les temps sauvegardés (FLOTTANT) | * | | * |'TOT' TABLE contenant les concentrations totales aux centres | * | CHPOIN centre ayant une composante par composant chimique | * | | * |'AQUE' TABLE contenant les concentrations des aqueux | * | CHPOIN centre ayant une composante par composant chimique | * | | * |'FIXE' TABLE contenant les concentrations des fixés | * | CHPOIN centre ayant une composante par composant chimique | * | | * |'TAQU' TABLE contenant les traces de concentrations des aqueux | * | CHPOIN face ayant une composante par composant chimique | * | on aura en plus une table pour chacun des éléments de la liste | * | SORTIE. Les sauvegardes des CHPOIN centre issus du calcul CHI2 | * | | * |_________________________________________________________________| * * * ___________________________________________________________________ * | | * | Les tables résultats sont indicés par des entiers variant de 0 | * | à N . | * | A l'indice 0 on stocke les valeurs initiales, aux indices | * | suivants les champs correspondant au temps de sortie TEMPS.I . | * | Les champs servant en cas de reprise sont stockés à l'indice N .| * |_________________________________________________________________| * * * *--------------------------------------------------------------------* * RECUPERATION DES DONNEES PHYSIQUES, GEOMETRIQUES ET MATERIELLES * *--------------------------------------------------------------------* * * SOUSTYPE 'ERREUR' 'indice SOUSTYPE absent de la table des données ' ; 'FINSI' ; 'SI' ( 'NEG' ( TRANSI. 'SOUSTYPE') 'GEOCHIMIE' ) ; 'ERREUR' 'indice SOUSTYPE incorrect dans la table des données ' ; 'FINSI' ; * MODELE 'SI' ( 'EXISTE' TRANSI 'MODELE' ) ; MODHYB = TRANSI . 'MODELE' ; 'SINON' ; 'ERREUR' 'Il manque le modele' ; 'FINSI' ; * DIFFUSION 'SI' ( 'EXISTE' TRANSI 'DIFFUSION' ) ; MAT1 = TRANSI . 'DIFFUSION' ; 'SINON' ; 'ERREUR' 'Indice DIFFUSION absent de la table de données.' ; 'FINSI' ; * POROSITE 'SI' ( 'EXISTE' TRANSI 'POROSITE' ) ; COEMK = TRANSI . 'POROSITE' ; 'SINON' ; 'FINSI' ; * CONVECTION 'SI' ( 'EXISTE' TRANSI 'CONVECTION' ) ; QFACE = TRANSI . 'CONVECTION' ; 'SINON' ; 'ERREUR' 'Indice CONVECTION absent de la table de données.' ; 'FINSI' ; * CHIMI1 'SI' ( 'EXISTE' TRANSI 'CHIMI1' ) ; TB1 = TRANSI . 'CHIMI1' ; 'SI' ( 'NON' ('EXISTE' TB1 'SOUSTYPE' ) ) ; 'ERREUR' 'Indice CHIMI1 ne convient pas.' ; 'FINSI' ; 'SI' ( 'NEG' ( TB1.'SOUSTYPE' ) 'CHIMI1' ) ; 'ERREUR' 'Le sous-typage de la table CHIMI1 est incorrect'; FINSI ; 'MESS' ' NOMBRE DE COMPOSANTS ' NBCOMP ; 'SINON' ; 'ERREUR' 'Indice CHIMI1 absent de la table de données.' ; 'FINSI' ; * PRECISION 'SI' ( 'EXISTE' TRANSI 'PRECISION' ) ; EPSS = TRANSI . 'PRECISION' ; 'SINON' ; EPSS = 1.D-3 ; 'FINSI' ; * ITERC 'SI' ( 'EXISTE' TRANSI 'ITERC' ) ; ITERC = TRANSI . 'ITERC' ; 'SINON' ; ITERC= 100 ; 'FINSI' ; *--------------------------------------------------------------------* * RECUPERATION DES DONNEES POUR LE SCHEMA EN TEMPS * *--------------------------------------------------------------------* * * THETA 'SI' ( 'EXISTE' TRANSI 'THETA' ) ; TETA = TRANSI . 'THETA' ; 'SINON' ; TETA = 1.D0 ; 'FINSI' ; * PAS_DE_TEMPS 'SI' ( 'EXISTE' TRANSI 'PAS_DE_TEMPS' ) ; DELTAT = TRANSI . 'PAS_DE_TEMPS' ; 'SINON' ; 'ERREUR' 'Indice PAS_DE_TEMPS absent de la table de données.' ; 'FINSI' ; * TEMPS INITIAL 'SI' ( 'EXISTE' TRANSI 'TEMPS') ; ISOR0 = IND1 . LN1 ; TINIT= TRANSI.'TEMPS' . ISOR0 ; 'SINON' ; TRANSI. 'TEMPS' = TABLE ; TINIT=0.D0 ; TRANSI. 'TEMPS'. 0 = TINIT ; ISOR0= 0 ; LN1=1 ; 'FINSI' ; * TEMPS_FINAL 'SI' ( 'EXISTE' TRANSI 'TEMPS_FINAL' ) ; TFINAL = TRANSI . 'TEMPS_FINAL' ; SI ( TFINAL <EG TINIT ) ; 'ERREUR' 'FINSI' ; EPS0= DELTAT*0.1 ; NBTPS= 'ENTI' ((TFINAL -TINIT + EPS0 )/ DELTAT) ; SI ( 'NEG' (NBTPS*DELTAT) (TFINAL - TINIT) EPS0 ) ; 'ERREUR' ' TEMPS_FINAL n est pas un multiple du PAS_DE_TEMPS' ; 'FINSI' ; 'SINON' ; 'ERREUR' 'Indice TEMPS_FINAL absent de la table de données.' ; 'FINSI' ; * TEMPS_SAUVES 'SI' ( 'EXISTE' TRANSI 'TEMPS_SAUVES' ) ; TPSINI= TINIT ; ISOR= 1 ; 'SI' ( TINIT 'EGA' TEMS EPS0 ) ; * SI LE TEMPS D'INITIALISATION EST DANS LA LISTE * ON L'ENLEVE CAR CE TEMPS LA EST SAUVE DE TOUTE MANIERE 'FINSI' ; 'REPETER' BOU3 NBTPS ; TPSINI= TPSINI +DELTAT ; ; 'SI' ( TPSINI 'EGA' TEMS EPS0 ) ; ISOR = ISOR+1 ; 'SI' ( ISOR > DSOR ) ; 'QUITTER' BOU3 ; 'FINSI' ; 'FINSI' ; 'FIN' BOU3 ; DLSOR= DLSOR+1 ; 'MESS' ' LA LISTE TEMPS_SAUVES EST INCORRECTE' ; MESS 'indices des temps sauvegardés' ; list ltpsor ; 'FINSI' ; 'SINON' ; * MESS 'NBTPS ' NBTPS ; 'SI'( NBTPS 'EGA' 1 ) ; 'SINON' ; 'FINSI' ; 'FINSI' ; * IL FAUT CONTROLER LES LONGUEURS DES TABLES * TAQU 'SI' ( 'EXISTE' TRANSI 'TAQU' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et TAQU ' ; 'FINSI' ; TAQU0 = TRANSI . 'TAQU' . ISOR0 ; TAQU = TRANSI . 'TAQU' . ISOR0 ; 'SINON' ; 'ERREUR' 'Indice TAQU absent de la table de données.' ; 'FINSI' ; * AQUE 'SI' ( 'EXISTE' TRANSI 'AQUE' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et AQUE ' ; 'FINSI' ; 'SINON' ; 'SI' ( EGA ISOR0 0) ; TRANSI. 'AQUE'= TABLE ; 'SINON' ; 'ERREUR' 'Indice AQUE absent de la table de données.' ; 'FINSI'; 'FINSI' ; * FIXE 'SI' ( 'EXISTE' TRANSI 'FIXE' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et FIXE ' ; 'FINSI' ; 'SINON' ; 'SI' ( EGA ISOR0 0) ; TRANSI. 'FIXE'= TABLE ; 'SINON' ; 'ERREUR' 'Indice FIXE absent de la table de données.' ; 'FINSI'; 'FINSI' ; * FLUX 'SI' ('NEG' LN1 LNN) ; 'FINSI' ; 'SINON' ; 'SI' ( EGA ISOR0 0) ; * TRANSI. 'FLU2'= TABLE ; 'FINSI'; 'FINSI' ; * parametres de CHIMI2 TBPARM= TABLE ; TBPAR2= TABLE ; TBPAR2.'SOUSTYPE'='DONNEES_CHIMIQUES' ; * 'SI' ( 'EXISTE' TRANSI 'LOGC' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et LOGC ' ; 'FINSI' ; TBPAR2.'LOGC' = TRANSI . 'LOGC' . ISOR0 ; CLOGC = TRANSI . 'LOGC' . ISOR0 ; 'SINON' ; 'ERREUR' 'Indice LOGC absent de la table de données.' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TOT' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et TOT ' ; 'FINSI' ; TBPAR2.'TOT' = TRANSI . 'TOT' . ISOR0 ; TNC = TRANSI . 'TOT' . ISOR0 ; 'SINON' ; 'ERREUR' 'Indice TOT absent de la table de données.' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'EPS' ) ; TBPARM.'EPS' = TRANSI . 'EPS' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'ITMAX' ) ; TBPARM.'ITMAX' = TRANSI . 'ITMAX' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'ITERSOLI' ) ; TBPARM.'ITERSOLI' = TRANSI . 'ITERSOLI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'PRECPE' ) ; TBPARM.'PRECPE' = TRANSI . 'PRECPE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NITERPE' ) ; TBPARM.'NITERPE' = TRANSI . 'NITERPE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'DELPE' ) ; TBPARM.'DELPE' = TRANSI . 'DELPE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'MDELPE' ) ; TBPARM.'MDELPE' = TRANSI . 'MDELPE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NFI' ) ; TBPARM.'NFI' = TRANSI . 'NFI' ; 'FINSI' ; 'SI' ('NEG' LN1 LNN) ; 'FINSI' ; 'SINO' ; CFIONI= TNC -TNC ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NTY4' ) ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' 'dimensions incohérentes entre TEMPS et NTY4 ' ; 'FINSI' ; TBPAR2.'NTY4' = TRANSI . 'NTY4' . ISOR0 ; CNTY4 = TRANSI . 'NTY4' . ISOR0 ; ICTY4= 1 ; 'SINON' ; ICTY4= 0 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TEMPE' ) ; TBPAR2.'TEMPE' = TRANSI . 'TEMPE' ; TEMPERAT = TRANSI . 'TEMPE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'CLIM' ) ; TBPAR2.'CLIM' = TRANSI . 'CLIM' ; CCLIM= TRANSI . 'CLIM' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'SORTIE' ) ; TBPARM.'SORTIE' = TRANSI . 'SORTIE' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'IMPRIM' ) ; TBPARM.'IMPRIM' = TRANSI . 'IMPRIM' ; 'FINSI' ; * * ------------------------------------------------------------ * DECROISSANCE * ------------------------------------------------------------ * 'SI' ( 'EXISTE' TRANSI 'DECROISSANCE') ; TETDEC= TRANSI.'DECROISSANCE'.TETA ; * MESS ' TDEC ' ; TDEC= INDEX ( TRANSI. 'DECROISSANCE' ) ; * MESS 'NBDEC ' ; *list nbdec ; NBDEC= NBDEC-1 ; *list nbdec ; *LIST TDEC ; TBDEC= TRANSI.'DECROISSANCE'. 1 ; * MESS 'LAMP ' ; * LIST LAMP ; 'REPE' BDECR NBDEC ; TBDEC= TRANSI.'DECROISSANCE'. &BDECR ; * LAMP=LAMP+( NOMC TBDEC.LAMBDA MOPERE ) ; 'FIN' BDECR ; 'FINSI' ; * MESS ' LAMP apres chargement ' ; * LIST LAMP ; * MESS ' LISMPERE ' ; * LIST LISMPERE ; * MESS ' LISMFILS ' ; * LIST LISMFILS ; * *--------------------------------------------------------------------* * RECUPERATION DES CONDITIONS AUX LIMITES ET DES CHARGEMENTS * *--------------------------------------------------------------------* * * CL de type Dirichlet : BLOCAGE * TRACE_IMPOSE 'SI' ( 'EXISTE' TRANSI 'BLOCAGE' ) ; MATBLOC = TRANSI . 'BLOCAGE' ; 'SI' ( 'EXISTE' TRANSI 'TRACE_IMPOSE') ; CCHAIMP = TRANSI . 'TRACE_IMPOSE' ; 'SINON' ; 'ERREUR' 'Valeurs de traces de charge imposée absentes' ; 'FINSI' ; 'FINSI' ; * FLUX_IMPOSE 'SI' ( 'EXISTE' TRANSI 'FLUX_IMPOSE') ; FLUIMPO = TRANSI . 'FLUX_IMPOSE' ; 'FINSI' ; * SOURCE 'SI' ( 'EXISTE' TRANSI 'SOURCE' ) ; CHASOUR = TRANSI . 'SOURCE' ; 'SINON' ; 'REPE' BOU6 NBCOMP ; SOURC0= SOURC0 +TERSC ; 'FIN' BOU6 ; 'FINSI' ; * tersc1 source a utiliser dans le calcul de AF * *------------------------------------------- ------------------------* * INITIALISATION DE LA TABLE RESULTAT *--------------------------------------------------------------------* * 'SI' ( 'EXISTE' TRANSI 'SORTIE' ) ; SI (EGA ISOR0 0) ; 'REPETER' BOU1 NBSOR ; TRANSI . MOSOR = TABLE ; 'FIN' BOU1 ; 'SINON' ; 'REPETER' BOU2 NBSOR ; 'SI' ('NEG' LN1 LNN) ; 'ERREUR' MESERR ; 'FINSI' ; 'SINON' ; 'ERREUR' FINSI ; 'FIN' BOU2 ; 'FINSI' ; 'FINSI' ; *--------------------------------------------------------------------* * CE QUI EST INDEPENDANT DU COMPOSANT ET DU TEMPS * *--------------------------------------------------------------------* * * on récupère les noms des reactifs * NBREA= 0 ; REPETER BOUREA NBREA ; FIN BOUREA; * LIST NOMREAC ; FINSI ; * * on récupère les noms des non reactifs * NBNR= 0 ; NBNR1= NBNR ; REPETER BOUNR NBNR1; * * les non reactifs intervenant dans les decroissances sont traités * comme des reactifs sinon les quantitées de matieres devenant non * reactives ne sont plus transportées 'SI' ( 'EXISTE' TRANSI 'DECROISSANCE') ; IREA= FAUX ; 'REPE' B2DECR NBDEC ; TBDEC= TRANSI.'DECROISSANCE'. &B2DECR ; 'SI' ('EGA' (TBDEC.'PERE') NUNU) ; IREA= VRAI ; 'QUITTER' B2DECR ; 'SINON' ; 'SI' ('EGA' (TBDEC.'FILS') NUNU) ; IREA= VRAI ; 'QUITTER' B2DECR ; 'FINSI' ; 'FINSI' ; 'FIN' B2DECR ; 'SI' IREA ; NBREA=NBREA+1 ; NBNR= NBNR-1 ; 'SINON' ; 'FINSI' ; 'SINON' ; 'FINSI' ; FIN BOUNR ; * LIST NOMPARF ; FINSI ; * * * Table utilisée par les operateurs MATP, SMTP, HYBP et HDEBI * TAB = 'TABLE' ; TAB.'SOUSTYPE' = 'DARCY_TRANSITOIRE' ; TAB.'THETA' = TETA ; TAB.'THETA_CONVECTION'= TETA ; TAB.'PAS' = DELTAT ; * * Initialisations du calcul * AF = MF ET MC ; * * * * CAQU=TB3.AQUE ; CAQU0=CAQU ; CFIX0=TB3.FIXE ; CFIXE=TB3.FIXE ; CLOGC= TB3.LOGC ; FLU00= TAQU -TAQU ; FLU01= FLU00 ; * * Les coefficients * COEMC= COEMC * XVOLU ; ALFA= (TETA* PETID) +(COEMC/DELTAT ) ; ALFA= ALFA ** (-1) ; COEF1=ALFA*COEMC/DELTAT ; COEF2= ALFA* PETID*(1. - TETA) ; COEF3= ALFA*(1. - TETA) ; COEF4= 1. - (ALFA * TETA * PETID ) ; COEF5= ALFA*TETA*PETID ; * * Indice ISOR0 de la table resulat * TMPS= TINIT ; TRANSI . 'TEMPS' . ISOR0 = TMPS ; TRANSI . 'TOT' . ISOR0 = TNC ; TRANSI . 'AQUE' . ISOR0 = CAQU ; TRANSI . 'FIXE' . ISOR0 = CFIXE ; TRANSI . 'TAQU' . ISOR0 = TAQU ; TRANSI . 'LOGC' . ISOR0 = CLOGC ; QFACE ; * 'MESS' ' FLUX 0' ; * LIST ( TRANSI . 'FLUX' . ISOR0 ) ; 'SI' ( 'EXISTE' TRANSI 'SORTIE' ) ; 'REPETER' BOU4 NBSOR ; TRANSI . MOSOR . ISOR0 = TB3. MOSOR ; 'FIN' BOU4 ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP6' ) ; CTYP6= TB3.'TYP6' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP5' ) ; CTYP5= TB3.'TYP5' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP3' ) ; CTYP3= TB3.'TYP3' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NTY4' ) ; CNTY4= TB3.'NTY4' ; ICTY4= 1 ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'SOLU' ) ; CSOLU= TB3.'SOLU' ; 'FINSI' ; 'FINSI' ; * * ------------------------------------------------------------------- * Boucle sur le temps * ------------------------------------------------------------------- * ISOR=1 ; ITERCUM= 0 ; NPAFLUX= 0 ; REPETER BOUTMP NBTPS ; TMPS= TMPS+DELTAT ; TNC1= TNC ; 'SI' ( 'EXISTE' TRANSI 'SOURCE' ) ; 'SINON' ; SOURC= SOURC0 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'BLOCAGE' ) ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'FLUX_IMPOSE' ) ; 'FINSI' ; TOTO= TAQU ; * FLU2= TOTO - TOTO ; DOMERR= CEHYTOT ; * * --------------------------- * Transport des non réactifs * --------------------------- * SI (NBNR > 0 ) ; * I=0 ; REPETER BLOC1 NBNR ; I= I + 1 ; TNC = TNC - CHA2 ; * * = Conditions initiales = * TAB.'TRACE' = TFHYB ; TAB.'CHARGE' = TCHYB ; * * = VALEURS imposées = * * * 'SI' ('EXISTE' TRANSI 'BLOCAGE') ; AFF = AF 'ET' MATBLOC ; SMTR = SMTR 'ET' EEBAS ; 'SINON' ; AFF =AF ; 'FINSI' ; 'SI' ('EXISTE' TRANSI 'FLUX_IMPOSE') ; SMTR = SMTR ET FLUIMPC ; 'FINSI' ; CONC2 = TETA *CONC0 + ((1.D0-TETA )*CONC1) ; CONC3 = (-1.D0) * CONC2 * QFACE ; TERSCE = TSOUR + TERSC2 ; TNC = TNC + CHA2 ; FIN BLOC1 ; TAQU= TOTO ; TAQU0=TAQU ; FINSI ; * * * --------------------------- * Transport des réactifs * --------------------------- * AS1 = ACS1 - ABS1 - AAS1 - AES1 ; AT1=(COEF1*TNC) - (ALFA*(1.-TETA)*PETID*CAQU0) +(COEF3*ADS1) ; AT1=AT1+ (ALFA * SOURC ) ; CFION2=CFIONI; CLOGC2=CLOGC ; CAQU2=CAQU ; 'SI' ( 'EXISTE' TRANSI 'CLIM' ) ; CCLIM2=CCLIM ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TEMPE' ) ; TEMPERA2=TEMPERAT ; 'FINSI' ; CFIXE= CFIX0 ; CFIX2=CFIXE ; TAQU = TAQU0 ; * ------------- * Couplage * ------------- ITECO= 0 ; REPETER BLOC2 ITERC ; ITECO= ITECO+ 1 ; AS = AS1 +AS2 ; ABT2= COEF5*CFIXE ; * * * Résolution composante par composante * TNC0=TNC ; REPETER BLOC4 NBREA ; * LIST MOCOMP ; * TAQU = TAQU - CONC0 ; 'SI' ('EXISTE' TRANSI 'BLOCAGE' ) ; AFF = AF 'ET' MATBLOC ; ASS = ASI ET EEBAS ; 'SINON' ; ASS = ASI ; AFF= AF ; 'FINSI' ; 'SI' ('EXISTE' TRANSI 'FLUX_IMPOSE' ) ; ASS = ASS ET FLUIMPC ; 'FINSI' ; CONC1= 'RESOU' AFF ASS ; TAQU = TAQU + CONC0 ; LAT1=EXCOM MOCOMP AT1 MOCOMP ; AT2= EABT2 + (ALFA*TETA*AAT2 ); TNC=TNC -TNL ; TNC= TNC +AT2 +LAT1 ; FIN BLOC4 ; * * Prise en compte de la décroissance * 'SI' ( 'EXISTE' TRANSI 'DECROISSANCE') ; * mess ' avant decroissance ' ; * list tnc ; TNDEC=(TETDEC*TNC)+((1.-TETDEC)*TNC1) ; TTPERE= LAMP*TNDEC LISMPERE LISMPERE LISMPERE ; TNC=TNC+(DELTAT*(TTFILS-TTPERE)) ; * mess ' apres decroissance ' ; * list tnc ; 'FINSI' ; * * Convergence sur TNC * * NBCOMP nombre de composantes de CTOT DIFTN=ABS(TNC-TNC0) ; * MESS 'mama0 ' ; LIST MAMA0 ; SI ( MAMA0 EGA 0 ) ; MESS ' on a convergé ' ; QUITTER BLOC2 ; FINSI ; II=1 ; NBC1= NBCOMP-1 ; SI ( NBC1 NEG 0 ) ; REPETER BLOC3 NBC1 ; II=II+1 ; BB=BB+CC ; FIN BLOC3 ; FINSI ; * OPTION DONN 5 ; TBPAR2.FIONI= CFION2 ; TBPAR2.LOGC= CLOGC2 ; TBPAR2.TOT= TTNC ; 'SI' ( 'EXISTE' TRANSI 'CLIM' ) ; TBPAR2.CLIM= CCLIM2 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TEMPE' ) ; TBPAR2.'TEMPE'= TEMPERA2 ; 'FINSI' ; 'SI' ( ICTY4 'EGA' 1 ) ; TBPAR2.'NTY4'= CPPP ; 'FINSI' ; * on va calculer chimi2 sur un sous maillage et on garde dans CCAQU * ce qui ne bougera pas CCFIXE= CFIXE -CFIX2 ; CCAQU= CAQU -CAQU2 ; CCLOGC= CLOGC -CLOGC2 ; * * * * CAQU= CCAQU + TB3.AQUE ; CFIXE= CCFIXE + TB3.FIXE ; CLOGC= CCLOGC+TB3.LOGC ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP6' ) ; CTYP6= CTYP6 - CPPP + TB3.'TYP6' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP5' ) ; CTYP5= CTYP5 -CPPP + TB3.'TYP5' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP3' ) ; CTYP3= CTYP3 -CPPP +TB3.'TYP3' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NTY4' ) ; CNTY4= CNTY4 -CPPP + TB3.'NTY4' ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'SOLU' ) ; CSOLU= CSOLU -CPPP +TB3.'SOLU' ; 'FINSI' ; CAQU0=CAQU ; CFIX0= CFIXE ; * FIN BLOC2 ; * ------------ * CAQU0=CAQU ; CFIX0= CFIXE ; ITERCUM=ITERCUM+ ITECO ; MESS ' Iterations ' ITECO ITERCUM ; TAQU0=TAQU ; * Calcul du flux NPAFLUX= NPAFLUX+1 ; 'OUBL' FLU01 ; REPE BOUIMMO NBIMMO ; FLUPA = FLUPA- FLU03 ; FIN BOUIMMO ; FINSI ; FLU01= FLUPA ; SI( NUSOR 'EGA' &BOUTMP ) ; ISOR2=ISOR0+ISOR ; TRANSI. 'TEMPS' . ISOR2 = TMPS ; TRANSI.TOT . ISOR2 = TNC ; TRANSI.AQUE . ISOR2 = CAQU ; TRANSI.FIXE . ISOR2 = CFIXE; TRANSI.'TAQU' . ISOR2 = TAQU; TRANSI.'LOGC' . ISOR2 = CLOGC ; * TRANSI . 'FLU2' . ISOR2 = FLU2 ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP6' ) ; TRANSI.'TYP6' . ISOR2 = CTYP6 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP5' ) ; TRANSI.'TYP5' . ISOR2 = CTYP5 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'TYP3' ) ; TRANSI.'TYP3' . ISOR2 = CTYP3 ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'NTY4' ) ; TRANSI.'NTY4' . ISOR2 = CNTY4 ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' TRANSI 'SOLU' ) ; TRANSI.'SOLU' . ISOR2 =CSOLU ; 'FINSI' ; FLU01=FLU00 ; NPAFLUX= 0 ; ISOR=ISOR+1 ; 'FINSI' ; MENAGE ; FIN BOUTMP ; * 'FINP' TRANSI ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales