📄 read.f90
字号:
IF (CO_PRODUCTION) THEN RN => REACTION(2) ELSE RN => REACTION(1) ENDIF DO IPC=1,N_PART PC=>PARTICLE_CLASS(IPC) IF (PC%HEAT_OF_COMBUSTION > 0._EB) PC%ADJUST_EVAPORATION = PC%HEAT_OF_COMBUSTION/RN%HEAT_OF_COMBUSTION ENDDOENDIF ! Get gas properties DO N=0,N_SPECIES ABSORBING = .FALSE. CALL GAS_PROPS(SPECIES(N)%NAME,SIG(N),EPSK(N),SPECIES(N)%MW,ABSORBING) IF (ABSORBING) SPECIES(N)%ABSORBING = .TRUE.ENDDO ! Compute the initial value of R0/MW_AVG SS0 => SPECIES(0) SS0%YY0 = 1._EBDO N=1,N_SPECIES SS => SPECIES(N) IF (SS%MODE==GAS_SPECIES) SS0%YY0 = SS0%YY0 - SS%YY0ENDDO RSUM0 = SS0%YY0*R0/SS0%MWSS0%RCON = R0/SS0%MWIF (MIXTURE_FRACTION) THEN RCON_MF(FUEL_INDEX) = R0/REACTION(1)%MW_FUEL RCON_MF(O2_INDEX) = R0/MW_O2 RCON_MF(N2_INDEX) = R0/MW_N2 RCON_MF(H2O_INDEX) = R0/MW_H2O RCON_MF(CO2_INDEX) = R0/MW_CO2 RCON_MF(CO_INDEX) = R0/MW_CO RCON_MF(H2_INDEX) = R0/MW_H2 RCON_MF(SOOT_INDEX) = R0/MW_SOOT RSUM0 = SPECIES(I_FUEL)%RSUM_MF(0) SS0%MW = SPECIES(I_FUEL)%MW_MF(0) SS0%RCON = SPECIES(I_FUEL)%RSUM_MF(0) ENDIFMW_MIN = SS0%MWMW_MAX = SS0%MW N_SPEC_DILUENTS = 0RSUM_DILUENTS = 0._EBYSUM_DILUENTS = 0._EBSPECIES_LOOP_0: DO N=1,N_SPECIES SS => SPECIES(N) SS%RCON = R0/SS%MW IF (SS%MODE==GAS_SPECIES) THEN N_SPEC_DILUENTS = N_SPEC_DILUENTS + 1 MW_MIN = MIN(MW_MIN,SS%MW) MW_MAX = MAX(MW_MAX,SS%MW) YSUM_DILUENTS = YSUM_DILUENTS + SS%YY0 RSUM_DILUENTS = RSUM_DILUENTS + SS%YY0*R0/SS%MW ELSE DO I=0,10000 MW_MIN = MIN(MW_MIN,SS%MW_MF(I)) MW_MAX = MAX(MW_MAX,SS%MW_MF(I)) ENDDO ENDIFENDDO SPECIES_LOOP_0IF (MIXTURE_FRACTION) THEN RSUM0 = RSUM0 * (1._EB-YSUM_DILUENTS) +RSUM_DILUENTSELSE RSUM0 = RSUM0 + RSUM_DILUENTSENDIF ! Compute background density from other background quantities RHOA = P_INF/(TMPA*RSUM0) ! Compute constant-temperature specific heats CP_GAMMA = SS0%RCON*GAMMA/(GAMMA-1._EB)CPOPR = CP_GAMMA/PR ! Compute variable-temperature specific heats for specific species SPECIES_LOOP: DO N=0,N_SPECIES SS => SPECIES(N) SS%H_G(0) = 0. T_LOOP: DO J=1,500 TE = MAX(0.01_EB*J,0.301_EB) CP_O2 = 0.926844_EB+0.191789_EB*TE-0.0370788_EB*TE**2+0.00299313_EB*TE**3- 0.00686447_EB/TE**2 CP_N2 = 0.931857_EB+0.293529_EB*TE-0.0705765_EB*TE**2+0.00568836_EB*TE**3+ 0.001589693_EB/TE**2 IF (J<=120) THEN ! Ethylene CP_F = -0.2218014_EB + 6.402844_EB*TE - 3.922632_EB*TE**2 + 0.9894420_EB*TE**3 + 0.01095625_EB/TE**2 ELSE CP_F = 3.698278_EB+0.4768264_EB*TE-0.0912667_EB*TE**2+0.006062326_EB*TE**3- 0.9078017_EB/TE**2 ENDIF IF (J<=120) THEN CP_CO2 = 0.568122_EB+1.25425_EB*TE-0.765713_EB*TE**2+0.180645_EB*TE**3- 0.00310541_EB/TE**2 ELSE CP_CO2 = 1.32196_EB+0.0618199_EB*TE-0.0111884_EB*TE**2+0.00082818_EB*TE**3- 0.146529_EB/TE**2 ENDIF IF (J<=50) THEN CP_H2O = 1.95657565_EB ELSEIF (50 < J .AND. J <=170) THEN CP_H2O = 1.67178_EB+0.379583_EB*TE+0.377413_EB*TE**2-0.140804_EB*TE**3+ 0.00456328_EB/TE**2 ELSE CP_H2O = 2.33135_EB+0.479003_EB*TE-0.00833212_EB*TE**2+0.00545106_EB*TE**3- 0.619869_EB/TE**2 ENDIF IF (J<=130) THEN CP_CO = 0.913128_EB+0.217719_EB*TE+0.144809_EB*TE**2-0.0954036_EB*TE**3+ 0.00467932_EB/TE**2 ELSE CP_CO = 1.255382_EB+0.046432_EB*TE-0.00735432_EB*TE**2+0.00483928_EB*TE**3- 0.1172421_EB/TE**2 ENDIF IF (J<=100) THEN CP_H2 = 16.53309_EB-5.681708_EB*TE+5.716408_EB*TE**2-1.386437_EB*TE**3- 0.079279_EB/TE**2 ELSEIF (J > 100 .AND. J <= 250) THEN CP_H2 = 9.281542_EB+6.1286785_EB*TE-1.429893_EB*TE**2+0.134119_EB*TE**3+ 0.988995_EB/TE**2 ELSE CP_H2 = 21.70678_EB-2.14654_EB*TE+0.636214_EB*TE**2-0.048438_EB*TE**3-10.266931_EB/TE**2 ENDIF SELECT CASE (SPECIES(N)%MODE) CASE (MIXTURE_FRACTION_SPECIES) SS%CP_MF2(FUEL_INDEX,J) = CP_F*1000._EB SS%CP_MF2(O2_INDEX,J) = CP_O2*1000._EB SS%CP_MF2(N2_INDEX,J) = CP_N2*1000._EB SS%CP_MF2(OTHER_INDEX,J) = CP_N2*1000._EB SS%CP_MF2(H2O_INDEX,J) = CP_H2O*1000._EB SS%CP_MF2(CO2_INDEX,J) = CP_CO2*1000._EB SS%CP_MF2(CO_INDEX,J) = CP_CO*1000._EB SS%CP_MF2(SOOT_INDEX,J) = 904._EB !cp carbon SS%CP_MF2(H2_INDEX,J) = CP_H2*1000._EB SS%RCP_MF2(:,J) = 1._EB/SS%CP_MF2(:,J) CASE (GAS_SPECIES) SELECT CASE(SPECIES(N)%NAME) CASE DEFAULT SS%CP(J) = SS%RCON*GAMMA/(GAMMA-1._EB) CASE('AIR') SS%CP(J) = (0.77_EB*CP_N2+0.23_EB*CP_O2)*1000._EB CASE('NITROGEN') SS%CP(J) = CP_N2 *1000._EB CASE('OXYGEN') SS%CP(J) = CP_O2 *1000._EB CASE('METHANE') SS%CP(J) = CP_F *1000._EB CASE('CARBON DIOXIDE') SS%CP(J) = CP_CO2*1000._EB CASE('WATER VAPOR') SS%CP(J) = CP_H2O*1000._EB CASE('CARBON MONOXIDE') SS%CP(J) = CP_CO*1000._EB CASE('HYDROGEN') SS%CP(J) = CP_H2*1000._EB END SELECT SS%H_G(J) = SS%H_G(J-1) + SS%CP(J)*10._EB ! J/kg SS%RCP(J) = 1._EB/SS%CP(J) END SELECT ENDDO T_LOOPENDDO SPECIES_LOOP! For finite rate reaction, set parameters FINITE_RATE_REACTION_LOOP: DO NN=1,N_REACTIONS RN => REACTION(NN) IF (RN%MODE/=FINITE_RATE_REACTION) CYCLE FINITE_RATE_REACTION_LOOP DO N=1,N_SPECIES IF (RN%FUEL ==SPECIES(N)%NAME) THEN RN%I_FUEL = N IF (RN%N(N) /=-999._EB) THEN RN%N_F = RN%N(N) ELSE RN%N_F = 1._EB ENDIF ENDIF IF (RN%OXIDIZER==SPECIES(N)%NAME) THEN RN%I_OXIDIZER = N IF (RN%N(N) /=-999._EB) THEN RN%N_O = RN%N(N) ELSE RN%N_O = 1._EB ENDIF ENDIF ENDDO IF (NN==1) I_FUEL = RN%I_FUEL RN%MW_FUEL = SPECIES(RN%I_FUEL)%MW IF (RN%NU(RN%I_FUEL) == 0._EB) RN%NU(RN%I_FUEL) = -1._EB IF (RN%NU(RN%I_FUEL) > 0._EB) RN%NU(RN%I_FUEL) = -RN%NU(RN%I_FUEL) IF (RN%NU(RN%I_OXIDIZER) > 0._EB) RN%NU(RN%I_OXIDIZER) = -RN%NU(RN%I_OXIDIZER) IF (RN%NU(RN%I_OXIDIZER) == 0._EB) THEN WRITE(MESSAGE,'(A)') 'ERROR: Specify a stoichiometric coefficient for oxidizer' CALL SHUTDOWN(MESSAGE) ENDIF RN%O2_F_RATIO = SPECIES(RN%I_OXIDIZER)%MW*RN%NU(RN%I_OXIDIZER)/(SPECIES(RN%I_FUEL)%MW*RN%NU(RN%I_FUEL)) RN%EPUMO2 = RN%HEAT_OF_COMBUSTION/RN%O2_F_RATIOENDDO FINITE_RATE_REACTION_LOOP ! Compute viscosity, thermal conductivity for species 0 to N_SPECIES. Diffusivity for species 1 to N_SPECIES. ! These terms are used for DNS, and as the lower limits in LES calcs (via SPECIES(0)).! Source: Poling, Prausnitz and O'Connell. Properties of Gases and Liquids, 5th ed, 2000. SPECIES_LOOP_2: DO N=0,N_SPECIES! SS => SPECIES(N) SS0 => SPECIES(0)! SPEC_MODEIF: IF (SPECIES(N)%MODE==GAS_SPECIES) THEN! SIGMA2 = SIG(N)**2 DO ITMP=1,500 TSTAR = ITMP*10/EPSK(N) OMEGA = 1.16145_EB*TSTAR**(-0.14874_EB) + 0.52487_EB*EXP(-0.77320_EB*TSTAR) + 2.16178_EB*EXP(-2.43787_EB*TSTAR) MU_N = 26.69E-7_EB*(SS%MW*ITMP*10)**0.5_EB/(SIGMA2*OMEGA) IF (MU_USER(N)>=0._EB) MU_N = MU_USER(N)*(ITMP*10/TMPA)**0.75_EB K_N = MU_N*SS%CP(ITMP)/PR IF (K_USER(N)>=0._EB) K_N = K_USER(N)*(ITMP*10/TMPA)**0.75_EB SS%MU(ITMP) = MU_N SS%K(ITMP) = K_N ENDDO IF (N>0) THEN SIGMA2 = (0.5_EB*(SIG(N)+SIG(0)))**2 EPSIJ = SQRT(EPSK(N)*EPSK(0)) AMW = SQRT( (SS%MW+SS0%MW)/(2._EB*SS%MW*SS0%MW) ) DO ITMP=1,500 TSTAR = ITMP*10/EPSIJ OMEGA = 1.06036_EB/TSTAR**(0.15610_EB) + 0.19300_EB/EXP(0.47635_EB*TSTAR) + 1.03587_EB/EXP(1.52996_EB*TSTAR) +& 1.76474_EB/EXP(3.89411_EB*TSTAR) D_N0 = 0.00266E-4_EB*AMW*(10*ITMP)**1.5_EB/(SIGMA2*OMEGA) IF (D_USER(N)>=0._EB) D_N0 = D_USER(N)*(ITMP*10/TMPA)**1.75_EB SS%D(ITMP) = D_N0 ENDDO ENDIF ELSE SPEC_MODEIF STATE_SPECIES(1) = 'METHANE'! STATE_SPECIES(1) = 'ETHYLENE' STATE_SPECIES(2) = 'OXYGEN' STATE_SPECIES(3) = 'NITROGEN' STATE_SPECIES(4) = 'WATER VAPOR' STATE_SPECIES(5) = 'CARBON DIOXIDE' STATE_SPECIES(6) = 'CARBON MONOXIDE' STATE_SPECIES(7) = 'HYDROGEN' STATE_SPECIES(8) = 'CARBON MONOXIDE' STATE_SPECIES(9) = 'NITROGEN' SS%D_MF2 = 0._EB SS%MU_MF2 = 0._EB SS%K_MF2 = 0._EB SUB_SPECIES_LOOP: DO NN=1,9 SIG_N = -1._EB EPSK_N = -1._EB MW_N = -.1_EB CALL GAS_PROPS(STATE_SPECIES(NN),SIG_N,EPSK_N,MW_N,ABSORBING) SIGMA2 = SIG_N**2 DO ITMP=1,500 TSTAR = ITMP*10/EPSK_N OMEGA = 1.16145_EB*TSTAR**(-0.14874_EB) + 0.52487_EB*EXP(-0.77320_EB*TSTAR) + 2.16178_EB*EXP(-2.43787_EB*TSTAR) MU_N = 26.69E-7_EB*(MW_N*ITMP*10)**0.5_EB/(SIGMA2*OMEGA) SS%MU_MF2(NN,ITMP) = MU_N SS%K_MF2(NN,ITMP) = MU_N*SS%CP_MF2(NN,ITMP)/PR ENDDO SIGMA2 = (0.5_EB*(SIG_N+SIG(0)))**2 EPSIJ = SQRT(EPSK_N*EPSK(0)) AMW = SQRT( (MW_N+SS0%MW)/(2._EB*MW_N*SS0%MW) ) DO ITMP=1,500 TSTAR = ITMP*10/EPSIJ OMEGA = 1.06036_EB/TSTAR**(0.15610_EB) + 0.19300_EB/EXP(0.47635_EB*TSTAR) + 1.03587_EB/EXP(1.52996_EB*TSTAR) + & 1.76474_EB/EXP(3.89411_EB*TSTAR) D_N0 = 0.00266E-4_EB*AMW*(10*ITMP)**1.5_EB/(SIGMA2*OMEGA) SS%D_MF2(NN,ITMP) = D_N0 ENDDO ENDDO SUB_SPECIES_LOOP ENDIF SPEC_MODEIF ENDDO SPECIES_LOOP_2 ! Define all possible output quantitiesCALL SPECIES_OUTPUT_QUANTITIES CONTAINS SUBROUTINE GAS_PROPS(GAS_NAME,SIGMA,EPSOK,MW,ABSORBING) ! Molecular weight (g/mol) and Lennard-Jones properties REAL(EB) SIGMA,EPSOK,MW,SIGMAIN,EPSOKIN,MWINCHARACTER(30) GAS_NAMELOGICAL ABSORBING SIGMAIN = SIGMAEPSOKIN = EPSOKMWIN = MW SELECT CASE(GAS_NAME) CASE('AIR') SIGMA=3.711_EB EPSOK= 78.6_EB MW=28.8_EB CASE('CARBON MONOXIDE') SIGMA=3.690_EB EPSOK= 91.7_EB MW=28._EB ABSORBING = .TRUE. CASE('CARBON DIOXIDE') SIGMA=3.941_EB EPSOK=195.2_EB MW=44._EB ABSORBING = .TRUE. CASE('ETHYLENE') SIGMA=4.163_EB EPSOK=224.7_EB MW=28._EB ABSORBING = .TRUE. CASE('HELIUM') SIGMA=2.551_EB EPSOK= 10.22_EB MW= 4._EB CASE('HYDROGEN') SIGMA=2.827_EB EPSOK= 59.7_EB MW= 2._EB CASE('METHANE') SIGMA=3.758_EB EPSOK=148.6_EB MW=16._EB ABSORBING = .TRUE. CASE('NITROGEN') SIGMA=3.798_EB EPSOK= 71.4_EB MW=28._EB CASE('OXYGEN') SIGMA=3.467_EB EPSOK=106.7_EB MW=32._EB CASE('PROPANE') SIGMA=5.118_EB EPSOK=237.1_EB MW=44._EB ABSORBING = .TRUE. CASE('WATER VAPOR') SIGMA=2.641_EB EPSOK=809.1_EB MW=18._EB ABSORBING = .TRUE. CASE DEFAULT SIGMA=3.711_EB EPSOK= 78.6_EB MW=28.8_EBEND SELECT IF (SIGMAIN>0._EB) SIGMA = SIGMAINIF (EPSOKIN>0._EB) EPSOK = EPSOKINIF (MWIN >0._EB) MW = MWIN IF (GAS_NAME=='MIXTURE_FRACTION') MW = REACTION(1)%MW_FUEL END SUBROUTINE GAS_PROPS SUBROUTINE STATE_RELATIONSHIPS ! Calculate state relations, SPECIES(N)%Y_MF, and average molecular weight, SPECIES(N)%MW_MF, for major species tied to MIX_FRAC! Y_MF(0:10000,I): I=1-Fuel,2-O2,3-N2,4-H2O,5-CO2,6-CO,7-H2,8-SOOT REAL(EB) :: TOTAL_MASS,FUEL_BURNED,ZZ,DZZ,FUEL_TO_CO2INTEGER :: N,REAC_INDEX(1:N_REACTIONS)!Calc heat of formation if ideal heat of combustion data was input on REACREAC_INDEX = 0._EBDO N = 1, N_SPECIES IF (SPECIES(N)%MODE==MIXTURE_FRACTION_SPECIES) REAC_INDEX(SPECIES(N)%REAC_INDEX) = NENDDOREACTION_LOOP: DO N=1,N_REACTIONS RN => REACTION(N) SS => SPECIES(REAC_INDEX(N)) ! Miscellaneous constants RN%Y_N2_INFTY = 1._EB-RN%Y_O2_INFTY ! Assumes that air is made up of only oxygen and nitrogen RN%Y_N2_INLET = 1._EB-RN%Y_F_INLET ! Assumes that the fuel is only diluted by nitrogen RN%Z_F_CONS = RN%NU_O2 * MW_O2/RN%MW_FUEL * (1._EB + RN%Y_N2_INFTY/RN%Y_O2_INFTY) ! Stoichiometric value of mixture fraction RN%Z_F = RN%Y_O2_INFTY/(RN%Y_O2_INFTY+RN%Y_F_INLET*RN%O2_F_RATIO) ! Compute Y_MF and MW_MF SS%Z_MAX = 0._EB SS%Y_MF(10000,:) = 0._EB SS%Y_MF(10000,FUEL_INDEX) = RN%Y_F_INLET SS%Y_MF(10000,N2_INDEX) = RN%Y_N2_INLET SS%MW_MF(10000) = 1/(RN%Y_F_INLET/RN%MW_FUEL+RN%Y_N2_INLET/MW_N2) DZZ = 1.E-4_EB Z_LOOP: DO I=0,9999 ZZ=REAL(I,EB)*DZZ IF (RN%NU_O2 == 0) THEN SS%Y_MF(I,FUEL_INDEX) = ZZ*RN%Y_F_INLET ELSE SS%Y_MF(I,FUEL_INDEX) = ZZ*RN%Y_F_INLET - MIN( ZZ*RN%Y_F_INLET , (1._EB-ZZ)*RN%Y_O2_INFTY/RN%O2_F_RATIO ) ENDIF SS%Y_MF(I,FUEL_INDEX) =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -