* fichier : ns1.dgibi
'OPTI' 'ECHO' 0;
************************************************************************
* NOM : NS1
* DESCRIPTION : Ecoulement de Navier-Stokes dans une tete de Mickey
* avec force tangente sur le bord
* On utilise bloq depl dire pour imposer u.n = 0
* Le test vérifie u.n=0
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 06/06/2008, version initiale
* HISTORIQUE : v1, 06/06/2008, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de ns1.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
*
interact = FAUX ;
graph = FAUX ;
*
'OPTION' 'DIME' 2 'ELEM' 'QUA8' ;
'SI' ('NON' interact) ;
'OPTION' 'TRAC' 'PS' ;
'SINON' ;
'OPTION' 'TRAC' 'X' ;
'FINSI' ;
lok = VRAI ;
*
* Procédure de calcul de la normale à un contour
*
* _mt : maillage de surface
* discg : discrétisation géométrique
* mnor : noms de composantes pour la normale
* discm : discrétisation pour la normale
*
'DEBPROC' VNOR ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' discg*'MOT' ;
'ARGUMENT' mnor*'LISTMOTS' ;
'ARGUMENT' discm*'MOT' ;
*
idim = 'VALEUR' 'DIME' ;
numop = idim ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 1.D0 ;
'REPETER' iiidim idim ;
iidim = &iiidim ;
A . iidim . 1 . 0 = 'LECT' ;
'FIN' iiidim ;
numvar = idim ;
numcof = idim ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' iiidim idim ;
iidim = &iiidim ;
nominc = 'EXTRAIRE' mnor iidim ;
* 'LISTE' nominc ;
B . 'VAR' . iidim . 'NOMDDL' = 'MOTS' nominc ;
B . 'VAR' . iidim . 'DISC' = discm ;
B . 'COF' . iidim . 'COMPOR' = 'CHAINE' 'VNOR' iidim ;
B . 'COF' . iidim . 'LDAT' = 'LECT' ;
B . iidim . iidim . 0 = 'LECT' iidim ;
'FIN' iiidim ;
chnori = 'NLIN' discg _mt A B 'GAU7' ;
* Matrice masse
numop = 1 ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 1.D0 ;
A . 1 . 1 . 0 = 'LECT' ;
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'VAR' . 1 . 'DISC' = discm ;
B . 1 . 1 . 0 = 'LECT' ;
chmass = 'NLIN' discg _mt A B 'GAU7' ;
chnor = '/' chnori chmass ;
'RESPRO' chnor ;
'FINPROC' ;
*
* Tracé des vitesses
*
'DEBPROC' TRACVIT ;
'ARGUMENT' rvx*'TABLE' ;
'SI' ('EXISTE' rvx 'EQEX') ;
rv = rvx . 'EQEX' ;
lrvx = VRAI ;
domz = rvx . 'DOMZ' ;
'SINON' ;
rv = rvx ;
lrvx = FAUX ;
'ARGUMENT' domz*'MMODEL' ;
'FINSI' ;
nuit = rv . 'NUITER' ;
chv = rv . 'INCO' . 'UN' ;
maxv = 'MAXIMUM' chv 'ABS' ;
'SI' ('<' maxv 1.D-8) ;
maxv = 1.D0 ;
'FINSI' ;
echvit = maxv ;
mt = 'DOMA' domz 'MAILLAGE' ;
echmvi = '**' ('/' ('MESURE' mt) ('NBEL' mt))
('/' 1.D0 ('VALEUR' 'DIME')) ;
vref = '/' ('*' echmvi 2.D0) echvit ;
* Vecteur unité
mpA = mt 'POIN' 'PROC' (0. 0.) ;
cvecu = 'MANUEL' 'CHPO' mpA 2 'UX' echvit 'UY' 0.D0
'NATURE' 'DISCRET' ;
vecvit1 = 'VECTEUR' chv vref 'DEPL' 'JAUN' ;
vecvit2 = 'VECTEUR' cvecu vref 'DEPL' 'ROUG' ;
vecvit = vecvit1 'ET' vecvit2 ;
tit = 'CHAINE' 'Vitesse ; nuiter=' nuit ' ; echvit=' echvit ;
'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit 'NCLK' ;
'SI' lrvx ;
'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit 'NCLK' ;
mat chpo = 'KOPS' 'MATRIK' ;
'RESPRO' mat chpo ;
'SINON' ;
'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit ;
'FINSI' ;
'FINPROC' ;
*
* Imposition d'une force
*
'DEBPROC' KTOIM ;
'ARGUMENT' rvx*'TABLE' ;
rv = rvx . 'EQEX' ;
mq = 'DOMA' (rvx . 'DOMZ') 'QUAF' ;
for = rvx . 'ARG1' ;
nominc = 'EXTRAIRE' (rvx . 'LISTINCO') 1 ;
ni1 = 'CHAINE' '1' nominc ;
ni2 = 'CHAINE' '2' nominc ;
* Matrice masse
idim = 'VALEUR' 'DIME' ;
numop = 2 ; numder = idim ; numvar = 2 ; numdat = 0 ; numcof = 0 ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'FX' ;
A . 'VAR' . 1 . 'DISC' = 'QUAF' ;
A . 'VAR' . 1 . 'VALEUR' = for ;
A . 'VAR' . 2 . 'NOMDDL' = 'MOTS' 'FY' ;
A . 'VAR' . 2 . 'DISC' = 'QUAF' ;
A . 'VAR' . 2 . 'VALEUR' = for ;
A . 1 . 1 . 0 = 'LECT' ;
A . 2 . 2 . 0 = 'LECT' ;
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' ni1 ;
B . 'VAR' . 1 . 'DISC' = 'QUAF' ;
B . 'VAR' . 2 . 'NOMDDL' = 'MOTS' ni2 ;
B . 'VAR' . 2 . 'DISC' = 'QUAF' ;
B . 1 . 1 . 0 = 'LECT' ;
B . 2 . 2 . 0 = 'LECT' ;
forint = 'NLIN' 'QUAF' _mt A B 'GAU7' ;
chvid matvid = 'KOPS' 'MATRIK' ;
'RESPRO' forint matvid ;
'FINPROC' ;
*
* Bloquage des vitesses suivant un champ de normale
*
'DEBPROC' KBLOQ ;
'ARGUMENT' rvx*'TABLE' ;
rv = rvx . 'EQEX' ;
'SI' ('EXISTE' rvx 'MATRICE') ;
mnormal = rvx . 'MATRICE' ;
'SINON' ;
vnormal = rv . 'VNORMAL' ;
mail = 'DOMA' (rvx . 'DOMZ') 'MAILLAGE' ;
mn = 'BLOQUE' 'DEPL' 'DIRE' vnormal mail ;
mn = 'KOPS' 'RIMA' mn ;
nominc = 'EXTRAIRE' (rvx . 'LISTINCO') 1 ;
ni1 = 'CHAINE' '1' nominc ;
ni2 = 'CHAINE' '2' nominc ;
mnormal = 'KOPS' 'CHANINCO' mn
('MOTS' 'LX' 'UX' 'UY')
('MOTS' 'LX' ni1 ni2)
('MOTS' 'FLX' 'FX' 'FY')
('MOTS' 'LX' ni1 ni2) ;
rvx . 'MATRICE' = mnormal ;
'FINSI' ;
chvid matvid = 'KOPS' 'MATRIK' ;
'RESPRO' chvid mnormal ;
'FINPROC' ;
*
* Maillage
*
* Paramètres
Rgrand = 1. ; Dpetit = 1. ; ang = 45. ; dang = 10. ;
den = 0.1 ;
'DENS' den ;
* Points
p0 = 0. 0. ;
p1 = 0. ('*' Rgrand -1.) ;
p2 = POINTCYL Rgrand ('-' ang dang) ;
p3 = POINTCYL ('+' Rgrand Dpetit) ang ;
p4 = POINTCYL Rgrand ('+' ang dang) ;
p5 = POINTCYL Rgrand ('-' 180. ('+' ang dang)) ;
p6 = POINTCYL ('+' Rgrand Dpetit) ('-' 180. ang) ;
p7 = POINTCYL Rgrand ('-' 180. ('-' ang dang)) ;
* Contour
l1 = 'CER3' p7 p1 p2 ; l2 = 'CER3' p2 p3 p4 ;
l3 = 'CERCLE' p4 p0 p5 ; l4 = 'CER3' p5 p6 p7 ;
cmt = l1 'ET' l2 'ET' l3 'ET' l4 ; cmt = 'ORIENTER' cmt ;
_cmt = cmt ;
mt = 'SURFACE' cmt ; _mt = 'CHANGER' mt 'QUAF' ;
*
* Normale au contour
*
vnormal = VNOR cmt 'QUAF' ('MOTS' 'UX' 'UY') 'QUAF' ;
*
* Discrétisation
*
disv = 'QUAF' ;
disp = 'CENTREP1' ;
dec = 'CENTREE' ;
*
Re = 30. ;
dif = '/' 1. Re ;
omeg = 1. ;
nitmax = 5 ;
xfor = '**' 3. 0.5 ; yfor = PI ;
fnormal = 'MANUEL' 'CHPO' _cmt ('MOTS' 'FX' 'FY') ('PROG' xfor yfor) ;
*
'SI' graph ;
vvno = 'VECT' vnormal 'DEPL' 'JAUN' ;
vfno = 'VECT' fnormal 'FORC' 'ROUG' ;
vtot = 'ET' vvno vfno ;
tit = 'CHAINE' 'Maillage' ' '
'Jaune:normale' ' '
'Rouge:force imposee' ;
'TRACER' vtot _mt 'TITR' tit ;
'FINSI' ;
*
$mt = 'MODELISER' _mt 'NAVIER_STOKES' disv ;
$cmt = 'MODELISER' cmt 'NAVIER_STOKES' disv ;
ppres = 'POIN' ('DOMA' $mt disp) 'PROC' (0.5 0.5) ;
mp1 = 'MANUEL' ppres 'POI1' ;
*
rv = 'EQEX' 'ITMA' 1 'NITER' nitmax 'OMEGA' omeg ;
'SI' graph ;
rv = 'EQEX' rv
'ZONE' $mt 'OPER' 'TRACVIT' ;
'FINSI' ;
*
rv = 'EQEX' rv
'OPTI' 'EF' 'IMPL' dec disp
'ZONE' $mt 'OPER' 'KONV' 1. 'UN' dif 'INCO' 'UN'
'OPTI' 'EF' 'IMPL' dec disp 'FTAU'
'ZONE' $mt 'OPER' 'LAPN' dif 'INCO' 'UN'
'OPTI' 'EF' 'IMPL' dec disp
'ZONE' $mt 'OPER' 'KBBT' -1. 'INCO' 'UN' 'PN'
;
* 'OPTI' 'EF' 'IMPL' 'CENTREE' disp
* 'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM' 'DT' 'UN' dif 'INCO' 'UN' ;
rv = 'EQEX' rv
'ZONE' $cmt 'OPER' 'KTOIM' fnormal 'INCO' 'UN' ;
rv = 'EQEX' rv
'ZONE' $cmt 'OPER' 'KBLOQ' 'INCO' 'UN' ;
rv = 'EQEX' rv 'CLIM'
'PN' 'TIMP' mp1 0. ;
rv . 'INCO' = 'TABLE' 'INCO' ;
rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0. 0.) ;
rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' disp 0. ;
rv . 'VNORMAL' = vnormal ;
*
EXEC rv ;
*
'SI' graph ;
TRACVIT rv $mt ;
fcou = FCOURANT _mt disv (rv . 'INCO' . 'UN') ;
'OPTI' 'ISOV' 'SULI' ;
tit = 'CHAINE' 'Fonction de courant ; Re=' Re ;
'TRACER' fcou _mt _cmt 'TITR' tit ;
'OPTI' 'ISOV' 'SURF' ;
MONTAGNE fcou _mt 'TITRE' tit 'SUPER' ;
'FINSI' ;
*
* Vérification que la vitesse est bien orthogonale à la normale
*
vit = rv . 'INCO' . 'UN' ;
mvit = 'MOTS' 'UX' 'UY' ;
ps = 'PSCAL' vit vnormal mvit mvit ;
mps = 'MAXIMUM' ps 'ABS' ;
valim = 1.D-12 ;
tst = ('<' mps valim) ;
'SI' ('NON' tst) ;
cherr = 'CHAINE' '!!! Erreur, on aurait voulu '
'mps=' mps ' < ' 'valim=' valim ;
'MESSAGE' cherr ;
'FINSI' ;
lok = lok 'ET' tst ;
*
* Fin du jeu de donnees
*
'SAUTER' 2 'LIGNE' ;
'SI' lok ;
'MESSAGE' 'Tout sest bien passe' ;
'SINON' ;
'MESSAGE' 'Il y a eu des erreurs' ;
'FINSI' ;
'SAUTER' 2 'LIGNE' ;
'SI' interact ;
'OPTION' 'DONN' 5 'ECHO' 1 ;
'FINSI' ;
'SI' ('NON' lok) ;
'ERREUR' 5 ;
'FINSI' ;
*
* End of dgibi file NS1
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer