Download contactd_fmm.dgibi

Back to the list

* fichier :  contactd_fmm.dgibi
*********************************************************************
*                                                                   *
* Propagatrion d'une discontinuité de contact.                      *
*                                                                   *
* Methode implicite sans matrice                                    *
*                                                                   *
* BECCANTINI A., SFME/LTMF,  Fevrier 2003                           *
*                                                                   *
* Boundary conditions imposed on the border without using ghost     *
* cells.                                                            *
* Boundary conditions correctly taken into account into the         *
* explicit part.                                                    *
* They are not recomputed at each Jacobi iteration.                 *
* Dual time step strategy.                                          *
* Automatic time step strategy                                      *
* BDF2                                                              *
*                                                                   *
* Juin 2006 : - changement des conditions aux limites pour NS       *
*               (elle peuvent venir de la partie convective)        *
*             - possibilité de utiliser SGS                         *
*                                                                   *
*********************************************************************


*************************************************************************
*************************************************************************
* I) PROCEDURES *********************************************************
*************************************************************************
*************************************************************************

*************************************************************************
******PROCEDURE PROCPT **************************************************
*************************************************************************
*
*
 'DEBPROC' PROCPT ; 
 'FINPROC' ;

*************************************************************************
*********** PROCEDURE PNSSM :                        ********************
*********** SOLUTION OF THE NAVIER-STOKES EQUATIONS  ********************
*********** FMM                                      ********************
*************************************************************************
*
* RVX . 'RESULTS'         : table containing the results
*
* RVX . 'FREQI'           : frequency of presenting the results
*
* RVX . 'MODEL'           : model object
* RVX . 'RN0'             : density
* RVX . 'GN0'             : qdm
* RVX . 'RET0'            : total energy
*
* RVX . 'PGAS'            : table containing the gas model 
* RVX . 'PGAS' . 'GAMN'   : gamma
* RVX . 'PGAS' . 'MU'     : dynamic viscosity (kg/m^3 x m^2/s)
* RVX . 'PGAS' . 'LAMBDA' : heat diffusion (W/K/m)
* 
*
* RVX . 'GRAVITY'         : gravity
*
* RVX . 'LISTCONS'        : name of the conservative variables
* RVX . 'LISTPRIM'        : name of the primitive variables
*
* RVX . 'LISTERR'         : name of the error variables
*
* RVX . 'METHOD'          : numerical scheme
* RVX . 'CUTOFF'          : cut off speed
*
* RVX . 'SPACEA'          : space accuracy
* RVX . 'LIMITER'         : limiter type
* RVX . 'TIMEA'           : time accuracy
* 
* RVX . 'T0'              : initial time
* RVX . 'TFINAL'          : final time
* RVX . 'DTPS' ('CFL')    : time step or CFL number
*
* RVX . 'DCFL'            : CFL number for dual time
*
*                          Error criteria for dual time loop:
* RVX . 'NDTITER'         : number of iterations
* RVX . 'RELERR'          : Logical (Relative error or absolute error)
* RVX . 'EPSDT'           : error at which dual time iterations are stopped
*
* RVX . 'NJAC'            : Jacobi iterations
*
* RVX . 'PROLIM'          : table called by the procedure PROLIM,
*                           procedure to compute boundary conditions
*
* RVX . 'DIFTIMP'         : boundary condition on temperature
* RVX . 'DIFGTIMP'        : boundary condition on gradient of temperature
* RVX . 'MDIFCT'          : mesh in which we impose the temperature
*                           arising from the convective BC
* RVX . 'DIFVIMP'         : boundary condition on speed
* RVX . 'DIFGVIMP'        : boundary condition on gradient of speed
* RVX . 'MDIFCV'          : mesh in which we impose the velocity
*                           arising from the convective BC
* RVX . 'DIFTAUI'         : boundary condition on constraint tensor
* RVX . 'DIFQIMP'         : boundary condition on heat flux
* 
*

 'DEBPROC' PNSSM ;
 'ARGUMENT' RVX*TABLE ;
*
*
 'SI' ('EXISTE' RVX 'RESULTS') ;
    'MESS' 'Table RESULTS already exists' ;
 'SINON' ;
    RVX . 'RESULTS' = 'TABLE' ;
    RVX . 'RESULTS' . 'TPS' = RVX . 'T0' ;
    RVX . 'RESULTS' . 'RN'  = 'COPIER' (RVX . 'RN0') ;
    RVX . 'RESULTS' . 'GN'  = 'COPIER' (RVX . 'GN0') ;
    RVX . 'RESULTS' . 'RET' = 'COPIER' (RVX . 'RET0') ;
    RVX . 'RESULTS' . 'LISTLINF' = 'PROG' ;
    RVX . 'RESULTS' . 'LISTITDT' = 'LECT' ;
    RVX . 'RESULTS' . 'LISTITER' = 'LECT' ;
    RVX . 'RESULTS' . 'NITER' = 0 ;
 'FINSI' ;
 
 MDOMINT = RVX . 'MODEL' ;
 NELT = 'NBEL' ('DOMA' MDOMINT 'CENTRE') ;
*
***** Physical properties
*
 GAMN    = RVX . 'PGAS' . 'GAMN' ;
 GAMSCA1 = 'MAXIMUM' GAMN ;
 GAMSCA2 = 'MINIMUM' GAMN ;
 'SI' ('EGA' GAMSCA2 GAMSCA1 0.0001) ;
    GAMSCAL = GAMSCA1 ;
 'SINON' ;
    'MESSAGE' ;
    'MESSAGE' 'Gamma is not constant' ;
    'ERREUR' 21 ;
 'FINSI' ;
* 
 MU     = (RVX . 'PGAS' . 'MU') ;
 LAMBDA = (RVX . 'PGAS' . 'LAMBDA') ;
 R      = (RVX . 'PGAS' . 'R') ;
 CV     = R '/' (GAMSCAL '-' 1.) ; 
 
* 
 LISTINCO = RVX . 'LISTCONS' ;
 LISTPRIM = RVX . 'LISTPRIM' ;
 LISTERR  = RVX . 'LISTERR'  ;
* Names of the gradient of temperature
 LMGTEMP = 'MOTS' 'P1DX' 'P1DY' ;
* Names of the gradient of speed
 LMGVIT  = 'MOTS' 'P1DX' 'P1DY' 'P2DX' 'P2DY' ;
 
*  
* Upwind scheme
*
 METO = RVX . 'METHOD' ;

* Space accuracy (1 or 2) and limiter
* Time accuracy (1 or 2)

 ORDESP  = RVX . 'SPACEA' ;
 TYPELIM = RVX . 'LIMITER' ;
 ORDTPS  = RVX . 'TIMEA' ;

* Initial/final time
* Deltat or CFL
 TPS     = RVX . 'RESULTS' . 'TPS' ;
 TFINAL  = RVX . 'TFINAL' ;
 'SI' ('EXISTE' RVX 'DTPS') ;
    'SI' ('EXISTE' RVX 'CFL') ;
        'MESSAGE' 'DTPS or CFL ???' ;
        'ERREUR' 21 ;
    'FINSI' ;
    DTPS = RVX . 'DTPS' ;
 'SINON' ;
    CFL = RVX . 'CFL' ;
 'FINSI' ;
 
* Dual time iterations
 NDT = RVX . 'NDTITER' ;
* Relative error 
 EPSDT = RVX . 'EPSDT' ;
* Jacobi iterations
* NJAC = RVX . 'NJAC' ;
* Cut off speed
 ICO = RVX . 'CUTOFF' ;
* To compute the diffusive cut-off
 DELTAX = 'DOMA' MDOMINT 'XXDIEMIN' ;
 USDELTAX = 'INVERSE' DELTAX ;
*
**** Conservative variables
*
*
 MOT1 = 'EXTRAIRE' LISTINCO 1 ;
 'SI' ('EGA' ('VALE' 'DIME') 2) ;
    NOMMOM = 'EXTRAIRE' LISTINCO
       ('LECT' 2 3 ) ;
    NOMVEL = 'MOTS' 'UX' 'UY' ;
    MOT2 = 'EXTRAIRE' LISTINCO 4 ;
 'SINON' ;
    NOMMOM = 'EXTRAIRE' LISTINCO
      ('LECT' 2 3 4) ;
    NOMVEL = 'MOTS' 'UX' 'UY' 'UZ' ;
    MOT2 = 'EXTRAIRE' LISTINCO 5 ;
 'FINSI' ;

 RN0   = 'REDU' (RVX . 'RESULTS' . 'RN')  ('DOMA' MDOMINT 'CENTRE') ;
 GN0   = 'REDU' (RVX . 'RESULTS' . 'GN')  ('DOMA' MDOMINT 'CENTRE') ;
 RET0  = 'REDU' (RVX . 'RESULTS' . 'RET') ('DOMA' MDOMINT 'CENTRE') ;
*
**** Primitive variables
*
 VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RET0 GAMN ;
 TN0 = PN0 '/' (R '*' RN0) ;
 
 MOTRN = 'EXTRAIRE' LISTPRIM 1 ;
 'SI' ('EGA' ('VALE' 'DIME') 2) ;
    MOTVN = 'EXTRAIRE' LISTPRIM
       ('LECT' 2 3 ) ;
    MOTPN = 'EXTRAIRE' LISTPRIM 4 ;
 'SINON' ;
    MOTVN = 'EXTRAIRE' LISTPRIM
       ('LECT' 2 3 4) ;
    MOTPN = 'EXTRAIRE' LISTPRIM 5 ;
 'FINSI' ;
*
********************************************************************
**** Coeff to compute gradients for convective term (MCHSCA, MCHVEC)
**** and for diffusive terms (MCHDIT, MCHVEC)
********************************************************************
*
*    Boundary conditions have to be taken into account
*
 
 RCHLIM RESLIM = PROLIM (RVX . 'PROLIM') MDOMINT LISTINCO LISTPRIM
    RN0 VN0 PN0 GAMN  ;

 MAILLIM = 'EXTRAIRE' RCHLIM 'MAILLAGE' ;

*
* If only wall conditions (Maillim is then empty)
*

 'SI' (MAILLIM 'EGA' 0) ;

    CHPVID PIPI = 'KOPS' 'MATRIK' ;
        MAILLIM = 'DIFF' ('DOMA' MDOMINT 'CENTRE')
                         ('DOMA' MDOMINT 'CENTRE') ;

* Convective geometric coefficients
                        
    GRADRN ALRN MCHSCA = 'PENT' MDOMINT 'CENTRE' 'EULESCAL' 'NOLIMITE'
                         ('MOTS' 'SCAL') RN0 ;

    GRADVN ALVN MCHVEC = 'PENT' MDOMINT 'CENTRE' 'EULEVECT' 'NOLIMITE'
                         NOMVEL GN0 'CLIM' (RVX . 'DIFVIMP') ;

* Diffusive geometric coefficients
      
    GRADTN MCHDIT = 'PENT' MDOMINT 'FACE' 'DIAMAN2' ('MOTS' 'SCAL')
                    LMGTEMP TN0  (RVX . 'DIFTIMP') (RVX . 'DIFGTIMP') ;
    
    GRADVN MCHDIV = 'PENT' MDOMINT 'FACE' 'DIAMAN2' NOMVEL LMGVIT 
                    VN0 (RVX . 'DIFVIMP') (RVX . 'DIFGVIMP') ;    
      
*
* If other imposed Boudary conditions we create false Chpoints
*      
    
 'SINON' ;

* Convective false champoints

    SCALBC = 'MANUEL' 'CHPO' MAILLIM 1 'SCAL' 1.0 
             'NATU' 'DISCRET' ;
    
    'SI' (('VALEUR' 'DIME') 'EGA' 2) ; 
        VECTBC = 'MANUEL' 'CHPO' MAILLIM
                 2 'UX' 0.0 'UY' 0.0 'NATU' 'DISCRET' ;
*       Same name as NOMVEL            
    'SINON' ;
        VECTBC = 'MANUEL' 'CHPO' MAILLIM
                 3 'UX' 0.0 'UY' 0.0 'UZ' 0.0 'NATU' 'DISCRET' ;
    'FINSI' ;

    VECTBC = VECTBC '+' (RVX . 'DIFVIMP') ;

* Convective geometric coefficients 

    GRADRN ALRN MCHSCA = 'PENT' MDOMINT 'CENTRE' 'EULESCAL' 'NOLIMITE'
                         ('MOTS' 'SCAL') RN0 'CLIM' SCALBC ;

    GRADVN ALVN MCHVEC = 'PENT' MDOMINT 'CENTRE' 'EULEVECT' 'NOLIMITE'
                         NOMVEL VN0 'CLIM' VECTBC ;
 'FINSI' ;

*            
* Diffusive false champoints
*
* We have several possibility
* We decide to impose the temperature given by the convective boundary
* condition on (RVX . 'MDIFCT') and the velocity given by the
* convective boundary condition on (RVX . 'MDIFCV') 
* 
* We check that (RVX . 'MDIFCT') belongs to MAILLIM
*
 NN1 = 'NBEL' MAILLIM ;
 NN2 = 'NBEL' (RVX . 'MDIFCT') ;
 'SI' (('NEG' NN1 0) 'ET' ('NEG' NN2 0)) ;
*
*** If both meshes contain at least one element NN1 is equal
*   to the number of elements belonging to the intersection.
*   Otherwise NN1 = 0
* 
    NN1 = 'NBEL' ('INTERSECTION' (RVX . 'MDIFCT') MAILLIM) ;
 'FINSI' ;
 'SI' ('NEG' NN1 NN2) ;
    'MESSAGE' 'Problem in MDIFCT' ;
    'ERREUR' 21 ;
 'FINSI' ;
 SCALBC = 'MANUEL' 'CHPO' (RVX . 'MDIFCT') 1 'SCAL' 1.0
    'NATU' 'DISCRET' ;
 SCALBC = SCALBC '+' (RVX . 'DIFTIMP') ;

 NN2 = 'NBEL' (RVX . 'MDIFCV') ;
 'SI' (('NEG' NN1 0) 'ET' ('NEG' NN2 0)) ;
    NN1 = 'NBEL' ('INTERSECTION' (RVX . 'MDIFCV') MAILLIM) ;
 'FINSI' ;
 'SI' ('NEG' NN1 NN2) ;
    'MESSAGE' 'Problem in MDIFCV' ;
    'ERREUR' 21 ;
 'FINSI' ;
 'SI' (('VALEUR' 'DIME') 'EGA' 2) ; 
    VECTBC = 'MANUEL' 'CHPO' (RVX . 'MDIFCV') 
                 2 'UX' 0.0 'UY' 0.0 'NATU' 'DISCRET' ;
 'SINON' ;
    VECTBC = 'MANUEL' 'CHPO' (RVX . 'MDIFCV')
                 3 'UX' 0.0 'UY' 0.0 'UZ' 0.0 'NATU' 'DISCRET' ;
 'FINSI' ;
*
 VECTBC = VECTBC '+' (RVX . 'DIFVIMP') ;
*
* Diffusive geometric coefficients 

 GRADTN MCHDIT = 'PENT' MDOMINT 'FACE' 'DIAMAN2' ('MOTS' 'SCAL')
                    LMGTEMP TN0  SCALBC (RVX . 'DIFGTIMP') ;
*
 GRADVN MCHDIV = 'PENT' MDOMINT 'FACE' 'DIAMAN2' NOMVEL LMGVIT 
                    VN0 VECTBC (RVX . 'DIFGVIMP') ;
*
***************************************************************
*** After each dual time loop, we could display
*   the evolution of the error in the dual time loop
*   the evolution of the dual time step (the safety factor)
***************************************************************
*

 LISTLINF = RVX . 'RESULTS' . 'LISTLINF' ;
 LISTITDT = RVX . 'RESULTS' . 'LISTITDT' ; 
 LISTITER = RVX . 'RESULTS' . 'LISTITER' ;
*  
 'MESSAGE' ;
 'MESSAGE' ('CHAINE' 'Methode = ' METO) ;
 'MESSAGE' ;
*
 'TEMPS' 'ZERO' ;
*   
************************************************************************
************************************************************************
**** Temporal loop *****************************************************
************************************************************************
************************************************************************

 RN_N1M1  = 'COPIER' RN0 ;
 GN_N1M1  = 'COPIER' GN0 ;
 RET_N1M1 = 'COPIER' RET0 ;

 AA = 'DIME' LISTITER ;
 'SI' (AA > 0) ;
    PTITER = 'EXTRAIRE' LISTITER AA ;
 'SINON' ;
    PTITER = 0 ;
 'FINSI' ;
 
 DUSDT = 0.0D0 ;
 
 'REPETER' BLITER (RVX . 'NITER') ;

    PTITER = PTITER '+' 1 ;
*
**** Personal procedure
*
    PROCPT RVX ;
*
*
****  _N1M  = (t^n,\tau^m)
*     _N1M1 = (t^n,\tau^{m+1})
*
*
************************************************************************
****** Loop on dual time***********************************************
************************************************************************
*
*
*** DUSDT0 is the increment of DUSDT in the previous (physical) time
*   iteration.
*
    DUSDT0 = DUSDT ;
    DUSDT = 0.0D0 ;

    'REPETER' BLDT NDT ;

       RN_N1M  = RN_N1M1 ;
       GN_N1M  = GN_N1M1 ;
       RET_N1M = RET_N1M1 ;
*
**** Primitive variables
*
        
       VN_N1M PN_N1M = 'PRIM' 'PERFMONO' RN_N1M GN_N1M RET_N1M GAMN ;
*
*** Boundary conditions
*

       RCHLIM RESLIM = PROLIM (RVX . 'PROLIM') MDOMINT LISTINCO LISTPRIM
                       RN_N1M VN_N1M PN_N1M GAMN  ;
        
*    
****** First/second order reconstruction
*
       'SI' (ORDESP 'EGA' 2) ;
*
          NNLIM = 'NBNO' MAILLIM ;
          'SI' (NNLIM 'EGA' 0) ;
             RNLIM = CHPVID ;
             PNLIM = CHPVID ;
             VNLIM = RVX . 'DIFVIMP' ;
          'SINON' ;
             RNLIM = ('EXCO' MOTRN RCHLIM 'SCAL') ;
             PNLIM = ('EXCO' MOTPN RCHLIM 'SCAL') ;
             VNLIM = ('EXCO' MOTVN RCHLIM MOTVN)
                     '+'  (RVX . 'DIFVIMP') ;
          'FINSI' ;
          GRADRN ALRN0  = 'PENT' MDOMINT 'CENTRE' 'EULESCAL' TYPELIM
              ('MOTS' 'SCAL')  RN_N1M
             'CLIM' RNLIM 'GRADGEO' MCHSCA ;
          GRADPN ALPN0  = 'PENT' MDOMINT 'CENTRE' 'EULESCAL' TYPELIM
              ('MOTS' 'SCAL')  PN_N1M
             'CLIM' PNLIM 'GRADGEO' MCHSCA ;
          GRADVN ALVN0  = 'PENT' MDOMINT 'CENTRE' 'EULEVECT' TYPELIM
              ('MOTS' 'UX' 'UY') VN_N1M
             'CLIM' VNLIM  'GRADGEO' MCHVEC ;

*          'SI' (&BLDT < NLCB) ;
*              ALRN0  =  'COPIER' ALRN ;
*              ALPN0  =  'COPIER' ALPN ;
*              ALVN0  =  'COPIER' ALVN ;
*          'SINON' ;
*             'SI' (&BLDT 'EGA' NLCB) ;
*                'MESSAGE' ;
*                'MESSAGE' 'On gele les limiteurs!!!' ;
*                'MESSAGE' ;
*             'FINSI' ;
*          'FINSI' ;

          ROF VITF PF GAMF = 'PRET' 'PERFMONO'  2 1 
                              MDOMINT
                              RN_N1M  GRADRN ALRN0 
                              VN_N1M  GRADVN ALVN0  
                              PN_N1M   GRADPN ALPN0  
                              GAMN  ;
       'SINON' ;
          ROF VITF PF GAMF = 'PRET' 'PERFMONO'  1 1 
                              MDOMINT
                              RN_N1M VN_N1M PN_N1M GAMN  ;
       'FINSI' ;

       RESIDU DELTAT =  'KONV' 'VF' 'PERFMONO' 'RESI' METO
            MDOMINT LISTINCO  ROF VITF PF GAMF MAILLIM 
*            ICO (MU '*' ('INVERSE' RN_N1M) '*' USDELTAX) ;
            ICO ICO ;
       RESIDU = RESIDU '+' RESLIM ;
       
*
**** La gravite
*

       RESGRA = 'FIMP' 'VF' 'GRAVMONO' 'RESI' LISTINCO
                 RN_N1M GN_N1M1 (RVX . 'GRAVITY') ;
                 
       RESIDU = RESIDU '+' RESGRA ;
*       
**************************************
**** Diffusive terms *****************
**************************************
*
      TN_N1M = PN_N1M '/' (R '*' RN_N1M) ;
*
* Computation of the CHPOINTS at the boundary of the domain
*
      NN1 = 'NBEL' MAILLIM ;
      'SI' (NN1 > 0) ;
         RNLIM = 'EXCO' MOTRN RCHLIM 'SCAL' 'NATU' 'DISCRET'  ;
         PNLIM = 'EXCO' MOTPN RCHLIM 'SCAL' 'NATU' 'DISCRET'  ;
         VNLIM = ('EXCO' MOTVN RCHLIM MOTVN 'NATU' 'DISCRET') ;
         TNLIM = (PNLIM '/' (RNLIM '*' R) ) ;
         VNLIM = ('REDU' VNLIM (RVX . 'MDIFCV')) '+'
            (RVX . 'DIFVIMP') ;
         TNLIM = ('REDU' TNLIM (RVX . 'MDIFCV')) '+'
            (RVX . 'DIFTIMP') ;
      'SINON' ;
         VNLIM = (RVX . 'DIFVIMP') ;
         TNLIM = (RVX . 'DIFVIMP') ;
      'FINSI' ;
*
      GRADTN = 'PENT' MDOMINT 'FACE' 'DIAMAN2' ('MOTS' 'SCAL')
               LMGTEMP TN_N1M  TNLIM (RVX . 'DIFGTIMP') 
               'GRADGEO' MCHDIT ;
*
* 'LIST' (RVX . 'DIFGVIMP') ;
      GRADVN = 'PENT' MDOMINT 'FACE' 'DIAMAN2' NOMVEL
               LMGVIT VN_N1M VNLIM (RVX . 'DIFGVIMP')
               'GRADGEO' MCHDIV ;
*
*      NOMVEL = 'MOTS' 'UX' 'UY' ;
*
*
       ICACCA RESIDI DTCACCA = 'LAPN' 'VF' 'PROPCOST' 'RESI' 'EXPL'
          MDOMINT  MU LAMBDA CV RN_N1M VN_N1M TN_N1M GRADVN  GRADTN
          LISTINCO 'VIMP'  VNLIM  'TAUI' (RVX . 'DIFTAUI')
          'QIMP' (RVX . 'DIFQIMP')  ;

       RESIDU = RESIDU '+' RESIDI ;
*
*****  Spectral radious of the viscosity matrix
*
       COEFV1 = (0.0 '*' RN_N1M) '+' 1.0 ;
       COEFV1 = COEFV1 '*' (lambda '*' (gamscal '-' 1.)) ;
       COEFV1 = COEFV1 '/' (R '*' RN_N1M) ;
       COEFV2 = (0.0 '*' RN_N1M) '+' ((4.0 '/' 3.0) '*' MU) ;
       COEFV2 = COEFV2 '/' RN_N1M ;
       COEFV  = 0.5 '*' (COEFV1 '+' COEFV2) ;
       COEFV  = COEFV '+' (0.5 '*' ((COEFV1 '-' COEFV2) 'ABS')) ;
*       'MESSAGE' ;
*       'MESSAGE' 'Je fais n importe' ;
*       COEFV = COEFV '*' 0.25 ;
*
****** Residuum for dual tims stepping also involved the
*      variation of the conserved variables with respect
*      to time

       'SI' ((&BLITER 'EGA' 1) 'OU' (ORDTPS 'EGA' 1)) ;
           RESIDU = RESIDU '-' DUSDT ;
       'SINON' ;
           RESIDU = RESIDU '-' ((1.5 '*' DUSDT) '-' (0.5 '*' DUSDT0)) ;
       'FINSI' ;
       
*
*** Time step at the first iteration/jacobi iteration
*

       'SI' (&BLDT 'EGA' 1) ;
          'SI' ('EXISTE' RVX 'CFL') ;
             DTPS = (RVX . 'CFL') '*' 2.0D0 '*' DELTAT ;
          'SINON' ;
             DTPS = RVX . 'DTPS' ;
          'FINSI' ;
          DTPS = 'MINIMUM' ('PROG' DTPS ((TFINAL '-' TPS) '*' 1.001)) ;
          TPS = TPS '+' DTPS ;
*
          NJAC = 'ENTIER' ('MINIMUM' (RVX . 'NJACITER')) ;
          NJAC0 = NJAC ;
       'SINON' ;
          NJAC = 'IPOL' (('LOG' ERRINF) '/' ('LOG' 10))
                 (RVX . 'NJACLERR') (RVX . 'NJACITER') ;
          NJAC = 'MAXIMUM' ('PROG' NJAC0 NJAC) ;
          NJAC = 'ENTIER' NJAC ;
          NJAC0 = NJAC ;
       'FINSI' ;

*
*** JACOBI
*   

*
**** CFL dual
*
         'SI' (&BLDT 'EGA' 1) ;
             SAFFACD = ('MINIMUM' (RVX . 'DCFL')) '*' 2 ;
         'SINON' ;
             SAFFACD = ('IPOL' (('LOG' ERRINF) '/' ('LOG' 10))
                 (RVX . 'DCFLERR') (RVX . 'DCFL')) '*' 2 ;
         'FINSI' ;

          'SI' ((&BLITER 'EGA' 1) 'OU' (ORDTPS 'EGA' 1)) ;
*              DUN IPRO = 'DETO'  (RVX . 'TYPEJAC')
              DUN IPRO = 'KONV' 'VF' 'PMON1FMM'  (RVX . 'TYPEJAC')
                 LISTINCO MDOMINT  RESIDU RN_N1M GN_N1M RET_N1M GAMN ICO
                 DTPS SAFFACD
                 NJAC 'CLIM' LISTPRIM RCHLIM COEFV ;
          'SINON' ;
*              DUN IPRO = 'DETO'  (RVX . 'TYPEJAC')
              DUN IPRO = 'KONV' 'VF' 'PMON1FMM'  (RVX . 'TYPEJAC') 
                 LISTINCO MDOMINT  RESIDU RN_N1M GN_N1M RET_N1M GAMN ICO
                 (DTPS '/' 1.5)
                 SAFFACD NJAC 'CLIM' LISTPRIM RCHLIM COEFV ;
          'FINSI' ;
*       'FINSI' ;
     
       'SI' (IPRO 'NEG' 0) ;
          'MESSAGE' ;
          'MESSAGE' 'Probleme dans FMM' ;
          'MESSAGE' ;
          'ERREUR' 21 ;
       'FINSI' ;
       
*
**** We compute DUSDT for the future loop
*

       DUSDT = DUSDT '+' (DUN '/' DTPS) ;

*
**** We evaluate the conservative variables at t^{n+1}, \tau^{m+1}
*
       
       DRN = 'EXCO' MOT1 DUN 'SCAL' ;
       DGN = 'EXCO' NOMMOM DUN NOMVEL ;
       DRET = 'EXCO' MOT2 DUN 'SCAL' ;

       RN_N1M1   = RN_N1M '+' DRN ;
       GN_N1M1   = GN_N1M '+' DGN ;
       RET_N1M1  = RET_N1M '+' DRET ;

       ERRINF   = 'MAXIMUM' DUN 'ABS' LISTERR ;
       LISTLINF = LISTLINF 'ET' ('PROG' ERRINF) ;
       LISTITDT = LISTITDT 'ET' ('LECT'  &BLDT) ;
       LISTITER = LISTITER 'ET' ('LECT' PTITER) ;

       'SI' ((&BLDT 'EGA' 1) 'OU'
             (((&BLDT '/' (RVX . 'FREQI')) '*' (RVX . 'FREQI'))
              'EGA' &BLDT)) ;
          'MESSAGE' ;
          'MESSAGE'
          ('CHAINE' 'ITER =' PTITER ' TPS =' TPS
           ' DTITER ='  &BLDT  ' LINF =' ERRINF
           ' DCFL =' SAFFACD ' NJAC =' NJAC) ;
          'MESSAGE' ;
       'FINSI' ;
*
*
*** Update of RVX . 'RESULTS'
*
       RVX . 'RESULTS' . 'RN'   = RN_N1M1 ;
       RVX . 'RESULTS' . 'GN'   = GN_N1M1 ;
       RVX . 'RESULTS' . 'RET'  = RET_N1M1 ;
       RVX . 'RESULTS' . 'LISTITDT' = LISTITDT ;
       RVX . 'RESULTS' . 'LISTITER' = LISTITER ;
       RVX . 'RESULTS' . 'LISTLINF' = LISTLINF ;
*
       'SI' (RVX . 'RELERR') ;
*         Relative error       
          'SI' (&BLDT 'EGA' 1) ;
             ERRINF0 = ERRINF ;
          'SINON' ;
             'SI' (ERRINF < (EPSDT '*' ERRINF0)) ;
                'QUITTER' BLDT ;
             'FINSI' ;
          'FINSI' ;
       'SINON' ;
          'SI' (ERRINF < EPSDT) ;
             'QUITTER' BLDT ;
          'FINSI' ;
       'FINSI' ;


    'FIN' BLDT ;

************************************************************************
****** End of the loop on dual time*************************************
************************************************************************
*
*** Update of RVX . 'RESULTS'
*
    RVX . 'RESULTS' . 'TPS' = TPS ;
    RVX . 'RESULTS' . 'NITER' = (RVX . 'RESULTS' . 'NITER') '+' 1 ;
*
    'SI' (TPS '>EG' TFINAL) ;
       'QUITTER' BLITER ;
    'FINSI' ;
    
 'FIN' BLITER ;

 TCPU = 'TEMPS' 'NOEC' ;
 RVX . 'RESULTS' . 'TCPU' = TCPU ;

 'FINPROC' ;
 
*************************************************************************
****** FIN PROCEDURE PNSSM **********************************************
*************************************************************************

*************************************************************************
******PROCEDURE PROLIM **************************************************
*************************************************************************
*
 'DEBPROC' PROLIM ;

 'ARGUMENT' RVX*'TABLE' MDOMINT*'MMODEL' LISTINCO*'LISTMOTS'
            LISTPRIM*'LISTMOTS'
            RN*'CHPOINT' VN*'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;

*
* Récupération du nombres de CL imposées
* 

 NCL = RVX . 'N' ;

*
* Initialisation de RESLIM et de RCHLIM
*

 RESLIM VIDE = 'KOPS' MATRIK ;
 RCHLIM VIDE = 'KOPS' MATRIK ;

*
* Boucle d'évaluation des résidus et des CHPOINTS aux limites
*

 'REPETER' BCLIM NCL ;

   MOTCLI = 'EXTRAIRE' (RVX . 'CLN' . &BCLIM) 1 ;
   MODELI = RVX . 'MODELN' . &BCLIM  ;
   CHPOLI = RVX . 'CHPOLN' . &BCLIM  ;
 
   RCHLI RESLI = 'KONV' 'VF' 'PERFMONO' 'CLIM'  'RESI'
                 MDOMINT MODELI LISTINCO LISTPRIM 
                 RN VN PN GAMN
                 CHPOLI MOTCLI ;

   RCHLIM = RCHLIM '+' RCHLI ;
   RESLIM = RESLIM '+' RESLI ;

 'FIN' BCLIM ;

 'RESPRO' RCHLIM RESLIM ;
 'FINPROC' ;

*************************************************************************
****** FIN PROCEDURE PROLIM *********************************************
*************************************************************************

*************************************************************************
***** PROCEDURE POUR CALCULER LES VARIABLES CONSERVATIVES ***************
*************************************************************************

 'DEBPROC' CONS ;
 'ARGUMENT' RN*'CHPOINT' VN*'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;

 RVN  =  RN '*' VN ('MOTS' 'SCAL' 'SCAL') ('MOTS' 'UX' 'UY')
    ('MOTS' 'UX' 'UY') ;
 CELL = 'PSCAL' RVN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
 RECIN = 0.5 '*' CELL ;
 REIN = PN '/' (GAMN '-' 1.0) ;
 RET = RECIN '+' REIN ;

 DETR CELL ;
 DETR RECIN ;
 DETR REIN ;
 'RESPRO' RVN RET ;
 
 'FINPROC' ;

*************************************************************************
*************************************************************************
****************** FIN  PROCEDURES **************************************
*************************************************************************
*************************************************************************


*************************************************************************
*************************************************************************
****************** MAILLAGE  ********************************************
*************************************************************************
*************************************************************************

 TYEL = 'QUA4' ;
 
 'OPTION'  'DIME' 2  'ELEM' TYEL  'ISOV' 'SULI'
    'ECHO' 1 'TRAC' 'X' ;

* GRAPH = VRAI ;
 GRAPH = FAUX ;
*

 RAF = 1 ;
 L = 1. ;

 NX = 50 '*' RAF ;
 DX = L '/' NX ;
* NY = 4 ;
 'MESSAGE' ;
 'MESSAGE' 'MODIF' ;
 'MESSAGE' ;
 NY = 1 ;

 LIGM = (0.0 0.0) 'DROIT' NY (0.0 (NY '*' DX)) ;
 LIGG = LIGM 'PLUS' ((-1 '*' NX '*' DX) 0.0) ;
 LIGD = LIGM 'PLUS' ((NX '*' DX) 0.0) ;
 DOM1 = LIGG 'REGLER' NX LIGM ;
 DOM2 = LIGM 'REGLER' NX LIGD ;
 DOMINT = DOM1 'ET' DOM2 ;
 CDOM = 'DIFF' ('CONTOUR' DOMINT) (LIGG 'ET' LIGD) ;
*
**** Creation of MODELS
* 

 MDOMINT  = 'MODELISER' DOMINT 'EULER' ;
 MDOM1  = 'MODELISER' DOM1 'EULER' ;
 MDOM2  = 'MODELISER' DOM2 'EULER' ;
 MLIGG    = 'MODELISER' LIGG   'EULER' ;
 MLIGD    = 'MODELISER' LIGD   'EULER' ;
 MCDOM    = 'MODELISER' CDOM   'EULER' ;

 TDOMINT  = 'DOMA' MDOMINT 'VF' ;
 TDOM1  = 'DOMA' MDOM1 'VF' ;
 TDOM2  = 'DOMA' MDOM2 'VF' ;
 TLIGG    = 'DOMA' MLIGG   'VF' ;
 TLIGD    = 'DOMA' MLIGD   'VF' ;
 TCDOM    = 'DOMA' MCDOM   'VF' ;
 
 QDOMINT = TDOMINT . 'QUAF' ;
 QDOM1 = TDOM1 . 'QUAF' ;
 QDOM2 = TDOM2 . 'QUAF' ;
 QLIGD = TLIGD . 'QUAF' ;
 QLIGG = TLIGG . 'QUAF' ;
 QCDOM = TCDOM . 'QUAF' ;
 
 'ELIMINATION' QDOMINT (1.0D-3 '/' RAF)  QDOM1 ;
 'ELIMINATION' QDOMINT (1.0D-3 '/' RAF)  QDOM2 ;
 'ELIMINATION' QDOMINT (1.0D-3 '/' RAF)  QLIGG ;
 'ELIMINATION' QDOMINT (1.0D-3 '/' RAF)  QLIGD ;
 'ELIMINATION' QDOMINT (1.0D-3 '/' RAF)  QCDOM ;
 
 'SI' GRAPH ;
    'TRACER' DOMINT  'TITRE'
       ('CHAINE' 'Domaine, nbel=' ('NBEL' DOMINT)) ;
 'FINSI' ;

*************************************************************************
*************************************************************************
**************** FIN MAILLAGE  ******************************************
*************************************************************************
*************************************************************************
 
*************************************************************************
*************************************************************************
**************** INITIAL CONDITIONS *************************************
*************************************************************************
*************************************************************************

* Noms des variables

 MOTRN   = 'RN' ;
 MOTGNX  = 'RUX' ;
 MOTGNY  = 'RUY' ;
 MOTGN   = 'MOTS' MOTGNX MOTGNY ;
 MOTVNX  = 'UX' ;
 MOTVNY  = 'UY' ;
 MOTVN   = 'MOTS' MOTVNX MOTVNY ;
 MOTRET = 'RETN' ;
 MOTPN   = 'PN' ;
 
 LISTINCO = 'MOTS' MOTRN MOTGNX MOTGNY MOTRET ;
 LISTPRIM = 'MOTS' MOTRN MOTVNX MOTVNY MOTPN   ;

 GAMAIR = 1.4 ;

*
***** Left state
*

 ROL = 1.4 ;
 PL  = 1.0 ;
 UL  = 0.01 ;

 HTL = ((GAMAIR '/' (GAMAIR '-' 1.0)) '*' (PL '/' ROL)) '+'
       (0.5 '*' UL '*' UL) ;
 SL = PL '/' (ROL '**' GAMAIR) ;

*
***** Right state
*
 
 ROR = 1.4 '/' 10. ;
 PR  = PL ;
 UR  = UL ;

*
*** Boundary Conditions
*
*
*
* Subsonic inlet.
* We impose the total enthalpy and the entropy.
* The velocity direction is supposed to be 90 degrees
*
*
  CHPINL = 'MANUEL' 'CHPO' ('DOMA' MLIGG 'CENTRE') 2 'HT' HTL
           'S' SL ;
*          
* Subsonic outlet
* We impose the pressure
*
  CHPOUT = 'MANUEL' 'CHPO' ('DOMA' MLIGD 'CENTRE') 1 'PN' PR ;
*
* Point where we directly compute the boundary conditions
*
 MAILLIM = ('DOMA' MLIGG 'CENTRE') 'ET' ('DOMA' MLIGD 'CENTRE') ;
*    
 RN0  = ('MANU' 'CHPO' ('DOMA' MDOM1 'CENTRE') 1 'SCAL' ROL
        'NATURE' 'DISCRET') '+'
        ('MANU' 'CHPO' ('DOMA' MDOM2 'CENTRE') 1 'SCAL' ROR
        'NATURE' 'DISCRET')  ;
        
 VN0  = ('MANU' 'CHPO' ('DOMA' MDOM1 'CENTRE') 2 'UX'  UL
         'UY' 0.0  'NATURE' 'DISCRET') 'ET'
        ('MANU' 'CHPO' ('DOMA' MDOM2 'CENTRE') 2 'UX'  UR
        'UY' 0.0  'NATURE' 'DISCRET') ;
        
 PN0  = ('MANU' 'CHPO' ('DOMA' MDOM1 'CENTRE') 1 'SCAL' PL
         'NATURE' 'DISCRET') 'ET'
        ('MANU' 'CHPO' ('DOMA' MDOM2 'CENTRE') 1 'SCAL' PR
         'NATURE' 'DISCRET')  ;
        
 GAMN =  'MANU' 'CHPO' ('DOMA' MDOMINT 'CENTRE') 1 'SCAL' GAMAIR
        'NATURE' 'DISCRET' ;

 CSON = GAMN '*' (PN0 '/' RN0) ;
 CSON = CSON '**' 0.5 ;

 GN0 RET0 = CONS RN0 VN0 PN0 GAMN  ;

 VN1 PN1 = 'PRIM' 'PERFMONO' RN0 GN0 RET0 GAMN ;

 ERRO = 'MAXIMUM' (PN1 '-' PN0) 'ABS' ;
 
 'SI' (ERRO > 1.0D-6) ;
    'MESSAGE' 'Problem in the ic file!!!'
    'ERREUR' 5 ;
 'FINSI' ;
*
**** Plot of IC
*
 GRAVITE = 'MANUEL' 'CHPO' (TDOMINT . 'CENTRE') 2 'UX' 0.0 'UY' 0.0 ;
* 'SI' (FAUX 'ET' GRAPH) ;
 'SI' (GRAPH) ;
    CHM_RN   =  'KCHA' MDOMINT 'CHAM' RN0 ;
    CHM_PN   =  'KCHA' MDOMINT 'CHAM' PN0 ;
    CHM_VN   =  'KCHA' MDOMINT 'CHAM'  VN0 ;
    CHM_MN   =  'KCHA' MDOMINT 'CHAM'
      ((('PSCAL' VN0 VN0 MOTVN MOTVN) '**' 0.5) '/' CSON) ;
    
    'TRACER'  CHM_RN  MDOMINT 
       'TITR'  ('CHAINE'  'RN at t='  0.0);
    'TRACER'  CHM_PN  MDOMINT 
       'TITR'  ('CHAINE'  'PN at t='  0.0);
    'TRACER'  CHM_VN MDOMINT
       'TITR'  ('CHAINE'  'VN at t='  0.0);
    'TRACER'  CHM_MN MDOMINT
       'TITR'  ('CHAINE'  'Mach at t='  0.0);
       
 'FINSI' ;

*************************************************************************
*************************************************************************
**************** FIN INITIAL CONDITIONS *********************************
*************************************************************************
*************************************************************************
 
*************************************************************************
*************************************************************************
************** COMPUTATION OF THE SOLUTION ******************************
*************************************************************************
*************************************************************************

 RV = 'TABLE' ;
 RV . 'FREQI' = 1 ;
 RV . 'MODEL' = MDOMINT ;
*
**** Conservative variables / primitive variables
*
*
 RV . 'LISTCONS' = 'MOTS' MOTRN MOTGNX MOTGNY MOTRET ;
 RV . 'LISTPRIM' = 'MOTS' MOTRN MOTVNX MOTVNY MOTPN  ;
*
 RV . 'RN0'  = RN0 ;
 RV . 'GN0'  = GN0 ;
 RV . 'RET0' = RET0 ;
*
**** Gas property/gravity
*
 RV . 'PGAS' = 'TABLE' ;
 RV . 'PGAS' . 'GAMN'   = GAMN ;
 RV . 'PGAS' . 'MU'     =  0.0D0 ;
 RV . 'PGAS' . 'R'      =  1.0D0 ;
 RV . 'PGAS' . 'LAMBDA' =  0.0D0 ;
 RV . 'GRAVITY' = (GRAVITE '*' 0.0) ;
*
* Table for BC (injection part)
*
 RV . 'PROLIM' = 'TABLE' ;
 RV . 'PROLIM' . 'N' = 2 ;
 RV . 'PROLIM' . 'CLN' = 'TABLE' ;
 RV . 'PROLIM' . 'CLN' . 1 = 'MOTS' INSU ;
 RV . 'PROLIM' . 'CLN' . 2 = 'MOTS' OUTP ;
 RV . 'PROLIM' . 'MODELN' = 'TABLE' ;
 RV . 'PROLIM' . 'MODELN' . 1 = MLIGG ;
 RV . 'PROLIM' . 'MODELN' . 2 = MLIGD ;
 RV . 'PROLIM' . 'CHPOLN' = 'TABLE' ;
 RV . 'PROLIM' . 'CHPOLN' . 1 = CHPINL ;
 RV . 'PROLIM' . 'CHPOLN' . 2 = CHPOUT ;
*
* Table for BC 
*
* RVX . 'DIFTIMP'         : boundary condition on temperature
* RVX . 'MDIFCT'          : mesh in which we impose the temperature
*                           arising from the convective BC
* RVX . 'DIFGTIMP'        : boundary condition on gradient of temperature
* RVX . 'DIFVIMP'         : boundary condition on speed
* RVX . 'MDIFCV'          : mesh in which we impose the velocity
*                           arising from the convective BC
* RVX . 'DIFGVIMP'        : boundary condition on gradient of speed
* RVX . 'DIFTAUI'         : boundary condition on constraint tensor
* RVX . 'DIFQIMP'         : boundary condition on heat flux
* 
 CHPVID MATVID = 'KOPS' 'MATRIK' ;
 RV . 'DIFTIMP'  = CHPVID ;
 RV . 'DIFGTIMP' = 'MANUEL' 'CHPO' (TCDOM . 'CENTRE') 2 'P1DX' 0.0
   'P1DY' 0.0 ;
 RV . 'DIFQIMP'  = 'MANUEL' 'CHPO' (TCDOM . 'CENTRE') 2 'UX' 0.0
   'UY' 0.0 ;
 RV . 'MDIFCT'   =  ('DOMA' MLIGG 'CENTRE') 'ET'
                    ('DOMA' MLIGD 'CENTRE') ;
 RV . 'DIFVIMP'  = CHPVID ;
 RV . 'DIFGVIMP' = 'MANUEL' 'CHPO' (TCDOM . 'CENTRE') 4 'P1DX' 0.0
   'P1DY' 0.0  'P2DX' 0.0  'P2DY' 0.0 ;
 RV . 'DIFTAUI'  = 'MANUEL' 'CHPO' (TCDOM . 'CENTRE') 3 'TXX' 0.0
   'TXY' 0.0  'TYY' 0.0 ;
 RV . 'MDIFCV'   =  ('DOMA' MLIGG 'CENTRE') 'ET'
                    ('DOMA' MLIGD 'CENTRE') ;
*
**** Numerical parameters
*
*
* Variable to compute L2 error
*
 RV . 'LISTERR' = 'MOTS' MOTGNX MOTGNY  ;
 RV . 'LISTRHO' = 'MOTS' MOTRN  ;
* RV . 'LISTERR' = 'MOTS' MOTRET ;
*  
* Upwind scheme
*
* RV . 'METHOD' = 'RUSANOLM' ;
 RV . 'METHOD' = 'AUSMPLM' ;
* RV . 'METHOD' = 'HLLCLM' ;
*
* Low-Mach Cut off
*
 CO = UL '*' 10.D-2 ;
 RV . 'CUTOFF' = 'MANU' 'CHPO' ('DOMA' MDOMINT 'CENTRE') 1 'SCAL' CO
        'NATURE' 'DISCRET' ;
*
* Reconstruction/limiter
* Time accuracy (1 or 2)
* Iterations
* Final time
 RV . 'SPACEA' = 2 ;
* RV . 'LIMITER' = 'NOLIMITE' ;
 RV . 'LIMITER' = 'LIMITEUR' ;
 RV . 'TIMEA' = 2 ;
*
**** Physical time
*
 RV . 'T0' = 0 ;
* RV . 'CFL' = 20. ;
 RV . 'TFINAL' = L '/' (2 '*' UL) ;
* RV . 'CFL' = 20. ;
 RV . 'DTPS' =  0.5 '*' (DX '/' UL) ;  
 RV . 'NITER' = -1 ;
*
**** Dual time
* 
*    Safety factor for the dual time step
*    Max. Dual time iterations
*    Relative error 
*
 RV . 'DCFLERR' = 'PROG' 16. -16.  ;
 RV . 'DCFL' = 'PROG' 1.d6 1.d6  ;
 RV . 'NDTITER' = 100 ;
 RV . 'RELERR' = FAUX ;
 RV . 'EPSDT' = 1.0D-10 ;
*
**** Jacobi iterations
*
* RV . 'TYPEJAC' = 'PJACO' ;
 RV . 'TYPEJAC' = 'LJACOFB' ;
 RV . 'NJACLERR' = 'PROG' 16  -16 ;
 RV . 'NJACITER' = 'PROG' 15   15 ;
*
**** Parameters for PROCPT
*
 RV . 'PROCPT' = 'TABLE' ;
 RV . 'PROCPT' . 'RMAX' = 'PROG' ;
 RV . 'PROCPT' . 'RMIN' = 'PROG' ;
 RV . 'PROCPT' . 'RMED' = 'PROG' ;
 RV . 'PROCPT' . 'PMAX' = 'PROG' ;
 RV . 'PROCPT' . 'PMIN' = 'PROG' ;
 RV . 'PROCPT' . 'PMED' = 'PROG' ;
 RV . 'PROCPT' . 'TPS'  = 'PROG' ;
*
 PNSSM RV ;

*************************************************************************
*************************************************************************
************** FIN COMPUTATION OF THE SOLUTION **************************
*************************************************************************
*************************************************************************

*************************************************************************
*************************************************************************
************** POST TREATMENT *******************************************
*************************************************************************
*************************************************************************

*
 RN = RV . 'RESULTS' . 'RN' ;
 GN = RV . 'RESULTS' . 'GN' ;
 RET = RV . 'RESULTS' . 'RET' ;
 GAMN = RV . 'PGAS' . 'GAMN' ;

*
*** Convergence evolution inside of each iteration
*

 LISTITER =  RV . 'RESULTS' . 'LISTITER' ;
 LISTITDT =  RV . 'RESULTS' . 'LISTITDT' ;
 LISTLINF =  RV . 'RESULTS' . 'LISTLINF' ;
 
 'SI' GRAPH ;
    NITERE = 'DIME' LISTITER ;
    I1 = 1 ;
    AA = 'PROG' ;
    BB = 'PROG' ;
    CC = 'PROG' ;
    DD = 'PROG' ;
    'REPETER' BLITER NITERE ;
       I0 = I1 ;
       I1 = 'EXTRAIRE' LISTITER &BLITER ;
       'SI' (I1 'EGA' I0) ;
          AA = AA 'ET' ('PROG' ('EXTRAIRE' LISTITDT &BLITER)) ;
          BB = BB 'ET' ('PROG' ('EXTRAIRE' LISTLINF &BLITER)) ;
       'SINON' ;
          everr = 'EVOL' 'MANU' 'niter' AA 'Log(Linf)'
            (('LOG' (BB '+' ('PROG' ('DIME' BB) '*' 1.0D-20))) '/'
             ('LOG' 10.)) ;
          'DESSIN' everr 'TITRE' ('CHAINE' 'Convergence at iter '
          (I1 '-' 1)) 'NCLK' ;
          AA = 'PROG' ;
          BB = 'PROG' ;
          CC = 'PROG' ;
          DD = 'PROG' ;
       'FINSI' ;
    'FIN' BLITER ;
       everr = 'EVOL' 'MANU' 'niter' AA 'Log(Linf)'
            (('LOG' (BB '+' ('PROG' ('DIME' BB) '*' 1.0D-20))) '/'
             ('LOG' 10.)) ;
       'DESSIN' everr 'TITRE' ('CHAINE' 'Convergence at iter '
          (I1)) 'NCLK' ;
  'FINSI' ;
*
* 
**** The mesh
*

 'SI' GRAPH ; 
    'TRACER' DOMINT 'TITR' 'Maillage' ;
 'FINSI' ;

*
**** Initial conditions
*
 
 'SI' GRAPH ;

    RN0  = RV . 'RN0'  ;
    GN0  = RV . 'GN0'  ;
    RET0 = RV . 'RET0' ;
    VN PN0 = 'PRIM' 'PERFMONO'
       RN0 GN0 RET0 GAMN 'TRICHE'  ;

    CHM_RN  =  'KCHA'  MDOMINT  'CHAM'  RN0  ;
    CHM_VN  =  'KCHA'  MDOMINT  'CHAM'  VN  ;
    CHM_PN  =  'KCHA'  MDOMINT  'CHAM'  PN0  ;
    
    'TRAC' CHM_RN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'rho at t=' 0.0)   ;
    'TRAC' CHM_VN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'v at t= '  0.0)   ;
    'TRAC' CHM_PN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'p at t= '  0.0)   ;
    
 'FINSI' ;

*
**** The 2D graphics
*
  
  NOMVEL = 'MOTS' 'UX' 'UY' ;
  VN PN = 'PRIM' 'PERFMONO' RN GN RET GAMN 'TRICHE' ;
  CN2 = GAMN '*' (PN '/' RN) ;
  VN2 = 'PSCAL' VN VN NOMVEL NOMVEL ;
  MACHN2 = VN2 '/' CN2 ;
  MACHN = MACHN2 '**' 0.5 ;

  HTN = (GAMN '/' (GAMN '-' 1.0)) '*' (PN '/' RN) ;
  ECIN = 0.5 '*' ('PSCAL' VN VN NOMVEL NOMVEL) ;
  HTN = HTN '+' ECIN ;

  SN = PN '/' (RN '**' 1.4) ;
  
  TPS = RV . 'RESULTS' . 'TPS' ;
  'SI' ('EGA' ('TYPE' TPS) 'CHPOINT') ;
      TPS = 'MINIMUM' TPS ;
  'FINSI' ;
  
 'SI' GRAPH ;
 
    CHM_RN  =  'KCHA'  MDOMINT  'CHAM'  RN  ;
    CHM_VN  =  'KCHA'  MDOMINT  'CHAM'  VN  ;
    CHM_PN  =  'KCHA'  MDOMINT  'CHAM'  PN  ;
    CHM_MN  =  'KCHA'  MDOMINT  'CHAM'  MACHN  ;
    CHM_HTN =  'KCHA'  MDOMINT  'CHAM'  HTN  ;
    CHM_SN  =  'KCHA'  MDOMINT  'CHAM'  SN  ;
    
    'TRAC' CHM_RN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'rho at t=' TPS)   ;
    'TRAC' CHM_VN  MDOMINT  ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'v at t= '  TPS)   ;
    'TRAC' CHM_PN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'p at t= '  TPS)   ;
    'TRAC' CHM_MN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'Mach at t= '  TPS)   ;
    'TRAC' CHM_HTN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'ht at t= '  TPS ' hl =' HTL) ;
    'TRAC' CHM_SN  MDOMINT ('CONTOUR' DOMINT)
       'TITR' ('CHAINE' 'sn at t= '  TPS ' hl =' SL) ;

    VECN = 'VECTEUR' VN (1. '/' RAF) 'UX' 'UY' 'JAUNE' ;
    'TRACER' DOMINT VECN ('CONTOUR' DOMINT) 'TITR' 
       ('CHAINE' 'v at t= '  TPS)   ;
       
    'OPTION' 'ISOV' 'LIGN' ;
    RNV = 'ELNO' TDOMINT ('KCHT' TDOMINT 'SCAL' 'CENTRE' RN) ;
    'TRACER' DOMINT RNV ('CONTOUR' DOMINT) 15 'TITRE' 'ro';
    PNV = 'ELNO' TDOMINT ('KCHT' TDOMINT 'SCAL' 'CENTRE' PN) ;
    'TRACER' DOMINT PNV ('CONTOUR' DOMINT) 15 'TITRE' 'p' ;
       
 'FINSI' ;

*
**** Evolution objects
*
*
* Position of the contact
*

 TYPELIM = RV . 'LIMITER' ;

 POS = TPS '*' UL ;
 LISTPOS = 'PROG' (POS '-' (DX '/' 2)) (POS '+' (DX '/' 2))  ;

 TITOLO = 'CHAINE' 'Nbel = ' ('NBEL' DOMINT) ', OT = '
 (RV . 'TIMEA')  ', ' RV . 'METHOD' ;
 'SI' VRAI ;
    TITOLO = 'CHAINE' TITOLO ', OE = 2, ' TYPELIM ;
 'SINON' ;
    TITOLO = 'CHAINE' TITOLO ', OE = 1 ' ;
 'FINSI' ;
 
 'OPTION' 'ELEM' QUA4 ;

 AA = 'POIN' ('COORDONNEE' 1 (TDOMINT . 'CENTRE')) 'MINI' ;
 DCEN = AA 'ET' ('DIFF' (TDOMINT . 'CENTRE') AA) ;
 'ORDONNER' DCEN ;
 LIGEVOL = 'QUELCONQUE' DCEN 'SEG2' ;

 LISTX = 'EXTRAIRE' ('EVOL' 'CHPO' ('COORDONNEE' 1 LIGEVOL) 'SCAL'
   LIGEVOL)  'ORDO' ;

 RNEX = (ROL * (('COORDONNEE' 1 (TDOMINT . 'CENTRE')) 'MASQUE'
    'INFERIEUR' POS)) '+'
    (ROR * (('COORDONNEE' 1 (TDOMINT . 'CENTRE')) 'MASQUE'
    'SUPERIEUR' POS)) ;
 'SI' GRAPH ;
    EVR =  'EVOL' 'CHPO' RN 'SCAL' LIGEVOL ;
    LISTR = 'EXTRAIRE' EVR 'ORDO' ;
    EVR = 'EVOL' 'MANU' 'x' LISTX 'Density' LISTR ;
    EVPOS = 'EVOL'  'ROUG' 'MANU' 'x' LISTPOS ' ' ('PROG'
       ('MINI' LISTR) ('MAXIMUM' LISTR)) ;
    EVREX =  'EVOL' 'CHPO' RNEX 'SCAL' LIGEVOL ;
    LISTR = 'EXTRAIRE' EVREX 'ORDO' ;
    EVREX = 'EVOL' 'VERT' 'MANU' 'x' LISTX 'Density' LISTR ;
    'DESSIN' (EVR 'ET' EVPOS 'ET' EVREX) 'MIMA' 'TITRE' TITOLO 'GRILL'
       'YBOR' 0.0 1.6  ;
 
    EVP =  'EVOL' 'CHPO' PN 'SCAL' LIGEVOL ;
    LISTP = 'EXTRAIRE' EVP 'ORDO' ;
    EVP = 'EVOL' 'MANU' 'x' LISTX 'Pressure' LISTP ;
    EVPOS = 'EVOL'  'ROUG' 'MANU' 'x' LISTPOS ' ' ('PROG'
       ('MINI' LISTP) ('MAXIMUM' LISTP)) ;
    'DESSIN' (EVP 'ET' EVPOS) 'MIMA' 'TITRE' TITOLO 'GRILL' ;
 
    EVH =  'EVOL' 'CHPO' HTN 'SCAL' LIGEVOL ;
    LISTH = 'EXTRAIRE' EVH 'ORDO' ;
    EVH = 'EVOL' 'MANU' 'x' LISTX 'Total enthalpie' LISTH ;
    EVPOS = 'EVOL'  'ROUG' 'MANU' 'x' LISTPOS ' ' ('PROG'
       ('MINI' LISTH) ('MAXIMUM' LISTH)) ;
    'DESSIN' (EVH 'ET' EVPOS) 'MIMA' 'TITRE'
       ('CHAINE' TITOLO ', hl =' HTL) 'GRILL' ;
 
    EVS =  'EVOL' 'CHPO' SN 'SCAL' LIGEVOL ;
    LISTS = 'EXTRAIRE' EVS 'ORDO' ;
    EVS = 'EVOL' 'MANU' 'x' LISTX 'Entropie' LISTS ;
    EVPOS = 'EVOL'  'ROUG' 'MANU' 'x' LISTPOS ' ' ('PROG'
       ('MINI' LISTS) ('MAXIMUM' LISTS)) ;
    'DESSIN' (EVS 'ET' EVPOS) 'MIMA' 'TITRE'
       ('CHAINE' TITOLO ', sl =' SL) 'GRILL' ;
       
 'FINSI' ;
 
*
**** Test de convergence
*
 AA = 'EXTRAIRE' LISTLINF ('DIME' LISTLINF) ;
 'SI'  (AA > 1.0D-8) ;
    'ERRE' 'Probleme en KONV' ;
 'FINSI' ;

 ERRO = 'ABS' (RN '-' RNEX) ;
 ERRO = 'EVOL' 'CHPO' ERRO LIGEVOL ;
 ERRO = 'PRIM' ERRO ;
 ERRO = 'EXTRAIRE' ERRO 'ORDO' ;
 ERRO = 'EXTRAIRE' ERRO ('DIME' ERRO) ;
 'SI' (ERRO > 1.0D-1) ;
    'ERRE' 'Probleme en KONV' ;
 'FINSI' ;

 'FIN' ;
 

 

© Cast3M 2003 - All rights reserved.
Disclaimer