C FLAM SOURCE TTMF3 12/07/05 21:15:44 7425 SUBROUTINE FLAM CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C REAL*8 MH2,MO2,MN2,MH2O C DATA Rg,MH2,MO2,MN2,MH2O/8.313D0,2.0D-3,32.0D-3,28.0D-3,18.0D-3/ C DATA RRH2,RRO2,RRN2,RRH2O/4156.5D0,259.8D0,296.9D0,461.8D0/ -INC CCOPTIO -INC CCREEL C- -INC SMCHPOI -INC SMLREEL C POINTEUR MYH2.MCHPOI,MYO2.MCHPOI,MYN2.MCHPOI,MYH2O.MCHPOI, 1 MTEMP.MCHPOI,MQ.MCHPOI,MRHO.MCHPOI,MCV.MCHPOI,MR.MCHPOI, 2 MZK.MCHPOI,MZE.MCHPOI,MYH2u.MCHPOI,MTSEUI.MCHPOI, 3 MZH2.MCHPOI,MZO2.MCHPOI,MZN2.MCHPO,MZH2O.MCHPOI POINTEUR NYH2.MPOVAL,NYO2.MPOVAL,NYN2.MPOVAL,NYH2O.MPOVAL, 1 NTEMP.MPOVAL,NQ.MPOVAL,NRHO.MPOVAL,NCV.MPOVAL,NR.MPOVAL, 2 NZK.MPOVAL,NZE.MPOVAL,NYH2u.MPOVAL,NTSEUI.MPOVAL, 3 NZH2.MPOVAL,NZO2.MPOVAL,NZN2.MPOVAL,NZH2O.MPOVAL C PARAMETER (NBOPT=8) PARAMETER (NBCV=2) PARAMETER (NBINT=2) PARAMETER (NBMOD=2) CHARACTER*8 MOTOP,TOPTIO(NBOPT),COPTIO(NBCV),TYPE,MODEL CHARACTER*8 IOPTIO(NBINT),MODREC(NBMOD) DATA TOPTIO/'LAMINAIR','EBU ','ARRHENIU','RECOMBIN', 1 'RECOMB0D','HEAVYSID','CREBCOM','CREBCOM2'/ DATA COPTIO/'LINEAIRE','QUADRATI'/ DATA MODREC/'SIEMENS ','HEATER '/ C C================================== C Lecture de l'option de combustion C================================== C CALL LIRCHA(MOTOP,1,IRET) CALL OPTLI(IP,TOPTIO,MOTOP,NBOPT) C C====================================================== C Branchements sur les différents modèles de combustion C====================================================== C C================================= C Cas de la déflagration laminaire C================================= C IF (IP .EQ. 1) THEN C C Lecture des paramètres C CALL LIROBJ('CHPOINT ',MRHO,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MCV,1,IRET) IF (IRET.EQ.0) RETURN C C Lecture de l'option sur la forme des Cv C CALL LIRCHA(MOTOP,1,IRET) CALL OPTLI(IP,COPTIO,MOTOP,NBCV) IF (IP .EQ. 0) THEN CALL ERREUR(251) RETURN ENDIF IF ( MOTOP .EQ. 'LINEAIRE') THEN NCVOPT = 1 ELSEIF( MOTOP .EQ. 'QUADRATI') THEN NCVOPT = 2 ENDIF C CALL LIROBJ('CHPOINT ',MR,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYH2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYO2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYN2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYH2O,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MTEMP,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(Dt,1,IRET) IF (IRET.EQ.0) RETURN C C Activation champoints et vérification des pointeurs C CALL LICHT(MRHO,NRHO,TYPE,IGEO) CALL LICHT(MCV,NCV,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MR,NR,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYH2,NYH2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYO2,NYO2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYN2,NYN2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYH2O,NYH2O,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MTEMP,NTEMP,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF C C Création et activation des chpoints résultats C NC=1 CALL CRCHPT(TYPE,IGEO,NC,MZH2) CALL LICHT(MZH2,NZH2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZO2) CALL LICHT(MZO2,NZO2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZN2) CALL LICHT(MZN2,NZN2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZH2O) CALL LICHT(MZH2O,NZH2O,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MQ) CALL LICHT(MQ,NQ,TYPE,IGEO) C C Nombre de Points du Maillage C NBPTS = NRHO.VPOCHA(/1) C C Calcul des nouvelles concentrations et de l'énergie libérée C CALL FLAM1(NBPTS,NRHO.VPOCHA,NCV.VPOCHA,NR.VPOCHA,NYH2.VPOCHA, 1 NYO2.VPOCHA,NYN2.VPOCHA,NYH2O.VPOCHA,NTEMP.VPOCHA, 2 NZH2.VPOCHA,NZO2.VPOCHA,NZN2.VPOCHA,NZH2O.VPOCHA, 3 NQ.VPOCHA,Dt,NCVOPT) C C Ecriture des chpoints résultats C CALL ECROBJ('CHPOINT ',MQ) CALL ECROBJ('CHPOINT ',MZH2O) CALL ECROBJ('CHPOINT ',MZN2) CALL ECROBJ('CHPOINT ',MZO2) CALL ECROBJ('CHPOINT ',MZH2) C C Désactivation des segments C SEGDES NZH2,NZO2,NZN2,NZH2O,NQ,NRHO,NCV,NR,NYH2 SEGDES NYO2,NYN2,NYH2O,NTEMP C C C================================== C Cas de la déflagration turbulente C================================== C ELSEIF( IP .EQ. 2) THEN C C Lecture des paramètres C CALL LIROBJ('CHPOINT ',MRHO,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MCV,1,IRET) IF (IRET.EQ.0) RETURN C C Lecture de l'option sur la forme des Cv C CALL LIRCHA(MOTOP,1,IRET) CALL OPTLI(IP,COPTIO,MOTOP,NBCV) IF(IP .EQ. 0) THEN CALL ERREUR(251) RETURN ENDIF IF ( MOTOP .EQ. 'LINEAIRE') THEN NCVOPT = 1 ELSEIF( MOTOP .EQ. 'QUADRATI') THEN NCVOPT = 2 ENDIF C CALL LIROBJ('CHPOINT ',MR,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYH2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYO2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYN2,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYH2O,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MTEMP,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(Dt,1,IRET) IF (IRET.EQ.0) RETURN C paramètres spécifiques à l'option choisie CALL LIROBJ('CHPOINT ',MZK,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MZE,1,IRET) IF (IRET.EQ.0) RETURN CALL LIROBJ('CHPOINT ',MYH2u,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(C_EBU,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(CMIN,0,IRET) IF (IRET.EQ.0) CMIN=1.D-4 C C Activation champoints et vérification des pointeurs C CALL LICHT(MRHO,NRHO,TYPE,IGEO) CALL LICHT(MCV,NCV,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MR,NR,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYH2,NYH2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYO2,NYO2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYN2,NYN2,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYH2O,NYH2O,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MTEMP,NTEMP,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MZK,NZK,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MZE,NZE,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF CALL LICHT(MYH2u,NYH2u,TYPE,IGEO0) IF (IGEO.NE.IGEO0) THEN WRITE(IOIMP,100) RETURN ENDIF C C Création et activation des chpoints résultats C NC=1 CALL CRCHPT(TYPE,IGEO,NC,MZH2) CALL LICHT(MZH2,NZH2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZO2) CALL LICHT(MZO2,NZO2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZN2) CALL LICHT(MZN2,NZN2,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MZH2O) CALL LICHT(MZH2O,NZH2O,TYPE,IGEO) CALL CRCHPT(TYPE,IGEO,NC,MQ) CALL LICHT(MQ,NQ,TYPE,IGEO) C C Nombre de Points C NBPTS = NRHO.VPOCHA(/1) C CALL FLAM2(NBPTS,NRHO.VPOCHA,NCV.VPOCHA,NR.VPOCHA,NYH2.VPOCHA, 1 NYO2.VPOCHA,NYN2.VPOCHA,NYH2O.VPOCHA,NTEMP.VPOCHA, 2 NZK.VPOCHA,NZE.VPOCHA,NYH2u.VPOCHA, 3 NZH2.VPOCHA,NZO2.VPOCHA,NZN2.VPOCHA,NZH2O.VPOCHA, 4 NQ.VPOCHA,C_EBU,Dt,CMIN,NCVOPT) C C Ecriture des chpoints résultats C CALL ECROBJ('CHPOINT ',MQ) CALL ECROBJ('CHPOINT ',MZH2O) CALL ECROBJ('CHPOINT ',MZN2) CALL ECROBJ('CHPOINT ',MZO2) CALL ECROBJ('CHPOINT ',MZH2) C C Désactivation des segments C SEGDES NZH2,NZO2,NZN2,NZH2O,NQ,NRHO,NCV,NR,NYH2 SEGDES NYO2,NYN2,NYH2O,NTEMP,NZK,NZE,NYH2u C C=================================== C Cas de la loi d'Arrhénius générale C=================================== C ELSEIF( IP .EQ. 3) THEN CALL FLAMB() C C=================================== C Maquette CREBCOM C=================================== C ELSEIF( IP .EQ. 7) THEN CALL FLAMCR() IF(IERR.NE.0)RETURN C C====================================== C Maquette CREBCOM, modele non-homogene C====================================== C ELSEIF( IP .EQ. 8) THEN CALL FLACR2() IF(IERR.NE.0)RETURN C C============================================ C Combustion catalytique : modèle recombineur C============================================ C ELSEIF((IP .EQ. 4) .OR. (IP .EQ. 5)) THEN C C Lecture des paramètres C YH2MOY : flottant : Fraction massique moyenne de H2 à l'entrée du PAR C YO2MOY : flottant : Fraction massique moyenne de O2 à l'entrée du PAR C YN2MOY : flottant : Fraction massique moyenne de N2 à l'entrée du PAR C YH2OMOY : flottant : Fraction massique moyenne de H2O à l'entrée du PAR C YHEMOY : flottant : Fraction massique moyenne de HE à l'entrée du PAR C YCO2MOY : flottant : Fraction massique moyenne de CO2 à l'entrée du PAR C YCOMOY : flottant : Fraction massique moyenne de CO à l'entrée du PAR C TMOY : flottant : Température moyenne du gaz à l'entrée du PAR (K) C TPLA : flottant : Température moyenne des plaques du PAR (K) C PRESS : flottant : Pression moyenne autour du PAR (Pa) C DT : flottant : Pas de temps (s) C KALP : entier : Flag pour correction du coefficient d'échange C comme dans RALOC (voir fla009.eso) CALL LIRREE(YH2MOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YO2MOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YN2MOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YH2OMOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YHEMOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YCO2MOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(YCOMOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(TMOY,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(TPLA,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(PRESS,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(Dt,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRENT(KALP,1,IRET) IF (IRET.EQ.0) RETURN C Lecture du modèle de PAR à choisir parmi 'SIEMENS ' ou 'HEATER ' C MODEL : CHAR*8 : Nom du modèle de PAR CALL LIRCHA(MODEL,1,IRET) IF (IRET.EQ.0) RETURN CALL OPTLI(IQ,MODREC,MODEL,NBMOD) IF (IQ.EQ.1) THEN C Lecture des paramètres A et B du modele recombineur 'SIEMENS ' C (loi lineaire en pression) CALL LIRREE(A1,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(B1,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(XH2ON,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(XH2OFF,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(BETA,1,IRET) IF (IRET.EQ.0) RETURN JG = 5 SEGINI MLREEL PROG(1) = A1 PROG(2) = B1 PROG(3) = XH2ON PROG(4) = XH2OFF PROG(5) = BETA C C Calcul des conditions de sortie, de la temperature des plaques et du C débit dans le PAR (arret si débit ou température des plaques négatif) CALL FLAMR(YH2MOY,YO2MOY,YN2MOY,YH2OMOY,YHEMOY, & YCO2MOY,YCOMOY,PRESS,TMOY, & TS,TPLA,DEB,YH2SOR,YO2SOR,YN2SOR,YH2OSOR,YHESOR, & YCO2SOR,YCOSOR,XH2ONF,EFF,Dt,KALP,IQ,MLREEL,IHI) ELSEIF (IQ.EQ.2) THEN C Lecture de la puissance du recombineur thermique (modèle 'HEATER ') CALL LIRREE(QHEAT,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(FUITE,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(HRAPP,1,IRET) IF (IRET.EQ.0) RETURN CALL LIRREE(CRAPP,1,IRET) IF (IRET.EQ.0) RETURN JG = 4 SEGINI MLREEL PROG(1) = QHEAT PROG(2) = 1.D0 - fuite PROG(3) = hrapp PROG(4) = crapp C C Calcul des conditions de sortie, de la temperature des plaques et du C débit dans le HEATER (arret si débit ou température des plaques négatif) CALL FLAMH(YH2MOY,YO2MOY,YN2MOY,YH2OMOY,YHEMOY, & YCO2MOY,YCOMOY,PRESS,TMOY, & TS,TPLA,DEB,YH2SOR,YO2SOR,YN2SOR,YH2OSOR,YHESOR, & YCO2SOR,YCOSOR,Dt,KALP,IQ,MLREEL,IHI) ENDIF IF (IHI .LT. 0) THEN CALL ERREUR(944) RETURN ENDIF C C Ecriture des paramètres C XH2ONF : flottant : Flag pour l'allumage (négatif si le PAR est ON) C EFF : flottant : Efficacité du PAR (0.6 ou 1 suivant deficit en O2) C DEB : flottant : Débit au travers du PAR (en kg/s) C TPLA : flottant : Température moyenne des plaques du PAR (en K) C TS : flottant : Température moyenne du gaz en sortie du PAR (en K) C YCOSOR : flottant : Fraction massique moyenne de CO en sortie du PAR C YCO2SOR : flottant : Fraction massique moyenne de CO2 en sortie du PAR C YHESOR : flottant : Fraction massique moyenne de HE en sortie du PAR C YH2OSOR : flottant : Fraction massique moyenne de H2O en sortie du PAR C YN2SOR : flottant : Fraction massique moyenne de N2 en sortie du PAR C YO2SOR : flottant : Fraction massique moyenne de O2 en sortie du PAR C YH2SOR : flottant : Fraction massique moyenne de H2 en sortie du PAR IF (IQ .EQ. 1) THEN CALL ECRREE(XH2ONF) CALL ECRREE(EFF) CALL ECRREE(DEB) CALL ECRREE(TPLA) CALL ECRREE(TS) CALL ECRREE(YCOSOR) CALL ECRREE(YCO2SOR) CALL ECRREE(YHESOR) CALL ECRREE(YH2OSOR) CALL ECRREE(YN2SOR) CALL ECRREE(YO2SOR) CALL ECRREE(YH2SOR) ELSE C VERIF : Pour le modèle thermique, les compositions entrée/sortie sont égales CALL ECRREE(DEB) CALL ECRREE(TPLA) CALL ECRREE(TS) CALL ECRREE(YCOSOR) CALL ECRREE(YCO2SOR) CALL ECRREE(YHESOR) CALL ECRREE(YH2OSOR) CALL ECRREE(YN2SOR) CALL ECRREE(YO2SOR) CALL ECRREE(YH2SOR) ENDIF C C=================================== C Cinetique de type HEAVYSIDE C=================================== C ELSEIF( IP .EQ. 6) THEN CALL FLAMA() C ELSE C C******* Message d'erreur standard C Tentative d'utilisation d'une option non implémentée C 251 2 C CALL ERREUR(251) RETURN ENDIF C C RETURN 100 FORMAT(2X,'Les CHPOINTs n''ont pas le meme SPG') END