Download sudden_expansion.dgibi

Back to the list

* fichier : sudden_expansion.dgibi
*
'OPTI' 'ECHO' 0 ;
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de sudden_expansion.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
graph = faux ;
complet = faux ;
interact = faux ;
************************************************************************
* NOM         : SUDDEN_EXPANSION
* DESCRIPTION : Ecoulement dans un tube débouchant dans un autre de plus
*               gros diamètre en 2D plan et en 2D axisymétrique.
*
* Références :
*@article{Oliveira1998655,
*author = "P. J. Oliveira and F. T. Pinho and A. Schulte",
*title = "A general correlation for the local loss coefficient in Newtonian axisymmetric sudden expansions",
*journal = "International Journal of Heat and Fluid Flow",
*year = "1998",
*volume = "19",
*number = "6",
*pages = "655 - 660"}
*
*@Article{scott_mirza,
*  author =       {P.S. Scott and F.A. Mirza and J. Vlachopoulos},
*  title =        {A Finite Element Analysis of Laminar Flows through Planar and Axisymmetric abrupt expansions},
*  journal =      {Computers & Fluids},
*  year =         {1986},
*  volume =    {14},
*  number =    {4},
*  pages =     {423 - 432}}
*
*@Article{fletcher_maskell,
*  author =       {D.F. Fletcher and S.J. Maskell and M.A. Patrick},
*  title =        {Heat and Mass Transfer computations for laminar flows in an axisymmetric sudden expansion},
*  journal =      {Computers and Fluids},
*  year =         {1985},
*  volume =    {13},
*  number =    {2},
*  pages =     {207-221}}
*
*@Article{macagno_hung,
*  author =       {Enzo O. Macagno and Tin-Kan Hung},
*  title =        {Computational and experimental study of a captive annular eddy},
*  journal =      {Journal of Fluid Mechanics},
*  year =         {1967},
*  volume =    {28},
*  number =    {1},
*  pages =     {43-64}}
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 04/01/2011, version initiale
* HISTORIQUE : v1, 04/01/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
'SI' ('NON' interact) ;
  'OPTION' 'TRAC' 'PS' ;
'SINON' ;
  'OPTION' 'TRAC' 'X' ;
'FINSI' ;
*
******************************************
*                                        *
*  Procédures utilitaires                *
*                                        *
******************************************
*BEGINPROCEDUR errrel
************************************************************************
* NOM         : ERRREL
* DESCRIPTION : Calcul d'une erreur relative
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/04/2003, version initiale
* HISTORIQUE : v1, 23/04/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' ERRREL ;
'ARGUMENT' val*'FLOTTANT' ;
'ARGUMENT' valref*'FLOTTANT' ;
*
'SI' ('<' ('ABS' valref) 1.D-10) ;
   echref = 1.D0 ;
'SINON' ;
   echref = valref ;
'FINSI' ;
*
errabs = 'ABS' ('/' ('-' val valref) echref);
*
'RESPRO' errabs ;
*
* End of procedure file ERRREL
*
'FINPROC' ;
*ENDPROCEDUR errrel
*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 fcourant
* FCOURANT  PROCEDUR  GOUNAND   07/12/21    21:15:01     6010
************************************************************************
* NOM         : FCOURANT
* DESCRIPTION : Calcul la fonction de courant en 2D et 2D Axi
*               par une méthode d'éléments finis moindres carrés
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 22/11/2007, version initiale
* HISTORIQUE : v1, 22/11/2007, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
* Procedure fonction de courant 2D et 2D axi
* - modns : modele Navier-Stokes
* - disc  : discretisation des champs au sommet (QUAF ou LINE)
* - un    : champ de vitesses
* - clphi : conditions de Dirichlet sur phi
*           (nom de composante 'SCAL')
*
* en 2D, on résout : dpsi/dx = u_y
*                    dpsi/dy = -u_x
* en 2D axi , on résout : dpsi/dr = 2pi r u_z
*                         dpsi/dz = - 2 pi r u_r
*
*
*
'DEBPROC' FCOURANT ;
*
'ARGUMENT' mquaf*'MAILLAGE' ;
'ARGUMENT' disc*'MOT' ;
'ARGUMENT' un*'CHPOINT' ;
'ARGUMENT' clphi/'CHPOINT' ;
*
'SI' ('NON' ('EXISTE' clphi)) ;
   pref  = 'POIN' ('CHANGER' mquaf 'POI1') 1 ;
   clphi = 'MANUEL' 'CHPO' pref 1 'SCAL' 0.D0 ;
'FINSI' ;
*
'ARGUMENT' rvm/'TABLE' ;
'SI' ('NON' ('EXISTE' rvm)) ;
   rv = 'EQEX' ;
   rvm = rv . 'METHINV' ;
'FINSI' ;
*
dim = 'VALEUR' 'DIME' ;
*
'SI' ('NEG' dim 2) ;
   'ERREUR' 219 ;
'FINSI' ;
*
laxi = 'EGA' ('VALEUR' 'MODE') 'AXIS' ;
ncx = 'MOTS' 'UX' ; ncy = 'MOTS' 'UY' ;
*
'SI' laxi ;
   ncx = 'MOTS' 'UR' ; ncy = 'MOTS' 'UZ' ;
   cdpr  = '*' ('COORDONNEE' 1 mquaf) ('*' PI 2.D0) ;
   ur = 'EXCO' ncx un ;
   uz = 'EXCO' ncy un ;
*
   numop  = 2 ; numvar = 1 ; numdat = 0 ;
   numcof = 0 ; numder = 2 ;
*
   A = ININLIN numop numvar numdat numcof numder ;
   A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'VAR' . 1 . 'DISC'   = disc ;
   A . 1 . 1 . 1 = 'LECT' ;
   A . 2 . 1 . 2 = 'LECT' ;
*
   numdat = 1 ; numcof = 1 ;
   B = ININLIN numop numvar numdat numcof numder ;
   B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   B . 'VAR' . 1 . 'DISC'   = disc ;
   B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   B . 'DAT' . 1 . 'DISC'   = disc ;
   B . 'DAT' . 1 . 'VALEUR' = cdpr ;
   B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   B . 1 . 1 . 1 = 'LECT' 1 ;
   B . 2 . 1 . 2 = 'LECT' 1 ;
*
   numvar = 2 ;
   C = ININLIN numop numvar numdat numcof numder ;
   C . 'VAR' . 1 . 'NOMDDL' = ncx ;
   C . 'VAR' . 1 . 'DISC'   = disc ;
   C . 'VAR' . 1 . 'VALEUR' = '*' ur -1. ;
   C . 'VAR' . 2 . 'NOMDDL' = ncy ;
   C . 'VAR' . 2 . 'DISC'   = disc ;
   C . 'VAR' . 2 . 'VALEUR' = uz ;
   C . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   C . 'DAT' . 1 . 'DISC'   = disc ;
   C . 'DAT' . 1 . 'VALEUR' = cdpr ;
   C . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   C . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   C . 1 . 2 . 0 = 'LECT' 1 ;
   C . 2 . 1 . 0 = 'LECT' 1 ;
*
   mat = NLIN mquaf disc A B 'GAU7' ;
   mat = 'KOPS' 'RIMA' mat ;
   smb = NLIN mquaf disc C B 'GAU7' ;
*
'SINON'  ;
*
   ux = 'EXCO' ncx un ;
   uy = 'EXCO' ncy un ;
*
   numop  = 2 ; numvar = 1 ; numdat = 0 ;
   numcof = 0 ; numder = 2 ;
*
   A = ININLIN numop numvar numdat numcof numder ;
   A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'VAR' . 1 . 'DISC'   = disc ;
   A . 1 . 1 . 1 = 'LECT' ;
   A . 2 . 1 . 2 = 'LECT' ;
*
   numvar = 2 ;
   B = ININLIN numop numvar numdat numcof numder ;
   B . 'VAR' . 1 . 'NOMDDL' = ncx ;
   B . 'VAR' . 1 . 'DISC'   = disc ;
   B . 'VAR' . 1 . 'VALEUR' = '*' ux -1. ;
   B . 'VAR' . 2 . 'NOMDDL' = ncy ;
   B . 'VAR' . 2 . 'DISC'   = disc ;
   B . 'VAR' . 2 . 'VALEUR' = uy ;
*
   B . 1 . 2 . 0 = 'LECT' ;
   B . 2 . 1 . 0 = 'LECT' ;
*
   mat = NLIN mquaf disc A A 'GAU7' ;
   mat = 'KOPS' 'RIMA' mat ;
   smb = NLIN mquaf disc B A 'GAU7' ;
'FINSI' ;
*
psi = 'KRES' mat 'TYPI' rvm 'CLIM' clphi 'SMBR' smb ;
'RESPRO' psi ;
*
'FINPROC' ;
*ENDPROCEDUR fcourant
*BEGINPROCEDUR formar
************************************************************************
* NOM         : FORMAR
* DESCRIPTION : formate un réel de facon courte
*               pratique pour les noms de
*               sauvegarde
*               Exemples :
* 'MESSAGE' ('CHAINE' (formar 2.9e5   1)) ;
* 2.9E5
* 'MESSAGE' ('CHAINE' (formar -2.9e5  1)) ;
* -2.9E5
* 'MESSAGE' ('CHAINE' (formar 2.9e-5  1)) ;
* 2.9E-5
* 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
* -2.9E-5
* 'MESSAGE' ('CHAINE' (formar 2.9     1)) ;
* 2.9
* 'MESSAGE' ('CHAINE' (formar -2.9    1)) ;
* -2.9
* 'MESSAGE' ('CHAINE' (formar 0       1)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 0       1)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 2.9e5   0)) ;
* 3E5
* 'MESSAGE' ('CHAINE' (formar -2.9e5  0)) ;
* -3E5
* 'MESSAGE' ('CHAINE' (formar 2.9e-5  0)) ;
* 3E-5
* 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
* -3E-5
* 'MESSAGE' ('CHAINE' (formar 2.9     0)) ;
* 3
* 'MESSAGE' ('CHAINE' (formar -2.9    0)) ;
* -3
* 'MESSAGE' ('CHAINE' (formar 0       0)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 0       0)) ;
* 0
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 18/02/2003, version initiale
* HISTORIQUE : v1, 18/02/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' FORMAR ;
'ARGUMENT' fl*'FLOTTANT' ;
'ARGUMENT' vir/'ENTIER  ' ;
'SI' ('NON' ('EXISTE' vir)) ;
   vir = 1 ;
'SINON' ;
   'SI' ('<' vir 0) ;
      'ERREUR' 'fournir un entier positif' ;
   'FINSI' ;
'FINSI' ;
'SI' ('<' ('ABS' fl) 10.D-100) ;
   chfl = 'CHAINE' '0' ;
'SINON' ;
*! sans le 1.D-10, ca ne fonctionne pas
*! qd on entre pile poil une puissance de 10
   lfl = LOG10 ('ABS' fl) ;
*   lfl = '+' (LOG10 ('ABS' fl)) 1.D-10  ;
   slfl = 'SIGNE' ('ENTIER' lfl) ;
   'SI' ('EGA' slfl 1) ;
      elfl = 'ENTIER' lfl ;
   'SINON' ;
      elfl = '-' ('ENTIER' lfl) 1 ;
   'FINSI' ;
   man = '/' fl ('**' 10.D0 elfl) ;
*
* Une verrue pour des histoires de précision...
*
   'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
      man  = '/' man 10.D0 ;
      elfl = '+' elfl 1 ;
   'FINSI' ;
*
   sman = 'SIGNE' man ;
   'SI' ('EGA' sman 1) ;
      fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
   'SINON' ;
      fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
   'FINSI' ;
   'SI' ('NEG' vir 0) ;
      'SI' ('NEG' elfl 0) ;
         chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
      'SINON' ;
         chfl = 'CHAINE' 'FORMAT' fman man ;
      'FINSI' ;
   'SINON' ;
      man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
      'SI' ('NEG' elfl 0) ;
         chfl = 'CHAINE' man2 'E' elfl ;
      'SINON' ;
         chfl = 'CHAINE' man2 ;
      'FINSI' ;
   'FINSI' ;
'FINSI' ;
'RESPRO' chfl ;
*
* End of procedure file FORMAR
*
'FINPROC' ;
*ENDPROCEDUR formar
*BEGINPROCEDUR gdiv2
************************************************************************
* NOM         : GDIV2
* 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' GDIV2 ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'     _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
                 'NCOF' 'FCOF' 'CCOF' 'GBBT' 'GMBT' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
lbbt = 0 ;
*
'REPETER' imotcle 0 ;
   'ARGUMENT' motcle/'MOT' ;
   'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
   'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
      cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
   'FINSI' ;
   'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'FPRI') ; 'ARGUMENT' valt*'LISTREEL' ; 'FINSI' ;
   'SI' ('EGA' motcle 'FDUA') ; 'ARGUMENT' valq*'FLOTTANT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'GBBT') ; lbbt = 1 ; 'FINSI' ;
   'SI' ('EGA' motcle 'GMBT') ; lbbt = 2 ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
methgau = 'GAU7' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef  detecte' ;
'FINSI' ;
'FINSI' ;
*
   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 ;
      dp = ('*' PI 2.D0) ;
      rmt = 'COORDONNEE' 1 _mt ;
      ncof = ncof '+' 2 ;
   'FINSI' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMINC') ;
nincq = 'DIME' (tnomq . 'NOMINC') ;
'SI' ('NEG' ninct idim) ;
   cherr = 'CHAINE'
   'la primale doit etre un vecteur' ;
   'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' nincq 1) ;
   cherr = 'CHAINE'
   'la duale doit etre un scalaire' ;
   'ERREUR' cherr ;
'FINSI' ;
*
   numop = 1 ; numder = idim ; numvar = ninct ;
   numdat = ncof ; numcof = ncof ;
   A = ININLIN numop numvar numdat numcof numder ;
*
   lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
   'REPETER' iiinct ninct ;
      iinct = &iiinct ;
      A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMINC' . iinct ;
      A . 'VAR' . iinct . 'DISC'   = tnomt . 'DISC'  ;
      'SI' lvalt ;
         'SI' lvt ;
            A . 'VAR' . iinct . 'VALEUR'   = 'EXTRAIRE' valt iinct ;
         'SINON' ;
            A . 'VAR' . iinct . 'VALEUR'   = valt ;
         'FINSI' ;
      'FINSI' ;
   'FIN' iiinct ;
*
   icof = 0 ;
   'SI' lcof ;
      icof = '+' icof 1 ;
      A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
      A . 'DAT' . icof . 'DISC'   = tcof . 'DISC' ;
      A . 'DAT' . icof . 'VALEUR' = valo ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      ll = 'LECT' 1 ;
   'SINON' ;
      ll = 'LECT' ;
   'FINSI' ;
*
   'SI' iaxi ;
      icof = '+' icof 1 ;
      A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . icof . 'DISC'   = 'CSTE' ;
      A . 'DAT' . icof . 'VALEUR' = dp ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      icof = '+' icof 1 ;
      A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . icof . 'DISC'   = discg ;
      A . 'DAT' . icof . 'VALEUR' = rmt ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      lldpr = ll 'ET' ('LECT' ('-' icof 1) icof) ;
      lldp = ll 'ET' ('LECT' ('-' icof 1)) ;
   'FINSI' ;
*
   'SI' iaxi ;
      'REPETER' iidim idim ;
         A . 1 . &iidim . &iidim  = lldpr ;
      'FIN' iidim ;
      A . 1 . 1 . 0 = lldp ;
   'SINON' ;
      'REPETER' iidim idim ;
         A . 1 . &iidim . &iidim  = ll ;
      'FIN' iidim ;
   'FINSI' ;
*
   numvar = 1 ;
   numdat = 0 ;
   numcof = 0 ;
*
   B = ININLIN numop numvar numdat numcof numder ;
   B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMINC' . 1 ;
   B . 'VAR' . 1 . 'DISC'   = tnomq . 'DISC'  ;
   'SI' lvalq ;
      B . 'VAR' . 1 . 'VALEUR'   = valq ;
   'FINSI' ;
   B . 1 . 1 . 0  = 'LECT' ;
*
   'SI' ('OU' ('EGA' lbbt 0) ('EGA' lbbt 1)) ;
      'SI' ('EXISTE' _smt) ;
          mgdiv2 = 'NLIN' discg _mt _smt A B methgau ;
      'SINON' ;
          mgdiv2 = NLINP discg _mt A B methgau ;
      'FINSI' ;
      'SI' ('EGA' lbbt 1) ;
         'SI' ('EXISTE' _smt) ;
             mgdiv3 = 'NLIN' discg _mt _smt B A methgau ;
         'SINON' ;
             mgdiv3 = NLINP discg _mt B A methgau ;
         'FINSI' ;
         mgdiv2 = 'ET' mgdiv2 mgdiv3 ;
      'FINSI' ;
   'FINSI' ;
   'SI' ('EGA' lbbt 2) ;
      'SI' ('EXISTE' _smt) ;
          mgdiv2 = 'NLIN' discg _mt _smt B A methgau ;
      'SINON' ;
          mgdiv2 = NLINP discg _mt B A methgau ;
      'FINSI' ;
   'FINSI' ;
*
'RESPRO' mgdiv2 ;
'FINPROC' ;
*
* End of procedure file GDIV2
*
*ENDPROCEDUR gdiv2
*BEGINPROCEDUR glno
************************************************************************
* NOM         : GLNO
* 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' GLNO ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
'ARGUMENT' nomt*'MOT' ;
'ARGUMENT' valt*'CHPOINT' ;
'ARGUMENT' nomq/'MOT' ;
*
'SI' ('NON' ('EXISTE' nomq)) ;
   nomq = 'QUAF' ;
'FINSI' ;
*
* Second membre
*
smb = GMASS2 _mt tdisc 'NPRI' nomt 'CPRI' valt 'NDUA' nomq ;
mat = GMASS2 _mt tdisc 'NPRI' nomq 'NDUA' nomq ;
cpro = 'KRES' mat smb ;
*
'RESPRO' cpro ;
'FINPROC' ;
*
* End of procedure file GLNO
*
*ENDPROCEDUR glno
*BEGINPROCEDUR gmass2
************************************************************************
* NOM         : GMASS2
* 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' GMASS2 ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'     _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
                 'NCOF' 'FCOF' 'CCOF' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
'REPETER' imotcle 0 ;
   'ARGUMENT' motcle/'MOT' ;
   'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
   'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
      cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
   'FINSI' ;
   'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
   tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
   tst = tst1 'OU' tst2 ;
   'SI' tst ;
      'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
      'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
      isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
      'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
         'ARGUMENT' valv*'FLOTTANT' ;
      'FINSI' ;
      'SI' tst1 ; valt = valv ; 'FINSI' ;
      'SI' tst2 ; valq = valv ; 'FINSI' ;
   'FINSI' ;
   'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
methgau = 'GAU7' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMINC') ;
nincq = 'DIME' (tnomq . 'NOMINC') ;
'SI' ('NEG' ninct nincq) ;
   cherr = 'CHAINE'
   'les primales et duales nont pas le meme nombre de composantes' ;
   'ERREUR' cherr ;
'FINSI' ;
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef  detecte' ;
'FINSI' ;
'FINSI' ;
*
   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' ;
*   'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
   numop = ninc ; numder = idim ; numvar = ninc ;
   numdat = ncof ; numcof = ncof ;
   A = ININLIN numop numvar numdat numcof numder ;
   'SI' lcof ;
      A . 'DAT' . 1 . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
      A . 'DAT' . 1 . 'DISC'   = tcof . 'DISC' ;
      A . 'DAT' . 1 . 'VALEUR' = valo ;
      A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
      ll = 'LECT' 1 ;
   'SINON' ;
      ll = 'LECT' ;
   'FINSI' ;
   lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
      A . 'VAR' . iinc . 'DISC'   = tnomt . 'DISC'  ;
      'SI' lvalt ;
         'SI' lvt ;
            A . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valt iinc ;
         'SINON' ;
            A . 'VAR' . iinc . 'VALEUR'   = valt ;
         'FINSI' ;
      'FINSI' ;
      A . iinc . iinc . 0  = ll ;
   'FIN' iiinc ;
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;
   B = ININLIN numop numvar numdat numcof numder ;
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = discg ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
      ll = 'LECT' 1 ;
   'SINON' ;
      ll = 'LECT' ;
   'FINSI' ;
   lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
      B . 'VAR' . iinc . 'DISC'   = tnomq . 'DISC'  ;
      'SI' lvalq ;
         'SI' lvq ;
            B . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valq iinc ;
         'SINON' ;
            B . 'VAR' . iinc . 'VALEUR'   = valq ;
         'FINSI' ;
      'FINSI' ;
      B . iinc . iinc . 0  = ll ;
   'FIN' iiinc ;
*
   'SI' ('EXISTE' _smt) ;
       mgmass2 = 'NLIN' discg _mt _smt A B methgau ;
   'SINON' ;
       mgmass2 = NLINP discg _mt A B methgau ;
   'FINSI' ;
*
'RESPRO' mgmass2 ;
'FINPROC' ;
*
* End of procedure file GMASS2
*
*ENDPROCEDUR gmass2
*BEGINPROCEDUR grig
************************************************************************
* NOM         : GRIG
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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 !
************************************************************************
*
*
'DEBPROC' GRIG ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
                 'NCOF' 'FCOF' 'CCOF' 'LAPN' 'GMBT' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt  = 'valt' ; valq = 'valq' ;
llapn = 0 ;
'REPETER' imotcle 0 ;
   'ARGUMENT' motcle/'MOT' ;
   'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
   'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
      cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
   'FINSI' ;
   'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
   tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
   tst = tst1 'OU' tst2 ;
   'SI' tst ;
      'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
      'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
      isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
      'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
         'ARGUMENT' valv*'FLOTTANT' ;
      'FINSI' ;
      'SI' tst1 ; valt = valv ; 'FINSI' ;
      'SI' tst2 ; valq = valv ; 'FINSI' ;
   'FINSI' ;
   'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'LAPN') ; llapn = 1 ; 'FINSI' ;
   'SI' ('EGA' motcle 'GMBT') ; llapn = 2 ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
methgau = 'GAU7' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMINC') ;
nincq = 'DIME' (tnomq . 'NOMINC') ;
'SI' ('NEG' ninct nincq) ;
   cherr = 'CHAINE'
   'les primales et duales nont pas le meme nombre de composantes' ;
   'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' ninct ('VALEUR' 'DIME')) ;
   cherr = 'CHAINE'
   'les inconnues doivent etre vectorielles' ;
   'ERREUR' cherr ;
'FINSI' ;
*
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef  detecte' ;
'FINSI' ;
'FINSI' ;
*
   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' ;
*   'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      rmt   = 'COORDONNEE' 1 _mt ;
      deupi = '*' PI 2.D0 ;
   'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
*
*Bug ?   numop  = ('**' ninc 2) '+' 1 ;
   numop  = '**' ninc 2 ;
   'SI' iaxi ; numop = '+' numop 1 ; 'FINSI' ;
   numder = idim ;
   numvar = ninc ;
   ncof = '+' ncof 1 ;
*delete   'SI' iaxi ; ncof = '+' ncof 1 ; 'FINSI' ;
   numdat = ncof ;
   numcof = ncof ;
*
   A = ININLIN numop numvar numdat numcof numder ;
*
   lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
      A . 'VAR' . iinc . 'DISC'   = tnomt . 'DISC'  ;
      'SI' lvalt ;
         'SI' lvt ;
            A . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valt iinc ;
         'SINON' ;
            A . 'VAR' . iinc . 'VALEUR'   = valt ;
         'FINSI' ;
      'FINSI' ;
   'FIN' iiinc ;
*
   icof = 0 ;
   ll = 'LECT' ;
   icof = '+' icof 1 ;
   A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . icof . 'DISC'   = 'CSTE' ;
   A . 'DAT' . icof . 'VALEUR' = 2.D0 ;
   A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
   A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
   ll  = 'LECT' ;
   ll2 = 'LECT' icof ;
   'SI' lcof ;
      icof = '+' icof 1 ;
      A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
      A . 'DAT' . icof . 'DISC'   = tcof . 'DISC' ;
      A . 'DAT' . icof . 'VALEUR' = valo ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      ll  = 'ET' ll  ('LECT' icof) ;
      ll2 = 'ET' ll2 ('LECT' icof) ;
   'FINSI' ;
*
   iop = 0 ;
   'REPETER' iidim idim ;
      'REPETER' jidim idim ;
         iop = '+' iop 1 ;
         'SI' ('EGA' &iidim &jidim) ;
            'SI' ('EGA' llapn 0) ;
               A . iop . &iidim . &jidim = ll2 ;
            'SINON' ;
               A . iop . &iidim . &jidim = ll ;
            'FINSI' ;
         'SINON' ;
            'SI' ('NEG' llapn 2) ;
               A . iop . &iidim . &jidim = ll ;
            'FINSI' ;
            'SI' ('NEG' llapn 1) ;
               A . iop . &jidim . &iidim = ll ;
            'FINSI' ;
         'FINSI' ;
      'FIN' jidim ;
   'FIN' iidim ;
   'SI' iaxi ;
      iop = '+' iop 1 ;
      'SI' ('EGA' llapn 0) ;
         A . iop . 1 . 0 = ll2 ;
      'SINON' ;
         A . iop . 1 . 0 = ll ;
      'FINSI' ;
   'FINSI' ;
*
   'SI' iaxi ;
      numdat = 2 ;
      numcof = 2 ;
   'SINON' ;
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;
*
   B = ININLIN numop numvar numdat numcof numder ;
*
   icof = 0 ;
*
   'SI' iaxi ;
      icof = '+' icof 1 ;
      B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . icof . 'DISC'   = discg ;
      B . 'DAT' . icof . 'VALEUR' = rmt ;
      B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      B . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      icof = '+' icof 1 ;
      B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . icof . 'DISC'   = 'CSTE' ;
      B . 'DAT' . icof . 'VALEUR' = deupi ;
      B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      B . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      ll  = 'LECT' ('-' icof 1) icof ;
      mic = '*' ('-' icof 1) -1 ;
      llb = 'LECT' mic icof ;
   'FINSI' ;
*
   lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
      B . 'VAR' . iinc . 'DISC'   = tnomq . 'DISC'  ;
      'SI' lvalq ;
         'SI' lvq ;
            B . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valq iinc ;
         'SINON' ;
            B . 'VAR' . iinc . 'VALEUR'   = valq ;
         'FINSI' ;
      'FINSI' ;
   'FIN' iiinc ;
*
   iop = 0 ;
   'REPETER' iidim idim ;
      'REPETER' jidim idim ;
         iop = '+' iop 1 ;
         B . iop . &iidim . &jidim = ll ;
      'FIN' jidim ;
   'FIN' iidim ;
   'SI' iaxi ;
      iop = '+' iop 1 ;
      B . iop . 1 . 0 = llb ;
*      B . iop . 1 . 0 = ll ;
   'FINSI' ;
*
   mgrig = NLINP discg _mt A B methgau ;
* Integration par parties
*   mgrig = '*' mgrig -1.D0 ;
*
'RESPRO' mgrig ;
'FINPROC' ;
*
* End of procedure file GRIG
*
*ENDPROCEDUR grig
*BEGINPROCEDUR gugrad2
************************************************************************
* NOM         : GUGRAD2
* DESCRIPTION : Une matrice de convection
*
*
*
* 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' GUGRAD2 ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'     _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
                 'NVIT' 'FVIT' 'CVIT' 'NCOF' 'FCOF' 'CCOF' ;
'REPETER' imotcle 0 ;
   'ARGUMENT' motcle/'MOT' ;
   'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
   'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
      cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
   'FINSI' ;
   'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'NVIT') ; 'ARGUMENT' nomu*'MOT' ; 'FINSI' ;
   tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
   tst = tst1 'OU' tst2 ;
   'SI' tst ;
      'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
      'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
      isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
      'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
         'ARGUMENT' valv*'FLOTTANT' ;
      'FINSI' ;
      'SI' tst1 ; valt = valv ; 'FINSI' ;
      'SI' tst2 ; valq = valv ; 'FINSI' ;
   'FINSI' ;
   'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'FVIT') ; 'ARGUMENT' valu*'LISTREEL' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
   'SI' ('EGA' motcle 'CVIT') ; 'ARGUMENT' valu*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
methgau = 'GAU7' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
tnomu = TDISC . nomu ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMINC') ;
nincq = 'DIME' (tnomq . 'NOMINC') ;
'SI' ('NEG' ninct nincq) ;
   cherr = 'CHAINE'
   'les primales et duales nont pas le meme nombre de composantes' ;
   'ERREUR' cherr ;
'FINSI' ;
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef  detecte' ;
'FINSI' ;
'FINSI' ;
*
   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' ;
* Scalaire ou vecteur
nincu = 'DIME' (tnomu . 'NOMINC') ;
'SI' ('NEG' nincu idim) ;
   cherr = 'CHAINE'
   'la vitesse doit etre un vecteur' ;
   'ERREUR' cherr ;
'FINSI' ;
ncof = '+' ncof nincu ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
   numop = ninc ; numder = idim ; numvar = ninc ;
   numdat = ncof ; numcof = ncof ;
   A = ININLIN numop numvar numdat numcof numder ;
*
   lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
      A . 'VAR' . iinc . 'DISC'   = tnomt . 'DISC'  ;
      'SI' lvalt ;
         'SI' lvt ;
            A . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valt iinc ;
         'SINON' ;
            A . 'VAR' . iinc . 'VALEUR'   = valt ;
         'FINSI' ;
      'FINSI' ;
   'FIN' iiinc ;
*
   lvu = 'EGA' ('TYPE' valu) 'LISTREEL' ;
   icof = 0 ;
   'REPETER' iiincu nincu ;
      iincu = &iiincu ;
      icof = icof '+' 1 ;
      A . 'DAT' . icof . 'NOMDDL' = tnomu . 'NOMINC' . iincu ;
      A . 'DAT' . icof . 'DISC'   = tnomu . 'DISC' ;
      'SI' lvu ;
         A . 'DAT' . icof . 'VALEUR'   = 'EXTRAIRE' valu iincu ;
      'SINON' ;
         A . 'DAT' . icof . 'VALEUR'   = valu ;
      'FINSI' ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
   'FIN' iiincu ;
   'SI' lcof ;
      icof = icof '+' 1 ;
      A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
      A . 'DAT' . icof . 'DISC'   = tcof . 'DISC' ;
      A . 'DAT' . icof . 'VALEUR' = valo ;
      A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
      A . 'COF' . icof . 'LDAT'   = 'LECT' icof ;
      ll = 'LECT' icof ;
   'SINON' ;
      ll = 'LECT' ;
   'FINSI' ;
*
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      'REPETER' iiidim idim ;
         iidim = &iiidim ;
         A . iinc . iinc . iidim = ('ET' ('LECT' iidim) ll) ;
      'FIN' iiidim ;
   'FIN' iiinc ;
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;
   B = ININLIN numop numvar numdat numcof numder ;
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = discg ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
      ll = 'LECT' 1 ;
   'SINON' ;
      ll = 'LECT' ;
   'FINSI' ;
   lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
   'REPETER' iiinc ninc ;
      iinc = &iiinc ;
      B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
      B . 'VAR' . iinc . 'DISC'   = tnomq . 'DISC'  ;
      'SI' lvalq ;
         'SI' lvq ;
            B . 'VAR' . iinc . 'VALEUR'   = 'EXTRAIRE' valq iinc ;
         'SINON' ;
            B . 'VAR' . iinc . 'VALEUR'   = valq ;
         'FINSI' ;
      'FINSI' ;
      B . iinc . iinc . 0  = ll ;
   'FIN' iiinc ;
*
   'SI' ('EXISTE' _smt) ;
       mgugrad2 = 'NLIN' discg _mt _smt A B methgau ;
   'SINON' ;
       mgugrad2 = NLINP discg _mt A B methgau ;
   'FINSI' ;
*
'RESPRO' mgugrad2 ;
'FINPROC' ;
*
* End of procedure file GUGRAD2
*
*ENDPROCEDUR gugrad2
*BEGINPROCEDUR log10
************************************************************************
* NOM         : LOG10
* DESCRIPTION : Log_10
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 18/02/2003, version initiale
* HISTORIQUE : v1, 18/02/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' LOG10 ;
'REPETER' bouc ;
   ok = FAUX ;
   'ARGUMENT' fl/'FLOTTANT' ;
   'ARGUMENT' lr/'LISTREEL' ;
   'ARGUMENT' cp/'CHPOINT ' ;
   'ARGUMENT' cm/'MCHAML  ' ;
   'SI' ('EXISTE' fl) ;
      ok = VRAI ;
      'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
   'FINSI' ;
   'SI' ('EXISTE' lr) ;
      ok = VRAI ;
      'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
   'FINSI' ;
   'SI' ('EXISTE' cp) ;
      ok = VRAI ;
      'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
   'FINSI' ;
   'SI' ('EXISTE' cm) ;
      ok = VRAI ;
      'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
   'FINSI' ;
   'SI' ('NON' ok) ;
      'QUITTER' bouc ;
   'FINSI' ;
'FIN' bouc ;
*
* End of procedure file LOG10
*
'FINPROC' ;
*ENDPROCEDUR log10
*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 mydal
************************************************************************
* NOM         : MYDAL
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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 !
************************************************************************
*
*
'DEBPROC' MYDAL ;
'ARGUMENT' p1*'POINT' p2*'POINT' p3*'POINT' p4*'POINT' ;
lden = 'PROG' ;
'REPETER' bcl 0 ;
   'ARGUMENT' den/'FLOTTANT' ;
   'SI' ('EXISTE' den) ;
      lden = 'ET' lden den ;
   'SINON' ;
      'QUITTER' bcl ;
   'FINSI' ;
'FIN' bcl ;
dlden = 'DIME' lden ;
'SI' ('EGA' dlden 1) ;
   den = 'EXTRAIRE' lden 1 ;
   denxg = den ; denxd = den ;
   denyb = den ; denyh = den ;
'FINSI' ;
'SI' ('EGA' dlden 2) ;
   denx = 'EXTRAIRE' lden 1 ;
   denxg = denx ; denxd = denx ;
   deny = 'EXTRAIRE' lden 2 ;
   denyb = deny ; denyh = deny ;
'FINSI' ;
'SI' ('EGA' dlden 4) ;
   denxg = 'EXTRAIRE' lden 1 ;
   denxd = 'EXTRAIRE' lden 2 ;
   denyb = 'EXTRAIRE' lden 3 ;
   denyh = 'EXTRAIRE' lden 4 ;
'FINSI' ;
l1 = 'DROIT' p1 p2 'DINI' denxg 'DFIN' denxd ;
l2 = 'DROIT' p2 p3 'DINI' denyb 'DFIN' denyh ;
l3 = 'DROIT' p3 p4 'DINI' denxd 'DFIN' denxg ;
l4 = 'DROIT' p4 p1 'DINI' denyh 'DFIN' denyb ;
mt = 'DALLER' l1 l2 l3 l4 ;
'RESPRO' mt ;
*
* End of procedure file MYDAL
*
'FINPROC' ;
*ENDPROCEDUR mydal
*BEGINPROCEDUR quafme
************************************************************************
* NOM         : QUAFME
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 01/12/2004, version initiale
* HISTORIQUE : v1, 01/12/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' QUAFME ;
'REPETER' bcl ;
   'ARGUMENT' mquad/'MAILLAGE' ;
   'SI' ('EXISTE' mquad) ;
      mquaf = 'CHANGER' mquad 'QUAF' ;
*      mlin = 'CHANGER' mquad 'LINEAIRE' ;
      'RESPRO' mquaf ;
   'SINON' ;
      'QUITTER' bcl ;
   'FINSI' ;
'FIN' bcl ;
'FINPROC' ;
*
* End of procedure file QUAFME
*
*ENDPROCEDUR quafme
*BEGINPROCEDUR redus
************************************************************************
* NOM         : REDUS
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 01/12/2004, version initiale
* HISTORIQUE : v1, 01/12/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' REDUS ;
'ARGUMENT' mred*'MAILLAGE' ;
'REPETER' bcl ;
   'ARGUMENT' chpo/'CHPOINT' ;
   'SI' ('EXISTE' chpo) ;
      chpor = 'REDU' chpo mred ;
      'RESPRO' chpor ;
   'SINON' ;
      'QUITTER' bcl ;
   'FINSI' ;
'FIN' bcl ;
'FINPROC' ;
*
* End of procedure file REDUS
*
*ENDPROCEDUR redus
*BEGINPROCEDUR scottm
************************************************************************
* NOM         : SCOTTM
* DESCRIPTION :
* Corrélations issues de
*@Article{scottmirza,
*  author =       {P.S. Scott and F.A. Mirza and J. Vlachopoulos},
*  title =        {A Finite Element Analysis of Laminar Flows through Planar and Axisymmetric abrupt expansions},
*  journal =      {Computers & Fluids},
*  year =         {1986},
*  volume =    {14},
*  number =    {4},
*  pages =     {423 - 432},
*}
* donnant respectivement : Lr : longueur de la recirculation
*                          Lc : centre de la recirculation
*                          Rei : intensité relative de la recirculation
* en fonction de : exprat (expansion ratio)
*                  Re (Reynolds basé sur le diamètre d'entrée)
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : stephane.gounand@cea.fr
**********************************************************************
* VERSION    : v1, 13/01/2011, version initiale
* HISTORIQUE : v1, 13/01/2011, 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' SCOTTM ;
'ARGUMENT' exprat*'FLOTTANT' ;
'ARGUMENT' Re*'FLOTTANT' ;
vmod = 'VALEUR' 'MODE' ;
alpha = 'alpha' ;
'SI' ('EGA' vmod 'AXIS') ;
   'SI' ('EGA' exprat 1.5 1.D-6) ;
      alpha = 0.0125 ;
      beta  = 0.1695e-2 ;
      lambda = 0.085 ;
      theta  = 0.0374 ;
      epsilon = 0.0117 ;
   'FINSI' ;
   'SI' ('EGA' exprat 2. 1.D-6) ;
      alpha = 0.0455 ;
      beta  = 0.552e-2 ;
      lambda = 0.325 ;
      theta  = 0.126 ;
      epsilon = 0.0229 ;
   'FINSI' ;
   'SI' ('EGA' exprat 3. 1.D-6) ;
      alpha = 0.11 ;
      beta  = 2.65e-2 ;
      lambda = 0.105 ;
      theta  = 0.378 ;
      epsilon = 0.0354 ;
   'FINSI' ;
   'SI' ('EGA' exprat 4. 1.D-6) ;
      alpha = 0.17 ;
      beta  = 4.93e-2 ;
      lambda = 0.0 ;
      theta  = 0.65 ;
      epsilon = 0.0455 ;
   'FINSI' ;
'SINON' ;
   'SI' ('EGA' exprat 1.5 1.D-6) ;
      alpha = 0.0093 ;
      beta  = 0.133e-2 ;
      lambda = 0.08 ;
      theta  = 0.006 ;
      epsilon = 0.011 ;
   'FINSI' ;
   'SI' ('EGA' exprat 2. 1.D-6) ;
      alpha = 0.0347 ;
      beta  = 0.58e-2 ;
      lambda = 0.125 ;
      theta  = 0.025 ;
      epsilon = 0.0171 ;
   'FINSI' ;
   'SI' ('EGA' exprat 3. 1.D-6) ;
      alpha = 0.101 ;
      beta  = 2.73e-2 ;
      lambda = -0.05 ;
      theta  = 0.0735 ;
      epsilon = 0.0311 ;
   'FINSI' ;
   'SI' ('EGA' exprat 4. 1.D-6) ;
      alpha = 0.178 ;
      beta  = 5.78e-2 ;
      lambda = -0.398 ;
      theta  = 0.125 ;
      epsilon = 0.039 ;
   'FINSI' ;
'FINSI' ;
'SI' ('NEG' ('TYPE' alpha) 'FLOTTANT') ;
   cherr = 'CHAINE' 'exprat=' exprat ' incorrect' ;
   'ERREUR' cherr ;
'FINS' ;
Lr = '*' alpha Re ;
Lc = '+' ('*' beta Re) lambda ;
rei = '*' ('-' 1. ('EXP' ('*' ('*' Re epsilon) -1.)))
          theta ;
'RESPRO' rei Lc Lr ;
*
* End of procedure file SCOTTM
*
'FINPROC' ;
*ENDPROCEDUR scottm
*BEGINPROCEDUR trvec
************************************************************************
* NOM         : TRVEC
* DESCRIPTION : Trace des champs de vecteurs
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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 !
************************************************************************
*
*
'DEBPROC' TRVEC ;
*'ARGUMENT' tdisc*'TABLE' ;
*'ARGUMENT' motdom*'MOT' ;
'ARGUMENT' tdom*'MAILLAGE' ;
*
tvec = 'TABLE' ; ttit = 'TABLE' ;
i = 0 ;
lcoul = 'MOTS' 'JAUN' 'ROUG' 'BLAN' 'TURQ' 'VERT' 'OLIV'
 'AZUR' 'ORAN' 'VIOL' 'GRIS' 'OCEA' ;
*
'REPETER' livec 0 ;
   'SI' ('EGA' i 0) ;
      'ARGUMENT' ccvec*'CHPOINT' ;
   'SINON' ;
      'ARGUMENT' ccvec/'CHPOINT' ;
   'FINSI' ;
   'SI' ('EXISTE' ccvec) ;
      'ARGUMENT' ttvec*'MOT' ;
   'SINON' ;
      'QUITTER' livec ;
   'FINSI' ;
   i = '+' i 1 ;
*   'MESSAGE' ('CHAINE' 'i=' i) ;
*   'LISTE' ccvec ;
*   'LISTE' tvec ;
   tvec . i = ccvec ;
   ttit . i = ttvec ;
'FIN' livec ;
'ARGUMENT' echv/'FLOTTANT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
'SI' ('NON' ('EXISTE' lnclk)) ;
   lnclk = faux ;
'FINSI' ;
*
lmax = 'PROG' ;
'REPETER' ii i ;
   mm = 'MAXIMUM' (tvec . &ii) 'ABS' ;
   lmax = 'ET' lmax ('PROG' mm) ;
'FIN' ii ;
mm = '+' ('MAXIMUM' lmax) 1.D-60 ;
'SI' ('NON' ('EXISTE' echv)) ;
   vmodo = 'EGA' ('VALEUR' 'MODE') 'AXIS' ;
   'SI' vmodo ; 'OPTI' 'MODE' 'PLAN' ; 'FINSI' ;
   ctail = gmass2 ('CHANGER' tdom 'QUAF') tdisc
      'NPRI' 'CSTE' 'FPRI' 1. 'NDUA' 'CSTE' 'FDUA' 1. ;
*   'LISTE' ctail ;
   'SI' vmodo ; 'OPTI' 'MODE' 'AXIS' ; 'FINSI' ;
   vdim = 'VALEUR' 'DIME' ;
   dimm = DEADUTIL 'DIMM' tdom ;
*   ctail = '**' ctail ('/' 1. ('-' vdim 1)) ;
   ctail = '**' ctail ('/' 1. dimm) ;
   tail = '**' ('*' ('MAXIMUM' ctail) ('MINIMUM' ctail)) 0.5 ;
*'LISTE' tail ;
*'LISTE' mm ;
   echv = '/' ('*' 0.9 tail) mm ;
'FINSI' ;
tit  = 'CHAINE' 'Max. =' (formar mm 2) ;
'REPETER' ii i ;
   cou = EXMOMOD lcoul &ii ;
   tvec . &ii = 'VECT' (tvec . &ii) echv 'DEPL' cou ;
   tit = 'CHAINE' tit ' ' cou '=' (ttit . &ii) ;
'FIN' ii ;
'SI' lnclk ;
   'TRACER' (@stbl tvec) tdom 'TITR' tit 'NCLK' ;
'SINON' ;
   'TRACER' (@stbl tvec) tdom 'TITR' tit ;
'FINSI' ;
*
* End of procedure file TRVEC
*
'FINPROC' ;
*ENDPROCEDUR trvec
*BEGINPROCEDUR vide
************************************************************************
* NOM         : VIDE
* DESCRIPTION : Construit un objet vide
*
*
*
* 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' VIDE ;
'REPETER' bcl 0 ;
'ARGUMENT' typ/'MOT' ;
'SI' ('NON' ('EXISTE' typ)) ;
   'QUITTER' bcl ;
'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
'SI' ('EGA' vdim 1) ;
   p1 = 'POIN' 0. ;
'FINSI' ;
'SI' ('EGA' vdim 2) ;
   p1 = 'POIN' 0. 0. ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
   p1 = 'POIN' 0. 0. 0.;
'FINSI' ;
p2 = 'PLUS' p1 p1 ;
mp1 = 'MANUEL' 'POI1' p1 ;
mp2 = 'MANUEL' 'POI1' p2 ;
'SI' ('EGA' typ 'MAIL') ;
   mailvid = mp1 'ELEM' 'APPUYE' 'STRICTEMENT' mp2 'NOVERIF' ;
   'RESPRO' mailvid ;
'FINSI' ;
'SI' ('EGA' typ 'CHPO') ;
   chp1 = 'MANUEL' 'CHPO' mp1 1 'T' 0.D0 'NATURE' 'DISCRET' ;
   chpvid = 'EXCO' 'Q' chp1 'NOID' ;
   'RESPRO' chpvid ;
'FINSI' ;
'SI' ('EGA' typ 'RIGI') ;
   rig1 = 'MANUEL' 'RIGIDITE' mp1 ('MOTS' 'T') ('PROG' 0.D0) ;
   rigvid = 'EXTRAIRE' rig1 'RIGI' 'MULT' ;
   'RESPRO' rigvid ;
'FINSI' ;
'FIN' bcl ;
*
* End of procedure file VIDE
*
'FINPROC' ;
*ENDPROCEDUR vide
*
******************************************
*                                        *
*  Procédure principale de CALCUL        *
*                                        *
******************************************
*
'DEBPROC' CALCUL ;
'ARGUMENT' exprat*'FLOTTANT' ;
'ARGUMENT' nr*'ENTIER' ;
'ARGUMENT' Re*'FLOTTANT' ;
'ARGUMENT' iaxi*'LOGIQUE' ;
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ('CHAINE' '************   Sudden expansion  ***********') ;
'MESSAGE' ('CHAINE' 'expansion ratio =' (formar exprat 2)) ;
'MESSAGE' ('CHAINE' 'nr              =' (formar nr 2)) ;
'MESSAGE' ('CHAINE' 'Re              =' (formar Re 2)) ;
'MESSAGE' ('CHAINE' 'iaxi            =' iaxi) ;
*
titg = 'CHAINE' 'xr=' (formar exprat 1) ';Re='(formar Re 2) ;
'SI' iaxi ;
   titg = 'CHAINE' ' Axi;' titg ;
'SINON' ;
   titg = 'CHAINE' ' Plan;' titg ;
'FINSI' ;
*
'OPTION' 'DIME' 2 'ISOV' 'SULI' ;
'SI' iaxi ; 'OPTI' 'MODE' 'AXIS' ; 'FINSI' ;
*
'OPTI' 'ELEM' 'QUA8' ;
methgau = 'GAU7' ;
nitermax = 40 ;
'SI' ('<' Re 10.) ; omeg = 1.0 ; 'SINON' ; omeg = 0.75 ; 'FINSI' ;
mdvquit = 1.D-4 ;
*
**************************************
*            Modèle                  *
**************************************
*
discg = 'LINE' ; discv = 'QUAF' ; discp = 'LINM' ;
vdim = 'VALEUR' 'DIME' ;
vmod = 'VALEUR' 'MODE' ;
laxi = 'EGA' vmod 'AXIS' ;
'SI' laxi ;
   nomvit  = 'MOTS' 'UR' 'UZ' ;
   nomfor  = 'MOTS' 'FR' 'FZ' ;
'SINON' ;
   nomvit  = 'MOTS' 'UX' 'UY' ;
   nomfor  = 'MOTS' 'FX' 'FY' ;
'FINSI' ;
nv1 = 'EXTRAIRE' nomvit 1 ;
nv2 = 'EXTRAIRE' nomvit 2 ;
nomul   = 'MOTS' 'LX' ;
nomuld  = 'MOTS' 'FLX' ;
'SI' ('EGA' discp 'LINM') ;
   nompre = 'MOTS' 'LX1'  'LX2'  'LX3' ;
   nomprd = 'MOTS' 'FLX1' 'FLX2' 'FLX3' ;
'SINON' ;
   nompre = 'MOTS' 'LXP' ;
   nomprd = 'MOTS' 'FLXP' ;
'FINSI' ;
nomsca = 'MOTS' 'SCAL' ;
mpri = nomvit 'ET' nomul  'ET' nompre ;
mdua = nomfor 'ET' nomuld 'ET' nomprd ;
*
TDISC = 'TABLE' ;
TDISC . 'GEOM' = 'TABLE' ;
TDISC . 'GEOM' . 'DISC' = discg ;
TDISC . 'UN' = 'TABLE' ;
TDISC . 'UN' . 'DISC' = discv ;
TDISC . 'UN' . 'NOMINC' = 'TABLE' ;
'REPETER' idim vdim ;
   TDISC . 'UN' . 'NOMINC' . &idim = 'MOTS' ('EXTRAIRE' nomvit &idim) ;
'FIN' idim ;
TDISC . 'PN' = 'TABLE' ;
TDISC . 'PN' . 'DISC' = discp ;
TDISC . 'PN' . 'NOMINC' = 'TABLE' ;
TDISC . 'PN' . 'NOMINC' . 1 = nompre ;
lmdisc = 'MOTS' 'CSTE' 'LINE' 'LINB' 'QUAF' ;
'REPETER' iidisc ('DIME' lmdisc) ;
   mdisc = 'EXTRAIRE' lmdisc &iidisc ;
   tdisc . mdisc = 'TABLE' ;
   tdisc . mdisc . 'DISC' = mdisc ;
   tdisc . mdisc . 'NOMINC' = 'TABLE' ;
   tdisc . mdisc . 'NOMINC' . 1 = nomsca ;
   mdiscv = 'CHAINE' mdisc 'V' ;
   tdisc . mdiscv = 'TABLE' ;
   tdisc . mdiscv . 'DISC' = mdisc ;
   tdisc . mdiscv . 'NOMINC' = 'TABLE' ;
   'REPETER' idim vdim ;
      TDISC . mdiscv. 'NOMINC' . &idim =
         'MOTS' ('EXTRAIRE' nomvit &idim) ;
   'FIN' idim ;
'FIN' iidisc ;
*
**************************************
*            Maillage                *
**************************************
*
D1 = 1. ; D2 = exprat ;
L1 = 2. ; mL1 = '*' L1 -1. ;
* Estimation de la longueur d'après Scott et Mirza
'SI' complet ;
   ree = 'MAXIMUM' ('PROG' 200. Re) ;
'SINON' ;
   ree = 'MAXIMUM' ('PROG' 100. Re) ;
'FINSI' ;
L2 = 0.044 '*' exprat '*' ree ;
R2 = '/' D2 2. ;
R1 = '/' D1 2. ;
R12 = '-' R2 R1 ;
reia Lca Lra = SCOTTM exprat Re ;
'MESSAGE' ('CHAINE' 'Channel length =' (formar L2 2)) ;
'MESSAGE' ('CHAINE' 'Predicted Rel. eddy int. =' (formar reia 3)) ;
'MESSAGE' ('CHAINE' 'Predicted eddy center    =' (formar Lca 3)) ;
'MESSAGE' ('CHAINE' 'Predicted Reatt. length  =' (formar Lra 3)) ;
yc = 'MAXIMUM' ('PROG' Lra 0.4) ;
*
lr = 'PROG' R1 R12 ;
milr = 'MINIMUM' lr ;
dx  = '/' milr nr ;
dyp = dx ; dyg1 = '/' L1 nr ; dyg2 = '/' L2 nr ;
*
pA = 0. mL1    ; pB = R1 mL1 ;
pC = 0. 0.     ; pD = R1  0. ; pE = R2 0. ;
pF = 0. yc     ; pG = R1 yc  ; pH = R2 yc ;
poI = 0. L2     ; pJ = R1 L2  ; pK = R2 L2 ;
*
mt1 = MYDAL pA pB pD pC dx dx dyg1 dyp ;
mt2 = MYDAL pC pD pG pF dx dx dyp  dyp ;
mt3 = MYDAL pD pE pH pG dx dx dyp  dyp ;
mt4 = MYDAL pF pG pJ poI dx dx dyp  dyg2 ;
mt5 = MYDAL pG pH pK pJ dx dx dyp  dyg2 ;
*
mt = mt1 'ET' mt2 'ET' mt3 'ET' mt4 'ET' mt5 ;
'ELIMINATION' mt 1.D-6 ;
'SI' graph ;
   tit = 'CHAINE' 'Maillage : ' ('NBEL' mt) ' elements' ;
   'TRACER' mt 'TITR' tit ;
'FINSI' ;
cmt = 'CONTOUR' mt ;
*
bas = 'ELEM' cmt 'COMPRIS' pA pB ;
dro = 'ELEM' cmt 'COMPRIS' pB pK ;
dror = 'ELEM' cmt 'COMPRIS' pE pK ;
hau = 'ELEM' cmt 'COMPRIS' pK poI ;
gau = 'ELEM' cmt 'COMPRIS' poI pA ;
*
'SI' graph ;
   tit = 'CHAINE' 'Bords  du Maillage '  ;
   'TRACER' (bas 'ET' hau 'ET' dro 'ET' gau) 'TITR' tit ;
'FINSI' ;
*
'SI' ('EGA' discv 'LINB') ;
   'ERREUR' 5 ;
'FINSI' ;
_bas _dro _dror _hau _gau _mt = QUAFME bas dro dror hau gau mt ;
*'ELIMINATION' (_bas 'ET' _dro 'ET' _hau 'ET' _gau 'ET' _cmt 'ET' _mt)
*   1.D-5 ;
_cmt = 'CONTOUR' _mt ;
_zmt = 'COORDONNEE' 2 _mt ;
_ptmt = 'POIN' _zmt 'COMPRIS' -1. ('*' yc 1.5) ;
_tmt = 'ELEM' _mt 'APPUYE' _ptmt ;
_ctmt = 'CONTOUR' _tmt ;
*
*
**************************************
*  Matrices des opérateurs linéaires *
**************************************
*
*
*  Rigidité
*
gri = GRIG _mt tdisc 'NPRI' 'UN' 'NDUA' 'UN' ;
*   gri = GRIG _mt tdisc 'NPRI' 'UN' 'NDUA' 'UN' 'LAPN' ;
gri = 'CHANGER' 'INCO' gri mpri mpri mpri mdua ;
*gri = '*' gri ('/' 1. Re) ;
*
* Contrainte de divergence nulle
*
gdiv = GDIV2 _mt tdisc 'NPRI' 'UN' 'NDUA' 'PN' 'GBBT' ;
gdiv = 'CHANGER' 'INCO' gdiv mpri mpri mpri mdua ;
gdiv = '*' gdiv -1. ;
*
**************************************
*  Conditions aux limites            *
**************************************
*
*
* Blocages :
mur  = _cmt ;
muz  = _bas 'ET' _dro ;
rbas = 'COORDONNEE' 1 _bas ;
'SI' laxi ; alpha = 2. ; 'SINON' ; alpha = 1.5 ; 'FINSI' ;
fuz  = '/' rbas R1 ;
*fuz = rbas ;
fuz  =  '*' fuz fuz ;
fuz  = '-' fuz 1. ;
fuz  = '*' fuz ('*' -1. alpha) ;
* Vérification du débit
cdeb = GMASS2 _bas tdisc 'NPRI' discv 'CPRI' fuz 'NDUA' discv ;
deb  = 'MAXIMUM' ('RESULT' cdeb) ;
csinj = GMASS2 _bas tdisc 'NPRI' 'CSTE' 'FPRI' 1.
                          'NDUA' 'CSTE' 'FDUA' 1. ;
sinj = 'MAXIMUM' ('RESULT' csinj) ;
'MESSAGE' ('CHAINE' 'deb=' deb) ;
'MESSAGE' ('CHAINE' 'sinj=' sinj) ;
'SI' ('NEG' deb sinj ('*' sinj 1.D-6)) ;
    'ERREUR' 'Erreur dans le calcul du profil de vitesse entrant' ;
'FINSI' ;
cuz = 'NOMC' nv2 fuz ;
vcuz = 'VECT' cuz 'DEPL' 'JAUN' ;
tit = 'CHAINE' 'Profil dentree' ;
'SI' graph ;
   'TRACER' vcuz bas 'TITR' tit ;
'FINSI' ;
cuzt = '+' cuz ('MANUEL' 'CHPO' muz 1 nv2 0.) ;
*
mblor = 'BLOQUE' nv1 mur ;
mbloz = 'BLOQUE' nv2 muz ;
fbloz = 'DEPIMPOSE' mbloz cuzt ;
*
mblot = mblor 'ET' mbloz ;
fblot = fbloz ;
* Champ de conditions aux limites pour la fonction de courant
clfcou = 'MANUEL' 'CHPO' pB 1 'SCAL' 0. ;
* Matrice masse pour calculer la force non intégrée sur le bord
* droit
   mdro = 'KOPS' 'RIMA'
      (GMASS2 _dro tdisc 'NPRI' 'QUAF' 'NDUA' 'QUAF') ;
*
**************************************
*  Boucle d'itérations non linéaires *
*  Méthode incrémentale              *
**************************************
*
*
sol = 'COPIER' cuzt ;
*
'REPETER' it nitermax ;
*
* Convection (dans la boucle car non-linéaire)
*
   gugr = gugrad2 _mt tdisc 'NPRI' 'UN'   'NDUA' 'UN'
                            'NCOF' 'CSTE' 'FCOF' Re
                            'NVIT' 'UN'   'CVIT' sol ;
   gugr = 'CHANGER' 'INCO' gugr mpri mpri mpri mdua ;
*
* Assemblage des matrices et second membres
*
   ktot = gugr 'ET' gri 'ET' gdiv 'ET' mblot ;
   ktg  = ('*' (gugr 'ET' gri) ('/' 1. omeg))
      'ET' gdiv 'ET' mblot ;
   ftot = fblot '-' ('*' ktot sol) ;
*   ftot = '*' ('*' ktot -1.) sol ;
   ktgk = 'CHANGER' 'INCO' ('KOPS' 'RIMA' ktg) mpri mpri mdua mpri ;
   ftot =  'NOMC' mdua mpri ftot ;
* Résolution
   dsol = 'KRES' ktgk ftot ;
   sol = '+' sol dsol ;
* Solution
   dvit = 'EXCO' nomvit dsol ;
   vit = 'EXCO' nomvit sol ;
   pre = 'EXCO' nompre sol ;
   prep = GLNO _mt tdisc 'PN' pre discv ;
*   prep = '-' prep ('MINIMUM' prep) ;
   mdv = 'MAXIMUM' dsol 'ABS' 'AVEC' nomvit ;
*
*  Calcul des quantités pour comparaison avec les références
*
   fcou = FCOURANT _mt 'QUAF' vit clfcou ;
   mifcou = 'MINIMUM' fcou ;
   mafcou = 'MAXIMUM' fcou ;
   rei = '*' (mafcou '/' mifcou) -1. ;
   Lc = 'MAXIMUM' ('COORDONNEE' 2 (fcou 'POIN' 'MAXI')) ;
* Frottement sur dror
   fblo = 'EXCO' nomfor nomvit ('*' ('*' mblot -1.) sol) 'NOID' ;
   fzi = 'EXCO' nv2 ('REDU' fblo _dro) ;
   fz  = 'KRES' mdro fzi ;
   evf = 'EVOL' 'CHPO' fz _dror ;
   'SI' graph ;
      chtit = 'CHAINE' 'Force de frottement sur _dror' titg ;
      'DESSIN' evf  'XBOR' 0. ('*' yc 2.) 'TITR' chtit 'AXES' 'NCLK' ;
   'FINSI' ;
   evf = 'EXTRAIRE' evf 'APRE' ('*' yc 0.5) ;
   evf = 'EXTRAIRE' evf 'AVAN' ('*' yc 1.5) ;
   xevf = 'EXTRAIRE' evf 'ABSC' ;
   yevf = 'EXTRAIRE' evf 'ORDO' ;
   evv = 'EVOL' 'MANU'    yevf xevf ;
*   'DESSIN' evv ;
   yevf2 xevf2 = 'ORDONNER' 'DECROISSANT' yevf xevf ;
   'SI' ('>' ('MAXIMUM' ('-' yevf2 yevf) 'ABS') 0.) ;
      Lr = -10000. ;
   'SINON' ;
      Lr = 'IPOL' 0. yevf xevf ;
   'FINSI' ;
*
   'MESSAGE' ('CHAINE' ' It=' &it
                       ' mdv=' (formar mdv 2)
                       ' rei=' (formar rei 3)
                       ' Lc=' (formar Lc 3)
                       ' Lr=' (formar Lr 3)
                       ) ;
   'SI' ('<' mdv mdvquit) ;
*
*  Graphiques
*
      'SI' graph ;
*    Vitesse
         TRVEC cmt vit ('CHAINE' 'Vitesse' titg) ;
*    Pression
         'TRACER' mt prep _cmt 'TITR' ('CHAINE' 'Pression' titg) ;
*    Fonction de courant
*         TRVEC _mt dvit ('CHAINE' 'Increm. Vitesse') ;
         TRVEC _ctmt ('REDU' vit _tmt)
            ('CHAINE' 'Vitesse' titg) ;
         'TRACER' _tmt ('REDU' fcou _tmt) _ctmt
            'TITR' ('CHAINE' 'Fonction de courant' titg) ;
         lprg = 'PROG' mifcou ('/' mifcou 2.) 0. ('/' mafcou 2.) mafcou
         ;
         'TRACER' _tmt ('REDU' fcou _tmt) _ctmt lprg
            'TITR' ('CHAINE' 'Fonction de courant' titg) ;
*    Bilan des forces sur le contour et interne
         fpre  = 'EXCO' nomfor nomvit ('*' ('*' gdiv -1.) sol) ;
         fblo = 'EXCO' nomfor nomvit ('*' ('*' mblot -1.) sol) 'NOID' ;
         frig = 'EXCO' nomfor nomvit ('*' ('*' gri -1.) sol) ;
         fugr = 'EXCO' nomfor nomvit ('*' ('*' gugr -1.) sol) 'NOID' ;
         desf = fpre '+' frig '+' fugr '+' fblo ;

*
         fprec frigc desfc fugrc fbloc =
            REDUS _cmt
            fpre frig desf fugr fblo ;
*         TRVEC cmt fprec 'Bord pr' frigc 'ri' desfc 'des' fugrc 'co'
*                  fbloc 'bl' ;
         TRVEC cmt fpre 'Bord pr' frig 'ri' desf 'des' fugr 'co'
                  fblo 'bl' ;
         mint = 'DIFF' ('CHANGER' _mt 'POI1')
                       ('CHANGER' _cmt 'POI1') ;
*         'TRACER' ('ET' mint mt)  ;
         fprei frigi desfi fugri fbloi = REDUS mint
            fpre frig desf fugr fblo ;
         TRVEC cmt fprei 'Int pr' frigi 'ri' desfi 'des' fugri 'co'
                  fbloi 'bl' ;
*         TRVEC cmt frigi ' Int ri' desfi 'des' ;
      'FINSI' ;
      'QUITTER' it ;
   'FINSI' ;
'FIN' it ;
*
tres = 'TABLE' ;
tres . '_mt' = _mt ;
tres . 'vit' = vit ;
tres . 'fcou' = fcou ;
tres . 'prep' = prep ;
tres . 'rei' = rei ; tres . 'reia' = reia ;
tres . 'Lc'  = Lc  ; tres . 'Lca'  = Lca ;
tres . 'Lr'  = Lr  ; tres . 'Lra'  = Lra ;
'RESPRO' tres ;
'FINPROC' ;
*
******************************************
*                                        *
*  Les tests                             *
*                                        *
******************************************
'OPTI' echo 0 ;
lok = VRAI ;
* Macagno Hung  fexp = 2 Re = 0 Axi ; Lr = 0.27
'SI' complet ;
   nr = 12 ; errv = 5.D-4 ;
'SINON' ;
   nr = 7 ; errv  = 5.D-2 ;
'FINSI' ;
t1 = calcul 2 nr 0. vrai ;
Lr = t1 . 'Lr' ;
err = errrel Lr 0.266 ; tst = '<' err errv ;
'SI' tst ;
   'MESSAGE' 'Test 1 : err = ' err ' ok ' ;
'SINON' ;
   'MESSAGE' '!!! Test 1 : err = ' err ' PAS BIEN ! ' ;
'FINSI' ;
lok = lok 'ET' tst ;
* Scott Mirza fexp = 1.5  Re = 200 Plan
'SI' complet ;
   nr = 6 ; errv1 = 3.D-2 ; errv2 = 7.D-2 ; errv3 = 2.D-3 ;
'SINON' ;
   nr = 3 ; errv1  = 4.D-2 ; errv2 = 0.2 ; errv3 = 2.D-2 ;
'FINSI' ;
t2 = calcul 1.5 nr 200. faux ;
Lr = t2 . 'Lr' ; Lc = t2 . 'Lc' ; rei = t2 . 'rei' ;
Lra = t2 . 'Lra' ; Lca = t2 . 'Lca' ; reia = t2 . 'reia' ;
err1 = errrel Lr Lra ; tst1 = '<' err1 errv1 ;
err2 = errrel Lc Lca ; tst2 = '<' err2 errv2 ;
err3 = errrel rei reia ; tst3 = '<' err3 errv3 ;
tst = tst1 'ET' tst2 'ET' tst3 ;
'SI' tst ;
   'MESSAGE' 'Test 2 : err1 = ' err1  ;
   'MESSAGE' '         err2 = ' err2  ;
   'MESSAGE' '         err3 = ' err3 ' ok ' ;
'SINON' ;
   'MESSAGE' '!!! Test 2 : err1 = ' err1  ;
   'MESSAGE' '!!!          err2 = ' err2  ;
   'MESSAGE' '!!!          err3 = ' err3 ' PAS BIEN ! ' ;
'FINSI' ;
lok = lok 'ET' tst ;
* Oliveira fexp = 3.  Re = 50 Axis  ; Lr = 5.33
'SI' complet ;
   nr = 6 ; errv1 = 6.D-2 ; errv2 = 5.D-2 ; errv3 = 2.D-2 ;
'SINON' ;
   nr = 3 ; errv1  = 1.D-3 ; errv2 = 5.D-2 ; errv3 = 3.D-2 ;
'FINSI' ;
t3 = calcul 3. nr 50. vrai ;
Lr = t3 . 'Lr' ; Lc = t3 . 'Lc' ; rei = t3 . 'rei' ;
Lra = 5.33 ; Lca = t3 . 'Lca' ; reia = t3 . 'reia' ;
err1 = errrel Lr Lra ; tst1 = '<' err1 errv1 ;
err2 = errrel Lc Lca ; tst2 = '<' err2 errv2 ;
err3 = errrel rei reia ; tst3 = '<' err3 errv3 ;
tst = tst1 'ET' tst2 'ET' tst3 ;
'SI' tst ;
   'MESSAGE' 'Test 3 : err1 = ' err1  ;
   'MESSAGE' '         err2 = ' err2  ;
   'MESSAGE' '         err3 = ' err3 ' ok ' ;
'SINON' ;
   'MESSAGE' '!!! Test 3 : err1 = ' err1  ;
   'MESSAGE' '!!!          err2 = ' err2  ;
   'MESSAGE' '!!!          err3 = ' err3 ' PAS BIEN ! ' ;
'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 SUDDEN_EXPANSION
*
'FIN' ;




 

© Cast3M 2003 - All rights reserved.
Disclaimer