* fichier : ccar_forc1.dgibi
'OPTION' 'ECHO' 0 ;
************************************************************************
* NOM : VALREL
* DESCRIPTION : Calcul d'une valeur relative
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 16/12/2004, version initiale
* HISTORIQUE : v1, 16/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' VALREL ;
'ARGUMENT' val*'FLOTTANT' ;
'ARGUMENT' valref*'FLOTTANT' ;
*
'SI' ('<' ('ABS' valref) 1.D-10) ;
echref = 1.D0 ;
'SINON' ;
echref = valref ;
'FINSI' ;
*
valabs = '/' val echref;
*
'RESPRO' valabs ;
*
* End of procedure file VALREL
*
'FINPROC' ;
*
* Tracé des vitesses
*
'DEBPROC' TRACVIT ;
'ARGUMENT' rvx*'TABLE' ;
rv = rvx . 'EQEX' ;
nuit = rv . 'NUITER' ;
chv = rv . 'INCO' . 'UN' ;
maxv = 'MAXIMUM' chv 'ABS' ;
'SI' ('<' maxv 1.D-8) ;
maxv = 1.D0 ;
'FINSI' ;
echvit = maxv ;
mt = 'DOMA' (rvx . 'DOMZ') 'MAILLAGE' ;
echmvi = '**' ('/' ('MESURE' mt) ('NBEL' mt))
('/' 1.D0 ('VALEUR' 'DIME')) ;
vref = '/' ('*' echmvi 2.D0) echvit ;
* Vecteur unité
mpA = mt 'POIN' 'PROC' (0. 0.) ;
cvecu = 'MANUEL' 'CHPO' mpA 2 'UX' echvit 'UY' 0.D0
'NATURE' 'DISCRET' ;
vecvit1 = 'VECTEUR' chv vref 'DEPL' 'JAUN' ;
vecvit2 = 'VECTEUR' cvecu vref 'DEPL' 'ROUG' ;
vecvit = vecvit1 'ET' vecvit2 ;
tit = 'CHAINE' 'Vitesse ; nuiter=' nuit ' ; echvit=' echvit ;
'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit 'NCLK' ;
mat chpo = 'KOPS' 'MATRIK' ;
'RESPRO' mat chpo ;
'FINPROC' ;
*
* Stratégie de pas de temps automatique et de gestion de
* la non-linéarité
*
'DEBPROC' STRANLIN ;
'ARGUMENT' rvx*'TABLE' ;
rv = rvx . 'EQEX' ;
nuit = rv . 'NUITER' ;
chv = rv . 'INCO' . 'UN' ;
'SI' ('EGA' nuit 1) ;
rv . 'UI' = 'COPIER' chv ;
rv . 'UIP' = 'COPIER' chv ;
'SINON' ;
chvi = rv . 'UIP' ;
dchv = '-' chv chvi ;
rv . 'UIP' = 'COPIER' chv ;
ndui = VALREL ('MAXIMUM' dchv) ('MAXIMUM' chv) ;
* 'MESSAGE' ('CHAINE' 'ndui = ' ndui) ;
tes1 = ('EGA' nuit nitermax) ;
tes2 = ('<' ndui cvgnlin) ;
quitnlin = 'OU' tes1 tes2 ;
'SI' quitnlin ;
'SI' tes2 ;
ifmul = '/' ndui objdv ;
ifmul = '+' ifmul 1.D-10 ;
fmul = '/' 1.D0 ifmul ;
'SI' ('>' fmul fmdt) ;
fmul = fmdt ;
'FINSI' ;
'SI' ('<' fmul ('/' 1.D0 fmdt)) ;
fmul = '/' 1.D0 fmdt ;
'FINSI' ;
'SINON' ;
fmul = fredt ;
'FINSI' ;
* 'MESSAGE' ('CHAINE' 'fmul=' fmul) ;
rv . 'INCO' . 'DT' = '*' fmul (rv . 'INCO' . 'DT') ;
rv . 'STOPITER' = VRAI ;
*
tps = rv . 'PASDETPS' . 'TPS' ;
ittps = rv . 'PASDETPS' . 'NUPASDT' ;
chvp = rv . 'UI' ;
dchv = '-' chv chvp ;
ndup = VALREL ('MAXIMUM' dchv) ('MAXIMUM' chv) ;
test1 = 'OU' ('>' tps tfinal) ('>' ittps npdtmax) ;
test2 = ('<' ndup dvfinal) ;
quitpdt = 'OU' test1 test2 ;
'SI' quitpdt ;
rv . 'STOPPDT' = VRAI ;
rv . 'CVGOK' = test2 ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
mat chpo = 'KOPS' 'MATRIK' ;
'RESPRO' mat chpo ;
'FINPROC' ;
************************************************************************
* NOM : CCAR_FORC1
* DESCRIPTION : Cavité à paroi défilante avec cisaillement imposé
* en surface.
* Le but est de tester les nouveaux indices de exec :
* STOPPDT, STOPITER et NUITER
*
*
*
*
* LANGAGE : GIBIANE-CAST3M
* AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
* mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION : v1, 13/12/2006, version initiale
* HISTORIQUE : v1, 13/12/2006, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
interact = FAUX ;
graph = FAUX ;
*
'OPTION' 'DIME' 2 'ELEM' 'QUA8' ;
'SI' ('NON' interact) ;
'OPTION' 'TRAC' 'PS' ;
'SINON' ;
'OPTION' 'TRAC' 'X' ;
'FINSI' ;
*
* Stratégie pour le pas de temps et la non-linéarité
* tfinal : temps d'arrêt
* npdtmax : nombre de pas de temps maxi.
* dvfinal : deltav d'arrêt
* dtdeb : pas de temps de départ
* fmdt : facteur de variation maxi du pas de temps
* fredt : facteur de réduction du pas de temps si non convergence
* sur la non-linéarité
* objdv : variation voulue du champ de vitesse pour un pas de temps
* fred : facteur de réduction du delta v pour les itérations
* non-linéaires.
* nitermax : nombre maxi d'itérations non-linéaires
* omeg : sous-relaxation
tfinal = 1000. ;
npdtmax = 30 ;
dvfinal = 1.D-5 ;
dtdeb = 1.D-1 ;
fmdt = 1.4D0 ;
fredt = 0.5D0 ;
objdv = 5.D-2 ;
fred = 10. ;
cvgnlin = '/' objdv fred ;
nitermax = 10 ;
omeg = 0.9 ;
*
* Maillage + discrétisation
*
nm = 10 ;
disv = 'QUAF' ;
disp = 'CENTREP1' ;
dec = 'CENTREE' ;
*
* Physique
*
Re = 50. ;
dif = '/' 1. Re ;
*
p0 = 0. 0. ; p1 = 1. 0. ; p2 = 1. 1. ; p3 = 0. 1. ;
bas = 'DROIT' nm p0 p1 ; dro = 'DROIT' nm p1 p2 ;
hau = 'DROIT' nm p2 p3 ; gau = 'DROIT' nm p3 p0 ;
mt = 'DALLER' bas dro hau gau ;
_mt = 'CHANGER' mt 'QUAF' ;
$mt = 'MODELISER' _mt 'NAVIER_STOKES' disv ;
$hau = 'MODELISER' hau 'NAVIER_STOKES' disv ;
ppres = 'POIN' ('DOMA' $mt disp) 'PROC' (0.5 0.5) ;
mp1 = 'MANUEL' ppres 'POI1' ;
*
* Discrétisation
*
* On met des entiers arbitrairement grands :
* c'est la procédure STRANLIN qui s'occupe de gérer les itérations
ngrand = 100000 ;
*
rv = 'EQEX' 'ITMA' ngrand 'NITER' ngrand 'OMEGA' omeg 'FIDT' 1
'ZONE' $mt 'OPER' 'STRANLIN' ;
'SI' graph ;
rv = 'EQEX' rv
'ZONE' $mt 'OPER' 'TRACVIT' ;
'FINSI' ;
rv = 'EQEX' rv
'OPTI' 'EF' 'IMPL' dec disp
'ZONE' $mt 'OPER' 'NS' 1. 'UN' dif 'INCO' 'UN'
'OPTI' 'EF' 'IMPL' dec disp
'ZONE' $mt 'OPER' 'KBBT' -1. 'INCO' 'UN' 'PN'
'OPTI' 'EF' 'IMPL' 'CENTREE' disp
'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM' 'DT' 'UN' dif 'INCO' 'UN' ;
rv = 'EQEX' rv
'OPTI' 'EF' 'IMPL' 'CENTREE' disp
'ZONE' $hau 'OPER' 'TOIM' (-1. 0.) 'INCO' 'UN' ;
rv = 'EQEX' rv 'CLIM'
'UN' 'UIMP' (gau 'ET' bas 'ET' dro) 0.
'UN' 'VIMP' (gau 'ET' bas 'ET' dro 'ET' hau) 0.
'PN' 'TIMP' mp1 0. ;
rv . 'INCO' = 'TABLE' 'INCO' ;
rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0. 0.) ;
rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' disp 0. ;
rv . 'INCO' . 'DT' = dtdeb ;
*
EXEC rv ;
*
ok = rv . 'CVGOK' ;
*
'SI' ('NON' ok) ;
'MESSAGE' ('CHAINE' 'Il ny a pas eu convergence') ;
'ERREUR' 5 ;
'SINON' ;
'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
'FINSI' ;
*
'SI' interact ;
'OPTION' 'ECHO' 1 ;
'OPTION' 'DONN' 5 ;
'FINSI' ;
*
* End of dgibi file CCAR_FORC1
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer