Download pret1.dgibi

Back to the list

* fichier :  pret1.dgibi
**********************************************************************
**** APPROCHE VF "Cell-Centred Formulation" pour la  solution des ****
**** Equations d'Euler pour un gaz parfait.                       ****
****                                                              ****
**** OPERATEUR PRET                                               ****
**** Operateur qui 'recontruit les variables primitives aux faces ****
**** Cas gaz monoespece  "thermally perfect"                      ****
**** Differents cas tests                                         ****
****                                                              ****
**** A. BECCANTINI DRN/DMT/SEMT/TTMF               AOUT  1998     ****
**********************************************************************

'OPTION'  'DIME' 2 ;
'OPTION'  'ELEM' QUA4 ;
'OPTION'  'ECHO'  1 ;
'OPTION'  'TRAC' 'PS' ;

*
*** GRAPH
*

* GRAPH = VRAI ;
GRAPH = FAUX ;

***************************
*** PROCEDURE RUO1     ****
***************************
*
*** Precedure pour la rotation d'un tenseur de premier
*   ordre
*

'DEBPROC' RUO1 ;
'ARGUMENT' ALPHA*'FLOTTANT' UN*'FLOTTANT' UT*'FLOTTANT';

SINA = 'SIN' ALPHA ;
COSA = 'COS' ALPHA ;

UX  = (UN  * COSA ) '-' (UT  * SINA) ;
UY  = (UN  * SINA ) '+' (UT  * COSA) ;


'FINPROC' UX UY;

***************************
*** PROCEDURE RUO2     ****
***************************
*
*** Precedure pour la rotation d'un tenseur de deuxieme
*   ordre
*

'DEBPROC' RUO2 ;
'ARGUMENT' ALPHA*'FLOTTANT' UNN*'FLOTTANT' UNT*'FLOTTANT'
                            UTN*'FLOTTANT' UTT*'FLOTTANT';
*
**** (n,t) -> (x,y)
*
*     n =  CA x '+' SA y  ;
*     t = -SA x '+' CA y ;
*
*     UNT = DUN/DT
*
                            
SA = 'SIN' ALPHA ;
CA = 'COS' ALPHA ;
CA2 = CA * CA ;
CASA = CA * SA ;
SA2 = SA * SA;

UXX = (CA2 * UNN) '-' (CASA * (UNT '+' UTN)) '+' (SA2 *UTT)   ;
UYX = (CASA * (UNN '-' UTT)) '-' (SA2 * UNT) '+' (CA2 * UTN ) ;
UXY = (CASA * (UNN '-' UTT)) '+' (CA2 * UNT) '-' (SA2 * UTN ) ;
UYY = (SA2 * UNN) '+' (CASA * (UNT '+' UTN)) '+' (CA2 *UTT)   ;

'FINPROC' UXX UXY UYX UYY;


*************************** 
***** DOMAINE SPATIAL  ****
***************************

*
**** Deux carre
*

A1 = 0.0D0 0.0D0;
A2 = 1.0D0 0.0D0;
A3 = 2.0D0 0.0D0;
A4 = 2.0D0 1.0D0;
A5 = 1.0D0 1.0D0;
A6 = 0.0D0 1.0D0;

L12 = A1 'DROIT' 1 A2;
L23 = A2 'DROIT' 1 A3;
L34 = A3 'DROIT' 1 A4;
L45 = A4 'DROIT' 1 A5;
L56 = A5 'DROIT' 1 A6;
L61 = A6 'DROIT' 1 A1;
L25 = A2 'DROIT' 1 A5;


DOM10  = 'DALL' L12 L25 L56 L61
        'PLANE';
DOM20  = 'DALL' L23 L34 L45 ('INVERSE' L25)
        'PLANE';

*
*** Point face entre le deux carre, ou on fait les controlles
*

P10 = 1.0 0.5;

DOM1 =  DOM10 ;
DOM2 =  DOM20 ;


'ELIMINATION' (DOM1 ET DOM2) 1D-6;
DOMTOT = DOM1 ET DOM2;

 $DOMTOT = 'MODELISER' DOMTOT 'EULER';

 $DOM1 = 'MODELISER'  DOM1 'EULER';
 $DOM2 = 'MODELISER'  DOM2 'EULER';

 TDOMTOT = 'DOMA'  $DOMTOT 'VF';
 
 TDOM1 = 'DOMA'  $DOM1 'VF';
 TDOM2 = 'DOMA'  $DOM2 'VF';

 MDOM1 = TDOM1 . 'QUAF' ;
 MDOM2 = TDOM2 . 'QUAF' ;
 MDOMTOT = TDOMTOT . 'QUAF' ;

 'ELIMINATION'  (MDOMTOT ET MDOM1) 0.0001 ;
 'ELIMINATION'  (MDOMTOT ET MDOM2) 0.0001 ;
 
 FACTOT  = 'DOMA' $DOMTOT 'FACEL'    ;


'SI' GRAPH;
   'TRACER' (DOMTOT 'ET'  FACTOT
   'ET' P10) 'TITRE' 'Domaine et FACEL';
'FINSI' ;


*
****  TEST1: si les limiteurs sont nuls ou les gradients son nuls 
*            le deuxieme ordre en espace 'et premier ordre
*            en temps degenere en premier ordre en espace
*


RN  = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 1.0D0;

PN  = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 2.0D0;

VIT = 'KCHT' $DOMTOT 'VECT' 'CENTRE' (4.0 5.0);

GAMMA = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 1.5D0;


*
**** Limiteurs nuls, gradients non-nuls
*



GRADR =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (1.0D0  1.0D0);



GRADP =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (1.0D0  1.0D0);



GRADVX = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (1.0D0 1.0D0);


GRADVY = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (1.0D0 1.0D0);

GRADV  = GRADVX  'ET' GRADVY  ;                                           



 ALR = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.0D0 ;


 ALP = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.0D0 ;

 
 ALV = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP'  'P1' 'P2'
       (0.0 0.0D0) ;

*         

ORDESP = 1;
ORDTEM = 1;


ROF1 VITF1 PF1 GAMF1   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                          $DOMTOT RN
                                 VIT  
                                 PN  
                                 GAMMA ;
                                 

                                 
ORDESP = 2;
ORDTEM = 1; 


ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                       $DOMTOT RN      GRADR ALR
                               VIT     GRADV ALV
                               PN      GRADP ALP
                               GAMMA ;

                               

ERRO = 'MAXIMUM' ('PROG'
('MAXIMUM' (ROF  '-' ROF1)  'ABS')
('MAXIMUM' (PF   '-' PF1)   'ABS')
('MAXIMUM' (VITF '-' VITF1) 'ABS')
) 'ABS' ;

'SI' (ERRO > 1.0D-15);
   'ERREUR' 5;
'FINSI' ;



*
**** Limiteurs non-nuls, gradients nuls
*


GRADR =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (0.0D0  0.0D0);

GRADP =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (0.0D0  0.0D0);

GRADVX = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (0.0D0 0.0D0);
GRADVY = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (0.0D0 0.0D0);
GRADV  = GRADVX  'ET' GRADVY  ;                                           

 ALR = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.4D0 ;


 ALP = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.8D0 ;

 
 ALV = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP'  'P1' 'P2'
       (0.9 0.9D0) ;


ORDESP = 1;
ORDTEM = 1;

ROF1 VITF1 PF1 GAMF1   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                          $DOMTOT RN
                                 VIT  
                                 PN  
                                 GAMMA ;

ORDESP = 2;
ORDTEM = 1;
                                 
ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                       $DOMTOT RN      GRADR ALR
                               VIT     GRADV ALV
                               PN      GRADP ALP
                               GAMMA ;

                               
ERRO = 'MAXIMUM' ('PROG'
('MAXIMUM' (ROF  '-' ROF1)  'ABS')
('MAXIMUM' (PF   '-' PF1)   'ABS')
('MAXIMUM' (VITF '-' VITF1) 'ABS')
) 'ABS' ;

'SI' (ERRO > 1.0D-15);
   'ERREUR' 5;
'FINSI' ;


*
**** TEST2 : Deuxieme ordre en espace, premiere ordre en
*            temps: invariance par rotation
*
*    Il faut remarquer que:
*    densite, pression sont des tenseurs d'ordre 0,
*    donc leurs gradients sont des tenseurs d'ordre 1
*    la vitesse est un tenseur d'ordre 1,
*    donc sont gradient est un tenseur d'ordre 2
*
**** On considere un repere solidal avec la surface, (n,t),
*    et un repere (x,y)
*
*** Etats gauche et droite
*

gam = 1.4D0;

rog   = 1.00  ;
grong = 1.0D0 ;
grotg = 2.0D0;
pg    = 2.0D0 ;
gpng  = 3.0D0 ;
gptg  = 4.0D0;
ung   = 3.0D0 ;
gunng = 5.0D0 ;
guntg = 6.0D0 ;
utg   = 4.0D0 ;
gutng = 7.0D0 ;
guttg = 8.0D0;

rod   = 1.50  ;
grond = 1.5D0 ;
grotd = 2.5D0 ;
pd    = 2.5D0 ;
gpnd  = 3.5D0 ;
gptd  = 4.5D0 ;
und   = 3.5D0 ;
gunnd = 5.5D0 ;
guntd = 6.5D0 ;
utd   = 4.5D0 ;
gutnd = 7.5D0 ;
guttd = 8.5D0;

*
*** Etats a gauche et a droite du point face P10
*  
*   ro, un, ut, p

ETATG = 'PROG' 1.25000   3.625        4.875       2.1875;
ETATD = 'PROG' 1.12500   2.8125       3.5625      2.28125;


*
*** Rotation
*

ANGLE = 7.0D0;
DANGLE = 85;
ORIG = 0.0D0 0.0D0;


'REPETER' BL1 5;

ANGLE = ANGLE '+' DANGLE ;

uxg uyg = RUO1 ANGLE UNG UTG ;
uxd uyd = RUO1 ANGLE UND UTD ;

groxg groyg = RUO1 ANGLE grong grotg;
groxd groyd = RUO1 ANGLE grond grotd;

gpxg gpyg = RUO1 ANGLE gpng gptg;
gpxd gpyd = RUO1 ANGLE gpnd gptd;

guxxg guxyg guyxg guyyg = RUO2 ANGLE gunng guntg gutng guttg;
guxxd guxyd guyxd guyyd = RUO2 ANGLE gunnd guntd gutnd guttd;

'MESSAGE'  ;
'MESSAGE'  (CHAIN 'Angle de rotation= ' ANGLE);
'MESSAGE'  ;

DOM1   = DOM10   'TOURNER' ANGLE ORIG;
DOM2   = DOM20   'TOURNER' ANGLE ORIG;
P1     = P10     'TOURNER' ANGLE ORIG;

'ELIMINATION' (DOM1 ET DOM2) 1D-6;
DOMTOT = DOM1 ET DOM2;

 $DOMTOT = 'MODELISER' DOMTOT 'EULER';

 $DOM1 = 'MODELISER'  DOM1 'EULER';
 $DOM2 = 'MODELISER'  DOM2 'EULER';

 TDOMTOT = 'DOMA'  $DOMTOT 'VF';
 
 TDOM1 = 'DOMA'  $DOM1 'VF';
 TDOM2 = 'DOMA'  $DOM2 'VF';

 MDOM1 = TDOM1 . 'QUAF' ;
 MDOM2 = TDOM2 . 'QUAF' ;
 MDOMTOT = TDOMTOT . 'QUAF' ;

 'ELIMINATION'  (MDOMTOT ET MDOM1) 0.0001 ;
 'ELIMINATION'  (MDOMTOT ET MDOM2) 0.0001 ;
 
 FACTOT  = 'DOMA' $DOMTOT 'FACEL'    ;

'SI' GRAPH;
   'TRACER' (DOMTOT 'ET'  FACTOT
   'ET' P1) 'TITRE' 'Domaine et FACEL';
'FINSI' ;

*
**** Redefinition de P1 dans $DOMTOT . 'FACE'
*

P1 = (TDOMTOT . 'FACE') 'POIN' 'PROC' P1;


***********************
**** Les CHPOINTs  ****
***********************

GAMMA = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' gam;

RN1   = 'KCHT' $DOM1   'SCAL' 'CENTRE' rog;
RN2   = 'KCHT' $DOM2   'SCAL' 'CENTRE' rod;;
RN    = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (RN1 'ET' RN2);


VIT1  = 'KCHT' $DOM1   'VECT' 'CENTRE' (uxg uyg);
VIT2  = 'KCHT' $DOM2   'VECT' 'CENTRE' (uxd uyd);
VIT   = 'KCHT' $DOMTOT 'VECT' 'CENTRE' (VIT1 'ET' VIT2);

PN1   = 'KCHT' $DOM1   'SCAL' 'CENTRE' pg;
PN2   = 'KCHT' $DOM2   'SCAL' 'CENTRE' pd;
PN    = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (PN1 'ET' PN2);



*
**** On impose les gradients et le limiteurs
*


 ALR = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.5D0 ;


 ALP = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.125D0 ;

 
 ALV = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP'  'P1' 'P2'
       (0.25 0.25D0) ;


GRADR1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (groxg groyg) ;

GRADR2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (groxd groyd) ;

GRADR =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (GRADR1 'ET' GRADR2);



GRADP1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (gpxg  gpyg) ;

GRADP2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (gpxd  gpyd) ;

GRADP =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (GRADP1 'ET' GRADP2);



GRADVX1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (guxxg guxyg);

GRADVX2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (guxxd guxyd);

GRADVY1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (guyxg guyyg);

GRADVY2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (guyxd guyyd);

GRADVX = GRADVX1 'ET' GRADVX2 ;
GRADVY = GRADVY1 'ET' GRADVY2 ;
GRADV  = GRADVX  'ET' GRADVY  ;                                           

ORDESP = 2;
ORDTEM = 1;
                                 
ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                       $DOMTOT RN      GRADR ALR
                               VIT     GRADV ALV
                               PN      GRADP ALP
                               GAMMA ;
                                                  
                  
*********************************************************
*** Control des etats sur la surface qui contient P1 ****
*********************************************************


GEOP1    = (TDOMTOT. 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
GEOP2    = (TDOMTOT. 'FACE')  'ELEM' 'APPUYE' 'LARGEMENT' P1;


 
ROGEOP1  = 'REDU' ROF GEOP1;
VGEOP1   = 'REDU' VITF GEOP1;
PGEOP1   = 'REDU' PF GEOP1;
GAMGEOP1 = 'REDU' GAMF GEOP1;
REFGEOP1 = 'REDU' VITF GEOP2;


rofag = 'EXTRAIRE' ROGEOP1 'SCAL' 1 1 1;
rofad = 'EXTRAIRE' ROGEOP1 'SCAL' 1 1 3;
unfag = 'EXTRAIRE' VGEOP1 'UN  ' 1 1 1;
unfad = 'EXTRAIRE' VGEOP1 'UN  ' 1 1 3;
utfag = 'EXTRAIRE' VGEOP1 'UT  ' 1 1 1;
utfad = 'EXTRAIRE' VGEOP1 'UT  ' 1 1 3;
pfag  = 'EXTRAIRE' PGEOP1 'SCAL' 1 1 1;
pfad  = 'EXTRAIRE' PGEOP1 'SCAL' 1 1 3;


*
**** Orientation de la normal n de castem par raport a la
*    notre; t est par consequence
*

NCOS = 'EXTRAIRE' REFGEOP1 'NX' 1 1 1;
NSIN = 'EXTRAIRE' REFGEOP1 'NY' 1 1 1;

'SI' (('ABS' NCOS) > ('ABS' NSIN));
   ORIENT = ('COS' ANGLE) '/' NCOS;
'SINON'; 
   ORIENT = ('SIN' ANGLE) '/' NSIN;
'FINSI' ;

ORIENT = 'SIGNE' 'FLOTTANT' ORIENT;   


*
**** ORIENT = -1 -> Mon etat gauche est son etat droite
*

'SI' (ORIENT > 0);

ERRLIG = 'PROG' rofag (unfag '*' ORIENT)
                (utfag '*' ORIENT) pfag ;
                
ERRLID = 'PROG' rofad (unfad '*' ORIENT)
                (utfad '*' ORIENT) pfad ;

'SINON' ;                

ERRLID = 'PROG' rofag (unfag '*' ORIENT)
                (utfag '*' ORIENT) pfag ;
                
ERRLIG = 'PROG' rofad (unfad '*' ORIENT)
                (utfad '*' ORIENT) pfad ;
                                
'FINSI' ;

ERRO = 'MAXIMUM' ('PROG' 
('MAXIMUM' (ETATG '-' ERRLIG) 'ABS')
('MAXIMUM' (ETATD '-' ERRLID) 'ABS')
);


'SI' (ERRO > 1.0D-14)
  'MESSAGE' 'Ordre en espace = 2';
  'MESSAGE' 'Ordre en temps = 1';
  'ERREUR' 5 ;
'FINSI' ;

'FIN' BL1;




*
**** TEST3: deuxieme ordre en espace et en temps
*    Invariance par rotation
*
*
**** On considere un repere solidal avec la surface, (n,t),
*    et un repere (x,y)
*
*** Etats gauche et droite
*

gam = 1.4D0;

rog   = 1.00  ;
grong = 1.0D0 ;
grotg = 2.0D0;
pg    = 2.0D0 ;
gpng  = 3.0D0 ;
gptg  = 4.0D0;
ung   = 3.0D0 ;
gunng = 5.0D0 ;
guntg = 6.0D0 ;
utg   = 4.0D0 ;
gutng = 7.0D0 ;
guttg = 8.0D0;

rod   = 1.50  ;
grond = 1.5D0 ;
grotd = 2.5D0 ;
pd    = 2.5D0 ;
gpnd  = 3.5D0 ;
gptd  = 4.5D0 ;
und   = 3.5D0 ;
gunnd = 5.5D0 ;
guntd = 6.5D0 ;
utd   = 4.5D0 ;
gutnd = 7.5D0 ;
guttd = 8.5D0;


*
*** Rotation
*

ANGLE = 7.0D0;
DANGLE = 85;
ORIG = 0.0D0 0.0D0;


'REPETER' BL1 5;

ANGLE = ANGLE '+' DANGLE ;

uxg uyg = RUO1 ANGLE UNG UTG ;
uxd uyd = RUO1 ANGLE UND UTD ;

groxg groyg = RUO1 ANGLE grong grotg;
groxd groyd = RUO1 ANGLE grond grotd;

gpxg gpyg = RUO1 ANGLE gpng gptg;
gpxd gpyd = RUO1 ANGLE gpnd gptd;

guxxg guxyg guyxg guyyg = RUO2 ANGLE gunng guntg gutng guttg;
guxxd guxyd guyxd guyyd = RUO2 ANGLE gunnd guntd gutnd guttd;

'MESSAGE'  ;
'MESSAGE'  (CHAIN 'Angle de rotation= ' ANGLE);
'MESSAGE'  ;

DOM1   = DOM10   'TOURNER' ANGLE ORIG;
DOM2   = DOM20   'TOURNER' ANGLE ORIG;
P1     = P10     'TOURNER' ANGLE ORIG;

'ELIMINATION' (DOM1 ET DOM2) 1D-6;
DOMTOT = DOM1 ET DOM2;

 $DOMTOT = 'MODELISER' DOMTOT 'EULER';

 $DOM1 = 'MODELISER'  DOM1 'EULER';
 $DOM2 = 'MODELISER'  DOM2 'EULER';

 TDOMTOT = 'DOMA'  $DOMTOT 'VF';
 
 TDOM1 = 'DOMA'  $DOM1 'VF';
 TDOM2 = 'DOMA'  $DOM2 'VF';

 MDOM1 = TDOM1 . 'QUAF' ;
 MDOM2 = TDOM2 . 'QUAF' ;
 MDOMTOT = TDOMTOT . 'QUAF' ;

 'ELIMINATION'  (MDOMTOT ET MDOM1) 0.0001 ;
 'ELIMINATION'  (MDOMTOT ET MDOM2) 0.0001 ;
 
 FACTOT  = 'DOMA' $DOMTOT 'FACEL'    ;


'SI' GRAPH;
   'TRACER' (DOMTOT 'ET'  FACTOT
   'ET' P1) 'TITRE' 'Domaine et FACEL';
'FINSI' ;

*
**** Redefinition de P1 dans $DOMTOT . 'FACE'
*

P1 = (TDOMTOT . 'FACE') 'POIN' 'PROC' P1;


***********************
**** Les CHPOINTs  ****
***********************

GAMMA = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' gam;

RN1   = 'KCHT' $DOM1   'SCAL' 'CENTRE' rog;
RN2   = 'KCHT' $DOM2   'SCAL' 'CENTRE' rod;;
RN    = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (RN1 'ET' RN2);


VIT1  = 'KCHT' $DOM1   'VECT' 'CENTRE' (uxg uyg);
VIT2  = 'KCHT' $DOM2   'VECT' 'CENTRE' (uxd uyd);
VIT   = 'KCHT' $DOMTOT 'VECT' 'CENTRE' (VIT1 'ET' VIT2);

PN1   = 'KCHT' $DOM1   'SCAL' 'CENTRE' pg;
PN2   = 'KCHT' $DOM2   'SCAL' 'CENTRE' pd;
PN    = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (PN1 'ET' PN2);



*
**** On impose les gradients et le limiteurs
*


 ALR = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.5D0 ;


 ALP = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 'COMP' 'P1' 0.125D0 ;

 
 ALV = 'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP'  'P1' 'P2'
       (0.25 0.25D0) ;


GRADR1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (groxg groyg) ;

GRADR2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (groxd groyd) ;

GRADR =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (GRADR1 'ET' GRADR2);



GRADP1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (gpxg  gpyg) ;

GRADP2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (gpxd  gpyd) ;

GRADP =  'KCHT' $DOMTOT 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
          (GRADP1 'ET' GRADP2);



GRADVX1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (guxxg guxyg);

GRADVX2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P1DX' 'P1DY'
                                            (guxxd guxyd);

GRADVY1 = 'KCHT' $DOM1 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (guyxg guyyg);

GRADVY2 = 'KCHT' $DOM2 'VECT' 'CENTRE' 'COMP' 'P2DX' 'P2DY'
                                            (guyxd guyyd);

GRADVX = GRADVX1 'ET' GRADVX2 ;
GRADVY = GRADVY1 'ET' GRADVY2 ;
GRADV  = GRADVX  'ET' GRADVY  ;                                           

ORDESP = 2;
ORDTEM = 2;

*
*** L = 1
*

DTCFLG = (gam '*' pg) '/' rog ;
DTCFLG = DTCFLG '**' 0.5 ;
DTCFLG = DTCFLG '+' ung ;
DTCFLG = 1 '/' DTCFLG ; 

DTCFLD = (gam '*' pd) '/' rod ;
DTCFLD = DTCFLD '**' 0.5 ;
DTCFLD = DTCFLD '+' und ;
DTCFLD = 1 '/' DTCFLD ;

DTCFLD = 'MINIMUM' ('PROG' DTCFLD DTCFLG);

                                 
ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  ORDESP ORDTEM
                       $DOMTOT RN      GRADR ALR
                               VIT     GRADV ALV
                               PN      GRADP ALP
                               GAMMA (1D-3 '*' DTCFLD) ;
                                                  

*********************************************************
*** Control des etats sur la surface qui contient P1 ****
*********************************************************


GEOP1    = (TDOMTOT. 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
GEOP2    = (TDOMTOT. 'FACE')  'ELEM' 'APPUYE' 'LARGEMENT' P1;


 
ROGEOP1  = 'REDU' ROF GEOP1;
VGEOP1   = 'REDU' VITF GEOP1;
PGEOP1   = 'REDU' PF GEOP1;
GAMGEOP1 = 'REDU' GAMF GEOP1;
REFGEOP1 = 'REDU' VITF GEOP2;


rofag = 'EXTRAIRE' ROGEOP1 'SCAL' 1 1 1;
rofad = 'EXTRAIRE' ROGEOP1 'SCAL' 1 1 3;
unfag = 'EXTRAIRE' VGEOP1 'UN  ' 1 1 1;
unfad = 'EXTRAIRE' VGEOP1 'UN  ' 1 1 3;
utfag = 'EXTRAIRE' VGEOP1 'UT  ' 1 1 1;
utfad = 'EXTRAIRE' VGEOP1 'UT  ' 1 1 3;
pfag  = 'EXTRAIRE' PGEOP1 'SCAL' 1 1 1;
pfad  = 'EXTRAIRE' PGEOP1 'SCAL' 1 1 3;


*
**** Orientation de la normal n de castem par raport a la
*    notre; t est par consequence
*

NCOS = 'EXTRAIRE' REFGEOP1 'NX' 1 1 1;
NSIN = 'EXTRAIRE' REFGEOP1 'NY' 1 1 1;

'SI' (('ABS' NCOS) > ('ABS' NSIN));
   ORIENT = ('COS' ANGLE) '/' NCOS;
'SINON'; 
   ORIENT = ('SIN' ANGLE) '/' NSIN;
'FINSI' ;

ORIENT = 'SIGNE' 'FLOTTANT' ORIENT;   


*
**** ORIENT = -1 -> Mon etat gauche est son etat droite
*

'SI' (ORIENT > 0);

ERRLIG = 'PROG' rofag (unfag '*' ORIENT)
                (utfag '*' ORIENT) pfag ;
                
ERRLID = 'PROG' rofad (unfad '*' ORIENT)
                (utfad '*' ORIENT) pfad ;

'SINON' ;                

ERRLID = 'PROG' rofag (unfag '*' ORIENT)
                (utfag '*' ORIENT) pfag ;
                
ERRLIG = 'PROG' rofad (unfad '*' ORIENT)
                (utfad '*' ORIENT) pfad ;
                                
'FINSI' ;

*
**** 'SI' &BL1 > 1, on controle qui rien n'a change!
*

 'SI'  (&BL1 > 1); 
   ERRO = 'MAXIMUM' ('PROG' 
   ('MAXIMUM' (ETATG '-' ERRLIG) 'ABS')
   ('MAXIMUM' (ETATD '-' ERRLID) 'ABS')
    );


   'SI' (ERRO > 1.0D-14)
      'MESSAGE' 'Ordre en espace = 2';
      'MESSAGE' 'Ordre en temps = 2';
      'ERREUR' 5 ;
   'FINSI' ;
 'FINSI' ;

ETATG = ERRLIG ;
ETATD = ERRLID ;

'FIN' BL1;

'FIN' ;


 

 

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer