Download dedu_vahl.dgibi

Back to the list

* fichier : dedu_vahl.dgibi
'OPTI' 'ECHO' 0 ;
************************************************************************
* NOM         : DEDU_VAHL
* DESCRIPTION : Calcul de la cavité carrée différentiellement chauffée
*               (Navier-Stokes incompressible + Energie) pour plusieurs
*               nombres de Rayleigh et comparaison avec les résultats de
*               référence de De Vahl Davis :
*
*@Article{vahl_davis,
*  author =       {G. De Vahl Davis},
*  title =        {Natural Convection of air in a square cavity: a bench
*                  mark numerical solution}, 
*  journal =      {IJNMF},
*  year =         {1983},
*  volume =    {3},
*  pages =     {249-264},
*  endroit = {Classeur Benchmarks (I)}
*}
*
*              On utilise une adaptation de maillage par bougé de noeuds
*              utilisant l'algorithme implémenté dans 'DEDU' 'ADAP'
*              pour calculer le cas avec peu de mailles et sans
*              viscosité artificielle (décentrement).
*              On arrive à passer Ra= 10^6 avec un maillage 15x15
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 30/07/2007, version initiale
* HISTORIQUE : v1, 30/07/2007, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de dedu_vahl.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
*
*
interact= FAUX ;
graph   = FAUX ;
verbose = FAUX ;
debug   = FAUX ;
complet = FAUX ;
*
*BEGINPROCEDUR gmass
************************************************************************
* NOM         : GMASS
* DESCRIPTION : Une matrice de masse
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v2, 14/03/2006, mise à jour NLIN évolué
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GMASS ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'     _smt/'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'   lnomt/'LISTMOTS' ;
'SI' ('NON' ('EXISTE' lnomt)) ;
   'ARGUMENT'    nomt*'MOT     ' ;
   lnomt = 'MOTS' nomt ;
'FINSI' ;   
'ARGUMENT'   disct*'MOT     ' ;
'ARGUMENT'   lnomq/'LISTMOTS' ;
'SI' ('NON' ('EXISTE' lnomq)) ;
   'ARGUMENT'    nomq*'MOT     ' ;
   lnomq = 'MOTS' nomq ;
'FINSI' ;   
'ARGUMENT'   discq*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;
   dlnomt = 'DIME' lnomt ; dlnomq = 'DIME' lnomq ;
   'SI' ('NEG' dlnomt dlnomq) ;
    'ERREUR' ('CHAINE' 'Pas le meme nombre dincos primales et duales');
   'FINSI' ;
*   numop  = 1 ;
   numop  = dlnomt ;
   numder = idim ;
   numvar = dlnomt ;
   numdat = 1 ;
   numcof = 1 ;
*
   A = ININLIN numop numvar numdat numcof numder ;
   'REPETER' iilnomt dlnomt ;
      ilnomt = &iilnomt ;
      A . 'VAR' . ilnomt . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomt ilnomt) ;
      A . 'VAR' . ilnomt . 'DISC'   = disct ;
      'SI' ('EXISTE' chpop) ;
         A . 'VAR' . ilnomt . 'VALEUR'   = chpop ;
      'FINSI' ;
   'FIN' iilnomt ;
   A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . 1 . 'DISC'   = discc ;
   A . 'DAT' . 1 . 'VALEUR' = coef ;
   A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   'REPETER' iilnomt dlnomt ;
      ilnomt = &iilnomt ;
      A . ilnomt . ilnomt . 0 = 'LECT' 1 ;
   'FIN' iilnomt ;      
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;      
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;      
   B = ININLIN numop numvar numdat numcof numder ;   
   'REPETER' iilnomq dlnomq ;
      ilnomq = &iilnomq ;
      B . 'VAR' . ilnomq . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomq ilnomq) ;
      B . 'VAR' . ilnomq . 'DISC'   = discq ;
      'SI' ('EXISTE' chpod) ;
         B . 'VAR' . ilnomq . 'VALEUR'   = chpod ;
      'FINSI' ;
   'FIN' iilnomq ;      
*
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = gdisc ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'FINSI' ;
   'SI' iaxi ;
      'REPETER' iilnomq dlnomq ;
         ilnomq = &iilnomq ;
         B . ilnomq . ilnomq . 0 = 'LECT' 1 ;
      'FIN' iilnomq ;      
   'SINON' ;     
      'REPETER' iilnomq dlnomq ; 
         ilnomq = &iilnomq ;
         B . ilnomq . ilnomq . 0 = 'LECT' ;
      'FIN' iilnomq ;
   'FINSI' ;      
*
   'SI' ('EXISTE' _smt) ;
       mgmass = 'NLIN' gdisc _mt _smt A B methgau ;
   'SINON' ;       
       mgmass = 'NLIN' gdisc _mt A B methgau ;
   'FINSI' ;       
*
'RESPRO' mgmass ;
'FINPROC' ;
*
* End of procedure file GMASS
*
*ENDPROCEDUR gmass
*BEGINPROCEDUR glapn
************************************************************************
* NOM         : GLAPN
* DESCRIPTION : Un laplacien scalaire 
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v2, 14/03/2006, mise à jour NLIN évolué
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GLAPN ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomt*'MOT     ' ;
'ARGUMENT'   disct*'MOT     ' ;
'ARGUMENT'    nomq*'MOT     ' ;
'ARGUMENT'   discq*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
   'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;      
* Test bête...
   'SI' ('EGA' ('TYPE' coef) 'CHPOINT ') ;
      mincoef = 'MINIMUM' coef ;
   'SINON' ;
      mincoef = coef ;
   'FINSI' ;            
   'SI' ('<' mincoef 0.D0) ;
      'ERREUR' 'Le coef (une viscosité) doit etre positive' ;
   'FINSI' ;      
*
   'SI' iaxi ;
      lcoef = 'MOTS' 'NURR' 'NUZZ' ;
   'SINON' ;
      'SI' ('EGA' idim 2) ;
         lcoef = 'MOTS' 'NUXX' 'NUYY' ;
      'SINON' ;
         lcoef = 'MOTS' 'NUXX' 'NUYY' 'NUZZ' ;
      'FINSI' ;
   'FINSI' ;      
*
   ltens = FAUX ;
   'SI' ('EGA' ('TYPE' coef) 'CHPOINT') ;
      ncomp = 'DIME' ('EXTRAIRE' coef 'COMP') ;
      'SI' ('EGA' ncomp idim) ;
         ltens = VRAI ;
      'FINSI' ;
   'FINSI' ;
*
   tcoef = 'TABLE' ;
   'SI' ltens ;
      'REPETER' iidim idim ;
         tcoef . &iidim = 'EXCO' ('EXTRAIRE' lcoef &iidim) coef ;
      'FIN' iidim ;
   'SINON' ;               
      'REPETER' iidim idim ;
         tcoef . &iidim = coef ;
      'FIN' iidim ;
   'FINSI' ;
*      
   numop  = idim ;
   numder = idim ;
   mmt = 'MOTS' nomt ;
   mmq = 'MOTS' nomq ;
   numvar = 1 ;
   numdat = idim ;
   numcof = idim ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = mmt ;
   A . 'VAR' . 1 . 'DISC'   = disct ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;   
   'REPETER' iidim idim ;
      A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . &iidim . 'DISC'   = discc ;
      A . 'DAT' . &iidim . 'VALEUR' = tcoef . &iidim ;
      A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
      A . 'COF' . &iidim . 'LDAT'   = 'LECT' &iidim ;
   'FIN' iidim ;
*
   'REPETER' iidim idim ;
      A . &iidim . 1 . &iidim = 'LECT' &iidim ;
   'FIN' iidim ;      
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;      
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;      
*
   B = ININLIN numop numvar numdat numcof numder ;   
   B . 'VAR' . 1 . 'NOMDDL' = mmq ;
   B . 'VAR' . 1 . 'DISC'   = discq ;
   'SI' ('EXISTE' chpod) ;
      B . 'VAR' . 1 . 'VALEUR'   = chpod ;
   'FINSI' ;   
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = gdisc ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'FINSI' ;
*
   'REPETER' iidim idim ;
      'SI' iaxi ;      
         B . &iidim . 1 . &iidim = 'LECT' 1 ;
      'SINON' ;      
         B . &iidim . 1 . &iidim = 'LECT' ;
      'FINSI' ;      
   'FIN' iidim ;      
*
   mglapn = 'NLIN' gdisc _mt A B methgau ;
* Integration par parties
   mglapn = '*' mglapn -1.D0 ;
*
'RESPRO' mglapn ;
'FINPROC' ;
*
* End of procedure file GLAPN
*
*ENDPROCEDUR glapn
*BEGINPROCEDUR gugrad
************************************************************************
* NOM         : GUGRAD
* DESCRIPTION : U . grad
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GUGRAD ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomp*'MOT     ' ;
'ARGUMENT'   discp*'MOT     ' ;
'ARGUMENT'    nomd*'MOT     ' ;
'ARGUMENT'   discd*'MOT     ' ;
'ARGUMENT'    vtot*'CHPOINT ' ;
'ARGUMENT'    vcomp*'LISTMOTS' ;
'ARGUMENT'   discv*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
*      Passé en argument désormais      
*      vcomp = 'MOTS' 'UX' 'UY' ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
*      vcomp = 'MOTS' 'UR' 'UZ' ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
*      vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;      
*
   numop  = 1 ;
   numder = idim ;
   mmp = 'MOTS' nomp ;
   mmd = 'MOTS' nomd ;
   numvar = 1 ;
   numdat = idim ;
   numcof = idim ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = mmp ;
   A . 'VAR' . 1 . 'DISC'   = discp ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;   
   'REPETER' iidim idim ;
      nomco = 'EXTRAIRE' vcomp &iidim ;
      A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' nomco ;
      A . 'DAT' . &iidim . 'DISC'   = discv ;
*      A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
*      A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco vtot nomco ;
      A . 'DAT' . &iidim . 'VALEUR' = vtot ;
*      
      A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
      A . 'COF' . &iidim . 'LDAT'   = 'LECT' &iidim ;
   'FIN' iidim ;      
*
   'REPETER' iidim idim ;
      A . 1 . 1 . &iidim = 'LECT' &iidim ;
   'FIN' iidim ;      
*
   numvar = 1 ;
   'SI' iaxi ;
      numdat = 2 ;
      numcof = 2 ;
   'SINON' ;      
      numdat = 1 ;
      numcof = 1 ;
   'FINSI' ;      
*
   B = ININLIN numop numvar numdat numcof numder ;   
   B . 'VAR' . 1 . 'NOMDDL' = mmd ;
   B . 'VAR' . 1 . 'DISC'   = discd ;
   'SI' ('EXISTE' chpod) ;
      B . 'VAR' . 1 . 'VALEUR'   = chpod ;
   'FINSI' ;   
*   
   B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   B . 'DAT' . 1 . 'DISC'   = discc ;
   B . 'DAT' . 1 . 'VALEUR' = coef ;
   B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   'SI' iaxi ;
      B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 2 . 'DISC'   = gdisc ;
      B . 'DAT' . 2 . 'VALEUR' = dprmt ;
      B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 2 . 'LDAT'   = 'LECT' 2 ;
   'FINSI' ;
*
   'SI' iaxi ;      
      B . 1 . 1 . 0 = 'LECT' 1 2 ;
   'SINON' ;      
      B . 1 . 1 . 0 = 'LECT' 1 ;
   'FINSI' ;      
*
   mgugrad = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgugrad ;
'FINPROC' ;
*
* End of procedure file GUGRAD
*
*ENDPROCEDUR gugrad
*BEGINPROCEDUR gdecent
************************************************************************
* NOM         : GDECENT
* DESCRIPTION : Décentrement
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GDECENT ;
'ARGUMENT' imeth*'ENTIER' ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomp*'MOT     ' ;
'ARGUMENT'   discp*'MOT     ' ;
'ARGUMENT'    nomd*'MOT     ' ;
'ARGUMENT'   discd*'MOT     ' ;
'ARGUMENT'    vtot*'CHPOINT ' ;
'ARGUMENT'    vcomp*'LISTMOTS' ;
'ARGUMENT'   discv*'MOT     ' ;
'ARGUMENT'     rho*'FLOTTANT' ;
'ARGUMENT'      nu*'FLOTTANT' ;
'ARGUMENT'     Pec*'FLOTTANT' ;
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
*      Passé en argument désormais      
*      vcomp = 'MOTS' 'UX' 'UY' ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
*      vcomp = 'MOTS' 'UR' 'UZ' ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
*      vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;      
*
   mdumm = 'MOTS' 'DUMM' ;
   numop  = 1 ;
   numder = idim ;
   mmp = 'MOTS' nomp ;
   mmd = 'MOTS' nomd ;
   numvar = 1 ;
   numdat = '+' idim 3 ;
   numcof = idim ;
   lisdat = 'LECT' 1 PAS 1 ('+' idim 3) ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = mmp ;
   A . 'VAR' . 1 . 'DISC'   = discp ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;
   idat = 0 ;
   idat = '+' idat 1 ;
   A . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   A . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   A . 'DAT' . idat . 'VALEUR' = rho    ;
   idat = '+' idat 1 ;
   A . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   A . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   A . 'DAT' . idat . 'VALEUR' = nu    ;
   'REPETER' iidim idim ;
      nomco = 'EXTRAIRE' vcomp &iidim ;
      idat = '+' idat 1 ;
      A . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
      A . 'DAT' . idat . 'DISC'   = discv ;
*      A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
*      A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
      A . 'DAT' . idat . 'VALEUR' = vtot ;
   'FIN' iidim ;
   idat = '+' idat 1 ;
   A . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   A . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   A . 'DAT' . idat . 'VALEUR' = Pec    ;
*
   icof = 0 ;
   'REPETER' iidim idim ;
      icof = '+' icof 1 ;
      A . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
      A . 'COF' . icof . 'LDAT'   = lisdat ;
   'FIN' iidim ;         
*
   'REPETER' iidim idim ;
      A . 1 . 1 . &iidim = 'LECT' &iidim ;
   'FIN' iidim ;      
*
   numvar = 1 ;
   'SI' iaxi ;
      numdat = '+' idim 4 ;
      numcof = '+' idim 1 ;
   'SINON' ;      
      numdat = '+' idim 3 ;
      numcof = idim ;
   'FINSI' ;      
*
   B = ININLIN numop numvar numdat numcof numder ;   
   B . 'VAR' . 1 . 'NOMDDL' = mmd ;
   B . 'VAR' . 1 . 'DISC'   = discd ;
   'SI' ('EXISTE' chpod) ;
      B . 'VAR' . 1 . 'VALEUR'   = chpod ;
   'FINSI' ;   
   idat = 0 ;
   idat = '+' idat 1 ;
   B . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   B . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   B . 'DAT' . idat . 'VALEUR' = rho    ;
   idat = '+' idat 1 ;
   B . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   B . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   B . 'DAT' . idat . 'VALEUR' = nu    ;
   'REPETER' iidim idim ;
      nomco = 'EXTRAIRE' vcomp &iidim ;
      idat = '+' idat 1 ;
      B . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
      B . 'DAT' . idat . 'DISC'   = discv ;
*      B . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
      B . 'DAT' . idat . 'VALEUR' = vtot ;
   'FIN' iidim ;
   idat = '+' idat 1 ;
   B . 'DAT' . idat . 'NOMDDL' = mdumm  ;
   B . 'DAT' . idat . 'DISC'   = 'CSTE' ;
   B . 'DAT' . idat . 'VALEUR' = Pec    ;
*
   icof = 0 ;
   'REPETER' iidim idim ;
      icof = '+' icof 1 ;
      B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
      B . 'COF' . icof . 'LDAT'   = lisdat ;
   'FIN' iidim ;         
*
   'SI' iaxi ;
      idat = '+' idat 1 ;
      B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . idat . 'DISC'   = gdisc ;
      B . 'DAT' . idat . 'VALEUR' = dprmt ;
      icof = '+' icof 1 ;
      B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      B . 'COF' . icof . 'LDAT'   = 'LECT' idat ;
   'FINSI' ;
*
   'SI' iaxi ;      
      'REPETER' iidim idim ;
         B . 1 . 1 . &iidim = 'LECT' &iidim icof ;
      'FIN' iidim ;      
   'SINON' ;      
      'REPETER' iidim idim ;
         B . 1 . 1 . &iidim = 'LECT' &iidim ;
      'FIN' iidim ;      
   'FINSI' ;      
*
   mgdecent = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgdecent ;
'FINPROC' ;
*
* End of procedure file GDECENT
*
*ENDPROCEDUR gdecent
*BEGINPROCEDUR gbbt
************************************************************************
* NOM         : GBBT
* DESCRIPTION : Copie de GDIV mais en précablé
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 14/09/2004, version initiale
* HISTORIQUE : v1, 14/09/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GBBT ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'   discv*'MOT     ' ;
'ARGUMENT'   discp*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   lpp = 'MOTS' 'LX'      ; ldp = 'MOTS' 'FLX' ;   
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      lpv = 'MOTS' 'UX' 'UY' ; ldv = 'MOTS' 'FX' 'FY' ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      lpv = 'MOTS' 'UR' 'UZ' ; ldv = 'MOTS' 'FR' 'FZ' ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      lpv = 'MOTS' 'UX' 'UY' 'UZ' ; ldv = 'MOTS' 'FX' 'FY' 'FZ' ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dp = ('*' PI 2.D0) ;
      rmt = 'COORDONNEE' 1 _mt ;
   'FINSI' ;      
*   
   numop  = 2 ;
   numder = idim ;
   mmp = 'MOTS' nomp ;
   idim1 = '+' idim 1 ;
   numvar = idim1 ;
   'SI' iaxi ;
      numdat = 3 ;
      numcof = 3 ;
   'SINON' ;      
      numdat = 1 ;
      numcof = 1 ;
   'FINSI' ;      
*
   A = ININLIN numop numvar numdat numcof numder ;   
   'REPETER' iidim idim ;
      A . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lpv &iidim) ;
      A . 'VAR' . &iidim . 'DISC'   = discv ;
   'FIN' iidim ;
   A . 'VAR' . idim1 . 'NOMDDL' = lpp ;
   A . 'VAR' . idim1 . 'DISC'   = discp ;
   A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . 1 . 'DISC'   = discc ;
   A . 'DAT' . 1 . 'VALEUR' = coef ;
   A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   'SI' iaxi ;
      A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 2 . 'DISC'   = 'CSTE' ;
      A . 'DAT' . 2 . 'VALEUR' = dp ;
      A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 2 . 'LDAT'   = 'LECT' 2 ;
      A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 3 . 'DISC'   = gdisc ;
      A . 'DAT' . 3 . 'VALEUR' = rmt ;
      A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 3 . 'LDAT'   = 'LECT' 3 ;
   'FINSI' ;
*
   'SI' iaxi ;
      'REPETER' iidim idim ;
         A . 1 . &iidim . &iidim  = 'LECT' 1 2 3 ;
      'FIN' iidim ;
      A . 1 . 1 . 0 = 'LECT' 1 2 ;
   'SINON' ;
      'REPETER' iidim idim ;
         A . 1 . &iidim . &iidim  = 'LECT' 1 ;
      'FIN' iidim ;
   'FINSI' ;
   A . 2 . idim1 . 0 = 'LECT' ;
*
   'SI' iaxi ;
      numdat = 3 ;
      numcof = 3 ;
   'SINON' ;      
      numdat = 1 ;
      numcof = 1 ;
   'FINSI' ;      
   B = ININLIN numop numvar numdat numcof numder ;   
   'REPETER' iidim idim ;
      B . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
      B . 'VAR' . &iidim . 'DISC'   = discv ;
   'FIN' iidim ;
   B . 'VAR' . idim1 . 'NOMDDL' = ldp ;
   B . 'VAR' . idim1 . 'DISC'   = discp ;
   B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   B . 'DAT' . 1 . 'DISC'   = discc ;
   B . 'DAT' . 1 . 'VALEUR' = coef ;
   B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   'SI' iaxi ;
      B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 2 . 'DISC'   = 'CSTE' ;
      B . 'DAT' . 2 . 'VALEUR' = dp ;
      B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 2 . 'LDAT'   = 'LECT' 2 ;
      B . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 3 . 'DISC'   = gdisc ;
      B . 'DAT' . 3 . 'VALEUR' = rmt ;
      B . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 3 . 'LDAT'   = 'LECT' 3 ;
   'FINSI' ;
*
   'SI' iaxi ;
      'REPETER' iidim idim ;
         B . 2 . &iidim . &iidim  = 'LECT' 1 2 3 ;
      'FIN' iidim ;
      B . 2 . 1 . 0 = 'LECT' 1 2 ;
   'SINON' ;
      'REPETER' iidim idim ;
         B . 2 . &iidim . &iidim  = 'LECT' 1 ;
      'FIN' iidim ;
   'FINSI' ;
   B . 1 . idim1 . 0 = 'LECT' ;
*
   mgbbt = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgbbt ;
'FINPROC' ;
*
* End of procedure file GBBT
*
*ENDPROCEDUR gbbt
*BEGINPROCEDUR ggradt
************************************************************************
* NOM         : GGRADT
* DESCRIPTION : Gradient d'une quantité
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 08/03/2006, version initiale
* HISTORIQUE : v1, 08/03/2006, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GGRADT ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomp*'MOT     ' ;
'ARGUMENT'   discp*'MOT     ' ;
'ARGUMENT'    nomv*'LISTMOTS' ;
'ARGUMENT'   discv*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
   'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   lpp  = 'MOTS' nomp ;
   ldv  = nomv ;
   'SI' ('ET' ('EGA' vdim 1) ('EGA' vmod 'UNIDPLANDYDZ')) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dp = ('*' PI 2.D0) ;
      rmt = 'COORDONNEE' 1 _mt ;
   'FINSI' ;      
*   
   numop  = idim ;
   numder = idim ;
   numvar = 1 ;
   'SI' iaxi ;
      numdat = 3 ;
      numcof = 3 ;
   'SINON' ;      
      numdat = 1 ;
      numcof = 1 ;
   'FINSI' ;      
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = lpp ;
   A . 'VAR' . 1 . 'DISC'   = discp ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;   
   A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . 1 . 'DISC'   = discc ;
   A . 'DAT' . 1 . 'VALEUR' = coef ;
   A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'SI' iaxi ;
      A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 2 . 'DISC'   = 'CSTE' ;
      A . 'DAT' . 2 . 'VALEUR' = dp ;
      A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 2 . 'LDAT'   = 'LECT' 2 ;
      A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 3 . 'DISC'   = gdisc ;
      A . 'DAT' . 3 . 'VALEUR' = rmt ;
      A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 3 . 'LDAT'   = 'LECT' 3 ;
   'FINSI' ;
*
   'SI' iaxi ;
      'REPETER' iidim idim ;
         A . &iidim . 1 . 0 = 'LECT' 1 2 3 ;
      'FIN' iidim ;
   'SINON' ;
      'REPETER' iidim idim ;
         A . &iidim . 1 . 0 = 'LECT' 1 ;
      'FIN' iidim ;
   'FINSI' ;         
*
   numvar = idim ;
   numdat = 0 ;
   numcof = 0 ;
   B = ININLIN numop numvar numdat numcof numder ;   
   'REPETER' iidim idim ;
      msinc = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
      B . 'VAR' . &iidim . 'NOMDDL' = msinc  ;
      B . 'VAR' . &iidim . 'DISC'   = discv ;
      'SI' ('EXISTE' chpod) ;
         B . 'VAR' . &iidim . 'VALEUR'   = 'EXCO' msinc chpod msinc ;
      'FINSI' ;   
   'FIN' iidim ;
*   
   'REPETER' iidim idim ;
      B . &iidim . &iidim . &iidim = 'LECT' ;
   'FIN' iidim ;      
*
   mggradt = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mggradt ;
'FINPROC' ;
*
* End of procedure file GGRADT
*
*ENDPROCEDUR ggradt
*BEGINPROCEDUR dessevol
************************************************************************
* NOM         : DESSEVOL
* DESCRIPTION : Dessine des évolutions : choisit automatiquement
*               les options, marqueurs, couleurs...
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 16/11/2004, version initiale
* HISTORIQUE : v1, 16/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' DESSEVOL ;
'ARGUMENT' evtot*'EVOLUTION' ;
'ARGUMENT' tabt*'TABLE' ;
'ARGUMENT' tit*'MOT' ;
'ARGUMENT' tix*'MOT' ;
'ARGUMENT' tiy*'MOT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
'ARGUMENT' nb/'ENTIER' ;
*
'SI' ('NON' ('EXISTE' lnclk)) ;
   lnclk = FAUX ;
'FINSI' ;   
*
'SI' ('NON' ('EXISTE' nb)) ;
   nb = 3 ;
'FINSI' ;   
*
nt  = 'DIME' tabt ;
nev = 'DIME' evtot ;
*
* Attention, dans evtot, il y a une évolution avec des noms de points ?
*
*'SI' ('NEG' nev nt) ;
*   cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
*   'ERREUR' cherr ;
*'FINSI' ;
*
tev = 'TABLE' ;
tev . 'TITRE' = tabt ;
*
toto = 'TABLE' ;
*
lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
lmarq = 'MOTS' 'TRIB' 'TRIA' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI' ;
ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
*
'SI' ('EGA' nb 0) ;
   ev2 = evtot ;
'SINON' ;
   icou = 0 ;
   'REPETER' iev nev ;
      ii = &iev ;
      evi = 'EXTRAIRE' evtot 'COUR' ii ;
      'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
         icou = '+' icou 1 ;
      'FINSI' ;         
*      ii2 = '/' ('+' ii 1) 2 ;
*      ci  = EXMOMOD lcoul ii2 ;
*      ci  = EXMOMOD lcoul ii ;
      ci  = EXMOMOD lcoul icou ;
      APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
   'FIN' iev ;
   ev2 = toto . 'EVOLUTION' ;
'FINSI' ;
*      
'REPETER' iev nev ;
   ii = &iev ;
   mi = EXMOMOD lmarq ii ;
   ti = EXMOMOD ltirr ii ;
   'SI' ('>' nb 2) ;
      tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ;
   'FINSI' ;      
   'SI' ('>' nb 1) ;
      tev . ii = 'CHAINE' 'MARQ ' mi ;
   'FINSI' ;      
'FIN' iev ;   
*
'SI' lnclk ;
   'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
   'NCLK' ;
'SINON' ;   
   'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev ;
'FINSI' ;   
*
* End of procedure file DESSEVOL
*
'FINPROC' ;
*ENDPROCEDUR dessevol
*BEGINPROCEDUR exmomod
************************************************************************
* NOM         : EXMOMOD
* DESCRIPTION : Extraction d'un mot d'un listmots
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/06/2003, version initiale
* HISTORIQUE : v1, 23/06/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' EXMOMOD ;
'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
j = 'DIME' lm ;
k = '+' (MODULO ('-' i 1) j) 1 ;
lemot = 'EXTRAIRE' lm k ;
* Usage de l'opérateur text pour éviter que lemot
* ne soit interprété comme un opérateur
'RESPRO' 'TEXTE' lemot ;
*
* End of procedure file EXMOMOD
*
'FINPROC' ;
*ENDPROCEDUR exmomod
*BEGINPROCEDUR modulo
************************************************************************
* NOM         : MODULO
* DESCRIPTION : Calcule un entier modulo un autre...
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 15/10/2002, version initiale
* HISTORIQUE : v1, 15/10/2002, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' MODULO ;
'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
'SI' ('EGA' j 0) ;
  'MESSAGE' 'Impossible de faire modulo 0' ;
  'ERREUR' 5 ;
'SINON' ;
  k=i '/' j ;
  mod=i '-' ( k '*'j ) ;
  'RESPRO' mod ;
'FINSI' ;
*
* End of procedure file MODULO
*
'FINPROC' ;
*ENDPROCEDUR modulo
*BEGINPROCEDUR append
************************************************************************
* NOM         : APPEND
* DESCRIPTION : Rajoute :
*               - un entier à un listentier
*               - un réel   à un listreel
*               - un objet (liste, evolution, matrice ou chpoint)
*                 à un indice de table ('MOT' ou 'ENTIER')
*                    * si l'indice n'existe pas
*                    * 'ET' si l'indice existe 
*                
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 10/09/2004, version initiale
* HISTORIQUE : v1, 10/09/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' APPEND ;
'ARGUMENT' tab/'TABLE' ;
'SI' ('EXISTE' tab) ;
   'ARGUMENT' itab/'MOT' ;
   'SI' ('NON' ('EXISTE' itab)) ;
      'ARGUMENT' itab*'ENTIER' ;
   'FINSI' ;      
   lobj = FAUX ;
   'SI' ('NON' lobj) ;
      'ARGUMENT' lr/'LISTREEL' ;
      'SI' ('EXISTE' lr) ;
         obj = lr ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' le/'LISTENTI' ;
      'SI' ('EXISTE' le) ;
         obj = le ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' lev/'EVOLUTION' ;
      'SI' ('EXISTE' lev) ;
         obj = lev ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' lm/'MAILLAGE' ;
      'SI' ('EXISTE' lm) ;
         obj = lm ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' chpo/'CHPOINT' ;
      'SI' ('EXISTE' chpo) ;
         obj = chpo ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' rig/'RIGIDITE' ;
      'SI' ('EXISTE' rig) ;
         obj = rig ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' matk/'MATRIK' ;
      'SI' ('EXISTE' matk) ;
         obj = matk ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;
   'SI' ('NON' lobj) ;
      cherr = 'CHAINE'
       'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
        ; 
      'ERREUR' cherr ;
   'FINSI' ;      
   'SI' ('EXISTE' tab itab) ;
      'SI' ('EGA' ('TYPE' obj) 'CHPOINT') ;
         tab . itab = '+' (tab . itab) obj ;
      'SINON' ;         
         tab . itab = 'ET' (tab . itab) obj ;
      'FINSI' ;         
   'SINON' ;
      tab . itab = obj ;
   'FINSI' ;
   'RESPRO' tab ;      
'FINSI' ;   
'ARGUMENT' lenti/'LISTENTI' ;
'ARGUMENT' lreel/'LISTREEL' ;
'SI' ('EXISTE' lenti) ;
   'ARGUMENT' enti*'ENTIER' ;
   lenti = 'ET' lenti ('LECT' enti) ;
   'RESPRO' lenti ;
'FINSI' ;   
'SI' ('EXISTE' lreel) ;
   'ARGUMENT' reel*'FLOTTANT' ;
   lreel = 'ET' lreel ('PROG' reel) ;
   'RESPRO' lreel ;
'FINSI' ;   
*
* End of procedure file APPEND
*
'FINPROC' ;
*ENDPROCEDUR append
*
* Procédure donnant les valeurs des Nusselts de référence
*
'DEBPROC' VAHL ;
'ARGUMENT' Ra*'FLOTTANT' ;
lok = FAUX ;
iRa = 'ENTIER' ('+' Ra 0.5D0) ;
'SI' ('EGA' iRa 1000) ;
   lok = VRAI ;
   Nu  = 1.118 ;
'FINSI' ;   
'SI' ('EGA' iRa 10000) ;
   lok = VRAI ;
   Nu  = 2.243 ;
'FINSI' ;   
'SI' ('EGA' iRa 100000) ;
   lok = VRAI ;
   Nu  = 4.519 ;
'FINSI' ;   
'SI' ('EGA' iRa 1000000) ;
   lok = VRAI ;
   Nu  = 8.800 ;
'FINSI' ;   
'SI' ('NON' lok) ;
   cherr = 'CHAINE' 'Pas de sol tabulee pour Ra = ' Ra ;
   'ERREUR' cherr ;
'FINSI' ;
'RESPRO' Nu ;
'FINPROC' ;
*
* Calcul de l'incrément vitesse-pression-temperature
* NS incompressible + Boussinesq
*
'DEBPROC' SOLAPP ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' inco*'CHPOINT' ;
*
* Vitesse-pression
*
*   
   mlapx = GLAPN _mt discg 'UX' discv 'FX' discv cdifu ;
   mlapx = '*' mlapx -1.D0 ;
   mlapy = 'CHANGER' 'INCO' mlapx ('MOTS' 'UX') ('MOTS' 'UY')
                                  ('MOTS' 'FX') ('MOTS' 'FY') ;
   mcnvx = GUGRAD _mt discg 'UX' discv 'FX' discv inco mxpri discv
                  ccnvu ;
   mcnvy = 'CHANGER' 'INCO' mcnvx ('MOTS' 'UX') ('MOTS' 'UY')
                                  ('MOTS' 'FX') ('MOTS' 'FY') ;
   'SI' lsupg ;
      mdecx = GDECENT 2 _mt discg 'UX' discv 'FX' discv inco mxpri discv 
                     ('*' csupg ccnvu) cdifu 2.D0 ;
      mdecy = 'CHANGER' 'INCO' mdecx ('MOTS' 'UX') ('MOTS' 'UY')
                                     ('MOTS' 'FX') ('MOTS' 'FY') ;
   'FINSI' ;                     
   mbbt  = GBBT _mt discg discv discp -1. ;
* Régularisation de pression
   mp    = GMASS _mt discg 'LX' discp 'FLX' discp ('*' ap -1.D0) ;
* Terme source
*   fbou  = GMASS _mt discg 'T' disct 'FY' discv ('/' Ra Pr) inco ;
   mbou  = GMASS _mt discg 'T' disct 'FY' discv cbouu ;
   mbou  = '*' mbou -1.D0 ; 
   mmasx = GMASS _mt discg 'UX' discv 'FX' discv
                                      ('*' nx 1.D0) ;
   mmasy = 'CHANGER' 'INCO' mlapx ('MOTS' 'UX') ('MOTS' 'UY')
                                  ('MOTS' 'FX') ('MOTS' 'FY') ;
* Blocage vitesse
   mblov  = 'BLOQUE' 'DEPL' bor ;
* Température   
   mlapt = GLAPN _mt discg 'T' disct 'Q' disct cdift ;
   mlapt = '*' mlapt -1.D0 ;
   mcnvt = GUGRAD _mt discg 'T' disct 'Q' disct inco mxpri discv ccnvt ;
   'SI' lsupg ;
      mdect = GDECENT 2 _mt discg 'T' disct 'Q' disct inco mxpri discv 
                     ('*' csupg ccnvt) cdift 2.D0 ;
   'FINSI' ;                     
* Blocage température
   mblotg = 'BLOQUE' 'T' gau ;
   fblotg = 'DEPIMPOSE' mblotg 0.5D0 ;
   mblotd = 'BLOQUE' 'T' dro ;
   fblotd = 'DEPIMPOSE' mblotd -0.5D0 ;
*
   mphy  = mlapx 'ET' mlapy 'ET' mcnvx 'ET' mcnvy 'ET' mbbt 'ET' mbou
              'ET' mblov 'ET' mlapt 'ET' mcnvt 'ET' mblotg 'ET' mblotd ;
   'SI' lsupg ;
      mphy = mphy 'ET' mdecx 'ET' mdecy 'ET' mdect ;
   'FINSI' ;           
   mtot = mphy 'ET' mp 'ET' mmasx 'ET' mmasy ;
*
   ftot = '-' (fblotg '+' fblotd) ('*' mphy inc) ;
*
   incr = 'KRES' mtot ftot ;
   'RESPRO' incr ;
'FINPROC' ;
*
* Calcul du nombre de Nusselt en paroi gauche et droite
*
'DEBPROC' CALCNUSS ;
'ARGUMENT' inco*'CHPOINT' ;
mlapt = GLAPN _mt discg 'T' disct 'Q' disct cdift ;
mlapt = '*' mlapt -1.D0 ;
mcnvt = GUGRAD _mt discg 'T' disct 'Q' disct inco mxpri discv ccnvt ;
'SI' lsupg ;
   mdect = GDECENT 2 _mt discg 'T' disct 'Q' disct inco mxpri discv 
                  ('*' csupg ccnvt) cdift 2.D0 ;
'FINSI' ;
mtot = mlapt 'ET' mcnvt ;
'SI' lsupg ;
   mtot = mtot 'ET' mdect ;
'FINSI' ;   
fres = '*' ('*' mtot inco) -1.D0 ;
'SI' (graph 'ET' debug) ;
   tit = 'CHAINE' 'Valeur du résidu en température'  ;
   'TRACER' fres _mt  'TITR' tit ;
'FINSI' ;
fresgau = 'REDU' fres gau ;
fresdro = 'REDU' fres dro ;
nusgau = 'MAXIMUM' ('RESULT' fresgau) ;
nusdro = 'MAXIMUM' ('RESULT' fresdro) ;
nusgau = '/' nusgau cdift ;
nusdro = '/' nusdro cdift ;
'RESPRO' nusgau nusdro ;
'FINPROC' ;
*
* Calcul de la métrique : on utilise une combinaison de :
* grad v : gradtv et (grad T)^2 pour réaliser l'adaptation 
*
'DEBPROC' TGDENT ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' vit*'CHPOINT' ;
'ARGUMENT' tem*'CHPOINT' ;
'ARGUMENT' beta*'FLOTTANT' ;
* Volume des éléments
vmtl = GMASS _mt discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
vmt  = 'MAXIMUM' ('RESULT' vmtl) ;
discc = 'CSTE' ;
*
* Calcul de la dissipation thermique
*
fdtxi = GLAPN _mt discg 'UX' discv 'UX' discv cdifu vit vit ;
fdtyi = GLAPN _mt discg 'UY' discv 'UY' discv cdifu vit vit ;
fdtxi = '*' fdtxi -1. ; 
fdtyi = '*' fdtyi -1. ; 
fdtx = '/' fdtxi vmtl ;
fdty = '/' fdtyi vmtl ;
fdt = '+' fdtx fdty ;
'SI' lsupgm ;
   fdecxi = GDECENT 2 _mt discg 'UX' discv 'UX' discv vit mxpri discv 
                     ('*' csupg ccnvu) cdifu 2.D0 vit vit ;
   fdecyi = GDECENT 2 _mt discg 'UY' discv 'UY' discv vit mxpri discv 
                     ('*' csupg ccnvu) cdifu 2.D0 vit vit ;
   fdecx = '/' fdecxi vmtl ;
   fdecy = '/' fdecyi vmtl ;
   fdec = '+' fdecx fdecy ;
'FINSI' ;                     
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt fdt 'CHAM' ;
   tit = 'CHAINE' 'Dissipation thermique'  ;
   'TRACER' rescal $mb 'TITR' tit ;
   'SI' lsupg ;
      rescal = 'KCHA' $mt fdec 'CHAM' ;
      tit = 'CHAINE' 'Dissipation numérique'  ;
      'TRACER' rescal $mb 'TITR' tit ;
   'FINSI' ;
'FINSI' ;
'SI' lsupg ;
   fdt = '+' fdt fdec ;
'FINSI' ;
*
* Calcul du gradient de T au carré
*
fdqi = GLAPN _mt discg 'T' disct 'T' disct cdift tem tem ;
fdqi = '*' fdqi -1. ; 
fdq = '/' fdqi vmtl ;
*
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt fdq 'CHAM' ;
   tit = 'CHAINE' 'Abs. grad T au carré'  ;
   'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Scaling des dissipations 
*
sfdti = GMASS _mt discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmt ;
'SI' verbose ;
   'MESSAGE' ('CHAINE' '   Diss. therm. moy. =' mfdt) ;
'FINSI' ;   
sfdqi = GMASS _mt discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdq ;
mfdq = '/' ('MAXIMUM' ('RESULT' sfdqi)) vmt ;
'SI' verbose ;
   'MESSAGE' ('CHAINE' '   |gradT^2|  moy. =' mfdq) ;
'FINSI' ;   
* D'où alpha :
alphat = '*' ('/' ('-' 1.D0 beta) beta) mfdt ;
alphaq = '*' ('/' ('-' 1.D0 beta) beta) mfdq ;
'SI' ('ET' debug verbose) ;
   'MESSAGE' ('CHAINE' '   Alphat = ' alphat) ;
   'MESSAGE' ('CHAINE' '   Alphaq = ' alphaq) ;
'FINSI' ;
fdt = '/' fdt alphat ;
fdq = '/' fdq alphaq ;
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt fdt 'CHAM' ;
   tit = 'CHAINE' 'fdt scalé'  ;
   'TRACER' rescal $mb 'TITR' tit ;
   rescal = 'KCHA' $mt fdq 'CHAM' ;
   tit = 'CHAINE' 'fdq scalé'  ;
   'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
fdt = '+' fdt fdq ;
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt fdt 'CHAM' ;
   tit = 'CHAINE' 'fdtotal'  ;
   'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;   
*
* Calcul du gradient de la dissipation thermique et du tenseur directionnel
*
lmvit  = 'MOTS' 'UX' 'UY' ;
mmgs   = GMASS _mt discg lmvit discr lmvit discr 1. ;
gfdti  = GGRADT _mt discg 'SCAL' 'CSTE' lmvit discr 1. fdt ;
*gfdt  = '/' gfdti vmtl ;
gfdts  = 'RESOUD' mmgs gfdti ;
gfdti  = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
gfdt   = '/' gfdti vmtl ;
'SI' (graph 'ET' debug) ;
   tit = 'CHAINE' 'Gradient de dissipation thermique ; i=' &bcl ;
   vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
   'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;        
*
* Lissage du gradient
*
'SI' lissg ;
   mms  = GMASS _mt discg  'SCAL' discg  'SCAL' discr 1. c1 ;
   gfdti = GMASS _mt discg lmvit 'CSTE' lmvit discr 1. gfdt ;
   gfdts = '/' gfdti mms ;
   gfdtsi = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
   gfdt   = '/' gfdtsi vmtl ;
   'SI' (graph 'ET' debug) ;
      tit = 'CHAINE' 'Gradient apres lissage ; i=' &bcl ;
      vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
      'TRACER' vvit mt 'TITR' tit ;
   'FINSI' ;
'FINSI' ;
*
nfdt   = 'PSCAL' gfdt gfdt lmvit lmvit ;
snfdt  = '**' nfdt 0.5D0 ;
msnfdt  = 'MAXIMUM' snfdt ;
'SI' ('<' msnfdt 1.D-100) ;
   binf = 1.D0 ;
'SINON' ;
   binf = '*' msnfdt 1.D-10 ;
'FINSI' ;   
snfdt   = '+' snfdt binf ;
sgfdt  = '/' gfdt snfdt ;
'SI' (graph 'ET' debug) ;
   tit = 'CHAINE' 'Gddt mis a lechelle ; i=' &bcl ;
   vvit = 'VECT' sgfdt 'DEPL' 'JAUN' ;
   'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
td11 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UX') ('MOTS' 'SCAL') ;
td22 = '*' sgfdt sgfdt ('MOTS' 'UY') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
td12 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
* D'où le tenseur
gxx  = '**' fdt 2 ;
vdim = 'VALEUR' 'DIME' ;
limgd2 = '**' limgd 2 ;
gd1 = '**' gxx ('/' 1.D0 vdim) ;
gd2 = '-' ('**' ('+' gd1 1.) vdim) 1. ;
*
* Considération pour les calculs de ngd :
* en 1D : gd1 = gd2, la partie anisotrope doit s'annuler
*
gdb = '-' ('*' ('**' ('+' gd1 1.) delta)
               ('**' ('+' gd2 1.) ('-' 1. delta))) 1. ;
gda = '-' ('**' ('+' gd1 1.) delta) 1. ;
dgd = '-' gdb gda ;
*
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
   tit = 'CHAINE' 'Partie isotrope de ladaptation'  ;
   'TRACER' rescal $mb 'TITR' tit ;
   rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
   tit = 'CHAINE' 'Partie anisotrope de ladaptation'  ;
   'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Limitation des valeurs supérieures
*
*  de la partie isotrope 
   m1    = 'MASQUE' gda 'INFERIEUR' limgd2 ;
   m0    = '*' ('-' m1 1.) -1. ;
   gda   = '+' ('*' m1 gda) ('*' m0 limgd2) ;
* de la partie anisotrope   
   gdb  = gda '+' dgd ;
   m1   = 'MASQUE' gdb 'INFERIEUR' limgd2 ;
   m0   = '*' ('-' m1 1.) -1. ;
   gdb  = '+' ('*' m1 gdb) ('*' m0 limgd2) ;
   dgd = '-' gdb gda ;
'SI' (graph 'ET' debug) ;
   rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
   tit = 'CHAINE' 'Partie isotrope de ladaptation apres lim'  ;
   'TRACER' rescal $mb 'TITR' tit ;
   rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
   tit = 'CHAINE' 'Partie anisotrope de ladaptation apres lim'  ;
   'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Le tenseur
*
   g11 = 'NOMC' 'G11' (gda '+' ('*' dgd td11) '+' 1.D0) ;
   g22 = 'NOMC' 'G22' (gda '+' ('*' dgd td22) '+' 1.D0) ;
   g12 = 'NOMC' 'G12' ('*' dgd td12) ;
   gtot = g11 '+' g22 '+' g12 ;
*   
'RESPRO' gtot fdt ;
'FINPROC' ;
*
* Début du jeu de donnés
*
'OPTION' 'DIME' 2 ;
'SI' ('NON' interact) ;
  'OPTION' 'TRAC' 'PSC' ;
'SINON' ;
  'OPTION' 'TRAC' 'X' ;
'FINSI' ;
*
* Maillage
*
*   Paramètres d'adaptation :
*   beta :
*   0.   pas d'adaptation ;
*   0.5  la moitié des mailles dans les régions où le paramètre de
*        contrôle est grand
*   1.   toutes les mailles dans les régions où le paramètre de
*        contrôle est grand
*   Usuellement, 0.5 < beta < 0.8
*   lissd  : lissage de la dissipation thermique
*   limfdt : limitation de la dissipation thermique
*            on limite les valeurs qui dépassent (moy. fdt) * limfdt
*   limgd  : limitation de la diagonale du tenseur métrique
*            on limite les valeurs qui dépassent limgd
*   delta  : 0.D0 adaptation totalement anisotrope
*            1.D0 adaptation totalement isotrope
*   omi : relaxation de l'incrément vitesse-pression-temperature
*   omd : relaxation de l'incrément de déplacement du maillage
*   theta et gamma : paramètres de l'adapteur de DEDU ADAP
om   = 0.9D0 ;
omi  = om ;
omd  = om ;
   'OPTI' 'ELEM' 'QUA8' ;
   'SI' complet ;
      nx = 15 ; ny = 15 ;
      cvg = 2.D-3 ; nitmax = 85 ;
      lRa = 'PROG' 1.D3 1.D4 1.D5 1.D6  ;
      Pr = 0.71 ;
* Ici, sans adaptation , ca marche mieux aux Rayleigh faible
* Mais pour les deux Rayleigh les plus forts, il faut adapter...
      lerrnu = 'PROG' 2.D-3 4.D-3 3.D-3 2.D-4 ;
      adap = VRAI ;
      beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
      theta = 0.5D0 ; gamma = 2.D0 ;
      lissg = FAUX  ; limgd = 15.D0 ;
      delta = 1.D0 ;
   'SINON' ;      
      nx = 10 ; ny = 10 ;
      cvg = 5.D-3 ; nitmax = 50 ;
      lRa = 'PROG' 1.D3 1.D4 1.D5 ;
      Pr = 0.71 ;
* Ici, ca marche aussi bien sans adaptation :)
* Les critères pour adapter ne sont sans doute pas les meilleurs...
      lerrnu = 'PROG' 4.D-3 6.D-3 6.D-3 ;
      adap = VRAI ;
      beta = 0.7D0 ;
      theta = 0.5D0 ; gamma = 2.D0 ;
      lissg = FAUX ; limgd = 15.D0 ;
*      delta = 0.75D0 ;
      delta = 1.D0 ;
   'FINSI' ;
   lerrnuc = 'PROG' ;
   pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
   bas = 'DROIT' nx pA pB ; dro = 'DROIT' ny pB pC ;
   hau = 'DROIT' nx pC pD ; gau = 'DROIT' ny pD pA ;
   mt = 'DALLER' bas dro hau gau ;
   bor = 'CONTOUR' mt ;
_mt = 'CHANGER' mt 'QUAF' ;
$mt = 'MODE' _mt  'NAVIER_STOKES' 'QUAF' ;
$mb  = 'MODE' ('DOMA' $mt 'MAILLAGE') 'THERMIQUE' ;
mtl = 'CHANGER' mt 'LINEAIRE' ;
* Paramètres pour le décentrement 
* lsupg : VRAI=decentrement
* csupg : facteur multiplicatif
lsupg  = FAUX ;
lsupgm = FAUX ;
*csupg = 0.3D0 ;
csupg = 0.7D0 ;
* 
* discg : discrétisation géométrique
* discv : discrétisation vitesse
* discp : discrétisation pression
* disct : discrétisation température
* discr : discrétisation pour la mise au sommet du paramètre de contrôle
discg = 'QUAF' ;
discv = 'QUAF' ;
discp = 'LINE' ;
disct = 'QUAF' ;
discr = 'LINE' ;
*
methgau = 'GAU7' ;
mxpri = 'MOTS' 'UX' 'UY' ;
mxdua = 'MOTS' 'FX' 'FY' ;
mppri = 'MOTS' 'LX' ;
mpdua = 'MOTS' 'FLX' ;
mtpri = 'MOTS' 'T' ;
mtdua = 'MOTS' 'Q' ;
* Limitation du déplacement
ldmax = FAUX ;
dmax  = 1. ;
echvit = 1. ;
echtem = 1. ;
echdx = 1. ;
*
c1  = 'MANUEL' 'CHPO' mt ('MOTS' 'SCAL') ('PROG' 1.) ;
*
lok = VRAI ;
inc = '+' ('MANUEL' 'CHPO' gau 1 'T' 0.5)
          ('MANUEL' 'CHPO' dro 1 'T' -0.5) ;
*
dRa = 'DIME' lRa ;
'REPETER' iiRa dRa ;
   Ra = 'EXTRAIRE' lRa &iiRa ;
* Physique
   ccnvu = 1.D0 ;
   cdifu = '**' ('/' Ra Pr) -0.5D0 ;
   cbouu = 1.D0 ;
   ccnvt = 1.D0 ;
   cdift= '**' ('*' Ra Pr) -0.5D0 ;
* Numérique
   ap= 1.D-4 ;
*
* Résumé du cas 
*
   'SAUTER' 1 'LIGN' ;
   'MESSAGE' ('CHAINE' '***********************************') ;
   'MESSAGE' ('CHAINE' 'Résumé du cas :                    ') ;
   'MESSAGE' ('CHAINE' 'Nombre de maille  = ' nx ' x ' ny) ;
   'MESSAGE' ('CHAINE' 'Rayleigh          = ' Ra) ;
   'MESSAGE' ('CHAINE' 'Param. adaptation = ' beta) ;
   'MESSAGE' ('CHAINE' '***********************************') ;
*
* Algorithme
*
   'REPETER' bcl nitmax ;
      'SI' verbose ;
         'MESSAGE' ('CHAINE' 'Itération : ' &bcl ) ;
      'FINSI' ;
* Calcul des champs
      dinc = SOLAPP _mt inc ;
      inc  = inc '+' ('*' dinc omi) ;
      vit = 'EXCO' mxpri inc ;
      pre = 'EXCO' mppri inc ;
      tem = 'EXCO' mtpri inc ;
      dvit = 'EXCO' mxpri dinc ;
      dtem = 'EXCO' mtpri dinc ;
      nusgau nusdro = calcnuss tem ;
      'SI' verbose ;
         'MESSAGE' ('CHAINE' '   Nusselt gauche : ' nusgau) ;
         'MESSAGE' ('CHAINE' '   Nusselt droite : ' nusdro) ;
      'FINSI' ;         
      echvit = '/' ('MAXIMUM' vit 'ABS') ('*' omi 2.0D0) ;
      'SI' verbose ;
        'MESSAGE' ('CHAINE' '   Echelle vitesse : ' echvit) ;
      'FINSI' ;           
      echdvit = '/' ('MAXIMUM' dvit 'ABS') echvit ;
      echdtem = '/' ('MAXIMUM' dtem 'ABS') echtem ;
      'SI' verbose ;
        'MESSAGE' ('CHAINE' '   Echelle increment vitesse : ' echdvit) ;
        'MESSAGE' ('CHAINE' '   Echelle increment tempera : ' echdtem) ;
      'FINSI' ;
*   
      'SI' graph  ;
         'SI' debug ;
            tit = 'CHAINE' 'Vitesse ; i=' &bcl ;
            vvit = 'VECT' ('/' 0.8 ('*' echvit nx)) vit 'DEPL' 'JAUN' ;
            'TRACER' vvit _mt 'TITR' tit ;
            tit = 'CHAINE' 'Pression ; i=' &bcl ;
            'TRACER' pre mtl 'TITR' tit ;
            tit = 'CHAINE' 'Temperature ; i=' &bcl ;
            'TRACER' tem _mt 'TITR' tit ;
         'FINSI' ;            
      'FINSI' ;
*
* Calcul du champ de déplacement
*
*    Construction de la métrique
      'SI' adap ;
         tdcd fdt = TGDENT _mt vit tem beta ;
      'FINSI' ;
      'SI' graph ;
         rescal = tem ;
         vvit = 'VECT' ('/' 0.8D0 ('*' echvit nx)) vit
                       'DEPL' 'JAUN' ;
         tit = 'CHAINE' 'Temp. + Vitesse ; i=' &bcl ' ; Ra='
                Ra ;
         'SI' debug ;
            'TRACER' rescal vvit _mt 'TITR' tit ;
         'SINON' ;            
            'TRACER' rescal vvit _mt 'TITR' tit 'NCLK' ;
         'FINSI' ;            
      'FINSI' ;
      'SI' adap ;         
*   Champ de déplacement
         mblox = 'BLOQUE' 'UX' (gau 'ET' dro) ;
         mbloy = 'BLOQUE' 'UY' (bas 'ET' hau) ;
         mblo = mblox 'ET' mbloy ;
         dep = 'DEDU' 'ADAP' _mt mblo 'DISG' discg
                            'METR' tdcd 'CSTE' 'THET' theta 'GAMM' gamma
                            'NITM' 1  'METG' methgau ;
*   
         echdep = '/' ('MAXIMUM' dep 'ABS') echdx ;
         'SI' verbose ;
            'MESSAGE' ('CHAINE' '   Echelle des depl. : ' echdep) ;
         'FINSI' ;
*
         'SI' ldmax ;
            'SI' ('>' echdep dmax) ;
               fdep = '/' dmax echdep ;
               dep = '*' dep fdep ;
            'FINSI' ;
            'SI' verbose ;
               'MESSAGE'
                 ('CHAINE' '   Echelle des depl. apres lim : ' echdep) ;
            'FINSI' ;              
         'FINSI' ;
         dep = '*' dep omd ;
         crit2 = '<' echdep cvg ;
         'SI' ('NON' crit2) ;
            'FORME' dep ;
         'FINSI' ;         
         ciso = DEADUTIL 'QISO' _mt discg 'GAU7' tdcd 'CSTE' ;
         cequ = DEADUTIL 'QEQU' _mt discg 'GAU7' tdcd 'CSTE' ;
         maciso = 'MAXIMUM' ciso ; miciso = 'MINIMUM' ciso ;
         macequ = 'MAXIMUM' cequ ; micequ = 'MINIMUM' cequ ;
         'SI' verbose ;
            'MESSAGE' ('CHAINE'
               '   CISO : max. = ' maciso '  min. = ' miciso) ;
            'MESSAGE' ('CHAINE'
               '   CEQU : max. = ' macequ '  min. = ' micequ) ;
         'FINSI' ;
         'SI' (graph 'ET' debug) ;
            cliso = 'KCHA' $mt ciso 'CHAM' ;
            tit = 'CHAINE' 'Isotropie ; i=' &bcl ' ; Re=' Re ;
            'TRACER' cliso $mb 'TITR' tit ;
            clequ = 'KCHA' $mt cequ 'CHAM' ;
            tit = 'CHAINE' 'Equidis. ; i=' &bcl ' ; Re=' Re ;
            'TRACER' clequ $mb 'TITR' tit ;
         'FINSI' ;
      'FINSI' ;         
* Critères de convergence :
* sur les incréments
      crit1 = '<' echdvit cvg ;
      crit2 = '<' echdtem cvg ;
      critt = crit1 'ET' crit2 ;
      'SI' adap ;
         crit3 = '<' echdep  cvg ;
         critt = critt 'ET' crit3 ;
      'FINSI' ;         
      'SI' critt ;
         'QUITTER' bcl ;
      'FINSI' ;      
   'FIN' bcl ;
   'SI' ('ET' graph interact) ;
      tit = 'CHAINE' 'Vitesse+Tem ; Ra=' Ra ;
      vvit = 'VECT' ('/' 0.8D0 ('*' echvit nx)) vit 'DEPL' 'JAUN' ;
      'TRACER' tem _mt vvit 'TITR' tit ;
   'FINSI' ;
*
* Test sur le Nusselt
*
   nusref = VAHL Ra ;
   nusgau nusdro = calcnuss tem ;
   'MESSAGE' ('CHAINE' '   Nusselt de réference : ' nusref) ;
   'MESSAGE' ('CHAINE' '   Nusselt gauche       : ' nusgau) ;
   'MESSAGE' ('CHAINE' '   Nusselt droite       : ' nusdro) ;
   tsymnu = 'EGA' ('ABS' nusgau) ('ABS' nusdro) 1.D-4 ;
   'SI' ('NON' tsymnu) ;
      cherr = 'CHAINE'
      '!!! Erreur, on aurait voulu |nusgau| = |nusdro|' ;
      'ERREUR' cherr ;
   'FINSI' ;
   lok = 'ET' lok tsymnu ;
   errnu = '/' ('ABS' ('-' ('ABS' nusgau) nusref)) ('ABS' nusref) ;
   'MESSAGE' ('CHAINE' '   errnu = ' errnu) ;
   lerrnuc = 'ET' lerrnuc ('PROG' errnu) ;
   vernur  = 'EXTRAIRE' lerrnu &iiRa ;
   ternu   = ('<' errnu vernur) ;
   'SI' ('NON' ternu) ;
      cherr = 'CHAINE' '!!! Erreur, on aurait voulu errnu < ' vernur ;
     'MESSAGE' cherr ;                          
   'FINSI' ;                          
   lok = 'ET' lok ternu ;
'FIN' iiRa ;   
*
* 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 DEDU_VAHL
*
'FIN' ;

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer