***************** CAS TEST : TP4.DGIBI *************************
*
* Convection naturelle dans un cylindre uniformement chauffé
* (Navier-Stokes incompressible et approximation de Boussinesq)
*
* Ref biblio : Gartling D.K., A finite element analysis of
* volumetrically heated fluids in an axisymmetric enclosure,
* in Finite Elements in Fluids, vol4, pp233-250, 1982.
*
*------------------------------------------------------------------
*
* Algorithme de projection et élément (v,T)/p MACRO/CENTREP1
*
*------------------------------------------------------------------
*
* Auteur : Frédéric DABBENE
* ttmf3@semt2.smts.cea.fr
*
*------------------------------------------------------------------
* 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
*------------------------------------------------------------------
*
*
* 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-6 ;
'SINO' ;
IRESU = 1.D-3 ;
'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 ;
VAL0 = 'VALE' 'DIME' ;
TEST = 'EGA' VAL0 2 ;
'SI' TEST ;
'MESS' 'Remember that Velocity have to be at zero divergence' ;
'SINON' ;
'ERRE' 832 ;
'QUIT' courant ;
'FINSI' ;
VAL1 = 'VALE' 'MODE' ;
TEST = 'EGA' VAL1 'AXIS' ;
'SI' TEST ;
ROTU0 = 'KOPS' un 'ROT' $domaine ;
XC1 YC1 = 'COOR' ('DOMA' $domaine 'CENTRE') ;
VZ1 = 'NOEL' $domaine ('EXCO' un 'UY' 'SCAL') ;
ROTU0 = 2. * VZ1 '-' (ROTU0 * XC1) ;
'SINO' ;
ROTU0 = 'KOPS' un 'ROT' $domaine ;
'FINSI' ;
CONT0 = 'DOMA' $contour 'MAILLAGE' ;
RK = 'EQEX' $domaine 'OPTI' 'EF' 'IMPL'
'ZONE' $domaine 'OPER' 'LAPN' -1. 'INCO' 'PSI'
'ZONE' $domaine 'OPER' 'FIMP' ROTU0 'INCO' 'PSI'
'CLIM' 'PSI' 'TIMP' CONT0 0. ;
RK . 'INCO' = 'TABLE' 'INCO' ;
RK . 'INCO' . 'PSI' = 'KCHT' $domaine 'SCAL' 'SOMMET' 0. ;
EXEC RK ;
psi = 'COPI' RK . 'INCO' . 'PSI' ;
'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
*------------------------------------------------------------------
*
'DEBPROC' calcnuss tn*chpoint $domaine*mmodel $cote*mmodel ;
GRADC0 = 'KOPS' tn 'GRAD' $domaine ;
GRADS0 = 'ELNO' $domaine GRADC0 ;
GS0 = 'KCHT' $cote 'VECT' 'SOMMET' GRADS0 ;
GC0 = 'NOEL' $cote GS0 ;
NORM1 = 'DOMA' $domaine 'NORMALE' ;
NCOTE = 'KCHT' $cote 'VECT' 'CENTRE' NORM1 ;
MOT1 = 'MOTS' 'UX' 'UY' ;
NUSS1 = 'PSCA' GC0 NCOTE MOT1 MOT1 ;
S1 = 'DOMA' $cote 'VOLUME' ;
NUSS2 = NUSS1 * S1 ;
RES1 = 'MAXI' ('RESU' NUSS2) ;
'FINP' nuss1 res1 ;
*------------------------------------------------------------------
*
*
*==================================================================
* 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 ;
RV = rvx . 'EQEX' ;
FREQ = RVX . 'ARG1' ;
EPS0 = RVX . 'ARG2' ;
NITER = RV . 'NITER' ;
DD = RV . 'PASDETPS' . 'NUPASDT' ;
NN = DD '/' FREQ ;
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 ;
RV . 'INCO' . 'IT' = RV . 'INCO' . 'IT' 'ET' ('PROG' RANG0) ;
RV . 'INCO' . 'TI' = RV . 'INCO' . 'TI' 'ET' ('PROG' TIME0) ;
RV . 'INCO' . 'ER' = RV . 'INCO' . 'ER' 'ET' ('PROG' ERR10) ;
EV1 = 'EVOL' 'MANUEL' (RV . 'INCO' . 'IT') (RV . 'INCO' . 'ER') ;
Y1 = ('LOG' EPS0) '/' ('LOG' 10) ;
'SI' POST1 ;
X1 = 0. ; X2 = RV . 'ITMA' ;
'DESSIN' EV1 'YBOR' Y1 0. 'NCLK' ;
'FINSI' ;
'SI' POST2 ;
L1 = (PROG 10. PAS 5. 90.)* 1.D-3 ;
trace L1 tn0 DOM1 CNT1 'TITR' 'Température' 'NCLK' ;
'FINSI' ;
'SI' ((ERR10 < Y1) 'ET' (DD > 10)) ;
RV . 'TFINAL' = RV . 'PASDETPS' . 'TPS' ;
'FINSI' ;
'FINSI' ;
RV . 'INCO' . 'TN2' = 'COPIER' RV . 'INCO' . 'TN' ;
mat1 chp1 = 'KOPS' 'MATRIK' ;
'FINP' mat1 chp1 ;
*------------------------------------------------------------------
*
*
'OPTION' 'DIME' 2 'ELEM' 'QUA8' 'MODE' 'AXIS' 'ISOV' 'SULI' ;
*
* NLI0 : Nombre d'isovaleurs
*
NLI0 = 14 ;
*
*------------------------------------------------------------------
* Choix de l'algorithme et des discrétisations en vitesse/pression
*------------------------------------------------------------------
* Les couples vitesse/pression (ICHOI/)
* :( 1/ LINE + CENTRE (déconseillé,--couteux, -stable -précis)
* (P1/P0 et Q1/P0)
* :( 2/ MACRO + CENTRE (déconseillé,--couteux, =stable -précis)
* (P1/P0 stabilisé et Q1/P0 stabilisé)
* 3/ MACRO + CENTREP1 (conseillé, -couteux, +stable, =précis)
* :( (isoP2/isoP1nc à éviter (PAS DE TRIANGLE SVP))
* :) (isoQ2/isoP1nc à consommer sans modération)
* :) 4/ QUAF + CENTREP1 (conseillé, +couteux, +stable, +précis)
* :) 5/ QUAF + MSOMMET (conseillé,++couteux, +stable, +précis)
* Les autres combinaisons ne sont pas dans les notices de
* NAVI, EXEC, EQEX, EQPR et DOMA. Donc ...
*------------------------------------------------------------------
* Les algorithmes (IRESO/)
* :( 1/ avec itérations internes et méthode de projection
* (à utiliser avec précaution : TESTS INSUFFISANTS)
* :) 2/ sans itérations internes et méthode de projection
* :) 3/ full implicite
* :) 4/ semi-explicite et RV . 'PRESSSION' = RVP
* (déconseillé, ancienne syntaxe : nouvelle ci-dessous)
* :( 5/ semi-explicite et RV . 'POISSON' = RVP
* Les autres choix ne sont pas dans les notices de
* NAVI, EXEC, EQEX, EQPR et DOMA. Donc ...
*------------------------------------------------------------------
* Le décentrement (IDCEN/)
* 0/ Pas de décentrement (Galerkin)
* 1/ SUPG (Petrov-Galerkin)
* / SUPGDC (En dernier recours)
*------------------------------------------------------------------
IRESO = 2 ;
ICHOI = 3 ;
IDCEN = 0 ;
*
* On force MACRO CENTRE dans le cas semi-implicite
'SI' ('EGA' IRESO 4) ;
'MESS' 'On force MACRO CENTRE dans le cas semi-explicite' ;
ICHOI = 2 ;
IDCEN = 0 ;
'FINSI' ;
'SI' ('EGA' ICHOI 1) ;
DISCR = 'LINE' ;
KPRES = 'CENTRE' ;
'FINSI' ;
'SI' ('EGA' ICHOI 2) ;
DISCR = 'MACRO' ;
KPRES = 'CENTRE' ;
'FINSI' ;
'SI' ('EGA' ICHOI 3) ;
DISCR = 'MACRO' ;
KPRES = 'CENTREP1' ;
'FINSI' ;
'SI' ('EGA' ICHOI 4) ;
DISCR = 'QUAF' ;
KPRES = 'CENTREP1' ;
'FINSI' ;
'SI' ('EGA' ICHOI 5) ;
DISCR = 'QUAF' ;
KPRES = 'MSOMMET' ;
'FINSI' ;
'SI' ('EGA' IDCEN 0) ;
KSUPG = 'CENTREE' ;
'SINON' ;
KSUPG = 'SUPG' ;
* KSUPG = 'SUPGDC' ;
'FINSI' ;
*
*==========================================================
* Maillage
*==========================================================
*
* Dimensions caractéristiques
L = 1.25 ;
H = 2.5 ;
A = H '/' L ;
AS2 = A '/' 2. ;
FLAG1 = ICHOI < 4 ;
*
* Décallage par rapport à l'axe pour les éléments quadratiques
'SI' FLAG1 ;
RMIN = 0.0 ;
'SINO' ;
RMIN = 0.01 ;
'FINSI' ;
*
* Points du maillage
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 = -4 ;
RAF = 2 ;
NX0 = RAF * NXY ;
NX = RAF * NXY ;
NY = RAF * NXY ;
D0 = 0.10 ;
D1 = 0.10 ;
D2 = 0.10 ;
*
* Droites du maillage filaire
P1P2 = P1 'DROI' NX0 P2 'DINI' D0 'DFIN' D2 ;
P2P3 = P2 'DROI' NX P3 'DINI' D2 'DFIN' D1 ;
P1P3 = P1P2 'ET' P2P3 ;
P3P4 = P3 'DROI' NY P4 'DINI' D1 'DFIN' D2 ;
P4P5 = P4 'DROI' NY P5 'DINI' D2 'DFIN' D1 ;
P3P5 = P3P4 'ET' P4P5 ;
P5P6 = P5 'DROI' NX P6 'DINI' D1 'DFIN' D2 ;
P6P7 = P6 'DROI' NX0 P7 'DINI' D2 'DFIN' D0 ;
P5P7 = P5P6 'ET' P6P7 ;
P7P8 = P7 'DROI' NY P8 'DINI' D1 'DFIN' D2 ;
P8P1 = P8 'DROI' NY P1 'DINI' D2 'DFIN' D1 ;
P7P1 = P7P8 'ET' P8P1 ;
*
* Maillages, sous-maillages et modèles associés
CNT1 = P1P3 'ET' P3P5 'ET' P5P7 'ET' P7P1 ;
CNT2 = P1P3 'ET' P3P5 'ET' P5P7 ;
DOM1 = 'DALL' P1P3 P3P5 P5P7 P7P1 ;
DOM1 = 'CHAN' DOM1 'QUAF' ;
*
$DOM1 = 'MODE' DOM1 'NAVIER_STOKES' DISCR ;
$CNT1 = 'MODE' CNT1 'NAVIER_STOKES' DISCR ;
$CNT2 = 'MODE' CNT2 'NAVIER_STOKES' DISCR ;
*
CNT1 = 'DOMA' $CNT1 'CENTRE' ;
CNT2 = 'DOMA' $CNT2 'CENTRE' ;
DOMF = 'DOMA' $DOM1 'FACE' ;
'ELIM' DOMF (CNT1 'ET' CNT2) 1.D-4 ;
DOM1 = 'DOMA' $DOM1 'MAILLAGE' ;
CNT1 = 'DOMA' $CNT1 'MAILLAGE' ;
CNT2 = 'DOMA' $CNT2 'MAILLAGE' ;
MP1 = ('DOMA' $DOM1 KPRES) 'ELEM' 1 ;
******** ????????????????? Menvlp = doma $vc 'ENVELOPPE' ;
******** ????????????????? nentr = doma $entree 'NORMALEV' ;
'DOMA' $DOM1 'IMPR' ;
*
*==========================================================
* Définition des équations vitesse, pression et température
*==========================================================
*
*
* Paramètres physiques et pas de temps
Pr = 0.65 ;
Gr = 4.4E4 ;
**Gr = 4.4E5 ;
GB1 = Gr * Pr * Pr ;
NU = Pr ;
ALFA = 1. ;
GB = 0. (-1. * GB1) ;
DT = 0.05 ;
*
* 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
*RV = 'EQEX' $DOM1 'ITMA' 100 'NITER' 10 'OMEGA' 0.9 'FIDT' 10000
'SI' ('EGA' IRESO 1) ;
RV = 'EQEX' $DOM1 'ITMA' 500 'NITER' 5 'OMEGA' 0.2 'FIDT' 10000
'OPTI' 'EF' KSUPG 'IMPL' KPRES
'ZONE' $DOM1 'OPER' residu 1 IRESU
'ZONE' $DOM1 'OPER' 'NS' NU GB 'TN' 0. 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'LAPN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'KONV' 1. 'UN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'FIMP' 1. 'INCO' 'TN'
'OPTI' 'EF' 'CENTREE'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UNM' DT 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'TNM' DT 'INCO' 'TN' ;
'FINSI' ;
'SI' ('EGA' IRESO 2) ;
RV = 'EQEX' $DOM1 'ITMA' 1000 'NITER' 1 'OMEGA' 1. 'FIDT' 10000
'OPTI' 'EF' KSUPG 'IMPL' KPRES
'ZONE' $DOM1 'OPER' residu 1 IRESU
'ZONE' $DOM1 'OPER' 'NS' NU GB 'TN' 0. 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'LAPN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'KONV' 1. 'UN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'FIMP' 1. 'INCO' 'TN'
'OPTI' 'EF' 'CENTREE'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UN' DT 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'TN' DT 'INCO' 'TN' ;
'FINSI' ;
'SI' ('EGA' IRESO 3) ;
RV = 'EQEX' $DOM1 'ITMA' 1000 'NITER' 1 'OMEGA' 1. 'FIDT' 10000
'OPTI' 'EF' KSUPG 'IMPL' KPRES
'ZONE' $DOM1 'OPER' residu 1 IRESU
'ZONE' $DOM1 'OPER' 'NS' NU GB 'TN' 0. 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'LAPN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'KONV' 1. 'UN' ALFA 'INCO' 'TN'
'ZONE' $DOM1 'OPER' 'FIMP' 1. 'INCO' 'TN'
** 'ZONE' $DOM1 'OPER' 'TSCAL' ALFA 'UN' 1. 'INCO' 'TN'
'OPTI' 'EFM1' 'CENTREE'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UN' DT 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'TN' DT 'INCO' 'TN' ;
'FINSI' ;
'SI' ('EGA' IRESO 4) ;
RV = 'EQEX' $DOM1 'ITMA' 1000 'ALFA' 1.
'ZONE' $DOM1 'OPER' residu 1 IRESU
'OPTI' 'SUPG'
'ZONE' $DOM1 'OPER' 'NS' NU GB 'TN' 0. 'INCO' 'UN'
'OPTI' 'SUPG'
'ZONE' $DOM1 'OPER' 'TSCAL' ALFA 'UN' 1. 'INCO' 'TN'
'OPTI' 'CENTREE'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UN' 'DELTAT' 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'TN' 'DELTAT' 'INCO' 'TN' ;
'FINSI' ;
'SI' ('EGA' IRESO 5) ;
RV = 'EQEX' $DOM1 'ITMA' 1000 'ALFA' 1.
'ZONE' $DOM1 'OPER' residu 1 IRESU
'OPTI' 'SUPG'
'ZONE' $DOM1 'OPER' 'NS' NU GB 'TN' 0. 'INCO' 'UN'
'OPTI' 'SUPG'
'ZONE' $DOM1 'OPER' 'TSCAL' ALFA 'UN' 1. 'INCO' 'TN'
'OPTI' 'CENTREE'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'UN' 'DELTAT' 'INCO' 'UN'
'ZONE' $DOM1 'OPER' 'DFDT' 1. 'TN' 'DELTAT' 'INCO' 'TN' ;
'FINSI' ;
*
* Conditions aux limites en vitesse et température
RV = 'EQEX' RV 'CLIM'
'TN' 'TIMP' CNT2 0.
'UN' 'UIMP' CNT1 0. 'UN' 'VIMP' CNT2 0. ;
*
* Equation en pression avec condition de Dirichlet en un point
'SI' (' Début des tracés
'SI' GRAPH ;
trace psi1 DOM1 CNT1 NLI0 vun 'TITR' 'Fonction de courant' ;
*
* Température
tn = RV . 'INCO' . 'TN' ;
trace tn DOM1 CNT1 NLI0 'TITR' 'Température' ;
*
* Vitesse
un = RV . 'INCO' . 'UN' ;
vun = 'VECT' UN 0.005 'UX' 'UY' 'JAUNE' ;
trace VUN DOM1 CNT1 'TITR' 'Vitesse' ;
*
* Pression
'SI' ('EG' IRESO 4) ;
pe = RV . 'INCO' . 'PRESSION' ;
'FINSI' ;
pn = 'ELNO' $DOM1 ('KCHT' $DOM1 'SCAL' kpres pe) kpres;
trace pn dom1 CNT1 NLI0 'TITR' 'Pression' ;
*
'FINSI' ;
*-------------------------> Fin des tracés
*
*==========================================================
* Test de non régression
*==========================================================
*
'SAUT' 5 'LIGN' ;
VTMAX = maxi (RV . 'INCO' . 'TN') ;
mininu = 'MINI' nug ; maxinu = 'MAXI' nug ;
VTIME = RV . 'PASDETPS' . 'TPS' ;
'SI' COMPLET ;
TTMAX = 0.12727 ;
TNMAX =-3.52366E-2 ;
TNMIN =-0.99271 ;
TNAVE =-5.9121 ;
TIMEM = 3.25 ;
'SINON' ;
TTMAX = 0.12813 ;
TNMAX =-3.50596E-2 ;
TNMIN =-0.96950 ;
TNAVE =-5.8951 ;
TIMEM = 0.5 ;
'FINSI' ;
DTMAX = 1.D-5 ;
DNMAX = 1.D-4 ;
DTIME = 1.D-4 ;
ER1 = VTMAX - TTMAX ABS ; TEST1 = ER1 < DTMAX ;
ER2 = MININU - TNMIN ABS ; TEST2 = ER2 < DNMAX ;
ER3 = RESG - TNAVE ABS ; TEST3 = ER3 < DNMAX ;
ER4 = VTIME - TIMEM ABS ; TEST4 = ER4 < DTIME ;
'MESS' 'CHAMP/VALEUR/CIBLE/ERREUR/TOLERANCE/TEST' ;
'MESS' '----------------------------------------' ;
'MESS' 'Temperature ' VTMAX TTMAX ER1 DTMAX ;
list TEST1 ;
'MESS' 'Nusselt min ' mininu TNMIN ER2 DNMAX ;
list TEST2 ;
'MESS' 'Nusselt moy ' resg TNMIN ER3 DNMAX ;
list TEST3 ;
'MESS' 'Temps final ' VTIME TIMEM ER4 DTIME ;
list TEST4 ;
TEST5 = TEST1 ET TEST2 ET TEST3 ET TEST4 ;
SI TEST5 ;
ERRE 0 ;
SINO ;
ERRE 5 ;
FINSI ;
'FIN' ;
|
Fig 19 - Température
|
|
Fig 20 - Vitesse et ligne de courant
|
|
Fig 21 - Pression
|
traduction
2003-11-04