Download nlin_lapn.dgibi

Back to the list

* fichier :  nlin_lapn.dgibi
*BEGINPROCEDUR coptab
************************************************************************
* NOM         : COPTAB
* DESCRIPTION : copie la table arguments pour NLIN
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 11/05/2004, version initiale
* HISTORIQUE : v1, 11/05/2004, création
* HISTORIQUE : v2, 12/12/2005, version pour nlin final
* 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' COPTAB A*'TABLE   ' ;
   nop  = A . 'NUMOP' ;
   nvar = A . 'NUMVAR' ;
   ndat = A . 'NUMDAT' ;
   ncof = A . 'NUMCOF' ;
   nder = A . 'NUMDER' ;
*   
   B = 'TABLE' ;
   B. 'NUMOP'  = nop  ;
   B. 'NUMVAR' = nvar ;
   B. 'NUMDAT' = ndat ;
   B. 'NUMCOF' = ncof ;
   B. 'NUMDER' = nder ;
*
   B . 'VAR' = 'TABLE' ;
   'REPETER' ivar nvar ;
      B . 'VAR' . &ivar = 'TABLE' ;
      'SI' ('EXISTE' (A . 'VAR' . &ivar) 'NOMDDL') ;
         B . 'VAR' . &ivar . 'NOMDDL' =                          
            A . 'VAR' . &ivar . 'NOMDDL' ;
      'FINSI' ;
      'SI' ('EXISTE' (A . 'VAR' . &ivar) 'DISC') ;
         B . 'VAR' . &ivar . 'DISC' =                          
            A . 'VAR' . &ivar . 'DISC' ;
      'FINSI' ;
      'SI' ('EXISTE' (A . 'VAR' . &ivar) 'VALEUR') ;
         B . 'VAR' . &ivar . 'VALEUR' =                          
            A . 'VAR' . &ivar . 'VALEUR' ;
      'FINSI' ;
   'FIN' ivar ;
*
   B . 'DAT' = 'TABLE' ;
   'SI' ('>' ndat 0) ;
      'REPETER' idat ndat ;
         B . 'DAT' . &idat = 'TABLE' ;
         'SI' ('EXISTE' (A . 'DAT' . &idat) 'NOMDDL') ;
            B . 'DAT' . &idat . 'NOMDDL' =                          
               A . 'DAT' . &idat . 'NOMDDL' ;
         'FINSI' ;
         'SI' ('EXISTE' (A . 'DAT' . &idat) 'DISC') ;
            B . 'DAT' . &idat . 'DISC' =                          
               A . 'DAT' . &idat . 'DISC' ;
         'FINSI' ;
         'SI' ('EXISTE' (A . 'DAT' . &idat) 'VALEUR') ;
            B . 'DAT' . &idat . 'VALEUR' =                          
               A . 'DAT' . &idat . 'VALEUR' ;
         'FINSI' ;
      'FIN' idat ;
   'FINSI' ;      
*
   B . 'COF' = 'TABLE' ;
   'SI' ('>' ncof 0) ;
      'REPETER' icof ncof ;
         B . 'COF' . &icof = 'TABLE' ;
         'SI' ('EXISTE' (A . 'COF' . &icof) 'COMPOR') ;
            B . 'COF' . &icof . 'COMPOR' =                          
               A . 'COF' . &icof . 'COMPOR' ;
         'FINSI' ;
         'SI' ('EXISTE' (A . 'COF' . &icof) 'LDAT') ;
            B . 'COF' . &icof . 'LDAT' =                          
               A . 'COF' . &icof . 'LDAT' ;
         'FINSI' ;
*         'SI' ('EXISTE' (A . 'COF' . &icof) 'FACMUL') ;
*            B . 'COF' . &icof . 'FACMUL' =                          
*               A . 'COF' . &icof . 'FACMUL' ;
*         'FINSI' ;
      'FIN' icof ;
   'FINSI' ;      
*
   'REPETER' iop nop ;
      B . &iop = 'TABLE' ;
      'REPETER' ivar nvar ;
         B . &iop . &ivar = 'TABLE' ;
         'REPETER' ider ('+' nder 1) ;
*            B . &iop . &ivar . ('-' &ider 1) = 'TABLE' ;
*            'SI' ('EXISTE'
*                 (A . &iop . &ivar . ('-' &ider 1)) 
*                  'COMPOR') ;
*                  B . &iop . &ivar . ('-' &ider 1) . 'LCOF' =
*                     A . &iop . &ivar . ('-' &ider 1) . 'LCOF' ;
*            'FINSI' ;
            'SI' ('EXISTE'
                 (A . &iop . &ivar)  ('-' &ider 1)) ; 
                  B . &iop . &ivar . ('-' &ider 1) =
                     A . &iop . &ivar . ('-' &ider 1) ;
            'FINSI' ;
         'FIN' ider ;
      'FIN' ivar ;
   'FIN' iop ;
*   
'FINPROC' B ;   
*
* End of procedure file COPTAB
*
*ENDPROCEDUR coptab
*
* Plusieurs facons de construire la matrice du laplacien pour tester
* nlin 
*
'DEBPROC' LAP1 ;
idim   = 'VALEUR' 'DIME' ;
numop  = idim ;
numder = idim ;
numvar = 1 ;
numdat = 0 ;
numcof = 0 ;
*
discg = 'LINE' ;
methgau = 'GAU7' ;
*
   A = ININLIN numop numvar numdat numcof numder ;   
   A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'T' ;
   A . 'VAR' . 1 . 'DISC'   = 'LINE' ;
* Manière simple
   A . 1 . 1 . 1  = 'LECT' ;
   A . 2 . 1 . 2  = 'LECT' ;
*
   B = COPTAB A ;
   B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'Q' ;
*
mlapn = 'NLIN' discg _mt A B  methgau ;
'RESPRO' mlapn ;
'FINPROC' ;

************************************************************************
* NOM         : NLIN_LAPN
* DESCRIPTION : Test tout simple sur un laplacien
*
*               Domaine  : carré [0,1]x[0,1]
*               Equation : \Delta T = 0           
*               CLim     : restriction au bord de la solution exacte              
*               Solution : T_exact = 2^0.5 x + \pi y
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 28/09/2005, version initiale
* HISTORIQUE : v1, 28/09/2005, création
* HISTORIQUE : v2, 12/12/2005, nouvelle version à l'aide de nlin_final
* 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 ;
'OPTION' 'DIME' 2 'ELEM' 'TRI3' ;
'SI' graph ;
   'SI' interact ;
      'OPTION' 'TRAC' 'X' ;
   'SINON' ;
      'OPTION' 'TRAC' 'PSC' ;
   'FINSI' ;
'FINSI' ;         
*
* Maillage
*
nx = 5 ;
ny = 5 ;
pA = 0. 0. ;   pB = 1. 0. ;            
pC = 1. 1. ;   pD = 0. 1. ;
l1 = 'DROIT' nx pA pB ;
l2 = 'DROIT' ny pB pC ;
l3 = 'DROIT' nx pC pD ;
l4 = 'DROIT' ny pD pA ;
*mt = 'DALLER' l1 l2 l3 l4 ;
mt = 'SURFACE' (l1 'ET' l2 'ET' l3 'ET' l4) ;
cmt = l1 'ET' l2 'ET' l3 'ET' l4 ;
*
_mt = 'CHANGER' mt 'QUAF' ;
_cmt = 'CHANGER' cmt 'QUAF' ;
'SI' graph ;
   'TRACER' mt 'NOEUD' 'TITRE' ('CHAINE' 'Maillage') ;
'FINSI' ;   
*
* Solution exacte du problème
*
xmt ymt = 'COORDONNEE'  mt ;
solex = '+' ('*' xmt ('**' 2.D0 0.5D0))
            ('*' ymt PI) ;
solex = 'NOMC' 'T' solex 'NATURE' 'DISCRET' ;
*
* Matrice du problème
*
mlapn = LAP1 ;

*
* Conditions aux limites
*
clim  = 'REDU' solex cmt ;
mbloc = 'BLOQUE' 'T' cmt ;
fbloc = 'DEPIMPOSE' mbloc clim ;
'SI' graph ;
   'TRACER' clim   cmt 'TITRE' ('CHAINE' 'Conditions aux limites') ;
'FINSI' ;   
*
* Résoud le problème
*
mtot = mlapn 'ET' mbloc ;
ftot = fbloc ;
*
solu = 'RESOUD' mtot ftot ;
*
*
*  Post-traitement et calcul de l'erreur
*
*
tsol   = 'EXCO' 'T' solu 'T' ;
difexa = '-' solex tsol ;
'SI' graph ;
   'TRACER' tsol   mt 'TITRE' ('CHAINE' 'Solution approchee') ;
   'TRACER' difexa mt 'TITRE'
             ('CHAINE' 'Solution exacte - solution approchee') ;
'FINSI' ;   
nerr = '/' ('**' ('XTX' difexa) 0.5D0) ('NBNO' mt) ;
'OPTION' 'ECHO' 0 ;
'SAUTER' 3 'LIGNE' ;
'MESSAGE' ('CHAINE' 'Norme de lerreur : ' nerr) ;
'SAUTER' 3 'LIGNE' ;
'OPTION' 'ECHO' 1 ;
*
'SI' (nerr '>' 1.D-10) ;
   'ERREUR' 5 ;
'FINSI' ;
*
'SI' interact ;
   'OPTION' 'DONN' 5 ;
'FINSI' ;   
*
* End of dgibi file NLIN_LAPN
*
'FIN' ;

 

© Cast3M 2003 - All rights reserved.
Disclaimer