Skip to content

Commit cfbe094

Browse files
committed
FDS Source: add MAX_PREDICTOR_PRESSURE_ITERATIONS option on PRES
1 parent 536ca82 commit cfbe094

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

Source/cons.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ MODULE GLOBAL_CONSTANTS
521521
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: VELOCITY_ERROR_MAX_LOC !< Indices of max velocity error
522522
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: PRESSURE_ERROR_MAX_LOC !< Indices of max pressure error
523523
INTEGER :: PRESSURE_ITERATIONS=0 !< Counter for pressure iterations
524+
INTEGER :: MAX_PREDICTOR_PRESSURE_ITERATIONS=-1 !< Max pressure iterations per pressure solve in predictor
524525
INTEGER :: MAX_PRESSURE_ITERATIONS=10 !< Max pressure iterations per pressure solve
525526
INTEGER :: TOTAL_PRESSURE_ITERATIONS=0 !< Counter for total pressure iterations
526527
CHARACTER(LABEL_LENGTH) :: PRES_METHOD='FFT' !< Pressure solver method

Source/fire.f90

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,7 +1182,7 @@ END SUBROUTINE CALC_ADIABATIC_FLAME_TEMPERATURE
11821182
! Calculate Reactants and products
11831183
SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)
11841184
USE PHYSICAL_FUNCTIONS, ONLY: CALC_EQUIV_RATIO
1185-
USE CHEMCONS, ONLY: I_FUEL,I_CO2,I_H2O,I_O2,I_N2,USE_MIXED_ZN_AFT_TMP
1185+
USE CHEMCONS, ONLY: I_FUEL,I_CO2,I_H2O,I_O2,USE_MIXED_ZN_AFT_TMP
11861186

11871187
REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES)
11881188
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)
11931193

11941194
CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV)
11951195
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
1196-
EQUIV = MAX(1.0_EB,EQUIV)
1196+
EQUIV = MAX(1._EB,EQUIV)
11971197
ENDIF
11981198

11991199
! Adjust for diluents
1200-
ZZ_FUEL_O2_MASS = 0.0_EB
1200+
ZZ_FUEL_O2_MASS = 0._EB
12011201
ZZ_MASS = SUM(ZZ(1:N_TRACKED_SPECIES))
12021202
ZZ_REAC(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12031203
ZZ_PROD(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12041204
DO NS=1, N_TRACKED_SPECIES
1205-
IF (SPECIES_MIXTURE(NS)%OXR > 0.0_EB) THEN ! FUEL
1206-
ZZ_REAC(NS) = 0.0_EB
1207-
ZZ_PROD(NS) = 0.0_EB
1205+
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB) THEN ! FUEL
1206+
ZZ_REAC(NS) = 0._EB
1207+
ZZ_PROD(NS) = 0._EB
12081208
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(NS)
12091209
ENDIF
12101210
ENDDO
1211-
ZZ_REAC(I_O2) = 0.0_EB
1212-
ZZ_PROD(I_O2) = 0.0_EB
1211+
ZZ_REAC(I_O2) = 0._EB
1212+
ZZ_PROD(I_O2) = 0._EB
12131213
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(I_O2)
12141214

12151215
! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2
12161216
X=SPECIES_MIXTURE(I_FUEL)%ATOMS(6) !C
12171217
Y=SPECIES_MIXTURE(I_FUEL)%ATOMS(1) !H
12181218
Z=SPECIES_MIXTURE(I_FUEL)%ATOMS(8) !O
1219-
A=0.5_EB*((2.0_EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
1220-
IF(ABS(EQUIV - 1.0_EB) <1E-3_EB) THEN ! Stoich
1219+
A=0.5_EB*((2._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
1220+
IF (ABS(EQUIV - 1.0_EB) < TWO_EPSILON_EB) THEN ! Stoich
12211221
B = X
12221222
C = 0.5_EB*Y
12231223
D = 0._EB ! No fuel
12241224
E = 0._EB ! No O2
12251225
ELSEIF (EQUIV > 1) THEN ! Rich
1226-
D = (2.0_EB*X+0.5_EB*Y-2.0_EB*A-Z)/(2.0_EB*X+0.5_EB*Y-Z)
1226+
D = (2._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._EB*X+0.5_EB*Y-Z)
12271227
B = (1._EB-D)*X
12281228
C = 0.5_EB*(1._EB-D)*Y
12291229
E = 0._EB ! No O2

Source/main.f90

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,9 +1520,12 @@ SUBROUTINE PRESSURE_ITERATION_SCHEME
15201520

15211521
IF (MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE) ITERATE_BAROCLINIC_TERM = .FALSE.
15221522

1523-
IF ((MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE .AND. &
1524-
MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) .OR. PRESSURE_ITERATIONS>=MAX_PRESSURE_ITERATIONS) &
1523+
IF (PREDICTOR .AND. PRESSURE_ITERATIONS>=MAX_PREDICTOR_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP
1524+
IF (CORRECTOR .AND. PRESSURE_ITERATIONS>=MAX_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP
1525+
1526+
IF (MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE .AND. MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) THEN
15251527
EXIT PRESSURE_ITERATION_LOOP
1528+
ENDIF
15261529

15271530
! Exit the iteration loop if satisfactory progress is not achieved
15281531

Source/read.f90

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9932,7 +9932,7 @@ SUBROUTINE READ_PRES
99329932
INTEGER :: NM
99339933

99349934
NAMELIST /PRES/ BAROCLINIC,CHECK_POISSON,FISHPAK_BC,ITERATION_SUSPEND_FACTOR, &
9935-
MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
9935+
MAX_PREDICTOR_PRESSURE_ITERATIONS,MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
99369936
RELAXATION_FACTOR,SOLVER,SUSPEND_PRESSURE_ITERATIONS,TUNNEL_PRECONDITIONER,VELOCITY_TOLERANCE, &
99379937
WRITE_PARCSRPCG_MATRIX
99389938

@@ -10028,6 +10028,8 @@ SUBROUTINE READ_PRES
1002810028
IF (PRESSURE_TOLERANCE<TWO_EPSILON_EB) PRESSURE_TOLERANCE = 20.0_EB/MIN(1._EB,CHARACTERISTIC_CELL_SIZE)**2
1002910029
ENDIF
1003010030

10031+
! Error checks
10032+
1003110033
IF (NMESHES>1 .AND. ANY(FISHPAK_BC==FISHPAK_BC_PERIODIC)) THEN
1003210034
CALL SHUTDOWN('ERROR(372): Cannot use FISHPAK_BC for multiple mesh simulations.') ; RETURN
1003310035
ENDIF
@@ -10058,6 +10060,10 @@ SUBROUTINE READ_PRES
1005810060
ALLOCATE(H_BAR(0:TUNNEL_NXP+1)) ; H_BAR = 0._EB
1005910061
ENDIF
1006010062

10063+
! Optionally set a different number of max pressure iterations in the predictor stage
10064+
10065+
IF (MAX_PREDICTOR_PRESSURE_ITERATIONS<0) MAX_PREDICTOR_PRESSURE_ITERATIONS = MAX_PRESSURE_ITERATIONS
10066+
1006110067
END SUBROUTINE READ_PRES
1006210068

1006310069

0 commit comments

Comments
 (0)