$$$$ TRANSNON * TRANSNON PROCEDUR SP204843 26/03/20 21:15:02 12502 'DEBPROC' TRANSNON PRECED*'TABLE'; *--------------------------------------------------------------------------------* * * * T R A N S N O N * * --------------- * * * * RESOLUTION D'UN PROBLEME DE THERMIQUE TRANSITOIRE NON-LINEAIRE * * METHODE A UN PAS DE TEMPS ( THETA SCHEMA ) * * * * ETAB, TABLE CONTENANT EN ENTREE : * * * * INDICE 'TEMPERATURES' CHAMP DE TEMPERATURE INITIAL AU PAS 0 * * INDICE 'RAYO' LOGIQUE VALANT VRAI POUR UNE CONDITION * * DE RAYONNEMENT * * INDICE 'EMISSIVITE' MCHAML DECRIVANT LES FACTEURS D'EMISSIVITE * * NOM DE LA COMPOSANTE : EMIS * * INDICE 'CELSIUS' LOGIQUE VALANT VRAI SI L'UNITE EST LE * * DEGRE CELSIUS (CAPITAL SI RAYONNEMENT) * * INDICE 'MOD_THE' OBJET MODELE THERMIQUE * * INDICE 'MOD_CON' OBJET MODELE CONVECTION * * INDICE 'BLOCAGES_THERMIQUES' MATRICE DE BLOCAGE * * INDICE 'MAT_THE' OBJET MATERIAU THERMIQUE. * * CE CHAMP PEUT AVOIR DES COMPOSANTES DE * * TYPE FLOTTANT OU EVOLUTION (ABS-ORD). * * ABS : VARIABLE QUELCONQUE * * ORD : VALEUR DE LA COMPOSANTE CONCERNE POUR * * LA VALEUR ABS. * * INDICE 'MAT_CON' OBJET MATERIAU CONVECTION * * INDICE 'CHARGEMENT' CHARGEMENT DECRIVANT LES * * VALEURS DES VARIABLES EXTERNES (EX: TE, * * FLUX,TEMPERATURES IMPOSEES ,...) * * INDICE 'PHASE' LOGIQUE VALANT VRAI SI CHGT DE PHASE 'PARFAIT' * * INDICE 'SOLUBILITE' LOGIQUE VALANT VRAI SI CHGT DE PHASE 'SOLUBILITE' * * INDICE 'TEM_CALC' LISTREEL : TEMPS DES RESULTATS A CALCULER * * INDICE 'RELAXATION_THETA' VALEUR DU COEFFICIENT DE RELAXATION * * (VALEUR PAR DEFAUT 0.5) * * INDICE 'SOUS_RELAXATION' VALEUR DU COEFF. DE SOUS-RELAXATION * * (VALEUR PAR DEFAUT 0.5) * * INDICE 'PRECISION' VALEUR DU CRITERE DE CONVERGENCE * * (VALEUR PAR DEFAUT 1.E-4) * * INDICE 'MAXITERATION' NOMBRE MAXIMUM D'ITERATIONS AUTORISEES * * INDICE 'PROJECTION' LOGIQUE VALANT VRAI SI COUPLAGE ET SI LE * * MAILLAGE DE LA MECANIQUE ET DE LA THERMIQUE * * EST DIFFERENT * * INDICE 'TTOL' PRECISION ABSOLUE pour la THERMIQUE et la DIFFUSION * * * * ETAB CONTIENT EN SORTIE * * * * INDICE INITIAL(2) DERNIER CHAMP DE TEMPERATURE CALCULE * * * * REMARQUE : CERTAINES VARIABLES ONT DES NOMS IMPOSES. * * LE TEMPS : TEMPS * * LA TEMPERATURE : T * * LA TEMPERATURE EXTERIEURE : TE * * LES TEMPERATURES IMPOSEES : TIMP * * LES FLUX : Q * * * * LE NOM DES AUTRES VARIABLES EST LAISSE AU CHOIX DE * * L'UTILISATEUR * * * ********************************************************************************** * Recuperation de l'information contenue dans ETAB * ********************************************************************************** ERR_VAL = FAUX ; STAB ='TABL' ; ETAB = PRECED.'WTABLE'; CONTI = PRECED.'CONTINUATION'; ESTIM = PRECED.'ESTIMATION'; NBPART = ETAB.'NBPART'; LPRIM1 = ETAB.'PRIM_TOT' ; LDUAL1 = ETAB.'DUAL_TOT' ; LPRIM2 =('MOTS' 'TEMP') 'ET' LPRIM1 ; NBDUA1 = 'DIME' LDUAL1 ; * Recuperation des tolerence absolues (Tout est dans l'indice TTOL) 'SI' ('NEG' ETAB.'TTOL' ('MOT' 'INCONNU')) ; LOG_TOL = VRAI ; TTOL = ETAB.'TTOL' ; 'SINO' ; LOG_TOL = FAUX ; 'FINS' ; XPETI = ('VALE' 'PETIT') / ('VALE' 'PREC') ; * Appel a PAS_MODL : * Mise a jour des indices de PRECED.WTABLE relatifs aux modeles * si PRECED.WTABLE.MODELE a ete modifie PAS_MODL PRECED ; MODMEC = ETAB.'MO_TOT' ; 'COMM' 'Formulation MECANIQUE & POREUX' ; MODTOT = ETAB.'MOD_TOT' ; 'COMM' 'Formulation THERMIQUE & THERMOHYDRIQUE & DIFFUSION & CHANGEMENT_PHASE' ; MATTOT0 ='REDU' MODTOT ETAB.'MAT_TOT' ; MAILTOT ='EXTR' MODTOT 'MAIL'; * -------------- presence de conduction ICONDU = ETAB.'CONDUCTION'; 'SI' ICONDU; MATCOND0=ETAB.'MAT_COND'; MODCOND =ETAB.'MOD_COND'; 'FINS'; * -------------- presence de convection ICONVE= ETAB.'CONVECTION' ; 'SI' ICONVE; MATCONV0=ETAB.'MAT_CON'; MODCONV =ETAB.'MOD_CON'; 'FINS'; * -------------- presence d'advection IADVEC=ETAB.'ADVECTION'; 'SI' IADVEC; MATADV0 = ETAB.'MAT_ADV'; MODADV = ETAB.'MOD_ADV'; 'FINS'; * -------------- presence de rayonnement IRADI = ETAB.'RAYO'; 'SI' IRADI ; MATRAY0 = ETAB.'MAT_RAY'; MODRAY = ETAB.'MOD_RAY'; 'SI' ('NON' ('EXIS' ETAB 'CTE_STEFAN_BOLTZMANN')) ; CTE_SB = 5.67037321E-8 ; 'MESS' 'ATTENTION ! Constante de Stefan-Boltzmann en unites SI' ; 'MESS' ' soit ' CTE_SB ; ETAB.'CTE_STEFAN_BOLTZMANN' = CTE_SB ; 'FINS' ; 'FINS' ; * -------------- presence de sources de chaleur ISOURQ = ETAB.'SOURCE_Q'; 'SI' ISOURQ ; MATSOQ0 = ETAB.'MAT_SOQ'; MODSOQ = ETAB.'MOD_SOQ'; 'FINS'; * -------------- presence de changement de phase 'PARFAIT' IPHASE=ETAB.'PHASE'; 'SI' IPHASE; MODPHA = ETAB.'MOD_PHA' ; MATPHA0 = ETAB.'MAT_PHA' ; BLOPHA = ETAB.'BLO_PHASE'; PROPHA0 = CONTI.'PROPORTIONS_PHASE' ; PROPHA1 = PROPHA0 ; 'FINS'; * -------------- presence de changement de phase 'SOLUBILITE' ISOLU=ETAB.'SOLUBILITE'; 'SI' ISOLU; BLOSOL = ETAB.'BLO_SOL' ; 'FINS'; * -------------- presence Modele Metallurgie (T.L. en juin 2018) IMETAL = ETAB.'FOR_METALLU' ; 'SI' IMETAL; MODMET = ETAB.'MOD_MET' ; PHA_MET0 = CONTI.'PROPORTIONS_PHASES' ; CHTPOI0 = ETAB.'T_POINT0' ; 'FINS'; * -------------- presence de thermohydrohydrique ITHM1=ETAB.'THM1'; 'SI' ITHM1; MATTHM0 = ETAB.'MAT_THM'; MODTHM = ETAB.'MOD_THM'; 'FINS'; * -------------- presence de diffusion IDIFF=ETAB.'FOR_DIFF'; 'SI' IDIFF; MATDIF0 = ETAB.'MAT_DIF' ; MODDIF = ETAB.'MOD_DIF' ; 'FINS'; IRIB = 'NEG' ETAB.'RIBLO_T' 'INCONNU' ; 'SI' IRIB; RIBL_VAL = ETAB.'RIBLO_T' ; LISE_VAL = ETAB.'LISEA_T' ; 'FINS' ; * Parallelisation automatique des calculs ? IPARAL = 'EGA' ETAB.'PROCESSEURS' 'AUTOMATIQUE' ; PARTLOCA = 'EGA' ETAB.'PROCESSEURS' 'COMPORTEMENT' ; 'OPTI' 'PARA' IPARAL ; 'SI' IPARAL ; MODRTOT ='PART' 'ARLE' MODTOT NBPART ; MATRTOT0 ='REDU' MATTOT0 MODRTOT ; 'SI' ICONDU; MODRCOND='PART' 'ARLE' MODCOND NBPART ; MATRCOND='REDU' MATCOND0 MODRCOND ; 'FINS'; 'SI' ICONVE; MODRCON ='PART' 'ARLE' MODCONV NBPART ; MATRCON ='REDU' MATCONV0 MODRCON ; 'FINS'; 'SI' IADVEC; MODRADV ='PART' 'ARLE' MODADV NBPART ; MATRADV ='REDU' MATADV0 MODRADV ; 'FINS' ; 'SI' IRADI; MODRRAY ='PART' 'ARLE' MODRAY NBPART ; MATRRAY ='REDU' MATRAY0 MODRRAY ; 'FINS'; 'SI' ISOURQ; MODRSOQ ='PART' 'ARLE' MODSOQ NBPART ; MATRSOQ ='REDU' MATSOQ0 MODRSOQ ; 'FINS'; 'SI' IPHASE; MODRPHA ='PART' 'ARLE' MODPHA NBPART ; MATRPHA ='REDU' MATPHA0 MODRPHA ; 'FINS'; 'SI' IMETAL; MODRMET ='PART' 'ARLE' MODMET NBPART ; PHA_MET0='REDU' PHA_MET0 MODRMET ; 'FINS'; 'SI' ITHM1; MODRTHM ='PART' 'ARLE' MODTHM NBPART ; MATRTHM ='REDU' MATTHM0 MODRTHM ; 'FINS' ; 'SI' IDIFF ; MODRDIFF='PART' 'ARLE' MODDIF NBPART ; MATRDIFF='REDU' MATDIF0 MODRDIFF ; 'FINS' ; 'SINO' ; MODRTOT = MODTOT ; MATRTOT0 = MATTOT0 ; 'SI' ICONDU; MODRCOND= MODCOND ; MATRCOND= MATCOND0; 'FINS'; 'SI' ICONVE; MODRCON = MODCONV ; MATRCON = MATCONV0; 'FINS'; 'SI' IADVEC; MODRADV = MODADV ; MATRADV = MATADV0 ; 'FINS'; 'SI' IRADI; MODRRAY = MODRAY ; MATRRAY = MATRAY0 ; 'FINS'; 'SI' ISOURQ; MODRSOQ = MODSOQ ; MATRSOQ = MATSOQ0 ; 'FINS'; 'SI' IPHASE; MODRPHA = MODPHA ; MATRPHA = MATPHA0 ; 'FINS'; 'SI' IMETAL; MODRMET = MODMET ; 'SI' PARTLOCA ; MODCOMP1 = 'PART' 'ARLE' MODRMET (ETAB.'NBPART') ; 'FINSI' ; 'FINS'; 'SI' ITHM1; MODRTHM = MODTHM ; MATRTHM = MATTHM0 ; 'FINS'; 'SI' IDIFF; MODRDIFF = MODDIF ; MATRDIFF = MATDIF0 ; 'FINS' ; 'FINS' ; *------- Initialisation de la liste des temps a calculer --------- TE_CALC = ETAB.'TEM_CALC' ; DCALC ='DIME' TE_CALC ; ITE_IT = 0 ; *-------------- Calcul du premier pas de calcul ------------------- TEM0 = CONTI.'TEMPS' ; TEM1 ='EXTR' TE_CALC 1; T_PAS = TEM1 - TEM0 ; *-------------- modif pour recuperer le temps du dernier pas de calcul TEM_VAL = TEM1 ; *-------------- fin de modif ----------------------------------------- *---- Initialisation de la valeur du critere de fin d'iteration --- ZPREC1 = ETAB.'PRECISION' ; *--------- Initialisation du nombre d'iterations autorisees ------- 'SI' ('EXIS' ETAB 'MAXITERATION'); MAX1 = ETAB.'MAXITERATION'; 'SINO'; MAX1 = 150; 'FINS'; *-------- Recherche des variables selon lesquelles varie ---------- *---------------------- le champ de materiau ---------------------- * Si couplage, on regarde les caracteristiques variables du modele complet 'SI' ETAB.'COUPLAGE' ; LVAREX = 'EXTR' (ETAB.'CARACTERISTIQUES') 'DEVA'; 'SINON' ; LVAREX = 'EXTR' MATTOT0 'DEVA'; 'FINSI' ; ILVA = 'DIME' LVAREX; IMATCHG = 'EXIS' LVAREX 'TEMP' ; NONLIN1 = (('EGA' ILVA 1) 'ET' ('NON' IMATCHG)) 'OU' ('>EG' ILVA 2) 'OU' ETAB.'PROCEDURE_PARATHER' ; 'SI' (ETAB.'COUPLAGE' et nonlin1) ; CONTI=PRECED.'CONTINUATION'; *--- Creation du MCHAML contenant tous les parametres mecaniques -- *-------- Ces parametres sont determines au temps TEM0 ------------ *----- Ces parametres sont projetes sur le maillage thermique ----- DEP1 ='CHAN' 'CHAM' CONTI.'DEPLACEMENTS' MODMEC 'NOEUD'; CON1 ='CHAN' 'NOEUD' CONTI.'CONTRAINTES' MODMEC ; CHAR1_ME = DEP1 'ET' CON1 ; * 'SI' ('EXIS' CONTI 'VITESSES'); * VIT1 = 'CHAN' 'CHAM' CONTI.'VITESSES' MODMEC 'NOEUD'; * CHAR1_ME = CHAR1_ME 'ET' VIT1; * 'FINS'; 'SI' ('EXIS' CONTI 'VARIABLES_INTERNES'); VAR1 = CONTI.'VARIABLES_INTERNES' ; LMOCP1 = extr VAR1 comp ; VARXX = vide mchaml ; repe Bvar (dime LMOCP1) ; MOCPI1 = extr LMOCP1 &Bvar ; VARXXI1 = exco VAR1 MOCPI1 MOCPI1 ; VALXXI1 = extr VARXXI1 MOCPI1 1 1 1 ; si (ega (type VALXXI1) 'FLOTTANT') ; VARXXI1 = 'CHAN' 'NOEUD' VARXXI1 MODMEC ; VARXX = VARXX et VARXXI1 ; fins ; fin Bvar ; VAR1 = VARXX ; CHAR1_ME = CHAR1_ME 'ET' VAR1 ; * DEF1 ='CHAN' 'NOEUD' ETAB.'DEI_EST' MODMEC ; * CHAR1_ME = CHAR1_ME 'ET' VAR1 'ET' DEF1; 'FINS'; * En cas de maillages mecanique/thermique differents, * on projette les champs mecaniques sur le modele thermique 'SI' ETAB.'PROJECTION'; CHAR_ME ='CHAN' 'CHAM' ('PROI' MAILTOT CHAR1_ME) MODRTOT 'RIGIDITE'; 'SINO'; CHAR_ME ='CHAN' 'CHAM' ('CHAN' 'CHPO' CHAR1_ME MODMEC) MODRTOT 'RIGIDITE'; 'FINS'; 'FINS'; *-----------recherche des composantes de materiau qui varient et initialisation * --------- des logiques de recalcul des matrices.------------------- LCOREX = 'EXTR' MATTOT0 'COVA' ; IKDEP =('EXIS' LCOREX 'K ') 'OU' ('EXIS' LCOREX 'K1 ') 'OU' ('EXIS' LCOREX 'K11 ') ; ICDEP =('EXIS' LCOREX 'RHO ') 'OU' ('EXIS' LCOREX 'C ') 'OU' ('EXIS' LCOREX 'M ') ; IECDEP = 'EXIS' LCOREX 'H ' ; IKDDEP =('EXIS' LCOREX 'KD ') 'OU' ('EXIS' LCOREX 'KD1 ') 'OU' ('EXIS' LCOREX 'KD11') ; ICDDEP = 'EXIS' LCOREX 'CDIF' ; IKVITE = 'EXIS' LCOREX 'VITE' ; ICPCONS = ETAB.'CAPACONST' ; IKCONS = ETAB.'CONDCONST' ; 'SI' ITHM1 ; IKDEP= VRAI ; ICDEP= VRAI ; 'FINS' ; *------- Cas particulier ou il n'y a pas de CAPACITE ------------------* *- Ceci correspond au cas ou, au moins, une des 2 composantes 'C ' -* *- et/ou 'RHO ' n'est pas definie dans le materiau (facultatives). -* LCOMPM = 'EXTR' MATTOT0 'COMP' ; ICAPATH = ETAB.'FOR_THER' 'ET' ('EXIS' LCOMPM 'C ') 'ET' (('EXIS' LCOMPM 'RHO ') 'OU' ('EXIS' LCOMPM 'M ')); ICAPADI = IDIFF 'ET' ('EXIS' LCOMPM 'CDIF') ; ICAPA = ICAPATH 'OU' ICAPADI 'OU' ICPCONS ; 'SI' ('NON' ICAPATH) ; ICDEP = FAUX ; 'FINS' ; 'SI' ('NON' ICAPADI) ; ICDDEP = FAUX ; 'FINS' ; *---------- Prise en compte CAPACITE formulation thermohydrique ----- * Sciume Giuseppe (18-10-2023) 'SI' ETAB.'THM1' ; ICAPA = VRAI ; ICAPATH = VRAI ; 'FINS' ; *---------- Initialisation de l'unite de temperature -------------- 'SI' ('EXIS' ETAB 'CELSIUS'); ICELS = ETAB.'CELSIUS' 'ET' ETAB.'FOR_THER' ; 'SINO'; ICELS = FAUX; 'FINS'; *---------- Initialisation de la temperature de reference---------- 'SI' ICELS; TREF = 273.15 ; 'SINO'; TREF = 0. ; 'FINS'; ETAB.'TREF'=TREF; *----------- Initialisation du champ de temperatures ------------ CHTREF ='VIDE' 'CHPOINT' / 'DIFFUS' ; U0 ='VIDE' 'CHPOINT' / 'DIFFUS' ; 'SI' ETAB.'FOR_THER' ; U0 = CONTI.'TEMPERATURES'; 'SI' ICELS ; CHTREF =(0. * (U0 'ENLE' 'LX')) + TREF ; 'FINS' ; INOBLOT = 'EGA' ('DIME' ETAB.'BLOCAGES_THERMIQUES') 0 ; 'FINS' ; 'SI' IDIFF ; U0 = U0 'ET' CONTI.'CONCENTRATIONS'; INOBLOD = 'EGA' ('DIME' ETAB.'BLOCAGES_DIFFUSIONS') 0 ; 'FINS' ; ETAB.'THER_COURANT' = U0 ; U0MTREF = U0 ; U0 =(U0 'ENLE' 'LX'); U0 = U0 + CHTREF ; *---------- y-a-t-il definition des coefficients lambda ---------- * En regime stationnaire (sans CAPACITE), ou en presence d'advection on force LAMBDA1 a 1. * SINO on ne resout pas le bon probleme ! 'SI' (IADVEC 'OU' ('NON' ICAPA)) ; LAMBDA1 = 1. ; 'SINO'; 'SI' ( 'EXIS' ETAB 'RELAXATION_THETA' ) ; LAMBDA1 = ETAB.'RELAXATION_THETA' ; 'SINO' ; LAMBDA1 = 1. ; 'FINS' ; 'FINS' ; ETAB.'RELAXATION_THETA' = LAMBDA1 ; 'SI' (('ABS' (LAMBDA1 - 1.0)) ' Calcul du premier pas par la theta-methode ' ; 'FINS'; 'MESS' ' *** Donnees utilisees du probleme :'; 'MESS' ' > Champ de temperatures a l instant : ' TEM0; 'SI' NONLIN1; 'MESS' ' > K,C ou H variables.'; 'SINO'; 'MESS' ' > K,C et H constants.'; 'FINS'; 'SI' ICELS; 'MESS' ' > Unite de temperature utilisee : Celsius.'; 'SINO'; 'MESS' ' > Unite de temperature utilisee : Kelvin.'; 'FINS'; 'SI' ('EGA' ETAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 'MESS' ' > Coefficient de relaxation : ' LAMBDA1; 'SINO'; 'MESS' ' > Coefficient de relaxation pour la theta-methode : ' LAMBDA1 ; 'MESS' ' > Coefficient de relaxation pour la methode Dupont2 : ' ETAB.'RELAXATION_DUPONT' ; 'MESS' ' > Coefficient de sous-relaxation : ' LAMBDA2; 'FINS'; 'SI' (IPHASE 'OU' ISOLU); 'SI' (IPHASE 'ET' ISOLU) ; 'MESS' ' > Changement de phase ''PARFAIT'' et ''SOLUBILITE'' prevus.'; 'SINO' ; 'SI' IPHASE ; 'MESS' ' > Changement de phase ''PARFAIT'' prevu.'; 'SINO'; 'MESS' ' > Changement de phase ''SOLUBILITE'' prevu.'; 'FINS'; 'FINS' ; 'SINO'; 'MESS' ' > Pas de changement de phase prevu.'; 'FINS'; 'SI' ('NEG' ('DIME' ETAB.'BLOCAGES_THERMIQUES') 0); 'MESS' ' > Presence de temperatures imposees.'; 'SINO'; 'MESS' ' > Pas de temperatures imposees.'; 'FINS'; 'SI' ('NEG' ('DIME' ETAB.'BLOCAGES_DIFFUSIONS') 0); 'MESS' ' > Presence de concentrations imposees.'; 'SINO'; 'MESS' ' > Pas de concentrations imposees.'; 'FINS'; 'SI' ('EXIS' ETAB.'CHARGEMENT' 'Q '); 'MESS' ' > Presence de flux.'; 'SINO'; 'MESS' ' > Pas de presence de flux.'; 'FINS'; 'SI' ICONDU; 'MESS' ' > Presence de conduction'; 'SINO'; 'MESS' ' > Pas de presence de conduction '; 'FINS'; 'SI' ICONVE; 'MESS' ' > Presence de convection.'; 'SINO'; 'MESS' ' > Pas de terme de convection.'; 'FINS'; 'SI' IRADI; 'MESS' ' > Presence de rayonnement.'; 'SINO'; 'MESS' ' > Pas de presence de rayonnement.'; 'FINS'; 'SI' IADVEC; 'MESS' ' > Presence d advection.'; 'SINO'; 'MESS' ' > Pas de presence d advection'; 'FINS'; 'SI' ICPCONS ; 'MESS' ' > Presence d une capacite constante.'; 'FINS'; 'SI' IKCONS ; 'MESS' ' > Presence d une conductivite constante.'; 'FINS'; 'MESS' ' '; 'FINS'; ******************************************************************** * Boucle sur les pas de temps * ******************************************************************** 'REPETER' BOUC_SO ; ITE3 = &BOUC_SO; TEMM = (LAMBDA1 * TEM1) + ((1 - LAMBDA1) * TEM0); TH_COUR = U0MTREF ; ETAB.'THER_COURANT' = TH_COUR ; 'MESS' ' '; 'MESS' '---- Calcul du champ de temperature au temps :'TEM1; 'MESS' ' '; *---- initialisation du materiau 'SI' (NONLIN1 'OU' IMATCHG) ; *-------------- Cas de la temperature et du temps --------------- CHVAR ='CHAN' 'CHAM' TH_COUR MODRTOT 'RIGIDITE' ; CHVAR2 ='MANU' 'CHML' MODRTOT 'TEMP' TEMM 'RIGIDITE' ; CHVAR = CHVAR 'ET' CHVAR2 ; *-------------- Cas des variables mecaniques -------------------- *---- si il y a couplage on les "rentre" toutes dans CHVAR ------ 'SI' (ETAB.'COUPLAGE' et nonlin1) ; CHVAR = CHVAR 'ET' CHAR_ME; 'FINS'; *------------- Ajout cinetique thermique si metallurgie 'SI' IMETAL ; * list (maxi CHTPOI0) ; CHVAR = CHVAR 'ET' ('CHAN' 'CHAM' CHTPOI0 MODRTOT 'RIGIDITE') ; 'FINSI' ; *-------------- Mise a jour des variables externes -------------- 'SI' ETAB.'PROCEDURE_PARATHER' ; PARATHER PRECED TEMM ; * Remise en place des MCHAML sur les bons MMODELS car on suppose * que l'utilisateur ne connais pas tous les indices de ETAB. MATRTOT0 ='REDU' ETAB.'MAT_TOT' MODRTOT ; 'SI' ICONDU; MATRCOND='REDU' ETAB.'MAT_COND' MODRCOND; 'FINS'; 'SI' ICONVE; MATRCON ='REDU' ETAB.'MAT_CON' MODRCON ; 'FINS'; 'SI' IADVEC; MATRADV ='REDU' ETAB.'MAT_ADV' MODRADV ; 'FINS' ; 'SI' IRADI; MATRRAY ='REDU' ETAB.'MAT_RAY' MODRRAY ; 'FINS'; 'SI' IPHASE; MATRPHA ='REDU' ETAB.'MAT_PHA' MODRPHA ; 'FINS'; 'SI' ITHM1; MATRTHM ='REDU' ETAB.'MAT_THM' MODRTHM ; 'FINS' ; 'SI' IDIFF ; MATRDIFF='REDU' ETAB.'MAT_DIF' MODRDIFF; 'FINS' ; 'FINS' ; *-------------- Cas des autres variables -------------------- 'REPETER' BOU_NU2 ILVA; ITE2 = &BOU_NU2; MOTI = 'EXTR' LVAREX ITE2; 'SI' ('EXIS' LPRIM2 MOTI) ; 'ITER' BOU_NU2 ; 'FINS' ; 'SI' (ETAB.'COUPLAGE' et nonlin1) ; 'SI' ('EXIS' CHAR_ME MOTI ); 'SI' ('NEG' LAMBDA1 0.); 'MESS' '*** Le materiau thermique depend de parametres mecaniques'; 'ERRE' '*** Il faut initialiser SOUS-RELAXATION a 0.'; 'FINS'; 'ITERER' BOU_NU2; 'FINS'; 'FINS'; 'SI' IMETAL ; 'SI' ('EGA' MOTI 'TPOI') ; 'ITER' BOU_NU2 ; 'FINS' ; 'FINS' ; 'SI' ('EXIS' ETAB.'CHARGEMENT' MOTI); CH_1 = 'TIRE' ETAB.'CHARGEMENT' MOTI TEMM; TYP_1 = 'TYPE' CH_1; * on suppose que les chargements qui ne sont pas d'origine mecanique * sont appuyes sur le maillage thermique. 'SI' ('EGA' TYP_1 'CHPOINT'); CHVAR2 = 'CHAN' 'CHAM' CH_1 MODRTOT 'RIGIDITE'; 'SINO'; CHVAR2 = 'CHAN' 'RIGIDITE' CH_1 MODRTOT; 'FINS'; CHVAR = CHVAR + CHVAR2; 'SINO'; 'MESS' '*** Il manque une donnee du chargement ***'; 'MESS' '*** Variable concernee : 'MOTI; 'ERREUR' ' '; 'FINS'; 'FIN' BOU_NU2; 'FINS'; *----------------- Calcul du champ de materiau a T= U0 ----------------- 'SI' (NONLIN1 'OU' IMATCHG) ; CHVAR1 ='REDU' CHVAR MODRTOT; CHMAT ='VARI' 'NUAG' MODRTOT MATRTOT0 CHVAR1 'RIGIDITE'; 'SI' (IDIFF 'OU' ETAB.'THE1') ; CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 'SI' ITHM1 ; ma ff0 = @MATETHM MODRTHM TH_COUR ; CHMAT1 = CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ; 'FINS' ; 'FINS' ; 'SINO'; CHMAT = MATRTOT0 ; 'SI' (IDIFF 'OU' ETAB.'THE1') ; CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 'SI' ITHM1 ; ma ff0 = @MATETHM MODRTHM TH_COUR ; CHMAT1 = CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ; 'FINS' ; 'FINS' ; 'FINS'; * On conserve le materiau instancie CHMAT dans ETAB (Pour PAS_RAYO...) ETAB.'CHMAT' ='REDU' CHMAT MODTOT ; MATRTOT ='REDU' CHMAT1 MODRTOT ; 'SI' ICONDU; MATRCOND='REDU' CHMAT1 MODRCOND; 'FINS'; 'SI' ICONVE; MATRCON ='REDU' CHMAT1 MODRCON; 'FINS'; 'SI' IRADI; MATRRAY ='REDU' CHMAT1 MODRRAY; 'FINS'; 'SI' IADVEC; MATRADV ='REDU' CHMAT1 MODRADV; 'FINS' ; 'SI' ISOURQ ; MATRSOQ ='REDU' CHMAT1 MODRSOQ ; 'FINS' ; 'SI' IPHASE; MATRPHA ='REDU' CHMAT1 MODRPHA; 'FINS'; 'SI' ITHM1; MATRTHM ='REDU' CHMAT1 MODRTHM ; 'FINS' ; 'SI' IDIFF ; MATRDIFF='REDU' CHMAT1 MODRDIFF; 'FINS' ; *--- Calcul des matrices d'iteration On les recalcule a cause de perso IKDETO=FAUX;IBCONS=FAUX; 'SI' ICONDU ; KDETO ='COND' MODRCOND MATRCOND; IKDETO= VRAI; 'FINS'; 'SI' ITHM1; KDCC ='COND' MODRTHM MATRTHM; 'SI' IKDETO; KDETO=KDETO 'ET' KDCC; 'SINO'; KDETO=KDCC; IKDETO=VRAI; 'FINS'; 'FINS'; 'SI' (('NON' IKDEP) 'ET' IKDETO); BCONS= KDETO; IBCONS=VRAI; 'FINS'; 'SI' ICONVE; KDCCG= 'COND' MODRCON MATRCON; 'SI' IKDETO; KDETO=KDETO 'ET' KDCCG; 'SINO'; KDETO=KDCCG; IKDETO=VRAI; 'FINS'; 'SI' ('NON' IECDEP); 'SI' IBCONS ; BCONS=BCONS 'ET' KDCCG; 'SINO'; BCONS=KDCCG; IBCONS=VRAI; 'FINS'; 'FINS'; 'FINS'; 'SI' IADVEC; * la conduction de du model d'advection est deja calculer grace a icondu KDCC2= 'ADVE' MODRADV MATRADV; 'SI' IKDETO; KDETO=KDETO 'ET' KDCC2; 'SINO'; KDETO= KDCC2 ; IKDETO=VRAI; 'FINS'; 'SI' ('NON' IKVITE); 'SI' IBCONS; BCONS = BCONS 'ET' KDCC2; 'SINO'; BCONS= KDCC2; IBCONS=VRAI; 'FINS'; 'FINS'; 'FINS'; 'SI' IDIFF; KDEDI = 'COND' MODRDIFF MATRDIFF ; 'SI' IKDETO; KDETO=KDETO 'ET' KDEDI; 'SINO'; KDETO=KDEDI; IKDETO=VRAI; 'FINS'; 'SI' ('NON' IKDDEP); 'SI' IBCONS; BCONS=BCONS 'ET' KDEDI; 'SINO'; BCONS = KDEDI; IBCONS= VRAI ; 'FINS'; 'FINS'; 'FINS' ; 'SI' IKCONS ; 'SI' IKDETO ; KDETO = KDETO 'ET' ETAB.'CONDUCTIVITE_CONSTANTE' ; 'SINO' ; KDETO = ETAB.'CONDUCTIVITE_CONSTANTE' ; KDETO = VRAI ; 'FINS' ; 'SI' IBCONS; BCONS=BCONS 'ET' ETAB.'CONDUCTIVITE_CONSTANTE' ; 'SINO'; BCONS= ETAB.'CONDUCTIVITE_CONSTANTE' ; IBCONS=VRAI ; 'FINS'; 'FINS' ; * AA = KDETO * LAMBDA1 ; CCONS = AA ; BB = KDETO ; 'SI' ('NON' IBCONS) ; BCONS = EXTR KDETO 'RIGI' 'MULT'; IBCONS=VRAI; 'FINS'; * 'SI' ICAPA ; ETAB.'CTHE_COURANTE' = 'VIDE' 'RIGIDITE'/'RIGIDITE' ; ETAB.'CDIF_COURANTE' = 'VIDE' 'RIGIDITE'/'RIGIDITE' ; 'SI' ICAPATH ; 'SI' ICONDU; CDET = 'CAPA' MODRCOND MATRCOND ; ETAB.'CTHE_COURANTE' = ETAB.'CTHE_COURANTE' et CDET ; CDET = CDET / T_PAS; AA = CDET 'ET' AA ; 'SI' ICDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ; 'FINS'; 'SI' ITHM1; CDET = 'CAPA' MODRTHM MATRTHM ; ETAB.'CTHE_COURANTE' = ETAB.'CTHE_COURANTE' et CDET ; CDET = CDET / T_PAS; AA = CDET 'ET' AA ; 'SI' ICDEP; CCONS = CDET 'ET' CCONS ; 'FINS' ; 'FINS'; 'FINS'; 'SI' ICAPADI ; CDET = 'CAPA' MODRDIFF MATRDIFF ; ETAB.'CDIF_COURANTE' = ETAB.'CDIF_COURANTE' et CDET ; CDET = CDET / T_PAS; AA = CDET 'ET' AA ; 'SI' ICDDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ; 'FINS' ; ETAB.'CAPA_COURANTE' = ETAB.'CTHE_COURANTE' et ETAB.'CDIF_COURANTE' ; 'SI' ICPCONS ; ETAB.'CAPA_COURANTE' = ETAB.'CAPA_COURANTE' et ETAB.'CAPACITE_CONSTANTE' ; CDET = ETAB.'CAPACITE_CONSTANTE' / T_PAS ; AA = CDET 'ET' AA ; 'SI' ICDDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ; 'FINS' ; 'FINS' ; *----------------- y-a-t-il des blocages --------------------------- * on le laisse ici car perso peut l'avoir modifie de memepour les autres * matrices IKBLOC=FAUX; 'SI' ETAB.'FOR_THER' ; IKBLOC=VRAI; MAT_BLOC = ETAB.'BLOCAGES_THERMIQUES' ; 'SI' INOBLOT ; MAT_BLOC = 'EXTR' KDETO 'RIGI' 'MULT' ; 'FINS' ; MAT_BLTH = MAT_BLOC ; 'FINS' ; 'SI' IDIFF ; MAT_BLDI = ETAB.'BLOCAGES_DIFFUSIONS' ; 'SI' INOBLOD ; MAT_BLDI = 'EXTR' KDEDI 'RIGI' 'MULT' ; 'FINS' ; 'SI' IKBLOC; MAT_BLOC = MAT_BLOC 'ET' MAT_BLDI; 'SINO'; MAT_BLOC = MAT_BLDI; 'FINS'; 'FINS' ; AA = AA 'ET' MAT_BLOC ; MAT_CHPO = MAT_BLOC * U0 ; SECON = MAT_CHPO ; *------------------- y-a-t-il des temperatures imposees-------- ICHUIMP=FAUX; 'SI' ETAB.'FOR_THER' ; 'SI' ('EXIS' ETAB.'CHARGEMENT' 'TIMP') ; CH_UIMP = 'TIRE' ETAB.'CHARGEMENT' 'TIMP' TEM1 ; 'SI' ICELS ; CH_UIMP = CH_UIMP + TREF ; 'FINS' ; ICHUIMP=VRAI; 'FINS'; 'FINS'; 'SI' IDIFF; 'SI' ('EXIS' ETAB.'CHARGEMENT' 'CIMP') ; CH_CI = 'TIRE' ETAB.'CHARGEMENT' 'CIMP' TEM1 ; 'SI' ICHUIMP; CH_UIMP= CH_UIMP 'ET' CH_CI; 'SINO'; CH_UIMP=CH_CI; 'FINS'; ICHUIMP=VRAI; 'FINS'; 'FINS'; 'SI' ('NON' ICHUIMP); CH_UIMP='DEPI' MAT_BLOC 0.; 'FINS'; MAT_CHPO = CH_UIMP - MAT_CHPO ; SECON = CH_UIMP - SECON ; *---------- Si convection on cherche TE ------------ *----------calcul convection second membre -------------- 'SI' ICONVE; 'SI' ('EXIS' ETAB.'CHARGEMENT' 'TECO' ) ; CH_TEC ='TIRE' ETAB.'CHARGEMENT' 'TECO' TEMM ; 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINS' ; CHAL_TEI ='CONV' MODRCON MATRCON CH_TEC ; MAT_CHPO = MAT_CHPO + CHAL_TEI; 'SI' ('NON' IECDEP) ; SECON = SECON + CHAL_TEI; 'FINS' ; 'SINO' ; 'SI' ('EXIS' MATRCON 'TC') ; CH_TEC = 'EXCO' MATRCON 'TC' 'T' ; CH_TEC = 'CHAN' 'CHPO' MODRCON CH_TEC ; 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINS' ; CHAL_TEI ='CONV' MODRCON MATRCON CH_TEC ; MAT_CHPO = MAT_CHPO + CHAL_TEI; 'SI' ('NON' IECDEP) ; SECON = SECON + CHAL_TEI; 'FINS' ; 'FINS' ; 'FINS'; 'FINS'; *--------- SI terme de flux ------------------------------- 'SI' ITHM1 ; ma FTGC = @MATETHM MODRTHM TH_COUR ; MAT_CHPO = MAT_CHPO - FTGC; * Cas particulier pour le modele BETON_THM (Sciume 2025) 'SI' ('NON' ('EXIS' PRECED 'VARIABLES_THM')) ; SECON = SECON - FTGC; 'FINS'; 'FINS'; 'REPE' Boucle NBDUA1 ; MOTCOMP = 'EXTR' LDUAL1 &Boucle ; 'SI' ('EXIS' ETAB.'CHARGEMENT' MOTCOMP) ; CH_DUA = 'TIRE' ETAB.'CHARGEMENT' MOTCOMP TEMM ; MAT_CHPO = MAT_CHPO + CH_DUA ; SECON = SECON + CH_DUA ; 'FINS' ; 'FIN' Boucle ; *------------- calcul des termes rayonnement -------------------------- 'SI' IRADI ; IAPPEL = 3 ; t_rayo = PAS_RAYO PRECED TEMM IAPPEL ; 'SI' ('EXIS' t_rayo 'ADDI_MATRICE') ; RIG_RAYO = LAMBDA1 '*' t_rayo.'ADDI_MATRICE'; ccons = RIG_RAYO 'ET' ccons ; aa = RIG_RAYO 'ET' aa ; bb = t_rayo.'ADDI_MATRICE' 'ET' bb; 'FINS'; 'SI' ('EXIS' t_rayo 'ADDI_SECOND') ; MAT_CHPO = MAT_CHPO 'ET' t_rayo.'ADDI_SECOND' ; 'FINS'; 'SI' ('EXIS' t_rayo 'RAYO_VALEUR'); ETAB.'RAYONNEMENT' = t_rayo.'RAYO_VALEUR' ; 'FINS'; t_rayo = 'MOT' 'INCONNU' ; 'FINS'; *------------- calcul des sources de chaleur -------------------- 'SI' ISOURQ ; CHQ1 = SOUR MODRSOQ MATRSOQ ; MAT_CHPO = MAT_CHPO 'ET' CHQ1 ; SECON = SECON 'ET' CHQ1 ; 'FINS'; *------------- en cas de procedure utilisateur CHARTHER -------------- 'SI' etab.'PROCEDURE_CHARTHER' ; taat = charther preced temm ; 'SI' ('EXIS' taat 'ADDI_MATRICE') ; mat_z = lambda1 '*' taat.'ADDI_MATRICE' ; ccons = mat_z 'ET' ccons ; aa = mat_z 'ET' aa ; bb = taat.'ADDI_MATRICE' 'ET' bb ; 'FINS'; 'SI' ('EXIS' taat 'ADDI_SECOND') ; MAT_CHPO = MAT_CHPO 'ET' taat.'ADDI_SECOND' ; 'FINS'; oublier taat ; 'FINS'; * Pour le Changement de phase 'PARFAIT' : Blocages et Jeux 'SI' IPHASE; AA = AA 'ET' BLOPHA ; Q_LAT_INT=('SOUR' MODPHA ('EXCO' MATTOT0 'DUAL') MATTOT0 'ELEM') / T_PAS ; JEU_PHAS = 'PHAJ' MODTOT MATTOT0 U0MTREF ; MAT_CHPO = MAT_CHPO + JEU_PHAS ; SECON = SECON + JEU_PHAS ; 'FINS'; * Pour le Changement de phase 'SOLUBILITE' : Blocages et Jeux 'SI' ISOLU; AA = AA 'ET' BLOSOL ; JEU_SOL = 'PHAJ' MODTOT MATRTOT0 U0MTREF ; MAT_CHPO = MAT_CHPO + JEU_SOL ; SECON = SECON + JEU_SOL ; 'FINS'; *--------------- Calcul du premier residu -------------------------- B3 = BB * U0 ; MAT_CHPO = MAT_CHPO - B3 ; ******************************************************************** * Boucle sur les iterations * ******************************************************************** * on peut mettre n'importe quoi c'est pour * ne pas faire de tests dans la boucle ZNACCE = 2 ; ZITAC = 0 ; IT = 0 ; ITDEP = 3 ; 'SI' IPHASE; ITDEP=5; 'FINS'; ITACC = 0 ; ACFP1 = MAT_CHPO * 0. ; ACFP2 = ACFP1 ; MAT_CHPP= ACFP1 ; ACFP3 = ACFP1 ; ACFEP1 = ACFP1 ; ACFEP2 = ACFP1 ; CORREC = 0.; DU0 ='VIDE' 'CHPOINT' / 'DIFFUS' ; DU1 ='VIDE' 'CHPOINT' / 'DIFFUS' ; EXCPHA ='VIDE' 'CHPOINT' / 'DISCRET'; 'REPETER' BOU_IT1; * IT est le compteur de BOU_IT1, ITACC doit etre =< 0 pour qu'on accelere IT = IT + 1 ; ITACC = ITACC - 1 ; ZITAC = ZITAC + 1 ; ITE_IT = &BOU_IT1; * Nombre max d'iteration autorise est-il depasse? 'SI' (ITE_IT '>' MAX1); 'SAUTER' 1 'LIGNE' ; 'MESS' '*** LE CALCUL N A PAS CONVERGE ***'; ERR_VAL= VRAI; 'QUIT' BOUC_SO ; 'FINS'; AUTORISA= VRAI; BB = BCONS;CC=CCONS; * *--------------------------------------------------------------------- * La force motrice de l'iteration est fixee: RESIDU * on va calculer un nouveau champ de deplacement * * calcul de l'increment de l'increment de deplacement zdep1 * par resolution lineaire * * * acceleration de convergence * CORRECP = CORREC; CORREC = 0; ACFP0 = (MAT_CHPO - MAT_CHPP) 'ENLE' FLX ; ACFEP0 = ACFP0; ACFEP0 = ACFEP0 - CORRECP ; 'SI' ('MULT' IT ZNACCE) ; 'SI' (IT > ITDEP); CORREC = 'ACT3' ACFEP2 ACFEP1 ACFEP0 ACFP3 ACFP2 ACFP1 ACFP0 ; MAT_CHPO = MAT_CHPO - CORREC ; 'FINS'; 'FINS'; MAT_CHPP=MAT_CHPO ; SI (IT > 3); 'DETR' ACFP3; 'DETR' ACFEP2; 'FINS'; ACFP3 = ACFP2 ; ACFP2 = ACFP1 ; ACFP1 = ACFP0 ; ACFEP2 = ACFEP1 ; ACFEP1 = ACFEP0 ; MENAGE; 'SOUC' 0; 'SI' IRIB ; 'SI' IPHASE; DU1 BID BID BID BID = 'RESO' AA MAT_CHPO 'INIB' RIBL_VAL LISE_VAL EXCPHA ; 'SINO'; DU1 BID BID BID = 'RESO' AA MAT_CHPO 'INIB' RIBL_VAL LISE_VAL ; 'FINS'; 'SINO'; 'SI' IPHASE; DU1 = 'RESO' AA MAT_CHPO EXCPHA ; 'SINO'; DU1 = 'RESO' AA MAT_CHPO ; * mess ' ITeration ' it; * aaa= extr aa rigi mult ; mess ' aaa ' ; list aaa; * mess ' mat_chpo' ; list mat_chpo; * mess ' du1 ' ; list du1; 'FINS'; 'FINS'; ZRAID_T = 'EXTR' AA 'CONT'; 'SI' ('EXIS' ZRAID_T 'NITER'); RIBL_VAL = ZRAID_T.7; LISE_VAL = ZRAID_T.6; IRIB=VRAI; 'FINS'; 'SI' IPHASE; * Flux generalises ('LX') EXCPHA ='EXCP' MODTOT MATPHA0 PROPHA0 Q_LAT_INT U0MTREF DU1 ; 'SOUC' 0; PROPHA1 ='PROP' MODTOT PROPHA0 Q_LAT_INT DU1 ; AUTORISA=(ITE_IT '>' 1) 'ET' ('NON' ('SOUC')) ; 'FINS'; * 'SI' ISOLU; ** Flux generalises ('LX') * EXCPHA =('EXCS' MODTOT CHMAT U0MTREF DU1) 'ET' EXCPHA ; * AUTORISA=(ITE_IT '>' 1) 'ET' ('NON' ('SOUC')) ; * 'FINS'; U1 = U0 + DU1 ; * Si modele BETON_THM, on stocke les resultats (Sciume 2025) 'SI' ETAB.'THM1' ; ETAB.'HT_SOL1' = U0; ETAB.'HT_SOL2' = U1; 'FINS'; *-- Actualisation cinetique thermique si metallurgie 'SI' IMETAL ; CHTPOI0 = (DU1 'EXCO' 'T' 'TPOI') / T_PAS ; 'FINSI' ; 'SI' ('EGA' I_LAMBD1 0) ; U_BOU1 = (LAMBDA1 * (U1 'ENLE' 'LX')) + ((1 - LAMBDA1) * U0) + ('EXCO' DU1 'LX' 'NOID' 'LX'); 'SINO' ; 'SI' ('EGA' I_LAMBD1 1) ; U_BOU1 = U0 ; 'FINS' ; 'SI' ('EGA' I_LAMBD1 2) ; U_BOU1 = (0.5 * (U0 + (U1 'ENLE' 'LX'))) + ('EXCO' DU1 'LX' 'NOID' 'LX') ; 'FINS' ; 'SI' ('EGA' I_LAMBD1 3) ; U_BOU1 = U1 ; 'FINS' ; 'FINS' ; TH_COUR = U_BOU1 - CHTREF; ETAB.'THER_COURANT' = TH_COUR ; * Calcul des Proportions de Phases (Modele Metallurgique par T.L. en mai 2018) 'SI' IMETAL ; CHT0 ='CHAN' 'CHAM' ('EXCO' U0 'T' 'T') MODRMET ; CHT1 ='CHAN' 'CHAM' ('EXCO' U1 'T' 'T') MODRMET ; CHETPS0 ='MANU' 'CHML' MODRMET 'TEMP' tem0 'STRESSES' ; CHETPS1 ='MANU' 'CHML' MODRMET 'TEMP' tem1 'STRESSES' ; si PARTLOCA ; che11 = assi tous redu (PHA_MET0 'ET' CHETPS0 'ET' CHT0 'ET' CHMAT) MODCOMP1 ; che22 = assi tous redu ( CHETPS1 'ET' CHT1 'ET' CHMAT) MODCOMP1 ; PHA_MET1 = assi tous 'COMP' MODCOMP1 che11 che22 ; PHA_MET1 = (etg PHA_MET1) redu MODRMET ; che11 che22 = 0 0 ; sinon ; PHA_MET1 = 'COMP' MODRMET (PHA_MET0 'ET' CHETPS0 'ET' CHT0 'ET' CHMAT) ( CHETPS1 'ET' CHT1 'ET' CHMAT ) ; finsi ; 'FINS' ; *-------- Calcul du critere de fin d'iteration ------------------- DDU_SANS ='EXCO' ('ABS' (DU1 - DU0)) LPRIM1 ; 'SI' LOG_TOL ; ZPREC3 ='MAXI' DDU_SANS ; 'MESS' ' Iteration numero :' ITE_IT/23 ' Critere absolu :' ZPREC3 ; CRITABS ='MAXI' ('MASQ' (DDU_SANS - TTOL) 'SUPE' 0.D0) ; 'SI' ((CRITABS '