Download sinebump.dgibi

Back to the list

* fichier :  sinebump.dgibi
*********************************************************************
*                                                                   *
* SINE-SHAPED BUMP                                                  *
*                                                                   *
* CALCUL DE L'ECOULEMENT SUBSONIQUE ISENTROPIQUE STATIONNAIRE DANS  *
* UN CANAL                                                          *
*                                                                   *
* BECCANTNI/PAILLERE,                                               *
* UPWIND FLUX SPLITTING SCHEMES FOR THE MULTIDIMENSIONAL EULER      *
* EQUATIONS, 1998                                                   * 
*                                                                   *
* BECCANTINI A., DRN/DMT/SEMT/TTMF,  NOVEMBRE  98                   *
* Modif, 10/07/01, syntaxe de PENT changée                          *
*********************************************************************

'OPTION' 'ECHO' 0 ;
'OPTION' 'DIME' 2 ;
'OPTION' 'ELEM' 'TRI3' ;
'OPTION' 'TRAC' 'PSC' ;

 'MESSAGE' 'A mettre a jours' ;
 'FIN' ;

COMPLET = FAUX ;
GRAPH = FAUX ;

NY = 4 ;
NX1 = NY ;
NX2 = 2 '*' NX1 ;
NX3 = NX1 ;
NX = NX1 '+' NX2 '+' NX3 ;
DX = 4.0 '/' NX ;

CFL = 1.0D0 ;
TFIN = 10.0 ;


'SI' COMPLET ;
   NRAFF = 3 ;
'SINON' ;
   NRAFF = 0 ;
'FINSI' ;   
   

*
*** Methodes possibles :
*
*   'VANLEER'
*   'VLH    '
*   'HUSVL  '
*   'HUSVLH '
*   'GODUNOV'



METO = 'HUSVL  ' ;

***************************************************************
***** PROCEDURE POUR CALCULER LES VARIABLES CONSERVATIVES *****
***************************************************************

'DEBPROC' CONS ;
'ARGUMENT' RN*'CHPOINT' VN* 'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT'
           $MODE*'MMODEL' ;

RN   = 'KCHT' $MODE 'SCAL' 'CENTRE' RN   ;
PN   = 'KCHT' $MODE 'SCAL' 'CENTRE' PN   ;
VN   = 'KCHT' $MODE 'VECT' 'CENTRE' VN   ;
GAMN = 'KCHT' $MODE 'SCAL' 'CENTRE' GAMN ;

RVN  = 'KOPS' RN '*' VN ;
RECIN = 'KOPS' 0.5 '*' ('KOPS' RVN 'PSCA' VN) ;
RETER = 'KOPS' PN '/' ('KOPS' GAMN '-' 1)  ;
REN = 'KOPS' RETER '+' RECIN ;

'RESPRO' RVN REN ;
'FINPROC' ;

****************************************************************
***** PROCEDURE POUR CALCULER LES VARIABLES ENTROPIE, MACH *****
****************************************************************

'DEBPROC' EMMA ;
'ARGUMENT' RN*'CHPOINT' VN* 'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT'
           $MODE*'MMODEL' ;

RN   = 'KCHT' $MODE 'SCAL' 'CENTRE' RN   ;
PN   = 'KCHT' $MODE 'SCAL' 'CENTRE' PN   ;
VN   = 'KCHT' $MODE 'VECT' 'CENTRE' VN   ;
GAMN = 'KCHT' $MODE 'SCAL' 'CENTRE' GAMN ;

MV    = 'KOPS' ('KOPS' VN 'PSCA' VN) '**' 0.5 ;
ASON  = 'KOPS' ('KOPS' ('KOPS' PN '/' RN) '*' GAMN) '**' 0.5 ;
MACHN = 'KOPS' MV '/' ASON ;
 
AN = 'KOPS' PN '/' ('KOPS' RN '**' GAMN) ; 

'RESPRO' MACHN AN ;
'FINPROC' ;


*******************************************************
***** PROCEDURE POUR TESTER CONVERGENCE           *****
*******************************************************

'DEBPROC'  CALCUL ;
'ARGUMENT'  RVX*'TABLE' ;

RV    = RVX . 'EQEX' ;
KINCO = RV . 'INCO' ;
*KDOMA = RV . 'DOMAINE' ;
KDOMA = RV . 'MODTOT' ;

RNi   = 'COPIER' (RV . 'INCO' . 'RNI') ;
RN0   = 'COPIER' (RV . 'INCO' . 'RN0') ;
 
*
*** RN0 = solution à t = tn_M1;
*

TPS = RV . 'PASDETPS' . 'TPS' ;
DD = RV . 'PASDETPS' . 'NUPASDT' ;
NINTE = 10 ;
NN = DD '/' NINTE ;
LO = ( DD '-' (NINTE '*' NN)) 'EGA'  0 ;

'SI'  ( LO ) ;

   RNi = 'KCHT' KDOMA 'SCAL' 'CENTRE' RNi ;
   RN0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' RN0 ;
   ERR = 'KOPS'  RNi '-' RN0 ;
   ERR = 'ABS' ERR ;
   ERR = 'KOPS' ERR '/' RN0;
   KINCO . 'ERR' = ERR ;
   ELI = 'MAXIMUM'  ERR 'ABS' ;
   ELI = ('LOG'  (ELI + 1.0E-20))/('LOG'  10.) ;
   'MESSAGE' ('CHAINE' 'ITER  ' DD
      '   TPS ' TPS '   ERREUR LINF ' ELI );
   IT = 'PROG' DD ;
   ER = 'PROG'  ELI ;
   RV . 'INCO' . 'IT' = (RV . 'INCO' . 'IT') 'ET'  IT ;
   RV . 'INCO' . 'ER' = (RV . 'INCO' . 'ER') 'ET'  ER ;
'FINSI'  ;

RV . 'INCO' . 'RN0' = 'COPIER' RNi;
 
'FINPROC'  ;

*******************************************************
***** PROCEDURE POUR CALCULER L2 entropie         *****
*******************************************************

'DEBPROC'  CALCUL2 ;
'ARGUMENT'  RVX*'TABLE' ;

RV    = RVX . 'EQEX' ;
KINCO = RV . 'INCO' ;
*KDOMA = RV . 'DOMAINE' ;
KDOMA = RV . 'MODTOT' ;

RN = KINCO . 'RNI' ;
GN = KINCO . 'GNI' ;
EN = KINCO . 'ENI' ;
GAMMA = KINCO . 'GAMMA' ;

VN PN = 'PRIM' 'PERFMONO' RN GN EN GAMMA ;
MACHN AN = EMMA RN VN PN GAMMA KDOMA ;         

SNi   = AN ;
SN0   = 'COPIER' (RV . 'INCO' . 'SN0') ;
 
*

DD = RV . 'PASDETPS' . 'NUPASDT' ;
NINTE = 10 ;
NN = DD '/' NINTE ;
LO = ( DD '-' (NINTE '*' NN)) 'EGA'  0 ;

'SI'  ( LO ) ;

   SNi = 'KCHT' KDOMA 'SCAL' 'CENTRE' SNi ;
   SN0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' SN0 ;
   ERR = 'KOPS'  ('KOPS' SNi '-' SN0) '/' SN0 ;
   ERR = 'KOPS' ERR '**' 2 ;
   UNO = 'KCHT' KDOMA 'SCAL' 'CENTRE' 1.0 ;
   CHVOLU = 'DOMA' KDOMA 'XXVOLUM' ;
   TOTVOL = 'XTY' UNO CHVOLU ('MOTS' 'SCAL')  ('MOTS' 'SCAL') ;
   ERRVOL = 'XTY' ERR CHVOLU ('MOTS' 'SCAL')  ('MOTS' 'SCAL') ;
   EL2 = (ERRVOL '/' TOTVOL) '**' 0.5 ;
   'MESSAGE' ('CHAINE'
      'ITER  ' DD  '   ERREUR ENTROPIE L2 ' EL2 );
   IT = 'PROG' DD ;
   ER = 'PROG'  EL2 ;
   RV . 'INCO' . 'IT1' = (RV . 'INCO' . 'IT1') 'ET'  IT ;
   RV . 'INCO' . 'ER1' = (RV . 'INCO' . 'ER1') 'ET'  ER ;
'FINSI'  ;

RV . 'INCO' . 'SN0' = 'COPIER' SNi;
 
'FINPROC'  ;

  
*****************************************************
*****************************************************
** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
** CAS MONOESPECE                                  **
*****************************************************
*****************************************************

'DEBPROC'  EXEX ;
'ARGUMENT' RV*TABLE ;

*******************************************
**** Recherche de RV . *KONV . IDEUL   ****
*******************************************

*
**** Nom de la table RV . *'KONV' -> NOMT
*

  NBOP = 'DIME'  (RV . 'LISTOPER' ) ;

  'REPETER'  BL1 NBOP;
      MCEL = 'EXTRAIRE'  &BL1 RV . 'LISTOPER';
      'SI' ( 'EGA' MCEL 'KONV    ');
       NOMT = 'MOT' ('TEXTE' ('CHAINE'  &BL1 MCEL));
       'QUITTER' BL1;
     'FINSI' ;
  'FIN' BL1;

  IEUL = RV . NOMT . 'KOPT' . 'IDEUL';
  'SI' ('NON' (IEUL 'EGA' 1));
      'MESSAGE' 'EULER 1E ???';
      'ERREUR' 21;
  'FINSI' ;

  
*
**** CL
*
  
      
  LOGLIM = RV . 'INCO' . 'CLIM' ;


******************************************
**** Ordre en espace, ordre en temps  ****
******************************************

ORD_ESP = RV . 'ORDREESP' ;
ORD_TPS = RV . 'ORDRETPS' ;

'MESSAGE'  '--------------------------';
'MESSAGE'  'Ordre en Espace :' ord_esp;
'MESSAGE'  'Ordre en Temps  :' ord_tps;
'MESSAGE'  '--------------------------';
 
'SI' ((ORD_ESP 'EGA' 1) 'ET' (ORD_TPS 'EGA' 2));
    'MESSAGE' ;
    'MESSAGE' (CHAINE 'Ordre en Espace doit etre 2');
    'MESSAGE' (CHAINE 'On impose ça.');
    'MESSAGE' ;
      RV . 'ORDREESP' = 2 ;
    'MESSAGE' ;
    'MESSAGE'  '--------------------------';
    'MESSAGE'  'Ordre en Espace :' ord_esp;
    'MESSAGE'  'Ordre en Temps  :' ord_tps;
    'MESSAGE'  '--------------------------';
'FINSI' ;

   
******************************
**** La table 'PASDETPS'  ****
******************************

 TPSI = RV . 'TPSI' ;
 TFIN = RV . 'TFINAL'; 
 RV . 'PASDETPS' . 'TPS' = TPSI;

*
**** DELTAT-1 est un argument de PRET (prediction)
*    Donc on doit l'initialiser.
*

 RV . 'PASDETPS' . 'DELTAT-1' = 0.0D0;
 CFL = rv.'ALFA' ;


*********************
**** Les TABLES *****
*********************

*   
**** RV . 'INCO'      
*    RV . 'DOMAINE'
*    RV . 'KIZD'
*    RV . 'KIZG'


*   
**** RV . 'INCO'      -> KINCO
*

KINCO   = (RV . 'INCO') ;

*
**** RV . 'DOMAINE'   -> KDOMA
*

*KDOMA  = (RV . 'DOMAINE') ;
KDOMA  = (RV . 'MODTOT') ;
KDOMA2 = (RV . 'DOMAINE') ;

*
**** RV . 'KIZD' contient les volumes des ELTs
*

'SI'  ('NON' ('EXISTE'   RV  'KIZD')) ;
    'KDIA'  RV ;
'FINSI'  ;

*
***** RV . 'KIZG' contient les flux aux interfaces. 
*

'SI'  ('NON' ('EXISTE'  RV  'KIZG')) ;
    RV . 'KIZG' = 'TABLE'   'KIZG' ;
'FINSI'  ;


******************************************
****   Boucle Sur les Pas de Temps    ****
******************************************

* No limiteurs des pentes


ALSF0 = 'KCHT' (KDOMA2.'FRONT') 'SCAL' 'CENTRE' 'COMP' 'P1' 0.0;
ALVF0 = 'KCHT' (KDOMA2.'FRONT') 'VECT' 
        'CENTRE' 'COMP' 'P1' 'P2' (0.0 0.0);
ALR0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' 'COMP' 'P1' 1.0 ;
ALR0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' 'COMP' 'P1'ALR0 ALSF0;
ALV0 = 'KCHT' KDOMA 'VECT' 'CENTRE' 'COMP' 'P1' 'P2' (1.0 1.0) ;
ALV0 = 'KCHT' KDOMA 'VECT' 'CENTRE' 'COMP' 'P1' 'P2' ALV0 ALVF0;
ALP0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' 'COMP' 'P1' 1.0 ;
ALP0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' 'COMP' 'P1' ALP0 ALSF0;

*
**** Evaluation de coeff pour le calcule des pentes
*

 KINCO . 'V'  KINCO . 'P' =   'PRIM' 'PERFMONO'
             (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI')
             (KINCO. 'GAMMA');


 GRADR CHPLIM COEFR = 'PENT' KDOMA 'CENTRE' 'EULESCAL'   'NOLIMITE'
                     (KINCO . 'RNI');

 GRADP CHPLIM COEFP = 'PENT' KDOMA  'CENTRE' 'EULESCAL'   'NOLIMITE'
                     (KINCO . 'P');

 GRADV CHPLIM COEFV = 'PENT' KDOMA 'CENTRE' 'EULEVECT'   'NOLIMITE'
                     (KINCO . 'V');
                     

I = 0 ;
   
'REPETER'  BLOC1 (RV . 'ITMA')  ;

    I = I + 1 ;
 
*
***** Les variables primitives
*

      KINCO . 'V'  KINCO . 'P' =   'PRIM' 'PERFMONO'
           (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI')
           (KINCO. 'GAMMA');

   'SI'  (ORD_ESP 'EGA'  1) ;
             
      ROF VITF PF GAMF  =
      'PRET' 'PERFMONO'  ORD_ESP ORD_TPS KDOMA
      (KINCO . 'RNI') (KINCO . 'V')
      (KINCO . 'P') (KINCO . 'GAMMA');

   'SINON';
   
*       
***** Ordre 2 en espace => calcul des pentes
*

       ALR = 'COPIER' ALR0 ;
       ALP = 'COPIER' ALP0 ;
       ALV = 'COPIER' ALV0 ;

       GRADR  CHPLIM = 'PENT' KDOMA 'CENTRE' 'EULESCAL'   'NOLIMITE'
                    (KINCO . 'RNI') 'GRADGEO' COEFR ;

       GRADP  CHPLIM = 'PENT' KDOMA 'CENTRE' 'EULESCAL'   'NOLIMITE'
                    (KINCO . 'P') 'GRADGEO' COEFP ;

       GRADV  CHPLIM = 'PENT' KDOMA 'CENTRE' 'EULEVECT'   'NOLIMITE'
                    (KINCO . 'V') 'GRADGEO' COEFV ;

       'SI' (ORD_TPS 'EGA' 1);

          ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORD_ESP ORD_TPS
                              KDOMA
                              (KINCO . 'RNI') GRADR ALR
                              (KINCO . 'V')   GRADV ALV
                              (KINCO . 'P')   GRADP ALP
                              (KINCO . 'GAMMA') ;
       'SINON' ;              
*       
********* Ordre 2 en temps
*
       ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORD_ESP ORD_TPS
                              KDOMA
                              (KINCO . 'RNI') GRADR ALR
                              (KINCO . 'V')   GRADV ALV
                              (KINCO . 'P')   GRADP ALP
                              (KINCO . 'GAMMA')
                              ((RV . 'PASDETPS' . 'DELTAT-1')/2.0);
      'FINSI' ;
   
   'FINSI'  ;
       
*
*********** Creation de MCHAML de type 'FACEL' pour les
*           calcul de flux aux interfaces



 KINCO . 'RNF'    =  ROF;
 KINCO . 'VITNF'  =  VITF;
 KINCO . 'PNF'    =  PF;
 KINCO . 'GAMMAF' =  GAMF;


*
********* Boucle sur les operateurs
*

   'REPETER'   BLOC2  NBOP ;
        NOMPER  = 'EXTRAIRE'  &BLOC2  (RV . 'LISTOPER');
        NOTABLE = 'MOT'  ('TEXTE'  ('CHAINE'  &BLOC2  NOMPER) ) ;
        ('TEXTE'  NOMPER) (RV . NOTABLE) ;
   'FIN'  BLOC2 ;


************************************************************
********* Mise a jour de la table RV . 'PASDETPS'   ********
************************************************************

*
**** Calcul du DT
*

   'SI' ('EXISTE'  RV  'DTI');
*   
* Il faut comparer  DTIMP, (DTCONV '*' CFL)
*
        DTI = 'MINIMUM' ('PROG'
               (((RV . 'DTI') '/' CFL) (RV . 'PASDETPS' . 'DTCONV')
                ));
   'SINON';
        DTI = (RV . 'PASDETPS' . 'DTCONV') ;
   'FINSI';
   
    RV .  'PASDETPS' . 'DELTAT'  = DTI ;

*
**** On verifie que  (DTI * CFL) < (TFIN '-' TMPS)
*

    TMPS = RV . 'PASDETPS' . 'TPS';
    DTI0 = TFIN '-' TMPS;
    DTI0 = DTI0 '/' CFL;
 
    'SI' (DTI0 '<EG' DTI);
        DTI = DTI0;
        RV . 'PASDETPS' . 'DELTAT' = DTI ;
        LOGQUIT = VRAI;
    'SINON' ;
        LOGQUIT = FAUX ;
    'FINSI' ;


***********************************************************
******** On avance au pas de temps suivant        *********
***********************************************************
*
*   N.B. Tn+1 = Tn + (CFL *  RV . 'PASDETPS' . 'DELTAT');
*

    'AVCT'  RV CFL  'IMPR' (RV.'FIDT') ;
    
******************************
******** On impose les CL ****
******************************
*
*
   'SI' LOGLIM;
      PROLIM RV ;
   'FINSI' ;   
     

    'SI' LOGQUIT;
        'QUITTER' BLOC1;
    'FINSI';


'FIN'  BLOC1 ;

    
********************************************************
******** On detrui les choses qui ne servent plus   ****
********************************************************
*
*   Les variables primitives
*
    'DETR'  ( KINCO . 'V');
    'DETR'  ( KINCO . 'P');
    'OUBL'  KINCO  'V';
    'OUBL'  KINCO  'P';
*
*   Les MCHAML faces
*
    'DETR'  ROF ;
    'DETR'  VITF ;
    'DETR'  PF ;
    'DETR'  GAMF;
    'OUBL'  KINCO  'RNF';
    'OUBL'  KINCO  'VITNF';
    'OUBL'  KINCO  'PNF';
    'OUBL'  KINCO  'GAMMAF';
*
*   Les pentes 'ET' les limiteurs
*
    'SI' (ORD_ESP 'EGA' 2);
       'DETR' GRADR; 
       'DETR' GRADP;
       'DETR' GRADV;
       'DETR' ALR;
       'DETR' ALP;
       'DETR' ALV;
    'FINSI' ;

            
********************************************
**** FIN de Boucle Sur les Pas de Temps  ***
********************************************

'FINPROC'  ;

*****************************************************
*****************************************************
** FIN PROCEDURE EXEX                              **
*****************************************************
*****************************************************

*****************************************************
*****************************************************
***** PROCEDURE PROLIM                          *****
*****************************************************
*****************************************************
*
*
**** Cas Euler Mono especes
*


'DEBPROC'  PROLIM ;
'ARGUMENT'  RV*TABLE ;

*
**** RV . 'DOMAINE'   -> KDOMA
*

KDOMA   = RV . 'DOMAINE' ;
KINCO   = RV . 'INCO' ;
KFRONT =  RV . 'MODFRONT' ;
* Domaine et connectivite entree subsonic 
KENTSUB = KDOMA . 'ENTSUB' ;
KCONENT = KDOMA . 'CONENT' ;
* Domaine et connectivite sortie subsonic 
KSORSUB = KDOMA . 'SORSUB' ;
KCONSOR = KDOMA . 'CONSOR' ;

RNPE = 'KCHT' KFRONT 'SCAL' 'CENTRE'
       ('KPRO' (KINCO . 'RNI') KCONENT)
       ('KPRO' (KINCO . 'RNI') KCONSOR)  ;
GNPE = 'KCHT' KFRONT 'VECT' 'CENTRE'
       ('KPRO' (KINCO . 'GNI')  KCONSOR)
       ('KPRO' (KINCO . 'GNI')  KCONENT) ;
ENPE =  'KCHT' KFRONT 'SCAL' 'CENTRE'
       ('KPRO' (KINCO . 'ENI') KCONENT)
       ('KPRO' (KINCO . 'ENI') KCONSOR) ;       
GAPE =  'KCHT' KFRONT 'SCAL' 'CENTRE'
       (KINCO . 'GAMMA' );
SCAGAM = KINCO . 'SCALGAM' ;       
GM1PE = SCAGAM '-' 1.0 ;
UNSGM1 = 1.0 '/' GM1PE ;
VNPE PNPE = 'PRIM' 'PERFMONO' RNPE GNPE ENPE GAPE ;
                 
*
*
*   R1 = u '-' (2 '/' (gamma '-' 1)) '*' C (L2 = u '-' 'C)
*   R2 = s (L1 = u)
*   R3 = u '+' (2 '/' (gamma '-' 1)) '*' C (L2 = u '+' C)
*   

UXPE = 'EXCO' 'UX' VNPE ;
UYPE = 'EXCO' 'UY' VNPE 'UY' ;
ASPE = (2.0 '/' GM1PE) '*' ((GAPE '*' PNPE '/' RNPE ) '**' 0.5)  ;

R1PE = UXPE '-' ASPE ;
R2PE = PNPE '/' (RNPE '**' SCAGAM)  ;
R3PE = UXPE '+' ASPE ;

*
**** Entree subsonic (u > 0)
*
*   R2, R3, Uy sortent
*   R1 sort
*
**** Sortie subsonic (u > 0)
*
*   R1 entre
*   R2, R3, Uy sortent
*
* 

R1PE = 'KCHT' KFRONT 'SCAL' 'CENTRE' R1PE
       (KINCO . 'R1PE') ;
R2PE = 'KCHT' KFRONT 'SCAL' 'CENTRE' R2PE
       (KINCO . 'R2PE') ;
R3PE = 'KCHT' KFRONT 'SCAL' 'CENTRE' R3PE
       (KINCO . 'R3PE') ;
UYPE  = 'KCHT' KFRONT 'SCAL' 'CENTRE' 'COMP' 'UY'
        UYPE  (KINCO . 'UYPE') ;

VNE  =  'KCHT' KFRONT 'VECT' 'CENTRE'
       ('NOMC' 'UX' (0.5 '*' (R1PE '+' R3PE))) UYPE ;
ASE2 =  'KCHT' KFRONT 'SCAL' 'CENTRE'
        (((GM1PE '/' 4.0) '*' (R3PE '-' R1PE))  '**' 2 ) ;
RNE =  'KCHT' KFRONT 'SCAL' 'CENTRE'
        ((ASE2 '/' (R2PE '*' GAPE)) '**' UNSGM1) ;
PNE =   'KOPS' ('KOPS' ASE2 '*' RNE) '/' GAPE  ;

GNE ENE = CONS RNE VNE PNE GAPE KFRONT ;

KINCO . 'RNI' = 'KCHT' KDOMA 'SCAL' 'CENTRE'
                (KINCO . 'RNI') RNE ;
KINCO . 'GNI' = 'KCHT' KDOMA 'VECT' 'CENTRE'
                (KINCO . 'GNI') GNE ;
KINCO . 'ENI' = 'KCHT' KDOMA 'SCAL' 'CENTRE'
                (KINCO . 'ENI') ENE ;

'FINPROC' ;


*****************************************************
*****************************************************
***** FIN PROCEDURE PROLIM                      *****
*****************************************************
*****************************************************




******************
**** MAILLAGE ****
******************


A0 = -2.0 0.0 ;
A1 = -1.0 0.0 ;
A2 = 1.0 0.0 ;
A3 = 2.0 0.0 ;
A4 = 2.0 1.0 ;
A5 = -2.0 1.0 ;

*
**** LIGB
*
LIGB1 = A0 'DROIT' NX1 A1 ;

* LIGB2 (On utilise un propriete de 'ET' ; 'SI' 'ET' change ?)
xcel = ('COORDONNEE' 1 A1) '+' DX ;
ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
ACEL = xcel ycel ;
LIGB2 = A1 'DROIT' 1 ACEL ;
'REPETER' BL1 (NX2 '-' 2) ;
   ACEL0 = ACEL ;
   xcel = xcel '+' DX ;
   ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
   ACEL = xcel ycel ;
   LIGB2 = LIGB2 'ET' (ACEL0 'DROIT' 1 ACEL) ;
'FIN' BL1;
LIGB2 = LIGB2 'ET' (ACEL 'DROIT' 1 A2) ;


LIGB3 = A2 'DROIT' NX3 A3 ;

LIGB = LIGB1 'ET' LIGB2 'ET' LIGB3 ;

*
**** LIGH
*
LIGH = A4 'DROIT' NX A5 ;

*
*** LIGG
*
LIGG = A5 'DROIT' NY A0 ;

*
**** LIGD
*
LIGD = A3 'DROIT' NY A4 ;


LIGT = LIGB 'ET' LIGD 'ET' LIGH 'ET' LIGG ;

*
**** Le domaine
*
DOMINT = LIGT 'SURFACE' 'PLANE' ;
DOMINT = 'DEDU'  DOMINT  LIGT LIGT 'REGU' ;

*
**** Le rafinement
*
*
**** C'est la Perle qui a fait ça quand il etait encore tres brillant!!!
*    (Avant la lettre de l'Arme!!!)
*    Mais il va bientot etre un vrai homme!!!
*


DOMCEL = DOMINT ;

'SI' (nraff > 0) ;
   'REPETER' bcl nraff ;
       mttemp = 'CHANGER' DOMCEL 'QUADRATIQUE' ;
       $mtt   = 'DOMA' mttemp 'MACRO' ;
       DOMCEL = ($mtt . 'MAILLAGE') ;
       'OUBLIER' mttemp ;
       'OUBLIER' $mtt ;
       DOMINT = DOMCEL ;
       LIGCON = 'CONTOUR' DOMINT ;

*
**** Je doit transler le points du BUMP (operateur FORME)
*
       NLIGB2 = LIGCON 'ELEM' 'COMP' A1 A2 ;
       MAILB = 'CHANGER' NLIGB2 'POI1';
       MAILB0 = MAILB 'PLUS' (0.0D0 0.0D0);

*       Listreels des deplacements
       NP = 'NBNO' MAILB ;
       LISTX = 'PROG' NP '*' 0.0 ;
       LISTY = 'PROG' NP '*' 0.0 ;

       'REPETER' BL1 ('NBNO' MAILB) ;
        xcel ycel0 = 'COORDONNEE' (MAILB 'POIN' &BL1);
        ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
       'REMPLACER' LISTY &BL1 (ycel '-' ycel0) ;
   'FIN' BL1 ;

    DEPCH = 'MANUEL' 'CHPO' MAILB 2 'UX' LISTX 'UY' LISTY ;
   'FORME' DEPCH ;

  'FIN' bcl ;
   DX = DX '/' (NRAFF '*' 2.0 ) ;
'SINON' ;
   LIGCON = 'CONTOUR' DOMINT ;  
'FINSI' ;
'MENAGE' ;




*
**** Les C.L.
*

NLIGD = LIGCON 'ELEM' 'COMP' A3 A4 ;
NLIGG = LIGCON 'ELEM' 'COMP' A5 A0 ;

'OPTION' 'ELEM' 'QUA4' ;
FG = (NLIGG 'TRANSLATION' 1 ((-1.0 '*' DX) 0.0)) 'COULEUR' 'ROUGE' ;
FD = (NLIGD 'TRANSLATION' 1 (DX 0.0)) 'COULEUR' 'ROUGE' ;
FRONT = FG 'ET' FD ;
*
**** Domaine '+' CL
*

DOMTOT = DOMINT 'ET' FG 'ET' FD ;
'ELIMINATION' DOMTOT 0.0001 ;

**********************
*** OBJETS MODELES ***
**********************
MDOMTOT = 'CHANGER' DOMTOT 'QUAF' ;
MDOMINT = 'CHANGER' DOMINT 'QUAF' ;
MFG     = 'CHANGER' FG     'QUAF' ;
MFD     = 'CHANGER' FD     'QUAF' ;
MFRONT  = 'CHANGER' FRONT  'QUAF' ;
'ELIM' (MDOMTOT 'ET' MDOMINT 'ET' MFG 'ET' MFD 'ET' MFRONT) 1.E-5;
MDNS    = 'EULER' ;
$DOMTOT = 'MODE' MDOMTOT MDNS  ;
$DOMINT = 'MODE' MDOMINT MDNS  ;
$FG     = 'MODE' MFG     MDNS  ;
$FD     = 'MODE' MFD     MDNS  ;
$FRONT  = 'MODE' MFRONT  MDNS  ;

'SI' GRAPH ;
   MOD1    =  'MODELISER'  ('DOMA' $DOMTOT 'MAILLAGE' ) 'THERMIQUE';
'FINSI' ;
*
**** On doit imposer un'entree subsonic (u>0 i.e. 3 condition a imposer) et une
*    sortie subsonic (1 condition)
*

*
**** Maillage entree subsonic
*

POIN0 =  NLIGG 'POIN' 1;
X1 Y1 = 'COORDONNEE' POIN0;
'REPETER' BLLIM (('NBNO' NLIGG) '-' 1) ;
    X0 = X1 ;
    Y0 = Y1 ;
    POIN0 = NLIGG 'POIN' (&BLLIM '+' 1) ;
    X1 Y1 = 'COORDONNEE' POIN0 ;
    XFAC = (X0 '+' X1) '/' 2 ;
    YFAC = (Y0 '+' Y1) '/' 2 ;
    PFAC = ('DOMA' $DOMINT 'FACE') 'POIN' 'PROC' (XFAC YFAC);
    GEOFAC1 = ('DOMA' $DOMINT 'FACEL') 'ELEM' 'APPUYE'
             'LARGEMENT' PFAC ;
    GEOFAC2 = ('DOMA' $FG 'FACEL') 'ELEM' 'APPUYE'
             'LARGEMENT' PFAC ;
*
**** Tranformation en POI1
*
    GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
    PCEL11 = GEO1POI1 'POIN'  1 ;
    PCEL12 = GEO1POI1 'POIN'  2 ;
    GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
    PCEL21 = GEO2POI1 'POIN' 1 ;
    PCEL22 = GEO2POI1 'POIN' 2 ;
*
**** Il faur verifier que PFAC = PCEL12 = PCEL22
*    ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
*
   'SI'  ( ('NBEL' GEO1POI1) 'NEG' 2);
       'MESSAGE' ;
       'MESSAGE'
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( ('NBEL' GEO2POI1) 'NEG' 2);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( PCEL12 'NEG' PFAC);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( PCEL22 'NEG' PFAC);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
*
*** Creation d'un maillage SEG2
*
   'SI' (&BLLIM 'EGA' 1);
       ENTSUB = 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR'  'VERT' ;
    'SINON' ;
       ENTSUB = ENTSUB 'ET'
          ( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR'  'VERT' );
    'FINSI' ;   
'FIN' BLLIM ;



*
**** Maillage sortie subsonic
*

POIN0 =  NLIGD 'POIN' 1;
X1 Y1 = 'COORDONNEE' POIN0;
'REPETER' BLLIM (('NBNO' NLIGD) '-' 1) ;
    X0 = X1 ;
    Y0 = Y1 ;
    POIN0 = NLIGD 'POIN' (&BLLIM '+' 1) ;
    X1 Y1 = 'COORDONNEE' POIN0 ;
    XFAC = (X0 '+' X1) '/' 2 ;
    YFAC = (Y0 '+' Y1) '/' 2 ;
    PFAC = ('DOMA' $DOMINT 'FACE') 'POIN' 'PROC' (XFAC YFAC);
    GEOFAC1 = ('DOMA' $DOMINT 'FACEL') 'ELEM' 'APPUYE'
             'LARGEMENT' PFAC ;
    GEOFAC2 = ('DOMA' $FD 'FACEL') 'ELEM' 'APPUYE'
             'LARGEMENT' PFAC ;
*
**** Tranformation en POI1
*
    GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
    PCEL11 = GEO1POI1 'POIN'  1 ;
    PCEL12 = GEO1POI1 'POIN'  2 ;
    GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
    PCEL21 = GEO2POI1 'POIN' 1 ;
    PCEL22 = GEO2POI1 'POIN' 2 ;
*
**** Il faur verifier que PFAC = PCEL12 = PCEL22
*    ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
*
   'SI'  ( ('NBEL' GEO1POI1) 'NEG' 2);
       'MESSAGE' ;
       'MESSAGE'
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( ('NBEL' GEO2POI1) 'NEG' 2);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( PCEL12 'NEG' PFAC);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
   'SI'  ( PCEL22 'NEG' PFAC);
       'MESSAGE' ;
       'MESSAGE' 
          'Probleme dans la creation du domaine entree subsonique';
       'MESSAGE' ;
       'ERREUR' 21 ;
   'FINSI' ;
*
*** Creation d'un maillage SEG2
*
   'SI' (&BLLIM 'EGA' 1);
       SORSUB = 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR'  'VERT' ;
    'SINON' ;
       SORSUB = SORSUB 'ET'
          ( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR'  'VERT' );
    'FINSI' ;   
'FIN' BLLIM ;

'SI' GRAPH ;
    'TRACER' (DOMTOT 'ET' SORSUB 'ET' ENTSUB)
    'TITRE' 'Maillage et conditions aux bords' ;
'FINSI' ;
    
*
*** C.L. 'ET' initiales 
*

RO_INF = 1.4D0 ;
P_INF  = 1.0D0 ;
U_INF  = 0.5D0 ;
GAM    = 1.4D0;


RN0  = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' RO_INF ;
VN0  = 'KCHT' $DOMTOT 'VECT' 'CENTRE' (U_INF 0.0) ;
PN0  = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' P_INF  ;
GAMMA =  'KCHT' $DOMTOT 'SCAL' 'CENTRE' GAM ;

GN0 REN0 = CONS RN0 VN0 PN0 GAMMA $DOMTOT ;
MACHN0 AN0 = EMMA RN0 VN0 PN0 GAMMA $DOMTOT ;         

******************
* TABLE EQUATION *
******************

NITER = 500000  ;

 RV = 'EQEX' ('DOMA' $DOMTOT 'TABLE') 'ITMA' NITER 'ALFA' CFL
      'TPSI' 0. 'TFINAL' TFIN
*
***** Options : VF       = volumes finis
*               CONS     = conservative
*               EULER    = euler monoespece
*               VANLEER  = methode

      'OPTI' 'VF' 'CONS' 'EULER' METO

*
***** Procedure 'CALCUL'
*      
      'ZONE' $DOMTOT 'OPER' 'CALCUL'
*
***** Procedure 'CALCUL2'
*      
      'ZONE' $DOMTOT 'OPER' 'CALCUL2'
*
***** Operateur 'KONV'
*      
      'ZONE' $DOMTOT 'OPER' 'KONV'
*
***** Arguments de 'KONV' (maximum 8 chatacters)
*      
      'RNF' 'VITNF' 'PNF' 'GAMMAF' 'REPF'
*
***** LIST des inconnues
*
      'INCO' 'RNI' 'GNI' 'ENI';

*
*** La table RV . INCO (de soustype INCO);
*

RV . 'INCO'  = TABLE  'INCO' ;

*
*** Stokage des inconnues des equations d'Euler.
*

RV . 'INCO' . 'RNI' = 'COPIER' RN0 ;
RV . 'INCO' . 'GNI' = 'COPIER' GN0 ;
RV . 'INCO' . 'ENI' = 'COPIER' REN0 ;

*
*** GAMMA
*

RV . 'INCO' . 'GAMMA' = GAMMA ;
RV . 'INCO' . 'SCALGAM' = GAM ;


*
*** CONDITIONS LIMITS
*

* Invariants de Riemann 1D
*

A_INF = (((GAM '*' P_INF) '/' RO_INF) '**' 0.5) '*'
       (2.0 '/' (GAM '-' 1.0)) ; 
R1 = U_INF '-' A_INF ;
R2 = P_INF '/' (RO_INF '**' GAM) ;
R3 = U_INF '+' A_INF ;
RV . 'INCO' . 'CLIM' = VRAI;
('DOMA' $DOMTOT 'TABLE') . 'FRONT' = 'DOMA' $FRONT 'TABLE' ;

* Entree subsonique

('DOMA' $DOMTOT 'TABLE') . 'ENTSUB' = 'DOMA' $FG 'TABLE' ; 
('DOMA' $DOMTOT 'TABLE') . 'CONENT' = ENTSUB ;
RV . 'INCO' . 'R2PE' = 'KCHT' $FG 'SCAL' 'CENTRE' R2 ;
RV . 'INCO' . 'R3PE' = 'KCHT' $FG 'SCAL' 'CENTRE' R3 ;
RV . 'INCO' . 'UYPE' = 'KCHT' $FG 'SCAL' 'CENTRE' 'COMP' 'UY' 0.0 ;

*Sortie subsonique

('DOMA' $DOMTOT 'TABLE') . 'SORSUB' = 'DOMA' $FD 'TABLE' ; 
('DOMA' $DOMTOT 'TABLE') . 'CONSOR' = SORSUB ;
RV . 'INCO' . 'R1PE' = 'KCHT' $FD 'SCAL' 'CENTRE' R1 ;

*
**** Ordre en espace
*    Ordre en temps     
*

IT = 1 ;
IE = 1 ;
RV . 'ORDRETPS' = IT ;
RV . 'ORDREESP' = IE ;

*
**** Convergence
*

RV . 'INCO' . 'IT' = 'PROG'  ;
RV . 'INCO' . 'ER' = 'PROG'  ;
RV . 'INCO' . 'IT1' = 'PROG'  ;
RV . 'INCO' . 'ER1' = 'PROG'  ;
RV . 'INCO' . 'RN0' = 'COPIER' RN0 ;
RV . 'INCO' . 'SN0' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE'
      (P_INF '/' (RO_INF '**' 1.4));

*???
RV . 'MODTOT' = $DOMTOT ;
RV . 'MODFRONT' = $FRONT ;
      
*
*
***********************************
*** Execution EXEX              ***
***********************************
*


 'MESSAGE'  ;
 'MESSAGE'  '**************************';
 'MESSAGE'   ('CHAINE'  'METHODE : ' METO) ;
 'MESSAGE'  '**************************';
 'MESSAGE' ;
 


RV . 'INCO' . 'V' = 'COPIER' VN0 ;
RV . 'INCO' . 'P' = 'COPIER' PN0 ;

 
'TEMPS' ;
    EXEX  RV ;
'TEMPS' ;



TFIN = RV . 'PASDETPS' . 'TPS' ;
ERR = RV . 'INCO' . 'ERR' ;
RN = RV . 'INCO' . 'RNI' ;
GN = RV . 'INCO' . 'GNI' ;
REN = RV . 'INCO' . 'ENI' ;

VN PN = 'PRIM' 'PERFMONO'  RN GN REN  (RV . 'INCO'. 'GAMMA');

MACHN AN = EMMA RN VN PN GAMMA $DOMTOT ;         
                  
EVOL4 = EVOL 'MANU' 'ITERATIONS' (RV.INCO.'IT') 'LOG|E|inf'
        (RV.INCO.'ER') ;

AS = ((GAMMA '*' PN '/' RN) '**' 0.5) '*' ( 2.0 '/' (GAM '-' 1.0)) ;
UX = 'EXCO' 'UX' VN ;
UY = 'EXCO' 'UY' VN ;
R1 = UX '-' AS ;
R2 = AN ;
R3 = UX '+' AS ;

'SI' GRAPH ;
*
*** Invariants de Riemann pour les equations 1D
*
   CHM_R1  =  'KCHA' $DOMTOT 'CHAM' R1 ;
   CHM_R2  =  'KCHA' $DOMTOT 'CHAM' R2 ;
   CHM_R3  =  'KCHA' $DOMTOT 'CHAM' R3 ;
   'TRACER' MOD1 CHM_R1 'TITRE' 'R1';
   'TRACER' MOD1 CHM_R2 'TITRE' 'R2' ;
   'TRACER' MOD1 CHM_R3 'TITRE' 'R3' ;
*

   CHM_RN  =  'KCHA' $DOMTOT 'CHAM' RN ;
   CHM_PN  =  'KCHA' $DOMTOT 'CHAM' PN ;
   CHM_AN  =  'KCHA' $DOMTOT 'CHAM' AN ;
   CHM_MN  =  'KCHA' $DOMTOT 'CHAM' MACHN ;
   CHM_UNY  =  'KCHA' $DOMTOT 'CHAM' ('EXCO' 'UY' VN) ;
   'TRACER' MOD1 CHM_RN 'TITRE' 'Ro';
   'TRACER' MOD1 CHM_PN 'TITRE' 'P' ;
   'TRACER' MOD1 CHM_AN 'TITRE' 'Entropie' ;
   'TRACER' MOD1 CHM_MN 'TITRE' 'Mach' ;
   'TRACER' MOD1 CHM_UNY 'TITRE' 'UY' ;
   'DESSIN' EVOL4 'XBOR' 0. (1.5  '*' ('MAXI' (RV . 'INCO' .'IT') ))
            'TITRE' 'Erreur Linf sur ro' ;

'FINSI' ;   

*
**** Controle sur L_inf, L_2 ENTROPIE
*

AN_INF = 1.0D0 '/' (1.4 '**' 1.4) ;
SIGMA = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'SIGMA'
          ('NOMC' 'SIGMA' ((AN '/' AN_INF) '-' 1.0)) ;

LINF_SIG = 'MAXIMUM' SIGMA 'ABS' ;

'SI' COMPLET ;
   'SI' (LINF_SIG > 1.5D-2) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme infinite sur entropie ' LINF_SIG) ; 
      'ERREUR' 5;
   'FINSI' ;
'SINON' ;
   'SI' (LINF_SIG > 5D-2) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme infinite sur entropie ' LINF_SIG) ; 
      'ERREUR' 5;
   'FINSI' ;
'FINSI' ;   

SIGMAI2 = 'KCHT' $DOMINT 'SCAL' 'CENTRE' 'COMP' 'SIGMA'
          (SIGMA '**' 2);
'DOMA' $DOMINT 'VOLUME' ;
CHPUN = 'KCHT' $DOMINT 'SCAL' 'CENTRE' 1.0 ;
M1 = 'MOTS' 'SCAL' ;
M2 = 'MOTS' 'SIGMA' ;
TOTVOL = 'XTY' ('DOMA' $DOMINT 'XXVOLUM') CHPUN M1 M1;
L2SIGMA = ('XTY' ('DOMA' $DOMINT 'XXVOLUM') SIGMAI2 M1 M2 )
           '/' TOTVOL ;
L2SIGMA  = L2SIGMA '**' 0.5 ;

'SI' COMPLET ;
   'SI' (L2SIGMA > 5D-3) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme 2 sur entropie ' L2SIGMA) ; 
      'ERREUR' 5;
   'FINSI' ;
'SINON' ;
   'SI' (L2SIGMA > 1.2D-2) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme 2 sur entropie ' L2SIGMA) ; 
      'ERREUR' 5;
   'FINSI' ;
'FINSI' ;

ERR_CON = 'EXTRAIRE' (RV . 'INCO' .'ER') ('DIME'  (RV . 'INCO' .'ER')) ;

'SI' (ERR_CON > -3.5) ;
   'MESSAGE' 'Probleme de convergence' ;
   'ERREUR' 5 ;
'FINSI' ;

'SI' COMPLET ;
*
**** Calcul aux deuxieme ordre en espace et en temps
*

'OUBLIER' RV;
MENAGE ;


******************
* TABLE EQUATION *
******************

NITER = 500000  ;

 RV = 'EQEX' ('DOMA' $DOMTOT 'TABLE') 'ITMA' NITER 'ALFA' CFL
      'TPSI' 0. 'TFINAL' TFIN
*
***** Options : VF       = volumes finis
*               CONS     = conservative
*               EULER    = euler monoespece
*               VANLEER  = methode

      'OPTI' 'VF' 'CONS' 'EULER' METO

*
***** Procedure 'CALCUL'
*      
      'ZONE' $DOMTOT 'OPER' 'CALCUL'
*
***** Procedure 'CALCUL2'
*      
      'ZONE' $DOMTOT 'OPER' 'CALCUL2'
*
***** Operateur 'KONV'
*      
      'ZONE' $DOMTOT 'OPER' 'KONV'
*
***** Arguments de 'KONV' (maximum 8 chatacters)
*      
      'RNF' 'VITNF' 'PNF' 'GAMMAF' 'REPF'
*
***** LIST des inconnues
*
      'INCO' 'RNI' 'GNI' 'ENI';

*
*** La table RV . INCO (de soustype INCO);
*

RV . 'INCO'  = TABLE  'INCO' ;

*
*** Stokage des inconnues des equations d'Euler.
*

RV . 'INCO' . 'RNI' = 'COPIER' RN ;
RV . 'INCO' . 'GNI' = 'COPIER' GN ;
RV . 'INCO' . 'ENI' = 'COPIER' REN ;

*
*** GAMMA
*

RV . 'INCO' . 'GAMMA' = GAMMA ;
RV . 'INCO' . 'SCALGAM' = GAM ;


*
*** CONDITIONS LIMITS
*

* Invariants de Riemann 1D
*

A_INF = (((GAM '*' P_INF) '/' RO_INF) '**' 0.5) '*'
       (2.0 '/' (GAM '-' 1.0)) ; 
R1 = U_INF '-' A_INF ;
R2 = P_INF '/' (RO_INF '**' GAM) ;
R3 = U_INF '+' A_INF ;
RV . 'INCO' . 'CLIM' = VRAI;
$DOMTOT . 'FRONT' = $FRONT ;

* Entree subsonique

$DOMTOT . 'ENTSUB' = $FG ; 
$DOMTOT . 'CONENT' = ENTSUB ;
RV . 'INCO' . 'R2PE' = 'KCHT' $FG 'SCAL' 'CENTRE' R2 ;
RV . 'INCO' . 'R3PE' = 'KCHT' $FG 'SCAL' 'CENTRE' R3 ;
RV . 'INCO' . 'UYPE' = 'KCHT' $FG 'SCAL' 'CENTRE' 'COMP' 'UY' 0.0 ;

*Sortie subsonique

$DOMTOT . 'SORSUB' = $FD ; 
$DOMTOT . 'CONSOR' = SORSUB ;
RV . 'INCO' . 'R1PE' = 'KCHT' $FD 'SCAL' 'CENTRE' R1 ;

*
**** Ordre en espace
*    Ordre en temps     
*

IT = 2 ;
IE = 2 ;
RV . 'ORDRETPS' = IT ;
RV . 'ORDREESP' = IE ;

*
**** Convergence
*

RV . 'INCO' . 'IT' = 'PROG'  ;
RV . 'INCO' . 'ER' = 'PROG'  ;
RV . 'INCO' . 'IT1' = 'PROG'  ;
RV . 'INCO' . 'ER1' = 'PROG'  ;
RV . 'INCO' . 'RN0' = 'COPIER' RN0 ;
RV . 'INCO' . 'SN0' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE'
      (P_INF '/' (RO_INF '**' 1.4));

      
*
*
***********************************
*** Execution EXEX              ***
***********************************
*


 'MESSAGE'  ;
 'MESSAGE'  '**************************';
 'MESSAGE'   ('CHAINE'  'METHODE : ' METO) ;
 'MESSAGE'  '**************************';
 'MESSAGE' ;
 


RV . 'INCO' . 'V' = 'COPIER' VN0 ;
RV . 'INCO' . 'P' = 'COPIER' PN0 ;

 
'TEMPS' ;
    EXEX  RV ;
'TEMPS' ;



TFIN = RV . 'PASDETPS' . 'TPS' ;
ERR = RV . 'INCO' . 'ERR' ;
RN = RV . 'INCO' . 'RNI' ;
GN = RV . 'INCO' . 'GNI' ;
REN = RV . 'INCO' . 'ENI' ;

VN PN = 'PRIM' 'PERFMONO'  RN GN REN  (RV . 'INCO'. 'GAMMA');

MACHN AN = EMMA RN VN PN GAMMA $DOMTOT ;         
                  
EVOL4 = EVOL 'MANU' 'ITERATIONS' (RV.INCO.'IT') 'LOG|E|inf'
        (RV.INCO.'ER') ;

AS = ((GAMMA '*' PN '/' RN) '**' 0.5) '*' ( 2.0 '/' (GAM '-' 1.0)) ;
UX = 'EXCO' 'UX' VN ;
UY = 'EXCO' 'UY' VN ;
R1 = UX '-' AS ;
R2 = AN ;
R3 = UX '+' AS ;

'SI' GRAPH ;
*
*** Invariants de Riemann pour les equations 1D
*
   CHM_R1  =  'KCHA' $DOMTOT 'CHAM' R1 ;
   CHM_R2  =  'KCHA' $DOMTOT 'CHAM' R2 ;
   CHM_R3  =  'KCHA' $DOMTOT 'CHAM' R3 ;
   'TRACER' MOD1 CHM_R1 'TITRE' 'R1';
   'TRACER' MOD1 CHM_R2 'TITRE' 'R2' ;
   'TRACER' MOD1 CHM_R3 'TITRE' 'R3' ;
*

   CHM_RN  =  'KCHA' $DOMTOT 'CHAM' RN ;
   CHM_PN  =  'KCHA' $DOMTOT 'CHAM' PN ;
   CHM_AN  =  'KCHA' $DOMTOT 'CHAM' AN ;
   CHM_MN  =  'KCHA' $DOMTOT 'CHAM' MACHN ;
   CHM_UNY  =  'KCHA' $DOMTOT 'CHAM' ('EXCO' 'UY' VN) ;
   'TRACER' MOD1 CHM_RN 'TITRE' 'Ro';
   'TRACER' MOD1 CHM_PN 'TITRE' 'P' ;
   'TRACER' MOD1 CHM_AN 'TITRE' 'Entropie' ;
   'TRACER' MOD1 CHM_MN 'TITRE' 'Mach' ;
   'TRACER' MOD1 CHM_UNY 'TITRE' 'UY' ;
   'DESSIN' EVOL4 'XBOR' 0. (1.5  '*' ('MAXI' (RV . 'INCO' .'IT') ))
            'TITRE' 'Erreur Linf sur ro' ;

'FINSI' ;   

*
**** Controle sur L_inf, L_2 ENTROPIE
*

AN_INF = 1.0D0 '/' (1.4 '**' 1.4) ;
SIGMA = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'SIGMA'
          ('NOMC' 'SIGMA' ((AN '/' AN_INF) '-' 1.0)) ;

LINF_SIG = 'MAXIMUM' SIGMA 'ABS' ;
'SI' COMPLET ;
   'SI' (LINF_SIG > 6D-4) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme infinite sur entropie ' LINF_SIG) ; 
      'ERREUR' 5;
   'FINSI' ;
'SINON' ;
   'SI' (LINF_SIG > 8D-3) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme infinite sur entropie ' LINF_SIG) ; 
      'ERREUR' 5;
   'FINSI' ;
'FINSI' ;   

SIGMAI2 = 'KCHT' $DOMINT 'SCAL' 'CENTRE' 'COMP' 'SIGMA'
          (SIGMA '**' 2);
'DOMA' $DOMINT 'VOLUME' ;
CHPUN = 'KCHT' $DOMINT 'SCAL' 'CENTRE' 1.0 ;
M1 = 'MOTS' 'SCAL' ;
M2 = 'MOTS' 'SIGMA' ;
TOTVOL = 'XTY' ($DOMINT . 'XXVOLUM') CHPUN M1 M1;
L2SIGMA = ('XTY' ($DOMINT . 'XXVOLUM') SIGMAI2 M1 M2 ) '/' TOTVOL ;
L2SIGMA  = L2SIGMA '**' 0.5 ;

'SI' COMPLET ;
   'SI' (L2SIGMA > 6D-5) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme 2 sur entropie ' L2SIGMA) ; 
      'ERREUR' 5;
   'FINSI' ;
'SINON' ;
   'SI' (L2SIGMA > 5D-3) ;
      'MESSAGE' ('CHAINE' METO ' ' 'Ordre ' IE ' ' IT);
      'MESSAGE' ('CHAINE' 'Norme 2 sur entropie ' L2SIGMA) ; 
      'ERREUR' 5;
   'FINSI' ;   
'FINSI' ;   

'FINSI' ;

'FIN' ;
 

 

 

 

 

 

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer