*****************************************************
************************************************************************
* Section : Chimie Combustion
************************************************************************
* fichier :  flamcat.dgibi                          *
** modifie le 15/06/2014 passage EQPR -> EQEX       *
*****************************************************
*****************************************
* COMBUSTION CATALYTIQUE DE L'HYDROGENE *
* on teste l'operateur FLAM             *
* H.PAILLERE/TTMF 97                    *
*****************************************
   DISCR  = 'MACRO'    ;
   KPRESS = 'CENTRE'   ;
   BETAP  = 1.         ;

 DEBP FILTREKE ;
 ARGU RX*TABLE ;
 rv=rx.'EQEX' ;
 rvp=rv.'PROJ' ;

* Filtre sur K et Epsilon
* K > 0  Epsilon tel que l'echelle de longueur reste inférieure
* à L0 diamètre enceinte

 rv=rx.'EQEX' ;
 iarg=rx.'IARG' ;
 si( non ( ega iarg 3)) ;
 mess 'Procedure FILTREKE : nombre d arguments incorrect ' iarg ;
 quitter FILTREKE  ;
 finsi ;
 si ( ega ('TYPE' rx.'ARG1') 'MOT     ') ;
 U1=rv.'INCO'.(rx.'ARG1') ;
 sinon ;
 si ( ega ('TYPE' (rx.'ARG1')) 'CHPOINT') ;
 U1=rx.'ARG1' ;
 sinon ;
 mess 'Procedure FILTREKE : type argument 1 invalide ' ;
 quitter FILTREKE ;
 finsi ;
 finsi ;

 si ( ega ('TYPE' rx.'ARG2') 'MOT     ') ;
 L0=rv.'INCO'.(rx.'ARG2') ;
 sinon ;
 si ( ega ('TYPE' (rx.'ARG2')) 'FLOTTANT') ;
 L0=rx.'ARG2' ;
 sinon ;
 mess 'Procedure FILTREKE : type argument 2 invalide ' ;
 quitter FILTREKE ;
 finsi ;
 finsi ;

 si ( ega ('TYPE' rx.'ARG3') 'MOT     ') ;
 NU=rv.'INCO'.(rx.'ARG3') ;
 sinon ;
 si ( ega ('TYPE' (rx.'ARG3')) 'FLOTTANT') ;
 NU=rx.'ARG3' ;
 sinon ;
 mess 'Procedure FILTREKE : type argument 3 invalide ' ;
 quitter FILTREKE ;
 finsi ;
 finsi ;

 nic=dime (rx.'LISTINCO') ;
 si( non ( ega nic 2)) ;
 mess 'Procedure FILTREKE : nombre d inconnues incorrect ' nic ;
 quitter FILTREKE ;
 finsi ;
 nomi1=extr 1 (rx.'LISTINCO');
 nomi2=extr 2 (rx.'LISTINCO');
 nom1= mot (text (chai nomi1)) ;
 nom2= mot (text (chai nomi2)) ;

 en=rv.'INCO'.nom2 ;
 kn=rv.'INCO'.nom1 ;
 Rec=100.;
 k0 = 1.e-10 ;

 lcu1=extr u1 'COMP'       ;
 mdu=u1 lcu1 'PSCA' u1 lcu1;
 mdu=mdu ** 0.5 ;
 Re=kops (kops (kops mdu '*' L0) '/' nu) '+' (Rec / 10.) ;
 a= exp (kops Rec '/' Re ) ;
 kn=kops kn '|<' k0 ;
 E0= kops (kops kn '**' 1.5) '*' (a / L0) ;
 en=kops en '|<' E0 ;

 rv.'INCO'.'EN'=en ;
 rv.'INCO'.'KN'=kn ;

 as2 ama1  = 'KOPS' 'MATRIK' ;
FINPROC as2 ama1;


*********************************************************************
* PROCEDURE RECOMBINEUR
*********************************************************************

DEBPROC RECOMB ;
ARGU RVX*'TABLE' ;

RV = RVX.'EQEX' ;

Dt = RV.PASDETPS.'DELTAT' ;
Dt = Dt * RV.'ALFA' ;

YH2e  = KCHT $ENTREE SCAL SOMMET RV.INCO.'YH2' ;
YO2e  = KCHT $ENTREE SCAL SOMMET RV.INCO.'YO2' ;
YN2e  = KCHT $ENTREE SCAL SOMMET RV.INCO.'YN2' ;
YH2Oe = KCHT $ENTREE SCAL SOMMET RV.INCO.'YH2O' ;

SENTR1 = 'SOMT' ('DOMA' $ENTREE 'XXDIAGSI') ;
YH2e  = 'SOMT' (YH2e * ('DOMA' $ENTREE 'XXDIAGSI')) / SENTR1 ;
YO2e  = 'SOMT' (YO2e * ('DOMA' $ENTREE 'XXDIAGSI')) / SENTR1 ;
YN2e  = 'SOMT' (YN2e * ('DOMA' $ENTREE 'XXDIAGSI')) / SENTR1 ;
YH2Oe = 'SOMT' (YH2Oe* ('DOMA' $ENTREE 'XXDIAGSI')) / SENTR1 ;
YHEe  = 0.D0 ;
YCO2e = 0.D0 ;
YCOe  = 0.D0 ;
Te = KCHT $ENTREE SCAL SOMMET RV.INCO.'TN' ;
Te = 'SOMT' (Te* ('DOMA' $ENTREE 'XXDIAGSI')) / SENTR1 ;

Pe = RV.INCO.'PM' ;

Tp = RV.INCO.'TPLAQUE' ;

AA1    = RV . 'INCO' . 'A'      ;
BB1    = RV . 'INCO' . 'B'      ;
XH2ON  = RV . 'INCO' . 'XH2ON'  ;
XH2OFF = RV . 'INCO' . 'XH2OFF' ;
BETAI  = RV . 'INCO' . 'BETA'   ;
*IKALP = 1 ;
     YH2s YO2s YN2s YH2Os YHEs YCO2s YCOs Ts TP DEB EFF XH2ONF
     = 'FLAM' 'RECOMBIN'
     YH2e YO2e YN2e YH2Oe YHEe YCO2e YCOe
     Te TP Pe Dt 1 'SIEMENS' AA1 BB1 XH2ON XH2OFF BETAI ;
*     Te TP Pe Dt IKALP 'SIEMENS' AA1 BB1 XH2ON XH2OFF BETAI ;
*YH2s YO2s YN2s YH2Os TS TP DEB EFF XH2ONF
*=  'FLAM' 'RECOMBIN'
*YH2e YO2e YN2e YH2Oe Te TP Pe Dt 1
*'SIEMENS' AA1 BB1 XH2ON XH2OFF BETAI ;

RV . 'INCO' . 'XH2ON' = XH2ONF ;

DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/20 ;
LO = (DD-(20*NN)) EGA 0 ;
SI ( LO ) ;
P_TP = PROG TP ;
RV.INCO.'TP' = RV.INCO.'TP' ET P_TP ;
P_DEB = PROG DEB ;
RV.INCO.'DEBIT' = RV.INCO.'DEBIT' ET P_DEB ;
P_EFF = PROG EFF ;
RV.INCO.'EFFIC' = RV.INCO.'EFFIC' ET P_EFF ;
P_TS = PROG TS ;
RV.INCO.'TS' = RV.INCO.'TS' ET P_TS ;
P_PM = PROG Pe ;
RV.INCO.'PRESSIO' = RV.INCO.'PRESSIO' ET P_PM ;
MAST = SOMT (KOPS RV.INCO.'RHOM' '*' VOL) ;
P_MAST = PROG MAST ;
RV.INCO.'MASSETOT' = RV.INCO.'MASSETOT' ET P_MAST ;

FINSI ;


R = (YH2s*RH2)+(YO2s*RO2)+(YN2s*RN2)+(YH2Os*RH2O);
PSIs = R*TS ;

RV.INCO.'TPLAQUE' = TP ;

DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/20 ;
LO = (DD-(20*NN)) EGA 0 ;
SI ( LO ) ;
MESSAGE 'TEMPERATURE PLAQUE EN K = ' TP ;
MESSAGE 'TEMPERATURE GAZ SORTIE EN K = ' TS ;
MESSAGE 'EFFICACITE RECOMBINEUR EN % = ' EFF ;
MESSAGE 'DEBIT EN KG/S = ' DEB ;
FINSI ;

* MODIFICATION DES CONDITIONS LIMITES

cl_YH2 = 'EXCO' 'YH2' RV.'CLIM' 'YH2' ;
cl_YO2 = 'EXCO' 'YO2' RV.'CLIM' 'YO2' ;
cl_YH2O= 'EXCO' 'YH2O' RV.'CLIM' 'YH2O' ;
cl_GNX = 'EXCO' '1GN' RV.'CLIM' '1GN' ;
cl_GNY = 'EXCO' '2GN' RV.'CLIM' '2GN' ;
cl_KN  = 'EXCO' 'KN' RV.'CLIM' 'KN' ;
cl_EN  = 'EXCO' 'EN' RV.'CLIM' 'EN' ;
cl_PSI = 'EXCO' 'PSIN' RV.'CLIM' 'PSIN' ;

cl_YH2 = 0.D0 * cl_YH2 + YH2s ;
cl_YO2 = 0.D0 * cl_YO2 + YO2s ;
cl_YH2O = 0.D0 * cl_YH2O + YH2Os ;
cl_PSI = 0.D0 * cl_PSI + PSIs ;

cl_GNYm = MANU 'CHPO' (MUR_HOR) 1 '2GN' 0. ;
cl_GNXm = MANU 'CHPO' (MUR_VER) 1 '1GN' 0. ;
cl_GNYe = MANU 'CHPO' (ENTREE) 1 '2GN' (DEB*length) ;
cl_GNXs = MANU 'CHPO' (SORTIE) 1 '1GN' (DEB*length*SIGN) ;

cl_GNX = 0.D0 * cl_GNX + cl_GNXm + cl_GNXs ;
cl_GNY = 0.D0 * cl_GNY + cl_GNYm + cl_GNYe ;

RV.'CLIM' = cl_YH2 + cl_YO2 + cl_YH2O + cl_GNX + cl_GNY +
        cl_KN + cl_EN + cl_PSI ;

detr cl_YH2 ;
detr cl_YO2 ;
detr cl_YH2O ;
detr cl_GNX ;
detr cl_GNY ;
detr cl_KN ;
detr cl_EN ;
detr cl_PSI ;
detr cl_GNYm ;
detr cl_GNXm ;
detr cl_GNYe ;
detr cl_GNXs ;

 as2 ama1  = 'KOPS' 'MATRIK' ;
FINPROC as2 ama1;


*********************************************************************
* PROCEDURE CALCUL1
*********************************************************************
DEBPROC CALCUL1 ;
ARGU RVX*'TABLE' ;

RV = RVX.'EQEX' ;
RVP = RV.'PROJ' ;

RV.PASDETPS.'DELTAT' = 0.5 ;

* filtres sur fractions massiques et calcul de la fraction massique d'azote

YH2  = RV.INCO.'YH2' ;
YO2  = RV.INCO.'YO2' ;
YH2O = RV.INCO.'YH2O' ;
YH2  = KOPS YH2 '|<' 0. ;
YO2  = KOPS YO2 '|<' 0. ;
YH2O = KOPS YH2O '|<' 0. ;

RV.INCO.'YH2' =  YH2 ;
RV.INCO.'YO2'  = YO2 ;
RV.INCO.'YH2O' = YH2O ;
RV.INCO.'YN2'  = KOPS 1.0 '-' RV.INCO.'YH2O' ;
RV.INCO.'YN2'  = KOPS RV.INCO.'YN2' '-' RV.INCO.'YH2' ;
RV.INCO.'YN2'  = KOPS RV.INCO.'YN2' '-' RV.INCO.'YO2' ;

* calcul de la constante des gaz et de la temperature

R = KOPS (KOPS YH2 '*' RH2) '+' (KOPS YO2 '*' RO2) ;
R = KOPS R '+' (KOPS RV.INCO.'YN2' '*' RN2) ;
R = KOPS R '+' (KOPS YH2O '*' RH2O) ;
RV.INCO.'R'  = KCHT $MT 'SCAL' 'SOMMET' R ;
T = KOPS RV.INCO.'PSIN' '/' R ;
RV.INCO.'TN' = KCHT $MT 'SCAL' 'SOMMET' T ;

* calcul des concentrations max et min d'hydrogène

DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/20 ;
LO = (DD-(20*NN)) EGA 0 ;
SI ( LO ) ;
M = KOPS Rg '/' RV.INCO.'R' ;
XH2 = KOPS RV.INCO.'YH2' '*' M ;
XH2 = XH2/MH2 ;
XH2 = XH2*100. ;
XH2MAX = MAXI XH2 ;
XH2MIN = MINI XH2 ;
P_XH2MAX = PROG XH2MAX ;
P_XH2MIN = PROG XH2MIN ;
RV.INCO.'XH2MAX' = RV.INCO.'XH2MAX' ET P_XH2MAX ;
RV.INCO.'XH2MIN' = RV.INCO.'XH2MIN' ET P_XH2MIN ;
FINSI ;

* calcul de rho à partir de la loi d'état des gaz parfaits

RV.INCO.'RHO' = KOPS (RV.INCO.'PM') '/' (RV.INCO.'PSIN') ;
RV.INCO.'RHOC' = NOEL $MT RV.INCO.'RHO' ;
RV.INCO.'RHOC' = KCHT $MT 'SCAL' 'CENTRE' (RV.INCO.'RHOC') ;
RHOM = (SOMT (KOPS RV.INCO.'RHOC' '*' VOL))/VOLT ;
RV.INCO.'RHOM' = RHOM ;

* calcul du terme (rho-rhom)*g de la QDM

DRHO = KOPS (RV.INCO.'RHOC') '-' (RV.INCO.'RHOM') ;
rogx = KCHT $MT SCAL CENTRE 0. ;
rogy = KCHT $MT SCAL CENTRE (-9.81*DRHO) ;
rogx = nomc 'UX' rogx 'NATU' 'DISCRET' ;
rogy = nomc 'UY' rogy 'NATU' 'DISCRET' ;
RV.INCO.'ROG' = KCHT $MT VECT CENTRE (rogx ET rogy) ;

* calcul la vitesse à partir de la qdm

GN = RV.INCO.'GN' ;
gnx= kcht $MT scal sommet (exco 'UX' gn) ;
gny= kcht $MT scal sommet (exco 'UY' gn) ;
unx = kops gnx '/' RV.INCO.'RHO' ;
uny = kops gny '/' RV.INCO.'RHO' ;
unx = nomc 'UX' unx 'NATU' 'DISCRET' ;
uny = nomc 'UY' uny 'NATU' 'DISCRET' ;
un = kcht $MT vect sommet (unx et uny) ;
RV.INCO.'UN' = un ;

* calcul de nut à partir de mut et de rho

RV.INCO.'NUT' = KOPS (RV.INCO.'MUT') '/' (RV.INCO.'RHOC') ;

 as2 ama1  = 'KOPS' 'MATRIK' ;
FINPROC as2 ama1;

*********************************************************************
* PROCEDURE CALCUL2
*********************************************************************
DEBPROC CALCUL2 ;
ARGU RVX*'TABLE' ;

RV = RVX.'EQEX' ;
RVP = RV.'PROJ' ;

* on récupère le pas de temps

Dt = RV.PASDETPS.'DELTAT' ;
Dt = Dt * RV.'ALFA' ;

DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/20 ;
LO = (DD-(20*NN)) EGA 0 ;
SI ( LO ) ;
P_TEMPS = PROG RV.PASDETPS.'TPS' ;
RV.INCO.'TEMPS' = RV.INCO.'TEMPS' ET P_TEMPS ;
FINSI ;

* calcul l'intégrale se trouvant dans le terme Dp/Dt.

ZT = KOPS (RV.INCO.'PSIN') '-' (RV.INCO.'PSI1') ;
ZT = KOPS ZT '/' Dt ;
ZT = KOPS ZT '/' (RV.INCO.'PSIN') ;

ZZ = KOPS ZT '*' RV.INCO.'RHO' ;
ZZ = NOEL $MT ZZ ;
ZZ = KCHT $MT 'SCAL' 'CENTRE' ZZ ;
ZZT = SOMT ( KOPS ZZ '*' VOL ) ;

RV.INCO.'PSI1' = KCHT $MT 'SCAL' 'SOMMET' (RV.INCO.'PSIN') ;

* calcul de dPdt

q0 = 'DBIT' RV.INCO.'GN' $SORTIE ;
q1 = 'DBIT' RV.INCO.'GN' $ENTREE ;
q0 = q0+q1 ;
dPdt = ZZT + q0 ;
dPdt = dPdt*(RV.INCO.'PM')/VOLT/RV.INCO.'RHOM' ;

* terme source de l'équation d'énergie

zuzu = (gamma-1.)/gamma ;

QC = NOEL $MT RV.INCO.'Q' ;
QC = KCHT $MT 'SCAL' 'CENTRE' QC ;
TOTO = KOPS QC '+' dPdt ;
TOTO = KOPS TOTO '/' RV.INCO.'RHOC' ;
TOTO = KOPS TOTO '*' zuzu ;
RV.INCO.'S' = KCHT $MT 'SCAL' 'CENTRE' TOTO ;

* terme source équation de Poisson

Z1 = dPdt/RV.INCO.'PM' ;
ZP = KOPS RV.INCO.'RHOC' '*' Z1 ;
ZS = KOPS ZP '-' ZZ ;
ZZS = KOPS ZS '*' VOL ;
ZZS = ZZS * (-1.0) ;
RV.INCO.'ZS' = KCHT $MT 'SCAL' 'CENTRE' ZZS ;

* calcul de l'évolution de la pression 

RV.INCO.'PM' = RV.INCO.'PM' + (dPdt*dt) ;

* affichage informations toutes les 20 iterations

DD = RV.PASDETPS.'NUPASDT' ;
NN = DD/20 ;
LO = (DD-(20*NN)) EGA 0 ;
SI ( LO ) ;
MESSAGE '==========================================================' ;
MESSAGE 'TEMPS = ' RV.PASDETPS.'TPS' ' PRESSION = ' RV.INCO.'PM' ;
FINSI ;

 as2 ama1  = 'KOPS' 'MATRIK' ;
FINPROC as2 ama1;

***************************************************************
* JEU DE DONNEES NURETH-8 : CALCUL DE DISTRIBUTION/COMBUSTION *
* ALGORITHME 'COMPRESSIBLE FAIBLE MACH' SEMI-IMPLICITE        *
*                    === DISTRIBUTION ===                     *
***************************************************************

opti dime 2 ;
opti elem qua8 ;

*========================================================*
*               GENERATION DU MAILLAGE                   *
*========================================================*

L = 1. ;
H = 2. ;
height= 1. ;
depth = 0.3 ;
length= 0.2 ;

* position du recombineur
XR = 0.2 ;
YR = 0.2 ;
epsi = 0.01 ;
SREC = 'D' ;
DINJ = depth ;

A1 = 0.0 0.0 ;
A2 = L   0.0 ;
A3 = L   H   ;
A4 = 0.0 H   ;

R1 = XR YR ;
R2 = (XR+depth) YR ;
R3 = (XR+depth) (YR+height-depth) ;
R4 = (XR+depth) (YR+height) ;
R5 = XR (YR+height) ;
R6 = XR (YR+height-depth) ;

C1 = XR 0.0 ;
C2 = (XR+depth) 0.0 ;
C3 = L YR ;
C4 = L (YR+height-depth) ;
C5 = L (YR+height) ;
C6 = (XR+depth) H ;
C7 = XR H ;
C8 = 0.0 (YR+height) ;
C9 = 0.0 (YR+height-depth) ;
C10 = 0.0 YR ;

DE1 = 1.2 ;
DE2 = 0.8 ;
DE3 = 0.2 ;

SI (EGA SREC 'G') ;
DE4 = DE3 ;
DE5 = DE3 ;
SINON ;
DE4 = DE3 ;
DE5 = DE3 ;
FINSI ;

A1C1 = 'DROI' A1 C1 'DINI' DE1 'DFIN' DE4 ;
C1R1 = 'DROI' C1 R1 'DINI' DE2 'DFIN' DE3 ;
R1C10 = 'DROI' R1 C10 'DINI' DE4 'DFIN' DE1 ;
C10A1 = 'DROI' C10 A1 'DINI' DE3 'DFIN' DE2 ;

C1C2 = 'DROI' C1 C2 'DINI' DE3 'DFIN' DE3 ;
C2R2 = 'DROI' C2 R2 'DINI' DE2 'DFIN' DE3 ;
R2R1 = 'DROI' R2 R1 'DINI' DE3 'DFIN' DE3 ;
R1C1 = 'DROI' R1 C1 'DINI' DE3 'DFIN' DE2 ;

C2A2 = 'DROI' C2 A2 'DINI' DE5 'DFIN' DE1 ;
A2C3 = 'DROI' A2 C3 'DINI' DE2 'DFIN' DE3 ;
C3R2 = 'DROI' C3 R2 'DINI' DE1 'DFIN' DE5 ;
R2C2 = 'DROI' R2 C2 'DINI' DE3 'DFIN' DE2 ;

R2C3 = 'DROI' R2 C3 'DINI' DE5 'DFIN' DE1 ;
C3C4 = 'DROI' C3 C4 'DINI' DE3 'DFIN' DE3 ;
C4R3 = 'DROI' C4 R3 'DINI' DE1 'DFIN' DE5 ;
R3R2 = 'DROI' R3 R2 'DINI' DE3 'DFIN' DE3 ;

R3C4 = 'DROI' R3 C4 'DINI' DE5 'DFIN' DE1 ;
C4C5 = 'DROI' C4 C5 'DINI' DE3 'DFIN' DE3 ;
C5R4 = 'DROI' C5 R4 'DINI' DE1 'DFIN' DE5 ;
R4R3 = 'DROI' R4 R3 'DINI' DE3 'DFIN' DE3 ;

R4C5 = 'DROI' R4 C5 'DINI' DE5 'DFIN' DE1 ;
C5A3 = 'DROI' C5 A3 'DINI' DE3 'DFIN' DE1 ;
A3C6 = 'DROI' A3 C6 'DINI' DE1 'DFIN' DE5 ;
C6R4 = 'DROI' C6 R4 'DINI' DE1 'DFIN' DE3 ;

R5R4 = 'DROI' R5 R4 'DINI' DE3 'DFIN' DE3 ;
R4C6 = 'DROI' R4 C6 'DINI' DE3 'DFIN' DE1 ;
C6C7 = 'DROI' C6 C7 'DINI' DE3 'DFIN' DE3 ;
C7R5 = 'DROI' C7 R5 'DINI' DE1 'DFIN' DE3 ;

C8R5 = 'DROI' C8 R5 'DINI' DE1 'DFIN' DE4 ;
R5C7 = 'DROI' R5 C7 'DINI' DE3 'DFIN' DE1 ;
C7A4 = 'DROI' C7 A4 'DINI' DE4 'DFIN' DE1 ;
A4C8 = 'DROI' A4 C8 'DINI' DE1 'DFIN' DE3 ; 

C9R6 = 'DROI' C9 R6 'DINI' DE1 'DFIN' DE4 ;
R6R5 = 'DROI' R6 R5 'DINI' DE3 'DFIN' DE3 ;
R5C8 = 'DROI' R5 C8 'DINI' DE4 'DFIN' DE1 ;
C8C9 = 'DROI' C8 C9 'DINI' DE3 'DFIN' DE3 ;

C10R1 = 'DROI' C10 R1 'DINI' DE1 'DFIN' DE4 ;
R1R6 = 'DROI' R1 R6 'DINI' DE3 'DFIN' DE3 ;
R6C9 = 'DROI' R6 C9 'DINI' DE4 'DFIN' DE1 ;
C9C10 = 'DROI' C9 C10 'DINI' DE3 'DFIN' DE3 ;


COMPA = 'DALLER' A1C1 C1R1 R1C10 C10A1 'PLAN' ;
COMPB = 'DALLER' C1C2 C2R2 R2R1 R1C1 'PLAN' ;
COMPC = 'DALLER' C2A2 A2C3 C3R2 R2C2 'PLAN' ;
COMPD = 'DALLER' R2C3 C3C4 C4R3 R3R2 'PLAN' ;
COMPE = 'DALLER' R3C4 C4C5 C5R4 R4R3 'PLAN' ;
COMPF = 'DALLER' R4C5 C5A3 A3C6 C6R4 'PLAN' ;
COMPG = 'DALLER' R5R4 R4C6 C6C7 C7R5 'PLAN' ;
COMPH = 'DALLER' C8R5 R5C7 C7A4 A4C8 'PLAN' ;
COMPI = 'DALLER' C9R6 R6R5 R5C8 C8C9 'PLAN' ;
COMPJ = 'DALLER' C10R1 R1R6 R6C9 C9C10 'PLAN' ;

COMPA = 'COUL' COMPA 'ROUG' ;
COMPB = 'COUL' COMPB 'BLEU' ;
COMPC = 'COUL' COMPC 'JAUN' ;
COMPD = 'COUL' COMPD 'TURQ' ;
COMPE = 'COUL' COMPE 'BLAN' ;
COMPF = 'COUL' COMPF 'ROUG' ;
COMPG = 'COUL' COMPG 'VERT' ;
COMPH = 'COUL' COMPH 'BLAN' ;
COMPI = 'COUL' COMPI 'ROUG' ;
COMPJ = 'COUL' COMPJ 'BLEU' ;

MT = COMPA ET COMPB ET COMPC ET 
     COMPD ET COMPE ET COMPF ET COMPG ET COMPH ET COMPI ET COMPJ ;
MMT = Chan MT 'QUAF';
'ELIM' epsi MT ;
WALL = A1C1 ET C1C2 ET C2A2 ET A2C3 ET C3C4 ET C4C5 ET C5A3 ET
       A3C6 ET C6C7 ET C7A4 ET A4C8 ET C8C9 ET C9C10 ET C10A1 ;

$MT = 'MODE' MMT 'NAVIER_STOKES' DISCR ;
MT  = 'DOMA' $MT 'MAILLAGE' ;
CNT =  CONT MT ;


ENTREE = R2R1 ;
Mentree= 'CHAN' entree 'QUAF';
$ENTREE = 'MODE' MENTREE 'NAVIER_STOKES' DISCR ;
entree  = 'DOMA' $entree 'MAILLAGE';
SI (EGA SREC 'G') ;
SORTIE = R6R5 ;
BOUCHEE = R4R3 ;
SIGN = -1.0 ;
SINON ;
SORTIE = R4R3 ;
BOUCHEE = R6R5 ;
SIGN = 1.0 ;
FINSI ;
Msortie = 'CHAN' sortie 'QUAF';
$SORTIE = 'MODE' MSORTIE 'NAVIER_STOKES' DISCR ;
sortie  = 'DOMA' $sortie 'MAILLAGE';

Mwall = 'CHAN' wall 'QUAF';
$WALL = 'MODE' MWALL 'NAVIER_STOKES' DISCR ;
wall  = 'DOMA' $wall 'MAILLAGE';

VOL = 'DOMA' $MT 'VOLUME' ;
VOLT = 'SOMT' VOL ;
VOL = KCHT $MT 'SCAL' 'CENTRE' VOL ;

ELIM (Mmt et Mentree et Msortie et Mwall) epsi;

'MESSAGE' 'VOLUME TOTAL = ' VOLT ;

******************************************
* FRONTIERES POUR CONDITIONS AUX LIMITES *
******************************************
 
MUR_HOR = A1C1 ET C1C2 ET C2A2 ET A3C6 ET C6C7 ET C7A4 ET R5R4 ;
MUR_VER = A2C3 ET C3C4 ET C4C5 ET C5A3 ET A4C8 ET C8C9 
                ET C9C10 ET C10A1 ET R3R2 ET R1R6 ET BOUCHEE ;

*========================================================*
*               DONNEES DU CALCUL DE DISTRIBUTION        *
*========================================================*

*--------------------------------------
* temperature et pression de saturation
*--------------------------------------
T = 373.0 ;
ZZ = 7000.*(-1.)/T ;
PSAT = 1.055E21/(T ** 5.)* (EXP ZZ) ;
PSAT = PSAT*101325.0 ;

*--------------------------------------
* masses molaires et constantes des gaz
*--------------------------------------
MH2 = 2.0E-3 ;
MO2 = 32.0E-3 ;
MN2 = 28.0E-3 ;
MH2O = 18.0E-3 ;

Rg = 8.313 ;

RH2 = Rg/MH2 ;
RO2 = Rg/MO2 ;
RN2 = Rg/MN2 ;
RH2O = Rg/MH2O ;

*-------------------
* conditions air sec  
*-------------------
P1 = 1.E5 ;
T1 = 273.0 ;
XH2_SEC = 0.1 ;
XAIR_SEC = 1.0 - XH2_SEC ;

*-----------------------------
* pressions partielles des gaz
* fractions volumiques
*-----------------------------

PVAP = PSAT ;
PAIR = (XAIR_SEC*P1)*(T/T1) ;
PH2 = (XH2_SEC*P1)*(T/T1) ;
P = PVAP + PAIR + PH2 ;

XH2 = PH2/P ;
XAIR = PAIR/P ;
XH2O = PVAP/P ;
XO2 = 0.21*XAIR ;
XN2 = 1.0 - XH2 -XH2O - XO2 ;

*---------------------------------------------
* masse molaire du melange et constante du gaz
*---------------------------------------------
M = (XH2*MH2) + (XO2*MO2) + (XN2*MN2) + (XH2O*MH2O) ;
R = Rg/M ;

*------------------------------------------------------------
* densite du melange (loi d'etat GP)
*------------------------------------------------------------
PSI = R*T ;
RHO = P/PSI ;

*------------------------
* Caractéristiques du jet
*------------------------

XH2Jet = 0.0 ;
XH2OJet = 0.0 ;
XO2Jet = 0.21*( 1.0 - XH2Jet - XH2OJet ) ;
XN2Jet = 1.0 - XH2Jet - XH2OJet - XO2Jet ;
MJet = (XH2Jet*MH2) + (XH2OJet*MH2O) + (XO2Jet*MO2) +
       (XN2Jet*MN2) ;
RJet = Rg/MJet ;
TJet = 650.0 ;
PSIJet = Rjet*Tjet ;
RhoJet = P/PSIJet ;
GJet = 2.5 ;
GJetabs= GJet ;
UJet = GJet/RhoJet ;
KJet = 0.05*UJet*UJet ;
EJet = 0.02*(UJet**3.)/DINJ ;
Gjet = Gjet*SIGN ;

*------------------------------------------------
* fractions massiques des differents constituants
*------------------------------------------------
YH2 = XH2*MH2/M ;
YO2 = XO2*MO2/M ;
YN2 = XN2*MN2/M ;
YH2O = XH2O*MH2O/M ;
YH2Jet = XH2Jet*MH2/MJet ;
YH2OJet =XH2OJet*MH2O/MJet ;
YO2Jet = XO2Jet*MO2/MJet ;
YN2Jet =XN2Jet*MN2/MJet ;

*------------------------------------------------------------------
* Cp des différents constituants et du mélange (supposés constants)
*------------------------------------------------------------------
CPH2 = 13514.04 + (1.684537*T) ;
CPH2O = 1715.632 + (0.552805*T) ;
CPN2 = 1006.15 + (0.1387166*T) ;
CPO2 = 907.580 + (0.1420522*T) ;

CP = (YH2*CPH2) + (YH2O*CPH2O) + (YO2*CPO2) + (YN2*CPN2) ;

gamma = CP/(CP-R) ;

*----------------------------------------------------
* calcul d'une vitesse de référence (pour les tracés)
*----------------------------------------------------

uref = gamma*R*T ;
uref = uref**0.5 ;
uref = 0.01*uref ;
ampl = 1./uref ;

*------------------------------------------------------------------------
* Prandtl, Schmidt, viscosité (loi de Sutherland), conductivité thermique
* coefficients de diffusion moléculaire  
*------------------------------------------------------------------------
Pr = 0.7 ;
Prt = 1.0 ;
Sct = 1.0 ;

Mu = 1.716E-5*((T/273.0)**1.5)*(273.0+110.5)/(T+110.5) ;
Nu = Mu/RHO ;
Lambda = Mu*CP/Pr ;

alpha = Lambda/RHO/CP ;

DH2O = 2.55E-5 ;
DH2 = 7.12E-5 ;
DO2 = 2.06E-5 ;

PSIWALL = T*R ;
h = 10. ;

U0 = 1.0D0 ;
L0 = 1.0D0 ;

*==============================================================
* TABLE EQEX CONTENANT LES EQUATIONS A RESOUDRE :           
*  0) FILTRE K-E
*  1) QUANTITE DE MOUVEMENT     --- OPERATEUR NSKE
*  2) EQUATION DE L'ENERGIE     --- OPERATEUR TSCAL
*  3) TRANSPORT DES ESPECES     --- OPERATEUR TSCAL
* AINSI QUE 2 PROCEDURES (CALCUL1 ET CALCUL2) POUR L'ALGORITHME
* 'FAIBLE MACH'
*  4) CONDITIONS AUX LIMITES
*==============================================================

RV = 'EQEX' $MT 'ITMA' 100 'TFINAL' 10. 'ALFA' 0.8
 'ZONE' $MT 'OPER'      'CALCUL1'
 'ZONE' $MT 'OPER'      'FILTREKE' 'UN' L0 NU 'INCO' 'KN' 'EN'
 'OPTI' 'CONS'
 'ZONE' $MT 'OPER'      'NSKE' 'RHOC' MU 'MUT' 'UN' 'ROG'
                                'INCO' 'GN' 'KN' 'EN'
 'OPTI' 'NOCONS'
 'ZONE' $MT 'OPER'      'TSCAL' alpha 'UN' 'S' 'NUT' Prt 
                                'INCO' 'PSIN'
 'OPTI' 'EFM1' 'EXPL'
 'ZONE' $WALL 'OPER'    'ECHI' h PSIWALL 'INCO' 'PSIN'  ;

RV = 'EQEX' RV
 'ZONE' $MT 'OPER'      'TSCAL' DH2 'UN' 0.0 'NUT' SCT 
                                'INCO' 'YH2'
 'ZONE' $MT 'OPER'      'TSCAL' DO2 'UN' 0.0 'NUT' SCT 
                                'INCO' 'YO2'
 'ZONE' $MT 'OPER'      'TSCAL' DH2O 'UN' 0.0 'NUT' SCT 
                                'INCO' 'YH2O' 
 'ZONE' $MT 'OPER'      'CALCUL2' 
 'ZONE' $MT 'OPER'      'RECOMB' ;

  RV=EQEX RV OPTI EFM1 'CENTREE'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'GN' 'DELTAT' 'INCO' 'GN'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'PSIN' 'DELTAT' 'INCO' 'PSIN'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'YH2' 'DELTAT' 'INCO' 'YH2'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'YO2' 'DELTAT' 'INCO' 'YO2'
  ;
  RV=EQEX RV OPTI EFM1 'CENTREE'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'YH2O' 'DELTAT' 'INCO' 'YH2O'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'KN' 'DELTAT' 'INCO' 'KN'
  'ZONE' $MT      'OPER' 'DFDT' 1. 'EN' 'DELTAT' 'INCO' 'EN'
  ;
 RV = 'EQEX' RV
 'CLIM' 'GN' 'UIMP' MUR_VER 0.0
        'GN' 'VIMP' MUR_HOR 0.0
        'GN' 'UIMP' SORTIE  GJet
        'GN' 'VIMP' SORTIE  0.0
        'GN' 'UIMP' ENTREE  0.0
        'GN' 'VIMP' ENTREE  GJetabs ;
RV = 'EQEX' RV
 'CLIM' 'PSIN' 'TIMP' SORTIE  PSIJet 
        'YH2' 'TIMP' SORTIE YH2Jet
        'YO2' 'TIMP' SORTIE YO2Jet 
        'YH2O' 'TIMP' SORTIE YH2OJet 
        'KN' 'TIMP' SORTIE  KJet
        'EN' 'TIMP' SORTIE  EJet ;

*===========================================================
* TABLE EQEX POUR L'EQUATION DE POISSON (SOLVEUR ELLIPTIQUE)

RVP = EQEX 'OPTI' 'EF' KPRESS
 'ZONE' $MT    OPER  KBBT  -1. betap  INCO 'GN' 'PRES'
           'OPTI' 'EF' 'CENTREE' 'INCOD' KPRESS
 'ZONE' $MT    OPER  FIMP  'ZS'       INCO 'PRES'
;

    rvp.'METHINV'.TYPINV=1 ;
    rvp.'METHINV'.IMPINV=0 ;
    rvp.'METHINV'.NITMAX=300;
    rvp.'METHINV'.PRECOND=3 ;
    rvp.'METHINV'.RESID  =1.e-8 ;
    rvp.'METHINV' . 'FCPRECT'=100 ;
    rvp.'METHINV' . 'FCPRECI'=100 ;

  RV.'PROJ'     =RVP ;

*===========================================================

*==========================================================
* TABLE INCO CONTENANT LES INCONNUES ET DONNEES DU PROBLEME 
*==========================================================

  RV.'NOMVI' = 'GN' ;

  RV.'INCO' = 'TABLE' 'INCO' ;
  RVP.'INCO' = RV.'INCO' ;

* vitesse et quantité de mouvement
  RV.INCO.'UN' = kcht $MT VECT SOMMET (0. 0.);
  RV.INCO.'GN' = kcht $MT VECT SOMMET (0. 0.);
* pression             
  RV.INCO.'PRES' = kcht $MT SCAL KPRESS 0.;
* température
  RV.INCO.'PSIN' = kcht $MT SCAL SOMMET   PSI ;
  RV.INCO.'PSI1' = kcht $MT SCAL SOMMET   PSI ;
  RV.INCO.'TN'   = kcht $MT SCAL SOMMET   T ;
  RV.INCO.'TPLAQUE' = T ;
* variables modèle de turbulence
  RV.INCO.'EN' = kcht $MT SCAL SOMMET   1.E-5 ;
  RV.INCO.'KN' = kcht $MT SCAL SOMMET   1.E-5 ;
  RV.INCO.'MUT' = kcht $MT SCAL CENTRE  Mu ;
  RV.INCO.'NUT' = kcht $MT SCAL CENTRE  Nu ;
* masse volumique
  RV.INCO.'RHO' = kcht $MT SCAL SOMMET  RHO    ;
  RV.INCO.'RHOC'= kcht $MT SCAL CENTRE  RHO    ;
  RV.INCO.'RHOM'= RHO ;
* fractions massiques
  RV.INCO.'YH2' = kcht $MT SCAL SOMMET  YH2   ;
  RV.INCO.'YO2' = kcht $MT SCAL SOMMET  YO2   ;
  RV.INCO.'YN2' = kcht $MT SCAL SOMMET  YN2   ;
  RV.INCO.'YH2O'= kcht $MT SCAL SOMMET  YH2O   ;
* termes sources (Poisson/énergie/QDM)
  RV.INCO.'S'=kcht $MT SCAL CENTRE   0.    ;
  RV.INCO.'Q'=kcht $MT SCAL SOMMET   0.    ;
  RV.INCO.'ROG'=kcht $MT VECT CENTRE   (0. 0.)     ;
  RV.INCO.'ZS' = KCHT $MT SCAL CENTRE 0.0 ;
* pression
  RV.INCO.'PM' = P ;

* progressions
  RV.INCO.'TEMPS' = PROG 0. ;
  RV.INCO.'XH2MAX' = PROG XH2 ;
  RV.INCO.'XH2MIN' = PROG XH2 ;
  RV.INCO.'TP'    = PROG RV.INCO.'TPLAQUE' ;
  RV.INCO.'DEBIT' = PROG 0. ;
  RV.INCO.'EFFIC' = PROG 0. ;
  RV.INCO.'TS'    = PROG T ;

MASINI = KOPS RV.INCO.'RHOC' '*' VOL ;
MASINI = SOMT MASINI ;

  RV.INCO.'PRESSIO' = PROG P ;
  RV.INCO.'MASSETOT' = PROG MASINI ;

RV . 'INCO' . 'A'      = 0.48D-8 ;
RV . 'INCO' . 'B'      = 0.58D-3 ;
RV . 'INCO' . 'XH2ON'  = 0.005 ;
RV . 'INCO' . 'XH2OFF' = 0.005 ;
RV . 'INCO' . 'BETA'   = 0.2 ;

exec rv ;

SI (RV.PASDETPS.'TPS' < 8.0) ;
        ERREUR 5 ;
FINSI ;
SI (MAXI(RV.INCO.'DEBIT') < 4.9D-2);
        ERREUR 5 ;
FINSI ;
SI (MAXI(RV.INCO.'TP') < 690.D0);
        ERREUR 5 ;
FINSI ;
SI (MAXI(RV.INCO.'TN') < 550.D0);
        ERREUR 5 ;
FINSI ;

FIN ;
 

 

 

 

 

 

 

 

 

 

