* fichier : ccaxi.dgibi ************************************************************************ ************************************************************************ ***************** CAS TEST : CCAXI.DGIBI *********************** * * Convection naturelle dans un cylindre différentiellement chauffé * (Thot en bas, Tcold en haut, Flux nul sur la paroi verticale) * (Navier-Stokes incompressible et approximation de Boussinesq) * * Pour les paramètres choisis ici, le signe de AT0 intervenant dans * la condition initiale en température modifie le sens de rotation * de la solution stationnaire. * * Ref biblio : Liang S.F. et al., Buoyancy driven convection in * cylindrical geometries, in J. Fluid Mech., vol 36, pp 239-246, * (1969). * *------------------------------------------------------------------ * * Algorithme de projection et élément (v,T)/p MACRO/CENTREP1 * *------------------------------------------------------------------ * * Auteur : Frédéric DABBENE * serre@semt2.smts.cea.fr le 01/09/2003 * *------------------------------------------------------------------ * Procédures spécifiques à évoluer et à généraliser *------------------------------------------------------------------ * COURANT : Calcul de la fonction de courant d'un domaine fermé * CALCNUSS : Calcul du Nusselt (en adimensionné = grad THETA) *------------------------------------------------------------------ * RESIDU : Calcul du residu en température, stratégie de pas de * temps, mise à jour de la viscosité et affichages *------------------------------------------------------------------ * * COMPLET : Booleen mis à FAUX pour les tests de non régresssion * GRAPH : Booleen réalisation ou non des post-traitements * POST1 : Booleen indiquant si on affiche le résidu en NCLK * POST2 : Booleen indiquant si on affiche la température en NCLK * IRESU : Critère d'arret sur l'incrément de température * COMPLET = faux ; GRAPH = faux ; POST1 = faux ; POST2 = faux ; 'SI' COMPLET ; IRESU = 1.D-8 ; 'SINO' ; IRESU = 1.D-3 ; 'FINSI' ; * * NLI0 : Nombre d'isovaleurs NLI0 = 14 ; * * DT0 : Pas de temps * Pr : Nombre de Prandtl * Ra : Nombre de Rayleigh * AT0 : Coeff. pour l'initialisation de la température (entre -1 et 1) * ETA0 : Coeff. de la loi de viscosité en fonction de la température DT0 = 0.01 ; Pr = 2500. ; Ra = 5000. ; AT0 = 0.95 ; *** AT0 =-0.95 ; ETA0 =-0.2 ; * *------------------------------------------------------------------ * Choix de l'élément fini et du décentrement *------------------------------------------------------------------ IDCEN = 0 ; DISCR = 'MACRO' ; KPRES = 'CENTREP1' ; 'SI' ('EGA' IDCEN 0) ; KSUPG = 'CENTREE' ; 'SINON' ; KSUPG = 'SUPG' ; * KSUPG = 'SUPGDC' ; 'FINSI' ; * * *================================================================== * Calcul de la fonction de courant d'un domaine fermé *================================================================== * E/ : UN : CHPO : Champ de vitesse * E/ : $DOMAINE : MMODEL 'NAVIER_STOKES' volumique * E/ : $CONTOUR : MMODEL 'NAVIER_STOKES' surfacique * /S : PSI : CHPO : Fonction de courant *------------------------------------------------------------------ * On vérifie qu'on est en dimension 2 mais pas que div(UN)=0 * Si le domaine est ouvert, modifier les conditions aux limites *------------------------------------------------------------------ 'DEBPROC' courant un*chpoint $domaine*mmodel $contour*mmodel ; TEST = 'EGA' VAL0 2 ; 'SI' TEST ; 'SINON' ; 'QUIT' courant ; 'FINSI' ; TEST = 'EGA' VAL1 'AXIS' ; 'SI' TEST ; ROTU0 = 2. * VZ1 '-' (ROTU0 * XC1) ; 'SINO' ; 'FINSI' ; 'ZONE' $domaine 'OPER' 'FIMP' ROTU0 'INCO' 'PSI' 'CLIM' 'PSI' 'TIMP' CONT0 0. ; RK . 'INCO' = 'TABLE' 'INCO' ; EXEC RK ; 'FINP' psi ; * *================================================================== * Calcul du Nusselt (en adimensionné = grad THETA) *================================================================== * E/ : TN : CHPO : Température * E/ : $DOMAINE : MMODEL 'NAVIER_STOKES' volumique * E/ : $COTE : MMODEL 'NAVIER_STOKES' surfacique * /S : NUSS1 : CHPO : Nusselt local aux sommets * /S : RES1 : FLOTTANT : Nusselt moyen * /S : SUR1 : FLOTTANT : Surface totale considérée *------------------------------------------------------------------ * 'DEBPROC' calcnuss tn*chpoint $domaine*mmodel $cote*mmodel ; NUSS2 = NUSS1 * S1 ; 'FINP' nuss1 res1 sur1 ; *------------------------------------------------------------------ * * *================================================================== * Calcul du résidu en température et arrêt suivant un critère *================================================================== * E/ : RVX : TABLE : TABLE des données créées par EQEX * ARG1 : Fréquence d'impression * ARG2 : Critère d'arrêt * /S : MAT1 : MATRIK : Objet vide * /S : CHP1 : CHPO : Objet vide *------------------------------------------------------------------ * 'DEBPROC' residu rvx*table ; FREQ = RVX . 'ARG1' ; EPS0 = RVX . 'ARG2' ; NITER = RV . 'NITER' ; DD = RV . 'PASDETPS' . 'NUPASDT' ; NN = DD '/' FREQ ; * * Pilotage du pas de temps FREQ1 = 50 ; N1 = DD '/' FREQ1 ; L1 = 'EGA' (DD '-' (FREQ1*N1)) 0 ; 'SI' L1 ; 'FINSI' ; * L0 = 'EGA' (DD '-' (FREQ*NN)) 0 ; 'SI' L0 ; RANG0 = RV . 'PASDETPS' . 'NUPASDT' ; TIME0 = RV . 'PASDETPS' . 'TPS' ; TN0 = RV . 'INCO' . 'TN' ; TNM0 = RV . 'INCO' . 'TN2' ; ERR0 = ('MAXIMUM' ('ABS' (TN0 '-' TNM0))) '+' 1.D-20 ; ERR10 = ('LOG' ERR0 ) '/' ('LOG' 10.) ; 'MESSAGE' 'Résidu en Température au pas' RANG0 '(' TIME0 ') :' ERR0 ':' ERR10 ; Y1 = ('LOG' EPS0) '/' ('LOG' 10) ; 'SI' POST1 ; * * Impression "dynamique" du résidu X1 = 0. ; X2 = RV . 'ITMA' ; 'DESSIN' EV1 'YBOR' Y1 0. 'NCLK' ; 'FINSI' ; 'SI' POST2 ; * ** Impression "dynamique de la température ** L1 = 'PROG' 0. PAS 0.1 1. ; ** trace L1 tn0 DOM1 CNT1 'TITR' 'Température' 'NCLK' ; * * Impression "dynamique" de la vitesse un = RV . 'INCO' . 'UN' ; un2 = un / (nun + 1.D-5) ; trace VUN DOM1 CNT0 'TITR' 'Vitesse Normalisee' 'NCLK' ; 'FINSI' ; 'SI' ((ERR10 < Y1) 'ET' (DD > 10)) ; RV . 'TFINAL' = RV . 'PASDETPS' . 'TPS' ; 'FINSI' ; 'FINSI' ; * * Mise à jour de la viscosité à chaque pas de temps * NU0 = ETA0 * RV . 'INCO' . 'TN' + 1. ; * * Conservation de la température pour le prochain passage RV . 'INCO' . 'TN2' = 'COPIER' RV . 'INCO' . 'TN' ; 'FINP' mat1 chp1 ; *------------------------------------------------------------------ * * *========================================================== * Maillage *========================================================== * * Dimensions caractéristiques L = 1. ; H = 1. ; A = L '/' H ; AS2 = A '/' 2. ; * * Décallage par rapport à l'axe pour les éléments quadratiques FLAG1 = vrai ; 'SI' FLAG1 ; RMIN = 0.0 ; 'SINO' ; RMIN = 0.01 ; 'FINSI' ; * * Points du maillage *************************** Adim. : Longueur de référence = H *************************** A=L/H P0 = AS2 0.5 ; P1 = RMIN 0.0 ; P2 = AS2 0.0 ; P3 = A 0.0 ; P4 = A 0.5 ; P5 = A 1.0 ; P6 = AS2 1.0 ; P7 = RMIN 1.0 ; P8 = RMIN 0.5 ; *************************** Adim. : Longueur de référence = L *************************** A=H/L *P0 = 0.5 AS2; *P1 = RMIN 0.0 ; *P2 = 0.5 0.0 ; *P3 = 1.0 0.0 ; *P4 = 1.0 AS2 ; *P5 = 1.0 A ; *P6 = 0.5 A ; *P7 = RMIN A ; *P8 = RMIN AS2 ; * * Données pour le mailleur NXY = -5 ; RAF = 1 ; NX0 = RAF * NXY ; NX = RAF * NXY ; NY = RAF * NXY ; D0 = 0.10 / RAF ; D1 = 0.10 / RAF ; D2 = 0.10 / RAF ; * * Droites du maillage filaire P1P3 = P1P2 'ET' P2P3 ; P3P5 = P3P4 'ET' P4P5 ; P5P7 = P5P6 'ET' P6P7 ; P7P1 = P7P8 'ET' P8P1 ; * * Maillages, sous-maillages et modèles associés CNT1 = P1P3 ; CNT2 = P3P5 ; CNT3 = P5P7 ; CNT4 = P7P1 ; CNT0 = CNT1 'ET' CNT2 'ET' CNT3 'ET' CNT4 ; * * 'DOMA' $DOM1 'IMPR' ; * *========================================================== * Définition des équations vitesse, pression et température *========================================================== * * * Paramètres physiques et pas de temps GB1 = Ra / Pr ; ALFA = 1. / Pr ; GB = 0. (-1. * GB1) ; * * Equations en vitesse et température * ITMA : Nombre de pas de temps * NITER : Nombre d'itérations internes * OMEGA : Facteur de relaxation des itérations internes * FIDT : Nombre maximum de pas de temps 'OPTI' 'EF' KSUPG 'IMPL' KPRES 'ZONE' $DOM1 'OPER' residu 1 IRESU 'ZONE' $DOM1 'OPER' 'LAPN' ALFA 'INCO' 'TN' 'ZONE' $DOM1 'OPER' 'KONV' 1. 'UN' ALFA 'INCO' 'TN' ** 'ZONE' $DOM1 'OPER' 'TSCAL' ALFA 'UN' 0. 'INCO' 'TN' 'OPTI' 'EF' 'CENTREE' 'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UN' 'DT' 'INCO' 'UN' * * Conditions aux limites en vitesse et température RV = 'EQEX' RV 'CLIM' 'TN' 'TIMP' CNT1 1. 'TN' 'TIMP' CNT3 0. 'UN' 'UIMP' CNT0 0. 'UN' 'VIMP' CNT1 0. 'UN' 'VIMP' CNT2 0. 'UN' 'VIMP' CNT3 0. ; * * Equation en pression avec condition de Dirichlet en un point * * Initialisation des champs (table INCO) rv . 'INCO' = TABLE 'INCO' ; * TINI0 = 1. - XS * XS * AT0 + 1. * (1. - YS) ; * * NU0 = ETA0 * RV . 'INCO' . 'TN' + 1. ; * RV . 'INCO' . 'DT' = DT0 ; * * Champs supplémentaires pour la procédure residu * * Méthode d'inversion du problème en vitesse rv . 'METHINV' .'TYPINV' = 1 ; rv . 'METHINV' .'IMPINV' = 0 ; rv . 'METHINV' .'NITMAX' = 100 ; rv . 'METHINV' .'PRECOND' = 3 ; rv . 'METHINV' .'RESID' = 1.e-6 ; rv . 'METHINV' . 'FCPRECT' = 1 ; rv . 'METHINV' . 'FCPRECI' = 1 ; * * Méthode d'inversion du problème en pression rvp . 'METHINV' . 'TYPINV' = 1 ; rvp . 'METHINV' . 'IMPINV' = 0 ; rvp . 'METHINV' . 'NITMAX' = 100 ; rvp . 'METHINV' . 'PRECOND' = 3 ; rvp . 'METHINV' . 'RESID' = 1.e-12 ; rvp . 'METHINV' . 'FCPRECT' = 100 ; rvp . 'METHINV' . 'FCPRECI' = 100 ; * * Couplage vitesse/pression : Méthode de projection * *========================================================== * Résolution *========================================================== * EXEC RV ; * *========================================================== * Post traitement *========================================================== * * Nusselt nug resg surg = calcnuss (RV . 'INCO' . 'TN') $DOM1 $CNT1 ; nud resd surd = calcnuss (RV . 'INCO' . 'TN') $DOM1 $CNT3 ; resg = resg / surg ; resd = resd / surd ; * * Fonction de courant psi1 = courant (RV . 'INCO' . 'UN') $DOM1 $CNT0 ; *-------------------------> Début des tracés 'SI' GRAPH ; * * Vitesse un = RV . 'INCO' . 'UN' ; trace VUN DOM1 CNT0 'TITR' 'Vitesse' ; * * Température tn = RV . 'INCO' . 'TN' ; * * Fonction de courant trace psi1 DOM1 CNT0 NLI0 vun 'TITR' 'Fonction de courant' ; * * Pression trace pn dom1 CNT0 NLI0 'TITR' 'Pression' ; * 'FINSI' ; *-------------------------> Fin des tracés * *========================================================== * Test de non régression *========================================================== * * PSIMAX : Valeur max de la fonction de courant * DIFF0 : Ecart Nusselt chaud, Nusselt froid * NUMOY : Nusselt moyen chaud/froid * diff0 = 'ABS' (resg + resd) ; nmoy0 = 'ABS' (resg - resd / 2.) ; 'SI' COMPLET ; TPSI0 = 88.D-5 ; TDIF0 = 1.D-2 ; TMOY0 = 1.775 ; DPSI0 = 3.D-5 ; DMOY0 = 2.5D-2 ; 'SINON' ; TPSI0 = 1. ; TDIF0 = 10. ; TMOY0 = 10. ; DPSI0 = 1. ; DMOY0 = 10. ; 'FINSI' ; DDIF0 = TDIF0 ; ER1 = psim0 - tpsi0 ABS ; TEST1 = ER1 < Dpsi0 ; ER2 = diff0 - Tdif0 ABS ; TEST2 = ER2 < Ddif0 ; ER3 = nmoy0 - Tmoy0 ABS ; TEST3 = ER3 < Dmoy0 ; 'MESS' '|PSI| max ' psim0 Tpsi0 ER1 Dpsi0 ; list TEST1 ; list TEST2 ; list TEST3 ; TEST5 = TEST1 ET TEST2 ET TEST3 ; SI TEST5 ; SINO ; FINSI ; 'FIN' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales