Download ns1.dgibi

Back to the list

* 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