* fichier : grad_01.dgibi ************************************************************************ * Section : Mathematiques Fonctions * Section : Thermique Conduction * Section : Diffusion Fick ************************************************************************ ************************************************************************ * Cas-test de l'operateur GRADient pour les elements finis * * 'BARR' * * 'TUY2' * * 'TUY3' * * * * Avec les formulations : * * 'DIFFUSION' * * 'THERMIQUE' * * * * * * Verification & Validation (non analytique) * * - Calcul d'un profil a partir d'une equation de diffusion * * - Calcul des gradients des solutions de chaque modele * * - Comparaison des gradients 'projetes' entre les differents modeles* * * *----------------------------------------------------------------------* * Options generales 'OPTI' 'DIME' 2 'ELEM' 'QUA4'; 'OPTI' 'TRAC' 'PSC' ; 'OPTI' 'DENS' 0.005 ; * Initialisations TAB_Mod = 'TABL' 'ESCLAVE'; TAB_Mat = 'TABL' 'ESCLAVE'; TAB_Cha = 'TABL' 'ESCLAVE'; * Parametrage du maillage H0 = 0. ; H1 = 6. ; H2 = 7. ; H3 = 8. ; R0 = 1. ; R3 = 1.2; * Description du rayon en fonction de l'altitude LZ ='PROG' H0 H3 ; LR ='PROG' R0 R3 ; LS = PI * (LR ** 2) ; EV_S_Z ='EVOL' 'BRIQ' 'MANU' 'Z' LZ 'SECT' LS ; 'DESS' EV_S_Z ; * MAILLAGE P0 = 0. H0 ; P1 = 0. H1 ; P2 = 0. H2 ; P3 = 0. H3 ; MAIL1=(DROI P0 P1) ET (DROI P1 P2) ET (DROI P2 P3) ; MAIL2= MAIL1 'PLUS' (1. 0.) ; MAIL3='CHAN' (MAIL1 'PLUS' (2. 0.)) 'QUAD' ; MAIL4= MAIL1 'PLUS' (3. 0.) ; MAIL5= MAIL1 'PLUS' (4. 0.) ; MAIL6='CHAN' (MAIL1 'PLUS' (5. 0.)) 'QUAD' ; 'TRAC' 'QUAL' (MAIL1 'ET' MAIL2 'ET' MAIL3 'ET' MAIL4 'ET' MAIL5 'ET' MAIL6); * Points et MAILLAGES particulers a NOMMER P01 ='POIN' MAIL1 'PROC' (P0 'PLUS' (1. 0.)); P02 ='POIN' MAIL2 'PROC' (P0 'PLUS' (2. 0.)); P03 ='POIN' MAIL3 'PROC' (P0 'PLUS' (3. 0.)); P04 ='POIN' MAIL4 'PROC' (P0 'PLUS' (4. 0.)); P05 ='POIN' MAIL5 'PROC' (P0 'PLUS' (5. 0.)); P06 ='POIN' MAIL6 'PROC' (P0 'PLUS' (6. 0.)); P21 ='POIN' MAIL1 'PROC' (P2 'PLUS' (1. 0.)); P22 ='POIN' MAIL2 'PROC' (P2 'PLUS' (2. 0.)); P23 ='POIN' MAIL3 'PROC' (P2 'PLUS' (3. 0.)); P24 ='POIN' MAIL4 'PROC' (P2 'PLUS' (4. 0.)); P25 ='POIN' MAIL5 'PROC' (P2 'PLUS' (5. 0.)); P26 ='POIN' MAIL6 'PROC' (P2 'PLUS' (6. 0.)); P31 ='POIN' MAIL1 'PROC' (P3 'PLUS' (1. 0.)); P32 ='POIN' MAIL2 'PROC' (P3 'PLUS' (2. 0.)); P33 ='POIN' MAIL3 'PROC' (P3 'PLUS' (3. 0.)); P34 ='POIN' MAIL4 'PROC' (P3 'PLUS' (4. 0.)); P35 ='POIN' MAIL5 'PROC' (P3 'PLUS' (5. 0.)); P36 ='POIN' MAIL6 'PROC' (P3 'PLUS' (6. 0.)); MAILDIF = MAIL1 'ET' MAIL2 'ET' MAIL3 ; MAILTHE = MAIL4 'ET' MAIL5 'ET' MAIL6 ; * MODELE TAB_Mod . 1 ='MODE' MAIL1 'DIFFUSION' 'TUY2' 'INCO' 'V1' 'Q1'; TAB_Mod . 2 ='MODE' MAIL2 'DIFFUSION' 'BARR' 'INCO' 'V2' 'Q2'; TAB_Mod . 3 ='MODE' MAIL3 'DIFFUSION' 'TUY3' 'INCO' 'V3' 'Q3'; TAB_Mod . 4 ='MODE' MAIL4 'THERMIQUE' 'TUY2'; TAB_Mod . 5 ='MODE' MAIL5 'THERMIQUE' 'BARR'; TAB_Mod . 6 ='MODE' MAIL6 'THERMIQUE' 'TUY3'; MODTOT ='ETG' TAB_Mod ; * Extraction des inconnues INC1 ='EXTR' ('EXTR' TAB_Mod . 1 'DEPL') 1 ; INC2 ='EXTR' ('EXTR' TAB_Mod . 2 'DEPL') 1 ; INC3 ='EXTR' ('EXTR' TAB_Mod . 3 'DEPL') 1 ; INC4 ='EXTR' ('EXTR' TAB_Mod . 4 'DEPL') 1 ; INC5 ='EXTR' ('EXTR' TAB_Mod . 5 'DEPL') 1 ; INC6 ='EXTR' ('EXTR' TAB_Mod . 6 'DEPL') 1 ; DUA1 ='EXTR' ('EXTR' TAB_Mod . 1 'FORC') 1 ; DUA2 ='EXTR' ('EXTR' TAB_Mod . 2 'FORC') 1 ; DUA3 ='EXTR' ('EXTR' TAB_Mod . 3 'FORC') 1 ; DUA4 ='EXTR' ('EXTR' TAB_Mod . 4 'FORC') 1 ; DUA5 ='EXTR' ('EXTR' TAB_Mod . 5 'FORC') 1 ; DUA6 ='EXTR' ('EXTR' TAB_Mod . 6 'FORC') 1 ; *ITHER='EXIS' MOD1 'FORM' 'THERMIQUE'; * Flux generalise injecte a l'altitude de P2 et CHARGEMENT constant CHPinj1 ='MANU' 'CHPO' P21 1 DUA1 1.2 'NATURE' 'DISCRET'; CHPinj2 ='MANU' 'CHPO' P22 1 DUA2 1.2 'NATURE' 'DISCRET'; CHPinj3 ='MANU' 'CHPO' P23 1 DUA3 1.2 'NATURE' 'DISCRET'; CHPinj4 ='MANU' 'CHPO' P24 1 DUA4 1.2 'NATURE' 'DISCRET'; CHPinj5 ='MANU' 'CHPO' P25 1 DUA5 1.2 'NATURE' 'DISCRET'; CHPinj6 ='MANU' 'CHPO' P26 1 DUA6 1.2 'NATURE' 'DISCRET'; id_Cha =('DIME' TAB_Cha) - 2 ; TAB_Cha . (1 + id_Cha) = 'CHAR' DUA1 CHPinj1 ; TAB_Cha . (2 + id_Cha) = 'CHAR' DUA2 CHPinj2 ; TAB_Cha . (3 + id_Cha) = 'CHAR' DUA3 CHPinj3 ; TAB_Cha . (4 + id_Cha) = 'CHAR' DUA4 CHPinj4 ; TAB_Cha . (5 + id_Cha) = 'CHAR' DUA5 CHPinj5 ; TAB_Cha . (6 + id_Cha) = 'CHAR' DUA6 CHPinj6 ; * Flux generalise de soutirage en bas CHPsou1 ='MANU' 'CHPO' P01 1 DUA1 -0.5 'NATURE' 'DISCRET'; CHPsou2 ='MANU' 'CHPO' P02 1 DUA2 -0.5 'NATURE' 'DISCRET'; CHPsou3 ='MANU' 'CHPO' P03 1 DUA3 -0.5 'NATURE' 'DISCRET'; CHPsou4 ='MANU' 'CHPO' P04 1 DUA4 -0.5 'NATURE' 'DISCRET'; CHPsou5 ='MANU' 'CHPO' P05 1 DUA5 -0.5 'NATURE' 'DISCRET'; CHPsou6 ='MANU' 'CHPO' P06 1 DUA6 -0.5 'NATURE' 'DISCRET'; id_Cha =('DIME' TAB_Cha) - 2 ; TAB_Cha . (1 + id_Cha) = 'CHAR' DUA1 CHPsou1 ; TAB_Cha . (2 + id_Cha) = 'CHAR' DUA2 CHPsou2 ; TAB_Cha . (3 + id_Cha) = 'CHAR' DUA3 CHPsou3 ; TAB_Cha . (4 + id_Cha) = 'CHAR' DUA4 CHPsou4 ; TAB_Cha . (5 + id_Cha) = 'CHAR' DUA5 CHPsou5 ; TAB_Cha . (6 + id_Cha) = 'CHAR' DUA6 CHPsou6 ; * MATERIAU CooZ1 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 1) 'SCAL' 1. 'STRESSES')) 'Z'; CooZ2 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 2) 'SCAL' 1. 'STRESSES')) 'Z'; CooZ3 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 3) 'SCAL' 1. 'STRESSES')) 'Z'; CooZ4 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 4) 'SCAL' 1. 'STRESSES')) 'Z'; CooZ5 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 5) 'SCAL' 1. 'STRESSES')) 'Z'; CooZ6 ='NOMC' ('COOR' 2 ('MANU' 'CHML' (TAB_Mod . 6) 'SCAL' 1. 'STRESSES')) 'Z'; Sect1 ='IPOL' CooZ1 EV_S_Z ; Sect2 ='IPOL' CooZ2 EV_S_Z ; Sect3 ='IPOL' CooZ3 EV_S_Z ; Sect4 ='IPOL' CooZ4 EV_S_Z ; Sect5 ='IPOL' CooZ5 EV_S_Z ; Sect6 ='IPOL' CooZ6 EV_S_Z ; TAB_Mat . 1 ='MATE' (TAB_Mod . 1) 'KD' 1. 'SECT' Sect1 ; TAB_Mat . 2 ='MATE' (TAB_Mod . 2) 'KD' 1. 'SECT' Sect2 ; TAB_Mat . 3 ='MATE' (TAB_Mod . 3) 'KD' 1. 'SECT' Sect3 ; TAB_Mat . 4 ='MATE' (TAB_Mod . 4) 'KD' 1. 'SECT' Sect4 ; TAB_Mat . 5 ='MATE' (TAB_Mod . 5) 'KD' 1. 'SECT' Sect5 ; TAB_Mat . 6 ='MATE' (TAB_Mod . 6) 'KD' 1. 'SECT' Sect6 ; MATTOT ='ETG' TAB_Mat ; * BLOCAGES, et VALEURS_IMPOSEES ; BLO1 ='BLOQ' INC1 P31 ; BLO2 ='BLOQ' INC2 P32 ; BLO3 ='BLOQ' INC3 P33 ; BLO4 ='BLOQ' INC4 P34 ; BLO5 ='BLOQ' INC5 P35 ; BLO6 ='BLOQ' INC6 P36 ; DEPI1='DEPI' BLO1 1. ; DEPI2='DEPI' BLO2 1. ; DEPI3='DEPI' BLO3 1. ; DEPI4='DEPI' BLO4 1. ; DEPI5='DEPI' BLO5 1. ; DEPI6='DEPI' BLO6 1. ; id_Cha =('DIME' TAB_Cha) - 2 ; TAB_Cha . (1 + id_Cha) = 'CHAR' 'CIMP' DEPI1 ; TAB_Cha . (2 + id_Cha) = 'CHAR' 'CIMP' DEPI2 ; TAB_Cha . (3 + id_Cha) = 'CHAR' 'CIMP' DEPI3 ; TAB_Cha . (4 + id_Cha) = 'CHAR' 'TIMP' DEPI4 ; TAB_Cha . (5 + id_Cha) = 'CHAR' 'TIMP' DEPI5 ; TAB_Cha . (6 + id_Cha) = 'CHAR' 'TIMP' DEPI6 ; CHATOT = 'ETG' TAB_Cha ; * Calcul PASAPAS TAB1='TABL' 'PASAPAS' ; TAB1.'TEMPS_CALCULES' ='PROG' 0. PAS 1. 1. ; TAB1.'MODELE' = MODTOT ; TAB1.'CARACTERISTIQUES' = MATTOT ; TAB1.'BLOCAGES_DIFFUSIONS' = BLO1 'ET' BLO2 'ET' BLO3 ; TAB1.'BLOCAGES_THERMIQUES' = BLO4 'ET' BLO5 'ET' BLO6 ; TAB1.'CHARGEMENT' =CHATOT ; PASAPAS TAB1 ; * Post-Traitement Dim1 =('DIME' (TAB1 . 'TEMPS')) - 1 ; Solfin = (TAB1.'CONCENTRATIONS'. Dim1) 'ET' (TAB1.'TEMPERATURES'. Dim1) ; Soltrac =('EXCO' Solfin INC1) 'ET' ('EXCO' Solfin INC2) 'ET' ('EXCO' Solfin INC3) 'ET' ('EXCO' Solfin INC4 ) ; 'TRAC' Soltrac (MAILDIF 'ET' MAILTHE) ; * Calcul du gradient sur le modele complet Gradfin1 ='GRAD' MODTOT Solfin ; Gradfin2 ='CHAN' 'NOEUD' Gradfin1 MODTOT ; CHPgrad ='CHAN' 'CHPO' Gradfin1 MODTOT ; * Pour tracer l'évolution du gradient EVgrad1='EVOL' 'BLEU' 'CHPO' CHPgrad 'V1,S' MAIL1 ; EVgrad2='EVOL' 'ROUG' 'CHPO' CHPgrad 'V2,S' MAIL2 ; EVgrad3='EVOL' 'ROSE' 'CHPO' CHPgrad 'V3,S' MAIL3 ; EVgrad4='EVOL' 'VERT' 'CHPO' CHPgrad 'T,S' MAIL4 ; EVgrad5='EVOL' 'TURQ' 'CHPO' CHPgrad 'T,S' MAIL5 ; EVgrad6='EVOL' 'JAUN' 'CHPO' CHPgrad 'T,S' MAIL6 ; 'DESS' (EVgrad1 'ET' EVgrad2 'ET' EVgrad3 'ET' EVgrad4 'ET' EVgrad5 'ET' EVgrad6) ; * VERIFICATION du resultat de GRAD * On utilise le MAILLAGE lineaire pour la comparaison ==> Interpolation sur le maillage LINEAIRE Absc1 ='EXTR' EVgrad1 'ABSC' 1 ; Ordo1 ='EXTR' EVgrad1 'ORDO' 1 ; Ordo2 ='EXTR' EVgrad2 'ORDO' 1 ; Ordo3 ='IPOL' Absc1 ('EXTR' EVgrad3 'COUR' 1) ; Ordo4 ='EXTR' EVgrad4 'ORDO' 1 ; Ordo5 ='EXTR' EVgrad5 'ORDO' 1 ; Ordo6 ='IPOL' Absc1 ('EXTR' EVgrad6 'COUR' 1) ; * Les valeurs du gradient 'CHPOINT' doivent être identiques (a epsilon pres entre les LINEAIRES et QUADRATIQUES) Maxi1 ='MAXI' 'ABS' Ordo1 ; Maxi3 ='MAXI' 'ABS' Ordo3 ; * Lineaires ensembles Maxi21 ='MAXI' 'ABS' (Ordo2 - Ordo1) ; Maxi41 ='MAXI' 'ABS' (Ordo4 - Ordo1) ; Maxi51 ='MAXI' 'ABS' (Ordo5 - Ordo1) ; Maxtot1 =('MAXI' Maxi21 Maxi41 Maxi51) / Maxi1 ; * Quadratiques ensembles Maxi63 ='MAXI' 'ABS' (Ordo6 - Ordo3) ; Maxtot2 = Maxi63 / Maxi3 ; * Erreur entre LINEAIRE et QUADRATIQUES (attention au saut proche de l'injection) Maxi31 ='MAXI' 'ABS' (Ordo3 - Ordo1) ; Maxtot3 = Maxi31 / Maxi1 ; 'MESS' 'Erreur relative entre les LINEAIRES :' Maxtot1 ; 'MESS' 'Erreur relative entre les QUADRATIQUES :' Maxtot2 ; 'MESS' 'Erreur relative entre LINEAIRE et QUADRATIQUE :' Maxtot3 ; **************************** * Erreur dans certains cas **************************** Prec1 =2.0E-11 ; 'SI' (Maxtot1 '>' Prec1); 'MESS' 'A-Erreur trop grande lors de la comparaison des GRADIENTS'; 'ERRE' 5 ; 'FINS'; Prec2 =5.0E-11 ; 'SI' (Maxtot2 '>' Prec2); 'MESS' 'B-Erreur trop grande lors de la comparaison des GRADIENTS'; 'ERRE' 5 ; 'FINS'; Prec3 =1.37D-4 ; 'SI' (Maxtot3 '>' Prec3); 'MESS' 'C-Erreur trop grande lors de la comparaison des GRADIENTS'; 'ERRE' 5 ; 'FINS'; 'FIN';