Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
ba54fee
Merge remote-tracking branch 'firemodels/master' into FireX
cxp484 Jun 25, 2026
6ec0a81
FDS Validation: Commit extra input file
mcgratta Jun 26, 2026
bac8187
Merge remote-tracking branch 'firemodels/FireX' into FireX
cxp484 Jun 26, 2026
f55db4e
FDS Source: Add random rotation of angles to radiation calculation
cxp484 Jun 9, 2026
3ffff3d
FDS Manual: Add first documentation for random rotation. More need to…
cxp484 Jun 26, 2026
8c185e3
FDS Source: Merge with firemodels/master
cxp484 Jun 26, 2026
6f936c0
FDS Source: Minor changes to merge firemodels/master
cxp484 Jun 26, 2026
871b212
FDS Manual: minor correction
cxp484 Jun 26, 2026
0d87eb0
Merge pull request #16368 from cxp484/fvdom_ray_rotation
cxp484 Jun 26, 2026
10337ff
FDS Source: Add CURVE_TEMP for fan density affinity law
drjfloyd Jun 27, 2026
4f22eb8
Merge remote-tracking branch 'github/master'
drjfloyd Jun 27, 2026
ed54255
FDS Source: add fan affinity law to qfan solver
drjfloyd Jun 27, 2026
00919a5
Merge pull request #16370 from drjfloyd/master
drjfloyd Jun 27, 2026
01611ed
FDS Verification: Fix ASHRAE cases for fan affinity law.
drjfloyd Jun 28, 2026
e8af1b0
Merge pull request #16371 from drjfloyd/master
drjfloyd Jun 28, 2026
a91cd35
Merge remote-tracking branch 'github/master'
drjfloyd Jun 28, 2026
a3c183b
Bump actions/cache from 5 to 6
dependabot[bot] Jun 29, 2026
38d3df2
Merge pull request #16372 from firemodels/dependabot/github_actions/a…
marcosvanella Jun 29, 2026
9ea632a
Merge remote-tracking branch 'github/master'
drjfloyd Jun 29, 2026
fe24062
Merge remote-tracking branch 'firemodels/master'
mcgratta Jun 29, 2026
a847cdf
FDS Source: Fix a bug and reorganize code
cxp484 Jun 29, 2026
91e7534
Merge pull request #16373 from cxp484/fvdom_ray_rotation
cxp484 Jun 29, 2026
4d541f0
Merge remote-tracking branch 'firemodels/master'
mcgratta Jun 29, 2026
8728126
FDS Source: Prevent HT3D OBSTs from being REMOVED
mcgratta Jun 29, 2026
68715ee
Merge pull request #16374 from mcgratta/master
mcgratta Jun 29, 2026
88039ed
FDS Validation: Add CERTEC Pool Fires
mcgratta Jun 29, 2026
1e189c5
Merge pull request #16375 from mcgratta/master
mcgratta Jun 29, 2026
5214147
Merge remote-tracking branch 'github/master'
drjfloyd Jun 30, 2026
b03c969
FDS Source: Fix HVAC bug Discussion #16377
drjfloyd Jun 30, 2026
95c7fb6
Merge pull request #16378 from drjfloyd/master
drjfloyd Jun 30, 2026
87ec879
FDS Verification: Add wall normal plot for hvac_damper
drjfloyd Jun 30, 2026
dd8ae0c
Merge pull request #16379 from drjfloyd/master
drjfloyd Jun 30, 2026
4d5b5e2
FDS Verification: Guide updates for hvac_damper
drjfloyd Jun 30, 2026
783db56
Merge pull request #16380 from drjfloyd/master
drjfloyd Jun 30, 2026
36bb442
FDS Source: Fix a bug related to cut face and cylindrical coordinate.
cxp484 Jun 30, 2026
7a89ee9
Merge pull request #16381 from cxp484/fvdom_ray_rotation
cxp484 Jun 30, 2026
6a24e4d
FDS Validation: Flame info for Sandia Pool Fires
mcgratta Jun 30, 2026
570d38a
Merge pull request #16382 from mcgratta/master
mcgratta Jun 30, 2026
8d28be2
FDS Validation: Add Sandia_Pool_Fires to scatterplot
mcgratta Jul 1, 2026
c141ad3
Merge pull request #16385 from mcgratta/master
mcgratta Jul 1, 2026
3ab9d97
FDS Validation: Add Sandia_Pool_Fires to scripts
mcgratta Jul 1, 2026
199afe5
Merge pull request #16386 from mcgratta/master
mcgratta Jul 1, 2026
a0e8832
FDS Validation: fix inverted y-axis XB in memorial tunnel jet fans
johodges Jul 2, 2026
7d3c589
FDS Source: Bug fix for Radiation Ray rotation when particles exist
cxp484 Jul 2, 2026
4ddbbe8
Merge pull request #16389 from cxp484/fvdom_ray_rotation
cxp484 Jul 2, 2026
9c5c5f8
Merge pull request #16388 from johodges/master
mcgratta Jul 2, 2026
9a698fa
FDS Source: Minor fix
cxp484 Jul 2, 2026
28bc288
Merge pull request #16390 from cxp484/fvdom_ray_rotation
cxp484 Jul 2, 2026
39bc10d
FDS Verification: Add check of INTERNAL_HEAT_SOURCE
mcgratta Jul 2, 2026
c5f59e6
Merge pull request #16391 from mcgratta/master
mcgratta Jul 2, 2026
5f3f06e
Merge remote-tracking branch 'firemodels/master' into FireX
cxp484 Jul 3, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ jobs:
# oneapi-ci/scripts/install_windows.bat
- name: cache install oneapi
id: cache-install
uses: actions/cache@v5
uses: actions/cache@v6
with:
path: C:\Program Files (x86)\Intel\oneAPI\
key: install-${{ env.WINDOWS_TOOLKIT_URL }}-${{ env.WINDOWS_TOOLKIT_COMPONENTS }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
# oneapi-ci/scripts/install_windows.bat
- name: cache install oneapi
id: cache-install
uses: actions/cache@v5
uses: actions/cache@v6
with:
path: C:\Program Files (x86)\Intel\oneAPI\
key: install-${{ env.WINDOWS_TOOLKIT_URL }}-${{ env.WINDOWS_TOOLKIT_COMPONENTS }}
Expand Down
30 changes: 30 additions & 0 deletions Manuals/Bibliography/FDS_general.bib
Original file line number Diff line number Diff line change
Expand Up @@ -4132,6 +4132,17 @@ @report{Luketa:1
year = {2022},
}

@report{Luketa:11078,
title = {{Fire and Thermal Experiments in Support of the Model Evaluation Protocol for LNG Facility Fires}},
author = {A. Luketa and S. Adee and R. Allen and A. Cruz-Cabrera},
address = {Albuquerque, New Mexico},
institution = {Sandia National Laboratories},
month = 9,
number = {SAND2025-11078},
type = {Sandia Report},
year = {2025}
}

@misc{Lund:1997,
title = {On the use of discrete filters for large eddy simulation},
author = {T. S. Lund},
Expand Down Expand Up @@ -5306,6 +5317,15 @@ @article{Mulholland:F+M
year = {2000},
}

@article{Munoz:JHM2007,
title = {{Predicting the emissive power of hydrocarbon pool fires}},
author = {M. Mu\~{n}oz and E. Planas and F. Ferrero and J. Casal},
journal = {Journal of Hazardous Materials},
pages = {725-729},
volume = {144},
year = {2007}
}

@book{MYO,
title = {Fundamentals of Fluid Mechanics},
author = {Bruce R. Munson and Donald F. Young and Theodore H. Okiishi},
Expand Down Expand Up @@ -6340,6 +6360,16 @@ @inproceedings{Ren:IAFSS2020
year = {2020},
}

@article{Rengel:JLP2018,
title = {{A priori validation of CFD modelling of hydrocarbon pool fires}},
author = {B. Rengel and C. Mata and E. Pastor and J. Casal and E. Planas},
doi = {doi.org/10.1016/j.jlp.2018.08.002},
journal = {Journal of Loss Prevention in the Process Industries},
pages = {18-31},
volume = {56},
year = {2018}
}

@report{Restivo:1979,
title = {{Turbulent Flow in Ventilated Rooms}},
author = {Restivo, A.},
Expand Down
2 changes: 2 additions & 0 deletions Manuals/FDS_Technical_Reference_Guide/Radiation_Chapter.tex
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,8 @@ \subsection{Spatial Discretization}
all the upwind intensities are determined from solid or gas phase boundaries. In theory, iterations are needed if the reflections
or scattering are important, or if the scenario is optically very thick. Currently, no iterations are made.

To mitigate ray effects in the wall radiative heat flux, an option is implemented to randomly rotate the local meridian ($x$), azimuthal ($y$), and axial ($z$) coordinate system at each selected time step with respect to which the angular coordinates, $\theta$ and $\phi$ are evaluated. When random rotation is enabled, the discrete angular integration coefficients (e.g., $D_{xu}^l$) are no longer exactly symmetric with respect to the mesh faces. Consequently, the sum of $D_{xu}^l$ (and the corresponding coefficients for the other coordinate directions) over a face may deviate slightly from the theoretical value of $\pi$.

\subsection{Spatial Discretization in Cut Cells}

In the case of complex geometry where irregular cut-cells may exist (see Sec.~\ref{sec:unstructured_geometry}) an unstructured version of the RTE in Eq.~\ref{RTEdiscrete3} is adopted
Expand Down
38 changes: 28 additions & 10 deletions Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2434,23 +2434,32 @@ \subsection{Walls with Different Materials Front and Back}
\subsection{Specified Internal Heat Source}

\label{info:INTERNAL_HEAT_SOURCE}
\label{internal_heating}

The condensed phase heat conduction equation has a source term that describes the internal sources and sinks of energy.
There are three types of sources that contribute to this term:
heats of reaction for the pyrolysis (see Sec.~\ref{info:solid_pyrolysis}),
internal absorption and emission of radiation (see Sec.~\ref{info:liquid_fuels}), and the source specified by the user.
An example of the case where specified heat source could be needed is the heating of electrical cables due to internal current.

The internal source term for each layer of the surface is specified using \ct{INTERNAL_HEAT_SOURCE} on the \ct{SURF} line. Its units are \unit{kW/m^3} and the default value is zero. An optional time ramp can be specified for each layer's heat source using \ct{RAMP_IHS}. In the example below, the cylindrical surface describing a cable consists of an outer plastic layer and inner core of metal. The metal core is heated with a power of 300~\unit{kW/m^3}.
The internal source term for each layer of the surface is specified using \ct{INTERNAL_HEAT_SOURCE} on the \ct{SURF} line. Its units are \unit{kW/m^3} and the default value is zero. An optional time ramp can be specified for each layer's heat source using \ct{RAMP_IHS}. In the example below, the cylindrical surface describing a 10~cm long cable segment consists of an outer plastic layer and inner core of metal. The metal core is heated with a power of 300~\unit{kW/m^3}.
\begin{lstlisting}
&SURF ID = 'Cable'
THICKNESS = 0.002,0.008
MATL_ID(1,1) = 'PLASTIC'
MATL_ID(2,1) = 'METAL'
GEOMETRY = 'CYLINDRICAL'
LENGTH = 0.1
INTERNAL_HEAT_SOURCE = 0.,300. /
&SURF ID = 'Cable'
THICKNESS = 0.002,0.008
MATL_ID(1,1) = 'PLASTIC'
MATL_ID(2,1) = 'METAL'
GEOMETRY = 'CYLINDRICAL'
LENGTH = 0.1
INTERNAL_HEAT_SOURCE = 0.,300. /
\end{lstlisting}
Figure~\ref{fig:internal_heating} displays the heat generated by 10 of these cable segments. The exact value is 300~\unit{kW/m^3} multiplied by the volume of the metal within the cable segment, $2 \times 10^{-5}$~\unit{m^3}, multiplied by the number of segments, 10, which equals approximately 0.06~kW.
\begin{figure}[!ht]
\centering
\includegraphics[height=2.35in]{SCRIPT_FIGURES/internal_heating}
\caption[Results of the \ct{internal_heating} test case]{Heating rate of a set of 10 cable segments. The dashed line represents the heat generated by the cable and the dotted line the heat flowing out of the computational domain.}
\label{fig:internal_heating}
\end{figure}


\subsection{Non-Planar Walls and Targets}

Expand Down Expand Up @@ -2533,7 +2542,8 @@ \subsection{Limitations}
\item Avoid contact between 3-D and 1-D solids. If two sides of a 3-D solid touch 1-D solids, there will be no lateral heat conduction computed in that particular direction.
\item If your 3-D obstruction extends beyond meshes that abut, FDS uses a special algorithm to identify all the meshes where this obstruction lives, and also those obstructions connected to it. However, if this algorithm fails to detect all the meshes and you receive an error stating that there is a problem, add the parameter \ct{NEIGHBOR_SEPARATION_DISTANCE} to the \ct{MISC} line. Any mesh within this distance of another mesh will share geometry information for use in the 3-D heat conduction calculation. If you set this parameter to a value larger than the width of the computational domain, then all meshes will establish communication channels for exchanging boundary information.
\item By default, the interior nodes are clustered near the surface and stretched out deeper within the solid. If you want to maintain uniform spacing, set \ct{CELL_SIZE} on the \ct{SURF} or \ct{OBST} line to indicate the desired interior node spacing. The \ct{CELL_SIZE} is typically chosen to be comparable to the gas phase cells. If the obstruction is thin; that is, less than one gas phase cell thick, the specified \ct{CELL_SIZE} will only apply to the heat conduction in the transverse, not normal, direction. The normal direction gridding will be controlled by the parameters \ct{STRETCH_FACTOR} and \ct{CELL_SIZE_FACTOR}. This may be useful in cases where the specified \ct{CELL_SIZE} is too coarse to resolve variations in surface definition along the normal dimension (see Section~\ref{checkerboard} for an example).
\item \ct{HT3D} cannot be applied to an \ct{OBST} that is to \ct{BURN_AWAY}. In addition, if the solid undergoes significant shrinking or swelling, do not use \ct{HT3D}. ``Significant'' means that the number of internal cells changes, in which case the 3-D nodal structure breaks down. To determine if this happens, use the \ct{PROF}ile output feature (Sec.~\ref{info:PROF}) to visualize profiles of internal temperature or other solid phase quantities. These output files contain the internal node coordinates as a function of time.
\item \ct{HT3D=T} cannot be applied to an \ct{OBST} that is to \ct{BURN_AWAY}. In addition, if the solid undergoes significant shrinking or swelling, do not use \ct{HT3D}. ``Significant'' means that the number of internal cells changes, in which case the 3-D nodal structure breaks down. To determine if this happens, use the \ct{PROF}ile output feature (Sec.~\ref{info:PROF}) to visualize profiles of internal temperature or other solid phase quantities. These output files contain the internal node coordinates as a function of time.
\item \ct{HT3D=T} or \ct{VARIABLE_THICKNESS=T} cannot be applied to an \ct{OBST} that is to be created or removed during the simulation, unless the \ct{OBST} does not touch any other \ct{OBST} or the boundary of the domain. This rule does not apply to two \ct{OBST}s that are controlled by the exact same device or controller; that is, the two \ct{OBST}s are created or removed at the same time.
\item If a \ct{SURF} line specifies either \ct{HT3D=T} or \ct{VARIABLE_THICKNESS=T} and also specifies an \ct{HRRPUA}, \ct{MLPUA}, or \ct{MASS_FLUX}, you must specify a \ct{MATL_ID} on the \ct{SURF} line and the appropriate \ct{OBST} lines. The reason for doubly specifying the \ct{MATL_ID} is so that the \ct{SURF} line can be set up properly. Note that the specification of \ct{HRRPUA} or similar on the surface of a 3-D or variably thick solid means that no obstruction making up the solid can have specified internal reactions, i.e. pyrolysis.
\item Issues regarding pyrolysis and material transport in 3-D solids is discussed in Section~\ref{info:LAYER_DIVIDE}.
\end{enumerate}
Expand Down Expand Up @@ -3814,6 +3824,7 @@ \subsection{HVAC Fan Parameters}
\end{lstlisting}
where:
\begin{itemize}
\item \ct{CURVE_TEMP} is the temperature the fan curve is based upon. FDS assumes a default value of \SI{20}{\degreeCelsius}.
\item \ct{LOSS} is the loss coefficient for flow through the fan when it is not operational. FDS assumes a default value of 1.
\item \ct{MAX_FLOW} is the maximum volumetric flow of the fan in \unit{m^3/s}. This input activates a quadratic fan model. Value must be > 0.
\item \ct{MAX_PRESSURE} is the stall pressure of the fan in units of Pa. This input activates a quadratic fan model. Value must be > 0.
Expand Down Expand Up @@ -3860,6 +3871,8 @@ \subsubsection{Fan Curves}
\end{center}
\end{figure}

FDS will automatically adjust the pressures of the fan curve to reflect the fan affinity law for density. This law states that the fan curve will shift in proportion to the ratio of the current duct density to the as tested duct density. The as tested duct density is computed assuming air as the gas, standard pressure, and \ct{CURVE_TEMP}.

\subsubsection{Jet Fans}

Fans do not have to be mounted on a solid wall, like a supply or an exhaust fan. If you just want to blow gases in a particular direction, create an obstruction \ct{OBST}, at least one cell thick, and apply to it \ct{VENT} lines that are associated with a simple HVAC system. This allows hot, smokey gases to pass through the obstruction, much like a free-standing fan. See the example case \ct{jet_fan.fds} which places a louvered fan (blowing diagonally down) near a fire (see Fig.~\ref{fig:Jet_Fan}).
Expand Down Expand Up @@ -5853,6 +5866,8 @@ \section{Spatial and Temporal Resolution of the Radiation Transport Solver}

The frequency of calls to the radiation solver can be changed from every 3 time steps with an integer called \ct{TIME_STEP_INCREMENT}. The increment over which the angles are updated can be changed from 5 with the integer called \ct{ANGLE_INCREMENT}. If \ct{TIME_STEP_INCREMENT} and \ct{ANGLE_INCREMENT} are both set to 1, the radiation field is completely updated in a single time step, but the cost of the calculation increases significantly. By default, the radiation transport equation is fully updated every 15 time steps. Given the relatively small time steps typically dictated by the CFL constraint, 15 time steps is usually still a relatively short interval of time. Increasing the temporal resolution of the radiation solver rarely adds to the overall accuracy of the calculation. Spatial resolution is far more important.

Additionally, to mitigate ray effects in the wall radiative heat flux, the option \ct{RANDOMIZE_RADIATION_DIRECTIONS} randomly rotates the local meridian ($x$), azimuthal ($y$), and axial ($z$) coordinate system used to define the angular coordinates $\theta$ and $\phi$. If \ct{RANDOMIZE_RADIATION_DIRECTIONS} is true, this rotation is performed after each complete sweep of the angular directions.

If you are using multiple meshes, the radiation solver cannot transfer energy from mesh to mesh within a single time step. If you notice an obvious delay in the propagation of radiative intensity from one mesh to another, you can increase the number of times the radiative intensity is updated within a single time step using \ct{RADIATION_ITERATIONS}, which is 1 by default. You rarely need to do this, unless it is obvious from the animation of various slice files.

The radiation solver is called before the start of the calculation to establish the radiation field in the event that you specify something to have a non-ambient temperature initially. By default, the radiation and wall boundary routines are iterated three times to establish thermal equilibrium. To change the number of iterations, set \ct{INITIAL_RADIATION_ITERATIONS} on the \ct{RADI} line.
Expand Down Expand Up @@ -12402,6 +12417,7 @@ \section{\texorpdfstring{{\tt HVAC}}{HVAC} (HVAC System Definition)}
\ct{COOLANT_SPECIFIC_HEAT} & Real & Section~\ref{info:HVACaircoil} & \unit{kJ/(kg.K)} & \\ \hline
\ct{COOLANT_TEMPERATURE} & Real & Section~\ref{info:HVACaircoil} & \unit{\degreeCelsius} & \ct{TMPA} \\ \hline
\ct{CTRL_ID} & Character & Sections~\ref{info:HVACduct} & & \\ \hline
\ct{CURVE_TEMP} & Real A & Sections~\ref{info:HVACfan} & \unit{\degreeCelsius} & 20. \\ \hline
\ct{DAMPER} & Logical & Sections~\ref{info:HVACduct}, \ref{info:HVACdamper} & & \ct{F} \\ \hline
\ct{DEVC_ID} & Character & Sections ~\ref{info:HVACduct} & & \\ \hline
\ct{DIAMETER} & Real & Section~\ref{info:HVACduct} & m & \\ \hline
Expand Down Expand Up @@ -13213,6 +13229,7 @@ \section{\texorpdfstring{{\tt RADI}}{RADI} (Radiation Parameters)}
\ct{RADIATION} & Logical & Section~\ref{info:radiation_off} & & \ct{T} \\ \hline
\ct{RADIATION_ITERATIONS} & Integer & Section~\ref{info:RADI_Resolution} & & 1 \\ \hline
\ct{RADTMP} & Real & Section~\ref{info:RADI_Two_Phase} & \unit{\degreeCelsius} & 900 \\ \hline
\ct{RANDOMIZE_RADIATION_DIRECTIONS}& Logical & Section~\ref{info:RADI_Resolution} & & \ct{F} \\ \hline
\ct{TIME_STEP_INCREMENT} & Integer & Section~\ref{info:RADI_Resolution} & & 3\,(3D),2\,(2D) \\ \hline
\ct{WIDE_BAND_MODEL} & Logical & Section~\ref{info:RADI_Wide_Band} & & \ct{F} \\ \hline
\ct{WSGG_MODEL} & Logical & Section~\ref{info:RADI_WSGG} & & \ct{F} \\ \hline
Expand Down Expand Up @@ -13530,7 +13547,7 @@ \section{\texorpdfstring{{\tt SURF}}{SURF} (Surface Properties)}
\ct{INIT_IDS} & Char.~Array & Section~\ref{info:trees} & & \\ \hline
\ct{INIT_PER_AREA} & Real & Section~\ref{info:trees} & m$^{-2}$ & \\ \hline
\ct{INNER_RADIUS} & Real & Section~\ref{info:PART_GEOMETRY} & m & \\ \hline
\ct{INTERNAL_HEAT_SOURCE} & Real Array & Section~\ref{info:INTERNAL_HEAT_SOURCE} & \unit{kW/m^3} & \\ \hline
\ct{INTERNAL_HEAT_SOURCE} & Real Array & Section~\ref{info:INTERNAL_HEAT_SOURCE} & \unit{kW/m^3} & 0 \\ \hline
\ct{LAYER_DIVIDE} & Real & Section~\ref{info:LAYER_DIVIDE} & & \ct{N_LAYERS}/2 \\ \hline
\ct{LEAK_PATH} & Int.~Pair & Section~\ref{info:Leaks} & & \\ \hline
\ct{LEAK_PATH_ID} & Character~Pair & Section~\ref{info:Leaks} & & \\ \hline
Expand Down Expand Up @@ -14130,6 +14147,7 @@ \chapter{Error Codes}
377 \> \ct{SURF ... IMPINGING JET model requires ...} \> Section~\ref{info:impinging_jet} \\
378 \> \ct{SURF ... cannot be applied to a 3-D conducting solid.} \> Section~\ref{info:BACKING} \\
379 \> \ct{SURF ... NODE_ID does not exist.} \> Section~\ref{info:hvac_geom} \\
380 \> \ct{OBST ... is VARIABLE_THICKNESS or HT3D and cannot be removed.} \> Section~\ref{info:HT3D_Limitations} \\
\> \> \\
381 \> \ct{Need more spectral band limits.} \> Section~\ref{info:RADI_Wide_Band} \\
382 \> \ct{Spectral band limits should be given in ascending order.} \> Section~\ref{info:RADI_Wide_Band} \\
Expand Down
Loading
Loading