Skip to content

Commit 6fbee83

Browse files
authored
Merge pull request #15141 from cxp484/FireX
FireX: Merge with firemodels/master
2 parents e1b613c + 104c774 commit 6fbee83

File tree

5 files changed

+43
-35
lines changed

5 files changed

+43
-35
lines changed

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10992,11 +10992,11 @@ \subsection{Detailed Spray Properties}
1099210992
\subsection{Additional Spray Outputs}
1099310993
\label{info:droplet_outputs}
1099410994

10995-
\paragraph{\ct{'ADA'},\ct{'ADA_Z'}}
10995+
\paragraph{\ct{'ADA'},\ct{'ADA_Z'}}
1099610996

1099710997
These gas phase output quantities represent the total droplet surface area for droplets within the gas cell with indices $ijk$ divided by the volume of the cell, $V_{ijk}$
1099810998
\be
10999-
\overline{A}_{{\rm p},ijk}=\frac{\sum_{m=1,N}^N 4\pi r_{{\rm p},m}^2}{V_{ijk}}
10999+
\overline{A}_{{\rm p},ijk}=\frac{\sum_{m=1,N}^N 4\pi r_{{\rm p},m}^2}{V_{ijk}}
1100011000
\ee
1100111001
The quantity \ct{'ADA'}, along with a \ct{PART_ID}, specifies a particular particle class. The quantity \ct{'ADA_Z'}, along with a \ct{SPEC_ID}, specifies all particles that generate that particular gas species.
1100211002

@@ -13160,21 +13160,22 @@ \section{\texorpdfstring{{\tt PRES}}{PRES} (Pressure Solver Parameters)}
1316013160
\hline
1316113161
Keyword & Type & Description & Units & Default \\ \hline \hline
1316213162
\endhead
13163-
\ct{BAROCLINIC} & Logical & Section~\ref{baroclinic_torque} & & \ct{T} \\ \hline
13164-
\ct{CHECK_POISSON} & Logical & Section~\ref{pressure_solver} & & \ct{F} \\ \hline
13165-
\ct{FISHPAK_BC(3)} & Integer Array & Section~\ref{sec:periodic} & & \\ \hline
13166-
\ct{ITERATION_SUSPEND_FACTOR} & Real & Section~\ref{pressure_solver} & s & 0.95 \\ \hline
13167-
\ct{MAX_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & 10 \\ \hline
13168-
\ct{PRESSURE_RELAX_TIME} & Real & Section~\ref{background_pressure} & s & 1. \\ \hline
13169-
\ct{PRESSURE_TOLERANCE} & Real & Section~\ref{pressure_solver} & s$^{-2}$ & \\ \hline
13170-
\ct{RELAXATION_FACTOR} & Real & Section~\ref{background_pressure} & & 1. \\ \hline
13171-
\ct{SOLVER} & Character & Section~\ref{optional_pressure_solver} & & \ct{'FFT'} \\ \hline
13172-
\ct{SUSPEND_PRESSURE_ITERATIONS} & Logical & Section~\ref{pressure_solver} & & \ct{T} \\ \hline
13173-
\ct{TUNNEL_PRECONDITIONER} & Logical & Section~\ref{tunnel_solver} & & \ct{F} \\ \hline
13174-
\ct{VELOCITY_TOLERANCE} & Real & Section~\ref{pressure_solver} & m/s & \\ \hline
13163+
\ct{BAROCLINIC} & Logical & Section~\ref{baroclinic_torque} & & \ct{T} \\ \hline
13164+
\ct{CHECK_POISSON} & Logical & Section~\ref{pressure_solver} & & \ct{F} \\ \hline
13165+
\ct{FISHPAK_BC(3)} & Integer Array & Section~\ref{sec:periodic} & & \\ \hline
13166+
\ct{ITERATION_SUSPEND_FACTOR} & Real & Section~\ref{pressure_solver} & s & 0.95 \\ \hline
13167+
\ct{MAX_PREDICTOR_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & * \\ \hline
13168+
\ct{MAX_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & 10 \\ \hline
13169+
\ct{PRESSURE_RELAX_TIME} & Real & Section~\ref{background_pressure} & s & 1. \\ \hline
13170+
\ct{PRESSURE_TOLERANCE} & Real & Section~\ref{pressure_solver} & s$^{-2}$ & \\ \hline
13171+
\ct{RELAXATION_FACTOR} & Real & Section~\ref{background_pressure} & & 1. \\ \hline
13172+
\ct{SOLVER} & Character & Section~\ref{optional_pressure_solver} & & \ct{'FFT'} \\ \hline
13173+
\ct{SUSPEND_PRESSURE_ITERATIONS} & Logical & Section~\ref{pressure_solver} & & \ct{T} \\ \hline
13174+
\ct{TUNNEL_PRECONDITIONER} & Logical & Section~\ref{tunnel_solver} & & \ct{F} \\ \hline
13175+
\ct{VELOCITY_TOLERANCE} & Real & Section~\ref{pressure_solver} & m/s & \\ \hline
1317513176
\end{xltabular}
13176-
13177-
13177+
\vspace{-1.0em}
13178+
\noindent\textsuperscript{*} Unless specified, this value defaults to the value set for \ct{MAX_PRESSURE_ITERATIONS}.
1317813179

1317913180
\vspace{\baselineskip}
1318013181

Source/cons.f90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ MODULE GLOBAL_CONSTANTS
546546
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: VELOCITY_ERROR_MAX_LOC !< Indices of max velocity error
547547
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: PRESSURE_ERROR_MAX_LOC !< Indices of max pressure error
548548
INTEGER :: PRESSURE_ITERATIONS=0 !< Counter for pressure iterations
549+
INTEGER :: MAX_PREDICTOR_PRESSURE_ITERATIONS=-1 !< Max pressure iterations per pressure solve in predictor
549550
INTEGER :: MAX_PRESSURE_ITERATIONS=10 !< Max pressure iterations per pressure solve
550551
INTEGER :: TOTAL_PRESSURE_ITERATIONS=0 !< Counter for total pressure iterations
551552
CHARACTER(LABEL_LENGTH) :: PRES_METHOD='FFT' !< Pressure solver method
@@ -975,7 +976,7 @@ MODULE CHEMCONS
975976

976977
! Adiabatic flame temperature calculation
977978
CHARACTER(LABEL_LENGTH) :: FUEL_ID_FOR_AFT='null'
978-
INTEGER :: I_FUEL,I_CO2,I_H2O,I_O2,I_N2 ! Store the index of the species in the ZZ array.
979+
INTEGER :: I_FUEL,I_CO2,I_H2O,I_O2 ! Store the index of the species in the ZZ array.
979980
LOGICAL :: USE_MIXED_ZN_AFT_TMP = .FALSE.
980981

981982
! Mixing

Source/fire.f90

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

11891189
REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES)
11901190
REAL(EB), INTENT(OUT) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES)
@@ -1195,37 +1195,37 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)
11951195

11961196
CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV)
11971197
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
1198-
EQUIV = MAX(1.0_EB,EQUIV)
1198+
EQUIV = MAX(1._EB,EQUIV)
11991199
ENDIF
12001200

12011201
! Adjust for diluents
1202-
ZZ_FUEL_O2_MASS = 0.0_EB
1202+
ZZ_FUEL_O2_MASS = 0._EB
12031203
ZZ_MASS = SUM(ZZ(1:N_TRACKED_SPECIES))
12041204
ZZ_REAC(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12051205
ZZ_PROD(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12061206
DO NS=1, N_TRACKED_SPECIES
1207-
IF (SPECIES_MIXTURE(NS)%OXR > 0.0_EB) THEN ! FUEL
1208-
ZZ_REAC(NS) = 0.0_EB
1209-
ZZ_PROD(NS) = 0.0_EB
1207+
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB) THEN ! FUEL
1208+
ZZ_REAC(NS) = 0._EB
1209+
ZZ_PROD(NS) = 0._EB
12101210
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(NS)
12111211
ENDIF
12121212
ENDDO
1213-
ZZ_REAC(I_O2) = 0.0_EB
1214-
ZZ_PROD(I_O2) = 0.0_EB
1213+
ZZ_REAC(I_O2) = 0._EB
1214+
ZZ_PROD(I_O2) = 0._EB
12151215
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(I_O2)
12161216

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

Source/main.f90

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

16521652
IF (MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE) ITERATE_BAROCLINIC_TERM = .FALSE.
16531653

1654-
IF ((MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE .AND. &
1655-
MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) .OR. PRESSURE_ITERATIONS>=MAX_PRESSURE_ITERATIONS) &
1654+
IF (PREDICTOR .AND. PRESSURE_ITERATIONS>=MAX_PREDICTOR_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP
1655+
IF (CORRECTOR .AND. PRESSURE_ITERATIONS>=MAX_PRESSURE_ITERATIONS) EXIT PRESSURE_ITERATION_LOOP
1656+
1657+
IF (MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE .AND. MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) THEN
16561658
EXIT PRESSURE_ITERATION_LOOP
1659+
ENDIF
16571660

16581661
! Exit the iteration loop if satisfactory progress is not achieved
16591662

Source/read.f90

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5214,7 +5214,7 @@ END SUBROUTINE READ_REAC
52145214

52155215

52165216
SUBROUTINE PROC_REAC_1
5217-
USE CHEMCONS, ONLY: YP2ZZ,FUEL_ID_FOR_AFT,I_FUEL,I_CO2,I_H2O,I_O2,I_N2
5217+
USE CHEMCONS, ONLY: YP2ZZ,FUEL_ID_FOR_AFT,I_FUEL,I_CO2,I_H2O,I_O2
52185218
USE PROPERTY_DATA, ONLY : PARSE_EQUATION, SHUTDOWN_ATOM
52195219
REAL(EB) :: MASS_PRODUCT,MASS_REACTANT,REACTION_BALANCE(118),NU_Y(N_SPECIES)
52205220
INTEGER :: NS,NS2, NR
@@ -5646,7 +5646,6 @@ SUBROUTINE PROC_REAC_1
56465646
IF(TRIM(ODE_SOLVER)=='CVODE') THEN
56475647
I_FUEL = -1
56485648
I_O2 = -1
5649-
I_N2 = -1
56505649
I_CO2 = -1
56515650
I_H2O = -1
56525651

@@ -5655,8 +5654,6 @@ SUBROUTINE PROC_REAC_1
56555654
I_FUEL = NS
56565655
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "O2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "OXYGEN") THEN
56575656
I_O2 = NS
5658-
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "N2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "NITROGEN") THEN
5659-
I_N2 = NS
56605657
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "CO2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "CARBON DIOXIDE") THEN
56615658
I_CO2 = NS
56625659
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "H2O" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "WATER VAPOR") THEN
@@ -10046,7 +10043,7 @@ SUBROUTINE READ_PRES
1004610043
INTEGER :: NM
1004710044

1004810045
NAMELIST /PRES/ BAROCLINIC,CHECK_POISSON,FISHPAK_BC,ITERATION_SUSPEND_FACTOR, &
10049-
MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
10046+
MAX_PREDICTOR_PRESSURE_ITERATIONS,MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
1005010047
RELAXATION_FACTOR,SOLVER,SUSPEND_PRESSURE_ITERATIONS,TUNNEL_PRECONDITIONER,VELOCITY_TOLERANCE, &
1005110048
WRITE_PARCSRPCG_MATRIX,HYPRE_DEVICE_RUN
1005210049

@@ -10141,6 +10138,8 @@ SUBROUTINE READ_PRES
1014110138
IF (PRESSURE_TOLERANCE<TWO_EPSILON_EB) PRESSURE_TOLERANCE = 20.0_EB/MIN(1._EB,CHARACTERISTIC_CELL_SIZE)**2
1014210139
ENDIF
1014310140

10141+
! Error checks
10142+
1014410143
IF (NMESHES>1 .AND. ANY(FISHPAK_BC==FISHPAK_BC_PERIODIC)) THEN
1014510144
CALL SHUTDOWN('ERROR(372): Cannot use FISHPAK_BC for multiple mesh simulations.') ; RETURN
1014610145
ENDIF
@@ -10171,6 +10170,10 @@ SUBROUTINE READ_PRES
1017110170
ALLOCATE(H_BAR(0:TUNNEL_NXP+1)) ; H_BAR = 0._EB
1017210171
ENDIF
1017310172

10173+
! Optionally set a different number of max pressure iterations in the predictor stage
10174+
10175+
IF (MAX_PREDICTOR_PRESSURE_ITERATIONS<0) MAX_PREDICTOR_PRESSURE_ITERATIONS = MAX_PRESSURE_ITERATIONS
10176+
1017410177
END SUBROUTINE READ_PRES
1017510178

1017610179

0 commit comments

Comments
 (0)