* fichier : nlin_decent2d.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 gugrad
************************************************************************
* NOM : GUGRAD
* DESCRIPTION : U . grad
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* 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' GUGRAD ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT ' ;
'ARGUMENT' nomp*'MOT ' ;
'ARGUMENT' discp*'MOT ' ;
'ARGUMENT' nomd*'MOT ' ;
'ARGUMENT' discd*'MOT ' ;
'ARGUMENT' vtot*'CHPOINT ' ;
'ARGUMENT' vcomp*'LISTMOTS' ;
'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' ;
'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 ;
* Passé en argument désormais
* vcomp = 'MOTS' 'UX' 'UY' ;
'FINSI' ;
'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
idim = 2 ;
iaxi = VRAI ;
* vcomp = 'MOTS' 'UR' 'UZ' ;
'FINSI' ;
'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
idim = 3 ;
iaxi = FAUX ;
* vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
'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 ;
mmp = 'MOTS' nomp ;
mmd = 'MOTS' nomd ;
numvar = 1 ;
numdat = idim ;
numcof = idim ;
*
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = mmp ;
A . 'VAR' . 1 . 'DISC' = discp ;
'SI' ('EXISTE' chpop) ;
A . 'VAR' . 1 . 'VALEUR' = chpop ;
'FINSI' ;
'REPETER' iidim idim ;
nomco = 'EXTRAIRE' vcomp &iidim ;
A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' nomco ;
A . 'DAT' . &iidim . 'DISC' = discv ;
* A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco vtot nomco ;
*
A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
A . 'COF' . &iidim . 'LDAT' = 'LECT' &iidim ;
'FIN' iidim ;
*
'REPETER' iidim idim ;
A . 1 . 1 . &iidim = 'LECT' &iidim ;
'FIN' iidim ;
*
numvar = 1 ;
'SI' iaxi ;
numdat = 2 ;
numcof = 2 ;
'SINON' ;
numdat = 1 ;
numcof = 1 ;
'FINSI' ;
*
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = mmd ;
B . 'VAR' . 1 . 'DISC' = discd ;
'SI' ('EXISTE' chpod) ;
B . 'VAR' . 1 . 'VALEUR' = chpod ;
'FINSI' ;
*
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discc ;
B . 'DAT' . 1 . 'VALEUR' = coef ;
B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
*
'SI' iaxi ;
B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 2 . 'DISC' = gdisc ;
B . 'DAT' . 2 . 'VALEUR' = dprmt ;
B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
'FINSI' ;
*
'SI' iaxi ;
B . 1 . 1 . 0 = 'LECT' 1 2 ;
'SINON' ;
B . 1 . 1 . 0 = 'LECT' 1 ;
'FINSI' ;
*
mgugrad = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgugrad ;
'FINPROC' ;
*
* End of procedure file GUGRAD
*
*ENDPROCEDUR gugrad
*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 gdecent
************************************************************************
* NOM : GDECENT
* DESCRIPTION : Décentrement
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* 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' GDECENT ;
'ARGUMENT' imeth*'ENTIER' ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT ' ;
'ARGUMENT' nomp*'MOT ' ;
'ARGUMENT' discp*'MOT ' ;
'ARGUMENT' nomd*'MOT ' ;
'ARGUMENT' discd*'MOT ' ;
'ARGUMENT' vtot*'CHPOINT ' ;
'ARGUMENT' vcomp*'LISTMOTS' ;
'ARGUMENT' discv*'MOT ' ;
'ARGUMENT' rho*'FLOTTANT' ;
'ARGUMENT' nu*'FLOTTANT' ;
'ARGUMENT' Pec*'FLOTTANT' ;
'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 ;
* Passé en argument désormais
* vcomp = 'MOTS' 'UX' 'UY' ;
'FINSI' ;
'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
idim = 2 ;
iaxi = VRAI ;
* vcomp = 'MOTS' 'UR' 'UZ' ;
'FINSI' ;
'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
idim = 3 ;
iaxi = FAUX ;
* vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
'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' ;
*
mdumm = 'MOTS' 'DUMM' ;
numop = 1 ;
numder = idim ;
mmp = 'MOTS' nomp ;
mmd = 'MOTS' nomd ;
numvar = 1 ;
numdat = '+' idim 3 ;
numcof = idim ;
lisdat = 'LECT' 1 PAS 1 ('+' idim 3) ;
*
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = mmp ;
A . 'VAR' . 1 . 'DISC' = discp ;
'SI' ('EXISTE' chpop) ;
A . 'VAR' . 1 . 'VALEUR' = chpop ;
'FINSI' ;
idat = 0 ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = rho ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = nu ;
'REPETER' iidim idim ;
nomco = 'EXTRAIRE' vcomp &iidim ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
A . 'DAT' . idat . 'DISC' = discv ;
* A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
'FIN' iidim ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = Pec ;
*
icof = 0 ;
'REPETER' iidim idim ;
icof = '+' icof 1 ;
A . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
A . 'COF' . icof . 'LDAT' = lisdat ;
'FIN' iidim ;
*
'REPETER' iidim idim ;
A . 1 . 1 . &iidim = 'LECT' &iidim ;
'FIN' iidim ;
*
numvar = 1 ;
'SI' iaxi ;
numdat = '+' idim 4 ;
numcof = '+' idim 1 ;
'SINON' ;
numdat = '+' idim 3 ;
numcof = idim ;
'FINSI' ;
*
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = mmd ;
B . 'VAR' . 1 . 'DISC' = discd ;
'SI' ('EXISTE' chpod) ;
B . 'VAR' . 1 . 'VALEUR' = chpod ;
'FINSI' ;
idat = 0 ;
idat = '+' idat 1 ;
B . 'DAT' . idat . 'NOMDDL' = mdumm ;
B . 'DAT' . idat . 'DISC' = 'CSTE' ;
B . 'DAT' . idat . 'VALEUR' = rho ;
idat = '+' idat 1 ;
B . 'DAT' . idat . 'NOMDDL' = mdumm ;
B . 'DAT' . idat . 'DISC' = 'CSTE' ;
B . 'DAT' . idat . 'VALEUR' = nu ;
'REPETER' iidim idim ;
nomco = 'EXTRAIRE' vcomp &iidim ;
idat = '+' idat 1 ;
B . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
B . 'DAT' . idat . 'DISC' = discv ;
* A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
B . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
'FIN' iidim ;
idat = '+' idat 1 ;
B . 'DAT' . idat . 'NOMDDL' = mdumm ;
B . 'DAT' . idat . 'DISC' = 'CSTE' ;
B . 'DAT' . idat . 'VALEUR' = Pec ;
*
icof = 0 ;
'REPETER' iidim idim ;
icof = '+' icof 1 ;
B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
B . 'COF' . icof . 'LDAT' = lisdat ;
'FIN' iidim ;
*
'SI' iaxi ;
idat = '+' idat 1 ;
B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . idat . 'DISC' = gdisc ;
B . 'DAT' . idat . 'VALEUR' = dprmt ;
icof = '+' icof 1 ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' idat ;
'FINSI' ;
*
'SI' iaxi ;
'REPETER' iidim idim ;
B . 1 . 1 . &iidim = 'LECT' &iidim icof ;
'FIN' iidim ;
'SINON' ;
'REPETER' iidim idim ;
B . 1 . 1 . &iidim = 'LECT' &iidim ;
'FIN' iidim ;
'FINSI' ;
*
mgdecent = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgdecent ;
'FINPROC' ;
*
* End of procedure file GDECENT
*
*ENDPROCEDUR gdecent
*BEGINPROCEDUR gmustab
************************************************************************
* NOM : GMUSTAB
* DESCRIPTION : Décentrement
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* 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' GMUSTAB ;
'ARGUMENT' imeth*'ENTIER' ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT ' ;
'ARGUMENT' vtot*'CHPOINT ' ;
'ARGUMENT' vcomp*'LISTMOTS' ;
'ARGUMENT' discv*'MOT ' ;
'ARGUMENT' rho*'FLOTTANT' ;
'ARGUMENT' nu*'FLOTTANT' ;
'ARGUMENT' Pec*'FLOTTANT' ;
'ARGUMENT' methgau/'MOT ' ;
'SI' ('NON' ('EXISTE' methgau)) ;
methgau = 'GAU7' ;
'FINSI' ;
*
vdim = 'VALEUR' 'DIME' ;
*
mdumm = 'MOTS' 'DUMM' ;
numop = 1 ;
numder = vdim ;
numvar = 1 ;
numdat = '+' vdim 3 ;
numcof = 1 ;
lisdat = 'LECT' 1 PAS 1 ('+' vdim 3) ;
*
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = mdumm ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 1.D0 ;
idat = 0 ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = rho ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = nu ;
'REPETER' ivdim vdim ;
nomco = 'EXTRAIRE' vcomp &ivdim ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
A . 'DAT' . idat . 'DISC' = discv ;
* A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
'FIN' ivdim ;
idat = '+' idat 1 ;
A . 'DAT' . idat . 'NOMDDL' = mdumm ;
A . 'DAT' . idat . 'DISC' = 'CSTE' ;
A . 'DAT' . idat . 'VALEUR' = Pec ;
*
A . 'COF' . 1 . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth '0' ;
A . 'COF' . 1 . 'LDAT' = lisdat ;
*
A . 1 . 1 . 0 = 'LECT' 1 ;
*
numvar = 1 ;
numdat = 0 ;
numcof = 0 ;
*
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = mdumm ;
B . 'VAR' . 1 . 'DISC' = 'CSTE' ;
B . 'VAR' . 1 . 'VALEUR' = 1.D0 ;
*
B . 1 . 1 . 0 = 'LECT' ;
*
mgmustab = 'NLIN' gdisc _mt A B 'ERF1' methgau ;
*
'RESPRO' mgmustab ;
'FINPROC' ;
*
* End of procedure file GMUSTAB
*
*ENDPROCEDUR gmustab
*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
*BEGINPROCEDUR dessevol
************************************************************************
* NOM : DESSEVOL
* DESCRIPTION : Dessine des évolutions : choisit automatiquement
* les options, marqueurs, couleurs...
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 16/11/2004, version initiale
* HISTORIQUE : v1, 16/11/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' DESSEVOL ;
'ARGUMENT' evtot*'EVOLUTION' ;
'ARGUMENT' tabt*'TABLE' ;
'ARGUMENT' tit*'MOT' ;
'ARGUMENT' tix*'MOT' ;
'ARGUMENT' tiy*'MOT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
'ARGUMENT' nb/'ENTIER' ;
*
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = FAUX ;
'FINSI' ;
*
'SI' ('NON' ('EXISTE' nb)) ;
nb = 3 ;
'FINSI' ;
*
nt = 'DIME' tabt ;
nev = 'DIME' evtot ;
*
* Attention, dans evtot, il y a une évolution avec des noms de points ?
*
*'SI' ('NEG' nev nt) ;
* cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
* 'ERREUR' cherr ;
*'FINSI' ;
*
tev = 'TABLE' ;
tev . 'TITRE' = tabt ;
*
toto = 'TABLE' ;
*
lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
lmarq = 'MOTS' 'TRIB' 'TRIA' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI' ;
ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
*
'SI' ('EGA' nb 0) ;
ev2 = evtot ;
'SINON' ;
icou = 0 ;
'REPETER' iev nev ;
ii = &iev ;
evi = 'EXTRAIRE' evtot 'COUR' ii ;
'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
icou = '+' icou 1 ;
'FINSI' ;
* ii2 = '/' ('+' ii 1) 2 ;
* ci = EXMOMOD lcoul ii2 ;
* ci = EXMOMOD lcoul ii ;
ci = EXMOMOD lcoul icou ;
APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
'FIN' iev ;
ev2 = toto . 'EVOLUTION' ;
'FINSI' ;
*
'REPETER' iev nev ;
ii = &iev ;
mi = EXMOMOD lmarq ii ;
ti = EXMOMOD ltirr ii ;
'SI' ('>' nb 2) ;
tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ;
'FINSI' ;
'SI' ('>' nb 1) ;
tev . ii = 'CHAINE' 'MARQ ' mi ;
'FINSI' ;
'FIN' iev ;
*
'SI' lnclk ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'NCLK' ;
'SINON' ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev ;
'FINSI' ;
*
* End of procedure file DESSEVOL
*
'FINPROC' ;
*ENDPROCEDUR dessevol
*BEGINPROCEDUR append
************************************************************************
* NOM : APPEND
* DESCRIPTION : Rajoute :
* - un entier à un listentier
* - un réel à un listreel
* - un objet (liste, evolution, matrice ou chpoint)
* à un indice de table ('MOT' ou 'ENTIER')
* * si l'indice n'existe pas
* * 'ET' si l'indice existe
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 10/09/2004, version initiale
* HISTORIQUE : v1, 10/09/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' APPEND ;
'ARGUMENT' tab/'TABLE' ;
'SI' ('EXISTE' tab) ;
'ARGUMENT' itab/'MOT' ;
'SI' ('NON' ('EXISTE' itab)) ;
'ARGUMENT' itab*'ENTIER' ;
'FINSI' ;
lobj = FAUX ;
'SI' ('NON' lobj) ;
'ARGUMENT' lr/'LISTREEL' ;
'SI' ('EXISTE' lr) ;
obj = lr ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' le/'LISTENTI' ;
'SI' ('EXISTE' le) ;
obj = le ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' lev/'EVOLUTION' ;
'SI' ('EXISTE' lev) ;
obj = lev ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' lm/'MAILLAGE' ;
'SI' ('EXISTE' lm) ;
obj = lm ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' chpo/'CHPOINT' ;
'SI' ('EXISTE' chpo) ;
obj = chpo ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' rig/'RIGIDITE' ;
'SI' ('EXISTE' rig) ;
obj = rig ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
'ARGUMENT' matk/'MATRIK' ;
'SI' ('EXISTE' matk) ;
obj = matk ; lobj = VRAI ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' lobj) ;
cherr = 'CHAINE'
'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('EXISTE' tab itab) ;
'SI' ('EGA' ('TYPE' obj) 'CHPOINT') ;
tab . itab = '+' (tab . itab) obj ;
'SINON' ;
tab . itab = 'ET' (tab . itab) obj ;
'FINSI' ;
'SINON' ;
tab . itab = obj ;
'FINSI' ;
'RESPRO' tab ;
'FINSI' ;
'ARGUMENT' lenti/'LISTENTI' ;
'ARGUMENT' lreel/'LISTREEL' ;
'SI' ('EXISTE' lenti) ;
'ARGUMENT' enti*'ENTIER' ;
lenti = 'ET' lenti ('LECT' enti) ;
'RESPRO' lenti ;
'FINSI' ;
'SI' ('EXISTE' lreel) ;
'ARGUMENT' reel*'FLOTTANT' ;
lreel = 'ET' lreel ('PROG' reel) ;
'RESPRO' lreel ;
'FINSI' ;
*
* End of procedure file APPEND
*
'FINPROC' ;
*ENDPROCEDUR append
*BEGINPROCEDUR exmomod
************************************************************************
* NOM : EXMOMOD
* DESCRIPTION : Extraction d'un mot d'un listmots
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 23/06/2003, version initiale
* HISTORIQUE : v1, 23/06/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' EXMOMOD ;
'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
j = 'DIME' lm ;
k = '+' (MODULO ('-' i 1) j) 1 ;
lemot = 'EXTRAIRE' lm k ;
* Usage de l'opérateur text pour éviter que lemot
* ne soit interprété comme un opérateur
'RESPRO' 'TEXTE' lemot ;
*
* End of procedure file EXMOMOD
*
'FINPROC' ;
*ENDPROCEDUR exmomod
*BEGINPROCEDUR modulo
************************************************************************
* NOM : MODULO
* DESCRIPTION : Calcule un entier modulo un autre...
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 15/10/2002, version initiale
* HISTORIQUE : v1, 15/10/2002, 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' MODULO ;
'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
'SI' ('EGA' j 0) ;
'MESSAGE' 'Impossible de faire modulo 0' ;
'ERREUR' 5 ;
'SINON' ;
k=i '/' j ;
mod=i '-' ( k '*'j ) ;
'RESPRO' mod ;
'FINSI' ;
*
* End of procedure file MODULO
*
'FINPROC' ;
*ENDPROCEDUR modulo
*
'DEBPROC' SOLEX ;
'ARGUMENT' nu*'FLOTTANT' ;
'ARGUMENT' mesh*'MAILLAGE' ;
*
ct = '/' 1.D0 nu ;
deno = '-' 1. ('EXP' ct) ;
nume = 'EXP' ('*' ('COORDONNEE' 1 mesh) ct) ;
nume = '*' nume -1. ;
nume = '+' nume 1. ;
vfon = '*' nume ('/' 1. deno) ;
*
'RESPRO' vfon ;
'FINPROC' ;
*
'DEBPROC' SOLAPP ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gau*'MAILLAGE' ;
'ARGUMENT' dro*'MAILLAGE' ;
'ARGUMENT' disc*'MOT ' ;
'ARGUMENT' nu*'FLOTTANT' ;
'ARGUMENT' pec*'FLOTTANT' ;
'ARGUMENT' imeth*'ENTIER' ;
*
lux = 'MOTS' 'UX' 'UY' ; lval = 'PROG' 1. 0. ;
cvit = 'MANUEL' 'CHPO' _mt lux lval ;
rho = 1.D0 ;
m1 = GUGRAD _mt disc 'T' disc 'Q' disc cvit lux disc 1. 'GAU7' ;
m2 = GLAPN _mt disc 'T' disc 'Q' disc nu 'GAU7' ;
m2 = '*' m2 -1.D0 ;
'SI' ('EGA' imeth 0) ;
musmax = 0. ;
'SINON' ;
m3 = GDECENT imeth _mt disc 'T' disc 'Q' disc cvit lux disc
rho nu pec 'GAU7' ;
musmax = 'MAXIMUM' (GMUSTAB imeth
_mt disc cvit lux disc rho nu pec 'GAU7') ;
'FINSI' ;
mblo = 'BLOQUE' 'T' (gau 'ET' dro) ;
fblo = 'DEPIMPOSE' mblo ('+' ('MANUEL' 'CHPO' gau 1 'T' 0.D0)
('MANUEL' 'CHPO' dro 1 'T' 1.D0)) ;
'SI' ('EGA' imeth 0) ;
mtot = m1 'ET' m2 'ET' mblo ;
'SINON' ;
mtot = m1 'ET' m2 'ET' m3 'ET' mblo ;
'FINSI' ;
ftot = fblo ;
sola = 'RESO' mtot ftot ;
'RESPRO' sola musmax ;
'FINPROC' ;
*
*
************************************************************************
* NOM : NLIN_DECENT2D
* DESCRIPTION : Cas-test du décentrement :
* couche limite 1D en 2D, on regarde les
* ordres de convergences
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 31/08/2006, version initiale
* HISTORIQUE : v1, 31/08/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 ;
verbose = FAUX ;
'SI' ('NON' interact) ;
'OPTION' 'TRAC' 'PS' ;
'SINON' ;
'OPTION' 'TRAC' 'X' ;
* 'OPTION' 'TRAC' 'OPEN' ;
'FINSI' ;
*
'OPTION' 'DIME' 2 ;
lnx = 'LECT' 4 10 20 30 ;
dlnx = 'DIME' lnx ;
nxfin = '*' ('EXTRAIRE' lnx ('DIME' lnx)) 2 ;
nu = 0.1 ;
Pec = 2.D0 ;
*
moscal1 = mots 'SCAL';
*
idx = 0 ;
*
* Table des ordres espérés pour chaque méthode
* 'LINE' : éléments linéaires
* 'QUAD' : éléments quadratiques
* imeth = 0 : Pas de décentrement
* imeth = 1 : Décentrement full upwind
* imeth = 2 : Décentrement type SUPG avec une fonction de coupure
* "critical approximation"
* imeth = 3 : Décentrement type SUPG avec une fonction de coupure
* "doubly asymptotic"
tabordv = 'TABLE' ;
tabordv . 'LINE' = 'TABLE' ;
tabordv . 'LINE' . 0 = 2. ;
tabordv . 'LINE' . 1 = 1. ;
tabordv . 'LINE' . 2 = 2. ;
tabordv . 'LINE' . 3 = 2. ;
tabordv . 'QUAD' = 'TABLE' ;
tabordv . 'QUAD' . 0 = 3. ;
tabordv . 'QUAD' . 1 = 1. ;
tabordv . 'QUAD' . 2 = 3. ;
tabordv . 'QUAD' . 3 = 2. ;
*
tabordc = 'TABLE' ;
tabordc . 'LINE' = 'TABLE' ;
tabordc . 'QUAD' = 'TABLE' ;
tabev = 'TABLE' ;
tabt = 'TABLE' ;
'REPETER' iiquad 2 ;
iquad = &iiquad ;
'SI' ('EGA' iquad 1) ;
disc = 'LINE' ;
'SINON' ;
disc = 'QUAD' ;
'FINSI' ;
'REPETER' iimeth 4 ;
imeth = '-' &iimeth 1 ;
'SI' verbose ;
tit = 'CHAINE' ' disc = ' disc ' imeth=' imeth ;
'MESSAGE' tit ;
'FINSI' ;
lh = 'PROG' ;
lerr = 'PROG' ;
'REPETER' iinx ('DIME' lnx) ;
inx = &iinx ;
nx = 'EXTRAIRE' lnx inx ;
'SI' ('EGA' iquad 1) ;
'OPTION' 'ELEM' 'TRI3' ;
nx2 = nx ;
nxfin2 = nxfin ;
'SINON' ;
'OPTION' 'ELEM' 'TRI6' ;
nx2 = '/' nx 2 ;
nxfin2 = '/' nxfin 2 ;
'FINSI' ;
vh = '/' 1. ('FLOTTANT' nx2) ;
lh = 'ET' lh ('PROG' vh) ;
p1 = 0. 0. ; p2 = 1. 0. ; p3 = 1. 1. ; p4 = 0. 1. ;
bas = 'DROIT' nx2 p1 p2 ; dro = 'DROIT' nx2 p2 p3 ;
hau = 'DROIT' nx2 p3 p4 ; gau = 'DROIT' nx2 p4 p1 ;
cmt = bas 'ET' dro 'ET' hau 'ET' gau ;
mt = 'SURFACE' cmt 'PLAN' ;
_mt = 'CHANGER' mt 'QUAF' ;
basfin = 'DROIT' nxfin2 p1 p2 ; drofin = 'DROIT' nxfin2 p2 p3 ;
haufin = 'DROIT' nxfin2 p3 p4 ; gaufin = 'DROIT' nxfin2 p4 p1 ;
cmtfin = basfin 'ET' drofin 'ET' haufin 'ET' gaufin ;
mtfin = 'SURFACE' cmtfin 'PLAN' ;
_mtfin = 'CHANGER' mtfin 'QUAF' ;
* p0 = 'POIN' 0. ; p1 = 'POIN' 1. ;
* mt = 'DROIT' nx2 p0 p1 ;
* _mt ='CHANGER' mt 'QUAF' ;
* mtfin = 'DROIT' nxfin2 p0 p1 ;
* _mtfin ='CHANGER' mtfin 'QUAF' ;
mas = GMASS _mtfin disc 'SCAL' disc 'SCAL' disc 1. ;
sol = SOLEX nu mtfin ;
sola musmax = SOLAPP _mt gau dro disc nu pec imeth ;
sola = 'EXCO' 'T' sola ;
sola2 = proi mtfin ('CHANGER' 'CHAM' sola mt) 1.D-9 ;
err = '-' sol sola2 ;
* verr = '**' ('XTMX' err mas) 0.5D0 ;
verr = '**' (XTY err (mas * err) moscal1 moscal1) 0.5D0 ;
lerr = 'ET' lerr ('PROG' verr) ;
'SI' verbose ;
ch = 'CHAINE' 'h=' (formar vh 2)
' => err=' (formar verr 2) ;
'MESSAGE' ch ;
'FINSI' ;
'SI' (graph 'ET' verbose) ;
montagne sola sola mt 'TITR' ('CHAINE' tit ' ' ch) ;
'FINSI' ;
'OPTION' 'DIME' 2 ;
'FIN' iinx ;
* Calcul des ordres
lh lerr = LOG10 lh lerr ;
everr = 'EVOL' 'VERT' 'MANU' lh lerr ;
di = 'DIME' lh ;
lh2 = 'EXTRAIRE' lh ('LECT' ('-' di 1) di) ;
lerr2 = 'EXTRAIRE' lerr ('LECT' ('-' di 1) di) ;
everr2 = 'EVOL' 'MANU' lh2 lerr2 ;
cpl dummy = @POMI everr2 1 'IDEM' ;
ord = cpl . 1 ;
idx = '+' idx 1 ;
tabordc . disc . imeth = ord ;
tabev . idx = everr ;
'SI' verbose ;
tito = 'CHAINE' disc imeth
';ord=' (formar ord 1) ;
'MESSAGE' tito ;
'FINSI' ;
tabt . idx = tito ;
'FIN' iimeth ;
'FIN' iiquad ;
tit = 'CHAINE' 'Log Err. (Log h)' ;
tix = 'CHAINE' 'Log h' ;
tiy = 'CHAINE' 'Log Err' ;
evt = @STBL tabev ;
'SI' graph ;
dessevol evt tabt tit tix tiy FAUX ;
'FINSI' ;
'SAUTER' 2 'LIGNE' ;
* Tests des ordres
ok = VRAI ;
'REPETER' iiquad 2 ;
iquad = &iiquad ;
'SI' ('EGA' iquad 1) ;
disc = 'LINE' ;
'SINON' ;
disc = 'QUAD' ;
'FINSI' ;
'REPETER' iimeth 4 ;
imeth = '-' &iimeth 1 ;
'SI' ('EGA' imeth 0) ;
met = 'CHAINE' 'rien ' ; 'FINSI' ;
'SI' ('EGA' imeth 1) ;
met = 'CHAINE' 'full upwind ' ; 'FINSI' ;
'SI' ('EGA' imeth 2) ;
met = 'CHAINE' 'supg crit approx' ; 'FINSI' ;
'SI' ('EGA' imeth 3) ;
met = 'CHAINE' 'supg doub asymp ' ; 'FINSI' ;
valvoul = tabordv . disc . imeth ;
valobt = tabordc . disc . imeth ;
test = ('EGA' valobt valvoul ('*' valvoul 0.2D0)) ;
ok = ok 'ET' test ;
mess1 = 'CHAINE' 'Eléments ' disc ' Décentrement ' met
' ordre = ' valobt ;
'MESSAGE' mess1 ;
'SI' ('NON' test) ;
'MESSAGE' ('CHAINE' '!!!! On aurait voulu avoir :' valvoul) ;
'FINSI' ;
'FIN' iimeth ;
'FIN' iiquad ;
*
'SI' ('NON' ok) ;
'MESSAGE' ('CHAINE' 'Il y a eu des erreurs') ;
'ERREUR' 5 ;
'SINON' ;
'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
'FINSI' ;
*
'SI' interact ;
'OPTION' 'ECHO' 1 ;
'OPTION' 'DONN' 5 ;
'FINSI' ;
*
* End of dgibi file NLIN_DECENT2D
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer