* fichier : dedu_ghia.dgibi
'OPTI' 'ECHO' 0 ;
************************************************************************
* NOM : DEDU_GHIA
* DESCRIPTION : Calcul de la cavité carrée à paroi défilante
* (Navier-Stokes incompressible) pour plusieurs nombres de
* Reynolds et comparaison avec les résultats de
* référence de Ghia et al. :
*
*@Article{ghia,
* author = {U. Ghia and K.N. Ghia and C.T. Shin},
* title = {High-Re Solutions for Incompressible Flow Using the
* Navier-Stokes Equations and a Multigrid Method},
* journal = {JCP},
* year = {1982},
* volume = {48},
* pages = {387-411},
* endroit = {Classeur Benchmarks (I)}
*}
*
* On utilise une adaptation de maillage par bougé de noeuds
* utilisant l'algorithme implémenté dans 'DEDU' 'ADAP'
* pour calculer le cas avec peu de mailles et sans
* viscosité artificielle (décentrement).
* On arrive à passer Re= 10^4 avec un maillage 25x25
* (ca oscille un peu sur les bords !)
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 13/04/2007, version initiale
* HISTORIQUE : v1, 13/04/2007, 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 !
************************************************************************
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de dedu_ghia.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
*
*
interact= FAUX ;
graph = FAUX ;
verbose = FAUX ;
debug = FAUX ;
complet = FAUX ;
*
*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' lnomt/'LISTMOTS' ;
'SI' ('NON' ('EXISTE' lnomt)) ;
'ARGUMENT' nomt*'MOT ' ;
lnomt = 'MOTS' nomt ;
'FINSI' ;
'ARGUMENT' disct*'MOT ' ;
'ARGUMENT' lnomq/'LISTMOTS' ;
'SI' ('NON' ('EXISTE' lnomq)) ;
'ARGUMENT' nomq*'MOT ' ;
lnomq = 'MOTS' nomq ;
'FINSI' ;
'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' ;
dlnomt = 'DIME' lnomt ; dlnomq = 'DIME' lnomq ;
'SI' ('NEG' dlnomt dlnomq) ;
'ERREUR' ('CHAINE' 'Pas le meme nombre dincos primales et duales');
'FINSI' ;
* numop = 1 ;
numop = dlnomt ;
numder = idim ;
numvar = dlnomt ;
numdat = 1 ;
numcof = 1 ;
*
A = ININLIN numop numvar numdat numcof numder ;
'REPETER' iilnomt dlnomt ;
ilnomt = &iilnomt ;
A . 'VAR' . ilnomt . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomt ilnomt) ;
A . 'VAR' . ilnomt . 'DISC' = disct ;
'SI' ('EXISTE' chpop) ;
A . 'VAR' . ilnomt . 'VALEUR' = chpop ;
'FINSI' ;
'FIN' iilnomt ;
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 ;
*
'REPETER' iilnomt dlnomt ;
ilnomt = &iilnomt ;
A . ilnomt . ilnomt . 0 = 'LECT' 1 ;
'FIN' iilnomt ;
*
'SI' iaxi ;
numdat = 1 ;
numcof = 1 ;
'SINON' ;
numdat = 0 ;
numcof = 0 ;
'FINSI' ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' iilnomq dlnomq ;
ilnomq = &iilnomq ;
B . 'VAR' . ilnomq . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomq ilnomq) ;
B . 'VAR' . ilnomq . 'DISC' = discq ;
'SI' ('EXISTE' chpod) ;
B . 'VAR' . ilnomq . 'VALEUR' = chpod ;
'FINSI' ;
'FIN' iilnomq ;
*
'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 ;
'REPETER' iilnomq dlnomq ;
ilnomq = &iilnomq ;
B . ilnomq . ilnomq . 0 = 'LECT' 1 ;
'FIN' iilnomq ;
'SINON' ;
'REPETER' iilnomq dlnomq ;
ilnomq = &iilnomq ;
B . ilnomq . ilnomq . 0 = 'LECT' ;
'FIN' iilnomq ;
'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 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 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 gbbt
************************************************************************
* NOM : GBBT
* DESCRIPTION : Copie de GDIV mais en précablé
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 14/09/2004, version initiale
* HISTORIQUE : v1, 14/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' GBBT ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT ' ;
'ARGUMENT' discv*'MOT ' ;
'ARGUMENT' discp*'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 = 2 ;
numder = idim ;
mmp = 'MOTS' nomp ;
idim1 = '+' idim 1 ;
numvar = idim1 ;
'SI' iaxi ;
numdat = 3 ;
numcof = 3 ;
'SINON' ;
numdat = 1 ;
numcof = 1 ;
'FINSI' ;
*
A = ININLIN numop numvar numdat numcof numder ;
'REPETER' iidim idim ;
A . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lpv &iidim) ;
A . 'VAR' . &iidim . 'DISC' = discv ;
'FIN' iidim ;
A . 'VAR' . idim1 . 'NOMDDL' = lpp ;
A . 'VAR' . idim1 . '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' ;
*
'SI' iaxi ;
'REPETER' iidim idim ;
A . 1 . &iidim . &iidim = 'LECT' 1 2 3 ;
'FIN' iidim ;
A . 1 . 1 . 0 = 'LECT' 1 2 ;
'SINON' ;
'REPETER' iidim idim ;
A . 1 . &iidim . &iidim = 'LECT' 1 ;
'FIN' iidim ;
'FINSI' ;
A . 2 . idim1 . 0 = 'LECT' ;
*
'SI' iaxi ;
numdat = 3 ;
numcof = 3 ;
'SINON' ;
numdat = 1 ;
numcof = 1 ;
'FINSI' ;
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 ;
B . 'VAR' . idim1 . 'NOMDDL' = ldp ;
B . 'VAR' . idim1 . 'DISC' = discp ;
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' = 'CSTE' ;
B . 'DAT' . 2 . 'VALEUR' = dp ;
B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
B . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 3 . 'DISC' = gdisc ;
B . 'DAT' . 3 . 'VALEUR' = rmt ;
B . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 3 . 'LDAT' = 'LECT' 3 ;
'FINSI' ;
*
'SI' iaxi ;
'REPETER' iidim idim ;
B . 2 . &iidim . &iidim = 'LECT' 1 2 3 ;
'FIN' iidim ;
B . 2 . 1 . 0 = 'LECT' 1 2 ;
'SINON' ;
'REPETER' iidim idim ;
B . 2 . &iidim . &iidim = 'LECT' 1 ;
'FIN' iidim ;
'FINSI' ;
B . 1 . idim1 . 0 = 'LECT' ;
*
mgbbt = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mgbbt ;
'FINPROC' ;
*
* End of procedure file GBBT
*
*ENDPROCEDUR gbbt
*BEGINPROCEDUR ggradt
************************************************************************
* NOM : GGRADT
* DESCRIPTION : Gradient d'une quantité
*
*
*
* 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' GGRADT ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT ' ;
'ARGUMENT' nomp*'MOT ' ;
'ARGUMENT' discp*'MOT ' ;
'ARGUMENT' nomv*'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 ;
lpp = 'MOTS' nomp ;
ldv = nomv ;
'SI' ('ET' ('EGA' vdim 1) ('EGA' vmod 'UNIDPLANDYDZ')) ;
idim = 1 ;
iaxi = FAUX ;
'FINSI' ;
'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' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
dp = ('*' PI 2.D0) ;
rmt = 'COORDONNEE' 1 _mt ;
'FINSI' ;
*
numop = idim ;
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 ;
'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 ;
'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' ;
*
'SI' iaxi ;
'REPETER' iidim idim ;
A . &iidim . 1 . 0 = 'LECT' 1 2 3 ;
'FIN' iidim ;
'SINON' ;
'REPETER' iidim idim ;
A . &iidim . 1 . 0 = 'LECT' 1 ;
'FIN' iidim ;
'FINSI' ;
*
numvar = idim ;
numdat = 0 ;
numcof = 0 ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' iidim idim ;
msinc = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
B . 'VAR' . &iidim . 'NOMDDL' = msinc ;
B . 'VAR' . &iidim . 'DISC' = discv ;
'SI' ('EXISTE' chpod) ;
B . 'VAR' . &iidim . 'VALEUR' = 'EXCO' msinc chpod msinc ;
'FINSI' ;
'FIN' iidim ;
*
'REPETER' iidim idim ;
B . &iidim . &iidim . &iidim = 'LECT' ;
'FIN' iidim ;
*
mggradt = 'NLIN' gdisc _mt A B methgau ;
*
'RESPRO' mggradt ;
'FINPROC' ;
*
* End of procedure file GGRADT
*
*ENDPROCEDUR ggradt
*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 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
*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 histo
************************************************************************
* NOM : HISTO
* DESCRIPTION : Construit une evolution représentant un histogramme
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 13/09/2004, version initiale
* HISTORIQUE : v1, 13/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' HISTO ;
'ARGUMENT' lx*'LISTREEL' ;
'ARGUMENT' ly*'LISTREEL' ;
*
dlx = 'DIME' lx ;
dly = 'DIME' ly ;
*
'SI' ('NEG' dly ('-' dlx 1)) ;
cherr = 'CHAINE' 'Dimension des arguments incorrecte' ;
'MESSAGE' ('CHAINE' 'Dime lx=' dlx ' Dime ly=' dly) ;
'ERREUR' cherr ;
'FINSI' ;
*
lxn = 'PROG' ;
lyn = 'PROG' ;
*
'REPETER' ii dly ;
vx = 'EXTRAIRE' lx &ii ;
vxp = 'EXTRAIRE' lx ('+' &ii 1) ;
vy = 'EXTRAIRE' ly &ii ;
pvx = 'PROG' vx ; pvxp = 'PROG' vxp ;
pvy = 'PROG' vy ; pv0 = 'PROG' 0.D0 ;
lxn = lxn 'ET' pvx 'ET' pvx 'ET' pvxp 'ET' pvxp ;
lyn = lyn 'ET' pv0 'ET' pvy 'ET' pvy 'ET' pv0 ;
'FIN' ii ;
evhist = 'EVOL' 'MANU' lxn lyn ;
'RESPRO' evhist ;
*
* End of procedure file HISTO
*
'FINPROC' ;
*ENDPROCEDUR histo
*
************************************************************************
* NOM : GHIA
* DESCRIPTION : Une partie des résultats de référence (profils U_x(y)
* et U_y(x) obtenus par Ghia et al. dans la référence :
*@Article{ghia,
* author = {U. Ghia and K.N. Ghia and C.T. Shin},
* title = {High-Re Solutions for Incompressible Flow Using the
* Navier-Stokes Equations and a Multigrid Method},
* journal = {JCP},
* year = {1982},
* volume = {48},
* pages = {387-411},
* endroit = {Classeur Benchmarks (I)}
*}
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 14/06/2007, version initiale
* HISTORIQUE : v1, 14/06/2007, 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' GHIA ;
'ARGUMENT' Re*'FLOTTANT' ;
lok = FAUX ;
iRe = 'ENTIER' ('+' Re 0.5D0) ;
ly = 'PROG' 0.0000 0.0547 0.0625 0.0703 0.1016 0.1719 0.2813 0.4531
0.5000 0.6172 0.7344 0.8516 0.9531 0.9609 0.9688 0.9766
1.0000 ;
lx = 'PROG' 0.0000 0.0625 0.0703 0.0781 0.0938 0.1563 0.2266 0.2344
0.5000 0.8047 0.8594 0.9063 0.9453 0.9531 0.9609 0.9688
1.0000 ;
'SI' ('EGA' iRe 100) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.03717 -0.04192 -0.04775 -0.06434 -0.10150
-0.15662 -0.21090
-0.20581 -0.13641 0.00332 0.23151 0.68717 0.73722 0.78871
0.84123 1.00000 ;
lv = 'PROG' 0.00000 0.09233 0.10091 0.10890 0.12317 0.16077 0.17507
0.17527
0.05454 -0.24533 -0.22445 -0.16914 -0.10313 -0.08864
-0.07391 -0.05906 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 400) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.08186 -0.09266 -0.10338 -0.14612 -0.24299
-0.32726 -0.17119
-0.11477 0.02135 0.16256 0.29093 0.55892 0.61756 0.68439
0.75837 1.00000 ;
lv = 'PROG' 0.00000 0.18360 0.19713 0.20920 0.22965 0.28124 0.30203
0.30174
0.05186 -0.38598 -0.44993 -0.3827 -0.22847 -0.19254
-0.15663 -0.12146 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 1000) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.18109 -0.20196 -0.22220 -0.29730 -0.38289
-0.27805 -0.10648
-0.06080 0.05702 0.18719 0.33304 0.46604 0.51117 0.57492
0.65928 1.00000 ;
lv = 'PROG' 0.00000 0.27485 0.29012 0.30353 0.32627 0.37095 0.33075
0.32235
0.02526 -0.31966 -0.42665 -0.51550 -0.39188 -0.33714
-0.27669 -0.21388 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 3200) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.32407 -0.35344 -0.37827 -0.41933 -0.34323
-0.24427 -0.086636
-0.04272 0.07156 0.19791 0.34682 0.46101 0.46547 0.48296
0.53236 1.00000 ;
lv = 'PROG' 0.00000 0.39560 0.40917 0.41906 0.42768 0.37119 0.29030
0.28188
0.00999 -0.31184 -0.37401 -0.44307 -0.54053 -0.52357
-0.47425 -0.39017 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 5000) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.41165 -0.42901 -0.43643 -0.40435 -0.33050
-0.22855 -0.07404
-0.03039 0.08183 0.20087 0.33556 0.46036 0.45992 0.46120
0.48223 1.00000 ;
lv = 'PROG' 0.00000 0.42447 0.43329 0.43648 0.42951 0.35368 0.28066
0.27280
0.00945 -0.30018 -0.36214 -0.41442 -0.52876 -0.55408
-0.55069 -0.49774 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 7500) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.43154 -0.43590 -0.43025 -0.38324 -0.32393
-0.23176 -0.07503
-0.03800 0.08342 0.20591 0.34228 0.47167 0.47323 0.47048
0.47244 1.00000 ;
lv = 'PROG' 0.00000 0.43979 0.44030 0.43564 0.41824 0.35060 0.28117
0.27348
0.00824 -0.30448 -0.36213 -0.41050 -0.48590 -0.52347
-0.55216 -0.53858 0.00000 ;
'FINSI' ;
'SI' ('EGA' iRe 10000) ;
lok = VRAI ;
lu = 'PROG' 0.00000 -0.42735 -0.42537 -0.41657 -0.38000 -0.32709
-0.23186 -0.07540
-0.03111 0.08344 0.20673 0.34635 0.47804 0.48070 0.47783
0.47221 1.00000 ;
lv = 'PROG' 0.00000 0.43983 0.43733 0.43124 0.41487 0.35070 0.28003
0.27224
0.00831 -0.30719 -0.36737 -0.41496 -0.45863 -0.49099
-0.52987 -0.54302 0.00000 ;
'FINSI' ;
'SI' ('NON' lok) ;
cherr = 'CHAINE' 'Pas de sol tabulee pour Re = ' Re ;
'ERREUR' cherr ;
'FINSI' ;
'RESPRO' ly lu lx lv ;
'FINPROC' ;
*
* Calcul la condition à la limite sur le bord haut
*
* 1 ^
* | ________
* | / \
* | /pente= \pente = - pmax
* |/ pmax \
* 0 +------------------>
* 0 1
*
'DEBPROC' CALCLIM ;
*
* ! Attention, gros problème de fuite avec la condition à la limite
* ! suivante
*
*ccli = '+' ('MANUEL' 'CHPO' hau 1 'UX' 1.D0)
* ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
*
* Celle-ci est bien smooth
*
*
* 'LISTE' ccli ;
*xhau = 'COORDONNEE' 1 hau ;
*phau = xhau '*' ('-' xhau 1) '*' -4.D0 ;
*ccli = '+' ('NOMC' 'UX' phau)
* ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
*
* Celle-ci est quasi singulière mais correspond au benchmark de ghia !
*
pmax = 100. ; ipmax = '/' 1. pmax ;
*
xhau = 'COORDONNEE' 1 hau ;
xm1 = '-' xhau ipmax ; axm1 = 'ABS' xm1 ;
f1 = '*' ('-' xm1 axm1) ('/' pmax 2.) ;
xm2 = '-' xhau ('-' 1. ipmax) ; axm2 = 'ABS' xm2 ;
f2 = '*' ('+' xm2 axm2) ('/' pmax -2.) ;
ft = '+' ('+' f1 f2) 1. ;
ccli = '+' ('NOMC' 'UX' ft)
('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
'RESPRO' ccli ;
'FINPROC' ;
*
* Calcul de l'incrément vitesse-pression NS incompressible
*
'DEBPROC' SOLAPP ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' inco*'CHPOINT' ;
'ARGUMENT' ccli*'CHPOINT' ;
*
mlapx = GLAPN _mt discg 'UX' discv 'FX' discv iRe ;
mlapx = '*' mlapx -1.D0 ;
mlapy = 'CHANGER' 'INCO' mlapx ('MOTS' 'UX') ('MOTS' 'UY')
('MOTS' 'FX') ('MOTS' 'FY') ;
mcnvx = GUGRAD _mt discg 'UX' discv 'FX' discv inco mxpri discv 1. ;
mcnvy = 'CHANGER' 'INCO' mcnvx ('MOTS' 'UX') ('MOTS' 'UY')
('MOTS' 'FX') ('MOTS' 'FY') ;
'SI' lsupg ;
mdecx = GDECENT 2 _mt discg 'UX' discv 'FX' discv inco mxpri discv
csupg iRe 2.D0 ;
mdecy = 'CHANGER' 'INCO' mdecx ('MOTS' 'UX') ('MOTS' 'UY')
('MOTS' 'FX') ('MOTS' 'FY') ;
'FINSI' ;
mbbt = GBBT _mt discg discv discp -1. ;
* Régularisation de pression
mp = GMASS _mt discg 'LX' discp 'FLX' discp ('*' ap -1.D0) ;
* Blocage
mblo = 'BLOQUE' 'DEPL' bor ;
fblo = 'DEPIMPOSE' mblo ccli ;
mphy = mlapx 'ET' mlapy 'ET' mcnvx 'ET' mcnvy 'ET' mbbt 'ET' mblo ;
'SI' lsupg ;
mphy = mphy 'ET' mdecx 'ET' mdecy ;
'FINSI' ;
mtot = mphy 'ET' mp ;
*
ftot = '-' fblo ('*' mphy inc) ;
*
incr = 'KRES' mtot ftot ;
'RESPRO' incr ;
'FINPROC' ;
*
* Calcul de la métrique : on utilise la valeur iRe * grad v : gradtv
* (dissipation thermique = production locale d'entropie) pour réaliser
* l'adaptation
*
'DEBPROC' TGDENT ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' vit*'CHPOINT' ;
'ARGUMENT' beta*'FLOTTANT' ;
* Volume des éléments
vmtl = GMASS _mt discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
vmtml = GMASS _mtmoy discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
vmtm = 'MAXIMUM' ('RESULT' vmtml) ;
discc = 'CSTE' ;
*
* Calcul de la dissipation thermique
*
fdtxi = GLAPN _mt discg 'UX' discv 'UX' discv iRe vit vit ;
fdtyi = GLAPN _mt discg 'UY' discv 'UY' discv iRe vit vit ;
fdtxi = '*' fdtxi -1. ;
fdtyi = '*' fdtyi -1. ;
fdtx = '/' fdtxi vmtl ;
fdty = '/' fdtyi vmtl ;
fdt = '+' fdtx fdty ;
'SI' lsupgm ;
fdecxi = GDECENT 2 _mt discg 'UX' discv 'UX' discv vit mxpri discv
csupg iRe 2.D0 vit vit ;
fdecyi = GDECENT 2 _mt discg 'UY' discv 'UY' discv vit mxpri discv
csupg iRe 2.D0 vit vit ;
fdecx = '/' fdecxi vmtl ;
fdecy = '/' fdecyi vmtl ;
fdec = '+' fdecx fdecy ;
'FINSI' ;
'SI' (graph 'ET' debug) ;
rescal = 'KCHA' $mt fdt 'CHAM' ;
tit = 'CHAINE' 'Dissipation thermique' ;
'TRACER' rescal $mb 'TITR' tit ;
'SI' lsupg ;
rescal = 'KCHA' $mt fdec 'CHAM' ;
tit = 'CHAINE' 'Dissipation numérique' ;
'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
'FINSI' ;
'SI' lsupg ;
fdt = '+' fdt fdec ;
'FINSI' ;
*
* Lissage de la dissipation
*
'SI' lissd ;
mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
fdti = GMASS _mt discg 'SCAL' 'CSTE' 'SCAL' discr 1. fdt ;
fdts = '/' fdti mms ;
fdtsi = GMASS _mt discg 'SCAL' discr 'SCAL' 'CSTE' 1. fdts ;
fdt = '/' fdtsi vmtl ;
'SI' (graph 'ET' debug) ;
rescal = 'KCHA' $mt fdt 'CHAM' ;
tit = 'CHAINE' 'Dissipation apres lissage' ;
'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
'FINSI' ;
*
* Limitation de la dissipation
*
sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
'SI' verbose ;
'MESSAGE' ('CHAINE' ' Diss. therm. moy.=' mfdt) ;
'FINSI' ;
seuil = '*' limfdt mfdt ;
* Limitation des valeurs supérieures
m1 = 'MASQUE' fdt 'INFERIEUR' seuil ;
m0 = '*' ('-' m1 1.) -1. ;
fdt = '+' ('*' m1 fdt) ('*' m0 seuil) ;
'SI' (graph 'ET' debug) ;
rescal = 'KCHA' $mt m0 'CHAM' ;
tit = 'CHAINE' 'Masquage de la dissipation' ;
'TRACER' rescal $mb 'TITR' tit ;
rescal = 'KCHA' $mt fdt 'CHAM' ;
tit = 'CHAINE' 'Dissipation apres limitation' ;
'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Scaling de la dissipation
*
sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
'SI' verbose ;
'MESSAGE' ('CHAINE' ' Diss. therm. moy. apres limitation=' mfdt) ;
'FINSI' ;
* D'où alpha :
alpha = '*' ('/' ('-' 1.D0 beta) beta) mfdt ;
'SI' ('ET' debug verbose) ;
'MESSAGE' ('CHAINE' ' Alpha = ' alpha) ;
'FINSI' ;
*
* Calcul du gradient de la dissipation thermique et du tenseur directionnel
*
lmvit = 'MOTS' 'UX' 'UY' ;
mmgs = GMASS _mt discg lmvit discr lmvit discr 1. ;
gfdti = GGRADT _mt discg 'SCAL' 'CSTE' lmvit discr 1. fdt ;
*gfdt = '/' gfdti vmtl ;
gfdts = 'RESOUD' mmgs gfdti ;
gfdti = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
gfdt = '/' gfdti vmtl ;
'SI' (graph 'ET' debug) ;
tit = 'CHAINE' 'Gradient de dissipation thermique ; i=' &bcl ;
vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
*
* Lissage du gradient
*
'SI' lissg ;
mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
gfdti = GMASS _mt discg lmvit 'CSTE' lmvit discr 1. gfdt ;
gfdts = '/' gfdti mms ;
gfdtsi = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
gfdt = '/' gfdtsi vmtl ;
'SI' (graph 'ET' debug) ;
tit = 'CHAINE' 'Gradient apres lissage ; i=' &bcl ;
vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
'FINSI' ;
*
nfdt = 'PSCAL' gfdt gfdt lmvit lmvit ;
snfdt = '**' nfdt 0.5D0 ;
msnfdt = 'MAXIMUM' snfdt ;
'SI' ('<' msnfdt 1.D-100) ;
binf = 1.D0 ;
'SINON' ;
binf = '*' msnfdt 1.D-10 ;
'FINSI' ;
snfdt = '+' snfdt binf ;
sgfdt = '/' gfdt snfdt ;
'SI' (graph 'ET' debug) ;
tit = 'CHAINE' 'Gddt mis a lechelle ; i=' &bcl ;
vvit = 'VECT' sgfdt 'DEPL' 'JAUN' ;
'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
td11 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UX') ('MOTS' 'SCAL') ;
td22 = '*' sgfdt sgfdt ('MOTS' 'UY') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
td12 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
* D'où le tenseur
gxx = '**' fdt 2 ;
vdim = 'VALEUR' 'DIME' ;
limgd2 = '**' limgd 2 ;
gd1 = '**' ('/' gxx ('*' alpha alpha))
('/' 1.D0 vdim) ;
gd2 = '-' ('**' ('+' gd1 1.) vdim) 1. ;
*
* Considération pour les calculs de ngd :
* en 1D : gd1 = gd2, la partie anisotrope doit s'annuler
*
gdb = '-' ('*' ('**' ('+' gd1 1.) delta)
('**' ('+' gd2 1.) ('-' 1. delta))) 1. ;
gda = '-' ('**' ('+' gd1 1.) delta) 1. ;
dgd = '-' gdb gda ;
*
'SI' (graph 'ET' debug) ;
rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
tit = 'CHAINE' 'Partie isotrope de ladaptation' ;
'TRACER' rescal $mb 'TITR' tit ;
rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
tit = 'CHAINE' 'Partie anisotrope de ladaptation' ;
'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Limitation des valeurs supérieures
*
* de la partie isotrope
m1 = 'MASQUE' gda 'INFERIEUR' limgd2 ;
m0 = '*' ('-' m1 1.) -1. ;
gda = '+' ('*' m1 gda) ('*' m0 limgd2) ;
* de la partie anisotrope
gdb = gda '+' dgd ;
m1 = 'MASQUE' gdb 'INFERIEUR' limgd2 ;
m0 = '*' ('-' m1 1.) -1. ;
gdb = '+' ('*' m1 gdb) ('*' m0 limgd2) ;
dgd = '-' gdb gda ;
'SI' (graph 'ET' debug) ;
rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
tit = 'CHAINE' 'Partie isotrope de ladaptation apres lim' ;
'TRACER' rescal $mb 'TITR' tit ;
rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
tit = 'CHAINE' 'Partie anisotrope de ladaptation apres lim' ;
'TRACER' rescal $mb 'TITR' tit ;
'FINSI' ;
*
* Le tenseur
*
g11 = 'NOMC' 'G11' (gda '+' ('*' dgd td11) '+' 1.D0) ;
g22 = 'NOMC' 'G22' (gda '+' ('*' dgd td22) '+' 1.D0) ;
g12 = 'NOMC' 'G12' ('*' dgd td12) ;
gtot = g11 '+' g22 '+' g12 ;
*
'RESPRO' gtot fdt ;
'FINPROC' ;
*
* Début du jeu de donnés
*
'OPTION' 'DIME' 2 ;
'SI' ('NON' interact) ;
'OPTION' 'TRAC' 'PSC' ;
'SINON' ;
'OPTION' 'TRAC' 'X' ;
'FINSI' ;
*
* Maillage
*
* Paramètres d'adaptation :
* beta :
* 0. pas d'adaptation ;
* 0.5 la moitié des mailles dans les régions où le paramètre de
* contrôle est grand
* 1. toutes les mailles dans les régions où le paramètre de
* contrôle est grand
* Usuellement, 0.5 < beta < 0.8
* lissd : lissage de la dissipation thermique
* limfdt : limitation de la dissipation thermique
* on limite les valeurs qui dépassent (moy. fdt) * limfdt
* limgd : limitation de la diagonale du tenseur métrique
* on limite les valeurs qui dépassent limgd
* delta : 0.D0 adaptation totalement anisotrope
* 1.D0 adaptation totalement isotrope
* omi : relaxation de l'incrément vitesse-pression
* omd : relaxation de l'incrément de déplacement du maillage
* theta et gamma : paramètres de l'adapteur de DEDU ADAP
omi = 0.5D0 ;
omd = 0.5D0 ;
'OPTI' 'ELEM' 'QUA8' ;
'SI' complet ;
nx = 25 ; ny = 25 ;
cvg = 2.D-3 ; nitmax = 85 ;
lRe = 'PROG' 100. 400. 1000. 3200. 5000. 7500. 10000. ;
lerru = 'PROG' 3.E-03 1.E-03 3.E-03 6.E-03
6.E-03 7.E-03 8.E-03 ;
lerrv = 'PROG' 6.E-03 2.E-03 4.E-03 6.E-03
6.E-03 5.E-03 1.E-02 ;
beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
* beta = 0.8D0 ; lissd = FAUX ; limfdt = 7.D0 ;
* beta = 0.7D0 ; lissd = FAUX ; limfdt = 5.D0 ;
* theta = 0.5D0 ; gamma = 2.D0 ;
theta = 0.5D0 ; gamma = 2.D0 ;
lissg = FAUX ; limgd = 15.D0 ;
delta = 0.75D0 ;
* delta = 0.5D0 ;
'SINON' ;
nx = 10 ; ny = 10 ;
* nx = 15 ; ny = 15 ;
cvg = 5.D-3 ; nitmax = 50 ;
lRe = 'PROG' 100. 400. 1000. ;
* lRe = 'PROG' 100. 400. 1000. 3200. 5000. ;
lerru = 'PROG' 4.E-03 7.E-03 2.E-02 ;
lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 ;
* lerru = 'PROG' 4.E-03 7.E-03 2.E-02 1. 1. ;
* lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 1. 1. ;
beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
theta = 0.5D0 ; gamma = 2.D0 ;
lissg = FAUX ; limgd = 15.D0 ;
delta = 0.75D0 ;
'FINSI' ;
lerruc = 'PROG' ;
lerrvc = 'PROG' ;
pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
bas = 'DROIT' nx pA pB ; dro = 'DROIT' ny pB pC ;
hau = 'DROIT' nx pC pD ; gau = 'DROIT' ny pD pA ;
mt = 'DALLER' bas dro hau gau ;
bor = 'CONTOUR' mt ;
_mt = 'CHANGER' mt 'QUAF' ;
$mt = 'MODE' _mt 'NAVIER_STOKES' 'QUAF' ;
$mb = 'MODE' ('DOMA' $mt 'MAILLAGE') 'THERMIQUE' ;
mtl = 'CHANGER' mt 'LINEAIRE' ;
*
* Maillage sans les éléments de coin pour la prise des moyennes
*
_mtcoin = 'ELEM' _mt 'APPUYE' 'LARGEMENT' ('ET' pC pD) ;
_mtmoy = 'DIFF' _mt _mtcoin ;
* Paramètres pour le décentrement
* lsupg : VRAI=decentrement
* csupg : facteur multiplicatif
lsupg = FAUX ;
lsupgm = FAUX ;
csupg = 0.3D0 ;
*
* discg : discrétisation géométrique
* discv : discrétisation vitesse
* discp : discrétisation pression
* discr : discrétisation pour la mise au sommet du paramètre de contrôle
discg = 'QUAF' ;
discv = 'QUAF' ;
discp = 'LINE' ;
discr = 'LINE' ;
*
methgau = 'GAU7' ;
mxpri = 'MOTS' 'UX' 'UY' ;
mxdua = 'MOTS' 'FX' 'FY' ;
mppri = 'MOTS' 'LX' ;
mpdua = 'MOTS' 'FLX' ;
* Limitation du déplacement
ldmax = FAUX ;
dmax = 1. ;
echvit = 1. ;
echdx = 1. ;
*
c1 = 'MANUEL' 'CHPO' mt ('MOTS' 'SCAL') ('PROG' 1.) ;
*
lok = VRAI ;
*
ccli = CALCLIM ;
inc = 'COPIER' ccli ;
*
dRe = 'DIME' lRe ;
'REPETER' iiRe dRe ;
Re = 'EXTRAIRE' lRe &iiRe ;
iRe = '/' 1. Re ;
* Numérique
ap= 1.D0 '*' iRe ;
*
* Résumé du cas
*
'SAUTER' 1 'LIGN' ;
'MESSAGE' ('CHAINE' '***********************************') ;
'MESSAGE' ('CHAINE' 'Résumé du cas : ') ;
'MESSAGE' ('CHAINE' 'Nombre de maille = ' nx ' x ' ny) ;
'MESSAGE' ('CHAINE' 'Reynolds = ' Re) ;
'MESSAGE' ('CHAINE' 'Param. adaptation = ' beta) ;
'MESSAGE' ('CHAINE' '***********************************') ;
*
* Algorithme
*
'REPETER' bcl nitmax ;
'SI' verbose ;
'MESSAGE' ('CHAINE' 'Itération : ' &bcl ) ;
'FINSI' ;
* Mise à jour des conditions aux limites
ccli = CALCLIM ;
* Calcul des champs
dinc = SOLAPP _mt inc ccli ;
inc = inc '+' ('*' dinc omi) ;
vit = 'EXCO' mxpri inc ;
pre = 'EXCO' mppri inc ;
dvit = 'EXCO' mxpri dinc ;
echdvit = 'MAXIMUM' dvit 'ABS' ;
'SI' verbose ;
'MESSAGE' ('CHAINE' ' Echelle increment vitesse : ' echdvit) ;
'FINSI' ;
*
'SI' (graph 'ET' debug) ;
tit = 'CHAINE' 'Vitesse ; i=' &bcl ;
vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
'SI' (graph 'ET' debug) ;
tit = 'CHAINE' 'Pression ; i=' &bcl ;
'TRACER' pre mtl 'TITR' tit ;
'FINSI' ;
*
* Calcul du champ de déplacement
*
* Construction de la métrique
tdcd fdt = TGDENT _mt vit beta ;
'SI' graph ;
rescal = 'KCHA' $mt fdt 'CHAM' ;
vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
tit = 'CHAINE' 'Diss. therm. + Vitesse ; i=' &bcl ' ; Re='
Re ;
'SI' debug ;
'TRACER' $mb rescal vvit _mt 'TITR' tit ;
'SINON' ;
'TRACER' $mb rescal vvit _mt 'TITR' tit 'NCLK' ;
'FINSI' ;
'FINSI' ;
* Champ de déplacement
mblox = 'BLOQUE' 'UX' (gau 'ET' dro) ;
mbloy = 'BLOQUE' 'UY' (bas 'ET' hau) ;
mblo = mblox 'ET' mbloy ;
dep = 'DEDU' 'ADAP' _mt mblo 'DISG' discg
'METR' tdcd 'CSTE' 'THET' theta 'GAMM' gamma
'NITM' 1 'METG' methgau ;
*
echdep = 'MAXIMUM' dep 'ABS' ;
'SI' verbose ;
'MESSAGE' ('CHAINE' ' Echelle des depl. : ' echdep) ;
'FINSI' ;
*
'SI' ldmax ;
'SI' ('>' echdep dmax) ;
fdep = '/' dmax echdep ;
dep = '*' dep fdep ;
'FINSI' ;
'SI' verbose ;
'MESSAGE'
('CHAINE' ' Echelle des depl. apres lim : ' echdep) ;
'FINSI' ;
'FINSI' ;
dep = '*' dep omd ;
crit2 = '<' ('/' echdep echdx) cvg ;
'SI' ('NON' crit2) ;
'FORME' dep ;
'FINSI' ;
ciso = DEADUTIL 'QISO' _mt discg 'GAU7' tdcd 'CSTE' ;
cequ = DEADUTIL 'QEQU' _mt discg 'GAU7' tdcd 'CSTE' ;
maciso = 'MAXIMUM' ciso ; miciso = 'MINIMUM' ciso ;
macequ = 'MAXIMUM' cequ ; micequ = 'MINIMUM' cequ ;
'SI' verbose ;
'MESSAGE' ('CHAINE'
' CISO : max. = ' maciso ' min. = ' miciso) ;
'MESSAGE' ('CHAINE'
' CEQU : max. = ' macequ ' min. = ' micequ) ;
'FINSI' ;
'SI' (graph 'ET' debug) ;
cliso = 'KCHA' $mt ciso 'CHAM' ;
tit = 'CHAINE' 'Isotropie ; i=' &bcl ' ; Re=' Re ;
'TRACER' cliso $mb 'TITR' tit ;
clequ = 'KCHA' $mt cequ 'CHAM' ;
tit = 'CHAINE' 'Equidis. ; i=' &bcl ' ; Re=' Re ;
'TRACER' clequ $mb 'TITR' tit ;
'FINSI' ;
* Critères de convergence :
* sur les incréments
crit1 = '<' ('/' echdvit echvit) cvg ;
crit2 = '<' ('/' echdep echdx) cvg ;
'SI' ('ET' crit1 crit2) ;
'QUITTER' bcl ;
'FINSI' ;
'FIN' bcl ;
'SI' ('ET' graph interact) ;
tit = 'CHAINE' 'Vitesse ; Re=' Re ;
vvit = 'VECT' ('/' 2.D0 nx) vit 'DEPL' 'JAUN' ;
'TRACER' vvit mt 'TITR' tit ;
'FINSI' ;
*
ly lu lx lv = GHIA Re ;
lxd = 'PROG' ('DIME' ly) '*' 0.5D0 ;
lyd = 'PROG' ('DIME' lx) '*' 0.5D0 ;
lig1 = 'QUELCONQUE' 'SEG2' lxd ly ;
lig2 = 'QUELCONQUE' 'SEG2' lx lyd ;
*
chamvit = 'CHANGER' 'CHAM' vit _mt ;
*
* U(y)
*
lun = PROI lig1 ('EXCO' 'UX' chamvit) ;
evghia = 'EVOL' 'MANU' ly lu ;
evnum = 'EVOL' 'CHPO' lun 'UX' lig1 ;
'SI' graph ;
evt = evghia 'ET' evnum ;
tabt = 'TABLE' ;
tabt . 1 = 'CHAINE' 'Ghia' ;
tabt . 2 = 'CHAINE' 'Nous' ;
tit = 'CHAINE' 'Profil U(y) ; Re=' Re ;
titx = 'CHAINE' 'y' ;
tity = 'CHAINE' 'U' ;
DESSEVOL evt tabt tit titx tity ;
'FINSI' ;
erru = 'EXTRAIRE' ('SOMME' ('-' evghia evnum) 'ABSO') 1 ;
'MESSAGE' ('CHAINE' ' erru = ' erru) ;
lerruc = 'ET' lerruc ('PROG' erru) ;
verur = 'EXTRAIRE' lerru &iiRe ;
teru = ('<' erru verur) ;
'SI' ('NON' teru) ;
cherr = 'CHAINE' '!!! Erreur, on aurait voulu erru < ' verur ;
'MESSAGE' cherr ;
'FINSI' ;
lok = 'ET' lok teru ;
*
* V(x)
*
lvn = PROI lig2 ('EXCO' 'UY' chamvit) ;
evghia = 'EVOL' 'MANU' lx lv ;
evnum = 'EVOL' 'CHPO' lvn 'UY' lig2 ;
'SI' graph ;
evt = evghia 'ET' evnum ;
tabt = 'TABLE' ;
tabt . 1 = 'CHAINE' 'Ghia' ;
tabt . 2 = 'CHAINE' 'Nous' ;
tit = 'CHAINE' 'Profil V(x) ; Re=' Re ;
titx = 'CHAINE' 'x' ;
tity = 'CHAINE' 'V' ;
DESSEVOL evt tabt tit titx tity ;
'FINSI' ;
errv = 'EXTRAIRE' ('SOMME' ('-' evghia evnum) 'ABSO') 1 ;
'MESSAGE' ('CHAINE' ' errv = ' errv) ;
lerrvc = 'ET' lerrvc ('PROG' errv) ;
vervr = 'EXTRAIRE' lerrv &iiRe ;
terv = ('<' errv vervr) ;
'SI' ('NON' terv) ;
cherr = 'CHAINE' '!!! Erreur, on aurait voulu errv < ' vervr ;
'MESSAGE' cherr ;
'FINSI' ;
lok = 'ET' lok terv ;
'FIN' iiRe ;
*
* Fin du jeu de donnees
*
'SAUTER' 2 'LIGNE' ;
'SI' lok ;
'MESSAGE' 'Tout sest bien passe' ;
'SINON' ;
'MESSAGE' 'Il y a eu des erreurs' ;
'FINSI' ;
'SAUTER' 2 'LIGNE' ;
'SI' interact ;
'OPTION' 'DONN' 5 'ECHO' 1 ;
'FINSI' ;
'SI' ('NON' lok) ;
'ERREUR' 5 ;
'FINSI' ;
*
* End of dgibi file DEDU_GHIA
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer