diff --git a/Manuals/FDS_User_Guide/FDS_User_Guide.tex b/Manuals/FDS_User_Guide/FDS_User_Guide.tex index c5fb6f4e08d..54c48a2be5b 100644 --- a/Manuals/FDS_User_Guide/FDS_User_Guide.tex +++ b/Manuals/FDS_User_Guide/FDS_User_Guide.tex @@ -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. @@ -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} diff --git a/Source/cons.f90 b/Source/cons.f90 index f092ff4277d..20b6f4a62cf 100644 --- a/Source/cons.f90 +++ b/Source/cons.f90 @@ -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 @@ -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 diff --git a/Source/fire.f90 b/Source/fire.f90 index 0b2a68ee069..a5bc6b0a2ed 100644 --- a/Source/fire.f90 +++ b/Source/fire.f90 @@ -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) @@ -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 diff --git a/Source/main.f90 b/Source/main.f90 index 49a5f7bb4ae..efce8a0b701 100644 --- a/Source/main.f90 +++ b/Source/main.f90 @@ -1651,9 +1651,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 @@ -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