* DUPONT2 PROCEDUR MB234859 24/09/11 21:15:02 12008 *----------------------------------------------------------------------* * * * D U P O N T 2 * * ------------- * * * * RESOLUTION D'UN PROBLEME DE THERMIQUE TRANSITOIRE NON-LINEAIRE * * METHODE A UN PAS DE TEMPS ( TETA SCHEMA ) * * * * ETAB, TABLE CONTENANT EN ENTREE : * * * * INDICE 'TET0' CHAMP DE TEMPERATURE INITIAL AU PAS 0 * * INDICE 'TET1' CHAMP DE TEMPERATURE INITIAL AU PAS 1 * * ( LA DONNEE DE CE CHAMP EST FACULTATIVE ) * * INDICE 'VIEUXPAS' PAS DE TEMPS ENTRE TET0 ET TET1 * * (DONNEE INDISPENSABLE SI EXISTE TET1) * * INDICE 'RAYO' LOGIQUE VALANT VRAI POUR UNE CONDITION * * DE RAYONNEMENT * * INDICE 'CELSIUS' LOGIQUE VALANT VRAI SI L'UNITE EST LE * * DEGRE CELSIUS (CAPITAL SI RAYONNEMENT) * * INDICE 'MOD_THE' MODELE THERMIQUE * * INDICE 'MOD_CON' MODELE CONVECTION * * INDICE 'MOD_TOT' MODELE CONVECTION + THERMIQUE * * INDICE 'MAT_TOT' MATERIAU CONVECTION + THERMIQUE * * INDICE 'BLOCAGES_THERMIQUES' MATRICE DE BLOCAGE * * INDICE 'CHARGEMENT' CHARGEMENT DECRIVANT LES : * * VALEURS DES VARIABLES EXTERNES (EX: TE, * * FLUX,TEMPERATURES IMPOSEES ,...) * * VALEURS DES VARIABLES EXTERNES * * INDICE 'PHASE' LOGIQUE VALANT VRAI SI CHGT DE PHASE * * INDICE 'PAS' VALEUR DU PAS DE TEMPS * * INDICE 'TEM_CALC' LISTREEL : TEMPS DES RESULTATS A CALCULER * * INDICE 'RELAXATION_DUPONT' VALEUR DU COEFFICIENT DE RELAXATION * * (VALEUR PAR DEFAUT 0.25) * * INDICE 'SOUS-RELAXATION' VALEUR DU COEFF. DE SOUS-RELAXATION * * (VALEUR PAR DEFAUT 0.5) * * INDICE PROJECTION LOGIQUE VALANT VRAI SI COUPLAGE ET SI LE * * MAILLAGE DE LA MECANIQUE ET DE LA THERMIQUE* * EST DIFFERENT * * * * ETAB CONTIENT EN SORTIE * * * * INDICE INITIAL(2) DERNIER CHAMP DE TEMPERATURE CALCULE * * * * REMARQUE : CERTAINES VARIABLES ONT DES NOMS IMPOSES. * * LE TEMPS : TEMP * * 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 * * * * D.R., LE 29 JUIN 1988. * * E.J., MODIFICATIONS SEPTEMBRE 1994 * * * *----------------------------------------------------------------------* 'REPETER' PROC 1 ; ETAB = PRECED.'WTABLE'; CONTI = PRECED.'CONTINUATION'; ESTIM = PRECED.'ESTIMATION'; ERR_VAL = FAUX; ******************************************************************** * Recuperation de l'information contenue dans ETAB * ******************************************************************** *---------------- Initialisation du pas de temps ------------------ T_PAS = ETAB.'NOUV_PAS' ; 'SI' ('EXISTE' ETAB 'VIEUXPAS'); T_VPAS = ETAB.'VIEUXPAS'; 'FINSI'; *------- Initialisation de la liste des temps a calculer --------- TE_CALC = ETAB.'TEM_CALC' ; *------------ Initialisation des variables externes --------------- *----------- y-a-t-il definition du coefficient lambda ----------- 'SI' ( 'EXISTE' ETAB 'RELAXATION_DUPONT' ) ; LAMBDA = ETAB.'RELAXATION_DUPONT' ; A_SUPPR = FAUX ; 'SINON' ; LAMBDA = 0.25 ; ETAB.'RELAXATION_DUPONT' = LAMBDA ; A_SUPPR = VRAI ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'SOUS_RELAXATION' ) ; LAMBDA2 = ETAB.'SOUS_RELAXATION' ; 'SINON' ; LAMBDA2 = 0.5 ; 'FINSI' ; *-------- Recherche des variables selon lesquelles varie ---------- *---------------------- le champ de materiau ---------------------- 'SI' ('NEG' ILVA 0); NONLIN1 = VRAI; 'SI' (ETAB.'COUPLAGE'); 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' ETAB.'MO_TOT' 'NOEUD'; CON1 = 'CHAN' 'NOEUD' CONTI.'CONTRAINTES' ETAB.'MO_TOT' ; CHAR1_ME = DEP1 'ET' CON1; * 'SI' ('EXISTE' CONTI 'VITESSES'); * VIT1 = 'CHAN' 'CHAM' CONTI.'VITESSES' * ETAB.'MO_TOT' 'NOEUD'; * CHAR1_ME = CHAR1_ME 'ET' VIT1; * 'FINSI'; 'SI' ('EXISTE' CONTI 'VARIABLES_INTERNES'); VAR1 = 'CHAN' 'NOEUD' CONTI.'VARIABLES_INTERNES' ETAB.'MO_TOT' ; * DEF1 ='CHAN' 'NOEUD' (ETAB.'DEI_EST') * (ETAB.'MO_TOT') ; CHAR1_ME = CHAR1_ME 'ET' VAR1 ; * CHAR1_ME = CHAR1_ME 'ET' VAR1 'ET' DEF1; 'FINSI'; 'SI' ETAB.'PROJECTION'; (ETAB.'MO_TOT') 'RIGIDITE'; 'SINON'; (ETAB.'MO_TOT')) (ETAB.'MO_TOT') 'RIGIDITE'; 'FINSI'; 'FINSI'; 'SINON'; NONLIN1 = FAUX; 'FINSI'; *------- 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). -* ICPCONS = ETAB.'CAPACONST' ; IKCONS = ETAB.'CONDCONST' ; ICAPA = ('EXISTE' LCOMPM 'C ') 'ET' ('EXISTE' LCOMPM 'RHO ') ; ICAPA = ICAPA 'OU' ICPCONS ; * En regime stationnaire (sans CAPACITE), on force LAMBDA2 a 1. * Sinon on ne resout pas le bon probleme ! * Quelle valeur pour LAMBDA ? 0.5 ? A voir ! * On peut aussi se demander s'il est judicieux, dans le cas present, * d'utiliser cette methode d'integration ! 'SI' ('NON' ICAPA) ; LAMBDA2 = 1. ; 'FINSI' ; *---------- Initialisation de l'unité de température -------------- 'SI' ('EXISTE' ETAB 'CELSIUS'); ICELS = ETAB.'CELSIUS'; 'SINON'; ICELS = FAUX; 'FINSI'; *---------- Initialisation de la temperature de reference---------- 'SI' ICELS ; TREF = 273.15 ; 'SINON'; TREF = 0. ; 'FINSI'; *----------- Initialisation des champs de temperatures ------------ *------------------------ et du temps ----------------------------- INIT = 1; U1 = CONTI.'TEMPERATURES' ; 'SI' ('NEG' TYP_0 'ENTIER ') ; 'SI' ((ABS(T_PAS-T_VPAS)/T_PAS) '<EG' 1E-5); TEM1 = CONTI.'TEMPS' ; TEM0 = TEM1 - T_VPAS; TEM2 = TEM1 + T_PAS; U0 = ETAB.'TET0' ; INIT = 0; 'FINSI'; 'FINSI'; 'SI' (INIT 'EGA' 1); TEM0 = CONTI.'TEMPS'; TEM1 = TEM0 + T_PAS; TEM2 = TEM1 + T_PAS; LI_TEM = ETAB.'TEM_CALC'; ETAB.'TEM_CALC' = LI_TEM; ERR_VAL = TIN1.'ERREUR' ; * 'SI' ('EGA' DCALC 1); STAB = TIN1 ; STAB.'RELAXATION_DUPONT' = LAMBDA ; 'QUITTER' PROC; 'FINSI'; **************************************************************** * calculer U2 a partir de U1 * **************************************************************** * je suis passe dans TRANSNON U2 = TIN1.'INITIAL(2)' ; U0 = U1; U1 = U2; 'FINSI' ; 'SI' ICELS ; U0 = U0 + TREF ; U1 = U1 + TREF ; 'FINSI' ; ******************************************************************** * Boucle sur les pas de temps * ******************************************************************** 'REPETER' BOUC_SO ; ITE3 = &BOUC_SO; *-------------------- Condition de fin de boucle ------------------ TEMM = (LAMBDA2 * TEM2) + ((1 - LAMBDA2) * TEM1); U0 ((TEM1 - TEMM)/(TEM1 - TEM0)) ; TH_COUR = UC_T ; 'SI' ICELS ; TH_COUR = TH_COUR - TREF ; 'FINSI' ; ETAB.'THER_COURANT' = TH_COUR ; 'MESS' ' '; 'MESS' ' '; ***************************************************************** * 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'); CHVAR = CHVAR 'ET' CHAR_ME; 'FINSI'; *-------------- Mise a jour des variables externes -------------- 'SI' (ETAB.'PROCEDURE_PARATHER') ; PARATHER PRECED TEMM ; 'FINSI' ; *-------------- Cas des autres variables -------------------- 'REPETER' BOU_NU2 ILVA; 'ITERER' BOU_NU2; 'FINSI'; 'SI' (ETAB.'COUPLAGE'); 'SI' ('EXISTE' CHAR_ME MOTI ); 'SI' ('NEG' LAMBDA2 0.); 'FINSI'; 'ITERER' BOU_NU2; 'FINSI'; 'FINSI'; 'SI' ('EXISTE' (ETAB.'CHARGEMENT') MOTI); * on suppose que les chargements qui ne sont pas d'origine mecanique * sont appuyes sur le maillage thermique . 'SI' ('EGA' TYP_1 'CHPOINT '); 'SINON'; 'FINSI'; CHVAR = CHVAR + CHVAR2; 'SINON'; 'ERREUR' ' '; 'FINSI'; 'FIN' BOU_NU2; 'FINSI'; *--------------------- On cherche les flux ----------------------- 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'Q '); 'FINSI'; *----------------- Calcul du champ de matériau --------------------- 'SI' NONLIN1; CHVAR1 'RIGIDITE'; 'SINON'; CHMAT = ETAB.'MAT_TOT'; 'FINSI'; ETAB.'CHMAT'=CHMAT; *------------- Calcul de la matrice de conductivité ---------------- 'SI' IKCONS ; MAT_COND = MAT_COND 'ET' ETAB.'CONDUCTIVITE_CONSTANTE' ; 'FINS' ; *----------------- y-a-t-il des blocages --------------------------- 'SI' INOBLOT ; 'SINON'; MAT_BLOC = ETAB.'BLOCAGES_THERMIQUES'; 'FINSI'; 'SI' ('NON' ('EXISTE' (ETAB.'CHARGEMENT') 'TIMP')); 'SINON'; 'SI' ICELS ; CH_TI = CH_TI + TREF ; 'FINSI' ; 'FINSI'; *----------------- Calcul de la matrice de capacite ----------------- 'SI' ICAPA ; ETAB.'CAPA_COURANTE' = MAT_CAPA ; 'FINSI' ; 'SI' ICPCONS ; MAT_CAPA = MAT_CAPA 'ET' ETAB.'CAPACITE_CONSTANTE' ; ETAB.'CAPA_COURANTE' = MAT_CAPA ; 'FINSI' ; ******************************************************************* * On genere les termes de convection * ******************************************************************* 'SI' ETAB.'CONVECTION'; * RIG_CON = 'COND' ETAB.'MOD_CON' CHMAT2 ; *---------- Si convection, on cherche TECO ------------------------- 'SI' ('EXISTE' ETAB.'CHARGEMENT' 'TECO') ; 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINSI' ; CH_TI = CH_TI + CHAL_TE; 'FINSI' ; * MAT_COND = MAT_COND 'ET' RIG_CON; 'FINSI'; ****************************************************************** * On genere les termes de rayonnement * ****************************************************************** 'SI' ETAB.'RAYO' ; IAPPEL = 1 ; MAT_COND = MAT_COND 'ET' t_rayo.'ADDI_MATRICE'; 'FINSI'; CH_TI = CH_TI 'ET' t_rayo.'ADDI_SECOND' ; 'FINSI'; 'OUBLIER' t_rayo ; 'FINSI'; ****************************************************************** * En cas de procedure utilisateur CHARTHER * ****************************************************************** 'SI' ETAB.'PROCEDURE_CHARTHER' ; CH_TI = CH_TI 'ET' taat.'ADDI_SECOND' ; 'FINSI' ; MAT_COND = MAT_COND 'ET' taat.'ADDI_MATRICE' ; 'FINSI' ; 'FINSI'; *---------------- Calcul de la matrice regularisee ----------------- SCA1 = 0.5 + LAMBDA ; SCA2 = ( 2. * LAMBDA ) - 0.5 ; SCA3 = -1. * LAMBDA ; MAT_RIGI = MAT_COND * SCA1 ; B1 = MAT_COND * SCA2 ; B2 = MAT_COND * SCA3 ; MAT_CHPO = B2 * U0 ; 'SI' ICAPA ; A1 = MAT_CAPA / T_PAS ; MAT_RIGI = A1 'ET' MAT_RIGI ; B1 = A1 'ET' B1 ; 'FINSI' ; MAT_RIGI = MAT_RIGI 'ET' MAT_BLOC ; MAT_CHPO = MAT_CHPO + (B1 * U1) ; 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'Q '); MAT_CHPO = MAT_CHPO + CH_FL ; 'FINSI' ; MAT_CHPO = MAT_CHPO + CH_TI ; *--------------------- Calcul d'un pas ---------------------------- U2 = 'RESOUDRE' MAT_RIGI MAT_CHPO ; 'DETR' MAT_RIGI; TH_COUR = U2 ; 'SI' ICELS ; TH_COUR = TH_COUR - TREF ; 'FINSI' ; ETAB.'THER_COURANT' = TH_COUR ; *---------------- Appel a une procedure utilisateur ----------------- 'SI' (ETAB.'PROCEDURE_PERSO2'); tab_z = 'INDEX' (PRECED.'TEMPERATURES') ; IND0 = tab_z. ('DIMENSION' tab_z) ; ETAB.'TEMI' = PRECED.'TEMPERATURES' . IND0 ; 'OUBLIER' tab_z ; PERSO2 PRECED ; ETAB = 'ENLEVER' ETAB 'TEMI' ; ETAB . 'ARRET' = PRECED . 'ARRET' ; 'FINS' ; 'FINSI'; ******************************************************************* * Reinitialisation des variables en vue du pas suivant * ******************************************************************* 'SI' ((ITE3 + 1 + INIT) '<EG' DCALC); TEM0 = TEM1; TEM1 = TEM2; T_PAS = TEM2 - TEM1; U0 = U1; U1 = U2; 'SINON'; 'QUITTER' BOUC_SO; 'FINSI'; *------------------------ On fait le menage ----------------------- 'MENAGE' ; 'FIN' BOUC_SO ; 'SI' A_SUPPR ; 'FINSI' ; STAB = 'TABLE' ; STAB.'ERREUR' = ERR_VAL ; STAB.'RELAXATION_DUPONT' = LAMBDA ; 'SI' ETAB.'RAYO' ; STAB.'RAYONNEMENT' = ETAB.'RAYONNEMENT' ; 'FINSI' ; STAB.'INITIAL(2)' = TH_COUR ; STAB.'CLIT' = MAT_BLOC ; * ESTIM.'TEMPERATURES' = TH_COUR ; * 'FIN' PROC ; 'FINPROC' STAB ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales