Download ccar_forc1.dgibi

Back to the list

* 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