Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -10992,11 +10992,11 @@ \subsection{Detailed Spray Properties}
\subsection{Additional Spray Outputs}
\label{info:droplet_outputs}

\paragraph{\ct{'ADA'},\ct{'ADA_Z'}}
\paragraph{\ct{'ADA'},\ct{'ADA_Z'}}

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}$
\be
\overline{A}_{{\rm p},ijk}=\frac{\sum_{m=1,N}^N 4\pi r_{{\rm p},m}^2}{V_{ijk}}
\overline{A}_{{\rm p},ijk}=\frac{\sum_{m=1,N}^N 4\pi r_{{\rm p},m}^2}{V_{ijk}}
\ee
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.

Expand Down Expand Up @@ -13160,21 +13160,22 @@ \section{\texorpdfstring{{\tt PRES}}{PRES} (Pressure Solver Parameters)}
\hline
Keyword & Type & Description & Units & Default \\ \hline \hline
\endhead
\ct{BAROCLINIC} & Logical & Section~\ref{baroclinic_torque} & & \ct{T} \\ \hline
\ct{CHECK_POISSON} & Logical & Section~\ref{pressure_solver} & & \ct{F} \\ \hline
\ct{FISHPAK_BC(3)} & Integer Array & Section~\ref{sec:periodic} & & \\ \hline
\ct{ITERATION_SUSPEND_FACTOR} & Real & Section~\ref{pressure_solver} & s & 0.95 \\ \hline
\ct{MAX_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & 10 \\ \hline
\ct{PRESSURE_RELAX_TIME} & Real & Section~\ref{background_pressure} & s & 1. \\ \hline
\ct{PRESSURE_TOLERANCE} & Real & Section~\ref{pressure_solver} & s$^{-2}$ & \\ \hline
\ct{RELAXATION_FACTOR} & Real & Section~\ref{background_pressure} & & 1. \\ \hline
\ct{SOLVER} & Character & Section~\ref{optional_pressure_solver} & & \ct{'FFT'} \\ \hline
\ct{SUSPEND_PRESSURE_ITERATIONS} & Logical & Section~\ref{pressure_solver} & & \ct{T} \\ \hline
\ct{TUNNEL_PRECONDITIONER} & Logical & Section~\ref{tunnel_solver} & & \ct{F} \\ \hline
\ct{VELOCITY_TOLERANCE} & Real & Section~\ref{pressure_solver} & m/s & \\ \hline
\ct{BAROCLINIC} & Logical & Section~\ref{baroclinic_torque} & & \ct{T} \\ \hline
\ct{CHECK_POISSON} & Logical & Section~\ref{pressure_solver} & & \ct{F} \\ \hline
\ct{FISHPAK_BC(3)} & Integer Array & Section~\ref{sec:periodic} & & \\ \hline
\ct{ITERATION_SUSPEND_FACTOR} & Real & Section~\ref{pressure_solver} & s & 0.95 \\ \hline
\ct{MAX_PREDICTOR_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & * \\ \hline
\ct{MAX_PRESSURE_ITERATIONS} & Integer & Section~\ref{pressure_solver} & & 10 \\ \hline
\ct{PRESSURE_RELAX_TIME} & Real & Section~\ref{background_pressure} & s & 1. \\ \hline
\ct{PRESSURE_TOLERANCE} & Real & Section~\ref{pressure_solver} & s$^{-2}$ & \\ \hline
\ct{RELAXATION_FACTOR} & Real & Section~\ref{background_pressure} & & 1. \\ \hline
\ct{SOLVER} & Character & Section~\ref{optional_pressure_solver} & & \ct{'FFT'} \\ \hline
\ct{SUSPEND_PRESSURE_ITERATIONS} & Logical & Section~\ref{pressure_solver} & & \ct{T} \\ \hline
\ct{TUNNEL_PRECONDITIONER} & Logical & Section~\ref{tunnel_solver} & & \ct{F} \\ \hline
\ct{VELOCITY_TOLERANCE} & Real & Section~\ref{pressure_solver} & m/s & \\ \hline
\end{xltabular}


\vspace{-1.0em}
\noindent\textsuperscript{*} Unless specified, this value defaults to the value set for \ct{MAX_PRESSURE_ITERATIONS}.

\vspace{\baselineskip}

Expand Down
3 changes: 2 additions & 1 deletion Source/cons.f90
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,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
Expand Down Expand Up @@ -975,7 +976,7 @@ MODULE CHEMCONS

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

! Mixing
Expand Down
22 changes: 11 additions & 11 deletions Source/fire.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1184,7 +1184,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)
Expand All @@ -1195,37 +1195,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
Expand Down
7 changes: 5 additions & 2 deletions Source/main.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1651,9 +1651,12 @@ SUBROUTINE PRESSURE_ITERATION_SCHEME

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

IF ((MAXVAL(PRESSURE_ERROR_MAX)<PRESSURE_TOLERANCE .AND. &
MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) .OR. PRESSURE_ITERATIONS>=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)<PRESSURE_TOLERANCE .AND. MAXVAL(VELOCITY_ERROR_MAX)<VELOCITY_TOLERANCE) THEN
EXIT PRESSURE_ITERATION_LOOP
ENDIF

! Exit the iteration loop if satisfactory progress is not achieved

Expand Down
13 changes: 8 additions & 5 deletions Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -5214,7 +5214,7 @@ END SUBROUTINE READ_REAC


SUBROUTINE PROC_REAC_1
USE CHEMCONS, ONLY: YP2ZZ,FUEL_ID_FOR_AFT,I_FUEL,I_CO2,I_H2O,I_O2,I_N2
USE CHEMCONS, ONLY: YP2ZZ,FUEL_ID_FOR_AFT,I_FUEL,I_CO2,I_H2O,I_O2
USE PROPERTY_DATA, ONLY : PARSE_EQUATION, SHUTDOWN_ATOM
REAL(EB) :: MASS_PRODUCT,MASS_REACTANT,REACTION_BALANCE(118),NU_Y(N_SPECIES)
INTEGER :: NS,NS2, NR
Expand Down Expand Up @@ -5646,7 +5646,6 @@ SUBROUTINE PROC_REAC_1
IF(TRIM(ODE_SOLVER)=='CVODE') THEN
I_FUEL = -1
I_O2 = -1
I_N2 = -1
I_CO2 = -1
I_H2O = -1

Expand All @@ -5655,8 +5654,6 @@ SUBROUTINE PROC_REAC_1
I_FUEL = NS
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "O2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "OXYGEN") THEN
I_O2 = NS
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "N2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "NITROGEN") THEN
I_N2 = NS
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "CO2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "CARBON DIOXIDE") THEN
I_CO2 = NS
ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "H2O" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "WATER VAPOR") THEN
Expand Down Expand Up @@ -10046,7 +10043,7 @@ SUBROUTINE READ_PRES
INTEGER :: NM

NAMELIST /PRES/ BAROCLINIC,CHECK_POISSON,FISHPAK_BC,ITERATION_SUSPEND_FACTOR, &
MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
MAX_PREDICTOR_PRESSURE_ITERATIONS,MAX_PRESSURE_ITERATIONS,PRESSURE_RELAX_TIME,PRESSURE_TOLERANCE, &
RELAXATION_FACTOR,SOLVER,SUSPEND_PRESSURE_ITERATIONS,TUNNEL_PRECONDITIONER,VELOCITY_TOLERANCE, &
WRITE_PARCSRPCG_MATRIX,HYPRE_DEVICE_RUN

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

! Error checks

IF (NMESHES>1 .AND. ANY(FISHPAK_BC==FISHPAK_BC_PERIODIC)) THEN
CALL SHUTDOWN('ERROR(372): Cannot use FISHPAK_BC for multiple mesh simulations.') ; RETURN
ENDIF
Expand Down Expand Up @@ -10171,6 +10170,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


Expand Down
Loading