* fichier : vortex.dgibi
COMPLET = FAUX ;
SI ( COMPLET ) ;
NX = 20 ;
NITER = 2000 ;
CFL = 1.0 ;
SINON ;
NX = 5 ;
NITER = 250 ;
CFL = 1.0 ;
FINSI ;
GRAPH = 'N' ;
*********************************************************************
* SIMULATION D'UN TOURBILLON - COMPARAISON AVEC SOLUTION ANALYTIQUE *
* DES EQUATIONS DE NAVIER-STOKES *
* OPERATEUR NS - OPTION SUPG *
* H. Paillere - Avril 1997 *
*********************************************************************
******************************************************************
* PROCEDURE POUR ESTIMER LA CONVERGENCE VERS L'ETAT STATIONNAIRE *
******************************************************************
DEBPROC CALCUL ;
ARGU RVX*'TABLE' ;
RV = RVX.'EQEX' ;
UN = RV.INCO.'UN' ;
UNM1 = RV.INCO.'UNM1' ;
DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/5 ;
LO = (DD-(5*NN)) EGA 0 ;
SI ( LO ) ;
unx= kcht $MT scal sommet (exco 'UX' un) ;
unm1x = kcht $MT scal sommet (exco 'UX' unm1) ;
uny= kcht $MT scal sommet (exco 'UY' un) ;
unm1y = kcht $MT scal sommet (exco 'UY' unm1) ;
ERRX = KOPS unx '-' unm1x ;
ERRY = KOPS uny '-' unm1y ;
ELIX = MAXI ERRX 'ABS' ;
ELIY = MAXI ERRY 'ABS' ;
ELIX = (LOG (ELIX + 1.0E-20))/(LOG 20.) ;
ELIY = (LOG (ELIY + 1.0E-20))/(LOG 20.) ;
PMAX = MAXI RVP.PRESSION ;
PMIN = MINI RVP.PRESSION ;
DP = PMAX - PMIN ;
MESSAGE 'ITER ' RV.PASDETPS.'NUPASDT' ' ERREUR LINF ' ELIY
'PMAX = ' PMAX 'PMIN = ' PMIN 'DP = ' DP ;
IT = PROG RV.PASDETPS.'NUPASDT' ;
ER = PROG ELIY ;
RV.INCO.'IT' = (RV.INCO.'IT') ET IT ;
RV.INCO.'ER' = (RV.INCO.'ER') ET ER ;
FINSI;
RV.INCO.'UNM1' = KCHT $MT 'VECT' 'SOMMET' (RV.INCO.'UN') ;
as2 ama1 = 'KOPS' 'MATRIK' ;
FINPROC as2 ama1 ;
**************************
* DEFINITION DU MAILLAGE *
**************************
option dime 2 elem qua8 ;
P1 = 0.0 (0.5*(-1.)) ;
p2 = 1.0 (0.5*(-1.)) ;
p3 = 1.0 0.5 ;
p4 = 0.0 0.5 ;
NY = NX ;
bas = p1 d NX p2 ;
cdro = p2 d NY p3 ;
haut = p3 d NX p4 ;
cgau = p4 d NY p1 ;
cnt = bas et cdro et haut et cgau ;
mt = bas cdro haut cgau daller ;
tass MT ;
orienter mt ;
mt= chan mt quaf ;
$mt = MODE mt 'NAVIER_STOKES' 'MACRO' ;
mt2 = mt ;
mt = DOMA $mt maillage ;
***********************
* SOLUTION ANALYTIQUE *
***********************
PI = 3.141592654 ;
B = 10. ;
NU = 1.0/B ;
ALPHA = -1.0 ;
XX YY = COOR (DOMA $MT SOMMET) ;
CX = COS ((KOPS XX '*' 180.)) ;
CY = COS ((KOPS YY '*' 180.)) ;
SX = SIN ((KOPS XX '*' 180.)) ;
SY = SIN ((KOPS YY '*' 180.)) ;
UEX = KOPS ( KOPS SX '*' SY ) '*' B ;
VEX = KOPS ( KOPS CX '*' CY ) '*' B ;
PEX = KOPS ( KOPS CX '*' SY ) '*' (PI*(-2.)*ALPHA) ;
UEX1 = NOMC 'UX' UEX 'NATU' 'DISCRET' ;
VEX1 = NOMC 'UY' VEX 'NATU' 'DISCRET' ;
UUX = KCHT $MT VECT SOMMET (UEX1 ET VEX1) ;
B1 = B * CY ;
B2 = B * SX ;
XXC YYC = COOR (DOMA $MT CENTRE) ;
CX = COS ((KOPS XXC '*' 180.)) ;
CY = COS ((KOPS YYC '*' 180.)) ;
SX = SIN ((KOPS XXC '*' 180.)) ;
SY = SIN ((KOPS YYC '*' 180.)) ;
F1_1 = KOPS ( KOPS SX '*' CX ) '*' (PI*B*B) ;
F1_2 = KOPS ( KOPS SX '*' SY ) '*' (2.0*PI*PI*(ALPHA+1.0)) ;
F1 = KOPS F1_1 '+' F1_2 ;
F2_1 = KOPS ( KOPS SY '*' CY ) '*' (PI*B*B*(-1.0)) ;
F2_2 = KOPS ( KOPS CX '*' CY ) '*' (2.0*PI*PI*(1.0-ALPHA)) ;
F2 = KOPS F2_1 '+' F2_2 ;
F1 = nomc 'UX' F1 'NATU' 'DISCRET' ;
F2 = nomc 'UY' F2 'NATU' 'DISCRET' ;
SS = KCHT $MT VECT CENTRE (F1 ET F2) ;
***************************
* TABLES EQEX ET PRESSION *
***************************
RV = EQEX $MT 'ITMA' NITER 'ALFA' CFL
'ZONE' $MT 'OPER' CALCUL
'OPTI' 'SUPG' 'MMPG'
'ZONE' $MT 'OPER' 'NS' NU SS 'INCO' 'UN'
'OPTI' 'CENTREE' EFM1
ZONE $MT 'OPER' 'DFDT' 1. 'UN' 'DELTAT' INCO 'UN'
;
RV = EQEX RV
'CLIM' 'UN' 'UIMP' cgau 0. 'UN' 'VIMP' cgau B1
'UN' 'UIMP' cdro 0. 'UN' 'VIMP' cdro (B1*(-1.))
'UN' 'UIMP' bas (B2*(-1.)) 'UN' 'VIMP' bas 0.
'UN' 'UIMP' haut B2 'UN' 'VIMP' haut 0. ;
RVP = EQPR $MT KTYPI 1
ZONE $MT 'OPER' 'PRESSION' 0.
'PIMP' 0. ;
**************
* TABLE INCO *
**************
RV.INCO=TABLE INCO ;
RV.INCO.'UN'=kcht $MT VECT SOMMET (0. 0.) ;
rv.inco.'UNM1' = kcht $MT 'VECT' 'SOMMET' (0. 0.) ;
rv.inco.'IT' = PROG 1 ;
rv.inco.'ER' = PROG 0. ;
RV.PRESSION =RVP ;
* pour triangles:
* RVP.BETA = 1000. ;
EXEC RV ;
SI ( 'EGA' graph 'O') ;
EVOL4 = EVOL 'MANU' 'ITERATIONS' (RV.INCO.'IT') 'LOG|E|inf'
(RV.INCO.'ER') ;
DESS EVOL4 'XBOR' 0. 2000. 'YBOR' -20.0 0.0 ;
TRACE PEX MT CNT 15 'TITR' 'PRESSION THEORIQUE' ;
TRACE RVP.PN MT CNT 15 'TITR' 'PRESSION' ;
unx= kcht $MT scal sommet (exco 'UX' RV.INCO.'UN') ;
TRACE UEX MT CNT 15 'TITR' 'UX THEORIQUE' ;
TRACE UNX MT CNT 15 'TITR' 'UX' ;
UNCH = VECT RV.INCO.'UN' 0.01 UX UY JAUNE ;
TRACE UNCH MT CNT ;
FINSI ;
un = RV.INCO.'UN' ;
unx= kcht $MT scal sommet (exco 'UX' un) ;
uny= kcht $MT scal sommet (exco 'UY' un) ;
ERRX = KOPS UNX '-' UEX1 ;
ERRX = KOPS ERRX '*' ERRX ;
ERR2 = 0. ;
NPTD= NBNO (DOMA $MT SOMMET) ;
REPETER BLOC1 NPTD ;
P1 = (DOMA $MT SOMMET) POIN &BLOC1 ;
ERR1 = 'EXTR' ERRX 'SCAL' P1 ;
ERR2 = ERR2 + ERR1 ;
FIN BLOC1 ;
ERR2 = ERR2/NPTD ;
ERR2 = ERR2 ** 0.5 ;
MESSAGE 'ERREUR VITESSE UX EN NORME L2 = ' ERR2 ;
SI ( ERR2 > 6.0E-2 ) ; ERREUR 5 ; FINSI ;
PEX = NOEL $MT PEX ;
PPP = ((MAXI RVP.PRESSION) + (MINI RVP.PRESSION))/2. ;
PN = KOPS RVP.PRESSION '-' PPP ;
ERRP = KOPS PEX '-' PN ;
ERRP = KOPS ERRP '*' ERRP ;
ERR2 = 0. ;
NELD= NBEL (DOMA $MT CENTRE) ;
REPETER BLOC1 NELD ;
P1 = (DOMA $MT CENTRE) POIN &BLOC1 ;
ERR1 = 'EXTR' ERRP 'SCAL' P1 ;
ERR2 = ERR2 + ERR1 ;
FIN BLOC1 ;
ERR2 = ERR2/NELD ;
ERR2 = ERR2 ** 0.5 ;
MESSAGE 'ERREUR PRESSION EN NORME L2 = ' ERR2 ;
SI ( ERR2 > 0.80 ) ; ERREUR 5 ; FINSI ;
SI ( (MINI RV.INCO.'ER') > -4.0 ) ; ERREUR 5 ; FINSI ;
FIN ;
© Cast3M 2003 - All rights reserved.
Disclaimer