*
* fichier : defila2.dgibi
*
'OPTI' 'ECHO' 0 ;
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de defila2.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
graph = faux ;
complet = faux ;
interact = faux ;
*
************************************************************************
* NOM : DEFILA2
* DESCRIPTION : Ecoulement sous une surface libre soumise à une pression
* On a tenté de simplifier par rapport à defila :
* - plus de MATRIK
* - procédures de post-traitements (bilans de force)
* plus courtes et plus générales.
* - on teste différents solveurs (itératifs, direct,
* méthode de projection ou couplée)
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 30/09/2011, version initiale
* HISTORIQUE : v1, 30/09/2011, 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 !
************************************************************************
*
'OPTION' 'DIME' 2 'MODE' 'PLAN' 'ISOV' 'SURF' 'ELEM' 'QUA4' ;
* 'OPTION' 'DIME' 3 'MODE' 'TRID' 'ISOV' 'SURF' 'ELEM' 'CUB8' ;
vdim = 'VALEUR' 'DIME' ;
vmod = 'VALEUR' 'MODE' ;
'SI' ('NON' interact) ;
'OPTI' 'TRACER' 'PSC' ;
'SINON' ;
'OPTI' 'TRACER' 'X' ;
'FINSI' ;
debug = faux ;
graphqdm = faux ;
graphsur = faux ;
lsauv = faux ;
*
*fic = 'CHAINE' '/test4/gounand/kong/'
* 'defila22dRe150Eu1FE1We1r4it100.sauv' ;
*'MESSAGE' ('CHAINE' 'Loading ' fic '...') ;
*'OPTI' 'RESTITUER' fic ;
*'RESTITUER' ;
*
************************************************************************
*
*
* PROCEDURES
*
*
************************************************************************
*
* Procédure pour résoudre un système linéaire
*
'DEBPROC' MONRES ;
'ARGUMENT' mat*'RIGIDITE' ;
'ARGUMENT' smb*'CHPOINT' ;
'ARGUMENT' tres/'TABLE' ;
'SI' ('EXISTE' tres) ;
'SI' ('EGA' (tres . 'TYPINV') 0) ;
'OPTI' impi 0 ;
sol = 'RESOUD' mat smb 'NOID' ;
'OPTI' impi 0 ;
'SINON' ;
'SI' ('EXISTE' tres 'LTIME') ;
ltime = tres . 'LTIME' ;
'SINON' ;
ltime = FAUX ;
'FINSI' ;
*
'SI' ('EGA' ltime vrai) ;
sol tt = 'KRES' mat smb 'TYPI' tres ;
'LISTE' tt ;
'SINON' ;
sol = 'KRES' mat smb 'TYPI' tres ;
'FINSI' ;
'FINSI' ;
'SINON' ;
sol = 'RESOUD' mat smb ;
'FINSI' ;
'RESPRO' sol ;
'FINPROC' ;
*
* Procédure pour afficher la résultante d'un chpoint et de sa valeur
* absolue (utile pour debugger sans lister le CHPOINT en question)
*
'DEBPROC' HCHPO ;
'ARGUMENT' chp*'CHPOINT' ;
'ARGUMENT' tit*'MOT' ;
*
achp = 'ABS' chp ;
nachp = 'MAXIMUM' achp ;
*'SI' ('<EG' nachp 1.D-60) ; nachp= 1.D0 ; 'FINSI' ;
nachp = 1.D0 ;
cc = '/' achp nachp ;
*hh = '+' cc 1. ;
hh = 'ABS' cc ;
rcc = 'RESULT' cc ;
rhh = 'RESULT' hh ;
'MESSAGE' ('CHAINE' 'Resultante de ' tit) ;
'LISTE' rcc ;
*'LISTE' rhh ;
'FINPROC' ;
*
* Procédure pour attendre un moment
*
'DEBPROC' attente ;
'ARGUMENT' s*'FLOTTANT' ;
'SI' interact ;
'REPETER' i ('+' ('ENTIER' ('*' 100000 s)) 1) ;
'FIN' i ;
'FINSI' ;
'FINPROC' ;
*BEGINPROCEDUR affvar
************************************************************************
* NOM : AFFVAR
* DESCRIPTION : Affiche des variables
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
*
*
'DEBPROC' AFFVAR ;
'REPETER' bcl ;
'ARGUMENT' x/'FLOTTANT' ;
'SI' ('EXISTE' x) ;
'ARGUMENT' lx*'MOT' ;
'MESSAGE' ('CHAINE' lx '=' x) ;
'SINON' ;
'QUITTER' bcl ;
'FINSI' ;
'FIN' bcl ;
'FINPROC' ;
*
* End of procedure file AFFVAR
*
*ENDPROCEDUR affvar
*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 calimet
************************************************************************
* NOM : CALIMET
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' CALIMET ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT' ;
'ARGUMENT' methgau*'MOT' ;
*methgau = 'GAU7' ;
tmot = 'TABLE' ;
tnom = 'TABLE' ;
idim = 'VALEUR' 'DIME' ;
vdim = DEADUTIL 'DIMM' _mt ;
idx = 0 ;
cim = 'CHAINE' 'IMET' ;
cg = 'CHAINE' 'G' ;
'REPETER' iidim idim ;
'REPETER' jidim idim ;
'SI' ('>EG' &jidim &iidim) ;
idx = '+' idx 1 ;
tmot . idx = 'CHAINE' cim &iidim &jidim ;
tnom . idx = 'CHAINE' cg &iidim &jidim ;
'FINSI' ;
'FIN' jidim ;
'FIN' iidim ;
*
lvid = 'LECT' ;
dtm = 'DIME' tmot ;
tchpo = 'TABLE' 'ESCLAVE' ;
idx = 0 ;
'REPETER' itm dtm ;
mcm = tmot . &itm ;
numop = 1 ;
numder = vdim ;
numvar = 1 ;
numdat = 0 ;
numcof = 1 ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 1. ;
A . 'COF' . 1 . 'COMPOR' = mcm ;
A . 'COF' . 1 . 'LDAT' = lvid ;
A . 1 . 1 . 0 = 'LECT' 1 ;
numdat = 0 ;
numcof = 0 ;
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
B . 'VAR' . 1 . 'DISC' = 'CSTE' ;
B . 'VAR' . 1 . 'VALEUR' = 1. ;
B . 1 . 1 . 0 = lvid ;
cpo = NLIN gdisc _mt A B 'ERF1' methgau ;
cpo = 'NOMC' (tnom . &itm) cpo ;
idx = '+' idx 1 ;
tchpo . idx = cpo ;
'FIN' itm ;
imet = 'ET' tchpo ;
'RESPRO' imet ;
*
* End of procedure file CALIMET
*
'FINPROC' ;
*ENDPROCEDUR calimet
*BEGINPROCEDUR defdd
************************************************************************
* NOM : DEFDD
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' DEFDD ;
*'ARGUMENT' _cmt*'MAILLAGE' ;
*'ARGUMENT' cmt*'MAILLAGE' ;
*'ARGUMENT' sur*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' idir/'ENTIER' ;
'SI' ('NON' ('EXISTE' idir)) ;
idir = 0 ;
'FINSI' ;
*
NOMDEP = @STBL (TDISC . 'XN' . 'NOMPRI') ;
NOMFOR = @STBL (TDISC . 'XN' . 'NOMDUA') ;
*
vdim = 'VALEUR' 'DIME' ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
_hau = tdisc . 'hau' . 'QUAF' ;
hau = tdisc . 'hau' . discg ;
vnor = GNOR _hau tdisc 'NPRI' discg 'FPRI' 1. 'NDUA' 'XN' ;
vnor = 'NOMC' nomfor nomdep vnor ;
* 'SI' ('EGA' vdim 3) ;
* vnor = '*' vnor -1. ;
* 'FINSI' ;
vnorn = '/' vnor ('**' ('PSCAL' vnor vnor nomdep nomdep) 0.5 ) ;
* trvec hau vnorn 'Vnorn' ;
* Correction de vnorn aux extrémités
phau = 'CHANGER' 'POI1' hau ;
'SI' ('EGA' idir 0) ;
'SI' ('EGA' vdim 2) ;
mcorr = ('POIN' hau 'INITIAL')
'ET' ('POIN' hau 'FINAL') ;
'SINON' ;
bhau = tdisc . 'bhau' . discg ;
* mcorr = 'CONTOUR' sur ;
*---------------pour 3D
mcorr = bhau ;
* 'TRACER' (hau 'ET' ('COULEUR' bhau roug)) ;
'FINSI' ;
'SINON' ;
mcorr = hau ;
'FINSI' ;
pmcorr = 'CHANGER' 'POI1' mcorr ;
phaur = 'DIFF' phau pmcorr ;
vnorn1 = 'REDU' vnorn phaur ;
vvn = 'PROG' vdim * 0. ;
'REMPLACER' vvn vdim -1. ;
** vnorn2 = 'MANUEL' 'CHPO' mcorr 2 'UX' 0. 'UY' 1. ;
** 'LISTE' nomdep ;
** 'LISTE' vvn ;
vnorn2 = 'MANUEL' 'CHPO' mcorr nomdep vvn ;
* vnorn2 = 'MANUEL' 'CHPO' mcorr 1 ('EXTRAIRE' nomdep vdim) 1. ;
vnorn = vnorn1 '+' vnorn2 ;
* trvec hau vnorn 'Vnorn2' ;
'RESPRO' vnorn ;
'FINPROC' ;
*
* End of procedure file DEFDD
*
*ENDPROCEDUR defdd
*BEGINPROCEDUR defmail
************************************************************************
* NOM : DEFMAIL
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 27/01/2011, version initiale
* HISTORIQUE : v1, 27/01/2011, 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' DEFMAIL ;
'ARGUMENT' rsou*'FLOTTANT' ;
'ARGUMENT' lav*'FLOTTANT' ;
'ARGUMENT' lap*'FLOTTANT' ;
'ARGUMENT' prof*'FLOTTANT' ;
'ARGUMENT' raff*'ENTIER' ;
*
vdim = 'VALEUR' 'DIME' ;
vmod = 'VALEUR' 'MODE' ;
tdisc = MODENLIN 'GEOM' discg ;
'SI' ('EGA' vdim 2) ;
'SI' ('EGA' vmod 'AXIS') ;
tdisc = MODENLIN tdisc 'INCO' 'XN' discg
'VECT' 'UR' 'UZ' 'FR' 'FZ'
'INCO' 'UN' discv
'VECT' 'UR' 'UZ' 'FR' 'FZ' ;
'SINON' ;
tdisc = MODENLIN tdisc 'INCO' 'XN' discg
'VECT' 'UX' 'UY' 'FX' 'FY'
'INCO' 'UN' discv
'VECT' 'UX' 'UY' 'FX' 'FY' ;
'FINSI' ;
'SINON' ;
tdisc = MODENLIN tdisc 'INCO' 'XN' discg
'VECT' 'UX' 'UY' 'UZ' 'FX' 'FY' 'FZ'
'INCO' 'UN' discv
'VECT' 'UX' 'UY' 'UZ' 'FX' 'FY' 'FZ' ;
'FINSI' ;
'SI' ('EGA' discp 'LINM') ;
'SI' ('EGA' vdim 2) ;
nompre = 'MOTS' 'LX1' 'LX2' 'LX3' ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
nompre = 'MOTS' 'LX1' 'LX2' 'LX3' 'LX4' ;
'FINSI' ;
tdisc = MODENLIN tdisc 'INCO' 'PN' discp 'SCAL' nompre nompre ;
'SINON' ;
nompre = 'LXP' ;
tdisc = MODENLIN tdisc 'INCO' 'PN' discp 'SCAL' nompre nompre ;
'FINSI' ;
*tdisc = JETMOD ;
raf2 = '*' 2 raff ;
raf4 = '*' 4 raff ;
raf8 = '*' 8 raff ;
raf16 = '*' 16 raff ;
raf32 = '*' 32 raff ;
*
dr = '/' rsou raff ;
dav = '/' lav raff ;
dap = '/' lap raff ;
drp = '/' prof raff ;
*
mlav = '*' lav -1. ;
mrsou = '*' rsou -1. ;
mprof = '*' prof -1. ;
'SI' ('EGA' vdim 2) ;
pA = mlav mprof ; pB = mrsou mprof ; pC = 0. mprof ;
pD = rsou mprof ; pE = lap mprof ;
*pJ = mlav 0. ; pII = mrsou 0. ; pH = 0. -0.5 ;
pJ = mlav 0. ; pII = mrsou 0. ; pH = 0. 0. ;
pG = rsou 0. ; pF = lap 0. ;
'SI' ('EGA' raff -1) ; pF= lap ('*' mprof 0.5) ; 'FINSI' ;
*
lAB = 'DROIT' pA pB 'DINI' dav 'DFIN' dr ;
lBC = 'DROIT' pB pC 'DINI' dr 'DFIN' dr ;
lCD = 'DROIT' pC pD 'DINI' dr 'DFIN' dr ;
lDE = 'DROIT' pD pE 'DINI' dr 'DFIN' dap ;
lEF = 'DROIT' pE pF 'DINI' drp 'DFIN' dr ;
lFG = 'DROIT' pF pG 'DINI' dap 'DFIN' dr ;
lGH = 'DROIT' pG pH 'DINI' dr 'DFIN' dr ;
lHII = 'DROIT' pH pII 'DINI' dr 'DFIN' dr ;
lIIJ = 'DROIT' pII pJ 'DINI' dr 'DFIN' dav ;
lJA = 'DROIT' pJ pA 'DINI' dr 'DFIN' drp ;
*
bas = lAB 'ET' lBC 'ET' lCD 'ET' lDE ;
dro = lEF ;
hau = LFG 'ET' lGH 'ET' lHII 'ET' lIIJ ;
gau = lJA ;
*
'SI' ('EGA' raff -1) ;
lAE = 'DROIT' 1 pA pE ;
lEF = 'DROIT' 1 pE pF ;
lFJ = 'DROIT' 1 pF pJ ;
lJA = 'DROIT' 1 pJ pA ;
bas = lAE ;
dro = lEF ;
hau = LFJ ;
gau = lJA ;
'FINSI';
mtw = 'DALLER' bas dro hau gau ;
cmtw = 'CONTOUR' mtw ;
*'TRACER' mtw ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
pA = mlav 0. mprof ; pB = mrsou 0. mprof ; pC = 0. 0. mprof ;
pD = rsou 0. mprof ; pE = lap 0. mprof ;
*pJ = mlav 0. ; pII = mrsou 0. ; pH = 0. -0.5 ;
pJ = mlav 0. 0. ; pII = mrsou 0. 0. ; pH = 0. 0. 0. ;
pG = rsou 0. 0. ; pF = lap 0. 0. ;
*
lAB = 'DROIT' pA pB 'DINI' dav 'DFIN' dr ;
lBC = 'DROIT' pB pC 'DINI' dr 'DFIN' dr ;
lCD = 'DROIT' pC pD 'DINI' dr 'DFIN' dr ;
lDE = 'DROIT' pD pE 'DINI' dr 'DFIN' dap ;
lEF = 'DROIT' pE pF 'DINI' drp 'DFIN' dr ;
lFG = 'DROIT' pF pG 'DINI' dap 'DFIN' dr ;
lGH = 'DROIT' pG pH 'DINI' dr 'DFIN' dr ;
lHII = 'DROIT' pH pII 'DINI' dr 'DFIN' dr ;
lIIJ = 'DROIT' pII pJ 'DINI' dr 'DFIN' dav ;
lJA = 'DROIT' pJ pA 'DINI' dr 'DFIN' drp ;
*
bas2 = lAB 'ET' lBC 'ET' lCD 'ET' lDE ;
dro2 = lEF ;
hau2 = LFG 'ET' lGH 'ET' lHII 'ET' lIIJ ;
gau2 = lJA ;
fro = 'DALLER' bas2 dro2 hau2 gau2 ;
dhau = 'INVERSE' hau2 ;
* cmtw2 = 'CONTOUR' mtw2 ;
*
vtran = 0. lav 0. ;
* vtran = 0. ('*' rsou 2.) 0. ;
pH2 = 'PLUS' pH (0. rsou 0.) ;
pH3 = 'PLUS' pH vtran ;
lgen1 = 'DROIT' pH pH2 'DINI' dr 'DFIN' dr ;
lgen2 = 'DROIT' pH2 pH3 'DINI' dr 'DFIN' dav ;
lgen = lgen1 'ET' lgen2 ;
* lgen = 'DROIT' 1 pH pH3 ;
*
rea = 'PLUS' fro vtran ;
bas = 'GENERATRICE' bas2 lgen ;
dro = 'GENERATRICE' dro2 lgen ;
hau = 'GENERATRICE' hau2 lgen ;
gau = 'GENERATRICE' gau2 lgen ;
mtw = 'VOLUME' fro 'GENE' lgen ;
cmtw = 'ENVELOPPE' mtw ;
pint = 0. rsou ('/' mprof 2.) ;
cmtw = 'ORIENTER' cmtw 'POIN' pint ;
bhau1 = lgen 'PLUS' pJ ;
bhau2 = lgen 'PLUS' pF ;
bhau = bhau1 'ET' bhau2 ;
*
* 'TRACER' mtw ;
*
'FINSI' ;
tdisc = QUAFME tdisc bas 'bas' dro 'dro' hau 'hau' gau 'gau'
cmtw 'cmtw' mtw 'mtw' ('*' 1.D-5 rsou) ;
'SI' ('EGA' vdim 3) ;
tdisc = QUAFME tdisc fro 'fro' rea 'rea' bhau 'bhau' dhau 'dhau'
('*' 1.D-5 rsou) ;
'FINSI' ;
*
* vnor = GNOR _cmtw tdisc 'NPRI' discg 'FPRI' 1. 'NDUA' 'XN' ;
* NOMDEP = @STBL (TDISC . 'XN' . 'NOMINC') ;
* vnorn = '/' vnor ('**' ('PSCAL' vnor vnor nomdep nomdep) 0.5 ) ;
* trvec cmtw vnorn 'Vnorn' ;
*
'RESPRO' tdisc ;
*
* End of procedure file DEFMAIL
*
'FINPROC' ;
*ENDPROCEDUR defmail
*BEGINPROCEDUR defvit
************************************************************************
* NOM : DEFVIT
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' DEFVIT ;
*'ARGUMENT' vit*'CHPOINT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
*
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = FAUX ;
'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
'SI' ('EGA' vdim 2) ; rvit = vit ;
'SINON' ; rvit = 'REDU' vit cmtw ; 'FINSI' ;
TRVEC mtw nomvit rvit 'Vit' 'VECT' 'NORM' 'VNOR' ;
'SI' ('EGA' vdim 2) ;
fcou = FCOURANT _mtw discv ('NOMC' nomvit ('MOTS' 'UX' 'UY') vit)
('MANUEL' 'CHPO' _bas 1 'SCAL' 0.) ;
'TRACER' mtw ('*' fcou -1.) cmtw 'TITR' 'Fcourant' ;
'FINSI' ;
prep = GLNO _mtw tdisc 'PN' pre discv ;
'TRACER' 'CACH' mtw prep cmtw 20 'TITR' ('CHAINE' 'Pression') ;
* dvit = 'EXCO' nomdep dsol ;
* TRVEC2 mtw nomvit rvit 'Vit normee' ;
* TRVEC cmtw nomvit rvit 'Vit' ;
* TRVEC mtrr ('REDU' vit mtrr) 'Vit' ;
* 'TRACER' mtrr ('REDU' prep mtrr) cmtrr
* 'TITR' ('CHAINE' 'Pression') ;
* JETPROF1 vit ;
* JETPROF1 vit ('*' haut 0.4) ;
*
* End of procedure file DEFVIT
*
'FINPROC' ;
*ENDPROCEDUR defvit
*BEGINPROCEDUR defvsurf
************************************************************************
* NOM : DEFVSURF
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' DEFVSURF ;
'ARGUMENT' rmax/'FLOTTANT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
*
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = FAUX ;
'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
'SI' ('EGA' vdim 2) ;
ihau = 'INVERSE' hau ;
'SINON' ;
ihau = dhau ;
'FINSI' ;
i=0 ;
tabev = 'TABLE' ;
tabt = 'TABLE' ;
i = '+' i 1 ;
rhau = 'EXTRAIRE' ('EVOL' 'CHPO' ('COORDONNEE' 1 hau) 'SCAL' ihau)
'ORDO' ;
hv = 'REDU' vit ihau ;
NOMDEP = @STBL (TDISC . 'XN' . 'NOMPRI') ;
nhv = '**' ('PSCAL' vit vit nomdep nomdep) 0.5 ;
zhau = 'EXTRAIRE' ('EVOL' 'CHPO' nhv 'SCAL' ihau) 'ORDO' ;
tabev . i = 'EVOL' 'MANU' rhau zhau ;
tabt . i = 'CHAINE' '|V| surf' ;
tix = 's' ; tiy = '|V|' ; tit = 'CHAINE' tiy '(' tix ')' ;
'SI' ('EXISTE' rmax) ;
binf = '-' 0. rmax ;
bsup = '+' 0. rmax ;
dessevol (@STBL tabev) tabt tit tix tiy
('PROG' binf bsup) lnclk ;
'SINON' ;
dessevol (@STBL tabev) tabt tit tix tiy
lnclk ;
'FINSI' ;
*'SINON' ;
* 'SI' ('EXISTE' rmax) ;
* xhau = 'COORDONNEE' 1 hau ;
* yhau = 'COORDONNEE' 2 hau ;
* rhau = '**' ('+' ('**' xhau 2) ('**' yhau 2)) 0.5 ;
* phau = 'POIN' rhau 'INFERIEUR' rmax ;
* redhau = 'ELEM' hau 'APPUYE' 'LARGEMENT' phau ;
* 'SINON' ;
* redhau = hau ;
* 'FINSI' ;
* 'SI' lnclk ;
* 'TRACER' 'CACH' redhau 'TITR' 'Surface' 'NCLK' ;
* 'SINON' ;
* 'TRACER' 'CACH' redhau 'TITR' 'Surface' 'NCLK' ;
* 'FINSI' ;
*'FINSI' ;
*
* End of procedure file DEFVSURF
*
'FINPROC' ;
*ENDPROCEDUR defvsurf
*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' ;
'ARGUMENT' lx/'LISTREEL' ;
*
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = FAUX ;
'FINSI' ;
*
* nb = 0 : noir et blanc
* nb = 1 : couleur
* nb = 2 : couleur + marqueurs
* nb = 3 : couleur + marqueurs + tirets
* nb = 4 : couleur + marqueurs regu
* nb = 5 : couleur + marqueurs regu + tirets
* nb = 6 : nb + marqueurs regu + tirets
* nb = 7 : nb + marqueurs
* nb = 8 : nb + marqueurs regu
*
'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' ;
'SI' ('EGA' ('VALEUR' 'TRAC') 'PSC') ;
lcoul = 'MOTS' 'BLEU' 'ROUG' 'VERT' 'VIOL' 'OLIV' 'ORAN' ;
'SINON' ;
lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
'FINSI' ;
lmarq = 'MOTS' 'TRID' 'TRIU' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI'
'TRIL' 'TRIR' ;
ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
*
lnb = 'LECT' 0 6 7 8 ;
*'SI' ('OU' ('EGA' nb 0) ('EGA' nb 6)) ;
'SI' (dans ('LECT' nb) lnb) ;
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' ('OU' ('EGA' nb 2) ('EGA' nb 7)) ;
tev . ii = 'CHAINE' 'MARQ ' mi ;
'FINSI' ;
'SI' ('EGA' nb 3) ;
tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ;
'FINSI' ;
'SI' ('OU' ('EGA' nb 4) ('EGA' nb 8)) ;
tev . ii = 'CHAINE' 'MARQ ' mi ' REGU' ;
'FINSI' ;
'SI' ('OU' ('EGA' nb 5) ('EGA' nb 6)) ;
tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ' REGU' ;
'FINSI' ;
'FIN' iev ;
*
'SI' ('EXISTE' lx) ;
dim4 = 'EGA' ('DIME' lx) 4 ;
xmin = 'EXTRAIRE' lx 1 ; xmax = 'EXTRAIRE' lx 2 ;
'SI' dim4 ;
ymin = 'EXTRAIRE' lx 3 ; ymax = 'EXTRAIRE' lx 4 ;
'FINSI' ;
'SI' dim4 ;
'SI' lnclk ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'XBOR' xmin xmax 'YBOR' ymin ymax 'NCLK' motopt ;
'SINON' ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'XBOR' xmin xmax 'YBOR' ymin ymax motopt ;
'FINSI' ;
'SINON' ;
'SI' lnclk ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'XBOR' xmin xmax 'NCLK' motopt ;
'SINON' ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'XBOR' xmin xmax motopt ;
'FINSI' ;
'FINSI' ;
'SINON' ;
'SI' lnclk ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
'NCLK' motopt ;
'SINON' ;
'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
motopt ;
'FINSI' ;
'FINSI' ;
*
* End of procedure file DESSEVOL
*
'FINPROC' ;
*ENDPROCEDUR dessevol
*BEGINPROCEDUR dessvec
************************************************************************
* NOM : DESSVEC
* DESCRIPTION : Trace des bilans de forces projetés sur une direction
* sur une ligne.
* Utile pour tracer des bilans de forces
*
* Display vector fields.
* Useful for visualization of force balance.
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 26/09/2011, version initiale
* HISTORIQUE : v1, 26/09/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' DESSVEC ;
'ARGUMENT' tdom*'MAILLAGE' ;
*'ARGUMENT' tdomq*'MAILLAGE' ;
'ARGUMENT' xdom*'CHPOINT' ;
'ARGUMENT' tix*'MOT' ;
'ARGUMENT' tiy*'MOT' ;
'ARGUMENT' nocomp/'LISTMOTS' ;
'SI' ('EXISTE' nocomp) ;
'ARGUMENT' cdir*'CHPOINT' ;
'FINSI' ;
*
'ARGUMENT' tvec/'TABLE' ;
'SI' ('EXISTE' tvec) ;
'ARGUMENT' ttit*'TABLE' ;
i = '-' ('DIME' tvec) 1 ;
'SINON' ;
tvec = 'TABLE' ; ttit = 'TABLE' ;
i = 0 ;
'FINSI' ;
*
'REPETER' livec 0 ;
'SI' ('EGA' i 0) ;
'ARGUMENT' ccvec*'CHPOINT' ;
'SINON' ;
'ARGUMENT' ccvec/'CHPOINT' ;
'FINSI' ;
'SI' ('EXISTE' ccvec) ;
'ARGUMENT' ttvec*'MOT' ;
'SINON' ;
'QUITTER' livec ;
'FINSI' ;
i = '+' i 1 ;
* 'MESSAGE' ('CHAINE' 'i=' i) ;
* 'LISTE' ccvec ;
* 'LISTE' tvec ;
tvec . i = ccvec ;
ttit . i = ttvec ;
'FIN' livec ;
*'ARGUMENT' echv/'FLOTTANT' ;
*mmas = gmass2 tdomq tdisc 'NPRI' discv 'NDUA' discv ;
'ARGUMENT' mmas/'RIGIDITE' ;
'ARGUMENT' lrmax/'LISTREEL' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = faux ;
'FINSI' ;
*
tdim = 'DIME' tvec ;
'SI' ('EXISTE' tvec 'SOUSTYPE') ; tdim = '-' tdim 1 ; 'FINSI' ;
tvecr = 'TABLE' ;
'REPETER' idim tdim ;
tvecr . &idim = 'REDU' (tvec . &idim) tdom ;
'FIN' idim ;
*tvecr = 'ASSI' 'TOUS' 'REDU' tvec tdom ;
*tdim = '-' ('DIME' tvecr) 1 ;
'SI' ('EXISTE' nocomp) ;
tvecp = 'TABLE' ;
'REPETER' idim tdim ;
tvecp . &idim = 'PSCAL' (tvec . &idim) cdir nocomp nomdep ;
'FIN' idim ;
'SINON' ;
tvecp = tvecr ;
'FINSI' ;
'SI' ('EXISTE' mmas) ;
'REPETER' idim tdim ;
tvecp . &idim = 'RESOUD' mmas (tvecp . &idim) ;
'FIN' idim ;
'FINSI' ;
*
lx = 'EXTRAIRE' ('EVOL' 'CHPO' xdom tdom) 'ORDO' ;
'REPETER' idim tdim ;
tvecp . &idim = 'EVOL' 'CHPO' (tvecp . &idim) tdom ;
'FIN' idim ;
'REPETER' idim tdim ;
tvecp . &idim = 'EXTRAIRE' (tvecp . &idim) 'ORDO' ;
'FIN' idim ;
'REPETER' idim tdim ;
tvecp . &idim = 'EVOL' 'MANUEL' lx (tvecp . &idim) ;
'FIN' idim ;
*tvecp = 'ASSI' 'TOUS' 'EVOL' 'CHPO' tvecp tdom ;
*tvecp = 'ASSI' 'TOUS' 'EXTRAIRE' tvecp 'ORDO' ;
*tvecp = 'ASSI' 'TOUS' 'EVOL' 'MANU' lx tvecp ;
tit = 'CHAINE' tiy '(' tix ')' ;
'SI' ('EXISTE' lrmax) ;
dessevol (@STBL tvecp) ttit tit tix tiy
lrmax lnclk ;
'SINON' ;
dessevol (@STBL tvecp) ttit tit tix tiy
lnclk ;
'FINSI' ;
*
* End of procedure file DESSVEC
*
'FINPROC' ;
*ENDPROCEDUR dessvec
*BEGINPROCEDUR errrel
************************************************************************
* NOM : ERRREL
* DESCRIPTION : Calcul d'une erreur relative
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 23/04/2003, version initiale
* HISTORIQUE : v1, 23/04/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' ERRREL ;
'ARGUMENT' val*'FLOTTANT' ;
'ARGUMENT' valref*'FLOTTANT' ;
*
'SI' ('<' ('ABS' valref) 1.D-10) ;
echref = 1.D0 ;
'SINON' ;
echref = valref ;
'FINSI' ;
*
errabs = 'ABS' ('/' ('-' val valref) echref);
*
'RESPRO' errabs ;
*
* End of procedure file ERRREL
*
'FINPROC' ;
*ENDPROCEDUR errrel
*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 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 gchpo
************************************************************************
* NOM : GCHPO
* 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' GCHPO ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' nomq*'MOT ' ;
'ARGUMENT' coef*'FLOTTANT' ;
*
'SI' ('EGA' discq 'LINM') ;
discq = 'CSTE' ;
'FINSI' ;
*
idim = DEADUTIL 'DIMM' _mt ;
vdim = 'VALEUR' 'DIME' ;
*
discg = TDISC . 'GEOM' . 'DISC' ;
tnomq = TDISC . nomq ;
*
ms = tnomq . 'NOMPRI' . 1 ;
numop = 1 ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 0. ;
*
A . 1 . 1 . 0 = 'LECT' ;
*
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = ms ;
B . 'VAR' . 1 . 'DISC' = tnomq . 'DISC' ;
*
B . 1 . 1 . 0 = 'LECT' ;
*
mgchpos = '+' (NLIN discg _mt A B 'ERF1' 'GAU7') coef ;
*
mgchpo = 'NOMC' ms (tnomq . 'NOMPRI' . 1) mgchpos ;
*
ninc = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('>' ninc 1) ;
'REPETER' iinc ('-' ninc 1) ;
mgchpo = '+' mgchpo
('NOMC' ms (tnomq . 'NOMPRI' . ('+' &iinc 1)) mgchpos) ;
'FIN' iinc ;
'FINSI' ;
*
'RESPRO' mgchpo ;
'FINPROC' ;
*
* End of procedure file GCHPO
*
*ENDPROCEDUR gchpo
*BEGINPROCEDUR gdiv2
************************************************************************
* NOM : GDIV2
* 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' GDIV2 ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' 'GBBT' 'GMBT' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
lbbt = 0 ;
*
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'FPRI') ; 'ARGUMENT' valt*'LISTREEL' ; 'FINSI' ;
'SI' ('EGA' motcle 'FDUA') ; 'ARGUMENT' valq*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'GBBT') ; lbbt = 1 ; 'FINSI' ;
'SI' ('EGA' motcle 'GMBT') ; lbbt = 2 ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'amor' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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 ;
dp = ('*' PI 2.D0) ;
rmt = 'COORDONNEE' 1 _mt ;
ncof = ncof '+' 2 ;
'FINSI' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct idim) ;
cherr = 'CHAINE'
'la primale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' nincq 1) ;
cherr = 'CHAINE'
'la duale doit etre un scalaire' ;
'ERREUR' cherr ;
'FINSI' ;
*
numop = 1 ; numder = idim ; numvar = ninct ;
numdat = ncof ; numcof = ncof ;
A = ININLIN numop numvar numdat numcof numder ;
*
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
'REPETER' iiinct ninct ;
iinct = &iiinct ;
A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
'SINON' ;
A . 'VAR' . iinct . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
'FIN' iiinct ;
*
icof = 0 ;
'SI' lcof ;
icof = '+' icof 1 ;
A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
A . 'DAT' . icof . 'VALEUR' = valo ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
ll = 'LECT' 1 ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
*
'SI' iaxi ;
icof = '+' icof 1 ;
A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . icof . 'DISC' = 'CSTE' ;
A . 'DAT' . icof . 'VALEUR' = dp ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
icof = '+' icof 1 ;
A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . icof . 'DISC' = discg ;
A . 'DAT' . icof . 'VALEUR' = rmt ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
lldpr = ll 'ET' ('LECT' ('-' icof 1) icof) ;
lldp = ll 'ET' ('LECT' ('-' icof 1)) ;
'FINSI' ;
*
'SI' iaxi ;
'REPETER' iidim idim ;
A . 1 . &iidim . &iidim = lldpr ;
'FIN' iidim ;
A . 1 . 1 . 0 = lldp ;
'SINON' ;
'REPETER' iidim idim ;
A . 1 . &iidim . &iidim = ll ;
'FIN' iidim ;
'FINSI' ;
*
numvar = 1 ;
numdat = 0 ;
numcof = 0 ;
*
B = ININLIN numop numvar numdat numcof numder ;
B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMDUA' . 1 ;
B . 'VAR' . 1 . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
B . 'VAR' . 1 . 'VALEUR' = valq ;
'FINSI' ;
B . 1 . 1 . 0 = 'LECT' ;
*
'SI' ('OU' ('EGA' lbbt 0) ('EGA' lbbt 1)) ;
'SI' ('EXISTE' _smt) ;
mgdiv2 = 'NLIN' discg _mt _smt A B methgau ;
'SINON' ;
mgdiv2 = NLINP discg _mt A B methgau ;
'FINSI' ;
'FINSI' ;
'SI' ('OU' ('EGA' lbbt 1) ('EGA' lbbt 2)) ;
B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMPRI' . 1 ;
'REPETER' iiinct ninct ;
iinct = &iiinct ;
A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMDUA' . iinct ;
'FIN' iiinct ;
'SI' ('EXISTE' _smt) ;
mgdiv3 = 'NLIN' discg _mt _smt B A methgau ;
'SINON' ;
mgdiv3 = NLINP discg _mt B A methgau ;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' lbbt 0) ;
mgdiv = mgdiv2 ;
'FINSI' ;
'SI' ('EGA' lbbt 1) ;
mgdiv = mgdiv2 'ET' mgdiv3 ;
'FINSI' ;
'SI' ('EGA' lbbt 2) ;
mgdiv = mgdiv3 ;
'FINSI' ;
'RESPRO' mgdiv ;
'FINPROC' ;
*
* End of procedure file GDIV2
*
*ENDPROCEDUR gdiv2
*BEGINPROCEDUR getcoo
************************************************************************
* NOM : GETCOO
* DESCRIPTION :
* Renvoie les coordonnées des points dans un champ type déplacement
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GETCOO ;
'ARGUMENT' mail*'MAILLAGE' ;
'ARGUMENT' incop*'LISTMOTS' ;
*
dim = 'VALEUR' 'DIME' ;
'REPETER' iidim dim ;
idim= &iidim ;
icoo = 'NOMC' ('EXTRAIRE' incop idim)
('COORDONNEE' idim mail) ;
'SI' ('EGA' idim 1) ;
vcoo = icoo ;
'SINON' ;
vcoo = 'ET' vcoo icoo ;
'FINSI' ;
'FIN' iidim ;
'RESPRO' vcoo ;
*
* End of procedure file GETCOO
*
'FINPROC' ;
*ENDPROCEDUR getcoo
*BEGINPROCEDUR gforc
************************************************************************
* NOM : GFORC
* DESCRIPTION : Calcul de la force associée à une pression imposée
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' GFORC ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' pfor*'CHPOINT' ;
*
vdim = 'VALEUR' 'DIME' ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
fpfor = GNOR _surf tdisc 'NPRI' discg 'CPRI' pfor 'NDUA' 'XN' ;
'RESPRO' fpfor ;
*
* End of procedure file GFORC
*
'FINPROC' ;
*ENDPROCEDUR gforc
*BEGINPROCEDUR ggravi
************************************************************************
* NOM : GGRAVI
* DESCRIPTION : Calcul de la force associée au potentiel gravitaire
* (\rho g z si g vertical)
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GGRAVI ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' coef*'FLOTTANT' ;
'ARGUMENT' ang*'FLOTTANT' ;
*
vdim = 'VALEUR' 'DIME' ;
pgrax = '*' ('COORDONNEE' 1 _surf) ('*' +1. ('SIN' ang)) ;
pgraz = '*' ('COORDONNEE' vdim _surf) ('*' -1. ('COS' ang)) ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
fpgrax = GNOR _surf tdisc 'NPRI' discg 'CPRI' pgrax 'NDUA' 'XN' ;
fpgraz = GNOR _surf tdisc 'NPRI' discg 'CPRI' pgraz 'NDUA' 'XN' ;
fpgra = '+' fpgrax fpgraz ;
fpgra = '*' fpgra ('*' -1. coef) ;
'RESPRO' fpgra ;
*
* End of procedure file GGRAVI
*
'FINPROC' ;
*ENDPROCEDUR ggravi
*BEGINPROCEDUR gkforc
************************************************************************
* NOM : GKFORC
* DESCRIPTION : Calcul de la matrice tangente associée à la force
* de pression imposée. Cette matrice tangente est
* partielle car elle ne prend en compte que le gradient
* surfacique de pression. On peut difficilement
* faire autrement si on ne considère que la surface.
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' GKFORC ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' pfor*'CHPOINT' ;
'ARGUMENT' ijaco/'ENTIER' ;
'SI' ('NON' ('EXISTE' ijaco)) ;
ijaco = 0 ;
'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
*fpfor = GNOR _surf tdisc 'NPRI' discg 'CPRI' pfor 'NDUA' 'XN' ;
k1 = GNORGC _surf tdisc 'NPRI' 'XN'
'NCOF' discg 'CCOF' pfor
'NDUA' 'XN' ;
* k1 = GNOR _surf tdisc 'NPRI' discg 'NDUA' 'XN' ;
* k1 = '*' k1 -1. ;
* k1 = 'CHANGER' 'INCO' k1 ('MOTS' 'SCAL')
* ('MOTS' ('EXTRAIRE' NOMVIT vdim)) NOMVIT NOMVIT ;
k2 = GNORKTAN _surf tdisc 'NPRI' 'XN'
'NCOF' discg 'CCOF' pfor 'NDUA' 'XN' ;
'SI' ('OU' ('EGA' ijaco 0) ('EGA' ijaco 3)) ;
ktfor = k1 'ET' k2 ;
'FINSI' ;
'SI' ('EGA' ijaco 1) ;
ktfor = k1 ;
'FINSI' ;
'SI' ('EGA' ijaco 2) ;
ktfor = k2 ;
'FINSI' ;
ktfor = '*' ktfor -1. ;
'RESPRO' ktfor ;
*
* End of procedure file GKFORC
*
'FINPROC' ;
*ENDPROCEDUR gkforc
*BEGINPROCEDUR gkgravi
************************************************************************
* NOM : GKGRAVI
* DESCRIPTION : Calcul de la matrice tangente de la force
* associée au potentiel gravitaire (calculée par GGRAVI)
* en fonction des déplacements des points de la surface.
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GKGRAVI ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' ijaco*'ENTIER' ;
*'SI' ('NON' ('EXISTE' ijaco)) ;
* ijaco = 0 ;
*'FINSI' ;
'ARGUMENT' coef*'FLOTTANT' ;
'ARGUMENT' ang*'FLOTTANT' ;
*
vdim = 'VALEUR' 'DIME' ;
pgrax = '*' ('COORDONNEE' 1 _surf) ('*' +1. ('SIN' ang)) ;
pgraz = '*' ('COORDONNEE' vdim _surf) ('*' -1. ('COS' ang)) ;
*pgra = '*' ('-' ('COORDONNEE' vdim _surf) H) -1. ;
*pgra = '*' ('COORDONNEE' vdim _surf) -1. ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
NOMDEP = @STBL (TDISC . 'XN' . 'NOMPRI') ;
NOMFOR = @STBL (TDISC . 'XN' . 'NOMDUA') ;
*fpgra = GNOR _surf tdisc 'NPRI' discg 'CPRI' pgra 'NDUA' 'XN' ;
k1x = GNOR _surf tdisc 'NPRI' discg 'NDUA' 'XN' ;
k1x = '*' k1x ('*' +1. ('SIN' ang)) ;
k1x = 'CHANGER' 'INCO' k1x ('MOTS' 'SCAL')
('MOTS' ('EXTRAIRE' NOMDEP 1)) NOMFOR NOMFOR ;
k2x = GNORKTAN _surf tdisc 'NPRI' 'XN'
'NCOF' discg 'CCOF' pgrax 'NDUA' 'XN' ;
k1z = GNOR _surf tdisc 'NPRI' discg 'NDUA' 'XN' ;
k1z = '*' k1z ('*' -1. ('COS' ang)) ;
k1z = 'CHANGER' 'INCO' k1z ('MOTS' 'SCAL')
('MOTS' ('EXTRAIRE' NOMDEP vdim)) NOMFOR NOMFOR ;
k2z = GNORKTAN _surf tdisc 'NPRI' 'XN'
'NCOF' discg 'CCOF' pgraz 'NDUA' 'XN' ;
'SI' ('EGA' ijaco 0) ;
ktgra = k1x 'ET' k1z 'ET' k2x 'ET' k2z ;
'FINSI' ;
'SI' ('EGA' ijaco 1) ;
ktgra = k1x 'ET' k1z ;
'FINSI' ;
'SI' ('EGA' ijaco 2) ;
ktgra = k2x 'ET' k2z ;
'FINSI' ;
ktgra = '*' ktgra coef ;
'RESPRO' ktgra ;
*
* End of procedure file GKGRAVI
*
'FINPROC' ;
*ENDPROCEDUR gkgravi
*BEGINPROCEDUR gkvol
************************************************************************
* NOM : GKVOL
* DESCRIPTION : Matrice tangente associée à la variation du volume
* contenu dans une surface (calculé par GVOL)
* en fonction des déplacements des points de la surface.
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GKVOL ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' ijaco/'ENTIER' ;
'SI' ('NON' ('EXISTE' ijaco)) ;
ijaco = 0 ;
'FINSI' ;
* Vecteur position et calcul du volume
NOMVIT = @STBL (TDISC . 'XN' . 'NOMPRI') ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
vdim = 'VALEUR' 'DIME' ;
'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
fdim = 3 ;
'SINON' ;
fdim = vdim ;
'FINSI' ;
vpos = GETCOO _surf nomvit ;
kvol1 = GNOR _surf tdisc 'NPRI' ('CHAINE' discg 'V')
'NDUA' 'XN' 'FDUA' ('PROG' vdim * 1.) ;
kvol2 = GNORKTAN _surf tdisc 'NPRI' ('CHAINE' discg 'V')
'NCOF' ('CHAINE' discg 'V') 'CCOF' vpos
'NDUA' 'XN' 'FDUA' ('PROG' vdim * 1.) ;
'SI' ('EGA' ijaco 0) ;
kvol = '/' ('+' kvol1 kvol2) fdim ;
'FINSI' ;
'SI' ('EGA' ijaco 1) ;
kvol = '/' kvol1 fdim ;
'FINSI' ;
'SI' ('EGA' ijaco 2) ;
kvol = '/' kvol2 fdim ;
'FINSI' ;
'RESPRO' kvol ;
*
* End of procedure file GKVOL
*
'FINPROC' ;
*ENDPROCEDUR gkvol
*BEGINPROCEDUR glno
************************************************************************
* NOM : GLNO
* 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' GLNO ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
'ARGUMENT' nomt*'MOT' ;
'ARGUMENT' valt*'CHPOINT' ;
'ARGUMENT' nomq/'MOT' ;
*
'SI' ('NON' ('EXISTE' nomq)) ;
nomq = 'QUAF' ;
'FINSI' ;
*
* Second membre
*
smb = GMASS2 _mt tdisc 'NPRI' nomt 'CPRI' valt 'NDUA' nomq ;
mat = GMASS2 _mt tdisc 'NPRI' nomq 'NDUA' nomq ;
cpro = 'KRES' mat smb ;
*
'RESPRO' cpro ;
'FINPROC' ;
*
* End of procedure file GLNO
*
*ENDPROCEDUR glno
*BEGINPROCEDUR gmass2
************************************************************************
* NOM : GMASS2
* 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' GMASS2 ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst = tst1 'OU' tst2 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'mass' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct nincq) ;
cherr = 'CHAINE'
'les primales et duales nont pas le meme nombre de composantes' ;
'ERREUR' cherr ;
'FINSI' ;
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
'SI' ('EGA' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
numop = ninc ; numder = idim ; numvar = ninc ;
numdat = ncof ; numcof = ncof ;
A = ININLIN numop numvar numdat numcof numder ;
'SI' lcof ;
A . 'DAT' . 1 . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
A . 'DAT' . 1 . 'DISC' = tcof . 'DISC' ;
A . 'DAT' . 1 . 'VALEUR' = valo ;
A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
ll = 'LECT' 1 ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMPRI' . iinc ;
A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
'SINON' ;
A . 'VAR' . iinc . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
A . iinc . iinc . 0 = ll ;
'FIN' iiinc ;
*
'SI' iaxi ;
numdat = 1 ;
numcof = 1 ;
'SINON' ;
numdat = 0 ;
numcof = 0 ;
'FINSI' ;
B = ININLIN numop numvar numdat numcof numder ;
'SI' iaxi ;
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discg ;
B . 'DAT' . 1 . 'VALEUR' = dprmt ;
B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
ll = 'LECT' 1 ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
'SINON' ;
B . 'VAR' . iinc . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
B . iinc . iinc . 0 = ll ;
'FIN' iiinc ;
*
'SI' ('EXISTE' _smt) ;
mgmass2 = 'NLIN' discg _mt _smt A B methgau ;
'SINON' ;
mgmass2 = NLINP discg _mt A B methgau ;
'FINSI' ;
*
'RESPRO' mgmass2 ;
'FINPROC' ;
*
* End of procedure file GMASS2
*
*ENDPROCEDUR gmass2
*BEGINPROCEDUR gnorgc
************************************************************************
* NOM : GNORGC
* 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' GNORGC ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
vdim = 'VALEUR' 'DIME' ;
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst3 = 'EGA' motcle 'FCOF' ;
tst = tst1 'OU' tst2 'OU' tst3 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
'SI' tst3 ; tt = TDISC . nomo ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'SI' tst3 ; valo = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'mass' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct vdim) ;
cherr = 'CHAINE'
'la primale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' nincq vdim) ;
cherr = 'CHAINE'
'la duale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
*ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; tcof = TDISC . nomo ;
ncof = 'DIME' (tcof . 'NOMPRI') ;
'SINON' ; ncof = 0 ;
'FINSI' ;
'SI' ('NEG' ncof 1) ;
cherr = 'CHAINE'
'il faut un coefficient scalaire' ;
'ERREUR' cherr ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
'SI' ('EGA' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
numop = ninct '*' nincq ; numder = idim ; numvar = ninct ;
numdat = 1 ; numcof = idim ;
A = ININLIN numop numvar numdat numcof numder ;
A . 'DAT' . 1 . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
A . 'DAT' . 1 . 'DISC' = tcof . 'DISC' ;
A . 'DAT' . 1 . 'VALEUR' = valo ;
'REPETER' iicof numcof ;
icof = &iicof ;
A . 'COF' . icof . 'COMPOR' = 'CHAINE' 'D/DX' icof ;
A . 'COF' . icof . 'LDAT' = 'LECT' 1 ;
'FIN' iicof ;
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
iop = 0 ;
'REPETER' iiinct ninct ;
iinct = &iiinct ;
A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
'SINON' ;
A . 'VAR' . iinct . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
ll = 'LECT' iinct ;
'REPETER' iiincq nincq ;
iop = '+' iop 1 ;
A . iop . iinct . 0 = 'LECT' ;
* A . iop . iinct . 0 = ll ;
'FIN' iiincq ;
'FIN' iiinct ;
*
'SI' iaxi ;
numdat = 1 ;
numcof = idim '+' 1 ;
'SINON' ;
numdat = 0 ;
numcof = idim ;
'FINSI' ;
numvar = nincq ;
B = ININLIN numop numvar numdat numcof numder ;
icof = 0 ;
'REPETER' iiidim idim ;
icof = '+' icof 1 ;
B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'VNOR' &iiidim ;
B . 'COF' . icof . 'LDAT' = 'LECT' ;
'FIN' iiidim ;
*
'SI' iaxi ;
icof = '+' icof 1 ;
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discg ;
B . 'DAT' . 1 . 'VALEUR' = dprmt ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' 1 ;
ll = 'LECT' icof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiincq nincq ;
iincq = &iiincq ;
B . 'VAR' . iincq . 'NOMDDL' = tnomq . 'NOMDUA' . iincq ;
B . 'VAR' . iincq . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iincq . 'VALEUR' = 'EXTRAIRE' valq iincq ;
'SINON' ;
B . 'VAR' . iincq . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
'FIN' iiincq ;
iop = 0 ;
'REPETER' iiinct ninct ;
* iinct = &iiinct ;
'REPETER' iiincq nincq ;
iincq = &iiincq ;
iop = '+' iop 1 ;
B . iop . iincq . 0 = ('LECT' iincq) 'ET' ll ;
'FIN' iiincq ;
'FIN' iiinct ;
*
mgnorgc = NLIN discg _mt A B methgau ;
*
'RESPRO' mgnorgc ;
'FINPROC' ;
*
* End of procedure file GNORGC
*
*ENDPROCEDUR gnorgc
*BEGINPROCEDUR gnorktan
************************************************************************
* NOM : GNORKTAN
* DESCRIPTION : Matrice tangente associée à la variation de la normale
* à une surface (calculée par GNOR)
* en fonction des déplacements des points de la surface.
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GNORKTAN ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
dim = 'VALEUR' 'DIME' ;
mdim = DEADUTIL 'DIMM' _mt ;
'SI' ('NEG' mdim ('-' dim 1)) ;
'ERREUR' 'Dim. maillage .neq. dim. espace - 1' ;
'FINSI' ;
loi = 'CHAINE' 'VNOJ' ;
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst = tst1 'OU' tst2 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'mass' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct dim) ;
cherr = 'CHAINE'
'la primale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' nincq dim) ;
cherr = 'CHAINE'
'la duale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
ninc = dim ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; tcof = TDISC . nomo ;
ncof = 'DIME' (tcof . 'NOMPRI') ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
'SI' ('EGA' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
deupi = '*' PI 2.D0 ;
dprmt = '*' ('COORDONNEE' 1 _mt) deupi ;
'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
numop = idim '*' idim '*' idim ;
'SI' iaxi ;
numop = numop '+' idim ;
'FINSI' ;
numder = idim ; numvar = ninct ;
numdat = ncof ; numcof = ncof ;
A = ININLIN numop numvar numdat numcof numder ;
'SI' lcof ;
lvo = 'EGA' ('TYPE' valo) 'LISTREEL' ;
'REPETER' iicof ncof ;
icof = &iicof ;
A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . icof ;
A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
'SI' lvo ;
A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valo icof ;
'SINON' ;
A . 'DAT' . icof . 'VALEUR' = valo ;
'FINSI' ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
'FIN' iicof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
iop = 0 ;
'REPETER' iiinct ninct ;
iinct = &iiinct ;
A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
'SINON' ;
A . 'VAR' . iinct . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
'REPETER' iiincq nincq ;
'REPETER' iiider numder ;
iop = '+' iop 1 ;
'SI' lcof ;
icof = 'MINIMUM' ('LECT' &iiincq ncof) ;
A . iop . iinct . &iiider = 'LECT' icof ;
'SINON' ;
A . iop . iinct . &iiider = ll ;
'FINSI' ;
'FIN' iiider ;
'FIN' iiincq ;
'FIN' iiinct ;
'SI' iaxi ;
'REPETER' iiincq nincq ;
iop = '+' iop 1 ;
'SI' lcof ;
icof = 'MINIMUM' ('LECT' &iiincq ncof) ;
A . iop . 1 . 0 = 'LECT' icof ;
'SINON' ;
A . iop . 1 . 0 = ll ;
'FINSI' ;
'FIN' iiincq ;
'FINSI' ;
*
* 'SI' iaxi ;
* numdat = 1 ;
* numcof = dim '+' 1 ;
* 'SINON' ;
numdat = 0 ;
numcof = idim '*' idim '*' idim ;
* 'FINSI' ;
'SI' iaxi ;
numdat = '+' numdat 2 ;
numcof = '+' numcof ('+' idim 2) ;
'FINSI' ;
numvar = nincq ;
B = ININLIN numop numvar numdat numcof numder ;
*
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiinc nincq ;
iinc = &iiinc ;
B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
'SINON' ;
B . 'VAR' . iinc . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
'FIN' iiinc ;
idat = 0 ;
icof = 0 ;
'SI' iaxi ;
'REPETER' iiidim idim ;
icof = '+' icof 1 ;
B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'VNOR' &iiidim ;
B . 'COF' . icof . 'LDAT' = 'LECT' ;
'FIN' iiidim ;
idat = '+' idat 1 ;
icof = '+' icof 1 ;
B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . idat . 'DISC' = discg ;
B . 'DAT' . idat . 'VALEUR' = dprmt ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' idat ;
ll = 'LECT' icof ;
idat = '+' idat 1 ;
icof = '+' icof 1 ;
B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . idat . 'DISC' = 'CSTE' ;
B . 'DAT' . idat . 'VALEUR' = deupi ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' idat ;
ll2 = 'LECT' icof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
*
iop = 0 ;
'REPETER' iiinct ninct ;
'REPETER' iiincq nincq ;
'REPETER' iiider numder ;
iop = '+' iop 1 ;
icof = '+' icof 1 ;
lcomp = 'CHAINE' loi &iiincq &iiinct &iiider ;
* lcomp = 'CHAINE' loi &iiinct &iiincq &iiider ;
B . 'COF' . icof . 'COMPOR' = lcomp ;
B . 'COF' . icof . 'LDAT' = 'LECT' ;
B . iop . &iiincq . 0 = ('LECT' icof) 'ET' ll ;
'FIN' iiider ;
'FIN' iiincq ;
'FIN' iiinct ;
'SI' iaxi ;
'REPETER' iiincq nincq ;
iincq = &iiincq ;
iop = '+' iop 1 ;
B . iop . iincq . 0 = ('LECT' iincq) 'ET' ll2 ;
'FIN' iiincq ;
'FINSI' ;
*
* mgnorkt = NLIN discg _mt A B 'CRES' methgau ;
mgnorkt = NLIN discg _mt A B methgau ;
*
'RESPRO' mgnorkt ;
'FINPROC' ;
*
* End of procedure file GNORKTAN
*
*ENDPROCEDUR gnorktan
*BEGINPROCEDUR gnor
************************************************************************
* NOM : GNOR
* DESCRIPTION : Calcule le champ de normales à une surface.
* Peut servir à calculer une pression, un potentiel
* lié à la gravité, un volume contenu dans une surface.
* Attention à l'orientation de la surface !
*
* Computes a field of normal to a surface.
* Also useful to compute a pressure field,
* a gravity potential field, a volume enclosed
* by a surface.
* WARNING : The orientation of the surface matters !
*
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GNOR ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
dim = 'VALEUR' 'DIME' ;
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst3 = 'EGA' motcle 'FCOF' ;
tst = tst1 'OU' tst2 'OU' tst3 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
'SI' tst3 ; tt = TDISC . nomo ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'SI' tst3 ; valo = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'mass' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('ET' ('NEG' ninct 1) ('NEG' ninct dim)) ;
cherr = 'CHAINE'
'la primale doit etre un scalaire ou un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' nincq dim) ;
cherr = 'CHAINE'
'la duale doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
*ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; tcof = TDISC . nomo ;
ncof = 'DIME' (tcof . 'NOMPRI') ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
'SI' ('EGA' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
numop = nincq ; numder = idim ; numvar = ninct ;
numdat = ncof ; numcof = ncof ;
A = ININLIN numop numvar numdat numcof numder ;
'SI' lcof ;
lvo = 'EGA' ('TYPE' valo) 'LISTREEL' ;
'REPETER' iicof ncof ;
icof = &iicof ;
A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . icof ;
A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
'SI' lvo ;
A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valo icof ;
'SINON' ;
A . 'DAT' . icof . 'VALEUR' = valo ;
'FINSI' ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
'FIN' iicof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
'REPETER' iiincq nincq ;
iincq = &iiincq ;
iinct = 'MINIMUM' ('LECT' iincq ninct) ;
A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
'SINON' ;
A . 'VAR' . iinct . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
'SI' lcof ;
icof = 'MINIMUM' ('LECT' iincq ncof) ;
A . iincq . iinct . 0 = 'LECT' icof ;
'SINON' ;
A . iincq . iinct . 0 = ll ;
'FINSI' ;
'FIN' iiincq ;
*
'SI' iaxi ;
numdat = 1 ;
numcof = dim '+' 1 ;
'SINON' ;
numdat = 0 ;
numcof = dim ;
'FINSI' ;
numvar = nincq ;
B = ININLIN numop numvar numdat numcof numder ;
icof = 0 ;
'REPETER' iiidim idim ;
icof = '+' icof 1 ;
B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'VNOR' &iiidim ;
B . 'COF' . icof . 'LDAT' = 'LECT' ;
'FIN' iiidim ;
*
'SI' iaxi ;
icof = '+' icof 1 ;
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discg ;
B . 'DAT' . 1 . 'VALEUR' = dprmt ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' 1 ;
ll = 'LECT' icof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiincq nincq ;
iincq = &iiincq ;
B . 'VAR' . iincq . 'NOMDDL' = tnomq . 'NOMDUA' . iincq ;
B . 'VAR' . iincq . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iincq . 'VALEUR' = 'EXTRAIRE' valq iincq ;
'SINON' ;
B . 'VAR' . iincq . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
B . iincq . iincq . 0 = ('LECT' iincq) 'ET' ll ;
'FIN' iiincq ;
*
mgnor = NLIN discg _mt A B methgau ;
*
'RESPRO' mgnor ;
'FINPROC' ;
*
* End of procedure file GNOR
*
*ENDPROCEDUR gnor
*BEGINPROCEDUR grespr
* GRESPR PROCEDUR GOUNAND 11/06/14 21:15:30 7005
************************************************************************
* NOM : GRESPR
* DESCRIPTION : Résout un système par une méthode de projection
* algébrique incrémentale
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/11/2007, version initiale
* HISTORIQUE : v1, 22/11/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' GRESPR ;
'ARGUMENT' mat*'RIGIDITE' ;
*'ARGUMENT' ccli*'CHPOINT' ;
'ARGUMENT' smb*'CHPOINT' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' rv*'TABLE' ;
*
* Nom des inconnues : vitesses et pressions
* Dans rvg . 'METHINV', on stocke l'éventuelle table d'inversion
* pour le laplacien de pression
*
debug = rv . 'debug' ;
rvg = rv ;
rvm = rv . 'METHINVQDM' ;
dblproj = rv . 'dblproj' ;
scaldia = rv . 'scaldia' ;
*
'SI' ('EXISTE' rvg 'noprec') ;
noprec = rvg . 'noprec' ;
'SINON' ;
noprec = faux ;
'FINSI' ;
'SI' debug ;
'MESSAGE' ('CHAINE' 'noprec=' noprec) ;
'FINSI' ;
*
'SI' ('NON' noprec) ;
'SI' ('NON' ('EXISTE' rvg 'preco')) ;
rvg . 'preco' = 'TABLE' ;
'FINSI' ;
rvgp = rvg . 'preco' ;
* Précision relative utilisée pour le préconditionnement du calcul de la
* matrice de pression
* precrel = 1.D-12 ;
* precrel = 1.D-2 ;
precrel = 1.D-1 ;
'SINON' ;
'SI' ('EXISTE' rvg 'preco') ;
rvgp = rvg . 'preco' ;
'SI' ('EXISTE' rvgp 'mklapphi') ;
mklapphi = rvgp . 'mklapphi' ;
imkvito = rvgp . 'imkvitd' ;
'OUBLIER' rvgp 'mklapphi' ;
'OUBLIER' rvgp 'imkvitd' ;
'SI' debug ;
'MESSAGE' 'Destruction mat pression' ;
'FINSI' ;
* 'DETRUIT' mklapphi 'ELEMENTAIRE' ;
* 'DETRUIT' imkvito 'GEOMETRIE' ;
'FINSI' ;
'OUBLIER' rvg 'preco' ;
'FINSI' ;
rvg . 'preco' = 'TABLE' ;
rvgp = rvg . 'preco' ;
'FINSI' ;
* On a mis chaine sinon plantage qd la pression s'appelle 'PRES' ;
nivit = @STBL (TDISC . 'UN' . 'NOMPRI') ;
nifor = @STBL (TDISC . 'XN' . 'NOMDUA') ;
nipre = @STBL (TDISC . 'PN' . 'NOMPRI') ;
niqre = @STBL (TDISC . 'PN' . 'NOMDUA') ;
*
'SI' ('NON' ('EXISTE' rv 'METHINVPRES')) ;
rv . 'METHINVPRES' = rvm ;
'FINSI' ;
rvgm = rv . 'METHINVPRES' ;
*
* On commence par réduire le système en enlevant les conditions aux limites
*
matc smbc smb1 = 'KOPS' 'CONDENSE' mat smb ;
*
* Initialisation de la solution du système total
*
********************************************************************
* *
* On résout la partie vitesse-pression par projection incrémentale *
* *
********************************************************************
nivp = 'ET' nivit nipre ;
*
* Matrice : partie diagonale en vitesse et contrainte
* on est obligé de reconstruire la transposée car KBBT
* ne stocke que B et pas Bt
*
mkvit = 'EXTRAIRE' matc nivit nifor ;
mkcontr = 'EXTR' matc nivit niqre ;
mkcontrt = 'EXTR' matc nipre nifor ;
*
* Construction du résidu * -1
*
residu = smbc ;
*
* Calcul de la matrice de pression et de la matrice masse diagonalisée
*
* On lumpe la partie diagonale et on l'inverse
chpo1 = GCHPO _mtw 'UN' 1. ;
mkvitd = '*' mkvit chpo1 ;
*'LISTE' mkvitd ;
*
* Choix 1 : si la matrice masse lumpée
* a tous ses termes positifs, on en prend l'inverse
* Avantage : simple, autorise le préconditionnement
* car ne change pas à chaque itération
* Inconvénient : ne marche pas en axi quadratique sur l'axe
* Choix 2 : on prend la diagonale de la matrice totale
* on la met à l'échelle pour avoir la même masse que mkvitd
* Avantage : marche en axi, sur maillage déformés
* Inconvénient : change à chaque itération quand le problème
* est non linéaire (=> recalcul de la matrice de pression),
* pas forcément positif.
* Choix 3 : valeur absolue du précédent + petite tolérance
* Avantage : marche peut-être
* Inconvénient : change à chaque itération.
*
*
*mmi = 'MINIMUM' mkvitd ;
*'SI' ('>' mmi 1.D-200) ;
* imkvitd1 = 'INVERSE' mkvitd ;
* 'SI' debug ; 'MESSAGE' 'Choix 1 masse lumpée' ; 'FINSI' ;
*'SINON' ;
mkdia = 'EXTR' mkvit 'DIAG' ;
* 'LISTE' mkdia ;
mmi = 'MINIMUM' mkdia ;
'SI' ('>' mmi 1.D-200) ;
'SI' debug ; 'MESSAGE' 'Choix 2 masse lumpée' ; 'FINSI' ;
'SINON' ;
mkdia = 'ABS' mkdia ;
mma = 'MAXIMUM' mkdia ;
mkdia = '+' mkdia ('*' mma 1.D-8) ;
'SI' debug ; 'MESSAGE' 'Choix 3 masse lumpée' ; 'FINSI' ;
'FINSI' ;
'SI' scaldia ;
masvitd = 'MAXIMUM' ('RESULT' mkvitd) ;
'SI' debug ;
'MESSAGE' ('CHAINE' 'totmas=' masvitd) ;
'FINSI' ;
masdia = 'MAXIMUM' ('RESULT' mkdia) ;
imkvitd = '*' ('INVERSE' mkdia) ('/' masdia masvitd) ;
'SINON' ;
imkvitd = 'INVERSE' mkdia ;
'FINSI' ;
*'FINSI' ;
*
* Attention ! On préconditionne éventuellement le calcul de la matrice
* de pression
*
precok = FAUX ;
*'MESSAGE' ('CHAINE' 'precok = ' precok) ;
'SI' ('NON' noprec) ;
exis1 = 'EXISTE' rvgp 'mklapphi' ;
exis2 = 'EXISTE' rvgp 'imkvitd' ;
'SI' (exis1 'ET' exis2) ;
imkvd = rvgp . 'imkvitd' ;
mkl = rvgp . 'mklapphi' ;
* On vérifie l'égalité des mkvitd à un facteur constant près
* et des ccli1
ech = 'MAXIMUM' imkvitd 'ABS' ;
echp = 'MAXIMUM' imkvd 'ABS' ;
alfa = '/' ech echp ;
* 'MESSAGE' ('CHAINE' 'alfa = ' alfa) ;
dimkv = '-' imkvitd ('*' imkvd alfa) ;
ndimkv = 'EXTRAIRE' dimkv 'COMP' ;
dimkvs = '*' dimkv ('INVERSE' imkvitd) ndimkv ndimkv ndimkv ;
mdimkvs = 'MAXIMUM' dimkvs 'ABS' ;
egaimkv = 'EGA' mdimkvs 0. precrel ;
*
'SI' debug ;
'MESSAGE' ('CHAINE' 'egaimkv = ' egaimkv
' a ' ('*' mdimkvs 100.) ' %' ) ;
'FINSI' ;
precok = egaimkv ;
'FINSI' ;
'FINSI' ;
* On surcharge par 0. l'inverse de la diagonale là où il y a des clims
* de Dirichlet (pas besoin ici)
*
chdbg = 'CHAINE' 'Matrice de pression MP : ' ;
'SI' precok ;
'SI' ('NON' ('EGA' alfa 1.D0 precrel)) ;
ialfa = '/' 1. alfa ;
* chdbg = 'CHAINE' chdbg 'MP(i) = MP(i-1) * ' ialfa ;
* mklapphi = '*' (rvgp . 'mklapphi') ialfa ;
* imkvitd = '*' (rvgp . 'imkvitd') ialfa ;
chdbg = 'CHAINE' chdbg 'MP(i) = MP(i-1) * ' ialfa ;
mklapphi = rvgp . 'mklapphi' ;
imkvitd = rvgp . 'imkvitd' ;
'SINON' ;
chdbg = 'CHAINE' chdbg 'MP(i) = MP(i-1)' ;
mklapphi = rvgp . 'mklapphi' ;
imkvitd = rvgp . 'imkvitd' ;
ialfa = 1.D0 ;
'FINSI' ;
'SINON' ;
* Dans le cas général où mkcontr et mkcontrt sont différents,
* il faudrait mettre :
*mklapphi = 'KOPS' 'CMCT' mkcontr imchd (kops mkcontrt 'TRANSPOS') ;
chdbg = 'CHAINE' chdbg 'calcul...' ;
'SI' ('EXISTE' rvgp 'mklapphi') ;
mklapphi = rvgp . 'mklapphi' ;
imkvito = rvgp . 'imkvitd' ;
'OUBLIER' rvgp 'mklapphi' ;
'OUBLIER' rvgp 'imkvitd' ;
'SI' debug ;
'MESSAGE' 'Destruction de lancienne matpres' ;
'FINSI' ;
* 'DETRUIT' mklapphi 'ELEMENTAIRE' ;
* 'DETRUIT' imkvito 'GEOMETRIE' ;
'FINSI' ;
mklapphi = 'KOPS' 'CMCT' mkcontr imkvitd mkcontr ;
ialfa = 1.D0 ;
'FINSI' ;
'SI' debug ; 'MESSAGE' chdbg ; 'FINSI' ;
*'SI' ('NON' noprec) ;
rvgp . 'mklapphi' = mklapphi ;
rvgp . 'imkvitd' = imkvitd ;
*'FINSI' ;
*
* Calcul éventuel d'une estimation de la pression (double projection)
*
'SI' dblproj ;
desqdm = 'EXCO' nifor residu nifor 'NOID' ;
idesq = '*' desqdm imkvitd nifor nivit nivit ;
didesq = '*' mkcontr idesq ;
mtot = mklapphi ;
ftot = didesq ;
* 'MESSAGE' 'Résolution Pression 1' ;
dphi1 = MONRES mtot ftot rvgm ;
* HCHPO dphi1 'dphi1' ;
'SI' ('NEG' ialfa 1.D0 1.D-13) ;
dphi1 = '/' dphi1 ialfa ;
'FINSI' ;
gdphi1 = '*' mkcontrt dphi1 ;
residu = residu '-' gdphi1 ;
'FINSI' ;
*
* Calcul de l'incrément de vitesse dv* à partir de la qdm
* On ne splitte pas les équations par direction
*
dvitstar = 0. ;
mtot = mkvit ;
ftot = 'EXCO' nifor residu nifor 'NOID' ;
* 'MESSAGE' 'Résolution Vitesse' ;
ct = MONRES mtot ftot rvm ;
*HCHPO ct 'ct' ;
*TRVEC mtw nomvit ct 'ct' ;
dvitstar = '+' dvitstar ct ;
*
* Calcul de l'incrément de pression dphi pour vérifier la conservation
* de la masse
*
ftot1 = '*' mkcontr dvitstar ;
ftot2 = 'EXCO' niqre residu niqre 'NOID' ;
mtot = mklapphi ;
ftot = '-' ftot1 ftot2 ;
* 'MESSAGE' 'Résolution Pression 2' ;
dphi = MONRES mtot ftot rvgm ;
*HCHPO dphi 'dphi' ;
'SI' ('NEG' ialfa 1.D0 1.D-13) ;
dphi = '/' dphi ialfa ;
'FINSI' ;
*
* Calcul de l'incrément final de vitesse dvit
*
gdphi = '*' mkcontrt dphi ;
gdphi = '*' gdphi imkvitd nifor nivit nivit ;
'SI' ('NEG' ialfa 1.D0 1.D-13) ;
gdphi = '*' gdphi ialfa ;
'FINSI' ;
dvit = dvitstar '-' gdphi ;
*
'SI' dblproj ;
dphi = dphi '+' dphi1 ;
* HCHPO dphi1 'dphi1' ;
'FINSI' ;
dsolc = dvit '+' dphi ;
*HCHPO dphi 'dphi' ;
*hchpo ('+' dphi dphi1) 'dphi+dphi1' ;
*
* Reconstruction de la solution du système total
*
dsol = 'KOPS' 'EVAPORE' dsolc mat smb smb1 ;
*
'RESPRO' dsol ;
*
* End of procedure file GRESPR
*
'FINPROC' ;
*ENDPROCEDUR grespr
*BEGINPROCEDUR grig2
************************************************************************
* NOM : GRIG2
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' GRIG2 ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NCOF' 'FCOF' 'CCOF' 'LAPN' 'GMBT' ;
* Il faut initialiser valt et valq, sinon on peut capturer ceux de
* la procédure appelante
valt = 'valt' ; valq = 'valq' ;
llapn = 0 ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst = tst1 'OU' tst2 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'LAPN') ; llapn = 1 ; 'FINSI' ;
'SI' ('EGA' motcle 'GMBT') ; llapn = 2 ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'rigi' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct nincq) ;
cherr = 'CHAINE'
'les primales et duales nont pas le meme nombre de composantes' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('NEG' ninct ('VALEUR' 'DIME')) ;
cherr = 'CHAINE'
'les inconnues doivent etre vectorielles' ;
'ERREUR' cherr ;
'FINSI' ;
*
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
'SI' ('EGA' idim 0) ;
'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
'FINSI' ;
'SI' iaxi ;
rmt = 'COORDONNEE' 1 _mt ;
deupi = '*' PI 2.D0 ;
'FINSI' ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
*
*Bug ? numop = ('**' ninc 2) '+' 1 ;
numop = '**' ninc 2 ;
'SI' iaxi ; numop = '+' numop 1 ; 'FINSI' ;
numder = idim ;
numvar = ninc ;
ncof = '+' ncof 1 ;
*delete 'SI' iaxi ; ncof = '+' ncof 1 ; 'FINSI' ;
numdat = ncof ;
numcof = ncof ;
*
A = ININLIN numop numvar numdat numcof numder ;
*
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMPRI' . iinc ;
A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
'SINON' ;
A . 'VAR' . iinc . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
'FIN' iiinc ;
*
icof = 0 ;
ll = 'LECT' ;
icof = '+' icof 1 ;
A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
A . 'DAT' . icof . 'DISC' = 'CSTE' ;
A . 'DAT' . icof . 'VALEUR' = 2.D0 ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
ll = 'LECT' ;
ll2 = 'LECT' icof ;
'SI' lcof ;
icof = '+' icof 1 ;
A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
A . 'DAT' . icof . 'VALEUR' = valo ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
ll = 'ET' ll ('LECT' icof) ;
ll2 = 'ET' ll2 ('LECT' icof) ;
'FINSI' ;
*
iop = 0 ;
'REPETER' iidim idim ;
'REPETER' jidim idim ;
iop = '+' iop 1 ;
'SI' ('EGA' &iidim &jidim) ;
'SI' ('EGA' llapn 0) ;
A . iop . &iidim . &jidim = ll2 ;
'SINON' ;
A . iop . &iidim . &jidim = ll ;
'FINSI' ;
'SINON' ;
'SI' ('NEG' llapn 2) ;
A . iop . &iidim . &jidim = ll ;
'FINSI' ;
'SI' ('NEG' llapn 1) ;
A . iop . &jidim . &iidim = ll ;
'FINSI' ;
'FINSI' ;
'FIN' jidim ;
'FIN' iidim ;
'SI' iaxi ;
iop = '+' iop 1 ;
'SI' ('EGA' llapn 0) ;
A . iop . 1 . 0 = ll2 ;
'SINON' ;
A . iop . 1 . 0 = ll ;
'FINSI' ;
'FINSI' ;
*
'SI' iaxi ;
numdat = 2 ;
numcof = 2 ;
'SINON' ;
numdat = 0 ;
numcof = 0 ;
'FINSI' ;
*
B = ININLIN numop numvar numdat numcof numder ;
*
icof = 0 ;
*
'SI' iaxi ;
icof = '+' icof 1 ;
B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . icof . 'DISC' = discg ;
B . 'DAT' . icof . 'VALEUR' = rmt ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
icof = '+' icof 1 ;
B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . icof . 'DISC' = 'CSTE' ;
B . 'DAT' . icof . 'VALEUR' = deupi ;
B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
ll = 'LECT' ('-' icof 1) icof ;
mic = '*' ('-' icof 1) -1 ;
llb = 'LECT' mic icof ;
'FINSI' ;
*
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
'SINON' ;
B . 'VAR' . iinc . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
'FIN' iiinc ;
*
iop = 0 ;
'REPETER' iidim idim ;
'REPETER' jidim idim ;
iop = '+' iop 1 ;
B . iop . &iidim . &jidim = ll ;
'FIN' jidim ;
'FIN' iidim ;
'SI' iaxi ;
iop = '+' iop 1 ;
B . iop . 1 . 0 = llb ;
* B . iop . 1 . 0 = ll ;
'FINSI' ;
*
mgrig = NLINP discg _mt A B methgau ;
* Integration par parties
* mgrig = '*' mgrig -1.D0 ;
*
'RESPRO' mgrig ;
'FINPROC' ;
*
* End of procedure file GRIG2
*
*ENDPROCEDUR grig2
*BEGINPROCEDUR gugrad2
************************************************************************
* NOM : GUGRAD2
* DESCRIPTION : Une matrice de convection
*
*
*
* 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' GUGRAD2 ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' _smt/'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
*
* Lectures
*
debug = FAUX ;
lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
'NVIT' 'FVIT' 'CVIT' 'NCOF' 'FCOF' 'CCOF' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
'SI' ('EGA' motcle 'NVIT') ; 'ARGUMENT' nomu*'MOT' ; 'FINSI' ;
tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
tst = tst1 'OU' tst2 ;
'SI' tst ;
'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
'ARGUMENT' valv*'FLOTTANT' ;
'FINSI' ;
'SI' tst1 ; valt = valv ; 'FINSI' ;
'SI' tst2 ; valq = valv ; 'FINSI' ;
'FINSI' ;
'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
'SI' ('EGA' motcle 'FVIT') ; 'ARGUMENT' valu*'LISTREEL' ; 'FINSI' ;
'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
'SI' ('EGA' motcle 'CVIT') ; 'ARGUMENT' valu*'CHPOINT' ; 'FINSI' ;
'FIN' imotcle ;
*
* Tests
*
discg = TDISC . 'GEOM' . 'DISC' ;
'SI' ('EXISTE' tdisc 'methgau') ;
methgau = tdisc . 'methgau' . 'amor' ;
'SINON' ;
methgau = 'GAU7' ;
'FINSI' ;
tnomt = TDISC . nomt ;
lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
tnomq = TDISC . nomq ;
lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
tnomu = TDISC . nomu ;
* Scalaire ou vecteur
ninct = 'DIME' (tnomt . 'NOMPRI') ;
nincq = 'DIME' (tnomq . 'NOMPRI') ;
'SI' ('NEG' ninct nincq) ;
cherr = 'CHAINE'
'les primales et duales nont pas le meme nombre de composantes' ;
'ERREUR' cherr ;
'FINSI' ;
ninc = ninct ;
*
lcof = 'EXISTE' TDISC nomo ;
'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
'SINON' ; ncof = 0 ;
'FINSI' ;
*
'SI' debug ;
'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
'FINSI' ;
'FINSI' ;
*
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' ;
* Scalaire ou vecteur
nincu = 'DIME' (tnomu . 'NOMPRI') ;
'SI' ('NEG' nincu idim) ;
cherr = 'CHAINE'
'la vitesse doit etre un vecteur' ;
'ERREUR' cherr ;
'FINSI' ;
ncof = '+' ncof nincu ;
*
* Optimisation possible : construire la matrice par blocs
* qd valt et valq ne sont pas donnés
*
numop = ninc ; numder = idim ; numvar = ninc ;
numdat = ncof ; numcof = ncof ;
A = ININLIN numop numvar numdat numcof numder ;
*
lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMPRI' . iinc ;
A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
'SI' lvalt ;
'SI' lvt ;
A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
'SINON' ;
A . 'VAR' . iinc . 'VALEUR' = valt ;
'FINSI' ;
'FINSI' ;
'FIN' iiinc ;
*
lvu = 'EGA' ('TYPE' valu) 'LISTREEL' ;
icof = 0 ;
'REPETER' iiincu nincu ;
iincu = &iiincu ;
icof = icof '+' 1 ;
A . 'DAT' . icof . 'NOMDDL' = tnomu . 'NOMPRI' . iincu ;
A . 'DAT' . icof . 'DISC' = tnomu . 'DISC' ;
'SI' lvu ;
A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valu iincu ;
'SINON' ;
A . 'DAT' . icof . 'VALEUR' = valu ;
'FINSI' ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
'FIN' iiincu ;
'SI' lcof ;
icof = icof '+' 1 ;
A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
A . 'DAT' . icof . 'VALEUR' = valo ;
A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
ll = 'LECT' icof ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
*
'REPETER' iiinc ninc ;
iinc = &iiinc ;
'REPETER' iiidim idim ;
iidim = &iiidim ;
A . iinc . iinc . iidim = ('ET' ('LECT' iidim) ll) ;
'FIN' iiidim ;
'FIN' iiinc ;
*
'SI' iaxi ;
numdat = 1 ;
numcof = 1 ;
'SINON' ;
numdat = 0 ;
numcof = 0 ;
'FINSI' ;
B = ININLIN numop numvar numdat numcof numder ;
'SI' iaxi ;
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discg ;
B . 'DAT' . 1 . 'VALEUR' = dprmt ;
B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
ll = 'LECT' 1 ;
'SINON' ;
ll = 'LECT' ;
'FINSI' ;
lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
'REPETER' iiinc ninc ;
iinc = &iiinc ;
B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
'SI' lvalq ;
'SI' lvq ;
B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
'SINON' ;
B . 'VAR' . iinc . 'VALEUR' = valq ;
'FINSI' ;
'FINSI' ;
B . iinc . iinc . 0 = ll ;
'FIN' iiinc ;
*
'SI' ('EXISTE' _smt) ;
mgugrad2 = 'NLIN' discg _mt _smt A B methgau ;
'SINON' ;
mgugrad2 = NLINP discg _mt A B methgau ;
'FINSI' ;
*
'RESPRO' mgugrad2 ;
'FINPROC' ;
*
* End of procedure file GUGRAD2
*
*ENDPROCEDUR gugrad2
*BEGINPROCEDUR gvol
************************************************************************
* NOM : GVOL
* DESCRIPTION :
* Calcule le volume compris dans une surface fermée
* La normale doit être vers l'intérieur pour que le volume soit positif
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' GVOL ;
'ARGUMENT' _surf*'MAILLAGE' ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' dbg/'LOGIQUE' ;
*
'SI' ('NON' ('EXISTE' dbg)) ;
dbg = FAUX ;
'FINSI' ;
*
* Vecteur position et calcul du volume
NOMVIT = @STBL (TDISC . 'XN' . 'NOMPRI') ;
DISCG = TDISC . 'GEOM' . 'DISC' ;
vdim = 'VALEUR' 'DIME' ;
'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
fdim = 3 ;
'SINON' ;
fdim = vdim ;
'FINSI' ;
vposc = GETCOO _surf nomvit ;
* 'SI' iaxi ;
* rs zs = 'COORDONNEE' _surf ;
* nr = 'EXTRAIRE' nomvit 1 ;
* nz = 'EXTRAIRE' nomvit 2 ;
* vposc =
* 'FINSI' ;
* fvol = GNOR _surf tdisc 'NPRI' ('CHAINE' discg 'V') 'CPRI' vpos
* 'NDUA' 'CSTEV' ;
* rfvol = 'RESULT' fvol ;
* volx = 'MAXIMUM' ('EXCO' 'UX' rfvol) ;
* voly = 'MAXIMUM' ('EXCO' 'UY' rfvol) ;
* vol = '/' ('+' volx voly) vdim ;
fvolc = GNOR _surf tdisc 'NPRI' discg
'NCOF' (chai discg 'V')
'CCOF' vposc
'NDUA' (chai discg 'V')
'FDUA' ('PROG' vdim * 1.) ;
volc = '/' ('MAXIMUM' ('RESULT' fvolc))
fdim ;
vol = volc '*' -1. ;
'RESPRO' vol ;
*
* End of procedure file GVOL
*
'FINPROC' ;
*ENDPROCEDUR gvol
*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 modenlin
************************************************************************
* NOM : MODENLIN
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' MODENLIN ;
*
vdim = 'VALEUR' 'DIME' ;
vmod = 'VALEUR' 'MODE' ;
*
'SI' ('ET' ('NEG' vdim 2) ('NEG' vdim 3)) ;
'ERREUR' ('CHAINE' 'vdim=' vdim) ;
'FINSI' ;
*
* Noms par défaut
*
'SI' ('EGA' vdim 2) ;
'SI' ('NEG' vmod 'AXIS') ;
nomvec = 'MOTS' 'UX' 'UY' ;
nomfor = 'MOTS' 'FX' 'FY' ;
'SINON' ;
nomvec = 'MOTS' 'UR' 'UZ' ;
nomfor = 'MOTS' 'FR' 'FZ' ;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
nomvec = 'MOTS' 'UX' 'UY' 'UZ' ;
nomfor = 'MOTS' 'FX' 'FY' 'FZ' ;
'FINSI' ;
*
nomsca = 'MOTS' 'SCAL' ;
*nomflu = 'MOTS' 'SCAL' ;
*
'ARGUMENT' tmode/'TABLE' ;
'SI' ('NON' ('EXISTE' tmode)) ;
tmode = 'TABLE' ;
*
* Initialisation des inconnues par défaut
*
lmdisc = 'MOTS' 'CSTE' 'LINE' 'QUAF' ;
'REPETER' iidisc ('DIME' lmdisc) ;
mdisc = 'EXTRAIRE' lmdisc &iidisc ;
tmode . mdisc = 'TABLE' ;
tmode . mdisc . 'DISC' = mdisc ;
tmode . mdisc . 'NOMPRI' = 'TABLE' ;
tmode . mdisc . 'NOMPRI' . 1 = nomsca ;
tmode . mdisc . 'NOMDUA' = 'TABLE' ;
tmode . mdisc . 'NOMDUA' . 1 = nomsca ;
mdiscv = 'CHAINE' mdisc 'V' ;
tmode . mdiscv = 'TABLE' ;
tmode . mdiscv . 'DISC' = mdisc ;
tmode . mdiscv . 'NOMPRI' = 'TABLE' ;
'REPETER' idim vdim ;
TMODE . mdiscv. 'NOMPRI' . &idim =
'MOTS' ('EXTRAIRE' nomvec &idim) ;
'FIN' idim ;
tmode . mdiscv . 'NOMDUA' = 'TABLE' ;
'REPETER' idim vdim ;
TMODE . mdiscv. 'NOMDUA' . &idim =
'MOTS' ('EXTRAIRE' nomfor &idim) ;
'FIN' idim ;
'FIN' iidisc ;
'FINSI' ;
*
* Lecture des mots clés et des inconnues
*
lmotcle = 'MOTS' 'GEOM' 'INCO' ;
ldiscdd = 'MOTS' 'LINM' 'CUBI' ;
ltypinc = 'MOTS' 'SCAL' 'VECT' ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' motcle 'GEOM') ;
'ARGUMENT' discg*'MOT' ;
TMODE . 'GEOM' = 'TABLE' ;
TMODE . 'GEOM' . 'DISC' = discg ;
'FINSI' ;
'SI' ('EGA' motcle 'INCO') ;
'ARGUMENT' nominc*'MOT' ;
'SI' ('EGA' nominc 'GEOM') ;
'ERREUR' 'GEOM nest pas un nom dinconnu acceptable' ;
'FINSI' ;
TMODE . nominc = 'TABLE' ;
'ARGUMENT' disinc*'MOT' ;
TMODE . nominc . 'DISC' = disinc ;
ldd = 'EXISTE' ldiscdd disinc ;
'ARGUMENT' typinc*'MOT' ;
'SI' ('NON' ('EXISTE' ltypinc typinc)) ;
cherr = 'CHAINE' 'Type=' typinc ' unknown.' ;
'ERREUR' cherr ;
'FINSI' ;
'SI' ('EGA' typinc 'SCAL') ;
nbinc = 1 ;
'SINON' ;
nbinc = vdim ;
'FINSI' ;
TMODE . nominc . 'NOMPRI' = 'TABLE' ;
'REPETER' ibinc nbinc ;
'SI' ldd ;
'ARGUMENT' nomcom*'LISTMOTS' ;
'SINON' ;
'ARGUMENT' nomcom*'MOT' ;
nomcom = 'MOTS' nomcom ;
'FINSI' ;
TMODE . nominc . 'NOMPRI' . &ibinc = nomcom ;
'FIN' ibinc ;
TMODE . nominc . 'NOMDUA' = 'TABLE' ;
'REPETER' ibinc nbinc ;
'SI' ldd ;
'ARGUMENT' nomcom*'LISTMOTS' ;
'SINON' ;
'ARGUMENT' nomcom*'MOT' ;
nomcom = 'MOTS' nomcom ;
'FINSI' ;
TMODE . nominc . 'NOMDUA' . &ibinc = nomcom ;
'FIN' ibinc ;
'FINSI' ;
'FIN' imotcle ;
*
'RESPRO' tmode ;
*
* End of procedure file MODENLIN
*
'FINPROC' ;
*ENDPROCEDUR modenlin
*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 myent
************************************************************************
* NOM : MYENT
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, ??/??/2007, version initiale
* HISTORIQUE : v1, ??/??/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' MYENT ;
'ARGUMENT' rr*'FLOTTANT' ;
'SI' ('>EG' rr 0.) ;
ii = 'ENTIER' ('+' rr 0.5) ;
'SINON' ;
ii = 'ENTIER' ('-' rr 0.5) ;
'FINSI' ;
'RESPRO' ii ;
*
* End of procedure file MYENT
*
'FINPROC' ;
*ENDPROCEDUR myent
*BEGINPROCEDUR projsysc
************************************************************************
* NOM : PROJSYSC
* DESCRIPTION : Calcul matrice et second membre projetés suivant
* un champ de directions données
*
* Project a linear system with respect to a given
* vector field
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' PROJSYSC ;
'ARGUMENT' tdisc*'TABLE' ;
'ARGUMENT' vdirn*'CHPOINT' ;
'ARGUMENT' ktgra*'RIGIDITE' ;
'ARGUMENT' fpgrad*'CHPOINT' ;
'ARGUMENT' kvol/'CHPOINT' ;
lcnt = 'EXISTE' kvol ;
'SI' lcnt ;
'ARGUMENT' dvol*'FLOTTANT' ;
'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
NOMVIT = @STBL (TDISC . 'XN' . 'NOMPRI') ;
NOMFOR = @STBL (TDISC . 'XN' . 'NOMDUA') ;
* fpgrad = 'PSCAL' fpgra vdirn nomfor nomvit ;
* Condensation de la matrice
knord = 'MANUEL' 'RIGI' vdirn ;
knord = 'CHANGER' 'INCO' knord nomvit nomvit
nomfor nomvit ;
*tc mise en commentaires du finsi cidessous
* 'FINSI' ;
'SI' ('EGA' vdim 2) ;
nomscal = 'MOTS' 'SCAL' 'SCAL' ;
'SINON' ;
nomscal = 'MOTS' 'SCAL' 'SCAL' 'SCAL' ;
'FINSI' ;
knor = 'CHANGER' 'INCO' knord nomvit nomscal nomvit nomvit ;
knort = 'CHANGER' 'INCO' knord nomvit nomvit nomvit nomscal ;
* 'MESSAGE' 'ktgra' ;
* 'LISTE' ('EXTRAIRE' ktgra 'COMP') ;
* 'LISTE' ('EXTRAIRE' ktgra 'COMP' 'DUAL') ;
* 'MESSAGE' 'knort' ;
* 'LISTE' ('EXTRAIRE' knort 'COMP') ;
* 'LISTE' ('EXTRAIRE' knort 'COMP' 'DUAL') ;
ktg1 = 'KOPS' 'CMCT' ktgra knort ;
* 'MESSAGE' 'ktg1' ;
* 'LISTE' ('EXTRAIRE' ktg1 'COMP') ;
* 'LISTE' ('EXTRAIRE' ktg1 'COMP' 'DUAL') ;
ktg2 = 'KOPS' 'TRANSPOS' ktg1 ;
* 'MESSAGE' 'ktg2' ;
* 'LISTE' ('EXTRAIRE' ktg2 'COMP') ;
* 'LISTE' ('EXTRAIRE' ktg2 'COMP' 'DUAL') ;
ktg3 = 'KOPS' 'CMCT' knort ktg2 ;
* 'MESSAGE' 'ktg3' ;
* 'LISTE' ('EXTRAIRE' ktg3 'COMP') ;
* 'LISTE' ('EXTRAIRE' ktg3 'COMP' 'DUAL') ;
ktot = ktg3 ;
ftot = fpgrad ;
'SI' lcnt ;
ktvol = 'PSCAL' kvol vdirn nomvit nomvit ;
ktv = rela ('NOMC' 'T' ktvol) ;
smbvol = 'DEPIMPOSE' ktv dvol ;
ktv1 = 'EXTRAIRE' ktv 'T' 'FLX' ;
ktv2 = 'EXTRAIRE' ktv 'LX' 'Q' ;
ktv = ktv1 'ET' ktv2 ;
lpr1 = 'MOTS' 'T' 'LX' ; l2 = 'MOTS' 'SCAL' 'LX' ;
ldu1 = 'MOTS' 'Q' 'FLX' ;
ktv = 'CHANGER' 'INCO' ktv lpr1 l2 ldu1 l2 'MULT' ;
smbvol = 'NOMC' ldu1 l2 smbvol ;
ktot = ktot 'ET' ktv ;
ftot = ftot '+' smbvol ;
'FINSI' ;
'RESPRO' ktot ftot ;
*
* End of procedure file PROJSYSC
*
'FINPROC' ;
*ENDPROCEDUR projsysc
*BEGINPROCEDUR quafme
************************************************************************
* NOM : QUAFME
* DESCRIPTION :
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 01/12/2004, version initiale
* HISTORIQUE : v1, 01/12/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' QUAFME ;
'ARGUMENT' tmail/'TABLE' ;
'SI' ('NON' ('EXISTE' tmail)) ;
tmail = 'TABLE' ;
'FINSI' ;
'REPETER' bcl ;
'ARGUMENT' mquad/'MAILLAGE' ;
'SI' ('EXISTE' mquad) ;
'REPETER' bbcl 1 ;
'ARGUMENT' nom*'MOT' ;
tmail . nom = 'TABLE' ;
dimm = DEADUTIL 'DIMM' mquad ;
'SI' ('EGA' dimm 0) ;
mquaf = mquad ;
tmail . nom = mquad ;
'QUITTER' bbcl ;
'FINSI' ;
typm = DEADUTIL 'TYPM' mquad ;
'SI' ('EGA' typm 'QUAF') ;
mquaf = mquad ;
tmail . nom . 'QUAF' = mquaf ;
'SI' ('EGA' dimm 2) ;
tmail . nom . 'QUAI' = mquaf ;
tmail . nom . 'QUAD' = mquaf ;
'FINSI' ;
'QUITTER' bbcl ;
'FINSI' ;
'SI' ('EGA' typm 'QUAI') ;
mquaf = 'CHANGER' mquad 'QUAF' ;
tmail . nom . 'QUAF' = mquaf ;
tmail . nom . 'QUAI' = mquad ;
tmail . nom . 'LINE' = 'CHANGER' 'LINEAIRE' mquad ;
'QUITTER' bbcl ;
'FINSI' ;
'SI' ('EGA' typm 'LINE') ;
mquai = 'CHANGER' 'QUADRATIQUE' mquad ;
mquaf = 'CHANGER' mquai 'QUAF' ;
tmail . nom . 'QUAF' = mquaf ;
tmail . nom . 'QUAI' = mquai ;
tmail . nom . 'LINE' = mquad ;
'QUITTER' bbcl ;
'FINSI' ;
'FIN' bbcl ;
* ielim = '+' ielim 1 ;
* telim . ielim = mquaf ;
'SINON' ;
'QUITTER' bcl ;
'FINSI' ;
'FIN' bcl ;
*
*
telim = 'TABLE' 'ESCLAVE' ;
ielim = 0 ;
tidx = 'INDEX' tmail ;
'REPETER' iidx ('DIME' tidx) ;
idx = tidx . &iidx ;
val = tmail . idx ;
tval = 'TYPE' val ;
'SI' ('EGA' tval 'MAILLAGE') ;
ielim = '+' ielim 1 ;
telim . ielim = val ;
'FINSI' ;
'SI' ('EGA' tval 'TABLE') ;
'SI' ('EXISTE' val 'QUAF') ;
ielim = '+' ielim 1 ;
telim . ielim = val . 'QUAF' ;
'FINSI' ;
'FINSI' ;
'FIN' iidx ;
*
*
'ARGUMENT' tol*'FLOTTANT' ;
'ELIMINATION' ('ET' telim) tol ;
*
'RESPRO' tmail ;
'FINPROC' ;
*
* End of procedure file QUAFME
*
*ENDPROCEDUR quafme
*BEGINPROCEDUR trvec
************************************************************************
* NOM : TRVEC
* DESCRIPTION : Trace des champs de vecteurs.
* Utile pour tracer des bilans de forces
*
* Display vector fields.
* Useful for visualization of force balance.
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 22/04/2011, version initiale
* HISTORIQUE : v1, 22/04/2011, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' TRVEC ;
*'ARGUMENT' tdisc*'TABLE' ;
*'ARGUMENT' motdom*'MOT' ;
'ARGUMENT' tdom*'MAILLAGE' ;
'ARGUMENT' nocomp*'LISTMOTS' ;
*
'ARGUMENT' tvec/'TABLE' ;
'SI' ('EXISTE' tvec) ;
'ARGUMENT' ttit*'TABLE' ;
i = 'DIME' tvec ;
'SI' ('EXISTE' tvec 'SOUSTYPE') ; i = '-' i 1 ; 'FINSI' ;
'SINON' ;
tvec = 'TABLE' ; ttit = 'TABLE' ;
i = 0 ;
'FINSI' ;
*
'REPETER' livec 0 ;
'SI' ('EGA' i 0) ;
'ARGUMENT' ccvec*'CHPOINT' ;
'SINON' ;
'ARGUMENT' ccvec/'CHPOINT' ;
'FINSI' ;
'SI' ('EXISTE' ccvec) ;
'ARGUMENT' ttvec*'MOT' ;
'SINON' ;
'QUITTER' livec ;
'FINSI' ;
i = '+' i 1 ;
* 'MESSAGE' ('CHAINE' 'i=' i) ;
* 'LISTE' ccvec ;
* 'LISTE' tvec ;
tvec . i = ccvec ;
ttit . i = ttvec ;
'FIN' livec ;
'ARGUMENT' echv/'FLOTTANT' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
'SI' ('NON' ('EXISTE' lnclk)) ;
lnclk = faux ;
'FINSI' ;
lvec = faux ; lnor = faux ; lvno = faux ;
lmotcle = 'MOTS' 'VECT' 'NORM' 'VNOR' ;
nmotcle = 0 ;
'REPETER' imotcle 0 ;
'ARGUMENT' motcle/'MOT' ;
'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
'FINSI' ;
nmotcle = '+' nmotcle 1 ;
* 'MESSAGE' ('CHAINE' 'nmotcle=' nmotcle ' ' 'motcle=' motcle) ;
'SI' ('EGA' motcle 'VECT') ; lvec = VRAI ; 'FINSI' ;
'SI' ('EGA' motcle 'NORM') ; lnor = VRAI ; 'FINSI' ;
'SI' ('EGA' motcle 'VNOR') ; lvno = VRAI ; 'FINSI' ;
* 'MESSAGE' ('CHAINE' ' lvec=' lvec) ;
* 'MESSAGE' ('CHAINE' ' lnor=' lnor) ;
* 'MESSAGE' ('CHAINE' ' lvno=' lvno) ;
'FIN' imotcle ;
'SI' ('EGA' nmotcle 0) ; lvec = vrai ; 'FINSI' ;
*'MESSAGE' ('CHAINE' 'lvec=' lvec) ;
*'MESSAGE' ('CHAINE' 'lnor=' lnor) ;
*'MESSAGE' ('CHAINE' 'lvno=' lvno) ;
lcoul = 'MOTS' 'JAUN' 'ROUG' 'BLAN' 'TURQ' 'VERT' 'OLIV'
'AZUR' 'ORAN' 'VIOL' 'GRIS' 'OCEA' ;
*
*
'SI' ('OU' lnor lvno) ;
* Table des normes des champs
tnvec = 'TABLE' ;
dtvec = 'DIME' tvec ;
'SI' ('EXISTE' tvec 'SOUSTYPE') ; dtvec = '-' dtvec 1 ; 'FINSI' ;
'REPETER' ivec dtvec ;
vec = tvec . &ivec ;
* nomdep = 'EXTRAIRE' vec 'COMP' ;
nvec = '**' ('PSCAL' vec vec nocomp nocomp) 0.5 ;
tnvec . &ivec = nvec ;
'FIN' ivec ;
* Trouver la norme maxi locale
nloc = tnvec . 1 ;
'SI' ('>' dtvec 1) ;
'REPETER' ivec ('-' dtvec 1) ;
iivec = &ivec '+' 1 ;
vec = tnvec . iivec ;
vec0 = '+' vec ('*' nloc 0.) ;
nloc0 = '+' nloc ('*' vec 0.) ;
maq = 'MASQUE' vec0 'SUPERIEUR' nloc0 ;
imaq = ('-' maq 1.) '*' -1. ;
nnloc = '+' ('*' maq vec) ('*' imaq nloc) ;
nloc = nnloc ;
'FIN' ivec ;
'FINSI' ;
* Normer les champs
nloc = '+' nloc 1.D-60 ;
mm = 'MAXIMUM' nloc ;
*nloc = '+' nloc ('*' mm 1.D-4) ;
*lnloc = LOG10 nloc ;
tvec2 = 'TABLE' ;
'SI' lvno ;
lnloc = nloc ;
inloc = 'INVERSE' nloc ;
'REPETER' ivec dtvec ;
vec = tvec . &ivec ;
tvec2 . &ivec = '*' vec inloc ;
'FIN' ivec ;
'FINSI' ;
'SINON' ;
*
lmax = 'PROG' ;
'REPETER' ii i ;
mm = 'MAXIMUM' (tvec . &ii) 'ABS' ;
lmax = 'ET' lmax ('PROG' mm) ;
'FIN' ii ;
mm = '+' ('MAXIMUM' lmax) 1.D-60 ;
'FINSI' ;
*
'SI' ('NON' ('EXISTE' echv)) ;
vmodo = 'EGA' ('VALEUR' 'MODE') 'AXIS' ;
'SI' vmodo ; 'OPTI' 'MODE' 'PLAN' ; 'FINSI' ;
mmas = gmass2 ('CHANGER' tdom 'QUAF') tdisc
'NPRI' discv 'NDUA' discv ;
mmasd = gmass2 ('CHANGER' tdom 'QUAF') tdisc
'NPRI' 'CSTE' 'FPRI' 1.D0 'NDUA' discv ;
mdiam = 'EXTR' mmas 'DIAG' ;
mmdi = 'MAXIMUM' ('RESULT' mdiam) ;
mmma = 'MAXIMUM' ('RESULT' mmasd) ;
mdias = '*' mdiam ('/' mmma mmdi) ;
* ctail = gmass2 ('CHANGER' tdom 'QUAF') tdisc
* 'NPRI' 'CSTE' 'FPRI' 1. 'NDUA' 'CSTE' 'FDUA' 1. ;
* 'LISTE' ctail ;
'SI' vmodo ; 'OPTI' 'MODE' 'AXIS' ; 'FINSI' ;
vdim = 'VALEUR' 'DIME' ;
dimm = DEADUTIL 'DIMM' tdom ;
* ctail = '**' ctail ('/' 1. ('-' vdim 1)) ;
ctail = '**' mdias ('/' 1. dimm) ;
tail = '**' ('*' ('MAXIMUM' ctail) ('MINIMUM' ctail)) 0.5 ;
* tail = 'MINIMUM' ctail ;
*'LISTE' tail ;
*'LISTE' mm ;
echv = '/' ('*' 1.4 tail) mm ;
* echvn = ('*' 0.95 tail) ;
echvn = 0.75 ;
'SI' lvno ;
'REPETER' ivec dtvec ;
vec = tvec2 . &ivec ;
tvec2 . &ivec = '*' vec ctail ;
'FIN' ivec ;
'FINSI' ;
'FINSI' ;
*'MESSAGE' ('CHAINE' 'mm=' mm) ;
'SI' lvec ; tvec3 = 'TABLE' ; 'FINSI' ;
'REPETER' ii i ;
cou = EXMOMOD lcoul &ii ;
'SI' lvec ;
tvec3 . &ii = 'VECT' (tvec . &ii) echv nocomp cou ;
'FINSI' ;
'SI' lvno ;
tvec2 . &ii = 'VECT' (tvec2 . &ii) echvn nocomp cou ;
'FINSI' ;
'SI' ('EGA' &ii 1) ;
tit = 'CHAINE' cou '=' (ttit . &ii) ;
'SINON' ;
tit = 'CHAINE' tit ' ' cou '=' (ttit . &ii) ;
'FINSI' ;
'FIN' ii ;
idim = 'VALEUR' 'DIME' ;
vdim = DEADUTIL 'DIMM' tdom ;
ctdom = tdom ;
'SI' ('EGA' vdim 2) ;
ctdom= 'CONTOUR' tdom ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
ctdom= ARET tdom ;
'FINSI' ;
*
'SI' lvec ;
titv = 'CHAINE' 'Max=' (formar mm 1) ' ' tit ;
'FINSI' ;
'SI' lnor ;
titn = tit ;
'FINSI' ;
'SI' lvno ;
titvn = 'CHAINE' 'Norm ' tit ;
'FINSI' ;
*
'SI' lnclk ;
'SI' lvec ;
'TRACER' (@stbl tvec3) tdom ctdom 'TITR' titv 'NCLK' ;
'FINSI' ;
'SI' lnor ;
'TRACER' nloc tdom ctdom 'TITR' titn 'NCLK' ;
'FINSI' ;
'SI' lvno ;
'TRACER' (@stbl tvec2) tdom ctdom 'TITR' titvn 'NCLK' ;
'FINSI' ;
'SINON' ;
'SI' lvec ;
'TRACER' (@stbl tvec3) tdom ctdom 'TITR' titv ;
'FINSI' ;
'SI' lnor ;
'TRACER' nloc tdom ctdom 'TITR' titn ;
'FINSI' ;
'SI' lvno ;
'TRACER' (@stbl tvec2) tdom ctdom 'TITR' titvn ;
'FINSI' ;
'FINSI' ;
*
* End of procedure file TRVEC
*
'FINPROC' ;
*ENDPROCEDUR trvec
*BEGINPROCEDUR tsurktan
************************************************************************
* NOM : TSURKTAN
* DESCRIPTION : La matrice tangente pour la tension de surface
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 17/01/2007, version initiale
* HISTORIQUE : v1, 17/01/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' TSURKTAN ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT' ;
'ARGUMENT' methgau*'MOT' ;
'ARGUMENT' dppri*'LISTMOTS' ;
'ARGUMENT' dpdua*'LISTMOTS' ;
*
dpdis = gdisc ;
*
idim = 'VALEUR' 'DIME' ;
vdim = DEADUTIL 'DIMM' _mt ;
laxi = DEADUTIL 'AXI?' ;
lsph = DEADUTIL 'SPH?' ;
*
loi = 'CHAINE' 'TSUJ' ;
loij = 'CHAINE' 'TSU' ;
*
'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' jaco/'ENTIER' ;
'SI' ('NON' ('EXISTE' jaco)) ;
jaco = 1 ;
dir1 = VRAI ;
'FINSI' ;
'SI' ('OU' ('EGA' jaco 2) ('EGA' jaco 3)) ;
'ARGUMENT' idir/'ENTIER' ;
'SI' ('EXISTE' idir) ;
ldir = 'LECT' idir ;
'SI' ('EGA' idir 1) ;
dir1 = VRAI ;
'FINSI' ;
'SINON' ;
'ARGUMENT' ldir/'LISTENTI' ;
'SI' ('NON' ('EXISTE' ldir)) ;
ldir = 'LECT' 1 'PAS' 1 idim ;
dir1 = VRAI ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
'ARGUMENT' lterm/'LISTENTI' ;
llterm = 'EXISTE' lterm ;
'SI' llterm ;
dlterm = 'DIME' lterm ;
'SINON' ;
dlterm = 1 ;
'FINSI' ;
*
* Calcul du jacobien complet (jaco = 1)
*
'SI' ('EGA' jaco 1) ;
numop = '*' ('**' vdim 2) ('**' idim 2) ;
numop = '*' numop dlterm ;
'SI' ('OU' laxi lsph) ;
numop = '+' numop ('*' (vdim '*' idim) 2) ;
'FINSI' ;
'SI' lsph ;
numop = '+' numop 1 ;
'FINSI' ;
numder = vdim ;
numvar = idim ;
numdat = 0 ;
numcof = 0 ;
*
A = ININLIN numop numvar numdat numcof numder ;
numdat = 1 ;
numcof = numop ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' ivar numvar ;
A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
A . 'VAR' . &ivar . 'DISC' = dpdis ;
B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
B . 'VAR' . &ivar . 'DISC' = dpdis ;
'FIN' ivar ;
iop = 0 ;
'REPETER' h dlterm ;
'REPETER' i idim ;
'REPETER' j vdim ;
'REPETER' k idim ;
'REPETER' l vdim ;
iop = iop '+' 1 ;
A . iop . &i . &j = 'LECT' ;
'SI' llterm ;
nl = 'EXTRAIRE' lterm &h ;
nomloi = 'CHAINE' loij nl &i &j &k &l ;
'SINON' ;
nomloi = 'CHAINE' loi &i &j &k &l ;
'FINSI' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . &k . &l = 'LECT' iop ;
'FIN' l ;
'FIN' k ;
'FIN' j ;
'FIN' i ;
'FIN' h ;
'SI' ('OU' laxi lsph) ;
'REPETER' i idim ;
'REPETER' j vdim ;
iop = iop '+' 1 ;
A . iop . &i . &j = 'LECT' ;
nomloi = 'CHAINE' loi &i &j '10' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FIN' j ;
'FIN' i ;
'REPETER' k idim ;
'REPETER' l vdim ;
iop = iop '+' 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '10' &k &l ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . &k . &l = 'LECT' iop ;
'FIN' l ;
'FIN' k ;
'FINSI' ;
'SI' lsph ;
iop = iop '+' 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '1010' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' jaco 2) ;
nldir = 'DIME' ldir ;
numop = '*' nldir ('**' vdim 2) ;
'SI' dir1 ;
'SI' ('OU' laxi lsph) ;
numop = '+' numop ('*' vdim 2) ;
'FINSI' ;
'SI' lsph ;
numop = '+' numop 1 ;
'FINSI' ;
'FINSI' ;
*
numder = vdim ;
numvar = idim ;
numdat = 0 ;
numcof = 0 ;
*
A = ININLIN numop numvar numdat numcof numder ;
numdat = 1 ;
numcof = numop ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' ivar numvar ;
A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
A . 'VAR' . &ivar . 'DISC' = dpdis ;
B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
B . 'VAR' . &ivar . 'DISC' = dpdis ;
'FIN' ivar ;
iop = 0 ;
'REPETER' i nldir ;
idir = 'EXTRAIRE' ldir &i ;
'REPETER' j vdim ;
'REPETER' l vdim ;
iop = iop '+' 1 ;
A . iop . idir . &j = 'LECT' ;
nomloi = 'CHAINE' loi idir &j idir &l ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . idir . &l = 'LECT' iop ;
'FIN' l ;
'FIN' j ;
'FIN' i ;
'SI' dir1 ;
'SI' ('OU' laxi lsph) ;
'REPETER' j vdim ;
iop = iop '+' 1 ;
A . iop . 1 . &j = 'LECT' ;
nomloi = 'CHAINE' loi '1' &j '10' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FIN' j ;
'REPETER' l vdim ;
iop = iop '+' 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '101' &l ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . &l = 'LECT' iop ;
'FIN' l ;
'FINSI' ;
'SI' lsph ;
iop = iop '+' 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '1010' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
*
'SI' ('EGA' jaco 3) ;
nldir = 'DIME' ldir ;
* numop = '**' vdim 2 ;
numop = '*' nldir vdim ;
'SI' ('ET' dir1 lsph) ;
numop = '+' numop 1 ;
'FINSI' ;
*
numder = vdim ;
numvar = idim ;
numdat = 0 ;
numcof = 0 ;
*
A = ININLIN numop numvar numdat numcof numder ;
numdat = 1 ;
numcof = numop ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' ivar numvar ;
A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
A . 'VAR' . &ivar . 'DISC' = dpdis ;
B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
B . 'VAR' . &ivar . 'DISC' = dpdis ;
'FIN' ivar ;
iop = 0 ;
'REPETER' i nldir ;
idir = 'EXTRAIRE' ldir &i ;
'REPETER' j vdim ;
iop = iop '+' 1 ;
A . iop . idir . &j = 'LECT' ;
nomloi = 'CHAINE' loi idir &j idir &j ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . idir . &j = 'LECT' iop ;
'FIN' j ;
'FIN' i ;
'SI' ('ET' dir1 lsph) ;
iop = iop '+' 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '1010' ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FINSI' ;
'FINSI' ;
*
* Partie commune
*
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discc ;
B . 'DAT' . 1 . 'VALEUR' = coef ;
*
jac = 'NLIN' gdisc _mt A B 'EREF' methgau ;
*
'RESPRO' jac ;
*
* End of procedure file TSURKTAN
*
'FINPROC' ;
*ENDPROCEDUR tsurktan
*BEGINPROCEDUR tsurresi
************************************************************************
* NOM : TSURRESI
* DESCRIPTION : Le résidu à annuler pour la tension de surface
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 17/01/2007, version initiale
* HISTORIQUE : v1, 17/01/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' TSURRESI ;
'ARGUMENT' _mt*'MAILLAGE' ;
'ARGUMENT' gdisc*'MOT' ;
'ARGUMENT' methgau*'MOT' ;
'ARGUMENT' dpdua*'LISTMOTS' ;
*
dpdis = gdisc ;
*
idim = 'VALEUR' 'DIME' ;
vdim = DEADUTIL 'DIMM' _mt ;
laxi = DEADUTIL 'AXI?' ;
lsph = DEADUTIL 'SPH?' ;
*
loi = 'CHAINE' 'TSUR' ;
*
'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' ;
*
dir1 = FAUX ;
'ARGUMENT' idir/'ENTIER' ;
'SI' ('EXISTE' idir) ;
ldir = 'LECT' idir ;
'SI' ('EGA' idir 1) ;
dir1 = VRAI ;
'FINSI' ;
'SINON' ;
'ARGUMENT' ldir/'LISTENTI' ;
'SI' ('NON' ('EXISTE' ldir)) ;
ldir = 'LECT' 1 'PAS' 1 idim ;
dir1 = VRAI ;
'FINSI' ;
'FINSI' ;
*
* Calcul du résidu
*
nldir = 'DIME' ldir ;
*
numop = '*' nldir vdim ;
term1 = ('OU' laxi lsph) 'ET' dir1 ;
'SI' term1 ;
numop = '+' numop 1 ;
'FINSI' ;
numder = vdim ;
numvar = 1 ;
numdat = 0 ;
numcof = 0 ;
*
A = ININLIN numop numvar numdat numcof numder ;
A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
A . 'VAR' . 1 . 'DISC' = 'CSTE' ;
A . 'VAR' . 1 . 'VALEUR' = 1.D0 ;
*
numvar = idim ;
numdat = 1 ;
numcof = numop ;
B = ININLIN numop numvar numdat numcof numder ;
'REPETER' ivar numvar ;
B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
B . 'VAR' . &ivar . 'DISC' = dpdis ;
'FIN' ivar ;
*
B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
B . 'DAT' . 1 . 'DISC' = discc ;
B . 'DAT' . 1 . 'VALEUR' = coef ;
*
iop = 0 ;
'REPETER' k nldir ;
idir = 'EXTRAIRE' ldir &k ;
'REPETER' l vdim ;
iop = '+' iop 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi idir &l ;
* 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . idir . &l = 'LECT' iop ;
'FIN' l ;
'FIN' k ;
* 'LISTE' A ; 'LISTE' iop ;
'SI' term1 ;
iop = '+' iop 1 ;
A . iop . 1 . 0 = 'LECT' ;
nomloi = 'CHAINE' loi '10' ;
B . 'COF' . iop . 'COMPOR' = nomloi ;
B . 'COF' . iop . 'LDAT' = 'LECT' 1 ;
B . iop . 1 . 0 = 'LECT' iop ;
'FINSI' ;
*
res = 'NLIN' gdisc _mt A B 'EREF' methgau ;
*
'RESPRO' res ;
*
* End of procedure file TSURRESI
*
'FINPROC' ;
*ENDPROCEDUR tsurresi
**
************************************************************************
*
*
* END OF PROCEDURES
*
*
************************************************************************
************************************************************************
*
*
* MAIN : 1) MESH
* 2) COMPUTATIONAL LOOP
* 3) TESTs
*
************************************************************************
*
* Construction du "modèle" (maillage)
* et des paramètres de départ
*
'SI' complet ;
raff = 2 ;
nitermax = 25 ;
* nitermax = 1 ;
critnf = 5.D-5 ;
critdf = 5.D-5 ;
* critnf = 5.D-4 ;
* critdf = 5.D-4 ;
'SINON' ;
raff = 2 ;
nitermax = 15 ;
critnf = 5.D-3 ;
critdf = 5.D-3 ;
'FINSI' ;
*
* Après ce 'SI' on met tous les paramètres constants
* et d'initialisation du calcul
*
lrest = 'EGA' ('TYPE' tdisc) 'TABLE' ;
'SI' ('NON' lrest) ;
*
* Paramètres de discrétisation spatiale
*
discg = 'QUAF' ; discv = 'QUAF' ; discp = 'LINM' ;
*
*
* Longueurs
*
*
rsou = 1. ; lav = 20. ; lap = 20. ; prof = 20. ;
diam = '*' rsou 2. ;
rzoom = 5. ; lrzoom = 'PROG' ('*' rzoom -1.) rzoom ;
*
*
* Création du maillage
*
tdisc = DEFMAIL rsou lav lap prof raff ;
tdisc . 'methgau' = 'TABLE' ;
tdisc . 'methgau' . 'mass' = 'GAM2' ;
tdisc . 'methgau' . 'amor' = 'GAM2' ;
tdisc . 'methgau' . 'rigi' = 'GAR2' ;
*tdisc . 'methgau' . 'mass' = 'GAU7' ;
*tdisc . 'methgau' . 'amor' = 'GAU7' ;
*tdisc . 'methgau' . 'rigi' = 'GAU7' ;
*
DISCG = TDISC . 'GEOM' . 'DISC' ;
DISCU = TDISC . 'XN' . 'DISC' ;
DISCV = TDISC . 'UN' . 'DISC' ;
NOMDEP = @STBL (TDISC . 'XN' . 'NOMPRI') ;
NOMVIT = @STBL (TDISC . 'UN' . 'NOMPRI') ;
NOMPRE = @STBL (TDISC . 'PN' . 'NOMPRI') ;
NOMFOR = @STBL (TDISC . 'XN' . 'NOMDUA') ;
*
*
_mtw = tdisc . 'mtw' . 'QUAF' ;
_cmtw = tdisc . 'cmtw' . 'QUAF' ;
_hau = tdisc . 'hau' . 'QUAF' ;
_gau = tdisc . 'gau' . 'QUAF' ;
_bas = tdisc . 'bas' . 'QUAF' ;
_dro = tdisc . 'dro' . 'QUAF' ;
mtw = tdisc . 'mtw' . discg ;
cmtw = tdisc . 'cmtw' . discg ;
mtwi = 'DIFF' ('CHANGER' mtw 'POI1')
('CHANGER' cmtw 'POI1') ;
hau = tdisc . 'hau' . discg ;
ihau = 'INVERSE' hau ;
gau = tdisc . 'gau' . discg ;
bas = tdisc . 'bas' . discg ;
dro = tdisc . 'dro' . discg ;
haub = 'ET' ('POIN' hau 'INITIAL')
('POIN' hau 'FINAL') ;
'SI' ('EGA' vdim 3) ;
_fro = tdisc . 'fro' .'QUAF' ;
fro = tdisc . 'fro' . discg ;
_rea = tdisc . 'rea' .'QUAF' ;
rea = tdisc . 'rea' . discg ;
_dhau = tdisc . 'dhau' .'QUAF' ;
dhau = tdisc . 'dhau' . discg ;
_bhau = tdisc . 'bhau' .'QUAF' ;
bhau = tdisc . 'bhau' . discg ;
amtw = 'ARETE' mtw ;
'FINSI' ;
*
pA = 'POIN' hau 'PROC' ('POIN' ('PROG' vdim * 0.)) ;
mpA = 'COULEUR' ('MANUEL' 'POI1' pA) 'ROUG' ;
* Maillage pour les blocages en vitesse
*'TRACER' 'CACH' mtw 'TITR' ('CHAINE' 'nbl=' ('NBEL' mtw))
* 'NCLK' ;
*
'SI' ('EGA' vdim 2) ;
mblux = gau ;
mblux = 'COULEUR' ('CHANGER' 'POI1' mblux) 'ROUG' ;
mblun = 'COULEUR' ('CHANGER' 'POI1' hau) 'ROUG' ;
* mbluy = gau 'ET' bas 'ET' dro ;
mbluy = gau 'ET' bas ;
mbluy = 'CHANGER' mbluy 'POI1' ;
mpoi = 'INTERSECTION' mblun mbluy ;
'SI' ('NEG' ('NBEL' mpoi) 0) ;
mblun = 'DIFF' mblun mpoi ;
'FINSI' ;
mblun = 'COULEUR' mblun 'ROUG' ;
mbluy = 'COULEUR' mbluy 'ROUG' ;
*mblpn = 'POIN' (GMAIL _mtr 'PN') 'INITIAL' ;
'FINSI' ;
'SI' ('EGA' vdim 3) ;
mblux = gau ;
mblux = 'COULEUR' ('CHANGER' 'POI1' mblux) 'ROUG' ;
mbluy = gau 'ET' fro 'ET' rea ;
mbluy = 'COULEUR' ('CHANGER' 'POI1' mbluy) 'ROUG' ;
mblun = 'COULEUR' ('CHANGER' 'POI1' hau) 'ROUG' ;
*! On fait ceci pour permettre l'élimination des relations
*! mbluz = gau 'ET' bas ;
mbluz = gau 'ET' bas 'ET' bhau ;
mbluz = 'CHANGER' mbluz 'POI1' ;
mpoi = 'INTERSECTION' mblun mbluz ;
'SI' ('NEG' ('NBEL' mpoi) 0) ;
mblun = 'DIFF' mblun mpoi ;
'FINSI' ;
mblun = 'COULEUR' mblun 'ROUG' ;
mbluz = 'COULEUR' mbluz 'ROUG' ;
*mblpn = 'POIN' (GMAIL _mtr 'PN') 'INITIAL' ;
'FINSI' ;
'SI' faux ;
mdd =mtw ;
'SI' ('EGA' vdim 3); mdd = cmtw ; 'FINSI' ;
'TRACER' ('ET' mdd mpA) 'TITR' 'Point dobservation pA' ;
'TRACER' ('ET' mdd mblux) 'TITR' 'Blocage UX' ;
'TRACER' ('ET' mdd mbluy) 'TITR' 'Blocage UY' ;
'TRACER' ('ET' mdd mblun) 'TITR' 'Blocage UN' ;
'FINSI' ;
* 'OPTI' 'MODE' plan ;
met = calimet _mtw discg 'GAU1' ;
************************************************************************
*
* COMPUTATIONAL LOOP
*
************************************************************************
* Re : nombre de Reynolds (convection / viscosité)
* Eu : nombre d'Euler (pression imposée / convection)
* FrEu : nombre de Froude * nombre d'Euler (pression imposée / gravité)
* We : (pression imposée / tension de surface)
*
'DEBPROC' calcul ;
'ARGUMENT' Re*'FLOTTANT' ;
'ARGUMENT' Eu*'FLOTTANT' ;
'ARGUMENT' FrEu*'FLOTTANT' ;
'ARGUMENT' We*'FLOTTANT' ;
'ARGUMENT' direct*'LOGIQUE' ;
'ARGUMENT' miter*'LOGIQUE' ;
*
*** Test 1 Re=50. Eu=10000. FrEu=1. We=10000.
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé. L'écoulement n'a pas
*** d'influence sur la forme de la surface.
*** Test 2 Re=50. Eu=10000. FrEu=1. We=1.
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé et la tension de surface.
*** L'écoulement n'a pas d'influence sur la forme de la surface.
*** Test 3 Re=50. Eu=1. FrEu=1. We=1.
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé et la tension de surface.
*** L'écoulement influence la forme de la surface (aspiration).
*
*Re= 50. ; Eu=1. ; FrEu=1. ; We = 1. ;
*Re= 50. ; Eu=10000. ; FrEu=1. ; We = 10000. ;
*Re = 200. ; Eu=1. ; FrEu=1. ; We = 0.5 ;
*Re = 250. ; Eu=1. ; FrEu=1. ; We = 1. ;
*
*
* Numérique
*
* dblcond : Double condensation des relations
* maspvid : matrice de pression vide
* diagrig : Rajoute la diagonale de la rigidité dans la matrice tangente
* direct : vrai = solveur direct
* faux = méthode de projection
* tbfor : faux = on prend en compte les forces de surface lorsqu'on
* résout le problème sur le déplacement de la surface
* vrai = on prend en compte les forces de surface lorsqu'on
* résout l'écoulement
* tjaco : vrai = on teste que les matrices jacobiennes calculées
* sont correctes en comparant avec une différence finie
* tsurb : faux = on supprime la composante 'UX' de la force de tension
* de surface sur les bords gauches et droits
* lpdro : vrai = on met une force de pression sur la surface de sortie
* chargée d'équilibrer l'incompressibilité du volume
* miter : vrai = méthodes itérative pour résoudre les systèmes linéaires
* faux = méthode direct
* soldir : 1 = Solveur direct de KRES
* 0 = Solveur direct de RESOU
* solvimp : niveau d'impression pour les solveurs linéaires.
* ltime : affichage des temps CPU pour les solveurs linéaires.
*
*direct = vrai ; miter = faux ;
dblcond = vrai ;
diagrig = ('NON' direct) ; adgr = 1. ;
solvimp = 0 ; ltime = faux ; soldir = 0 ;
maspvid = direct 'ET' miter ;
tbfor = faux ;
tjaco = FAUX ;
tsurb = faux ;
lpdro = vrai ;
idir = 1 ; jacoxf = 3 ; jacoxg = 0 ; jacoxv = 0 ;
jacoxt = 'LECT' 1 2 3 4;
*
* Paramètres du schéma non linéaire
*
*omegn = 0.5 ; nitn = 20 ; critn = 5.D-3 ;
*omegd = 0.5 ; nitd = 20 ; critd = 1.D-1 ; nbck = 16 ;
*omegn = 0.5 ; nitn = 5 ; critn = 1.D-3 ;
*omegd = 0.75 ; nitd = 20 ; critd = 1.D-3 ; nbck = 1 ;
omegn = 0.5 ; nitn = 2 ; critn = 1.D-4 ;
omegd = 0.75 ; nitd = 20 ; critd = 1.D-4 ; nbck = 1 ;
*omegn = 0.75 ; nitn = 2 ; critn = 1.D-4 ;
*omegd = 0.85 ; nitd = 20 ; critd = 1.D-4 ; nbck = 1 ;
*
* Paramètres de résolution des problèmes linéaires (cf. notice KRES)
* * 1 Le problème d'écoulement en méthode couplée
'SI' direct ;
tqp = 'TABLE' 'METHINV' ;
tqp . 'IMPR' = solvimp ; tqp . 'LTIME' = ltime ;
'SI' miter ;
** Le solveur de RESO ne fonctionne pas pour celui-là
tqp . 'TYPINV' = 3 ;
'SINON' ;
tqp . 'TYPINV' = 1 ;
'FINSI' ;
* * 1bis Le problème d'écoulement en méthode de projection
'SINON' ;
tqproj = 'TABLE' ;
tqproj . 'debug' = faux ;
tqproj . 'dblproj' = vrai ;
tqproj . 'scaldia' = vrai ;
tqproj . 'METHINVQDM' = 'TABLE' 'METHINV' ;
tqdm = tqproj . 'METHINVQDM' ;
tqdm . 'IMPR' = solvimp ; tqdm . 'LTIME' = ltime ;
tqproj . 'METHINVPRES' = 'TABLE' 'METHINV' ;
tpres = tqproj . 'METHINVPRES' ;
tpres . 'IMPR' = solvimp ; tpres . 'LTIME' = ltime ;
'SI' miter ;
tqdm . 'TYPINV' = 3 ; tqdm . 'NITMAX' =500 ;
tpres . 'TYPINV' = 3 ; tpres . 'NITMAX' =500 ;
'SINON' ;
tqdm . 'TYPINV' = soldir ;
tpres . 'TYPINV' = soldir ;
'FINSI' ;
'FINSI' ;
* * 2 Le problème de déplacement de la surface
tds = 'TABLE' 'METHINV' ;
tds . 'IMPR' = solvimp ; tds . 'LTIME' = ltime ;
tds . 'LDEPE' = FAUX ;
'SI' ('NON' miter) ;
** Le solveur de RESO ne fonctionne pas forcément pour celui-là
tds . 'TYPINV' = 1 ;
'SINON' ;
tds . 'TYPINV' = 3 ; tds . 'IMPR' = solvimp ;
tds . 'NITMAX' =500 ;
'FINSI' ;
* * 3 Le problème de déplacement du maillage (DEDU ADAP)
tdm = 'TABLE' 'METHINV' ;
tdm . 'IMPR' = solvimp ; tdm . 'LTIME' = ltime ;
'SI' ('NON' miter) ;
tdm . 'TYPINV' = soldir ;
'SINON' ;
tdm . 'TYPINV' = 2 ; tdm . 'NITMAX' =500 ;
* tdm . 'TYPINV' = 7 ; tdm . 'NITMAX' =500 ;
'FINSI' ;
*
ckonv = '/' 1. Eu ;
*ckonv = ckonv '*' 0. ;
crig = '/' 1. ('*' Re Eu) ;
cgra = '/' 1. FrEu ;
ctsur = '/' 1. We. ;
*
nomdir = 'CHAINE' '/test4/gounand/kong/' ;
nomfic = 'CHAINE' 'defila2' vdim 'd'
'Re' (MYENT Re)
'Eu' (MYENT Eu)
'FE' (MYENT FrEu)
'We' (MYENT We)
'r' raff ;
*************************************************************
* Début de l'algorithme de Résolution *
vol = GVOL _cmtw tdisc faux ;
'SI' debug ;
'MESSAGE' ('CHAINE' 'Volume initial = ' (formar vol 2)) ;
'FINSI' ;
pini = 0. ;
delp = 0. ; delp2 = 0. ;
lza = 'PROG' ;
*
*sol = vide 'CHPO' ;
sol = 'EXCO' 'UX' (GCHPO _mtw 'UN' 1.) 'UX' ;
itcou = 0 ;
*
* Ce FINSI correspond à 'SI' ('NON' lrest) ;
*tc mise en commentaire du finsi ci dessous
*
*'FINSI' ;
*DEFSUMM ;
*
* Ici, on calcule les termes qui ne dépendent pas de la déformation
* du maillage et de la solution
*
* 1 Eventuelle matrice de pression vide
'SI' maspvid ;
mpvid = GMASS2 _mtw tdisc 'NPRI' 'PN' 'NDUA' 'PN'
'NCOF' 'CSTE' 'FCOF' 0. ;
'FINSI' ;
* 2 Matrices de blocage en x et y (voire z et P)
cblox = '+' ('MANUEL' 'CHPO' mblux 1 'UX' 0.)
('MANUEL' 'CHPO' gau 1 'UX' 1.) ;
mblox = 'BLOQUE' 'UX' mblux ;
smblox = 'DEPIMPOSE' mblox cblox ;
*
mbloy = 'BLOQUE' 'UY' mbluy ;
'SI' ('EGA' vdim 3) ;
mbloz = 'BLOQUE' 'UZ' mbluz ;
'FINSI' ;
* mp = GMAIL _mtw 'PN' ;
* mblop = 'BLOQUE' 'T' ('POIN' mp 'INITIAL') ;
*
* Boucle d'itérations globales
*
'REPETER' it nitermax ;
* 'MESSAGE' ('CHAINE' 'itcou = ' ('+' itcou 1)) ;
*
* 1 Résolution Navier-Stokes Incompressible (surface fixée)
*
'SI' lpdro ; delp = '+' delp delp2 ; 'FINSI' ;
*
* 1.1 Calcul des termes LINEAIRES de Navier-Stokes
*
* 1.1.1 Pression imposée en surface
*
'SI' ('EGA' vdim 2) ;
rhau = 'COORDONNEE' 1 hau ;
'SINON' ;
* rhau = 'COORDONNEE' 1 hau ;
xhau = 'COORDONNEE' 1 hau ;
yhau = 'COORDONNEE' 2 hau ;
rhau = '**' ('+' ('**' xhau 2) ('**' yhau 2)) 0.5 ;
'FINSI' ;
pfor = 'EXP' ('*' ('**' ('/' rhau rsou) 2) -1.) ;
fpfor = GFORC _hau tdisc pfor ;
ktforx = GKFORC _hau tdisc pfor jacoxf ;
* ktforx0 = GKFORC _hau tdisc pfor 0 ;
'SI' ('EGA' jacoxf 3) ;
ktforx = '*' ktforx 0. ;
'FINSI' ;
* TRVEC hau fpfor 'FPFOR' ;
*
* 1.1.2 Potentiel de gravité imposé en surface
*
fpgra = GGRAVI _hau tdisc cgra 0. ;
ktgrax = GKGRAVI _hau tdisc jacoxg ('*' cgra -1.) 0. ;
* ktgrax0 = GKGRAVI _hau tdisc 0 ('*' cgra -1.) 0. ;
*
* 1.1.3 Forces de tension de surface
*
mgtens = tdisc . 'methgau' . 'rigi' ;
ftsuri = TSURRESI _hau discg mgtens nomfor ('*' -1. ctsur) ;
'SI' ('NON' tsurb) ;
ftsurx = 'EXCO' 'FX' ftsuri 'FX' ;
ftsura = 'REDU' ftsurx haub ;
ftsur = '-' ftsuri ftsura ;
'SINON' ;
ftsur = ftsuri ;
'FINSI' ;
ktsurx = TSURKTAN _hau discg mgtens nomvit nomfor ('*' -1. ctsur)
jacoxt ;
* ktsurx0 = TSURKTAN _hau discg mgtens nomvit nomvit
* ('*' -1. ctsur) ('LECT' 1 2 3 4) ;
*
* 1.1.4 Eventuel terme de pression sur le bord droit
*
* 'MESSAGE' ('CHAINE' 'delp=' delp) ;
* 'MESSAGE' ('CHAINE' 'delp2=' delp2) ;
'SI' lpdro ;
lpn = 'PROG' vdim * 0. ;
'REMPLACER' lpn 1 ('*' delp -1.) ;
ftpdr = GMASS2 _dro tdisc 'NPRI' 'UN'
'FPRI' lpn
'NDUA' 'UN' ;
'FINSI' ;
*
* 1.1.5 Rigidité
*
gri = GRIG2 _mtw tdisc 'NPRI' 'UN' 'NDUA' 'UN' ;
gri = '*' gri crig ;
*
* 1.1.6 Couplage vitesse-pression (conservation de la masse)
*
gdiv = GDIV2 _mtw tdisc 'NPRI' 'UN' 'NDUA' 'PN' 'GBBT' ;
gdiv = '*' gdiv -1. ;
*
* 1.1.7 Eventuelle diagonale de la rigidité
*
'SI' diagrig ;
gridia = 'EXTRAIRE' gri 'DIAG' ;
grid = 'MANUEL' 'RIGI' gridia ;
grid = grid '*' adgr ;
* nel = 'NBEL' _mtw ;
* dx = '/' 1. ('**' nel ('/' 1. vdim)) ;
* dt = '/' 0.01 dx ;
* lidt = 'PROG' vdim * ('/' 1. dt) ;
* 'MESSAGE' ('CHAINE' 'Nel=' nel ' dx=' (formar dx 2)
* ' dt=' (formar dt 2)) ;
* gma = GMASS2 _mtw tdisc 'NPRI' 'UN' 'NDUA' 'UN'
* 'NCOF' 'CSTE' 'FCOF' ('/' 1. dt) ;
'FINSI' ;
*
* 1.2 Boucle d'itérations NON linéaires pour Navier-Stokes
*
'REPETER' itn nitn ;
sol = 'EXCO' (nomvit 'ET' nompre) sol 'NOID' ;
*
* 1.2.1 Matrice de convection
*
gugr = gugrad2 _mtw tdisc 'NPRI' 'UN' 'NDUA' 'UN'
'NVIT' 'UN' 'CVIT' sol ;
gugr = '*' gugr ckonv ;
*
*
* 1.2.2 Blocage de la surface dans la direction normale
*
vnor = DEFDD tdisc 0 ;
* TRVEC hau nomdep vnor 'Vnor' ;
mblon = 'BLOQUE' 'DEPL' 'DIRE' vnor mblun ;
mblot = mblox 'ET' mbloy 'ET' mblon ;
'SI' ('EGA' vdim 3) ;
mblot = mblot 'ET' mbloz ;
'FINSI' ;
*
* 1.2.3 Matrices tangente et déséquilibre
*
ktot = gugr 'ET' gri 'ET' gdiv 'ET' mblot ;
ktg = ('*' (gugr 'ET' gri) ('/' 1. omegn)) 'ET' gdiv
'ET' mblot ;
'SI' diagrig ;
ktg = ktg 'ET' ('*' grid ('/' 1. omegn)) ;
'FINSI' ;
'SI' maspvid ;
ktg = ktg 'ET' mpvid ;
'FINSI' ;
ftot = smblox ;
'SI' tbfor ;
ftot = ftot '+' fpgra '+' ftsur '+' fpfor ;
'FINSI' ;
'SI' lpdro ;
ftot = '+' ftot ftpdr ;
'FINSI' ;
ftot = '-' ftot ('*' ktot sol) ;
*
* 1.2.4 Résolution (si dblcond=vrai, on effectue une deuxième fois
* l'élimination des contraintes, la première étant faite
* dans KRES ou GRESPR. Ceci permet d'éliminer effectivement
* toutes les relations de blocage suivant la normale)
*
'OPTI' impi 0 ;
'SI' dblcond ;
ktgc ftotc ftot1 = 'KOPS' 'CONDENSE' ktg ftot ;
'SINON' ;
ktgc ftotc = ktg ftot ;
'FINSI' ;
'SI' direct ;
dsolc = MONRES ktgc ftotc tqp ;
'SINON' ;
tqproj . 'noprec' = 'EGA' &itn 1 ;
dsolc = GRESPR ktgc ftotc tdisc tqproj ;
'FINSI' ;
*
'SI' dblcond ;
dsol = 'KOPS' 'EVAPORE' dsolc ktg ftot ftot1 ;
'SINON' ;
dsol = dsolc ;
'FINSI' ;
* HCHPO dsol 'dsol' ;
'OPTI' impi 0 ;
sol = '+' sol dsol ;
vit = 'EXCO' nomdep sol ;
pre = 'EXCO' nompre sol ;
mdv = 'MAXIMUM' dsol 'ABS' 'AVEC' nomvit ;
mdvr = '/' mdv ('MAXIMUM' vit 'ABS') ;
'SI' debug ;
'MESSAGE' ('CHAINE' ' ' 'itn=' &itn
' mdv=' (formar mdv 2) ' mdvr=' (formar mdvr 2)) ;
* HCHPO sol 'sol' ;
'FINSI' ;
*
'SI' ('EGA' vdim 2) ; rvit = vit ;
'SINON' ; rvit = 'REDU' vit cmtw ; 'FINSI' ;
'SI' (graph 'ET' interact) ;
TRVEC mtw nomvit rvit 'Vit' vrai ;
'FINSI' ;
'SI' ('<' mdvr critn) ;
'QUITTER' itn ;
'FINSI' ;
'FIN' itn ;
*
* 1.3 Post-traitement après calcul de la vitesse
*
* 1.3.1 Variables primales
*
'SI' graphqdm ;
DEFVIT ;
DEFVSURF ;
* DEFVSURF rzoom ;
'FINSI' ;
*
* 1.3.2 Bilan des forces
*
fpre = 'EXCO' nomfor ('*' ('*' gdiv -1.) sol) ;
fblot = 'REACTION' mblot sol ;
frig = '*' ('*' gri -1.) sol ;
fugr = '*' ('*' gugr -1.) sol ;
tqf = 'TABLE' 'ESCLAVE' ; tqt = 'TABLE' 'ESCLAVE' ; i=1 ;
tqf . i = fpre ; tqt . i = 'pr' ; i = i '+' 1 ;
tqf . i = frig ; tqt . i = 'ri' ; i = i '+' 1 ;
tqf . i = fugr ; tqt . i = 'co' ; i = i '+' 1 ;
tqf . i = fblot ; tqt . i = 'bl' ; i = i '+' 1 ;
'SI' lpdro ;
tqf . i = ftpdr ; tqt . i = 'ps' ; i = i '+' 1 ;
'FINSI' ;
'SI' tbfor ;
tqf . i = fpgra ; tqt . i = 'gr' ; i = i '+' 1 ;
tqf . i = ftsur ; tqt . i = 'ts' ; i = i '+' 1 ;
tqf . i = fpfor ; tqt . i = 'pi' ; i = i '+' 1 ;
'FINSI' ;
desfq = 'ET' tqf ;
'SI' ('ET' graphqdm ('EGA' vdim 2)) ;
tqf . i = '*' desfq -1. ; tqt . i = 'ds' ; i = i '+' 1 ;
TRVEC mtw nomfor tqf tqt 'VECT' 'VNOR' ;
tqfr = 'ASSI' 'TOUS' 'REDU' tqf mtwi ;
TRVEC mtw nomfor tqfr tqt 'VECT' 'VNOR' ;
*
xhau = 'COORDONNEE' 1 hau ;
mhau = gmass2 _hau tdisc 'NPRI' discv 'NDUA' discv ;
mvnor = '*' vnor -1. ;
vtan = '*' ('PVEC' vnor nomdep nomdep) -1. ;
DESSVEC ihau xhau 'x' 'Fnor' nomfor mvnor tqf tqt mhau ;
* DESSVEC ihau xhau 'x' 'Fnor' nomfor mvnor tqf tqt mhau lrzoom ;
DESSVEC ihau xhau 'x' 'Ftan' nomfor vtan tqf tqt mhau ;
* DEFQFORV tqf tqt ;
* DEFQFORS rzoom ;
'FINSI' ;
* 'OPTION' 'DONN' 5 ;
*
* 2 Résolution Déplacement de la surface dans une direction
* donnée (vdir) à partir du déséquilibre calculé
* à l'étape 1 (normal à la surface).
*
* 2.1 Déséquilibre normal à la surface
*
fblon = 'REDU' fblot hau ;
mfblon = '*' fblon -1. ;
*
* 2.2 Suivant tbfor, les forces normales "dans le continu" qui ne
* travaillent donc pas quand la surface est fixée peuvent
* être prises en compte, soit à l'étape 1, soit à l'étape 2
* Il s'agit : de la tension de surface, de la pression imposée
* et du potentiel lié à la gravité
* Il semble que la prise en compte à l'étape 2 soit plus stable
* par contre, il y a léger déséquilibre tangentiel à la fin
* du calcul FAUX ? tbfor marche maintenant
*
vdir = '*' (DEFDD tdisc idir) -1. ;
* TRVEC hau nomdep vdir 'Vdir' ;
mfblond = 'PSCAL' mfblon vdir nomfor nomvit ;
mfblond = 'CHANGER' 'ATTRIBUT' mfblond 'NATURE' 'DISCRET' ;
'SI' tbfor ;
desnd = mfblond ;
'SINON' ;
fpgrad = 'PSCAL' fpgra vdir nomfor nomvit ;
fpgrad = 'CHANGER' 'ATTRIBUT' fpgrad 'NATURE' 'DISCRET' ;
ftsurd = 'PSCAL' ftsur vdir nomfor nomvit ;
ftsurd = 'CHANGER' 'ATTRIBUT' ftsurd 'NATURE' 'DISCRET' ;
fpford = 'PSCAL' fpfor vdir nomfor nomvit ;
fpford = 'CHANGER' 'ATTRIBUT' fpford 'NATURE' 'DISCRET' ;
desnd = mfblond '+' fpgrad '+' ftsurd '+' fpford ;
'FINSI' ;
* hchpo desn 'desn' ;
ktotx = ktgrax 'ET' ktforx 'ET' ktsurx ;
ktotx = '*' ktotx -1. ;
*
* 2.3 Contrainte sur le volume
*
volc = GVOL _cmtw tdisc ;
dvol = ('-' vol volc) '*' -1. ;
kvol = GKVOL _cmtw tdisc jacoxv ;
*
ok = FAUX ;
omd = omegd ;
*
* 2.5 Résolution avec backtracking
*
'REPETER' bck nbck ;
* 2.5.1 Réduction du système sur l'inconnue déplacement dans une direction
ktot ftot = PROJSYSC tdisc vdir ('*' ktotx ('/' 1. omd))
desnd kvol dvol ;
sold = MONRES ktot ftot tds ;
dep = '*' ('EXCO' 'SCAL' sold) vdir ;
mulag = 'EXCO' 'LX' sold 'LX' ;
delp2 = 'MAXIMUM' mulag ;
*
mdep = 'MAXIMUM' dep 'ABS' ;
mdepr = '/' mdep prof ;
odep = dep ;
'SI' debug ;
chmes = 'CHAINE' ' dvol=' (formar dvol 1) ;
chmes2 = 'CHAINE' ' mdep=' (formar mdep 1)
' mdepr=' (formar mdepr 1)
' delp2=' (formar delp2 1) ;
'SI' ('>' &bck 1) ;
chmes = 'CHAINE' '! bck=' &bck ' ' chmes ;
'FINSI' ;
'MESSAGE' chmes ; 'MESSAGE' chmes2 ;
'FINSI' ;
'SI' ('<' mdep critd) ;
'QUITTER' bck ;
'SINON' ;
omd = '/' omd 2. ;
'FINSI' ;
'FIN' bck ;
*
* 2.6 Post-traitement après calcul du déplacement
*
* Forces
fpvolnd = '*' ktot ('*' mulag -1.) ;
*
tdf = 'TABLE' 'ESCLAVE' ; tdt = 'TABLE' 'ESCLAVE' ; i=1 ;
tdf . i = mfblond ; tdt . i = 'Fint' ; i = i '+' 1 ;
tdf . i = fpvolnd ; tdt . i = 'Incomp.' ; i = i '+' 1 ;
'SI' ('NON' tbfor) ;
tdf . i = fpgrad ; tdt . i = 'RhoG' ; i = i '+' 1 ;
tdf . i = ftsurd ; tdt . i = 'Tsurf' ; i = i '+' 1 ;
tdf . i = fpford ; tdt . i = 'SouP' ; i = i '+' 1 ;
'FINSI' ;
desfd = 'ET' tdf ;
'SI' ('ET' graphsur ('EGA' vdim 2)) ;
tdf . i = desfd ; tdt . i = 'Des' ; i = i '+' 1 ;
*
xhau = 'COORDONNEE' 1 hau ;
mhau = gmass2 _hau tdisc 'NPRI' discv 'NDUA' discv ;
DESSVEC ihau xhau 'x' 'Fdir' tdf tdt mhau ;
'FINSI' ;
*
* 3 Déplacement du maillage
*
'SI' ('EGA' vdim 2) ;
muy = bas 'ET' hau ;
* bux = 'BLOQUE' 'UX' mtw ;
buy = 'BLOQUE' 'UY' muy ;
btot = buy ;
cblo = ('MANUEL' 'CHPO' cmtw 2 'UX' 0. 'UY' 0.) '+'
odep ;
ftot = 'DEPIMPOSE' buy cblo ;
dxv = 'DEDU' adap mtw btot ftot 'METR' met 'CSTE'
'NITM' 1 'IDIR' vdim 'TINV' tdm ;
'SINON' ;
muz = bas 'ET' hau ;
* bux = 'BLOQUE' 'UX' mtw ;
* buy = 'BLOQUE' 'UY' mtw ;
buz = 'BLOQUE' 'UZ' muz ;
* btot = bux 'ET' buy 'ET' buz ;
btot = buz ;
cblo = ('MANUEL' 'CHPO' muz 1 'UZ' 0.) '+'
odep ;
ftot = 'DEPIMPOSE' buz cblo ;
dxv = 'DEDU' adap mtw btot ftot 'METR' met 'CSTE'
'NITM' 1 'IDIR' vdim 'TINV' tdm ;
'FINSI' ;
'FORME' dxv ;
*
* 3.2 Post-traitement après déplacement du maillage
*
za = 'COORDONNEE' vdim pA ;
zcmt = 'COORDONNEE' vdim hau ;
miz = 'MINIMUM' zcmt ; maz = 'MAXIMUM' zcmt ;
miv = 'MINIMUM' vit ; mav = 'MAXIMUM' vit ;
'MESSAGE' ('CHAINE' 'It=' ('+' itcou 1)
' zA=' (formar zA 2) ' miz=' (formar miz 2)
' maz=' (formar maz 2) ' miv=' (formar miv 2)
' mav=' (formar mav 2) ) ;
lza = 'ET' lza ('PROG' zA) ;
*
'SI' graphsur ;
'SI' ('EGA' vdim 2) ;
lhau = ihau ;
'SINON' ;
lhau = dhau ;
'FINSI' ;
xhau = 'COORDONNEE' 1 lhau ;
zhau = 'COORDONNEE' vdim lhau ;
DESSVEC lhau xhau 'x' 'z(x)' zhau 'z' ;
DESSVEC lhau xhau 'x' 'z(x)' zhau 'z' lrzoom ;
'FINSI' ;
*
* 4 Critère de convergence
*
'SI' ('ET' ('<' mdepr critdf) ('<' mdvr critnf)) ;
itcou = '+' itcou 1 ;
'QUITTER' it ;
'FINSI' ;
itcou = '+' itcou 1 ;
'FIN' it ;
*
* 5 Post traitement en fin de calcul
*
* 5.1 Altitude de A en fonction des itérations
*
'SI' graph ;
dza = 'DIME' lza ;
'SI' (> dza 1) ;
lit = 'PROG' 1. 'PAS' 1 dza ;
tabev = 'TABLE' ; tabt = 'TABLE' ;
tabev . 1 = 'EVOL' 'MANU' lit lza ;
tabt . 1 = 'CHAINE' 'Z pA' ;
tix = 'iter' ; tiy = 'z' ; tit = 'CHAINE' tiy '(' tix ')' ;
dessevol (@STBL tabev) tabt tit tix tiy ;
'FINSI' ;
*
* 5.2 Quantités primales
*
DEFVIT ;
DEFVSURF ;
*
* 5.3 Bilan global des forces :
* Ce serait mieux de les recalculer ?
* Mais bon, si on a convergé, c'est ok.
*
fblor = fblot '+' mfblon ;
tgf = 'TABLE' 'ESCLAVE' ; tgt = 'TABLE' 'ESCLAVE' ; i=1 ;
tgf . i = fpre ; tgt . i = 'pr' ; i = i '+' 1 ;
tgf . i = frig ; tgt . i = 'ri' ; i = i '+' 1 ;
tgf . i = fugr ; tgt . i = 'co' ; i = i '+' 1 ;
tgf . i = fblor ; tgt . i = 'bl' ; i = i '+' 1 ;
'SI' lpdro ;
tgf . i = ftpdr ; tgt . i = 'ps' ; i = i '+' 1 ;
'FINSI' ;
tgf . i = fpgra ; tgt . i = 'gr' ; i = i '+' 1 ;
tgf . i = ftsur ; tgt . i = 'ts' ; i = i '+' 1 ;
tgf . i = fpfor ; tgt . i = 'pi' ; i = i '+' 1 ;
*
desfg = 'ET' tgf ;
'SI' ('ET' graph ('EGA' vdim 2)) ;
tgf . i = '*' desfg -1. ; tgt . i = 'ds' ; i = i '+' 1 ;
TRVEC mtw nomfor tgf tgt 'VECT' 'VNOR' ;
tgfr = 'ASSI' 'TOUS' 'REDU' tgf mtwi ;
TRVEC mtw nomfor tgfr tgt 'VECT' 'VNOR' ;
*
xhau = 'COORDONNEE' 1 hau ;
mhau = gmass2 _hau tdisc 'NPRI' discv 'NDUA' discv ;
mvnor = '*' vnor -1. ;
vtan = '*' ('PVEC' vnor nomdep nomdep) -1. ;
DESSVEC ihau xhau 'x' 'Fnor' nomfor mvnor tgf tgt mhau ;
DESSVEC ihau xhau 'x' 'Ftan' nomfor vtan tgf tgt mhau ;
'FINSI' ;
'FINSI' ;
*
* 6 Sauvegarde
*
'SI' lsauv ;
'OUBL' KTG ; 'OUBL' KTOT ; 'OUBLIER' MHAU ;
'OUBLIER' btot ;'OUBLIER' buz ; 'OUBLIER' mbloy ; 'OUBLIER' mblox ;
'OUBL' BUY ; 'OUBL' BUX ; 'OUBL' KTOTX ; 'OUBL' KTPREX0 ;
'OUBLIER' ktotr ; 'OUBLIER' ktgc ;
'OUBL' KTPREX ; 'OUBL' KTUGRX ; 'OUBL' KTRIGX ;
'OUBL' MBLOT ; 'OUBL' MBLON ; 'OUBL' MBLOZ ;
'OUBL' GUGR ; 'OUBL' GRI ; 'OUBL' GRID ;
'OUBL' KTSURX ; 'OUBL' KTGRAX ; 'OUBLIER' ktforx ;
'OUBL' GDIV ; 'OUBLIER' mpvid ;
'SI' ('NON' direct) ; 'OUBLIER' tqproj 'preco' ; 'FINSI' ;
list *MATRIK ;
list *rigidite ;
fic = 'CHAINE' nomdir nomfic 'it' itcou '.sauv' ;
'MESSAGE' ('CHAINE' 'Saving ' fic '...') ;
'OPTI' 'SAUV' fic ;
'SAUV' ;
'TEMPS' 'IMPR' ;
'FINSI' ;
*'MESSAGE' ('CHAINE' 'zA=' zA) ;
*'MESSAGE' ('CHAINE' 'miz=' miz) ;
*'MESSAGE' ('CHAINE' 'maz=' maz) ;
*'MESSAGE' ('CHAINE' 'miv=' miv) ;
*'MESSAGE' ('CHAINE' 'mav=' mav) ;
*'SI' interact ;
* 'OPTION' 'DONN' 5 'ECHO' 1 ;
*'SINON' ;
* 'FIN' ;
*'FINSI' ;
'RESPRO' zA miz maz ;
'FINPROC' ;
************************************************************************
*
* END OF COMPUTATIONAL LOOP
*
************************************************************************
*
************************************************************************
*
* TEST PART
*
************************************************************************
*
lpass = VRAI ;
'SAUTER' 2 'LIGNE' ; 'OPTI' 'ECHO' 1 ;
***
*** Test 1 Re=50. Eu=10000. FrEu=1. We=10000.
***
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé. L'écoulement n'a pas
*** d'influence sur la forme de la surface.
***
***
'OPTI' 'ECHO' 0 ;
Re = 50. ;
Eu= 10000. ;
FrEu = 1. ;
We = 10000. ;
direct = faux ; miter = faux ;
za miz maz = calcul Re Eu FrEu We direct miter ;
dz = '-' maz miz ;
* Reference values
zaref = -0.956 ; dzref = 1. ;
* Tests
AFFVAR zaref 'zaref' za 'za' ;
AFFVAR dzref 'dzref' dz 'dz' ;
errv = 2.D-2 ;
err1 = errrel za zaref ; tst1 = '<' err1 errv ;
err2 = errrel dz dzref ; tst2 = '<' err2 errv ;
tst = tst1 'ET' tst2 ;
'MESSAGE' ('CHAINE' 'Test 1 :') ;
'MESSAGE' ('CHAINE' ' err1 = ' err1) ;
'MESSAGE' ('CHAINE' ' err2 = ' err2) ;
'SI' tst ;
'MESSAGE' 'Test 1 OK' ;
'SINON' ;
'MESSAGE' '!!! Test 1 not passed ' ;
'FINSI' ;
lpass = lpass 'ET' tst ;
'SAUTER' 2 'LIGNE' ; 'OPTI' 'ECHO' 1 ;
*'OPTION' 'DONN' 5 ;
***
*** Test 2 Re=50. Eu=10000. FrEu=1. We=1.
***
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé et la tension de surface.
*** L'écoulement n'a pas d'influence sur la forme de la surface.
***
'OPTI' 'ECHO' 0 ;
Re = 50. ;
Eu= 10000. ;
FrEu = 1. ;
We = 1. ;
direct = faux ; miter = vrai ;
za miz maz = calcul Re Eu FrEu We direct miter ;
dz = '-' maz miz ;
* Reference values
zaref = -0.505 ; dzref = 0.55 ;
* Tests
AFFVAR zaref 'zaref' za 'za' ;
AFFVAR dzref 'dzref' dz 'dz' ;
errv = 2.D-2 ;
err1 = errrel za zaref ; tst1 = '<' err1 errv ;
err2 = errrel dz dzref ; tst2 = '<' err2 errv ;
tst = tst1 'ET' tst2 ;
'MESSAGE' ('CHAINE' 'Test 2 :') ;
'MESSAGE' ('CHAINE' ' err1 = ' err1) ;
'MESSAGE' ('CHAINE' ' err2 = ' err2) ;
'SI' tst ;
'MESSAGE' 'Test 2 OK' ;
'SINON' ;
'MESSAGE' '!!! Test 2 not passed ' ;
'FINSI' ;
lpass = lpass 'ET' tst ;
'SAUTER' 2 'LIGNE' ; 'OPTI' 'ECHO' 1 ;
***
*** Test 3 Re=50. Eu=1. FrEu=1. We=1.
***
*** La pression imposée est équilibrée par le poids
*** de fluide déplacé et la tension de surface.
*** L'écoulement influence la forme de la surface (aspiration).
***
***
'OPTI' 'ECHO' 0 ;
Re = 50. ;
Eu= 1. ;
FrEu = 1. ;
We = 1. ;
direct = vrai ; miter = faux ;
za miz maz = calcul Re Eu FrEu We direct miter ;
dz = '-' maz miz ;
* Reference values
zaref = -1.07 ; dzref = 1.21 ;
* Tests
AFFVAR zaref 'zaref' za 'za' ;
AFFVAR dzref 'dzref' dz 'dz' ;
errv = 2.D-2 ;
err1 = errrel za zaref ; tst1 = '<' err1 errv ;
err2 = errrel dz dzref ; tst2 = '<' err2 errv ;
tst = tst1 'ET' tst2 ;
'MESSAGE' ('CHAINE' 'Test 3 :') ;
'MESSAGE' ('CHAINE' ' err1 = ' err1) ;
'MESSAGE' ('CHAINE' ' err2 = ' err2) ;
'SI' tst ;
'MESSAGE' 'Test 3 OK' ;
'SINON' ;
'MESSAGE' '!!! Test 3 not passed ' ;
'FINSI' ;
lpass = lpass 'ET' tst ;
'SAUTER' 2 'LIGNE' ;
'SI' lpass ;
'MESSAGE' 'Tout sest bien passe' ;
'SINON' ;
'MESSAGE' 'Il y a eu des erreurs' ;
'FINSI' ;
'SAUTER' 2 'LIGNE' ;
'SI' ('NON' lpass) ;
'ERREUR' 5 ;
'FINSI' ;
************************************************************************
*
* END OF TEST PART
*
************************************************************************
'SI' interact ;
'OPTION' 'DONN' 5 'ECHO' 1 ;
'FINSI' ;
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer