* 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 ; numop = idim ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ; * discg = 'LINE' ; methgau = 'GAU7' ; * A . 'VAR' . 1 . 'DISC' = 'LINE' ; * Manière simple * B = COPTAB A ; * '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 ; '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) ; * * Matrice du problème * mlapn = LAP1 ; * * Conditions aux limites * 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 * * difexa = '-' solex tsol ; 'SI' graph ; 'TRACER' tsol mt 'TITRE' ('CHAINE' 'Solution approchee') ; 'TRACER' difexa mt 'TITRE' ('CHAINE' 'Solution exacte - solution approchee') ; 'FINSI' ; '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 - Tous droits réservés.
Mentions légales