* fichier : metallurgie_01.dgibi ************************************************************************ * Section : Metallurgie ************************************************************************ *__________________________________________________________________* * TEST METALLURGIE_01 * * * * CALCUL DE l'ERREUR ANALYTIQUE - CAST3M POUR KOISTINEN * * Le calcul est fait pour 15 pas de temps * *__________________________________________________________________* * * * Vitesse de refroidissement : 10 C/s * * - Transformation (type Koistinen-Marburger) de l'austenite * * en martensite seulement * * - Caracteristiques du modele constantes * *__________________________________________________________________* * * * On trace la courbe de l'erreur en fonction du pas de temps, * * sur une echelle log-log * *__________________________________________________________________* * 'OPTI' 'TRAC' PSC 'EPTR' 10 ; IDESS = VRAI ; APPO ='CHAI' ''; 'OPTI' 'DIME' 2 'ELEM' 'TRI3'; P1 = 0. 0. ; P2 = 1. 0. ; P3 = 0. 1. ; MAILT = MANU 'TRI3' P1 P2 P3; LISTPHA = MOTS 'AUST' 'MART' ; LISTREAC = MOTS 'AUST' ; LISTPROD = MOTS 'MART' ; LISTTYPE = MOTS 'KOIS' ; NOMCONS ='16MND5' ; MODCP1 = MODE MAILT 'METALLURGIE' 'PHASES' LISTPHA 'REACTIFS' LISTREAC 'PRODUITS' LISTPROD 'TYPE' LISTTYPE 'CONS' NOMCONS ; TINI = 900. ; TFIN = 20. ; MS1 = 380. ; KM1 = 0.0247 ; *Declaration de la vitesse de refroidissement : en Degres/s DT_vit = -10. ; *Calcul de la duree du refroidissement : DUREE = -1. * (TINI - TFIN) / DT_vit ; *Declaration du Temps initial : TEMPINI = 0. ; *Calcul du Temps final : TEMPFIN = TEMPINI + DUREE ; *Calcul du pas de temps en fonction de la vitesse de refroidissement : NBPAST = 15.D0 ; LDTini ='LOG' (-4.D1 / DT_vit) ; LDTfin ='LOG' (-1.D-2 / DT_vit) ; PASLOG = (LDTfin - LDTini) / (NBPAST - 1); LISTLOG='PROG' LDTini 'PAS' PASLOG LDTfin; LISTPAS='EXP' LISTLOG ; ERR_TAB ='PROG' ; PAS_TAB ='PROG' ; EVO_ERR ='TABL' ; EVO_ANA ='TABL' ; EVO_CAL ='TABL' ; *Boucle sur les differents taille de pas de temps : MATCP1 ='MATE' MODCP1 'MS1' MS1 'KM1' KM1 ; MATCP2 = MATCP1 ; 'REPE' BOU_PAS ('DIME' LISTPAS) ; PAS =&BOU_PAS ; DTPS ='EXTR' LISTPAS PAS ; LTCAL ='PROG' TEMPINI 'PAS' DTPS 'NPAS' (ENTI 'INFE' (DUREE/DTPS)) ; T = TINI + (DT_vit * (LTCAL - TEMPINI)); DTEMP =('EXTR' T 2) - ('EXTR' T 1); ALPHA = 1. ; * Initialisation de CHE1 : proportions de phases initiales : CTYP ='CHAI' 'VARIABLES_INTERNES' ; CHE1 ='MANU' 'CHML' MODCP1 'AUST' ALPHA 'MART' (1.D0 - ALPHA) 'TYPE' CTYP 'NOEUD' ; PROPi ='PROG' ALPHA ; CHETPS0 ='MANU' 'CHML' MAILT 'TEMP' TEMPINI ; CHETPS1 = CHETPS0 '+' DTPS ; CHT0 ='MANU' 'CHML' MAILT 'T' TINI ; CHT1 = CHT0 + DTEMP ; nbpas=('DIME' LTCAL) - 1; 'REPE' CTEMP nbpas; * On calcule la temperature debut de pas et la temperature fin de pas : T0 = EXTR T &CTEMP ; T1 = EXTR T (&CTEMP + 1); * Pour destruction CHDET0 = CHETPS0 ; CHDET1 = CHETPS1 ; CHDET2 = CHT0 ; CHDET3 = CHT1 ; LRDET0 = PROPi ; CHEDET = CHE1 ; CHE1 ='COMP' MODCP1 (CHE1 'ET' CHETPS0 'ET' CHT0 'ET' MATCP1 ) ( CHETPS1 'ET' CHT1 'ET' MATCP2 ) ; * Extraction pour tracer : PiEvol ='EXTR' CHE1 'AUST' 1 1 1; PROPi = PROPi 'ET' PiEvol ; CHETPS0 = CHETPS0 '+' DTPS ; CHETPS1 = CHETPS0 '+' DTPS ; CHT0 = CHT0 '+' DTEMP ; CHT1 = CHT0 '+' DTEMP ; * Destruction 'DETR' CHDET0; 'DETR' CHDET1; 'DETR' CHDET2; 'DETR' CHDET3; 'DETR' LRDET0; 'DETR' CHEDET; 'FIN' CTEMP; * Evolution calculee : EVO = 'EVOL' 'NOIR' 'MANU' 'TEMP' LTCAL 'PROP' PROPi ; EVO_CAL . PAS = EVO ; * Evolution analytique : TBORN ='BORN' T 'MAXI' MS1; PANALY ='EXP' (-1. * KM1 * (MS1 - TBORN)) ; EVOANA ='EVOL' 'BOUT' 'MANU' 'TEMP' LTCAL 'AUSTENITE' PANALY ; EVO_ANA . PAS = EVOANA ; * Erreur absolue entre analytique et calculee : ERRABS = 'ABS' (PANALY '-' PROPi) ; EVOERR = 'EVOL' 'ROUG' 'MANU' 'TEMP' LTCAL 'ERREUR ABS.' ERRABS ; EVO_ERR . PAS = EVOERR ; NORMERR ='MAXI' ERRABS ; ERR_TAB = ERR_TAB 'ET' NORMERR ; PAS_TAB = PAS_TAB 'ET' DTPS ; 'FIN' BOU_PAS; *Post-traitement : 'SI' IDESS ; 'REPE' BOU_PAS ('DIME' LISTPAS) ; PAS = &BOU_PAS ; EVOERR = EVO_ERR . PAS ; DTPS ='EXTR' LISTPAS PAS ; TITRE ='CHAI' 'Erreur pour le pas de temps : ' DTPS ; 'DESS' EVOERR 'GRIL' 'TIRC' 'GRIS' 'TITR' TITRE ; EVO = EVO_CAL . PAS ; EVOANA = EVO_ANA . PAS ; TITRE ='CHAI' 'KOISTINEN-MARBURGER - Calcul pour le pas de temps : ' DTPS ; TL ='TABL' ; 'SI' ( DTPS '>' 0.2D0 ) ; TL . 1 ='CHAI' 'MARQ ROND NOLI' ; 'SINO' ; TL . 1 ='CHAI' 'TIRR' ; 'FINS' ; TL . 2 ='CHAI' 'TIRR' ; TL . 'TITRE' = TABL ; TL . 'TITRE' . 1 = 'Evolution calculee' ; TL . 'TITRE' . 2 = 'Evolution analytique' ; 'DESS' (EVO 'ET' EVOANA) 'GRIL' 'TIRC' 'GRIS' 'TITR' TITRE 'LEGE' TL ; 'FIN' BOU_PAS; ERRPAS ='EVOL' 'ROUG' 'MANU' 'PAS' PAS_TAB 'ERREUR ABS.' ERR_TAB ; ERRCAL = 5.0D-2* PAS_TAB/('EXTR' PAS_TAB 1) ; ERRCAL2 = 5.0D-2*((PAS_TAB/('EXTR' PAS_TAB 1))**2) ; ERR_O1 ='EVOL' 'BOUT' 'MANU' 'PAS' PAS_TAB 'ERREUR ABS.' ERRCAL ; ERR_O2 ='EVOL' 'BRIQ' 'MANU' 'PAS' PAS_TAB 'ERREUR ABS.' ERRCAL2; EVTOT = ERRPAS 'ET' ERR_O1 'ET' ERR_O2; TDESS ='TABL'; TDESS . 1 ='CHAI' ('TIRR MARQ ROND'); TDESS . 2 ='CHAI' ('TIRR MARQ CROI'); TDESS . 3 ='CHAI' ('TIRR MARQ PLUS'); TDESS .'TITRE' ='TABL' ; TDESS .'TITRE' . 1 = 'Erreur de Cast3M '; TDESS .'TITRE' . 2 = 'Erreur en o(PAS) '; TDESS .'TITRE' . 3 = 'Erreur en o(PAS^{2})'; TITRE ='CHAI' 'Evolution de l' APPO 'erreur absolue en fonction du pas de temps'; 'DESS' EVTOT 'LOGX' 'LOGY' 'GRIL' 'TIRC' 'GRIS' 'TITR' TITRE 'LEGE' TDESS ; 'FINSI' ; *Emission d'une erreur GIBIANE si l'erreur analytique - cast3m est trop grande : TOL1 =ERRCAL2 - ERR_TAB; LIST TOL1; 'SI'(('MINI' TOL1) '<' 0.D0); 'MESS' 'Erreur dans le calcul de la proportion d' APPO 'AUSTENITE'; 'ERRE' 5; 'FINS'; 'FIN';