* TRANSNON PROCEDUR MB234859 24/09/11 21:15:04 12008 *--------------------------------------------------------------------------------* * * * 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 ; ETAB = PRECED.'WTABLE'; CONTI = PRECED.'CONTINUATION'; ESTIM = PRECED.'ESTIMATION'; NBPART = ETAB.'NBPART'; LPRIM1 = ETAB.'PRIM_TOT' ; LDUAL1 = ETAB.'DUAL_TOT' ; * Recuperation des tolerence absolues (Tout est dans l'indice TTOL) LOG_TOL = VRAI ; TTOL = ETAB.'TTOL' ; 'SINO' ; LOG_TOL = FAUX ; 'FINS' ; * 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 ; MODTOT = ETAB.'MOD_TOT' ; 'COMM' 'Formulation THERMIQUE & THERMOHYDRIQUE & DIFFUSION & CHANGEMENT_PHASE' ; * -------------- 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'; CTE_SB = 5.67037321E-8 ; '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' ; 'SI' IPARAL ; 'SI' ICONDU; 'FINS'; 'SI' ICONVE; 'FINS'; 'SI' IADVEC; 'FINS' ; 'SI' IRADI; 'FINS'; 'SI' ISOURQ; 'FINS'; 'SI' IPHASE; 'FINS'; 'SI' IMETAL; 'FINS'; 'SI' ITHM1; 'FINS' ; 'SI' IDIFF ; '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 ; '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' ; ITE_IT = 0 ; *-------------- Calcul du premier pas de calcul ------------------- TEM0 = CONTI.'TEMPS' ; 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 ------- 'SINO'; 'FINS'; *-------- Recherche des variables selon lesquelles varie ---------- *---------------------- le champ de materiau ---------------------- * Si couplage, on regarde les caracteristiques variables du modele complet 'SI' ETAB.'COUPLAGE' ; 'SINON' ; 'FINSI' ; 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 ----- CHAR1_ME = DEP1 'ET' CON1 ; * 'SI' ('EXIS' CONTI 'VITESSES'); * VIT1 = 'CHAN' 'CHAM' CONTI.'VITESSES' MODMEC 'NOEUD'; * CHAR1_ME = CHAR1_ME 'ET' VIT1; * 'FINS'; VAR1 = CONTI.'VARIABLES_INTERNES' ; 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'; 'SINO'; 'FINS'; 'FINS'; *-----------recherche des composantes de materiau qui varient et initialisation * --------- des logiques de recalcul des matrices.------------------- 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). -* ICAPA = ICAPATH 'OU' ICAPADI 'OU' ICPCONS ; 'SI' ('NON' ICAPATH) ; ICDEP = FAUX ; 'FINS' ; 'SI' ('NON' ICAPADI) ; ICDDEP = FAUX ; 'FINS' ; *---------- Initialisation de l'unite de temperature -------------- 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 ------------ 'SI' ETAB.'FOR_THER' ; U0 = CONTI.'TEMPERATURES'; 'SI' ICELS ; 'FINS' ; 'FINS' ; 'SI' IDIFF ; U0 = U0 'ET' CONTI.'CONCENTRATIONS'; 'FINS' ; ETAB.'THER_COURANT' = U0 ; U0MTREF = U0 ; 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'; LAMBDA1 = ETAB.'RELAXATION_THETA' ; 'SINO' ; LAMBDA1 = 1. ; 'FINS' ; 'FINS' ; ETAB.'RELAXATION_THETA' = LAMBDA1 ; 'SI' ('<EG' (LAMBDA1 - 1.0) 1.E-6) ; I_LAMBD1 = 3 ; 'SINO' ; 'SI' ('<EG' (LAMBDA1 - 0.5) 1.E-6) ; I_LAMBD1 = 2 ; 'SINO' ; 'SI' ('<EG' LAMBDA1 1.E-6) ; I_LAMBD1 = 1 ; 'SINO' ; I_LAMBD1 = 0 ; 'FINS' ; 'FINS' ; 'FINS' ; *---- En cas de rayonnement : recalcul des facteurs de forme ----------- *---- Si geometrie modifiee ou s'il n'existent pas, -------------- 'SI' IRADI ; ETAB.'CHMAT' = MATTOT ; IAPPEL = 2 ; 'FINS' ; ******************************************************************** * Rappel des donnees du probleme * ******************************************************************** 'SI' ETAB.'MESSTHER' ; ETAB.'MESSTHER' = FAUX ; 'SI' ICAPA ; 'SINO' ; 'FINS' ; 'SI' ('EGA' ETAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 'SINO'; 'FINS'; 'SI' NONLIN1; 'SINO'; 'FINS'; 'SI' ICELS; 'SINO'; 'FINS'; 'SI' ('EGA' ETAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 'SINO'; 'FINS'; 'SI' (IPHASE 'OU' ISOLU); 'SI' (IPHASE 'ET' ISOLU) ; 'SINO' ; 'SI' IPHASE ; 'SINO'; 'FINS'; 'FINS' ; 'SINO'; 'FINS'; 'SINO'; 'FINS'; 'SINO'; 'FINS'; 'SINO'; 'FINS'; 'SI' ICONDU; 'SINO'; 'FINS'; 'SI' ICONVE; 'SINO'; 'FINS'; 'SI' IRADI; 'SINO'; 'FINS'; 'SI' IADVEC; 'SINO'; 'FINS'; 'SI' ICPCONS ; 'FINS'; 'SI' IKCONS ; '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' ' '; *---- initialisation du materiau 'SI' (NONLIN1 'OU' IMATCHG) ; *-------------- Cas de la temperature et du temps --------------- 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) ; '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. 'SI' ICONDU; 'FINS'; 'SI' ICONVE; 'FINS'; 'SI' IADVEC; 'FINS' ; 'SI' IRADI; 'FINS'; 'SI' IPHASE; 'FINS'; 'SI' ITHM1; 'FINS' ; 'SI' IDIFF ; 'FINS' ; 'FINS' ; *-------------- Cas des autres variables -------------------- 'REPETER' BOU_NU2 ILVA; ITE2 = &BOU_NU2; 'ITER' BOU_NU2 ; 'FINS' ; 'SI' (ETAB.'COUPLAGE' et nonlin1) ; 'SI' ('NEG' LAMBDA1 0.); 'MESS' '*** Le materiau thermique depend de parametres mecaniques'; 'FINS'; 'ITERER' BOU_NU2; 'FINS'; 'FINS'; 'SI' IMETAL ; 'SI' ('EGA' MOTI 'TPOI') ; 'ITER' BOU_NU2 ; 'FINS' ; 'FINS' ; * on suppose que les chargements qui ne sont pas d'origine mecanique * sont appuyes sur le maillage thermique. 'SI' ('EGA' TYP_1 'CHPOINT'); 'SINO'; 'FINS'; CHVAR = CHVAR + CHVAR2; 'SINO'; 'ERREUR' ' '; 'FINS'; 'FIN' BOU_NU2; 'FINS'; *----------------- Calcul du champ de materiau a T= U0 ----------------- 'SI' (NONLIN1 'OU' IMATCHG) ; 'SI' (IDIFF 'OU' ETAB.'THE1') ; 'SI' ITHM1 ; CHMAT1 = CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; 'FINS' ; 'FINS' ; 'SINO'; CHMAT = MATRTOT0 ; 'SI' (IDIFF 'OU' ETAB.'THE1') ; 'SI' ITHM1 ; CHMAT1 = CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; 'FINS' ; 'FINS' ; 'FINS'; * On conserve le materiau instancie CHMAT dans ETAB (Pour PAS_RAYO...) 'SI' ICONDU; 'FINS'; 'SI' ICONVE; 'FINS'; 'SI' IRADI; 'FINS'; 'SI' IADVEC; 'FINS' ; 'SI' ISOURQ ; 'FINS' ; 'SI' IPHASE; 'FINS'; 'SI' ITHM1; 'FINS' ; 'SI' IDIFF ; 'FINS' ; *--- Calcul des matrices d'iteration On les recalcule a cause de perso IKDETO=FAUX;IBCONS=FAUX; 'SI' ICONDU ; IKDETO= VRAI; 'FINS'; 'SI' ITHM1; '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; '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 'SI' ('NON' IKVITE); 'SI' IKDETO; KDETO=KDETO 'ET' KDCC2; 'SINO'; KDETO= KDCC2 ; IKDETO=VRAI; 'FINS'; 'SI' IBCONS; BCONS = BCONS 'ET' KDCC2; 'SINO'; BCONS= KDCC2; IBCONS=VRAI; 'FINS'; 'FINS'; 'FINS'; 'SI' IDIFF; '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) ; 'FINS'; * 'SI' ICAPA ; 'SI' ICAPATH ; 'SI' ICONDU; 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; 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 ; 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 ; 'FINS' ; MAT_BLTH = MAT_BLOC ; 'FINS' ; 'SI' IDIFF ; MAT_BLDI = ETAB.'BLOCAGES_DIFFUSIONS' ; 'SI' INOBLOD ; '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' ICELS ; CH_UIMP = CH_UIMP + TREF ; 'FINS' ; ICHUIMP=VRAI; 'FINS'; 'FINS'; 'SI' IDIFF; 'SI' ICHUIMP; CH_UIMP= CH_UIMP 'ET' CH_CI; 'SINO'; CH_UIMP=CH_CI; 'FINS'; ICHUIMP=VRAI; 'FINS'; 'FINS'; 'SI' ('NON' ICHUIMP); 'FINS'; MAT_CHPO = CH_UIMP - MAT_CHPO ; SECON = CH_UIMP - SECON ; *---------- Si convection on cherche TE ------------ *----------calcul convection second membre -------------- 'SI' ICONVE; 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINS' ; MAT_CHPO = MAT_CHPO + CHAL_TEI; 'SI' ('NON' IECDEP) ; SECON = SECON + CHAL_TEI; 'FINS' ; 'SINO' ; 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINS' ; MAT_CHPO = MAT_CHPO + CHAL_TEI; 'SI' ('NON' IECDEP) ; SECON = SECON + CHAL_TEI; 'FINS' ; 'FINS' ; 'FINS'; 'FINS'; *--------- SI terme de flux ------------------------------- 'SI' ITHM1 ; MAT_CHPO = MAT_CHPO - FTGC; SECON = SECON - FTGC; 'FINS'; 'REPE' Boucle NBDUA1 ; MAT_CHPO = MAT_CHPO + CH_DUA ; SECON = SECON + CH_DUA ; 'FINS' ; 'FIN' Boucle ; *------------- calcul des termes rayonnement -------------------------- 'SI' IRADI ; IAPPEL = 3 ; 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'; MAT_CHPO = MAT_CHPO 'ET' t_rayo.'ADDI_SECOND' ; 'FINS'; ETAB.'RAYONNEMENT' = t_rayo.'RAYO_VALEUR' ; 'FINS'; 'FINS'; *------------- calcul des sources de chaleur -------------------- 'SI' ISOURQ ; MAT_CHPO = MAT_CHPO 'ET' CHQ1 ; SECON = SECON 'ET' CHQ1 ; 'FINS'; *------------- en cas de procedure utilisateur CHARTHER -------------- 'SI' etab.'PROCEDURE_CHARTHER' ; mat_z = lambda1 '*' taat.'ADDI_MATRICE' ; ccons = mat_z 'ET' ccons ; aa = mat_z 'ET' aa ; bb = taat.'ADDI_MATRICE' 'ET' bb ; 'FINS'; 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 ; 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 ; 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.; '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? 'SAUTER' 1 'LIGNE' ; 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; ACFEP0 = ACFP0; ACFEP0 = ACFEP0 - CORRECP ; 'SI' (IT > ITDEP); 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; 'SI' IRIB ; 'SI' IPHASE; 'SINO'; 'FINS'; 'SINO'; 'SI' IPHASE; 'SINO'; * mess ' ITeration ' it; * aaa= extr aa rigi mult ; mess ' aaa ' ; list aaa; * mess ' mat_chpo' ; list mat_chpo; * mess ' du1 ' ; list du1; 'FINS'; 'FINS'; RIBL_VAL = ZRAID_T.7; LISE_VAL = ZRAID_T.6; IRIB=VRAI; 'FINS'; 'SI' IPHASE; * Flux generalises ('LX') '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 ; *-- Actualisation cinetique thermique si metallurgie 'SI' IMETAL ; 'FINSI' ; 'SI' ('EGA' I_LAMBD1 0) ; 'SINO' ; 'SI' ('EGA' I_LAMBD1 1) ; U_BOU1 = U0 ; '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 ; si PARTLOCA ; che11 che22 = 0 0 ; sinon ; ( CHETPS1 'ET' CHT1 'ET' CHMAT ) ; finsi ; 'FINS' ; *-------- Calcul du critere de fin d'iteration ------------------- 'SI' LOG_TOL ; 'SI' ((CRITABS '<EG' 0.5) 'ET' AUTORISA) ; 'QUITTER' BOU_IT1 ; 'FINS' ; 'SINO' ; CHP_CRIT_REL = DDU_SANS * ((('ABS' U1) + XPETI) ** -1) LPRIM1 LPRIM1 LPRIM1 ; 'SI' ((ZPREC2 '<EG' ZPREC1) 'ET' AUTORISA) ; 'QUITTER' BOU_IT1 ; 'FINS' ; 'FINS' ; DU0 = DU1 ; ***************************************************************** * CALCUL DU NOUVEAU RESIDU * ***************************************************************** MAT_CHPO = SECON ; * Gestion des variables externes * ***************************************************************** 'SI' NONLIN1 ; *-------------- Cas de la temperature et du temps --------------- 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) ; '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. 'SI' ICONDU; 'FINS'; 'SI' ICONVE; 'FINS'; 'SI' IADVEC; 'FINS' ; 'SI' IRADI; 'FINS'; 'SI' IPHASE; 'FINS'; 'SI' ITHM1; 'FINS' ; 'SI' IDIFF ; 'FINS' ; 'FINS' ; *-------------- Cas des autres variables -------------------- 'REPETER' BOU_NU2 ILVA; ITE2 = &BOU_NU2; 'ITER' BOU_NU2 ; 'FINS' ; 'SI' (ETAB.'COUPLAGE' et nonlin1) ; 'SI' ('NEG' LAMBDA1 0.); 'FINS'; 'ITERER' BOU_NU2; 'FINS'; 'FINS'; 'SI' IMETAL ; 'SI' ('EGA' MOTI 'TPOI') ; 'ITER' BOU_NU2 ; 'FINS' ; 'FINS' ; * on suppose que les chargements qui ne sont pas d'origine mecanique * sont appuyes sur le maillage thermique. 'SI' ('EGA' TYP_1 'CHPOINT '); 'SINO'; 'FINS'; CHVAR = CHVAR + CHVAR2; 'SINO'; 'ERREUR' ' '; 'FINS'; 'FIN' BOU_NU2; 'FINS'; *----------------- Calcul du champ de materiau a T= U_BOU1-------------- 'SI' NONLIN1 ; 'SI' (IDIFF 'OU' ETAB.'THE1') ; 'SI' ITHM1 ; CHMAT1 = CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; 'FINS' ; 'FINS' ; 'SINO'; CHMAT = MATRTOT0 ; 'SI' (IDIFF 'OU' ETAB.'THE1') ; 'SI' ITHM1 ; CHMAT1=CHMAT1 'ET' ma ; 'FINS' ; 'SINO' ; 'SI' ITHM1 ; 'FINS' ; 'FINS' ; 'FINS'; 'SI' ICONDU; 'FINS'; 'SI' ICONVE; 'FINS'; 'SI' IRADI; 'FINS'; 'SI' IADVEC; 'FINS' ; 'SI' IPHASE; 'FINS'; 'SI' ITHM1; 'FINS' ; 'SI' IDIFF ; 'FINS' ; *-------------- CALCUL matrice de conductivite si besoin -------------- 'SI' IKDEP ; 'FINS' ; 'SI' IECDEP; 'FINS'; *-------------- CALCUL matrice de capacite si besoin------------------ XDIV = -1.d0 * T_PAS ; 'SI' ICDEP ; 'SI' ICONDU ; CC = (CDETY/XDIV) 'ET' CC ; CDETX = CDETX et CDETY ; 'FINS'; 'SI' ITHM1 ; CC = (CDETY/XDIV) 'ET' CC ; CDETX = CDETX et CDETY ; 'FINS'; ETAB.'CTHE_COURANTE' = CDETX ; 'FINS'; 'SI' ICDDEP ; CC = (CDETY/XDIV) 'ET' CC ; ETAB.'CDIF_COURANTE' = CDETY ; 'FINS'; *-------------- CALCUL des termes de convection si besoin --------- 'SI' ICONVE; 'SI' IECDEP; MAT_CHPO = MAT_CHPO + CHAL_TE ; 'FINS'; 'FINS'; 'FINS'; * *------------- calcul des termes rayonnement -------------------------- 'SI' IRADI ; IAPPEL = 3 ; bb = bb 'ET' t_rayo.'ADDI_MATRICE' ; 'FINS'; MAT_CHPO = MAT_CHPO 'ET' t_rayo.'ADDI_SECOND' ; 'FINS'; ETAB.'RAYONNEMENT' = t_rayo.'RAYO_VALEUR'; 'FINS'; 'FINS'; *------------- en cas de procedure utilisateur CHARTHER -------------- 'SI' etab.'PROCEDURE_CHARTHER' ; bb = bb 'ET' taat.'ADDI_MATRICE' ; 'FINS'; MAT_CHPO = MAT_CHPO 'ET' taat.'ADDI_SECOND' ; 'FINS'; oublier taat ; 'FINS' ; *--------------- calcul K*u1 et (lambda1*k + C/DT) * DDU1 'SI' ('EGA' I_LAMBD1 1) ; DS = BB * U0 ; 'SINO' ; 'SI' ('NEG' I_LAMBD1 3) ; chp_z = LAMBDA1 * DU1 ; 'SINO' ; chp_z = DU1 ; 'FINS' ; DS = BB * ( chp_z + U0 ) ; 'FINS' ; DS2 = CC * DU1; MAT_CHPO = MAT_CHPO + DS2 - DS ; 'SI' ITHM1 ; MAT_CHPO = MAT_CHPO - FTGC ; 'FINS'; 'FIN' BOU_IT1; 'SI' IPHASE ; * Evolution de la proportion de phase (impossible actuellement en parallele car Non-Local) PROPHA0 = PROPHA1 ; 'FINS' ; TH_COUR = U1 - CHTREF ; ETAB.'THER_COURANT' = TH_COUR ; *--------------- Appel a la procedure utilisateur PERSO2 --------------- 'SI' ETAB.'PROCEDURE_PERSO2'; * CB215821 : Il serait bien de mettre dans ESTIMATION la solution COURANTE * 'SI' ('EXIS' PRECED 'TEMPERATURES' ) ; * tab_z = 'INDEX' PRECED.'TEMPERATURES' ; * IND0 = tab_z. ('DIME' tab_z) ; * ETAB.'TEMI' = PRECED.'TEMPERATURES' . IND0 ; * 'SINO'; * tab_z = 'INDEX' PRECED.'CONCENTRATIONS' ; * IND0 = tab_z. ('DIME' tab_z) ; * ETAB.'TEMI' = PRECED.'CONCENTRATIONS' . IND0 ; * 'FINS' ; PERSO2 PRECED ; * ETAB = 'ENLEVER' ETAB 'TEMI' ; ETAB.'ARRET' = PRECED.'ARRET' ; 'FINS' ; 'FINS'; ******************************************************************* * Reinitialisation des variables en vue du pas suivant * ******************************************************************* 'SI' ((ITE3+1) '<EG' DCALC); TEM0 = TEM1; T_PAS = TEM1 - TEM0 ; U0 = U1 ; U0MTREF= U0 - CHTREF ; 'SINO'; 'QUIT' BOUC_SO; 'FINS'; *------------------------ On fait le menage ----------------------- 'MENA' ; 'FIN' BOUC_SO ; STAB.'ERREUR' = ERR_VAL ; 'SI' ETAB.'FOR_THER' ; STAB.'CLIT' = MAT_BLTH ; 'FINS' ; 'SI' IDIFF ; STAB.'CLID' = MAT_BLDI ; 'FINS' ; 'SI' IRIB ; ETAB.'RIBLO_T' = RIBL_VAL ; ETAB.'LISEA_T' = LISE_VAL ; 'FINS' ; 'SI' IPHASE ; ESTIM.'PROPORTIONS_PHASE' = PROPHA1 ; 'FINS' ; *Ecriture des Proportions de Phases en sortie (Modele Metallurgique par T.L. en mai 2018) 'SI' IMETAL ; 'FINS' ; * Sauvegarde capacite courante : 'SI' ICAPA ; ETAB.'CAPA_COURANTE' = ETAB.'CTHE_COURANTE' et ETAB.'CDIF_COURANTE' ; 'SI' ICPCONS ; ETAB.'CAPA_COURANTE' = ETAB.'CAPA_COURANTE' et ETAB.'CAPACITE_CONSTANTE' ; 'FINSI' ; 'FINSI' ; 'FINPROC' STAB ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales