Download nlin_burger.dgibi

Back to the list

* fichier :  nlin_burger.dgibi
*************************************************************************
*
* NOM         : nlin_burger.dgibi
*
* DESCRIPTION : We compute the 2D Burger problem.
*               Scalar numerical viscosity is added.
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Alberto BECCANTINI (CEA/DEN/DM2S/SFME/LTMF)
*               mél : beccantini@cea.fr
*************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
*************************************************************************
*************************************************************************
*************************************************************************
******* PERSONAL PROCEDURES *********************************************
*************************************************************************
*************************************************************************
*
*BEGINPROCEDUR matmas
*
*************************************************************************
*
* NOM         : MATMAS
*
* DESCRIPTION : We compute 
*
*               (Np , Nd )
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Alberto BECCANTINI (CEA/DEN/DM2S/SFME/LTMF)
*               mél : beccantini@cea.fr
*************************************************************************
* 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' MATMAS ;
*
'ARGUMENT'  _mt*'MAILLAGE'    ;
'ARGUMENT'  nomp*'MOT     '  ;
'ARGUMENT'  nomd*'MOT     '  ;
'ARGUMENT'  discp*'MOT     '  ;
'ARGUMENT'  discd*'MOT     ' ;
*
*  Arguments
*  _mt   = MAILLAGE, quaf mesh
*  nomp  = MOT, name of the primal variable
*  nomd  = MOT, name of the dual variable
*  discp = MOT, name of the discretization of the primal variable
*  discd = MOT, name of the discretization of the dual variable
*
idim   = 'VALEUR' 'DIME' ;
*
*   Matrix A for the operator NLIN
*
numop  = 1 ;
numder = idim ;
numvar = 1 ;
* The variable involved in A is the primal variable T
numdat = 0 ;
numcof = 0 ;
*
discg = 'LINE' ;
* Geometrical discretisation
methgau = 'GAU7' ;
* Gauss points involved
*
A = ININLIN numop numvar numdat numcof numder ;   
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' nomp ;
A . 'VAR' . 1 . 'DISC'   = discp ;
*
*   Matrix B for the operator NLIN
*
B = ININLIN numop numvar 0 0 numder ;
* For B the coef no coefficients are involved
* but 1
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' nomd ;
B . 'VAR' . 1 . 'DISC'   = discd ;
*
A . 1 . 1 . 0 = 'LECT' ;
B . 1 . 1 . 0 = 'LECT'  ;
*
mat = 'NLIN' discg _mt A B methgau ;
'RESPRO' mat ;
'FINPROC' ;
*
*ENDPROCEDUR matmas
*BEGINPROCEDUR matkv
*
*************************************************************************
*
* NOM         : MATKV
*
* DESCRIPTION : We compute the matrix
*
*               ((cx \dep{u_x}{x} '+' cy \dep{u_x}{y}), Nvx)
*               ((cx \dep{u_y}{x} '+' cy \dep{u_y}{y}), Nvy)
*
*               where Nv = shape function for (u_x,u_y)^T
*
*               Names of primal variables = names of the dual variables
*                = 'UX' 'UY'
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Alberto BECCANTINI (CEA/DEN/DM2S/SFME/LTMF)
*               mél : beccantini@cea.fr
*************************************************************************
* 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' MATKV ;
'ARGUMENT'   _mt*'MAILLAGE' ;
'ARGUMENT' discv*'MOT     ' ;
'ARGUMENT' discc*'MOT     ' ;
'ARGUMENT'     cx*'CHPOINT' ;
'ARGUMENT'     cy*'CHPOINT' ;
*
*  _mt   = solid quaf mesh
*  discv = discretization type ux, uy
*  discc = discretization type for cx, cy
*  cx    = CHPOINT ('SCAL')
*  cy    = CHPOINT ('SCAL')
*
idim   = 'VALEUR' 'DIME' ;
*
numop  = 2 ;
numder = idim ;
numvar = 2 ;
* Two variables, ux, uy
numdat = 2 ;
* cx, cy
numcof = 2 ;
* Coef: cx  cy (two identity functions)
discg = 'LINE' ;
* Geometrical discretisation
methgau = 'GAU7' ;
* Gauss points involved
*
*   Matrix A for the operator NLIN
*
A = ININLIN numop numvar numdat numcof numder ;   
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'UX' ;
A . 'VAR' . 1 . 'DISC'   = discv  ;
A . 'VAR' . 2 .  'NOMDDL' = 'MOTS' 'UY' ;
A . 'VAR' . 2 .  'DISC'   = discv  ;
* cx
A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . 1 . 'DISC' =  discc ;
A . 'DAT' . 1 . 'VALEUR' = cx ;
A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
* cy 
A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . 2 . 'DISC' =  discc ;
A . 'DAT' . 2 . 'VALEUR' = cy ;
A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
* 
*   Matrix B for the operator NLIN
*
numvar = 2 ;
B = ININLIN numop numvar 0 0 numder ;
*
* For B, no coefficients are involved
* but 1
*
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'UX' ;
B . 'VAR' . 1 . 'DISC'   = discv ;
B . 'VAR' . 2 . 'NOMDDL' = 'MOTS' 'UY' ;
B . 'VAR' . 2 . 'DISC'   = discv ;
*
* Contribution
*
* cx \dep{ux}{x} Nvx
A . 1 . 1 . 1 = 'LECT' 1 ;
B . 1 . 1 . 0 = 'LECT'   ;
* cy \dep{ux}{y}  Nvx
A . 1 . 1 . 2 = 'LECT' 2 ;
* cx \dep{uy}{x} Nvy
A . 2 . 2 . 1 = 'LECT' 1 ;
B . 2 . 2 . 0 = 'LECT'   ;
* cy \dep{uy}{y}  Nd
A . 2 . 2 . 2 = 'LECT' 2 ;
*
mat = 'NLIN' discg _mt A B  methgau ;
'RESPRO' mat ;
'FINPROC' ;
*
*ENDPROCEDUR matkv
*BEGINPROCEDUR matlap
*
*************************************************************************
*
* NOM         : MATLAP
*
* DESCRIPTION : We compute the matrix arising from the computation of
*               the scalar product
*
*               ( -(coef \div( \alpha \grad T)) , Nd )
*
*               where Nd = test function for the dual variable.
*
*               -\int_{\Omega} coef \div( \alpha \grad T) Nd dV =
*                  -\int_{\delta \Omega}
*                     coef \alpha (\grad T \cdot n) Nd dS '+'
*                  +\int_{\Omega}
*                     coef \alpha (\grad T \cdot \grad Nd) dV '+'
*                  +\int_{\Omega}
*                     Nd \alpha (\grad T \cdot \grad coef) dV
*
*               The matrix is issue from the 2nd and 3rd contribution
*               (volume integrals).
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Alberto BECCANTINI (CEA/DEN/DM2S/SFME/LTMF)
*               mél : beccantini@cea.fr
*************************************************************************
* 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' MATLAP ;
*
'ARGUMENT'  _mt*'MAILLAGE'    ;
'ARGUMENT'   nomt*'MOT     '  ;
'ARGUMENT'  disct*'MOT     '  ;
'ARGUMENT'   nomd*'MOT     '  ;
'ARGUMENT'  discd*'MOT     '  ;
'ARGUMENT'  discal*'MOT     ' ;
'ARGUMENT'  alpha*'CHPOINT'   ;
'ARGUMENT'  discof*'MOT     ' ;
'ARGUMENT'  coef*'CHPOINT'    ;
*
*    Arguments
*
*    _mt    = surface QUAF mesh
*    nomt   = name of the primal variable T
*    disct  = discretization type of T
*    nomd   = name of the dual variable
*    discd  = discretization type of the dual variable
*    discal = discretization type of alpha
*    discof = discretization type of coef
*    alpha  = CHPOINT ('SCAL')
*    coef   = CHPOINT ('SCAL')
*
idim   = 'VALEUR' 'DIME' ;
*
*    Four contributions
*
*    (coef alpha \dep{T}{x} \dep{Nd}{x}
*   + coef alpha \dep{T}{y} \dep{Nd}{y}
*   + Nd alpha \dep{T}{x} \dep{coef}{x}
*   + Nd alpha \dep{T}{y} \dep{coef}{y})
*
*   Matrix A for the operator NLIN
*
numop  = 4 ;
numder = idim ;
numvar = 1 ;
* The variable involved in A is the primal variable T
numdat = 2 ;
* Two data: alpha, coef
numcof = 4 ;
* Four functions: f(alpha) = alpha
*                 f(coef)  = coef
*                 f(coef) = \dep{coef}{x}
*                 f(coef) = \dep{coef}{y}
discg = 'LINE' ;
* Geometrical discretisation
methgau = 'GAU7' ;
* Gauss points involved
*
A = ININLIN numop numvar numdat numcof numder ;   
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' nomt ;
A . 'VAR' . 1 . 'DISC'   = disct ;
* alpha
A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . 1 . 'DISC' = discal ;
A . 'DAT' . 1 . 'VALEUR' = alpha ;
* coef
A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . 2 . 'DISC' = discof ;
A . 'DAT' . 2 . 'VALEUR' = coef ;
* Function alpha
A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
* Function coef
A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
* Function \dep{coef}{x}
A . 'COF' . 3 . 'COMPOR' = 'D/DX1' ;
A . 'COF' . 3 . 'LDAT' = 'LECT' 2  ;
* Function \dep{coef}{y}
A . 'COF' . 4 . 'COMPOR' = 'D/DX2' ;
A . 'COF' . 4 . 'LDAT' = 'LECT' 2 ;
*
*   Matrix B for the operator NLIN
*
B = ININLIN numop numvar 0 0 numder ;
* For B the coef no coefficients are involved
* but 1
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' nomd ;
B . 'VAR' . 1 . 'DISC'   = discd ;
*
* Contribution
*
* coef alpha \dep{T}{x} \dep{Nd}{x}
A . 1 . 1 . 1 = 'LECT' 1 2 ;
B . 1 . 1 . 1 = 'LECT'  ;
* coef alpha \dep{T}{y} \dep{Nd}{y}
A . 2 . 1 . 2 = 'LECT' 1 2 ;
B . 2 . 1 . 2 = 'LECT'  ;
* Nd alpha \dep{T}{x} \dep{coef}{x}
A . 3 . 1 . 1 = 'LECT' 1 3 ;
B . 3 . 1 . 0 = 'LECT'  ;
* Nd alpha \dep{T}{y} \dep{coef}{y}
A . 4 . 1 . 2 = 'LECT' 1 4 ;
B . 4 . 1 . 0 = 'LECT'  ;
mlapn = 'NLIN' discg _mt A B  methgau ;
'RESPRO' mlapn ;
'FINPROC' ;
*ENDPROCEDUR matlap
*BEGINPROCEDUR resoup
*************************************************************************
**** Resolution of a linear system **************************************
*************************************************************************
*
'DEBPROC' RESOUP ;
   'ARGUMENT' LOGTPS*'LOGIQUE ' ;
   'ARGUMENT' mat*'MATRIK  ' ;
   'ARGUMENT' matpre/'MATRIK  ' ;
   'ARGUMENT' smb*'CHPOINT ' ;
   'ARGUMENT' ccl*'CHPOINT ' ;
   'ARGUMENT' res*'FLOTTANT' ;
   'ARGUMENT' nit*'ENTIER'   ;
   'ARGUMENT' pre/'ENTIER'   ;
   'ARGUMENT' gggtre/'TABLE   ' ;
   'ARGUMENT' gggtcv/'LOGIQUE ' ;
   'ARGUMENT' typslv/'MOT     ' ;
*
*  Det. tt s.t.
*
*  mat . tt = smb
*  tt(boundary) = ccl
*
*  
*  mat = matrix to "inverse"
*  matpre = matrix for which preconditioner has been computed (optional)
*  smb = right hand side
*  ccl = imposed boundary conditions
*  res = rvk . 'RESID'
*  nit = max number of linear iteration (for an iterative solver)
*  pre = type of preconditioning matrix (for an iterative solver)
*  gggtre = table of resolution to store 'XINIT'
*  gggtcv = graphic of the history for the iterative solver
*           (optional FAUX)
*  typslv = 'DIRECT'/'ITER' (optional, ITER)
*
   'SI' ('NON' ('EXISTE' typslv)) ;
      tslv = VRAI ;
   'SINON' ;      
      'SI' ('EGA' typslv 'DIRECT') ;
         tslv = FAUX ;
      'SINON' ;
         'SI' ('EGA' typslv 'ITER') ;
            tslv = VRAI ;
         'SINON' ;
            'ERREUR' 'Solveur DIRECT ou ITERatif ?' ;
         'FINSI' ;
      'FINSI' ;
   'FINSI' ;
    gggniv = 1 ;
   'SI' ('NON' ('EXISTE' pre)) ;
      pre = 5 ;
   'FINSI' ;
   'SI' ('OU' ('NON' ('EXISTE' gggtcv)) ('NON' tslv)) ;
      gggtcv = FAUX ;
   'FINSI' ;      
   rv = 'EQEX' ;
   rvk = rv . 'METHINV' ;
   'SI' ('EXISTE' matpre) ;
      rvk . 'MATASS' = matpre ;
      rvk . 'MAPREC' = matpre ;
   'SINON' ;      
      rvk . 'MATASS' = mat ;
      rvk . 'MAPREC' = mat ;
   'FINSI' ;      
   'SI' tslv ;
      rvk . 'TYPINV' = 3 ;
   'SINON' ;      
      rvk . 'TYPINV' = 1 ;
   'FINSI' ;      
   rvk . 'SCALING' = 1 ;
*  Scaling factor   
   rvk . 'OUBMAT' = 1 ;
*  oubmat = 1 -> We eliminate the elementary matrix
*  'ILUTPPIV' -> 1 We always search for a new pivot
*             -> 0 We do not search for a new pivot
   rvk . 'ILUTPPIV' = 0.1D0 ;
*   rvk . 'ILUTPPIV' = 0.01D0 ;
*   rvk . 'ILUTPPIV' = 0.00001D0 ;
*   rvk . 'ILUTPPIV' = 0.D0 ;
   rvk . 'IMPINV' = gggniv ;
   rvk . 'TYRENU' = 'SLOA' ;
   rvk . 'PCMLAG' = 'APR2' ;
   rvk . 'NITMAX' = nit ;
   rvk . 'RESID' = res ;
   rvk . 'PRECOND' = pre ;
   rvk . 'BCGSBTOL' = 1.D-200 ;
   rvk . 'ILUTLFIL' = 1.5 ;
*
   'SI' ('EXISTE' gggtre) ;
      'SI' ('EXISTE' gggtre 'XINIT') ;
         rvk . 'XINIT' = gggtre . 'XINIT' ;
      'FINSI' ;
   'FINSI' ;      
   'TEMPS' 'ZERO' ;
   tt = 'KRES' mat 'TYPI' rvk 'SMBR' smb 'CLIM' ccl ;
   tcpu = 'TEMPS' 'NOEC' ;
   tcpus = '/' ('FLOTTANT' tcpu) 100.D0 ;
   'SI' LOGTPS ;
      'MESSAGE' ('CHAINE' 'tcpu (s) = ' tcpus) ;
   'FINSI' ;
   'SI' ('ET' gggtcv ('EXISTE' rvk 'CONVINV')) ;
      lcvg = rvk . 'CONVINV' ;
      nit = 'DIME' lcvg ;
      'SI' ('>' nit 1) ;
         lit = 'PROG' 1.D0 PAS 1.D0 NPAS ('-' nit 1) ;
         evit = 'EVOL' 'MANU' 'iter' lit 'log residu'
          ('/' ('LOG' lcvg) ('LOG' 10.D0)) ;
         'DESSIN' evit 'TITR' titglob ;
      'FINSI' ;         
   'FINSI' ;
   'SI' ('EXISTE' gggtre) ;
      gggtre . 'XINIT' = tt ;
   'FINSI' ;      
   'RESPRO' tt ;
*
* End of procedure file RESOU
*
'FINPROC' ;
*
*************************************************************************
**** End of the Resolution of a linear system ***************************
*************************************************************************
*ENDPROCEDUR resoup
*************************************************************************
*************************************************************************
******* END OF PERSONAL PROCEDURES **************************************
*************************************************************************
*************************************************************************
**
*
 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ;
 GRAPH = FAUX ;
*
**** Mesh
*
*
* A4         A3
*
*
*
*
* A1         A2
*
 L  = 1.0 ;
 A1 = 0.0 0.0 ;
 A2 = L   0.0 ;
 A3 = L   L ;
 A4 = 0.0 L ;
*
 DX = L '/' 20 ;
 DY = DX ;
*
 A1A2 = A1 'DROIT' A2 'DINI' DX 'DFIN' DX ;
 A2A3 = A2 'DROIT' A3 'DINI' DY 'DFIN' DY ;
 A3A4 = A3 'DROIT' A4 'DINI' DX 'DFIN' DX ;
 A4A1 = A4 'DROIT' A1 'DINI' DY 'DFIN' DY ;
*
 DOM1 = 'SURFACE' (A1A2 'ET' A2A3 'ET' A3A4 'ET' A4A1) 'PLAN' ;
 PDOM1 = 'CHANGER' DOM1 'POI1' ;
 'SI' GRAPH ;
    'TRACER' DOM1 'TITRE' 'Mesh' ;
 'FINSI' ;
 QDOM1 = 'CHANGER' DOM1 'QUAF' ;
 QA4A1 = 'CHANGER' A4A1 'QUAF' ;
 QA1A2 = 'CHANGER' A1A2 'QUAF' ;
 QA2A3 = 'CHANGER' A2A3 'QUAF' ;
 QA3A4 = 'CHANGER' A3A4 'QUAF' ;
 'ELIMINATION' (QA4A1 'ET' QDOM1) 1.0D-4 ;
 'ELIMINATION' (QA1A2 'ET' QDOM1) 1.0D-4 ;
 'ELIMINATION' (QA2A3 'ET' QDOM1) 1.0D-4 ;
 'ELIMINATION' (QA3A4 'ET' QDOM1) 1.0D-4 ;
*
* Boundary conditions
*
 LIMDIR1  = 'DIFF' ('CHANGER' 'POI1' A4A1) ('MANUEL' 'POI1' A1) ;
 LIMDIR2  = 'DIFF' ('CHANGER' 'POI1' A1A2) ('MANUEL' 'POI1' A1) ;
 LIMDIR3  = ('MANUEL' 'POI1' A1) ;
 UN1 = 'MANUEL' 'CHPO' LIMDIR1 2 'UX' 1.0 'UY' 0.0 ;
 UN2 = 'MANUEL' 'CHPO' LIMDIR2 2 'UX' 0.0 'UY' 1.0 ;
 UN3 = 'MANUEL' 'CHPO' LIMDIR3 2 'UX' 1.0 'UY' 1.0 ;
 UNLIM = UN1 '+' UN2 '+' UN3 ;
*
* IC
*
 UN = ('MANUEL' 'CHPO' DOM1 2 'UX' 0.0 'UY' 0.0) '+' UN1 '+'
       UN2 '+' UN3 ;
*
 VECN = 'VECTEUR' UN ;
 'SI' GRAPH ;
    'TRACER' DOM1 VECN ;
 'FINSI' ;
*
* Time step
*
 DT = 1.0D16 '*' DX '/' 1.0 ;
*
 NU = 'MANUEL' 'CHPO' DOM1 1 'SCAL' (0.25 '*' DX) ;
 CHONE = 'MANUEL' 'CHPO' DOM1 1 'SCAL' 1.0 ;
*
* Matrices
*
 MMAS1 = MATMAS QDOM1 'UX' 'UX' 'LINE' 'LINE' ;
 MMAS2 = MATMAS QDOM1 'UY' 'UY' 'LINE' 'LINE' ;
 MMAS = MMAS1 'ET' MMAS2 ;
 MKON = MATKV QDOM1 'LINE' 'LINE' ('EXCO' 'UX' UN) ('EXCO' 'UY' UN) ;
 MLAP1 = MATLAP  QDOM1 'UX' 'LINE' 'UX' 'LINE' 'LINE' NU 'LINE' CHONE ;
 MLAP2 = MATLAP  QDOM1 'UY' 'LINE' 'UY' 'LINE' 'LINE' NU 'LINE' CHONE ;
 MLAP = MLAP1 'ET' MLAP2 ;
*
*
* Total matrix
*
 MMASSDT = MMAS '/' DT ;
 mconst = MMASSDT 'ET' MLAP ;
 mtot = mconst 'ET' MKON ;
 mtotm = 'KOPS' 'RIMA' mtot  ;
 smbv pipi = 'KOPS' 'MATRIK' ;
*
* Resolution
*
* TAB1=TABLE;
* TAB1.'TITRE'= TABLE ;
* TAB1.1='TIRR ';
* TAB1.'TITRE' . 1  = 'Exact' ;
* TAB1.2='MARQ CROI';
* TAB1.'TITRE' . 2  = 'Numerical' ;
*
 TPS = 0.0 ;
 UN = 'COPIER' UN ;
 UNM = 'COPIER' UN ;
 LIT = 'PROG' ;
 LER = 'PROG' ;
 ERRO = 1.0D10 ;
*
 TABRESUN = 'TABLE' ;
 TABRESUN . 'XINIT' = UN ;
 NITERU = 100 ;
 PREC = 5 ;
 METINV = MOT 'DIRECT' ;
* 
 'REPETER' BL1 100 ;
    TPS = TPS '+' DT ;
    qv  = MMASSDT '*' UN ;
    UN  = RESOUP FAUX mtotm mtotm qv UNLIM 1.0D-60 NITERU
                PREC TABRESUN METINV ;
    'SI' (ERRO < 1.0D-10) ;
       'QUITTER' BL1 ;
    'FINSI' ;
    'SI' (((&BL1 '/' 5) '*' 5) 'EGA' &BL1) ;
        ERRO = 'MAXIMUM' (UN '-' UNM) 'ABS' ;
        'MESSAGE' ('CHAINE' 'ITER = ' &BL1 ',  TPS = ' TPS  ',  ERRO = '
           ERRO) ;
        UNM = 'COPIER' UN ;
        LIT = LIT 'ET' ('PROG' &BL1) ;
        L10 = 'LOG' 10. ;
        LER = LER 'ET' ('PROG' (('LOG' (ERRO '+' 1.0D-20)) '/' L10))  ;
        EVER = 'EVOL' 'MANU' 'it' LIT 'Log(Err)' LER ;
        'SI' GRAPH ;
           'DESSIN' EVER 'TITR' 'Convergence history' 'NCLK' ;
        'FINSI' ;
    'FINSI' ;
*
****** We update the convective matrix
*
    MKON = MATKV QDOM1 'LINE' 'LINE' ('EXCO' 'UX' UN) ('EXCO' 'UY' UN) ;
    MTOT = MCONST 'ET' MKON ;
    mtotm = 'KOPS' 'RIMA' mtot  ;
 'FIN' BL1 ;
*
 UX = 'EXCO' UN 'UX' ;
 UY = 'EXCO' UN 'UY' ;
*
 VECN = 'VECTEUR' UN ;
 'SI' GRAPH ;
    'TRACER' UX DOM1 VECN 'TITR' 'ux' ;  
    'TRACER' UY DOM1 VECN 'TITR' 'uy' ;
 'FINSI' ;
*
* Test
*
 NITER = &BL1 ;
*
 'SI' (NITER > 40) ;
     'MESSAGE' 'Convergence not reached' ;
     'ERREUR' 5 ;
 'FINSI' ;
*
 XX YY = 'COORDONNEE' DOM1 ;
 DOMH = (YY '-' XX) 'POIN' 'SUPERIEUR' 0.1 ;
 erro = 'MAXIMUM' (('EXCO' 'UX' ('REDU' UN DOMH)) '-' 1.0) 'ABS' ;
 'SI' (erro > 1.0D-2) ;
     'ERREUR' 5 ;
 'FINSI' ;
 erro = 'MAXIMUM' (('EXCO' 'UY' ('REDU' UN DOMH))) 'ABS' ;
 'SI' (erro > 1.0D-2) ;
     'ERREUR' 5 ;
 'FINSI' ;
*
 'FIN' ;
 

© Cast3M 2003 - All rights reserved.
Disclaimer