diff --git a/Source/cons.f90 b/Source/cons.f90 index ef805824194..bccc83bf2fc 100644 --- a/Source/cons.f90 +++ b/Source/cons.f90 @@ -521,6 +521,7 @@ MODULE GLOBAL_CONSTANTS INTEGER, ALLOCATABLE, DIMENSION(:,:) :: VELOCITY_ERROR_MAX_LOC !< Indices of max velocity error INTEGER, ALLOCATABLE, DIMENSION(:,:) :: PRESSURE_ERROR_MAX_LOC !< Indices of max pressure error INTEGER :: PRESSURE_ITERATIONS=0 !< Counter for pressure iterations +INTEGER :: MAX_PREDICTOR_PRESSURE_ITERATIONS=-1 !< Max pressure iterations per pressure solve in predictor INTEGER :: MAX_PRESSURE_ITERATIONS=10 !< Max pressure iterations per pressure solve INTEGER :: TOTAL_PRESSURE_ITERATIONS=0 !< Counter for total pressure iterations CHARACTER(LABEL_LENGTH) :: PRES_METHOD='FFT' !< Pressure solver method diff --git a/Source/fire.f90 b/Source/fire.f90 index be4fa79034c..1d698f8ec2d 100644 --- a/Source/fire.f90 +++ b/Source/fire.f90 @@ -1182,7 +1182,7 @@ END SUBROUTINE CALC_ADIABATIC_FLAME_TEMPERATURE ! Calculate Reactants and products SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD) USE PHYSICAL_FUNCTIONS, ONLY: CALC_EQUIV_RATIO -USE CHEMCONS, ONLY: I_FUEL,I_CO2,I_H2O,I_O2,I_N2,USE_MIXED_ZN_AFT_TMP +USE CHEMCONS, ONLY: I_FUEL,I_CO2,I_H2O,I_O2,USE_MIXED_ZN_AFT_TMP REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES) REAL(EB), INTENT(OUT) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES) @@ -1193,37 +1193,37 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD) CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV) IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN - EQUIV = MAX(1.0_EB,EQUIV) + EQUIV = MAX(1._EB,EQUIV) ENDIF ! Adjust for diluents -ZZ_FUEL_O2_MASS = 0.0_EB +ZZ_FUEL_O2_MASS = 0._EB ZZ_MASS = SUM(ZZ(1:N_TRACKED_SPECIES)) ZZ_REAC(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES) ZZ_PROD(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES) DO NS=1, N_TRACKED_SPECIES - IF (SPECIES_MIXTURE(NS)%OXR > 0.0_EB) THEN ! FUEL - ZZ_REAC(NS) = 0.0_EB - ZZ_PROD(NS) = 0.0_EB + IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB) THEN ! FUEL + ZZ_REAC(NS) = 0._EB + ZZ_PROD(NS) = 0._EB ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(NS) ENDIF ENDDO -ZZ_REAC(I_O2) = 0.0_EB -ZZ_PROD(I_O2) = 0.0_EB +ZZ_REAC(I_O2) = 0._EB +ZZ_PROD(I_O2) = 0._EB ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(I_O2) ! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2 X=SPECIES_MIXTURE(I_FUEL)%ATOMS(6) !C Y=SPECIES_MIXTURE(I_FUEL)%ATOMS(1) !H Z=SPECIES_MIXTURE(I_FUEL)%ATOMS(8) !O -A=0.5_EB*((2.0_EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio -IF(ABS(EQUIV - 1.0_EB) <1E-3_EB) THEN ! Stoich +A=0.5_EB*((2._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio +IF (ABS(EQUIV - 1.0_EB) < TWO_EPSILON_EB) THEN ! Stoich B = X C = 0.5_EB*Y D = 0._EB ! No fuel E = 0._EB ! No O2 ELSEIF (EQUIV > 1) THEN ! Rich - D = (2.0_EB*X+0.5_EB*Y-2.0_EB*A-Z)/(2.0_EB*X+0.5_EB*Y-Z) + D = (2._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._EB*X+0.5_EB*Y-Z) B = (1._EB-D)*X C = 0.5_EB*(1._EB-D)*Y E = 0._EB ! No O2 diff --git a/Source/main.f90 b/Source/main.f90 index 4b4968089a8..a577f4b5bcb 100644 --- a/Source/main.f90 +++ b/Source/main.f90 @@ -1520,9 +1520,12 @@ SUBROUTINE PRESSURE_ITERATION_SCHEME IF (MAXVAL(PRESSURE_ERROR_MAX)=MAX_PRESSURE_ITERATIONS) & + IF (PREDICTOR .AND. PRESSURE_ITERATIONS>=MAX_PREDICTOR_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP + IF (CORRECTOR .AND. PRESSURE_ITERATIONS>=MAX_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP + + IF (MAXVAL(PRESSURE_ERROR_MAX)1 .AND. ANY(FISHPAK_BC==FISHPAK_BC_PERIODIC)) THEN CALL SHUTDOWN('ERROR(372): Cannot use FISHPAK_BC for multiple mesh simulations.') ; RETURN ENDIF @@ -10058,6 +10060,10 @@ SUBROUTINE READ_PRES ALLOCATE(H_BAR(0:TUNNEL_NXP+1)) ; H_BAR = 0._EB ENDIF +! Optionally set a different number of max pressure iterations in the predictor stage + +IF (MAX_PREDICTOR_PRESSURE_ITERATIONS<0) MAX_PREDICTOR_PRESSURE_ITERATIONS = MAX_PRESSURE_ITERATIONS + END SUBROUTINE READ_PRES