Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
dfc5929
FDS_Verification_Guide fix typos
mahereid Oct 8, 2025
e55d171
Merge pull request #15288 from mahereid/FDS_verification_guide_typos
rmcdermo Oct 8, 2025
3f02e5c
Python: getting closer to reproducing Matlab histogram results
rmcdermo Oct 8, 2025
c43125b
Merge pull request #15289 from rmcdermo/master
rmcdermo Oct 8, 2025
f334bca
FDS Validation: convert Sandia_Plumes and related scripts
mcgratta Oct 9, 2025
3fcbc96
Merge pull request #15293 from mcgratta/master
mcgratta Oct 9, 2025
65c2e45
FDS Verification: Remove birch_tga.m
mcgratta Oct 9, 2025
3da52a8
FDS Verification: Restore script
mcgratta Oct 9, 2025
34b29e4
Merge pull request #15296 from mcgratta/master
mcgratta Oct 9, 2025
e8f7384
FDS Source: Distinguish INIT particles and regions
mcgratta Oct 9, 2025
e2246e6
Merge pull request #15297 from mcgratta/master
mcgratta Oct 9, 2025
1d570a1
Revert "FDS Source: Distinguish INIT particles and regions"
mcgratta Oct 10, 2025
37d0502
Merge pull request #15300 from mcgratta/master
mcgratta Oct 10, 2025
7bc7aaa
FDS Verification: Fix underscore issue
mcgratta Oct 10, 2025
feb4188
Merge pull request #15301 from mcgratta/master
mcgratta Oct 10, 2025
a6e4c1d
FDS Verification: Convert turb_model.m
mcgratta Oct 10, 2025
947cbd5
Merge pull request #15303 from mcgratta/master
mcgratta Oct 10, 2025
0b7ebf1
FDS Source: Fix precision spec of numerical values
cxp484 Oct 10, 2025
27a8571
Merge remote-tracking branch 'firemodels/master'
cxp484 Oct 10, 2025
b9defe5
Merge pull request #15304 from cxp484/master
cxp484 Oct 10, 2025
be67d3e
FDS Verification: convert jet_decay.m
mcgratta Oct 10, 2025
55264a5
Merge pull request #15305 from mcgratta/master
mcgratta Oct 10, 2025
0f0e7ca
Merge remote-tracking branch 'firemodels/master' into FireX
cxp484 Oct 10, 2025
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
15 changes: 7 additions & 8 deletions Manuals/FDS_Validation_Guide/Plume_Chapter.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1027,20 +1027,19 @@ \section{Sandia Plume Experiments}

Details of these experiments can be found in Sec.~\ref{Sandia_Plume_Description}.

The Fire Laboratory for Accreditation of Models by Experimentation (FLAME) facility \cite{OHern:2005,Blanchat:2001} at Sandia National Laboratories in Albuquerque, New Mexico, is designed specifically for validating models of buoyant fire plumes. The plume source is 1~m in diameter surrounded by a 0.5~m steel ``ground plane''. Particle Image Velocimetry (PIV) and Planar Laser-Induced Fluorescence (PLIF) techniques were used to obtain instantaneous joint scalar and velocity fields.
The Fire Laboratory for Accreditation of Models by Experimentation (FLAME) facility~\cite{OHern:2005,Blanchat:2001} at Sandia National Laboratories in Albuquerque, New Mexico, is designed specifically for validating models of buoyant fire plumes. The plume source is 1~m in diameter surrounded by a 0.5~m steel ``ground plane''. Particle Image Velocimetry (PIV) and Planar Laser-Induced Fluorescence (PLIF) techniques were used to obtain instantaneous joint scalar and velocity fields.

\subsection{Sandia 1 m Helium Plume}
\label{Sandia plume}

Calculations of the Sandia 1 m helium plume are run at three grid resolutions: 6 cm, 3 cm, and 1.5 cm. To give the reader with a qualitative feel for the results, Fig.~\ref{Sandia_He_1m_image} provides a snapshot of density contours from the simulation. The calculations are run in parallel on 16 processors; the outlined blocks indicate the domain decomposition. Data for vertical velocity, radial velocity, and helium mass fraction are recorded at three levels downstream from the base of the plume, $z = [0.2, 0.4, 0.6]$ m, corresponding to the experimental measurements of O'Hern et al.~\cite{OHern:2005}. Results for the mean and root mean square (RMS) profiles are given in Figs.~\ref{Sandia_He_1m_velocity} - \ref{Sandia_He_1m_massfraction}. The means are taken between $t=10$ and $t=20$ seconds in the simulation.
Calculations of the Sandia 1 m helium plume are run at five grid resolutions: 20~cm, 10~cm, 6~cm, 3~cm, and 1.5~cm. Figure~\ref{Sandia_He_1m_image} provides a snapshot of density contours from the simulation. Data for vertical velocity, radial velocity, and helium mass fraction are recorded at three levels above the base of the plume, $z = [20, 40, 60]$~cm, corresponding to the experimental measurements of O'Hern~et~al.~\cite{OHern:2005}. Results for the mean and root mean square (RMS) profiles are given in Figs.~\ref{Sandia_He_1m_velocity} - \ref{Sandia_He_1m_massfraction}. The means are taken between $t=10$ and $t=20$ seconds in the simulation.

The domain is 3~m by 3~m by 4~m. The boundary conditions are open on all sides with a smooth solid surface surrounding the 1~m diameter helium pool. The ambient and helium mixture temperature is set to 12~$^\circ$C and the background pressure is set to 80900~Pa to correspond to the experimental conditions. The helium/acetone/oxygen mixture molecular weight is set to 5.45~kg/kmol. The turbulent Schmidt and Prandtl numbers are left at the FDS default value of 0.5. The helium mixture mass flux is specified as 0.0605~kg/s/m$^2$. This case was studied previously by DesJardin et al.~\cite{DesJardin:2004}.
\begin{figure}[h]
\begin{center}
\centering
\includegraphics[height=4in]{FIGURES/Sandia_Plumes/Sandia_He_1m_image}
\caption[Sandia 1~m helium plume image]{A snapshot of FDS results at 1.5 cm resolution for the Sandia 1 m helium plume showing density contours. The rows of measurement devices are visible near the base. The calculations are run in parallel on 16 processors; the outlined blocks indicate the domain decomposition.}
\caption[Sandia 1~m helium plume image]{A snapshot of FDS results at 1.5 cm resolution for the Sandia 1~m helium plume showing density contours. The rows of measurement devices are visible near the base. The calculations are run in parallel on 16 processors; the outlined blocks indicate the domain decomposition.}
\label{Sandia_He_1m_image}
\end{center}
\end{figure}

\newpage
Expand All @@ -1055,7 +1054,7 @@ \subsection{Sandia 1 m Helium Plume}
\includegraphics[height=2.15in]{SCRIPT_FIGURES/Sandia_Plumes/Sandia_He_1m_Wrms_p2}
\end{tabular*}
\caption[Sandia 1~m helium plume vertical velocity profiles]
{FDS predictions of mean and root mean square (RMS) vertical velocity profiles for the Sandia 1~m helium plume experiment. Results are shown for 6 cm, 3 cm, and 1.5 cm grid resolutions. With $z$ being the stream-wise coordinate, the bottom row is at $z=0.2$ m, the middle row is at $z=0.4$ m, and the top row is at $z=0.6$ m.}
{FDS predictions of mean and root mean square (RMS) vertical velocity profiles for the Sandia 1~m helium plume experiment. Results are shown for five grid resolutions and three elevations, $z$, above the base of the plume.}
\label{Sandia_He_1m_velocity}
\end{figure}

Expand All @@ -1069,7 +1068,7 @@ \subsection{Sandia 1 m Helium Plume}
\includegraphics[height=2.15in]{SCRIPT_FIGURES/Sandia_Plumes/Sandia_He_1m_Urms_p2}
\end{tabular*}
\caption[Sandia 1~m helium plume radial velocity profiles]
{FDS predictions of mean and root mean square (RMS) radial velocity profiles for the Sandia 1~m helium plume experiment. Results are shown for 6 cm, 3 cm, and 1.5 cm grid resolutions. With $z$ being the stream-wise coordinate, the bottom row is at $z=0.2$ m, the middle row is at $z=0.4$ m, and the top row is at $z=0.6$ m.}
{FDS predictions of mean and root mean square (RMS) radial velocity profiles for the Sandia 1~m helium plume experiment. Results are shown for five grid resolutions and three elevations, $z$, above the base of the plume.}
\label{Sandia_He_1m_velocity_rms}
\end{figure}

Expand All @@ -1083,7 +1082,7 @@ \subsection{Sandia 1 m Helium Plume}
\includegraphics[height=2.15in]{SCRIPT_FIGURES/Sandia_Plumes/Sandia_He_1m_Yrms_p2}
\end{tabular*}
\caption[Sandia 1~m helium plume mean and RMS mass fraction profiles]
{FDS predictions of mean and root mean square (RMS) helium mass fraction profiles for the Sandia 1~m helium plume experiment. Results are shown for 6 cm, 3 cm, and 1.5 cm grid resolutions. With $z$ being the stream-wise coordinate, the bottom row shows data at $z=0.2$ m, the middle row shows data at $z=0.4$ m, and the top row shows data at $z=0.6$ m.}
{FDS predictions of mean and root mean square (RMS) helium mass fraction profiles for the Sandia 1~m helium plume experiment. Results are shown for five grid resolutions and three elevations, $z$, above the base of the plume.}
\label{Sandia_He_1m_massfraction}
\end{figure}

Expand Down
2 changes: 1 addition & 1 deletion Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1354,7 +1354,7 @@ \subsection{Species Bounds (\texorpdfstring{\ct{bound_test_*}}{bound\_test\_*})}

When multiple infinitely fast reactions are present it is not trivial to correctly partition the limiting reactant and maintain species bounds. FDS uses a special subcycling algorithm by Kahaner \cite{Kahaner:1989} to maintain boundedness for species when time integrating the ODEs for the chemical reaction step (the method is further discussed in the FDS Tech Guide \cite{FDS_Math_Guide}). In this section, we examine two test cases designed to verify the time integration method.

The first case, \ct{bound_test_1}, consists of two independent reactions, one with air as the limiting reactant, one with fuel as the limiting reactant. The stoichiometry of each reaction is the same: $\mathrm{F} + \mathrm{A} \rightarrow 2\,\mathrm{P}$. The initial volume fractions of determine which species are limiting. The results are shown in Fig.~\ref{fig:bound_test_1}. For the first reaction, $X_{\rm F1}$ is initially 0.3 and $X_{\rm A1}$ is initially 0.2. Therefore, all the A1 is converted to P1, which has a final volume fraction of $X_{\rm P1}=0.4$. In the second reaction, the initial fuel volume fraction is $X_{\rm F2}=0.1$ (limiting) and the initial air volume fraction is $X_{\rm A2}=0.4$. As can be see in Fig.~\ref{fig:bound_test_1}, the resulting final values give a product volume fraction of twice the limiting reactant, $X_{\rm P2}=0.2$.
The first case, \ct{bound_test_1}, consists of two independent reactions, one with air as the limiting reactant, one with fuel as the limiting reactant. The stoichiometry of each reaction is the same: $\mathrm{F} + \mathrm{A} \rightarrow 2\,\mathrm{P}$. The initial volume fractions determine which species are limiting. The results are shown in Fig.~\ref{fig:bound_test_1}. For the first reaction, $X_{\rm F1}$ is initially 0.3 and $X_{\rm A1}$ is initially 0.2. Therefore, all the A1 is converted to P1, which has a final volume fraction of $X_{\rm P1}=0.4$. In the second reaction, the initial fuel volume fraction is $X_{\rm F2}=0.1$ (limiting) and the initial air volume fraction is $X_{\rm A2}=0.4$. As can be seen in Fig.~\ref{fig:bound_test_1}, the resulting final values give a product volume fraction of twice the limiting reactant, $X_{\rm P2}=0.2$.

\begin{figure}[!ht]
\centering
Expand Down
4 changes: 2 additions & 2 deletions Source/chem.f90
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ REAL(EB) FUNCTION DDC_TROE(P_RATIO, F, DPRDC, TMP, RNI)
C = -0.4_EB - 0.67_EB*LOGFCENT
N = 0.75_EB - 1.27_EB*LOGFCENT

DPARENTDC = 2.0*(LOGPR + C)/((N - D*(LOGPR + C))**2)*((DLOGPRDC)-(LOGPR + C)*(-D*(DLOGPRDC))/(N - D*(LOGPR + C)))
DPARENTDC = 2.0_EB*(LOGPR + C)/((N - D*(LOGPR + C))**2)*((DLOGPRDC)-(LOGPR + C)*(-D*(DLOGPRDC))/(N - D*(LOGPR + C)))

DDC_TROE = F*LOGTEN * (- LOGFCENT*DPARENTDC/(1.0 + ((LOGPR + C)/(N - D*(LOGPR + C)))**2)**2)

Expand Down Expand Up @@ -774,7 +774,7 @@ REAL(EB) FUNCTION DDTMP_TROE(P_RATIO, F, DPRDT, TMP, RNI)
DNDT = -1.27*DLOGFCENTDT
DLOGPRDT = DPRDT/P_RATIO/LOGTEN

DPARENTDT = 2.0*(LOGPR + C)/((N - D*(LOGPR + C))**2)* &
DPARENTDT = 2.0_EB*(LOGPR + C)/((N - D*(LOGPR + C))**2)* &
((DLOGPRDT + DCDT) - (LOGPR + C)*(DNDT - D*(DLOGPRDT + DCDT))/(N - D*(LOGPR + C)))

DDTMP_TROE = F*LOGTEN*(DLOGFCENTDT/(1.0 + ((LOGPR + C)/(N - D*(LOGPR + C)))**2) &
Expand Down
2 changes: 1 addition & 1 deletion Source/fire.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1242,7 +1242,7 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)
B = X
C = 0.5_EB*Y
D = 0._EB ! No fuel
E = A + 0.5*Z - B - 0.5_EB*C
E = A + 0.5_EB*Z - B - 0.5_EB*C
ENDIF

! Setup reactants
Expand Down
4 changes: 2 additions & 2 deletions Source/func.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2451,13 +2451,13 @@ SUBROUTINE SPRAY_ANGLE_DISTRIBUTION(LON,LAT,LON_CDF,LAT_CDF,BETA,MU,SPRAY_ANGLE,
LAT_CDF=0._EB
! Latitude distribution conditional on Longtitude
DO I=1,NPT
LAT_CDF(I,:)=LAT_CDF(I-1,:)+0.5*(PDF(I,:)+PDF(I-1,:))*DLAT
LAT_CDF(I,:)=LAT_CDF(I-1,:)+0.5_EB*(PDF(I,:)+PDF(I-1,:))*DLAT
ENDDO

! Marginal longtitude distribution
LON_CDF=0._EB
DO I=1,NPT
LON_CDF(I)=LON_CDF(I-1)+0.5*(LAT_CDF(NPT,I-1)+LAT_CDF(NPT,I))*DLON
LON_CDF(I)=LON_CDF(I-1)+0.5_EB*(LAT_CDF(NPT,I-1)+LAT_CDF(NPT,I))*DLON
ENDDO

! Normalize marginal longtitude distribution
Expand Down
2 changes: 1 addition & 1 deletion Source/hvac.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2178,7 +2178,7 @@ SUBROUTINE UPDATE_FAN(T,ND)
DEL_P = FA%MAX_PRES - FA%MAX_PRES*(VDOT/FA%MAX_FLOW)**2
DEL_P = DEL_P*EVALUATE_RAMP(TSI,FA%SPIN_INDEX,TAU=FA%TAU)
CASE(3) !Fan curve
VDOT = 0.5*(DU%VEL(NEW)+DU%VEL(OLD))*DU%AREA
VDOT = 0.5_EB*(DU%VEL(NEW)+DU%VEL(OLD))*DU%AREA
IF (DU%REVERSE) VDOT = -VDOT
DEL_P = EVALUATE_RAMP(VDOT,FA%RAMP_INDEX)*EVALUATE_RAMP(TSI,FA%SPIN_INDEX,TAU=FA%TAU)
END SELECT
Expand Down
2 changes: 1 addition & 1 deletion Source/part.f90
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ SUBROUTINE GENERATE_PARTICLE_DISTRIBUTIONS
DI = RM%T_MIN + I*DD
LPC%R_CNF(I) = DI
LPC%CNF(I) = EVALUATE_RAMP(DI,LPC%CNF_RAMP_INDEX)
LPC%CVF(I) = LPC%CVF(I-1) + (DI-0.5*DD)**3*(LPC%CNF(I)-LPC%CNF(I-1))
LPC%CVF(I) = LPC%CVF(I-1) + (DI-0.5_EB*DD)**3*(LPC%CNF(I)-LPC%CNF(I-1))
ENDDO
LPC%R_CNF = 1.E-6_EB*0.5_EB*LPC%R_CNF ! Convert diameter in microns to radius in meters.
LPC%CNF = LPC%CNF/LPC%CNF(NDC)
Expand Down
2 changes: 1 addition & 1 deletion Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -4219,7 +4219,7 @@ SUBROUTINE PROC_SPEC_1
SS_K(N,0) = SS_K(N,1)
SS_MU(N,0) = SS_MU(N,1)
ENDIF
SS%H_G(I) = SS%H_G(I-1) + 0.5*(SS_CP(N,I-1)+SS_CP(N,I))
SS%H_G(I) = SS%H_G(I-1) + 0.5_EB*(SS_CP(N,I-1)+SS_CP(N,I))
IF (SS%EXPLICIT_G_F) SS%G_F(I) = SS_G_F(N,I)
ENDDO

Expand Down
4 changes: 2 additions & 2 deletions Source/wall.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2936,8 +2936,8 @@ SUBROUTINE PERFORM_PYROLYSIS
R_DROP=R_SURF,LPU=U_SURF,LPV=V_SURF,LPW=W_SURF)
ELSE
CALL PYROLYSIS(ONE_D%N_MATL,ONE_D%MATL_INDEX,SURF_INDEX,BC%IIG,BC%JJG,BC%KKG,ONE_D%TMP(I),B1%TMP_F,Y_O2_F,BC%IOR,&
RHO_DOT(1:ONE_D%N_MATL,I),RHO_TEMP(1:ONE_D%N_MATL),0.5*(ONE_D%X(I-1)+ONE_D%X(I)),ASH_DEPTH,DX_S,DT_BC_SUB,&
M_DOT_G_PPP_ADJUST,M_DOT_G_PPP_ACTUAL,M_DOT_S_PPP,Q_S(I),Q_DOT_G_PPP,Q_DOT_O2_PPP,&
RHO_DOT(1:ONE_D%N_MATL,I),RHO_TEMP(1:ONE_D%N_MATL),0.5_EB*(ONE_D%X(I-1)+ONE_D%X(I)),ASH_DEPTH,DX_S,&
DT_BC_SUB,M_DOT_G_PPP_ADJUST,M_DOT_G_PPP_ACTUAL,M_DOT_S_PPP,Q_S(I),Q_DOT_G_PPP,Q_DOT_O2_PPP,&
Q_DOT_PART,M_DOT_PART,T_BOIL_EFF,B1%B_NUMBER,LAYER_INDEX(I),REMOVE_LAYER,ONE_D,B1,SOLID_CELL_INDEX=I)
ENDIF

Expand Down
Loading
Loading