Download nlin_lapncer.dgibi

Back to the list

* fichier : nlin_lapncer.dgibi
'OPTION' 'ECHO' 0 ;
*BEGINPROCEDUR gmass
************************************************************************
* NOM         : GMASS
* DESCRIPTION : Une matrice de masse
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v2, 14/03/2006, mise à jour NLIN évolué
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GMASS ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'     _smt/'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomt*'MOT     ' ;
'ARGUMENT'   disct*'MOT     ' ;
'ARGUMENT'    nomq*'MOT     ' ;
'ARGUMENT'   discq*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;      
   numop  = 1 ;
   numder = idim ;
   mmt = 'MOTS' nomt ;
   mmq = 'MOTS' nomq ;
   numvar = 1 ;
   numdat = 1 ;
   numcof = 1 ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = mmt ;
   A . 'VAR' . 1 . 'DISC'   = disct ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;   
   A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . 1 . 'DISC'   = discc ;
   A . 'DAT' . 1 . 'VALEUR' = coef ;
   A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
*
   A . 1 . 1 . 0 = 'LECT' 1 ;
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;      
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;      
   B = ININLIN numop numvar numdat numcof numder ;   
   B . 'VAR' . 1 . 'NOMDDL' = mmq ;
   B . 'VAR' . 1 . 'DISC'   = discq ;
   'SI' ('EXISTE' chpod) ;
      B . 'VAR' . 1 . 'VALEUR'   = chpod ;
   'FINSI' ;   
*
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = gdisc ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'FINSI' ;
   'SI' iaxi ;      
      B . 1 . 1 . 0 = 'LECT' 1 ;
   'SINON' ;      
      B . 1 . 1 . 0 = 'LECT' ;
   'FINSI' ;      
*
   'SI' ('EXISTE' _smt) ;
       mgmass = 'NLIN' gdisc _mt _smt A B methgau ;
   'SINON' ;       
       mgmass = 'NLIN' gdisc _mt A B methgau ;
   'FINSI' ;       
*
'RESPRO' mgmass ;
'FINPROC' ;
*
* End of procedure file GMASS
*
*ENDPROCEDUR gmass
*BEGINPROCEDUR glapn
************************************************************************
* NOM         : GLAPN
* DESCRIPTION : Un laplacien scalaire 
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v2, 14/03/2006, mise à jour NLIN évolué
* VERSION    : v1, 13/05/2004, version initiale
* HISTORIQUE : v1, 13/05/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GLAPN ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'    nomt*'MOT     ' ;
'ARGUMENT'   disct*'MOT     ' ;
'ARGUMENT'    nomq*'MOT     ' ;
'ARGUMENT'   discq*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
   'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
'ARGUMENT' chpop/'CHPOINT' ;
'ARGUMENT' chpod/'CHPOINT' ;
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' vdim 1) ;
      idim = 1 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
   'FINSI' ;      
* Test bête...
   'SI' ('EGA' ('TYPE' coef) 'CHPOINT ') ;
      mincoef = 'MINIMUM' coef ;
   'SINON' ;
      mincoef = coef ;
   'FINSI' ;            
   'SI' ('<' mincoef 0.D0) ;
      'ERREUR' 'Le coef (une viscosité) doit etre positive' ;
   'FINSI' ;      
*
   'SI' iaxi ;
      lcoef = 'MOTS' 'NURR' 'NUZZ' ;
   'SINON' ;
      'SI' ('EGA' idim 2) ;
         lcoef = 'MOTS' 'NUXX' 'NUYY' ;
      'SINON' ;
         lcoef = 'MOTS' 'NUXX' 'NUYY' 'NUZZ' ;
      'FINSI' ;
   'FINSI' ;      
*
   ltens = FAUX ;
   'SI' ('EGA' ('TYPE' coef) 'CHPOINT') ;
      ncomp = 'DIME' ('EXTRAIRE' coef 'COMP') ;
      'SI' ('EGA' ncomp idim) ;
         ltens = VRAI ;
      'FINSI' ;
   'FINSI' ;
*
   tcoef = 'TABLE' ;
   'SI' ltens ;
      'REPETER' iidim idim ;
         tcoef . &iidim = 'EXCO' ('EXTRAIRE' lcoef &iidim) coef ;
      'FIN' iidim ;
   'SINON' ;               
      'REPETER' iidim idim ;
         tcoef . &iidim = coef ;
      'FIN' iidim ;
   'FINSI' ;
*      
   numop  = idim ;
   numder = idim ;
   mmt = 'MOTS' nomt ;
   mmq = 'MOTS' nomq ;
   numvar = 1 ;
   numdat = idim ;
   numcof = idim ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = mmt ;
   A . 'VAR' . 1 . 'DISC'   = disct ;
   'SI' ('EXISTE' chpop) ;
      A . 'VAR' . 1 . 'VALEUR'   = chpop ;
   'FINSI' ;   
   'REPETER' iidim idim ;
      A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . &iidim . 'DISC'   = discc ;
      A . 'DAT' . &iidim . 'VALEUR' = tcoef . &iidim ;
      A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
      A . 'COF' . &iidim . 'LDAT'   = 'LECT' &iidim ;
   'FIN' iidim ;
*
   'REPETER' iidim idim ;
      A . &iidim . 1 . &iidim = 'LECT' &iidim ;
   'FIN' iidim ;      
*
   'SI' iaxi ;
      numdat = 1 ;
      numcof = 1 ;
   'SINON' ;      
      numdat = 0 ;
      numcof = 0 ;
   'FINSI' ;      
*
   B = ININLIN numop numvar numdat numcof numder ;   
   B . 'VAR' . 1 . 'NOMDDL' = mmq ;
   B . 'VAR' . 1 . 'DISC'   = discq ;
   'SI' ('EXISTE' chpod) ;
      B . 'VAR' . 1 . 'VALEUR'   = chpod ;
   'FINSI' ;   
   'SI' iaxi ;
      B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      B . 'DAT' . 1 . 'DISC'   = gdisc ;
      B . 'DAT' . 1 . 'VALEUR' = dprmt ;
      B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
      B . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'FINSI' ;
*
   'REPETER' iidim idim ;
      'SI' iaxi ;      
         B . &iidim . 1 . &iidim = 'LECT' 1 ;
      'SINON' ;      
         B . &iidim . 1 . &iidim = 'LECT' ;
      'FINSI' ;      
   'FIN' iidim ;      
*
   mglapn = 'NLIN' gdisc _mt A B methgau ;
* Integration par parties
   mglapn = '*' mglapn -1.D0 ;
*
'RESPRO' mglapn ;
'FINPROC' ;
*
* End of procedure file GLAPN
*
*ENDPROCEDUR glapn
*BEGINPROCEDUR ggrad
************************************************************************
* NOM         : GGRAD
* DESCRIPTION : 
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 08/03/2006, version initiale
* HISTORIQUE : v1, 08/03/2006, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GGRAD ;
'ARGUMENT'     _mt*'MAILLAGE' ;
'ARGUMENT'   gdisc*'MOT     ' ;
'ARGUMENT'   discp*'MOT     ' ;
'ARGUMENT'   discv*'MOT     ' ;
'ARGUMENT' coef/'FLOTTANT' ;
   'SI' ('NON' ('EXISTE' coef)) ;
      'ARGUMENT' coef2/'CHPOINT ' ;
      'SI' ('NON' ('EXISTE' coef2)) ;
         'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
      'SINON' ;
         coef = coef2 ;
         'ARGUMENT' discc*'MOT     ' ;
      'FINSI' ;                  
   'SINON' ;
      discc = 'CSTE' ;
   'FINSI' ;            
'ARGUMENT' methgau/'MOT     ' ;
   'SI' ('NON' ('EXISTE' methgau)) ;
      methgau = 'GAU7' ;
   'FINSI' ;      
*
   vdim = 'VALEUR' 'DIME' ;
   vmod = 'VALEUR' 'MODE' ;
   idim = 0 ;
   lpp = 'MOTS' 'LX'      ; ldp = 'MOTS' 'FLX' ;   
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
      lpv = 'MOTS' 'UX' 'UY' ; ldv = 'MOTS' 'FX' 'FY' ;
      idim = 2 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
      lpv = 'MOTS' 'UR' 'UZ' ; ldv = 'MOTS' 'FR' 'FZ' ;
      idim = 2 ;
      iaxi = VRAI ;
   'FINSI' ;
   'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
      lpv = 'MOTS' 'UX' 'UY' 'UZ' ; ldv = 'MOTS' 'FX' 'FY' 'FZ' ;
      idim = 3 ;
      iaxi = FAUX ;
   'FINSI' ;
   'SI' ('EGA' idim 0) ;
      'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
   'FINSI' ;
   'SI' iaxi ;
      dp = ('*' PI 2.D0) ;
      rmt = 'COORDONNEE' 1 _mt ;
   'FINSI' ;      
*   
   numop  = 3 ;
   numder = idim ;
   numvar = 1 ;
   'SI' iaxi ;
      numdat = 3 ;
      numcof = 3 ;
   'SINON' ;      
      numdat = 1 ;
      numcof = 1 ;
   'FINSI' ;      
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = lpp ;
   A . 'VAR' . 1 . 'DISC'   = discp ;
   A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
   A . 'DAT' . 1 . 'DISC'   = discc ;
   A . 'DAT' . 1 . 'VALEUR' = coef ;
   A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
   A . 'COF' . 1 . 'LDAT'   = 'LECT' 1 ;
   'SI' iaxi ;
      A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 2 . 'DISC'   = 'CSTE' ;
      A . 'DAT' . 2 . 'VALEUR' = dp ;
      A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 2 . 'LDAT'   = 'LECT' 2 ;
      A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
      A . 'DAT' . 3 . 'DISC'   = gdisc ;
      A . 'DAT' . 3 . 'VALEUR' = rmt ;
      A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
      A . 'COF' . 3 . 'LDAT'   = 'LECT' 3 ;
   'FINSI' ;
*
*   'LISTE' iaxi ; 'LISTE' idim ;
   'SI' iaxi ;
      'REPETER' iidim idim ;
         A . &iidim . 1 . &iidim = 'LECT' 1 2 3 ;
      'FIN' iidim ;
   'SINON' ;
      'REPETER' iidim idim ;
         A . &iidim . 1 . &iidim = 'LECT' 1 ;
      'FIN' iidim ;
   'FINSI' ;         
*
   numvar = idim ;
   numdat = 0 ;
   numcof = 0 ;
   B = ININLIN numop numvar numdat numcof numder ;   
   'REPETER' iidim idim ;
      B . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
      B . 'VAR' . &iidim . 'DISC'   = discv ;
   'FIN' iidim ;
*   
   'REPETER' iidim idim ;
      B . &iidim . &iidim . 0 = 'LECT' ;
   'FIN' iidim ;      
*
   mggrad = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mggrad ;
'FINPROC' ;
*
* End of procedure file GGRAD
*
*ENDPROCEDUR ggrad
*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 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
'OPTION' 'ECHO' 1 ;
************************************************************************
* NOM         : NLIN_LAPNCER
* DESCRIPTION : Vérification de NLIN : on résout un laplacien sur un
*               bout de cercle de rayon R en 2D. La solution exacte
*               est une fonction linéaire de l'abscisse curviligne
*               s = R \theta.
*               On obtient cette solution exacte par le calcul.
*               On vérifie également les ordres de convergence sur la
*               longueur du bout de cercle et sur le champ de vecteur
*               tangent à ce bout de cercle.
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 25/10/2006, version initiale
* HISTORIQUE : v1, 25/10/2006, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
interact = FAUX ;
graph    = FAUX ;
*interact = VRAI ;
*graph    = VRAI ;
'OPTION' 'DIME' 2 ;
'SI' ('NON' interact) ;
  'OPTION' 'TRAC' 'PS' 'ECHO' 0 ;
'SINON' ;
  'OPTION' 'TRAC' 'X' 'ECHO' 1 ;
'FINSI' ;  
*
* Paramètres
*
ldisc = 'MOTS' 'LINE' 'QUAI' ;
tordlon = 'TABLE' ;
tordvec = 'TABLE' ;
tordsol = 'TABLE' ;
ldens = 'PROG' 2.D-1 1.D-1 5.D-2 ;
rayo  = '**' 2. 0.5D0 ;
tabev = 'TABLE' ;
tabt  = 'TABLE' ;
itab = 0 ;
ok = VRAI ;
*
* Boucle sur les discrétisations 
*
'REPETER' iidisc ('DIME' ldisc) ;
   idisc = &iidisc ;
   disc  = 'EXTRAIRE' ldisc idisc ;
   tordlon . disc = 'TABLE' ;
   tordvec . disc = 'TABLE' ;
   discg = disc ;
   disct = disc ;
   'SI' ('EGA' disc 'LINE') ;
      'OPTION' 'ELEM' 'QUA4' ;
   'SINON' ;      
      'OPTION' 'ELEM' 'QUA8' ;
   'FINSI' ;      
   lerrlon = 'PROG' ;
   lerrvec = 'PROG' ;
   lerrsol = 'PROG' ;
   'REPETER' iidens ('DIME' ldens) ;
      idens = &iidens ;
      vdens = 'EXTRAIRE' ldens idens ;
      'DENS' vdens ;
      tit = 'CHAINE' 'Discretisation :' disc '  Densité = ' vdens ;
      'SAUTER' 1 'LIGNE' ;
      'MESSAGE' tit ;
* Maillage
      p0 = 'POIN' 0. 0. ;
      pA = POINTCYL rayo 0. ;
      pB = POINTCYL rayo 45. ;
      mt = 'CERCLE' pA p0 pB ;
      _mt = 'CHANGER' mt 'QUAF' ;
* 1 : calcul de la longueur du segment
      ch1 = 'MANUEL' 'CHPO' mt 1 'T' 1. ;
      gmas = GMASS _mt discg 'T' disct 'Q' disct 1. ;
      lonana = '*' ('/' PI 4.D0) rayo ;
      lon = xtmx ch1 gmas ;
      'MESSAGE' ('CHAINE' 'Longueur calculee =' lon) ;
      'MESSAGE' ('CHAINE' 'Longueur attendue =' lonana) ;
      errlon = 'ABS' ('-' lon lonana) ;
      'MESSAGE' ('CHAINE' 'Erreur sur la longueur =' errlon) ;
      lerrlon = 'ET' lerrlon ('PROG' errlon) ;
* 2 : calcul du vecteur tangent
      xmt ymt = 'COORDONNEE' mt ;
      ang = 'ATG' ymt xmt ;
      cvecana = '+' ('NOMC' 'UX' ('*' ('SIN' ang) -1.D0))
                    ('NOMC' 'UY' ('COS' ang)) ;
* 2.1 : calcul de l'abscisse curviligne
      mat = GLAPN _mt discg 'T' disct 'Q' disct 1. ;
      mblo = 'BLOQUE' 'T' (pA 'ET' pB) ;
      cblo = '+' ('MANUEL' 'CHPO'  pA 1 'T' 0.)
                 ('MANUEL' 'CHPO'  pB 1 'T' lon) ;
      fblo = 'DEPIMPOSE' mblo cblo ;   
*
      mtot = mat 'ET' mblo ;
      ftot = fblo ;
      solu = 'RESOUD' mtot ftot ;
      evsol = 'EVOL' 'CHPO' solu 'T' mt ;
*      'DESSIN' evsol ;           
      valt = 'EXCO' 'T' solu 'T' ;
* 2.2 : vecteur tangent unitaire      
      mux = GMASS _mt discg 'UX' disct 'FX' disct 1. ;
      muy = GMASS _mt discg 'UY' disct 'FY' disct 1. ;
      mtot = mux 'ET' muy ;
*
      msmb = GGRAD _mt discg disct disct 1. ;
      fsmb = '*' msmb ('NOMC' 'LX' valt) ;
*
      vvt = 'RESOUD' mtot fsmb ;
      'SI' graph ;
         vvec  = 'VECTEUR' vvt 'DEPL' 'JAUN' ;
         vvec2 = 'VECTEUR' cvecana 'DEPL' 'ROUG' ;
         'TRACER' ('ET' vvec vvec2) mt ;
      'FINSI' ;         
      cvec = 'EXCO' ('MOTS' 'UX' 'UY') vvt ;
* 2.3 : calcul de l'erreur      
      errvec = '**' (xtmx ('-' cvec cvecana) mtot) 0.5D0 ;
      'MESSAGE' ('CHAINE' 'Erreur sur le vecteur tangent =' errvec) ;
      lerrvec = 'ET' lerrvec ('PROG' errvec) ;
* 3 : calcul d'une solution analytique (quasi-pareil que 2.1)
*     
      xmt ymt = 'COORDONNEE' mt ;
      solana = 'NOMC' 'T' ('/' ('ATG' ymt xmt) 45.D0) ;
      mat = GLAPN _mt discg 'T' disct 'Q' disct 1. ;
      mblo = 'BLOQUE' 'T' (pA 'ET' pB) ;
      cblo = '+' ('MANUEL' 'CHPO'  pA 1 'T' 0.)
                 ('MANUEL' 'CHPO'  pB 1 'T' 1.) ;
      fblo = 'DEPIMPOSE' mblo cblo ;   
*
      mtot = mat 'ET' mblo ;
      ftot = fblo ;
      solu = 'RESOUD' mtot ftot ;
      sol  = 'EXCO' 'T' solu 'T' ;
      matm = GMASS _mt discg 'T' disct 'Q' disct 1. ;
      errsol = '**' (xtmx ('-' sol solana) matm) 0.5D0 ;
      'MESSAGE' ('CHAINE' 'Erreur sur la sol. analytique =' errsol) ;
* Vérification qu'on obtient la solution exacte
      test = ('<' errsol 1.D-10) ;
      ok = ok 'ET' test ;
      'SI' ('NON' test) ;
         'MESSAGE' ('CHAINE' 'On aurait du avoir errsol=' errsol
              ' < 1.D-10') ;
      'FINSI' ;
      lerrsol = 'ET' lerrsol ('PROG' errsol) ;
   'FIN' iidens ;
* Calcul des ordres
   lh lerrlon lerrvec lerrsol = LOG10 ldens lerrlon lerrvec lerrsol ;
   evlon = 'EVOL' 'MANU' lh lerrlon ;
   cpl dummy = @POMI evlon 1 'IDEM' ;
   ord = cpl . 1 ;
   tordlon . disc = ord ;
   itab = '+' itab 1 ;
   tabev . itab = evlon ;
   tabt  . itab = 'CHAINE' 'lon;' disc ';ord=' (formar ord 1) ;
*
   evvec = 'EVOL' 'MANU' lh lerrvec ;
   cpl dummy = @POMI evvec 1 'IDEM' ;
   ord = cpl . 1 ;
   tordvec . disc = ord ;
   itab = '+' itab 1 ;
   tabev . itab = evvec ;
   tabt  . itab = 'CHAINE' 'vec;' disc ';ord=' (formar ord 1) ;
*
* On ne calcule pas l'ordre pour la solution car on a la solution exacte.
*
*   evsol = 'EVOL' 'MANU' lh lerrsol ;
*   cpl dummy = @POMI evsol 1 'IDEM' ;
*   ord = cpl . 1 ;
*   itab = '+' itab 1 ;
*   tabev . itab = evsol ;
*   tabt  . itab = 'CHAINE' 'sol;id=' idisc ';ord=' (formar ord 1) ;
'FIN' iidisc ;
* Tracés
'SI' graph ;
   evt = @STBL tabev ;
   tit = 'CHAINE' 'Ordre de convergence sur : longueur, vect. tangent' ;
   tix = 'CHAINE' 'Log10 h' ;   
   tiy = 'CHAINE' 'Log10 err' ;
   DESSEVOL evt tabt tit tix tiy ;
'FINSI' ;                
* Vérification des ordres
valvoul = 1.5 ;
valobt  = tordlon . 'LINE' ;
test = valobt '>' valvoul ;
ok = ok 'ET' test ;
'MESSAGE' ('CHAINE' 'Ordre de convergence sur la longueur'
                    '(discretisation lineaire)=' valobt) ;
'SI' ('NON' test) ;
   'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
'FINSI' ;
*
valvoul = 0.5 ;
valobt  = tordvec . 'LINE' ;
test = valobt '>' valvoul ;
ok = ok 'ET' test ;
'MESSAGE' ('CHAINE' 'Ordre de convergence sur le vecteur tangent '
                    '(discretisation lineaire)=' valobt) ;
'SI' ('NON' test) ;
   'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
'FINSI' ;
*
valvoul = 2.5 ;
valobt  = tordlon . 'QUAI' ;
test = valobt '>' valvoul ;
ok = ok 'ET' test ;
'MESSAGE' ('CHAINE' 'Ordre de convergence sur la longueur'
                    '(discretisation quadratique)=' valobt) ;
'SI' ('NON' test) ;
   'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
'FINSI' ;
*
valvoul = 1.5 ;
valobt  = tordvec . 'QUAI' ;
test = valobt '>' valvoul ;
ok = ok 'ET' test ;
'MESSAGE' ('CHAINE' 'Ordre de convergence sur le vecteur tangent '
                    '(discretisation quadratique)=' valobt) ;
'SI' ('NON' test) ;
   'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
'FINSI' ;
*
'SI' ('NON' ok) ;
   'MESSAGE' ('CHAINE' 'Il y a eu des erreurs') ;
   'ERREUR' 5 ;
'SINON' ;
   'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
'FINSI' ;
*
'SI' interact ;
   'OPTION' 'DONN' 5 ;
'FINSI' ;      
*
* End of dgibi file NLIN_LAPNCER
*
'FIN' ;
 

© Cast3M 2003 - All rights reserved.
Disclaimer