diff --git a/.github/workflows/Line_Endings.yml b/.github/workflows/Line_Endings.yml index 383d1d3cbcb..294115df591 100644 --- a/.github/workflows/Line_Endings.yml +++ b/.github/workflows/Line_Endings.yml @@ -21,7 +21,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Check for CRLF line endings run: | diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 696d1da6f08..b133a1e2004 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -94,7 +94,7 @@ jobs: sudo apt-get -y update sudo apt-get -y install libopenmpi-dev openmpi-bin - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - run: git config --global --add safe.directory /__w/fds/fds - name: set linux-gnu compiler @@ -168,7 +168,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: install openmpi run: brew install gcc@15 open-mpi @@ -246,7 +246,7 @@ jobs: shell: cmd steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 # install oneapi components from web installer based on # oneapi-ci/scripts/install_windows.bat diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2c947b621b8..3b713e14c4a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -39,7 +39,7 @@ jobs: mkl@2025.2.0 prune: false - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: build fds debug run: | @@ -74,7 +74,7 @@ jobs: mkl@2025.1.0 prune: false - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: build fds debug run: | source /opt/intel/oneapi/setvars.sh @@ -96,7 +96,7 @@ jobs: runs-on: [ubuntu-latest] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 with: diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 6f926ebc286..ddb1fe2778b 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -34,7 +34,7 @@ jobs: shell: bash steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: install openmpi run: | brew install gcc@15 open-mpi diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 5ea78b3ad05..76b0d57e374 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -44,7 +44,7 @@ jobs: shell: cmd steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 # install oneapi components from web installer based on # oneapi-ci/scripts/install_windows.bat diff --git a/Manuals/FDS_User_Guide/FDS_User_Guide.tex b/Manuals/FDS_User_Guide/FDS_User_Guide.tex index b62324d893c..ca82af7da8c 100644 --- a/Manuals/FDS_User_Guide/FDS_User_Guide.tex +++ b/Manuals/FDS_User_Guide/FDS_User_Guide.tex @@ -3078,7 +3078,7 @@ \subsection{Multiple Solid Phase Reactions} \label{pyrolysis_2} \end{figure} -The plot in Fig.~\ref{pyrolysis_2} contains two sets of curves. The solid curves represent the solution of the set of equations computed using a Matlab ODE solver, and the underlying dashed curves are a ``fit'' of the Matlab solution using FDS. The \ct{MATL} line for the solid material contains the following three parameters that define its decomposition: +The plot in Fig.~\ref{pyrolysis_2} contains two sets of curves. The solid curves represent the solution of the set of equations computed using a numerical ODE solver, and the underlying dashed curves are a ``fit'' of the solution using FDS. The \ct{MATL} line for the solid material contains the following three parameters that define its decomposition: \begin{lstlisting} &MATL ID = '...' ... @@ -3086,7 +3086,7 @@ \subsection{Multiple Solid Phase Reactions} PYROLYSIS_RANGE = 100. HEATING_RATE = 5. / \end{lstlisting} -The \ct{REFERENCE_TEMPERATURE} is the temperature in $^\circ$C where the mass loss rate is at its peak. The \ct{HEATING_RATE} is the linear temperature rise ($^\circ$C/min) used in the TGA experiment, which is represented here by the Matlab solution. The \ct{PYROLYSIS_RANGE} is the approximate ``width'' of the second red hump in Fig.~\ref{pyrolysis_2}, fit by inspection. That is, the value of 100~$^\circ$C was chosen by trial and error. This is typically how one would choose kinetic parameters in FDS to match a given TGA curve. +The \ct{REFERENCE_TEMPERATURE} is the temperature in $^\circ$C where the mass loss rate is at its peak. The \ct{HEATING_RATE} is the linear temperature rise ($^\circ$C/min) used in the TGA experiment, which is represented here by the numerical solution. The \ct{PYROLYSIS_RANGE} is the approximate ``width'' of the second red hump in Fig.~\ref{pyrolysis_2}, fit by inspection. That is, the value of 100~$^\circ$C was chosen by trial and error. This is typically how one would choose kinetic parameters in FDS to match a given TGA curve. @@ -3324,7 +3324,7 @@ \subsubsection{Examples} \subsection{Delamination of layers} \label{info:surf_delamination} -Delamination (fall-off) of material layers can occur e.g. in glued materials, such as Cross-Laminated Timber (CLT). Two different criteria can be used to enforce a delamination of \ct{SURF} layers: \ct{DELAMINATION\_TMP(NL)} sets the temperature criterion; if the last cell of the layer \ct{NL} exceeds this temperature, all layers from the first to \ct{NL}'th (of this particular wall cell) will be removed. Their mass will simply disappear from the computation, and the following layer will befome the surface of the wall. Similarly, specifying \ct{DELAMINATION\_DENSITY(NL)} will remove the layers 1 to \ct{NL} if the density of the \ct{NL}th layer's last cell decreases below the threshold. +Delamination (fall-off) of material layers can occur e.g. in glued materials, such as Cross-Laminated Timber (CLT). Two different criteria can be used to enforce a delamination of \ct{SURF} layers: \ct{DELAMINATION_TMP(NL)} sets the temperature criterion; if the last cell of the layer \ct{NL} exceeds this temperature, all layers from the first to \ct{NL}'th (of this particular wall cell) will be removed. Their mass will simply disappear from the computation, and the following layer will befome the surface of the wall. Similarly, specifying \ct{DELAMINATION_DENSITY(NL)} will remove the layers 1 to \ct{NL} if the density of the \ct{NL}th layer's last cell decreases below the threshold. \newpage diff --git a/Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex b/Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex index 7674e9fe027..dd8ba326bcd 100644 --- a/Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex +++ b/Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex @@ -145,7 +145,7 @@ \chapter{Acknowledgments} \begin{itemize} \item Chris Lautenberger and Carlos Fernandez-Pello contributed the ``two-reaction'' test case. \item Matthias M\"{u}nch of the Freie Universit\"{a}t Berlin provided useful test cases for the basic flow solver. -\item Clara Cruz, a student at the University of Puerto Rico and Summer Undergraduate Research Fellow at NIST, helped develop useful Matlab scripts to automate the process of compiling this guide. +\item Clara Cruz, a student at the University of Puerto Rico and Summer Undergraduate Research Fellow at NIST, helped develop useful scripts to automate the process of compiling this guide. \item Bryan Klein, now at Thunderhead Engineering, developed the source code version control system that is an essential part of the verification process. \item Joonas Ryyn\"{a}nen of VTT, Finland, designed and documented the FED/FIC test cases. \item Max Gould, Summer Undergraduate Research Fellow, helped develop and produce the ``2D Vortex'' test case. @@ -830,7 +830,7 @@ \subsection{Stationary compression wave in 2-D (\texorpdfstring{\ct{compression_ \section{Scalar Transport} -\subsection{Uniform Velocity Field (\texorpdfstring{\ct{move_slug}}{move\_slug})} +\subsection{Uniform Velocity Field (\texorpdfstring{\ct{move_slug}}{move_slug})} In this section we demonstrate the qualitative behavior of the Superbee flux limiter scheme for transport of a square wave. The diffusivity is set to zero and the advecting velocity is constant and uniform $\mathbf{u} = [1.0\,\,\,1.0]$. @@ -1181,7 +1181,7 @@ \subsubsection*{Temporal Error Analysis} -\section{Collapse of a Hot Layer in a Micro-gravity Environment (\texorpdfstring{\ct{hot_layer_360}}{hot\_layer\_360})} +\section{Collapse of a Hot Layer in a Micro-gravity Environment (\texorpdfstring{\ct{hot_layer_360}}{hot_layer_360})} \label{sec:baum_hot_layer} \textbf{Howard R. Baum, NIST Fellow Emeritus}\\ @@ -1347,7 +1347,7 @@ \section{2-D Vortex Simulation (\texorpdfstring{\ct{vort2d}}{vort2d})} \section{Boundedness Tests} -\subsection{Species Bounds (\texorpdfstring{\ct{bound_test_*}}{bound\_test\_*})} +\subsection{Species Bounds (\texorpdfstring{\ct{bound_test_*}}{bound_test_*})} \label{bound_test_1} \label{bound_test_2} @@ -1392,7 +1392,7 @@ \subsection{Isothermal Helium Wave (\texorpdfstring{\ct{helium_1d_isothermal}}{h \label{fig_helium_1d_isothermal} \end{figure} -\subsection{Temperature Bounds for Isothermal Helium Jet (\texorpdfstring{\ct{helium_air_jet_floor}}{helium\_air\_jet\_floor})} +\subsection{Temperature Bounds for Isothermal Helium Jet (\texorpdfstring{\ct{helium_air_jet_floor}}{helium_air_jet_floor})} \label{helium_air_jet_floor} In this test, a jet of helium is generated from a floor vent. The mass flux is ramped up from 0 m/s to 1 m/s in 1 s. The flow field should remain isothermal at 20 \si{\degreeCelsius}. The results are shown in Fig.~\ref{helium_air_jet}. @@ -1406,7 +1406,7 @@ \subsection{Temperature Bounds for Isothermal Helium Jet (\texorpdfstring{\ct{he \label{helium_air_jet} \end{figure} -\subsection{Temperature Bounds for Large Differences in Molecular Weight (\texorpdfstring{\ct{mwtest_cfl}}{mwtest\_cfl})} +\subsection{Temperature Bounds for Large Differences in Molecular Weight (\texorpdfstring{\ct{mwtest_cfl}}{mwtest_cfl})} \label{mwtest_cfl} Hydrogen gas (2~g/mol) is injected into a small compartment filled with sulfur hexafluoride (146~g/mol). There should be no change in temperature, as shown in Fig.~\ref{mwtest_cfl_fig}. @@ -1420,7 +1420,7 @@ \subsection{Temperature Bounds for Large Differences in Molecular Weight (\texor \label{mwtest_cfl_fig} \end{figure} -\subsection{Temperature Lower Bound in a Fire Simulation (\texorpdfstring{\ct{tmp_lower_limit}}{tmp\_lower\_limit})} +\subsection{Temperature Lower Bound in a Fire Simulation (\texorpdfstring{\ct{tmp_lower_limit}}{tmp_lower_limit})} \label{tmp_lower_limit} A 2-D methane-air diffusion flame calculation is run three different ways to check that the temperature does not fall below the ambient (20~$^\circ$C). The results are shown in Fig.~\ref{tmp_lower_limit_fig}. The left plot shows the global minimum temperature for the case where the reaction stoichiometry is specified explicitly. Theright plot is for the case where the simple chemistry model is used. @@ -1444,7 +1444,7 @@ \section{Constant Specific Heat Ratio} \end{equation} where $R$ is the ideal gas constant. When this assumption is viable, many terms in the energy equation drop out, greatly simplifying the divergence expression and thus speeding up the code. These simplifications require that the sensible enthalpy of the gas is referenced to 0 K (see the FDS Tech Guide \cite{FDS_Math_Guide}). In this section, we examine three cases using the assumption of constant specific heat ratio: one tests mixing of two gases with different molecular weights (\ct{helium_1d_const_gamma}), one tests fire conditions (\ct{fire_const_gamma}), and one tests evaporation of water droplets (\ct{water_evap_1_const_gamma}). Each of these cases is a clone of cases we develop later in this guide for the default version of the code. -\subsection{Helium Wave using Constant Specific Heat Ratio (\texorpdfstring{\ct{helium_1d_const_gamma}}{helium\_1d\_const\_gamma})} +\subsection{Helium Wave using Constant Specific Heat Ratio (\texorpdfstring{\ct{helium_1d_const_gamma}}{helium_1d_const_gamma})} \label{helium_1d_const_gamma} In this problem, a wave of helium propagates in one dimension down the length of a square duct with frictionless walls. The initial and inlet temperatures are 25 \si{\degreeCelsius} and should remain so throughout the course of the simulation. The ratio of specific heats is kept at the default value of $\gamma = 1.4$. The molar weights, heat capacities, and enthalpies for both air and helium are given in Table \ref{tab:helium_1d_const_gamma}. Notice that the sensible enthalpies, $h_{s,\alpha}=\rho_\alpha c_{p,\alpha} T$, are the same for both species. @@ -1473,7 +1473,7 @@ \subsection{Helium Wave using Constant Specific Heat Ratio (\texorpdfstring{\ct{ \label{fig_helium_1d_const_gamma} \end{figure} -\subsection{Fire Plume using Constant Specific Heat Ratio (\texorpdfstring{\ct{fire_const_gamma}}{fire\_const\_gamma})} +\subsection{Fire Plume using Constant Specific Heat Ratio (\texorpdfstring{\ct{fire_const_gamma}}{fire_const_gamma})} \label{fire_const_gamma} In this case a 128 \si{m^3} box is initially filled with air at 20 \si{\degreeCelsius}. A 1000 MW propane fire with a 5 \% soot yield is placed at the bottom of the box for 20 s. All the compartment surfaces are adiabatic. The net change in enthalpy and pressure can be computed using the specific heat ratio based constant specific heat values for the air and product species along with the pressure work required to inject the fuel. The FDS predicted enthalpy and pressure change are shown in Fig \ref{fig_fire_const_gamma} compared with the predicted values. @@ -1487,7 +1487,7 @@ \subsection{Fire Plume using Constant Specific Heat Ratio (\texorpdfstring{\ct{f \label{fig_fire_const_gamma} \end{figure} -\subsection{Evaporation with Constant Specific Heat Ratio (\texorpdfstring{\ct{water_evap_1_const_gamma}}{water\_evap\_1\_const\_gamma})} +\subsection{Evaporation with Constant Specific Heat Ratio (\texorpdfstring{\ct{water_evap_1_const_gamma}}{water_evap_1_const_gamma})} \label{water_evap_1_const_gamma} This test case is a replica of \ct{water_evaporation_1} in Sec.~\ref{water_evaporation_1} using constant specific heat ratio. A 1 \si{m^3} box is initially filled with dry air at 200 \si{\degreeCelsius} and mono-disperse water droplets totaling 0.01 kg in mass initially at 20 \si{\degreeCelsius}. In this case, all the water evaporates. The final gas temperature may be computed from energy conservation. Pressure change may be computed from the ideal gas law. Results are shown in Fig.~\ref{water_evap_1_const_gamma_plots}. Details of the expected results may be found in \ct{water_evap_1_const_gamma.py} in the \ct{Utilities/Python/scripts/} directory in the FDS repository \cite{FDS-SMV_repository}. @@ -1551,7 +1551,7 @@ \subsection{1-D Flow in a Tunnel (\texorpdfstring{\ct{tunnel_const_gamma}}{tunne \FloatBarrier -\subsection{1-D Flow in a Tunnel (\texorpdfstring{\ct{tunnel_linear_cp}}{tunnel\_linear\_cp})} +\subsection{1-D Flow in a Tunnel (\texorpdfstring{\ct{tunnel_linear_cp}}{tunnel_linear_cp})} \label{tunnel_linear_cp} Consider the same layout and conditions of the previous case. Air is blown at a constant rate, $u_\infty=1$~m/s, through a 10~cm long, 1~mm wide and 4~mm tall tube. A steady heat source is located in the middle of the tube, composed of a vertical column of cells containing a volumetric heat source that introduces heat at a rate of $\dq'''=2.5133 \times 10^8$~W/m$^3$ within each 1~mm cell. Ignoring wall friction, gravity, radiation transport, thermal conductivity, viscosity, and assuming that the heat source uniformly spans the cross section of the tube, a set of 1-D equations can be derived for the steady-state velocity, $u(x)$, density, $\rho(x)$, perturbation pressure, $\tp(x)$, and temperature, $T(x)$. These equations are the same used in the previous example in (\ref{mom1d}) and (\ref{div1d}). @@ -1963,7 +1963,7 @@ \subsubsection{Abbas Jaber, NIST SURF student} \end{figure} -\section{Heated Channel Flow (\texorpdfstring{\ct{heated_channel}}{heated\_channel})} +\section{Heated Channel Flow (\texorpdfstring{\ct{heated_channel}}{heated_channel})} The simulation of turbulent channel flow (Re$_{\tau}=180$) with a heat source was performed to verify the log law near-wall model for heat transfer \cite{FDS_Tech_Guide}. The height of the channel is $H=2$ m, the width is $W=6$ m, and the length is $L=12$ m. There are 96 cells in the stream-wise direction ($\delta x = 0.125$ m) and 48 cells in the spanwise and wall-normal directions ($\delta y=\delta z=0.125$ m). The midpoint of the first cell in viscous units is $z^+ \approx 18$, putting the first velocity unknown within the buffer layer. For this reason, the dynamic Smagorinsky SGS model is used for the residual stress. Additionally, these cases were run with (\ct{SIMULATION_MODE='LES'} on \ct{MISC}), which accounts for both molecular the turbulent transport coefficients, a must for distinguishing between fluids with different molecular Prandtl or Schmidt numbers (here the Reynolds number is so low that molecular effects may dominate locally). The flow is maintained by a mean pressure gradient ($9.0 \times 10^{-6}$ Pa/m) in the stream-wise direction (follows from Re$_{\tau}=180$). A constant volumetric heat source (0.5 W/m$^3$) is imposed on the fluid. The boundary conditions for momentum equations are no-slip at top and bottom walls and periodic for the stream-wise and spanwise directions. The boundary condition for the energy equation is constant temperature ($T_w = 20 \,\mbox{\si{\degree C}} $) at the wall. To evaluate the effects of Prandtl number (Pr) and compare the DNS study \cite{Kim:1987} with FDS, the specific heat ($c_p = 1$ \si{kJ/(kg.K)}) and viscosity ($\mu = 1.8216 \times 10^{-5}$ \si{kg/(m.s)}) are fixed and the conductivity, $k$, of the fluid (air) is adjusted to: \begin{center} @@ -1994,7 +1994,7 @@ \section{Heated Channel Flow (\texorpdfstring{\ct{heated_channel}}{heated\_chann \end{figure} -\section{Forced Convection Flat Plate Boundary Layer (\texorpdfstring{\ct{forced_conv_flat_plate}}{forced\_conv\_flat\_plate})} +\section{Forced Convection Flat Plate Boundary Layer (\texorpdfstring{\ct{forced_conv_flat_plate}}{forced_conv_flat_plate})} \label{sec:forced_conv_flat_plate} In this section, we set up a series of cases to test the forced convection model in FDS. The scenario is a constant temperature turbulent flat plate boundary layer. Gravity is set to zero in order to explicitly exercise the forced convection model. The inlet flow velocity is constant and uniform at the leading edge of the plate. Three velocities are considered, [0.1, 1, 10] m/s. The free stream fluid is nitrogen ($\rho=1.165$ \si{kg/m^3}) with constant properties: dynamic viscosity, $\mu=1 \times 10^{-5}$ \si{kg/m/s}, thermal conductivity, $k=0.01$ \si{W/m/K}, and specific heat, $c_p=1$ \si{kJ/kg/K}. The free stream temperature is 20 \si{\degreeCelsius} and the wall temperature is a constant 30 \si{\degreeCelsius}. The plate is 16 m long with constant and uniform inflow velocity and an \ct{OPEN} outflow boundary. The domain is 2 m in width and 2 m in height. The spanwise boundaries are \ct{PERIODIC} and the top boundary is \ct{MIRROR}. @@ -2059,7 +2059,7 @@ \section{Natural Convection} \end{equation} where $g$ is the magnitude of the gravitational acceleration, $T_1$ and $T_2$ are the respective free stream and surface temperatures, $L$ is a length scale, $\nu$ is the kinematic viscosity and $\alpha$ is the thermal diffusivity of the fluid. The values of $C$ and $n$ and the definition of $L$ vary depending on the configuration. For the test cases given below, the fluid is defined as \ct{'LJ AIR'} with constant viscosity, specific heat, and thermal conductivity: $\mu = 1.8216 \times 10^{-5}$ \si{kg/m/s}, $c_p = 1$ \si{kJ/kg/K}, and $k = 0.018216$ \si{W/m/K}, which provides a $\mathrm{Pr}=1$ fluid. (Note that the correlations are valid for Pr in the range 0.5 to 2.) -\subsection{Horizontal Plate (\texorpdfstring{\ct{nat_conv_hot_plate}}{nat\_conv\_hot\_plate})} +\subsection{Horizontal Plate (\texorpdfstring{\ct{nat_conv_hot_plate}}{nat_conv_hot_plate})} \label{sec:nat_conv_hot_plate} Table~\ref{tab:nat_conv_horizontal_default} lists the default parameters for natural convection for a hot plate facing upward (equivalent to a cold plate facing downward) \underline{or} a hot plate facing downward (cold plate facing upward). The listed ranges for the Ra number are those used within FDS. The ranges given in Ref.~\cite{Incropera:1} are shown in Fig.~\ref{fig_nat_conv_hot_plate}. The length scale is defined $L=A/P$, where $A$ is the area of one side of the plate and $P$ is its perimeter. To verify these default parameters, five cases are set up for which $10^4 < {\rm Ra} < 10^{11}$. The Ra number is varied by changing the side length, $S$, of the square plate and its temperature. @@ -2164,7 +2164,7 @@ \subsection{Vertical Enclosure (\texorpdfstring{\ct{natconv}}{natconv})} \FloatBarrier -\subsection{Sphere (\texorpdfstring{\ct{free_conv_sphere}}{free\_conv\_sphere})} +\subsection{Sphere (\texorpdfstring{\ct{free_conv_sphere}}{free_conv_sphere})} \label{sec:free_conv_sphere} Consider a heated sphere in the range $1 < {\rm Ra} < 10^9$. Yuge~\cite{Yuge:1960} and Amato and Tien~\cite{Amato:1972} propose the following Nusselt number correlations for natural convection from a sphere \cite{Holman:2}. @@ -2182,7 +2182,7 @@ \subsection{Sphere (\texorpdfstring{\ct{free_conv_sphere}}{free\_conv\_sphere})} \clearpage -\section{Impinging Jet (\texorpdfstring{\ct{impinging_jet}}{impinging\_jet})} +\section{Impinging Jet (\texorpdfstring{\ct{impinging_jet}}{impinging_jet})} \label{sec:impinging_jet} Impinging jet flow poses a challenge for convective heat transfer models because the stagnation velocity goes to zero numerically near the mean stagnation point and hence the computed Reynolds number is fictitiously low leading to an under-prediction of the local heat transfer coefficient. To handle this problem, the user may specify a special impinging jet heat transfer model, as discussed in the FDS User Guide \cite{FDS_Users_Guide}. In this section, we present results from a series of cases designed to confirm the general trend that the highest heat transfer coefficient is found at the stagnation point. There is no analytical solution to this case. We take our target correlation to be that of Martin \cite{Martin:1977,Incropera:1}. The model parameters have been tuned to match the Martin correlation for the specific case discussed below. @@ -2207,7 +2207,7 @@ \section{Impinging Jet (\texorpdfstring{\ct{impinging_jet}}{impinging\_jet})} \end{figure} \clearpage -\section{Ribbed Square Duct Flow (\texorpdfstring{\ct{ribbed_channel}}{ribbed\_channel})} +\section{Ribbed Square Duct Flow (\texorpdfstring{\ct{ribbed_channel}}{ribbed_channel})} \label{sec:ribbed_channel} \subsection{Cartesian Geometry} @@ -2267,7 +2267,7 @@ \subsection{Complex Geometry} \chapter{Atmospheric Flows} -\section{Monin-Obukhov Similarity Profiles (\texorpdfstring{\ct{MO_velocity_profile}}{MO\_velocity\_profile})} +\section{Monin-Obukhov Similarity Profiles (\texorpdfstring{\ct{MO_velocity_profile}}{MO_velocity_profile})} \label{MO_velocity_profile_stable} \label{MO_velocity_profile_unstable} @@ -2281,7 +2281,7 @@ \section{Monin-Obukhov Similarity Profiles (\texorpdfstring{\ct{MO_velocity_prof \caption[Monin-Obukhov velocity profiles]{\label{fig_MO_velocity_profiles} Stable (left) and unstable (right) mean stream-wise velocity profiles for specified Monin-Obukhov parameters on the \ct{WIND} line.} \end{figure} -\section{Ekman Layers (\texorpdfstring{\ct{ekman_}}{ekman\_})} +\section{Ekman Layers (\texorpdfstring{\ct{ekman_}}{ekman_})} \label{geom_stretched_grid} In a simple turbulent channel flow, the resulting boundary layer profile results from the balance between the stream-wise pressure gradient and the turbulent stresses. In an Ekman layer, the Coriolis force is also part of the balance. With Ekman layers the Coriolis force has the effect of twisting the atmospheric boundary layer---near the surface there is a component of the wind aligned with the pressure gradient, but aloft the winds tend to be geostrophic, meaning they run parallel to isobars (perpendicular to the pressure gradient). In FDS, input of a geostrophic wind implies a mean pressure gradient in the orthogonal direction (see FDS User Guide \cite{FDS_Users_Guide}). @@ -2327,7 +2327,7 @@ \section{Mass Conservation} This section describes tests of global mass conservation. -\subsection{Flow of a Gas through a Simple Duct (\texorpdfstring{\ct{simple_duct}}{simple\_duct})} +\subsection{Flow of a Gas through a Simple Duct (\texorpdfstring{\ct{simple_duct}}{simple_duct})} \label{simple_duct} In this example, a closed chamber with a simple recirculating duct is used to demonstrate that a gas such as carbon dioxide can be transported @@ -2341,7 +2341,7 @@ \subsection{Flow of a Gas through a Simple Duct (\texorpdfstring{\ct{simple_duct \end{figure} -\subsection{Species Mass Flux (\texorpdfstring{\ct{species_conservation}}{species\_conservation})} +\subsection{Species Mass Flux (\texorpdfstring{\ct{species_conservation}}{species_conservation})} \label{species_conservation_1} \label{species_conservation_2} \label{species_conservation_3} @@ -2386,7 +2386,7 @@ \subsubsection{Case 4: Gases Released by Solid Phase Reactions at the Boundary o \label{species_conservation} \end{figure} -\subsection{Mass Flux through Domain Boundaries (\texorpdfstring{\ct{mass_flux_wall}}{mass\_flux\_wall})} +\subsection{Mass Flux through Domain Boundaries (\texorpdfstring{\ct{mass_flux_wall}}{mass_flux_wall})} \label{mass_flux_wall} This set of tests considers a specified mass injection of water vapor from a \ct{VENT} on the floor of a compartment. The entire top of the compartment is \ct{OPEN} to the ambient. The lighter water vapors are buoyant, so they rise creating a turbulent flow into and out of the domain. Therefore, the input is steady, while the outflow of water vapor is quite chaotic. To judge whether a proper mass balance is achieved by FDS we must monitor not only the inflow and outflow, but also the total mass of water vapor in the domain at a given time. Therefore, we add \ct{DEVC} of quantity \ct{MASS_FLUX_WALL} and \ct{STATISTICS='SURFACE INTEGRAL'} for inflow and outflow, and we also add \ct{MASS_FILE=.TRUE.} to the \ct{DUMP} line to monitor the total water vapor at any point in time in the domain. With $\rho$ and $Y_{\mbox{\tiny H2O}}$ denoting the local mass density and mass fraction of water vapor in a cell, and with $\dot{m}_{\mbox{\tiny H2O}}^{\prime\prime}$ denoting the flux of water vapor at a cell face on the domain boundary, the mass balance may be written as, @@ -2406,7 +2406,7 @@ \subsection{Mass Flux through Domain Boundaries (\texorpdfstring{\ct{mass_flux_w \label{fig:H2O_mass_balance} \end{figure} -\subsection{Mass Balance on a Gas Control Volume (\texorpdfstring{\ct{mass_balance_gas_volume}}{mass\_balance\_gas\_volume})} +\subsection{Mass Balance on a Gas Control Volume (\texorpdfstring{\ct{mass_balance_gas_volume}}{mass_balance_gas_volume})} \label{mass_balance_gas_volume} Using the same computational setup as the \ct{mass_flux_wall} series above, the \ct{mass_balance_gas_volume} test case defines a control volume (CV) internal to the computational domain, 6 m on a side (from 2 m to 8 m in each direction). The mass of water in the CV is output using a \ct{SPATIAL_STATISTIC='VOLUME INTEGRAL'} with \ct{QUANTITY='DENSITY'} of the lumped species for water and the flows into and out of the CV are obtained using \ct{QUANTITY='TOTAL MASS FLUX X'}, etc., with \ct{SPATIAL_STATISTIC='AREA INTEGRAL'}. Figure \ref{fig:mass_balance_gas_volume} shows the resulting balance of accumulation (dm/dt) and the inflow and outflow of the control volume. @@ -2418,7 +2418,7 @@ \subsection{Mass Balance on a Gas Control Volume (\texorpdfstring{\ct{mass_balan \label{fig:mass_balance_gas_volume} \end{figure} -\subsection{Mass Balance for Species in a Reacting Flow (\texorpdfstring{\ct{mass_balance_reac}}{mass\_balance\_reac})} +\subsection{Mass Balance for Species in a Reacting Flow (\texorpdfstring{\ct{mass_balance_reac}}{mass_balance_reac})} \label{mass_balance_reac} A 0.25 m$^2$ propane burner ramps up to 500 kW linearly in 10~s and holds this heat release rate for another 10~s. Using a mass file, appropriate wall flux devices with surface integrals, and reaction source term devices with volume integrals, we perform a detailed mass balance on all the primitive species in the reaction. The results are presented in Fig.~\ref{fig:mass_balance_reac}. The mass balance can be understood through the mnemonic, ``Accumulation equals In minus Out plus Generation''. For each species, we plot the ``accumulation'' term (first-order numerical differentiation of the columns in the \ct{MASS_FILE}, which are volume integrated over the domain), the ``in-out'' term (surface integral of the mass fluxes over the domain boundaries), the ``generation'' term (volume integral of the reaction source term over the domain), and the sum of these as the ``balance'' (the balance should be zero). @@ -2436,7 +2436,7 @@ \subsection{Mass Balance for Species in a Reacting Flow (\texorpdfstring{\ct{mas \label{fig:mass_balance_reac} \end{figure} -\subsection{Checking the Equation of State (\texorpdfstring{\ct{particle_offgas}}{particle\_offgas})} +\subsection{Checking the Equation of State (\texorpdfstring{\ct{particle_offgas}}{particle_offgas})} \label{particle_offgas_1} \label{particle_offgas_2} \label{particle_offgas_3} @@ -2472,7 +2472,7 @@ \subsubsection{Case 4: A Small Solid Obstruction Blowing Propane that Combusts} \end{figure} -\subsection{Realizability of Species Mass Fractions (\texorpdfstring{\ct{realizable_mass_fractions}}{realizable\_mass\_fractions})} +\subsection{Realizability of Species Mass Fractions (\texorpdfstring{\ct{realizable_mass_fractions}}{realizable_mass_fractions})} \label{realizable_mass_fractions} In order for species mass fractions to be physically realizable they must all be positive (semi-definite) and sum to unity, $Y_\alpha\ge0$ and $\sum_\alpha Y_\alpha=1$. In this test case, a simple methane burner is used to test the realizability of mass fractions. A device is placed near the base of the center of the flame to measure the local mass fractions. In Fig.~\ref{fig:realizable_mass_fractions} we plot the time history of the mass fractions for Fuel, Air, and Products along with the sum (dashed line). This sum should remain perfectly one at all times. @@ -2483,7 +2483,7 @@ \subsection{Realizability of Species Mass Fractions (\texorpdfstring{\ct{realiza \label{fig:realizable_mass_fractions} \end{figure} -\subsection{Integral Mass Test for Complex Geometry (\texorpdfstring{\ct{geom_mass_file_test}}{geom\_mass\_file\_test})} +\subsection{Integral Mass Test for Complex Geometry (\texorpdfstring{\ct{geom_mass_file_test}}{geom_mass_file_test})} \label{geom_mass_file_test} A 1 m$^3$ box contains AIR at ambient conditions and has a sphere of radius 0.5 m leaving a volume of 0.4764 $m^3$. The FDS \ct{MASS_FILE} output is tested to ensure the correct cut cell volumes are being computed and the primitive species for AIR are correctly output. The results are shown below in Fig.~\ref{fig:geom_mass_file_test}. @@ -2504,7 +2504,7 @@ \section{Energy Conservation} \ee Here $\rho$ is the mass density, $h_{\rm s}$ is the sensible enthalpy, $\bar{p}$ is the thermodynamic pressure, $\dot{q}^{\prime\prime\prime}$ is the chemical heat release, $k$ is thermal conductivity, $\mathbf{J}_\alpha$ is the diffusion flux vector, $\dot{\mathbf{q}}_r^{\prime\prime}$ is the radiant heat flux vector, and $\dot{q}_b^{\prime\prime\prime}$ is the bulk heat source due to convective heat transfer to Lagrangian particles and the heat associated with mass sources. The divergence is a fairly complicated expression, and it is important that it is computed properly to ensure global energy conservation. The examples in this section check that mass and energy are conserved for relatively simple configurations. -\subsection{The Heat from a Fire (\texorpdfstring{\ct{energy_budget}}{energy\_budget})} +\subsection{The Heat from a Fire (\texorpdfstring{\ct{energy_budget}}{energy_budget})} \label{energy_budget_walls} \label{energy_budget_adiabatic_walls} \label{energy_budget_cold_walls} @@ -2582,7 +2582,7 @@ \subsection{Gas Injection via a Non-Isentropic Process (\texorpdfstring{\ct{isen -\subsection{Mixing Gases (\texorpdfstring{\ct{energy_budget_dns}}{energy\_budget\_dns})} +\subsection{Mixing Gases (\texorpdfstring{\ct{energy_budget_dns}}{energy_budget_dns})} \label{energy_budget_dns_100} In this example, two fictitious gases are forced through tiny ducts (1~mm by 1~mm) that meet at a T-joint. The cross sectional areas of all the ducts are the same. Gas~1 has an initial temperature of 606.3~\si{\degree C} and a constant specific heat of 1~\si{kJ/(kg.K)}. Gas~2 has an initial temperature of 20~\si{\degree C} and a constant specific heat of 10~\si{kJ/(kg.K)}. Both gases have a molecular weight of 29~g/mol and a mass flow of $1 \times 10^{-8}$~kg/s. Typically gases of the same molecular weight have comparable, but not necessarily the same, specific heats. This is an extreme case. In steady state, it is expected that the convection and diffusion of enthalpy at the boundaries will be equal: @@ -2600,7 +2600,7 @@ \subsection{Mixing Gases (\texorpdfstring{\ct{energy_budget_dns}}{energy\_budget -\subsection{Mixing with Variable Specific Heats (\texorpdfstring{\ct{energy_budget_tmix}}{energy\_budget\_tmix})} +\subsection{Mixing with Variable Specific Heats (\texorpdfstring{\ct{energy_budget_tmix}}{energy_budget_tmix})} \label{energy_budget_tmix} This case tests the ability of FDS to properly account for temperature dependent specific heats. A coarse 2-D channel mixing case is presented where hot gas at 900 \si{\degree C} with a constant specific heat of $c_p=1$ \si{kJ/(kg.K)} enters from the bottom left vent with a flux of 1 \si{kg/(m^2.s)} and cold gas at 20 \si{\degree C} with a constant specific heat of $c_p=10$ \si{kJ/(kg.K)} enters from a top left vent with the same mass flux. The gases mix in a center channel and exit the domain flowing to the right. @@ -2613,7 +2613,7 @@ \subsection{Mixing with Variable Specific Heats (\texorpdfstring{\ct{energy_budg \end{figure} -\subsection{Combustion Chamber (\texorpdfstring{\ct{energy_budget_combustion}}{energy\_budget\_combustion})} +\subsection{Combustion Chamber (\texorpdfstring{\ct{energy_budget_combustion}}{energy_budget_combustion})} \label{energy_budget_combustion} Methanol and air are mixed and burned within an adiabatic combustion chamber 1~m on each side. Because the internal energy of the system does not change, we expect that @@ -2630,7 +2630,7 @@ \subsection{Combustion Chamber (\texorpdfstring{\ct{energy_budget_combustion}}{e -\subsection{Solid phase energy conservation (\texorpdfstring{\ct{energy_budget_solid}}{energy\_budget\_solid})} +\subsection{Solid phase energy conservation (\texorpdfstring{\ct{energy_budget_solid}}{energy_budget_solid})} \label{energy_budget_solid} This case tests the ability of FDS to properly conserve the total of the solid phase and the gas phase energy. A 1 \si{m^3} box is filled with 1 kg of a gas with a specific heat of 1 \si{kJ/(kg.K)}, a molecular weight of 28 g/mol, and an initial temperature of 20 \si{\degree C}. All the walls, except the floor, are adiabatic. The floor is defined as a 1 mm thick layer of a material with a conductivity of 100 \si{W/(m.K)}, a specific heat of 1 \si{kJ/(kg.K)}, an initial temperature of 150 \si{\degree C}, and a density of 1,000 \si{kg/m^3}. The initial enthalpy is $1 \times 1 \times (20+273.15) + 1 \times 1 \times (150+273.15) = 716.3$ kJ. At the end state, the gas will have risen in temperature, the solid will have decreased in temperature, and the pressure will have risen. Since energy is conserved this occurs at a temperature of 96.3 \si{\degree C}. The final enthalpy is $1 \times 1 \times (96.3+273.15) + 1 \times 1 \times (96.3+273.15) + 22670 / 1000 = 716.3$ kJ. @@ -2643,7 +2643,7 @@ \subsection{Solid phase energy conservation (\texorpdfstring{\ct{energy_budget_s -\subsection{Energy Conservation at Walls (\texorpdfstring\ct{mass_heat_wall_device_test}{mass\_heat\_wall\_device\_test})} +\subsection{Energy Conservation at Walls (\texorpdfstring\ct{mass_heat_wall_device_test}{mass_heat_wall_device_test})} \label{mass_heat_wall_device_test} \label{mass_heat_wall_device_test_2} @@ -2663,7 +2663,7 @@ \subsection{Energy Conservation at Walls (\texorpdfstring\ct{mass_heat_wall_devi \FloatBarrier -\subsection{Energy Conservation for Solid Particles (\texorpdfstring\ct{energy_budget_particles}{energy\_budget\_particles})} +\subsection{Energy Conservation for Solid Particles (\texorpdfstring\ct{energy_budget_particles}{energy_budget_particles})} \label{energy_budget_particles} A sealed, adiabatic box, 1~m on a side, is filled with 10~kg of spherically-shaped solid metallic particles, 1~cm in diameter, with a specific heat of 1~kJ/(kg$\cdot$K), density of 5000~kg/m$^3$, and conductivity of 50~W/(m$\cdot$K). The initial air temperature is 100~$^\circ$C and the initial particle temperature is 20~$^\circ$C. The simulation is run until thermal equilibrium is achieved. Figure~\ref{energy_budget_particles_figs} displays on the left the contributions to the sensible enthalpy of the air, most of which are negative because the air loses energy to the particles. \ct{Q_RADI} is the net contribution of thermal radiation, \ct{Q_COND} is the contribution of convection at the exterior wall of the box, \ct{Q_PRES} is the contribution of pressure work on the exterior wall, and \ct{Q_PART} is the contribution by the particles. The negative value of \ct{Q_PART} means that the particles absorb radiative and convective energy. The plot on the right of Fig.~\ref{energy_budget_particles_figs} compares the sum of these four contributions, \ct{Q_TOTAL}, with the computed change in the sensible enthalpy of the air, (\ct{Q_ENTH}). These two quantities should be equal, as shown by the overlaying curves. @@ -2690,7 +2690,7 @@ \section{Symmetry Tests} These examples are very simple test cases that are used to determine if there are coding errors in the basic flow solver. In the absence of a small amount of ``noise'' that FDS uses to initialize the velocity field, a symmetric geometry ought to produce symmetric patterns of velocity, temperature, etc. -\subsection{Counter-Flowing Jets (\texorpdfstring{\ct{symmetry_test}}{symmetry\_test})} +\subsection{Counter-Flowing Jets (\texorpdfstring{\ct{symmetry_test}}{symmetry_test})} \label{symmetry_test} \label{symmetry_test_mpi} @@ -2707,7 +2707,7 @@ \subsection{Counter-Flowing Jets (\texorpdfstring{\ct{symmetry_test}}{symmetry\_ \label{symmetry_test_fig} \end{figure} -\subsection{Fire in a Thin-Walled Pan (\texorpdfstring{\ct{symmetry_test_2}}{symmetry\_test\_2})} +\subsection{Fire in a Thin-Walled Pan (\texorpdfstring{\ct{symmetry_test_2}}{symmetry_test_2})} \label{symmetry_test_2} In this case, a steel pan is placed inside a small compartment with a small door at one end. The pan has thin walls (zero cells thick) which is particularly challenging for a symmetry test because boundary conditions must be applied on opposite sides of the thin wall. The case also involves a fire and multiple species. Radiation is not tested here. Figure~\ref{symmetry_test_2_fig} displays the temperature field in a slice plane across the pan, and at two points equidistant from the centerline. @@ -2724,7 +2724,7 @@ \subsection{Fire in a Thin-Walled Pan (\texorpdfstring{\ct{symmetry_test_2}}{sym -\subsection{Axial symmetry (\texorpdfstring{\ct{cyl_test}}{cyl\_test})} +\subsection{Axial symmetry (\texorpdfstring{\ct{cyl_test}}{cyl_test})} \label{cyl_test} FDS has an option to perform an axially-symmetric calculation, which can be useful for simulating a laminar diffusion flame, like a bunsen burner or candle. When invoking this option, the user still specifies three coordinates, $x$, $y$, and $z$, but it is understood that $x$ is the radial coordinate, $r$, and $z$ is the vertical coordinate. The coordinate, $y$, is used only by Smokeview to draw the domain, and it should not influence the calculation at all. However, since FDS is primarily a three-dimensional, Cartesian code, there is a possibility that a coding error might cause the specification of the $y$ dimension to have an effect on the result. Figure~\ref{cyl_test_fig} displays results of two sets of axially-symmetric simulations. On the left is an LES simulation in which the lateral size of the cells, $\delta y$, is 2~mm and 2~cm. The two curves ought to lie exactly upon each other, which is indicated by a single red curve. On the right is a DNS simulation of a laminar diffusion flame, with $\delta y$ equal to 2~mm and 4~mm. @@ -2741,7 +2741,7 @@ \subsection{Axial symmetry (\texorpdfstring{\ct{cyl_test}}{cyl\_test})} \newpage -\section{Velocity boundary condition implementation (\texorpdfstring{\ct{velocity_bc_test}}{velocity\_bc\_test})} +\section{Velocity boundary condition implementation (\texorpdfstring{\ct{velocity_bc_test}}{velocity_bc_test})} \label{velocity_bc_test} In this example, a simple jet is created by pushing air through a square duct. The obstructions forming the duct are built three different ways. The first way is to build the duct with thin (zero cell thick) plates. The second is to carve the duct out of a solid block. The third way is to build the duct out of one cell thick plates. The three approaches are illustrated in Fig.~\ref{velocity_bc_test_image}. Ideally, the three jets ought to be exactly the same, but subtle differences in the pressure solution and the random generation of noise lead to three unique flow patterns that are only the same in a time-averaged sense. To test this, the centerline pressure and velocity are recorded for a 2~m/s jet emanating from a 0.8~m square duct that is 5~m long. The grid resolution is fairly crude (0.2~m) because the purpose of this exercise is to show that the steady-state velocity and pressure profiles are essentially the same. Figure~\ref{velocity_bc_test_plot} displays the profiles. The curves ought to overlap each other. Errors in the implementation of the velocity boundary conditions are likely to throw the three cases out of alignment. @@ -2770,12 +2770,12 @@ \section{Checking the divergence constraint} The test cases in this section involve the divergence of the flow, $\nabla \cdot \bu$, an important quantity in the low Mach number formulation of the Navier-Stokes equations. -\subsection{Isothermal flow (\texorpdfstring{\ct{divergence_test_1}}{divergence\_test\_1})} +\subsection{Isothermal flow (\texorpdfstring{\ct{divergence_test_1}}{divergence_test_1})} \label{divergence_test_1} In the first example, air is pushed through a 1~m cube at a speed of 1~m/s. The air is extracted at the same rate, and there should be no pressure rise and the flow should remain divergence free. There are also a few obstructions that are created and removed during the simulation to check that this does not cause any errors. The left hand plot of Fig.~\ref{divergence_test_fig} displays the minimum and maximum divergence as a function of time. These ought to remain below approximately $1 \times 10^{-10}$~s$^{-1}$ in absolute value. -\subsection{Sealed compartment (\texorpdfstring{\ct{divergence_test_2}}{divergence\_test\_2})} +\subsection{Sealed compartment (\texorpdfstring{\ct{divergence_test_2}}{divergence_test_2})} \label{divergence_test_2} In the second example, air is introduced into a sealed compartment at a steady rate via a single solid Lagrangian particle. In other words, the air is not introduced at the boundary, but rather within the center of the compartment. The pressure, density, and temperature increase, but the volume integral of the divergence remains zero according to the Divergence Theorem: @@ -2791,7 +2791,7 @@ \subsection{Sealed compartment (\texorpdfstring{\ct{divergence_test_2}}{divergen \label{divergence_test_fig} \end{figure} -\subsection{Creating/Removing Obstructions (\texorpdfstring{\ct{divergence_test_3}}{divergence\_test\_3})} +\subsection{Creating/Removing Obstructions (\texorpdfstring{\ct{divergence_test_3}}{divergence_test_3})} \label{divergence_test_3} In the third example, air is pushed through a two-dimensional channel where obstructions are created and removed at random times. The divergence of the flow should remain nearly zero throughout the entire domain. Figure.~\ref{divergence_test_3_fig} displays the maximum and minimum divergence as a function of time. These ought to remain less than approximately $10^{-12}$~s$^{-1}$ in absolute value. @@ -2807,7 +2807,7 @@ \subsection{Creating/Removing Obstructions (\texorpdfstring{\ct{divergence_test_ \newpage -\section{Multi-mesh Pressure and Temperature Lapse (\texorpdfstring{\ct{lapse_rate}}{lapse\_rate})} +\section{Multi-mesh Pressure and Temperature Lapse (\texorpdfstring{\ct{lapse_rate}}{lapse_rate})} \label{lapse_rate} A 10 m x 10 m x 40 m volume is initialized with \ct{LAPSE_RATE=-0.01}. The volume is divided vertically into four equal meshes with each mesh having a 10 cm grid resolution. There should be a smooth drop in both temperature and pressure that matches the analytic values, as shown in Fig.~\ref{lapse_rate_fig}. @@ -2828,7 +2828,7 @@ \section{Embedded Meshes} In most FDS simulations, multiple meshes are positioned adjacent to each other to allow two-way communication. However, in some special circumstances, meshes can overlap. This section has a few examples. -\subsection{Randomly Overlapping Meshes (\texorpdfstring{\ct{random_meshes}}{random\_meshes})} +\subsection{Randomly Overlapping Meshes (\texorpdfstring{\ct{random_meshes}}{random_meshes})} \label{random_meshes} This case verifies the functionality of meshes that overlap in a variety of ways. It is a 2-D case that runs fast and is easy to visualize. There are five overlapping meshes shown at left in Fig.~\ref{random_meshes_fig}. Air is blown in at the bottom and exhausted via an open vent at the top. The volume flow rate is fixed at 0.012~m$^3$/s, and the plot at right in Fig.~\ref{random_meshes_fig} verifies that the simulation matches to within a few percent. The case uses the default normal velocity tolerance at solid and interpolated boundaries; thus, there is some error expected in the volume flow due to the solution of the Poisson equation. As a further check that the mesh allocations are being properly handled, there is a fine mesh embedded within the coarse, and the case is run with four MPI processes rather than five. @@ -2842,7 +2842,7 @@ \subsection{Randomly Overlapping Meshes (\texorpdfstring{\ct{random_meshes}}{ran \label{random_meshes_fig} \end{figure} -\subsection{Tracking Eddies (\texorpdfstring{\ct{dancing_eddies_embed}}{dancing\_eddies\_embed})} +\subsection{Tracking Eddies (\texorpdfstring{\ct{dancing_eddies_embed}}{dancing_eddies_embed})} \label{dancing_eddies_embed} This 2-D channel flow tests the ability of the flow solver to track an eddy from a coarse mesh to a fine mesh. Referring to Fig.~\ref{dancing_eddies_embed_fig}, the flow is from left to right, and there is an obstruction upstream that generates a vortex street. The coarse mesh size is 1~mm and the fine is 0.5~mm. The fine mesh is fully embedded within the coarse, and information is transferred from the coarse to the fine mesh via its inflow boundaries. The overlapping region should contain approximately the same flow, as evidenced by the overlapping flow vectors. @@ -2854,7 +2854,7 @@ \subsection{Tracking Eddies (\texorpdfstring{\ct{dancing_eddies_embed}}{dancing\ \end{figure} -\section{Overlapping INIT Regions (\texorpdfstring{\ct{init_overlap}}{init\_overlap})} +\section{Overlapping INIT Regions (\texorpdfstring{\ct{init_overlap}}{init_overlap})} \label{init_overlap} Typically, an FDS simulation begins at time $t=0$ with ambient conditions. However, ambient conditions can be changed for rectangular regions of the domain using the namelist keyword \ct{INIT}. If two rectangular regions defined by \ct{INIT} overlap, it is the first of the overlapping regions that takes precedence (i.e., first come first serve) for all commonly defined inputs. That is, it is not possible to overwrite the initial conditions explicitly specified by the first \ct{INIT} line with the initial conditions explicitly defined by the second \ct{INIT} line. This verification case tests the overlap of \ct{INIT} regions. Fig.~\ref{init_overlap_fig1} and Fig.~\ref{init_overlap_fig2} verify the predictions by FDS match the expected conditions. @@ -2913,7 +2913,7 @@ \section{Spurious Obstruction Effects (\texorpdfstring{\ct{hole}}{hole})} \newpage -\section{OpenMP Thread Checking (\texorpdfstring{\ct{race_test}}{race\_test})} +\section{OpenMP Thread Checking (\texorpdfstring{\ct{race_test}}{race_test})} \label{race_test} OpenMP is used in FDS to sub-divide the work of the do-loops among multiple cores belonging to the same processor. Figure~\ref{race_test_fig} displays temperature and velocity traces from two calculations, one using one OpenMP thread and one using four. The results of the two calculations ought to be identical, in which case the respective pairs of temperature and velocity traces ought to completely overlap. @@ -2945,7 +2945,7 @@ \section{Multi-Mesh Layer Height Calculation (\texorpdfstring{\ct{layer}}{layer} \end{figure} -\section{Isothermal Flow Around Activated Objects (\texorpdfstring{\ct{obst_activation}}{obst\_activation})} +\section{Isothermal Flow Around Activated Objects (\texorpdfstring{\ct{obst_activation}}{obst_activation})} \label{obst_activation} The input files for these case are labeled \ct{Pressure_Solver/obst_activation_*.fds}. A 2-D channel flow is split into four meshes and several obstacles are made to disappear and appear during the simulation. These obstacles can be completely embedded inside meshes, or either overlap or abut mesh boundaries. In the first case, only one gas species flows through the channel. Default (FFT) and ULMAT pressure solvers are used. The left hand plot in Fig.~\ref{obst_act_fig} displays the maximum divergence in the domain. These values should be comparable to machine precision for double precision floating point arithmetic. @@ -2984,7 +2984,7 @@ \section{Radiation View Factors} The examples in this section test the basic radiation transport solver against exact solutions derived for simple geometric shapes. -\subsection{Hot Plate (\texorpdfstring{\ct{plate_view_factor}}{plate\_view\_factor}) } +\subsection{Hot Plate (\texorpdfstring{\ct{plate_view_factor}}{plate_view_factor}) } \label{plate_view_factor} These verification cases test the computation of radiative heat flux from a hot plate to a target surface 1~m away in different coordinate systems. The radiating surface is at 1000~\si{\degree C} and has an emissivity of 1.0. The exact values are calculated using the analytical expressions for the view factors. @@ -3004,7 +3004,7 @@ \subsection{Hot Plate (\texorpdfstring{\ct{plate_view_factor}}{plate\_view\_fact \label{fig_plate_view_factor} \end{figure} -\subsection{Plates at a Right Angle (\texorpdfstring{\ct{geom_rad}}{geom\_rad}) } +\subsection{Plates at a Right Angle (\texorpdfstring{\ct{geom_rad}}{geom_rad}) } \label{geom_rad} In this case, two flat rectangular obstructions (0.98~m by 0.98~m, $A=0.9604$~m$^2$) abut at a right angle. The view factor $F_{12}=0.20004$. The vertical plate has a surface temperature of $T_{\rm hot}=1273.15$~K and the horizontal plate has a temperature of $T_{\rm cold}=293.15$~K. The emissivity of each surface is 1, and the convective heat transfer coefficient is assumed to be 0. Two cases are considered. The first is where the plates are input as conventional rectangular \ct{OBST}s, and the second where the plates are immersed boundary \ct{GEOM}s. There should be no difference in the total energy radiated from hot to cold plates, Fig.~\ref{geom_rad_fig} (left), or the incident heat flux in the center of the cold plate, Fig.~\ref{geom_rad_fig} (right). The exact solution for the integrated incident (i.e. incoming) heat flux to the surface of the cold plate is $F_{12} \sigma T_{\rm hot}^4 A= 28.62$~kW. The purpose of this exercise is to ensure that both types of obstructions behave the same way. @@ -3018,7 +3018,7 @@ \subsection{Plates at a Right Angle (\texorpdfstring{\ct{geom_rad}}{geom\_rad}) \label{geom_rad_fig} \end{figure} -\subsection{Plates at a Right Angle, Part 2 (\texorpdfstring{\ct{geom_rad_2}}{geom\_rad\_2}) } +\subsection{Plates at a Right Angle, Part 2 (\texorpdfstring{\ct{geom_rad_2}}{geom_rad_2}) } \label{geom_rad_2} The case in the previous section is repeated, only now the two plates are not aligned with the Cartesian grid. Figure~\ref{geom_rad_2_fig} displays the comparison of exact and computed solutions for the integrated incident heat flux to the cold plate. @@ -3034,7 +3034,7 @@ \subsection{Plates at a Right Angle, Part 2 (\texorpdfstring{\ct{geom_rad_2}}{ge -\section{Radiation inside a Box (\texorpdfstring{\ct{radiation_box}}{radiation\_box}) } +\section{Radiation inside a Box (\texorpdfstring{\ct{radiation_box}}{radiation_box}) } \label{radiation_in_a_box} \label{radiation_box} @@ -3068,7 +3068,7 @@ \section{Radiation inside a Box (\texorpdfstring{\ct{radiation_box}}{radiation\_ The results provide an illustration of numerical errors due to both angular resolution and spatial resolution. With 20$^3$ cells (5-cm spatial resolution), the discrepancies between the FDS and analytical solutions decrease when increasing the number of radiation angles used in the Radiation Transfer Equation (RTE) solver: this decrease may be explained by the increasingly accurate description of the angular region occupied by the hot wall when viewed from the selected opposite wall locations. The results also show that at 5-cm spatial resolution (20$^3$ cells), the discrepancies between the FDS and analytical solutions do not totally vanish and feature a residual error of approximately 10$\%$ even when using a large number of radiation angles: this residual error may be explained by inaccuracies in the numerical description of the configuration factors (configuration factors are defined as spatial integrals over the hot wall surface of an expression that features two cosine angles and a separation distance; the implicit evaluation of configuration factors in the RTE solver is subject to spatial integration errors). Consistent with this explanation, the results show that at 1-cm spatial resolution (100$^3$ cells), the discrepancies between the FDS and analytical solutions decrease to very small levels and feature a residual error of less than 1$\%$. -\section{Radiation from a Polygonal Plate (\texorpdfstring{\ct{radiating_polygon}}{radiating\_polygon}) } +\section{Radiation from a Polygonal Plate (\texorpdfstring{\ct{radiating_polygon}}{radiating_polygon}) } \label{radiating_polygon} This example is similar to the one presented in Sec.~\ref{radiation_in_a_box}, except now the radiating plate is a polygon with sides of even length. The incident radiation heat flux from an $n$-sided polygon with temperature, $T=1000$~$^\circ$, is given by the formula~\cite{Siegel:1}: @@ -3087,7 +3087,7 @@ \section{Radiation from a Polygonal Plate (\texorpdfstring{\ct{radiating_polygon -\section{Radiation from a Layer of Hot Gas (\texorpdfstring{\ct{radiation_plane_layer}}{radiation\_plane\_layer})} +\section{Radiation from a Layer of Hot Gas (\texorpdfstring{\ct{radiation_plane_layer}}{radiation_plane_layer})} \label{radiation_plane_layer} This case tests the computation of three-dimensional radiation from a homogeneous, infinitely wide layer of hot gases. The temperature of @@ -3105,7 +3105,7 @@ \section{Radiation from a Layer of Hot Gas (\texorpdfstring{\ct{radiation_plane_ \IfFileExists{SCRIPT_FIGURES/radiation_plane_layer.tex}{\input{SCRIPT_FIGURES/radiation_plane_layer.tex}}{\typeout{Error: Missing file SCRIPT_FIGURES/radiation_plane_layer.tex}} -\section{Wall Internal Radiation (\texorpdfstring{\ct{wall_internal_radiation}}{wall\_internal\_radiation}) } +\section{Wall Internal Radiation (\texorpdfstring{\ct{wall_internal_radiation}}{wall_internal_radiation}) } \label{wall_internal_radiation} In-depth absorption of thermal radiation in a solid is computed using a two-flux model. In this example, the accuracy of the two-flux model is tested in the computation of the emissive flux from a homogeneous layer of material (thickness $L=$~0.1~m) at 1273.15~K temperature, surrounded by an ambient temperature of 1~K. The absorption coefficient $\kappa$ is varied to cover a range [0.01, 10] of optical depth $\tau = \kappa L$. @@ -3120,7 +3120,7 @@ \section{Wall Internal Radiation (\texorpdfstring{\ct{wall_internal_radiation}}{ -\section{Radiation Emitted by Hot Spheres (\texorpdfstring{\ct{hot_spheres}}{hot\_spheres}) } +\section{Radiation Emitted by Hot Spheres (\texorpdfstring{\ct{hot_spheres}}{hot_spheres}) } \label{hot_spheres} This case tests the calculation of the radiation heat flux from a collection of hot objects. Within two completely open volumes that are 1~m on a side, hot spheres with a diameter of 1~cm and temperature of 500~\si{\degree C} are situated within a smaller volume that is 0.5~m on a side. One of the open volumes contains 10 spheres, the other contains 50,000. The simulation lasts for 10~s. In the first volume, the heat loss is just the sum of the areas of the spheres multiplied by $\sigma T^4$ (emissivity is specified as unity in this case). See the upper left plot in Fig.~\ref{hot_spheres_plot}. In the second volume, the region is densely packed and it is expected that the collection of spheres will radiate like a solid cube that is 0.5~m on a side and whose temperature is 500~\si{\degree C}. This is just under 30~kW, as shown in the upper right of Fig.~\ref{hot_spheres_plot}. The plot in the lower left of Fig.~\ref{hot_spheres_plot} shows the incident heat flux to a gauge positioned at the center of the densely packed volume. It is expected that this gauge would register a heat flux of $\sigma T^4=20.26$~kW/m$^2$. Finally, the plot in the lower right of Fig.~\ref{hot_spheres_plot} indicates the integrated intensity, $4 \sigma T^4=81.04$~kW/m$^2$. @@ -3137,7 +3137,7 @@ \section{Radiation Emitted by Hot Spheres (\texorpdfstring{\ct{hot_spheres}}{hot \end{figure} -\section{Radiation Absorbed by Liquid Droplets (\texorpdfstring{\ct{droplet_absorption}}{droplet\_absorption}) } +\section{Radiation Absorbed by Liquid Droplets (\texorpdfstring{\ct{droplet_absorption}}{droplet_absorption}) } \label{droplet_absorption} \label{droplet_absorption_cart} \label{droplet_absorption_cyl} @@ -3178,7 +3178,7 @@ \section{Consistency of Particle Absorbed Energy and the Radiative Loss Term} \end{figure} -\section{Radiation Attenuation by Scattering Particles (\texorpdfstring{\ct{part_attenuation}}{part\_attenuation}) } +\section{Radiation Attenuation by Scattering Particles (\texorpdfstring{\ct{part_attenuation}}{part_attenuation}) } \label{part_attenuation} This case is a qualitative assessment of the attenuation of thermal radiation by four different types of particles. In each case, the radiation is computed inside a one meter cube with one hot and five cold walls. The radiative heat flux is monitored on the wall that is opposite the hot wall. In each case, 10~g of non-evaporating, mono-disperse, 100~$\mu$m particles with a density of 1,000~\si{kg/m^3} are placed inside the cube. Five different cases are computed. The reference case contains no particles. The four other cases contain transparent particles, water droplets, fuel droplets, and opaque particles. Different methods to specify the refractive index are tested. For water and fuel droplets, the FDS internal tables are used. For transparent particles, the refractive index is $\hbox{m} = 1.0+0\,i$. For opaque particles, the refractive index is $\hbox{m} = 1.5+0.5 \,i$. The resulting heat fluxes are plotted in Fig.~\ref{part_attenuation_figure}. The transparent particles do not attenuate the radiation, and the relatively opaque particles give the highest attenuation. The heat fluxes through water and fuel droplets fall between the two extremes. @@ -3193,7 +3193,7 @@ \section{Radiation Attenuation by Scattering Particles (\texorpdfstring{\ct{part \end{figure} -\section{Radiation Attenuation by Non-Scattering Particles \\ (\texorpdfstring{\ct{radiation_gas-veg_consistency}}{radiation\_gas-veg\_consistency})} +\section{Radiation Attenuation by Non-Scattering Particles \\ (\texorpdfstring{\ct{radiation_gas-veg_consistency}}{radiation_gas-veg_consistency})} \label{radiation_gas-veg_consistency} \label{radiation_gas-veg_consistency_gas} \label{radiation_gas-veg_consistency_veg} @@ -3222,7 +3222,7 @@ \section{Radiation Attenuation by Non-Scattering Particles \\ (\texorpdfstring{\ -\section{Transient Thermocouple Response (\texorpdfstring{\ct{TC_heating}}{TC\_heating}) } +\section{Transient Thermocouple Response (\texorpdfstring{\ct{TC_heating}}{TC_heating}) } \label{TC_heating} A thermocouple is placed in the center of a 1~m cube with walls set to 600~\si{\degree C} and gas temperature set to 20~\si{\degree C}. The heat transfer coefficient is set to zero to eliminate convective heating. The gas temperature remains at 20~$^{\circ}$C because there is no convective heat transfer from the walls. The thermocouple heats up according to the equation: @@ -3248,7 +3248,7 @@ \section{Transient Thermocouple Response (\texorpdfstring{\ct{TC_heating}}{TC\_h -\section{Radiation and Thermocouples (\texorpdfstring{\ct{TC\_view\_factor}}{TC\_view\_factor}) } +\section{Radiation and Thermocouples (\texorpdfstring{\ct{TC_view_factor}}{TC_view_factor}) } \label{TC_view_factor} This case tests the radiation solver using the simple thermocouple model in FDS. Suppose that a small, thermally thin metal bead is at the center of a 1~m cube. The left half of the cube boundary surface is at 20~\si{\degree C}, the right half at 500~\si{\degree C}. Assume that there is no convective heat transfer to the bead; only radiation. Assume everything has an emissivity of 1. The bead temperature ought to rise to a steady value of @@ -3270,20 +3270,20 @@ \section{Radiation and Thermocouples (\texorpdfstring{\ct{TC\_view\_factor}}{TC\ -\section{Radiation Targets (\texorpdfstring{\ct{target\_test}}{target\_test}) } +\section{Radiation Targets (\texorpdfstring{\ct{target_test}}{target_test}) } \label{target_test} This case tests the functionality of particle ``targets;'' that is, massless Lagrangian particles that serve to record the heat flux at a given point with a given orientation. Essentially, the particle is an infinitesimally small heat flux gauge. Two unit cubes are set up, each with a top surface set to 1000~$^\circ$C. In one cube, a small solid obstruction is created with a device embedded in its top facing upward. In the other cube, a plate-shaped particle is placed at the same location and given an upward facing orientation. The radiative heat flux to both the obstruction and the particle should be the same, as shown in Fig.~\ref{target_test_plot}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/target_test} -\caption[The \ct{target\_test} case]{Heat flux from a hot plate to two different types of targets.} +\caption[The \ct{target_test} case]{Heat flux from a hot plate to two different types of targets.} \label{target_test_plot} \end{figure} -\section{Radiation Shield (\texorpdfstring{\ct{radiation\_shield}}{radiation\_shield}) } +\section{Radiation Shield (\texorpdfstring{\ct{radiation_shield}}{radiation_shield}) } \label{radiation_shield} A lead radiation shield with a thickness of 0.1~mm is placed between two infinitely wide parallel plates at 500~\si{\degree C} and 20~\si{\degree C}. The computational domain has dimensions of 10~m by 0.1~m by 1~m. The sides of the domain are assumed to be symmetry planes. The emissivity, $\varepsilon_{3}$, of the lead shield is 0.48 on both sides. At 400~s, the shield is removed. Assuming that there is no convective heat transfer and that the emissivity of the hot and cold plates is 1, the steady-state heat flux to the cold plate should be~\cite{Incropera:1}: @@ -3294,7 +3294,7 @@ \section{Radiation Shield (\texorpdfstring{\ct{radiation\_shield}}{radiation\_sh \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/radiation_shield_flux} \includegraphics[height=2.2in]{SCRIPT_FIGURES/radiation_shield_temp} -\caption[The \ct{radiation\_shield} test case]{(Left) Heat flux to a cold plate separated from a hot plate by a heat shield. At 400~s, the shield is removed. (Right) Temperature of the heat shield.} +\caption[The \ct{radiation_shield} test case]{(Left) Heat flux to a cold plate separated from a hot plate by a heat shield. At 400~s, the shield is removed. (Right) Temperature of the heat shield.} \label{radiation_shield_plot} \end{figure} Because the heat flux from the hot plate to the shield is equal to the heat flux from the hot plate to the cold plate, the shield temperature can be calculated using~\cite{Incropera:1}: @@ -3304,7 +3304,7 @@ \section{Radiation Shield (\texorpdfstring{\ct{radiation\_shield}}{radiation\_sh The predicted shield temperature is plotted in Fig.~\ref{radiation_shield_plot}. -\section{Radiation from a gas-fired panel (\texorpdfstring{\ct{radiation\_gas\_panel}}{radiation\_gas\_panel}) } +\section{Radiation from a gas-fired panel (\texorpdfstring{\ct{radiation_gas_panel}}{radiation_gas_panel}) } \label{radiation_gas_panel} A gas-fired panel is often used as a source of thermal radiation in laboratory experiments. Here, the heat flux from an $h=30.48$~cm square panel is computed at distances of 10~cm, 15~cm, 25~cm, 38~cm, 46~cm, 61~cm, and 76~cm along its perpendicular center axis, and along a perpendicular line that is displaced laterally 14~cm and vertically 14~cm from the center axis, as illustrated in Fig.~\ref{radiation_gas_panel_plot}. We compare the results computed by FDS to those calculated using configuration factors. The temperature and emissivity of the panel are set to 1250~K and 0.7, respectively, and the ambient temperature is 273~K. @@ -3322,11 +3322,11 @@ \section{Radiation from a gas-fired panel (\texorpdfstring{\ct{radiation\_gas\_p \centering \includegraphics[height=2.in]{FIGURES/radiation_gas_panel_configuration} \includegraphics[height=2.2in]{SCRIPT_FIGURES/radiation_gas_panel} -\caption[The \ct{radiation\_gas\_panel} case]{\emph{Left}: A radiant panel and target dA$_1$ located a distance $R$ from the panel on its center axis. \emph{Right}: Comparison of FDS and the exact result.} +\caption[The \ct{radiation_gas_panel} case]{\emph{Left}: A radiant panel and target dA$_1$ located a distance $R$ from the panel on its center axis. \emph{Right}: Comparison of FDS and the exact result.} \label{radiation_gas_panel_plot} \end{figure} -\section{Radiation in Angled Geometry (\texorpdfstring{\ct{net\_rad\_1000}}{net\_rad\_1000}) } +\section{Radiation in Angled Geometry (\texorpdfstring{\ct{net_rad_1000}}{net_rad_1000}) } \label{net_rad_1000} This verification case evaluates the radiation predicted between two angled surfaces using two approaches. @@ -3341,7 +3341,7 @@ \section{Radiation in Angled Geometry (\texorpdfstring{\ct{net\_rad\_1000}}{net\ \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/net_rad_1000_diag_obst} \includegraphics[height=2.2in]{SCRIPT_FIGURES/net_rad_1000_wall_obst} -\caption[The \ct{net\_rad\_1000} case]{Angled geometry radiation verification, stair-stepping approach \emph{Left}: Diagonal wall. \emph{Right}: Flat wall.} +\caption[The \ct{net_rad_1000} case]{Angled geometry radiation verification, stair-stepping approach \emph{Left}: Diagonal wall. \emph{Right}: Flat wall.} \label{net_rad_1000_obst} \end{figure} @@ -3349,7 +3349,7 @@ \section{Radiation in Angled Geometry (\texorpdfstring{\ct{net\_rad\_1000}}{net\ \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/net_rad_1000_diag_cface} \includegraphics[height=2.2in]{SCRIPT_FIGURES/net_rad_1000_wall_cface} -\caption[The \ct{net\_rad\_1000} case]{Angled geometry radiation verification, cut-cell approach \emph{Left}: Diagonal wall. \emph{Right}: Flat wall.} +\caption[The \ct{net_rad_1000} case]{Angled geometry radiation verification, cut-cell approach \emph{Left}: Diagonal wall. \emph{Right}: Flat wall.} \label{net_rad_1000_cface} \end{figure} @@ -3358,7 +3358,7 @@ \chapter{Species and Combustion} This chapter contains examples that test the computations related to species concentrations, gas properties and combustion. -\section{Gas Properties (\texorpdfstring{\ct{species\_props}}{species\_props})} +\section{Gas Properties (\texorpdfstring{\ct{species_props}}{species_props})} \label{gas_properties} \label{species_props} @@ -3372,7 +3372,7 @@ \section{Gas Properties (\texorpdfstring{\ct{species\_props}}{species\_props})} \includegraphics[height=2.2in]{SCRIPT_FIGURES/spec_prop_k} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/spec_prop_cp} \end{tabular} - \caption[Results of the \ct{species\_props} cases]{Results of the \ct{species\_props} cases.} + \caption[Results of the \ct{species_props} cases]{Results of the \ct{species_props} cases.} \label{fig_species_props} \end{figure} @@ -3388,7 +3388,7 @@ \section{Humidity (\texorpdfstring{\ct{humidity}}{humidity})} \label{fig_humidity} \end{figure} -\section{Product Yields (\texorpdfstring{\ct{methane\_flame}}{methane\_flame})} +\section{Product Yields (\texorpdfstring{\ct{methane_flame}}{methane_flame})} \label{methane_flame} A simple methane flame with 10~\% CO yield is burned inside a closed cavity for 5~s. @@ -3414,7 +3414,7 @@ \section{Reaction Rates (\texorpdfstring{\ct{reactionrate}}{reactionrate})} Detailed discussion on the combustion routines can be found in the FDS Technical Reference Guide~\cite{FDS_Tech_Guide}. -\subsection{Mixing-Controlled Reactions (\texorpdfstring{\ct{reactionrate\_EDC}}{reactionrate\_EDC})} +\subsection{Mixing-Controlled Reactions (\texorpdfstring{\ct{reactionrate_EDC}}{reactionrate_EDC})} \label{mixing_reactions} \label{reactionrate_EDC_flim_1step_CH4} \label{reactionrate_EDC_flim_1step_C3H8} @@ -3519,7 +3519,7 @@ \subsection{Mixing-Controlled Reactions (\texorpdfstring{\ct{reactionrate\_EDC}} \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/reactionrate_series_reaction} -\caption[Results of the \ct{reactionrate\_series\_reaction} case]{Results of the \ct{reactionrate\_series\_reaction} case.} +\caption[Results of the \ct{reactionrate_series_reaction} case]{Results of the \ct{reactionrate_series_reaction} case.} \label{fig:reactionrate_series_reaction} \end{figure} @@ -3558,7 +3558,7 @@ \subsection{Mixing-Controlled Reactions (\texorpdfstring{\ct{reactionrate\_EDC}} \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/reactionrate_lumped_two_air} -\caption[Results of the \ct{reactionrate\_lumped\_two\_species} case]{Results of the \ct{reactionrate\_lumped\_two\_species} case.} +\caption[Results of the \ct{reactionrate_lumped_two_species} case]{Results of the \ct{reactionrate_lumped_two_species} case.} \label{fig:reactionrate_lumped_two_air} \end{figure} @@ -3566,7 +3566,7 @@ \subsection{Mixing-Controlled Reactions (\texorpdfstring{\ct{reactionrate\_EDC}} \FloatBarrier -\subsection{Finite Rate Reactions (\texorpdfstring{\ct{reactionrate\_arrhenius}}{reactionrate\_arrhenius})} +\subsection{Finite Rate Reactions (\texorpdfstring{\ct{reactionrate_arrhenius}}{reactionrate_arrhenius})} \label{finite_rate_reactions} \label{reactionrate_arrhenius_equilibrium} \label{reactionrate_arrhenius_equilibrium_cvode} @@ -3789,7 +3789,7 @@ \subsection{Finite Rate Reactions (\texorpdfstring{\ct{reactionrate\_arrhenius}} \FloatBarrier -\subsection{Fast-Slow Reaction Scheme (\texorpdfstring{\ct{reactionrate\_fast\_slow}}{reactionrate\_fast\_slow})} +\subsection{Fast-Slow Reaction Scheme (\texorpdfstring{\ct{reactionrate_fast_slow}}{reactionrate_fast_slow})} \label{reactionrate_fast_slow} A simple two-step reaction scheme for a clean-burning fuel like methanol can be written as follows: @@ -3805,7 +3805,7 @@ \subsection{Fast-Slow Reaction Scheme (\texorpdfstring{\ct{reactionrate\_fast\_s \be \frac{\d [{\rm CO}]}{\d t} = -1\times 10^{10} \, [{\rm CO}] \, [{\rm O_2}] \ee -where $[{\rm CO}]$ is the concentration of CO in units of mol/cm$^3$. To test the scheme, a sealed, adiabatic cube 1~m on a side is filled with nitrogen, fuel gas, and oxygen with initial volume fractions of 0.89, 0.05, and 0.06. Because the rates are independent of temperature, the reaction proceeds immediately assuming that the gases are thoroughly mixed via the parameter \ct{INITIAL\_UNMIXED\_FRACTION=0}. Figure~\ref{fig:reactionrate_fast_slow} shows the fuel volume fraction very quickly dropping to zero, leaving some oxygen which then reacts relatively slowly with CO to form CO$_2$. The effective combined reaction is: +where $[{\rm CO}]$ is the concentration of CO in units of mol/cm$^3$. To test the scheme, a sealed, adiabatic cube 1~m on a side is filled with nitrogen, fuel gas, and oxygen with initial volume fractions of 0.89, 0.05, and 0.06. Because the rates are independent of temperature, the reaction proceeds immediately assuming that the gases are thoroughly mixed via the parameter \ct{INITIAL_UNMIXED_FRACTION=0}. Figure~\ref{fig:reactionrate_fast_slow} shows the fuel volume fraction very quickly dropping to zero, leaving some oxygen which then reacts relatively slowly with CO to form CO$_2$. The effective combined reaction is: \be \label{methanol_combined} \mathrm{5 \, CH_3OH + 6 \, O_2} \rightarrow \mathrm{2 \, CO_2 + 3 \, CO + 10 \, H_2O} @@ -3822,7 +3822,7 @@ \subsection{Fast-Slow Reaction Scheme (\texorpdfstring{\ct{reactionrate\_fast\_s \FloatBarrier -\section{Heat Release Rates from Reaction Mechanisms (\ct{hrrpuv\_reac})} +\section{Heat Release Rates from Reaction Mechanisms (\ct{hrrpuv_reac})} \label{hrrpuv_reac} \label{hrrpuv_reac_arrhenius} \label{hrrpuv_reac_extinction} @@ -3849,21 +3849,21 @@ \section{Heat Release Rates from Reaction Mechanisms (\ct{hrrpuv\_reac})} In this section, we show results comparing Eqs.~(\ref{eq:qdotppp}) and (\ref{eq:qdotppp2}) for a series of cases with different reaction mechanisms. This test series is meant to touch various pathways through the chemistry ODE solver involving mixing, fast and slow chemistry, extinction, and series and parallel reactions. The result are presented in Fig.~\ref{hrrpuv_reac_figures}. The measure of correctness is that the black dots (hrrpuv), taken from Eq.~(\ref{eq:qdotppp}), exactly match with the sum of the individual reaction HRR curves denoted by the solid black line, Eq.~(\ref{eq:qdotppp2}). Below we briefly describe the key features of each case. -\subsubsection{Single Reaction (\ct{hrrpuv\_reac\_single})} This is a single reaction with specified lumped species without extinction. +\subsubsection{Single Reaction (\ct{hrrpuv_reac_single})} This is a single reaction with specified lumped species without extinction. -\subsubsection{Series Reactions (\ct{hrrpuv\_reac\_series})} This is a set of series reactions with primitive species. +\subsubsection{Series Reactions (\ct{hrrpuv_reac_series})} This is a set of series reactions with primitive species. -\subsubsection{Simple Reaction (\ct{hrrpuv\_reac\_simple})} This is FDS Simple Chemistry integrated using two Forward Euler substeps. +\subsubsection{Simple Reaction (\ct{hrrpuv_reac_simple})} This is FDS Simple Chemistry integrated using two Forward Euler substeps. -\subsubsection{Reaction with Extinction (\ct{hrrpuv\_reac\_extinction})} This is a single reaction with specified lumped species with extinction. +\subsubsection{Reaction with Extinction (\ct{hrrpuv_reac_extinction})} This is a single reaction with specified lumped species with extinction. -\subsubsection{Parallel Reactions (\ct{hrrpuv\_reac\_parallel})} This is a set of parallel reactions with two fuels going to one set of products. +\subsubsection{Parallel Reactions (\ct{hrrpuv_reac_parallel})} This is a set of parallel reactions with two fuels going to one set of products. -\subsubsection{Parallel Reactions (\ct{hrrpuv\_reac\_parallel\_2})} This is a set of parallel reactions with one fuel going to two products. +\subsubsection{Parallel Reactions (\ct{hrrpuv_reac_parallel_2})} This is a set of parallel reactions with one fuel going to two products. -\subsubsection{Arrhenius Reaction (\ct{hrrpuv\_reac\_arrhenius})} This is simple Arrhenius rate law using the default ODE integrator for finite-rate chemistry, which is RK4. +\subsubsection{Arrhenius Reaction (\ct{hrrpuv_reac_arrhenius})} This is simple Arrhenius rate law using the default ODE integrator for finite-rate chemistry, which is RK4. -\subsubsection{Soot Production (\ct{hrrpuv\_reac\_soot})} This example combines a fast reaction for the primary reaction with finite-rate chemistry for the soot oxidation reaction. +\subsubsection{Soot Production (\ct{hrrpuv_reac_soot})} This example combines a fast reaction for the primary reaction with finite-rate chemistry for the soot oxidation reaction. \begin{figure}[p] @@ -3877,19 +3877,19 @@ \subsubsection{Soot Production (\ct{hrrpuv\_reac\_soot})} This example combines \includegraphics[height=2.15in]{SCRIPT_FIGURES/hrrpuv_reac_arrhenius} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/hrrpuv_reac_soot} \end{tabular*} -\caption[Results of the \ct{hrrpuv\_reac} test cases]{Heat release rate per unit volume for the various \ct{hrrpuv\_reac} test cases.} +\caption[Results of the \ct{hrrpuv_reac} test cases]{Heat release rate per unit volume for the various \ct{hrrpuv_reac} test cases.} \label{hrrpuv_reac_figures} \end{figure} -\section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} +\section{Ignition Delay verification with Cantera (\ct{ignition_delay})} \label{ignition_delay} -Constant volume ignition delay cases are compared with output from Cantera \cite{cantera:2023} to verify the implementation of detailed chemical mechanisms, as described in the FDS Technical Guide \cite{FDS_Math_Guide}. Cantera, a widely used open-source software suite for modeling chemical systems, serves as a benchmark for verification. Various chemical mechanisms are considered for this purpose. These mechanisms, formatted for FDS, can be found in the \ct{Utilities/Input\_Libraries/Chemical\_Mechanisms/FDS/} directory. The FDS User Guide \cite{FDS_Users_Guide} provides detailed instructions on generating these FDS-formatted mechanism files. +Constant volume ignition delay cases are compared with output from Cantera \cite{cantera:2023} to verify the implementation of detailed chemical mechanisms, as described in the FDS Technical Guide \cite{FDS_Math_Guide}. Cantera, a widely used open-source software suite for modeling chemical systems, serves as a benchmark for verification. Various chemical mechanisms are considered for this purpose. These mechanisms, formatted for FDS, can be found in the \ct{Utilities/Input_Libraries/Chemical_Mechanisms/FDS/} directory. The FDS User Guide \cite{FDS_Users_Guide} provides detailed instructions on generating these FDS-formatted mechanism files. -Twelve constant volume ignition delay cases are configured using chemical kinetics based on the GRI-3 mechanism \cite{gri3:1999}, stored as "Methane\_grimech30" in the FDS repository. Methane ($\mathrm{CH_4}$) is used as the fuel. They are configured for equivalence ratios of 0.6, 1.0, and 1.4, with initial temperatures of 626.85~$^\circ$C (900 K), 726.85~$^\circ$C (1000 K), 826.85~$^\circ$C (1100 K), and 926.85~$^\circ$C (1200 K) at standard atmospheric pressure. Timestep ramps are derived from Cantera-3.0 to speed up the computation. The comparisons of temperature and OH mass fraction between FDS and Cantera are shown in Figs. ~\ref{fig:ign_delay_Methane_grimech30_phi_0.6}-\ref{fig:ign_delay_Methane_grimech30_phi_1.4}. +Twelve constant volume ignition delay cases are configured using chemical kinetics based on the GRI-3 mechanism \cite{gri3:1999}, stored as \ct{Methane_grimech30} in the FDS repository. Methane ($\mathrm{CH}_4$) is used as the fuel. They are configured for equivalence ratios of 0.6, 1.0, and 1.4, with initial temperatures of 626.85~$^\circ$C (900 K), 726.85~$^\circ$C (1000 K), 826.85~$^\circ$C (1100 K), and 926.85~$^\circ$C (1200 K) at standard atmospheric pressure. Timestep ramps are derived from Cantera-3.0 to speed up the computation. The comparisons of temperature and OH mass fraction between FDS and Cantera are shown in Figs. ~\ref{fig:ign_delay_Methane_grimech30_phi_0.6}-\ref{fig:ign_delay_Methane_grimech30_phi_1.4}. -Six additional constant volume ignition delay cases are configured using the following chemical mechanisms: Methane\_TianfengLu \cite{TianfengLu:2008}, Methane\_Smooke \cite{Smooke:1995}, Ethylene\_TianfengLu \cite{Luo:2012}, Propane\_USC \cite{Qin:20001}, Propane\_Z66 \cite{Zettervall2017}, and nHeptane\_Chalmers \cite{Tao:2007}. These cases are set with an equivalence ratio of 1.0, an initial temperature of 826.85~$^\circ$C (1100 K), and standard atmospheric pressure. A constant timestep of $10^{-4}$ seconds is applied. Comparisons of temperature and OH mass fraction between FDS and Cantera are illustrated in Figs. ~\ref{fig:ign_delay_Methane_TianfengLu_phi_1.0}-\ref{fig:ign_delay_nHeptane_Chalmers_phi_1.0}. +Six additional constant volume ignition delay cases are configured using the following chemical mechanisms: \ct{Methane_TianfengLu}~\cite{TianfengLu:2008}, \ct{Methane_Smooke}~\cite{Smooke:1995}, \ct{Ethylene_TianfengLu}~\cite{Luo:2012}, \ct{Propane_USC}~\cite{Qin:20001}, \ct{Propane_Z66}~\cite{Zettervall2017}, and \ct{nHeptane_Chalmers}~\cite{Tao:2007}. These cases are set with an equivalence ratio of 1.0, an initial temperature of 826.85~$^\circ$C (1100 K), and standard atmospheric pressure. A constant timestep of $10^{-4}$ seconds is applied. Comparisons of temperature and OH mass fraction between FDS and Cantera are illustrated in Figs. ~\ref{fig:ign_delay_Methane_TianfengLu_phi_1.0}-\ref{fig:ign_delay_nHeptane_Chalmers_phi_1.0}. \begin{figure}[p] \begin{tabular*}{\textwidth}{lr} @@ -3902,7 +3902,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_0p6_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_0p6_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Methane\_grimech30 mechanism at an equivalence ratio of 0.6.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for \ct{Methane_grimech30} mechanism at an equivalence ratio of 0.6.} \label{fig:ign_delay_Methane_grimech30_phi_0.6} \end{figure} @@ -3917,7 +3917,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Methane\_grimech30 mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for \ct{Methane_grimech30} mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Methane_grimech30_phi_1.0} \end{figure} @@ -3932,7 +3932,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_1p4_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_grimech30_1200_1p4_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Methane\_grimech30 mechanism at an equivalence ratio of 1.4.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for \ct{Methane_grimech30} mechanism at an equivalence ratio of 1.4.} \label{fig:ign_delay_Methane_grimech30_phi_1.4} \end{figure} @@ -3942,7 +3942,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_TianfengLu_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_TianfengLu_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Methane\_TianfengLu mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for Methane_TianfengLu mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Methane_TianfengLu_phi_1.0} \end{figure} @@ -3951,7 +3951,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_Smooke_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Methane_Smooke_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Methane\_Smooke mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for Methane_Smooke mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Methane_Smooke_phi_1.0} \end{figure} @@ -3960,7 +3960,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Ethylene_TianfengLu_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Ethylene_TianfengLu_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Ethylene\_TianfengLu mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for Ethylene_TianfengLu mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Ethylene_TianfengLu_phi_1.0} \end{figure} @@ -3969,7 +3969,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Propane_USC_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Propane_USC_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Propane\_USC mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for Propane_USC mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Propane_USC_phi_1.0} \end{figure} @@ -3978,7 +3978,7 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Propane_Z66_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_Propane_Z66_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for Propane\_Z66 mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for Propane_Z66 mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_Propane_Z66_phi_1.0} \end{figure} @@ -3987,12 +3987,12 @@ \section{Ignition Delay verification with Cantera (\ct{ignition\_delay})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_nHeptane_Chalmers_1100_1p0_TMP} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/ign_delay_nHeptane_Chalmers_1100_1p0_OH} \end{tabular*} -\caption[Results of the \ct{ignition\_delay} test cases]{Comparison of temperature and OH mass fraction for nHeptane\_Chalmers mechanism at an equivalence ratio of 1.0.} +\caption[Results of the \ct{ignition_delay} test cases]{Comparison of temperature and OH mass fraction for nHeptane_Chalmers mechanism at an equivalence ratio of 1.0.} \label{fig:ign_delay_nHeptane_Chalmers_phi_1.0} \end{figure} -\section{Mixing with detailed chemistry (\ct{edc\_mixing\_cvode})} +\section{Mixing with detailed chemistry (\ct{edc_mixing_cvode})} \label{edc_mixing_cvode} Mixing with detailed chemistry is implemented using the Eddy Dissipation Concept (EDC) model, in which a system of ordinary differential equations (ODEs) describing species concentrations and temperature is solved using the CVODE solver. For detailed information on the formulation of the ODE system, please refer to the Technical Guide~\cite{FDS_Math_Guide}. @@ -4016,7 +4016,7 @@ \section{Mixing with detailed chemistry (\ct{edc\_mixing\_cvode})} \includegraphics[height=2.2in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_Zeta0p25_TMP} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_Zeta0p25_OH} \end{tabular*} -\caption[Results of the \ct{edc\_mixing\_cvode} test cases]{Comparison of CVODE substeps for a single CFD step of 0.1 s, showing the effect of varying the initial unmixed fraction between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, a mixing time of 0.01 s, and an initial temperature of 1200 K.} +\caption[Results of the \ct{edc_mixing_cvode} test cases]{Comparison of CVODE substeps for a single CFD step of 0.1 s, showing the effect of varying the initial unmixed fraction between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, a mixing time of 0.01 s, and an initial temperature of 1200 K.} \label{fig:edc_mixing_cvode_onecfdstep_vary_zeta0_1} \end{figure} @@ -4025,7 +4025,7 @@ \section{Mixing with detailed chemistry (\ct{edc\_mixing\_cvode})} \includegraphics[height=2.2in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_Zeta0p0_TMP} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_Zeta0p0_OH} \end{tabular*} -\caption[Results of the \ct{edc\_mixing\_cvode} test cases]{Continued from Figure~\ref{fig:edc_mixing_cvode_onecfdstep_vary_zeta0_1}.} +\caption[Results of the \ct{edc_mixing_cvode} test cases]{Continued from Figure~\ref{fig:edc_mixing_cvode_onecfdstep_vary_zeta0_1}.} \label{fig:edc_mixing_cvode_onecfdstep_vary_zeta0_2} \end{figure} @@ -4048,7 +4048,7 @@ \section{Mixing with detailed chemistry (\ct{edc\_mixing\_cvode})} \includegraphics[height=1.6in,width=0.32\textwidth]{SCRIPT_FIGURES/EDC_MultiCFDStep_Methane_grimech30_Zeta0p0_OH} & \includegraphics[height=1.6in,width=0.32\textwidth]{SCRIPT_FIGURES/EDC_MultiCFDStep_Methane_grimech30_Zeta0p0_elements} \\ \end{tabular*} -\caption[Results of the \ct{edc\_mixing\_cvode} test cases]{Comparison of mixing with detailed chemistry over several CFD steps of 0.1 s, showing the effect of varying the initial unmixed fraction between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, a mixing time of 0.01 s, and an initial temperature of 900 K.} +\caption[Results of the \ct{edc_mixing_cvode} test cases]{Comparison of mixing with detailed chemistry over several CFD steps of 0.1 s, showing the effect of varying the initial unmixed fraction between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, a mixing time of 0.01 s, and an initial temperature of 900 K.} \label{fig:edc_mixing_cvode_multicfdstep_vary_zeta0} \end{figure} @@ -4065,19 +4065,19 @@ \section{Mixing with detailed chemistry (\ct{edc\_mixing\_cvode})} \includegraphics[height=1.6in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_taumix0p00001_TMP} & \includegraphics[height=1.6in]{SCRIPT_FIGURES/EDC_OneCFDStep_Methane_grimech30_taumix0p00001_OH} \end{tabular*} -\caption[Results of the \ct{edc\_mixing\_cvode} test cases]{Comparison of CVODE substeps for a single CFD step of 0.1 s, showing the effect of varying the mixing time between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, an initial unmixed fraction of 1.0 s, and an initial temperature of 1200 K.} +\caption[Results of the \ct{edc_mixing_cvode} test cases]{Comparison of CVODE substeps for a single CFD step of 0.1 s, showing the effect of varying the mixing time between FDS and Cantera. The simulation uses the Methane GRI mechanism with an equivalence ratio of 0.6, an initial unmixed fraction of 1.0 s, and an initial temperature of 1200 K.} \label{fig:edc_mixing_cvode_onecfdstep_vary_taumix} \end{figure} -\section{Combustion Load Balancing (\ct{comb\_load\_bal})} +\section{Combustion Load Balancing (\ct{comb_load_bal})} \label{comb_load_bal} Fire simulations can become computationally expensive due to combustion calculations, especially when detailed chemistry is involved. Often, in parallel simulations, combustion is concentrated in only a few MPI processes, while other MPI processes remain idle, waiting for the combustion-related tasks to finish. To address this, FDS incorporates a load-balancing algorithm that evenly distributes the combustion workload across all MPI processes. This can significantly speed up the detailed chemistry simulations, with performance improvements ranging from 2 to 6 times, depending on the configuration. -Three cases are considered to verify the load-balancing algorithm: the first uses a detailed chemical mechanism (Methane\_Smooke, see Section ~\ref{ignition_delay}); the second uses two-step Arrhenius reactions; and the third involves two-step fast chemistry reactions. In all cases, gaseous fuel (methane or propane) is injected from the burner. To account for combustion in both regular cells and Immersed Boundary Cut-Cells, a sphere is placed above the burner, allowing the flame to propagate around it. +Three cases are considered to verify the load-balancing algorithm: the first uses a detailed chemical mechanism (Methane_Smooke, see Section ~\ref{ignition_delay}); the second uses two-step Arrhenius reactions; and the third involves two-step fast chemistry reactions. In all cases, gaseous fuel (methane or propane) is injected from the burner. To account for combustion in both regular cells and Immersed Boundary Cut-Cells, a sphere is placed above the burner, allowing the flame to propagate around it. -Figure \ref{fig:comb_load_bal_methane_smooke} shows the load-balancing test for the Methane\_Smoke detailed chemical mechanism using Sundials CVODE solver. In this configuration, there are 24 meshes, corresponding to 24 MPI processes. The top-left plot shows that without load balancing, each MPI process spends varying amounts of time on chemistry calculations. In contrast, with load balancing, the time spent on chemistry calculations is distributed evenly across all processes. In the no-load-balancing case, MPI process 6 spends the most time on chemistry, causing other processes to wait in the MPI communication queue, as shown in the top-right plot. With load balancing, communication time is also more evenly distributed. The overall simulation speedup with load balancing is approximately 2.2x, as depicted in the bottom-left plot. Finally, the bottom-right plot demonstrates that the results are identical with and without load balancing by comparing the wall temperatures at three locations. +Figure \ref{fig:comb_load_bal_methane_smooke} shows the load-balancing test for the Methane_Smoke detailed chemical mechanism using Sundials CVODE solver. In this configuration, there are 24 meshes, corresponding to 24 MPI processes. The top-left plot shows that without load balancing, each MPI process spends varying amounts of time on chemistry calculations. In contrast, with load balancing, the time spent on chemistry calculations is distributed evenly across all processes. In the no-load-balancing case, MPI process 6 spends the most time on chemistry, causing other processes to wait in the MPI communication queue, as shown in the top-right plot. With load balancing, communication time is also more evenly distributed. The overall simulation speedup with load balancing is approximately 2.2x, as depicted in the bottom-left plot. Finally, the bottom-right plot demonstrates that the results are identical with and without load balancing by comparing the wall temperatures at three locations. Figure \ref{fig:comb_load_bal_2step_Arrhenius} presents a similar load-balancing test for two-step Propane Arrhenius reactions using the FDS-RK2 ODE solver. In this configuration, there are 6 meshes, corresponding to 6 MPI processes. The load-balancing results show similar trends as observed with the detailed chemical mechanism. However, the time spent on combustion (FIRE) is significantly lower compared to the detailed chemistry case (20\% vs. 65\%). As a result, even with combustion load balancing, other processes dominate the total simulation time, limiting the speedup to just 1.2x. @@ -4085,7 +4085,7 @@ \section{Combustion Load Balancing (\ct{comb\_load\_bal})} Overall, combustion load balancing provides significant speedup for detailed chemistry cases. For small multi-step Arrhenius reactions, the speedup may be limited depending on the stiffness of the reactions. For fast chemistry, combustion load balancing is generally not beneficial. -Figure \ref{fig:EDC_load_bal_methane_smooke} shows the load-balancing test for the Methane\_Smoke detailed chemical mechanism with mixing. +Figure \ref{fig:EDC_load_bal_methane_smooke} shows the load-balancing test for the Methane_Smoke detailed chemical mechanism with mixing. \begin{figure}[p] @@ -4095,7 +4095,7 @@ \section{Combustion Load Balancing (\ct{comb\_load\_bal})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Methane_Smooke_TOT} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Methane_Smooke_DEVC} \end{tabular*} -\caption[Results of the \ct{comb\_load\_balance} test cases]{Combustion load balance case using Methane\_Smooke detailed chemical mechanism.} +\caption[Results of the \ct{comb_load_balance} test cases]{Combustion load balance case using Methane_Smooke detailed chemical mechanism.} \label{fig:comb_load_bal_methane_smooke} \end{figure} @@ -4106,7 +4106,7 @@ \section{Combustion Load Balancing (\ct{comb\_load\_bal})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Propane_Arrhenius_TOT} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Propane_Arrhenius_DEVC} \end{tabular*} -\caption[Results of the \ct{comb\_load\_balance} test cases]{Combustion load balance case using two-step Propane Arrhenius reactions.} +\caption[Results of the \ct{comb_load_balance} test cases]{Combustion load balance case using two-step Propane Arrhenius reactions.} \label{fig:comb_load_bal_2step_Arrhenius} \end{figure} @@ -4117,7 +4117,7 @@ \section{Combustion Load Balancing (\ct{comb\_load\_bal})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Methane_Fast_TOT} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/comb_load_bal_Methane_Fast_DEVC} \end{tabular*} -\caption[Results of the \ct{comb\_load\_balance} test cases]{Combustion load balance case using two-step Methane fast reactions.} +\caption[Results of the \ct{comb_load_balance} test cases]{Combustion load balance case using two-step Methane fast reactions.} \label{fig:comb_load_bal_2step_fast} \end{figure} @@ -4128,18 +4128,18 @@ \section{Combustion Load Balancing (\ct{comb\_load\_bal})} \includegraphics[height=2.15in]{SCRIPT_FIGURES/EDC_load_bal_Methane_Smooke_TOT} & \includegraphics[height=2.15in]{SCRIPT_FIGURES/EDC_load_bal_Methane_Smooke_DEVC} \end{tabular*} -\caption[Results of the \ct{comb\_load\_balance} test cases]{Combustion load balance case for mixing with detailed chemistry using Methane\_Smooke detailed chemical mechanism. The initial unmixed fraction is 0.98.} +\caption[Results of the \ct{comb_load_balance} test cases]{Combustion load balance case for mixing with detailed chemistry using Methane_Smooke detailed chemical mechanism. The initial unmixed fraction is 0.98.} \label{fig:EDC_load_bal_methane_smooke} \end{figure} -\section{Mixture Fraction (\ct{burke\_schumann})} +\section{Mixture Fraction (\ct{burke_schumann})} \label{Mix_Frac} \label{burke_schumann_spec} \label{burke_schumann_temp} For simple one-step reactions of the form F + O $\rightarrow$ P, there is an optional output quantity called the mixture fraction. To test that this output is correctly implemented we consider a set of methane-air mixtures in a test chamber that span the entire range of equivalence ratio. The complete combustion of methane is given by: \begin{equation}\label{eq:methane_ex2} -\underbrace{\mathrm{CH_4}}_{\rm Fuel} + \underbrace{\mathrm{2\,(O_2 + 3.76\,N_2)}}_{\rm Oxidizer} \rightarrow \underbrace{\mathrm{CO_2 + 2\, H_2O + 7.52\,N_2}}_{\rm Products} +\underbrace{\mathrm{CH}_4}_{\rm Fuel} + \underbrace{\mathrm{2\,(O_2 + 3.76\,N_2)}}_{\rm Oxidizer} \rightarrow \underbrace{\mathrm{CO_2 + 2\, H_2O + 7.52\,N_2}}_{\rm Products} \end{equation} The simulation results are compared to state relationships that express temperature and species as a function of the mixture fraction, $f$~\cite{Turns:1996}. For fuel rich mixtures ($f_{\rm stoic} < f \le 1$), the expected species mass fractions are: \begin{align}\label{eq:mix_relate_rich} @@ -4162,14 +4162,14 @@ \section{Mixture Fraction (\ct{burke\_schumann})} \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/burke_schumann_spec} -\caption[Mixture fraction state relations for species (\ct{burke\_schumann})]{(Left) Lumped species mass fractions as a function of mixture fraction.} +\caption[Mixture fraction state relations for species (\ct{burke_schumann})]{(Left) Lumped species mass fractions as a function of mixture fraction.} \label{fig:burke_schumann_spec} \end{figure} \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/burke_schumann_temp} -\caption[Mixture fraction state relations for temperature (\ct{burke\_schumann})]{Non-dimensional temperature, $(T-T_0)/(T_{\rm stoich} - T_0)$, as a function of the mixture fraction.} +\caption[Mixture fraction state relations for temperature (\ct{burke_schumann})]{Non-dimensional temperature, $(T-T_0)/(T_{\rm stoich} - T_0)$, as a function of the mixture fraction.} \label{fig:burke_schumann_temp} \end{figure} @@ -4179,13 +4179,13 @@ \section{Ideal and Non-Ideal Heat of Combustion (\ct{HoC})} \label{HoC_Ideal} \label{HoC_NonIdeal} -When using a non-predefined fuel, one may have heat of combustion data representing complete combustion but species yield data representing typical large scale conditions. When using simple chemistry, the input keyword \ct{IDEAL=.TRUE.} on the \ct{REAC} line will have FDS reduce the heat of combustion to account for any minor products of combustion (e.g., CO and H$_2$O). This is done by removing energy from the heat of combustion to account for carbon that goes to CO and soot rather than CO$_2$ and for hydrogen that goes to soot rather than H$_2$O. A custom fuel (methane) is defined with CO and soot yields of 0.1, a heat of combustion of 50000 kJ/kg, and a 40 kW fire. Two input files are created, one with the \ct{HEAT\_OF\_COMBUSTION} defined with \ct{IDEAL=.TRUE.} and the second with \ct{IDEAL=.FALSE.}. In the \ct{IDEAL=.FALSE.} case where the heat of combustion is not adjusted we expect a fuel mass flow rate of 0.0008 \si{kg/(m^2.s)}. With the heat of combustion adjusted we expect a higher fuel mass flow rate of 0.000877 \si{kg/(m^2.s)}, as shown in Fig.~\ref{fig:HoC}. +When using a non-predefined fuel, one may have heat of combustion data representing complete combustion but species yield data representing typical large scale conditions. When using simple chemistry, the input keyword \ct{IDEAL=.TRUE.} on the \ct{REAC} line will have FDS reduce the heat of combustion to account for any minor products of combustion (e.g., CO and H$_2$O). This is done by removing energy from the heat of combustion to account for carbon that goes to CO and soot rather than CO$_2$ and for hydrogen that goes to soot rather than H$_2$O. A custom fuel (methane) is defined with CO and soot yields of 0.1, a heat of combustion of 50000 kJ/kg, and a 40 kW fire. Two input files are created, one with the \ct{HEAT_OF_COMBUSTION} defined with \ct{IDEAL=.TRUE.} and the second with \ct{IDEAL=.FALSE.}. In the \ct{IDEAL=.FALSE.} case where the heat of combustion is not adjusted we expect a fuel mass flow rate of 0.0008 \si{kg/(m^2.s)}. With the heat of combustion adjusted we expect a higher fuel mass flow rate of 0.000877 \si{kg/(m^2.s)}, as shown in Fig.~\ref{fig:HoC}. \begin{figure}[h!] \begin{tabular*}{\textwidth}{lr} \includegraphics[height=2.2in]{SCRIPT_FIGURES/HoC_Ideal} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/HoC_NonIdeal} \end{tabular*} -\caption[\ct{HoC\_Ideal} and \ct{HoC\_NonIdeal} test cases]{Demonstration of correct adjust to heat of combustion for minor products of combustion.} +\caption[\ct{HoC_Ideal} and \ct{HoC_NonIdeal} test cases]{Demonstration of correct adjust to heat of combustion for minor products of combustion.} \label{fig:HoC} \end{figure} @@ -4201,7 +4201,7 @@ \section{Single Step and Two Step Chemistry Heat of Combustion} \includegraphics[height=2.2in]{SCRIPT_FIGURES/1_step_2_step_compare_MLRPUA} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/1_step_2_step_compare_HRRPUA} \end{tabular*} - \caption[Result of the 1\_step\_2\_step\_compare test case]{Comparison of the heat release rate for single-step and two-step simple chemistry with the 1\_step\_2\_step\_compare test case. Left - MLRPUA. Right - HRRPUA} + \caption[Result of the \ct{1_step_2_step_compare} test case]{Comparison of the heat release rate for single-step and two-step simple chemistry with the \ct{1_step_2_step_compare} test case. Left - MLRPUA. Right - HRRPUA} \label{fig:1_step_2_step} \end{figure} @@ -4278,7 +4278,7 @@ \section{Fractional Effective Dose (FED) and Fractional Irritant Concentration ( where the numerators are the instantaneous concentrations of each irritant, and the denominators are the concentrations of respective irritants expected to cause incapacitation in half the population. The incapacitating concentrations~\cite{SFPE:Purser} are given in the table above. -\subsection{FED and FIC of gas mixtures (\texorpdfstring{\ct{FED\_FIC}}{FED\_FIC}) } +\subsection{FED and FIC of gas mixtures (\texorpdfstring{\ct{FED_FIC}}{FED_FIC}) } \label{FED_FIC} \label{FED_FIC_SMIX} @@ -4320,7 +4320,7 @@ \subsection{FED and FIC of gas mixtures (\texorpdfstring{\ct{FED\_FIC}}{FED\_FIC \includegraphics[height=2.2in]{SCRIPT_FIGURES/FIC_All_Gases} \end{tabular*} \vskip-\baselineskip -\caption[The FED and FIC values in \ct{FED\_FIC} test cases]{Comparison of FED and FIC predictions with expected values.} +\caption[The FED and FIC values in \ct{FED_FIC} test cases]{Comparison of FED and FIC predictions with expected values.} \label{FED_FIC_plot} \end{figure} @@ -4337,37 +4337,37 @@ \subsection{FED and FIC of gas mixtures (\texorpdfstring{\ct{FED\_FIC}}{FED\_FIC \includegraphics[height=2.2in]{SCRIPT_FIGURES/FIC_SMIX_All_Gases} \end{tabular*} \vskip-\baselineskip -\caption[The FED and FIC values in \ct{FED\_FIC\_SMIX} test cases]{Comparison of FED and FIC predictions with expected values using \ct{SMIX}.} +\caption[The FED and FIC values in \ct{FED_FIC_SMIX} test cases]{Comparison of FED and FIC predictions with expected values using \ct{SMIX}.} \label{FED_FIC_SMIX_plot} \end{figure} -\subsection{FED from post-combustion yield of CO and HCN (\texorpdfstring{\ct{FED\_CO\_HCN}}{FED\_CO\_HCN}) } +\subsection{FED from post-combustion yield of CO and HCN (\texorpdfstring{\ct{FED_CO_HCN}}{FED_CO_HCN}) } \label{FED_CO_HCN} -The calculation of FED resulting from post-combustion yields of CO$_2$, CO and HCN, and the corresponding oxygen reduction is tested by specifying a combustion reaction of Polyisocyanurate (PIR) foam with 1 \% CO yield and 0.5 \% yield of HCN. The computational volume is initialized with 15 vol-\% of combustion products. The species concentrations were measured by volume fraction devices, and the expected value of FED index was calculated using an external Matlab script. The results are shown in~\ref{fig:FED_CO_HCN}. +The calculation of FED resulting from post-combustion yields of CO$_2$, CO and HCN, and the corresponding oxygen reduction is tested by specifying a combustion reaction of Polyisocyanurate (PIR) foam with 1 \% CO yield and 0.5 \% yield of HCN. The computational volume is initialized with 15 vol-\% of combustion products. The species concentrations were measured by volume fraction devices, and the expected value of FED index was calculated using an external numerical solver. The results are shown in~\ref{fig:FED_CO_HCN}. \begin{figure}[ht] \centering \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/FED_CO_HCN} \end{tabular} -\caption[The FED value in \ct{FED\_CO\_HCN} case]{Comparison of predicted and expected FED resulting from the post-combustion yields of CO and HCN.} +\caption[The FED value in \ct{FED_CO_HCN} case]{Comparison of predicted and expected FED resulting from the post-combustion yields of CO and HCN.} \label{fig:FED_CO_HCN} \end{figure} -\subsection{FED for a moving particle (\texorpdfstring{\ct{FED\_moving}}{FED\_moving}) } +\subsection{FED for a moving particle (\texorpdfstring{\ct{FED_moving}}{FED_moving}) } \label{FED_moving} -The calculation of FED for a moving particle representing an occupant is tested by specifying species concentrations at different levels throughout the domain and moving the particle through these areas. The species concentrations are initialized to known levels and the expected value of FED index was calculated using an external Matlab script. The results are shown in~\ref{fig:FED_moving}. +The calculation of FED for a moving particle representing an occupant is tested by specifying species concentrations at different levels throughout the domain and moving the particle through these areas. The species concentrations are initialized to known levels and the expected value of FED index was calculated using an external numerical solver. The results are shown in~\ref{fig:FED_moving}. \begin{figure}[ht] \centering \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/FED_moving} \end{tabular} -\caption[The FED value in \ct{FED\_CO\_HCN} case]{Comparison of predicted and expected FED for a moving particle.} +\caption[The FED value in \ct{FED_CO_HCN} case]{Comparison of predicted and expected FED for a moving particle.} \label{fig:FED_moving} \end{figure} -\section{Smoke Detector Model (\texorpdfstring{\ct{smoke\_detector}}{smoke\_detector}) } +\section{Smoke Detector Model (\texorpdfstring{\ct{smoke_detector}}{smoke_detector}) } \label{smoke_detector} The calculations described in this section check the smoke detector algorithm that computes the smoke obscuration in the sensing chamber of a detector. For this example, the initial soot mass fraction in a 1~m$^3$ box is set as 100~mg/kg via the \ct{INIT} line. A vent on the left side injects soot at a velocity of 0.25~m/s and a mass fraction of 100~mg/kg, and the soot exhausts on the right side of the box via an open vent. By default, if a species is defined as an aerosol by setting \ct{AEROSOL=.TRUE.} on the \ct{SPEC} line, then all of the aerosol deposition mechanisms (gravitational, thermophoretic, and turbulent) will act upon that species. For this example, all deposition mechanisms are disabled by using the follows inputs on the \ct{MISC} line: @@ -4399,16 +4399,16 @@ \section{Smoke Detector Model (\texorpdfstring{\ct{smoke\_detector}}{smoke\_dete \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/smoke_detector} \end{tabular} -\caption[Smoke detector chamber obscuration for \ct{smoke\_detector} case]{Time evolution of smoke detector chamber obscuration for \ct{smoke\_detector} case} +\caption[Smoke detector chamber obscuration for \ct{smoke_detector} case]{Time evolution of smoke detector chamber obscuration for \ct{smoke_detector} case} \label{fig:smoke_detector} \end{figure} \section{Aerosol Behavior} -\subsection{Gravitational Settling and Deposition of Aerosols\\(\texorpdfstring{\ct{aerosol_gravitational_deposition}}{aerosol\_gravitational\_deposition})} +\subsection{Gravitational Settling and Deposition of Aerosols\\(\texorpdfstring{\ct{aerosol_gravitational_deposition}}{aerosol_gravitational_deposition})} \label{aerosol_gravitational_deposition} -This verification test consists of two test cases. The second case, \ct{aerosol\_gravitational\_deposition\_2}, reverses the z-component of gravity. The case consists of a box 10~cm on side with adiabatic, free-slip side walls. The box is filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of 0.00002~\si{kg/(m.s}, a thermal conductivity of 0.025~\si{W/(m.K}, and specific heat of 1~\si{kJ/(kg.K}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 10~$\mu$m, a solid phase density of 2000~kg/m$^3$, and a solid phase conductivity of 1~\si{W/(m.K}. The initial mass fraction of the aerosol is 0.00001. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{GRAVITATIONAL\_SETTLING} and \ct{GRAVITATIONAL\_DEPOSITION} are turned off. Since the box has a constant density over its height, a uniform settling rate over time is expected. +This verification test consists of two test cases. The second case, \ct{aerosol_gravitational_deposition_2}, reverses the z-component of gravity. The case consists of a box 10~cm on side with adiabatic, free-slip side walls. The box is filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of 0.00002~\si{kg/(m.s}, a thermal conductivity of 0.025~\si{W/(m.K}, and specific heat of 1~\si{kJ/(kg.K}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 10~$\mu$m, a solid phase density of 2000~kg/m$^3$, and a solid phase conductivity of 1~\si{W/(m.K}. The initial mass fraction of the aerosol is 0.00001. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{GRAVITATIONAL_SETTLING} and \ct{GRAVITATIONAL_DEPOSITION} are turned off. Since the box has a constant density over its height, a uniform settling rate over time is expected. \begin{figure}[ht] \noindent @@ -4418,14 +4418,14 @@ \subsection{Gravitational Settling and Deposition of Aerosols\\(\texorpdfstring{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_gravitational_deposition_2_gas} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_gravitational_deposition_2_wall} \end{tabular*} -\caption[Gas phase soot mass fractions and wall surface densities for gravitational deposition]{Time evolution of soot mass fraction in the gas (left) and soot surface density on the wall (right) for the \ct{aerosol\_gravitational\_deposition} (Top) and \ct{aerosol\_gravitational\_deposition\_2} (Bottom) cases.} +\caption[Gas phase soot mass fractions and wall surface densities for gravitational deposition]{Time evolution of soot mass fraction in the gas (left) and soot surface density on the wall (right) for the \ct{aerosol_gravitational_deposition} (Top) and \ct{aerosol_gravitational_deposition_2} (Bottom) cases.} \label{fig:gravitational_deposition} \end{figure} -\subsection{Thermophoretic Settling and Deposition of Aerosols\\(\texorpdfstring{\ct{aerosol_thermophoretic_deposition}}{aerosol\_thermophoretic\_deposition})} +\subsection{Thermophoretic Settling and Deposition of Aerosols\\(\texorpdfstring{\ct{aerosol_thermophoretic_deposition}}{aerosol_thermophoretic_deposition})} \label{aerosol_thermophoretic_deposition} -This verification test consists of two test cases. The second case, \ct{aerosol\_thermophoretic\_deposition\_2}, reverses the temperature gradient. The case consists of a box 1~cm on a side with adiabatic, free-slip side walls and a 100 K temperature gradient over the height of the box. The box is filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of $2\times10^{-5}$~\si{kg/(m.s)}, a thermal conductivity of 0.025~\si{W/(m.K)}, and specific heat of 1~\si{kJ/(kg.K)}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 1~$\mu$m, a solid phase density of 2000~\si{kg/m^3}, and a solid phase conductivity of 1~\si{W/(m.K)}. The initial mass fraction of the aerosol is $1\times10^{-5}$. The gas temperature is initialized to its steady-state temperature gradient. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{THERMOPHORETIC\_SETTLING} and \ct{THERMOPHORETIC\_DEPOSITION} are turned off. Thermophoretic settling rates are weakly dependent on the gas density. Since there is a temperature gradient, the settling rates are not uniform over the height of the box. Unlike the gravitational settling case, this means over long enough time periods the overall settling rate is not linear in time; however, for a short time period a near linear settling rate is expected and can be determined analytically. +This verification test consists of two test cases. The second case, \ct{aerosol_thermophoretic_deposition_2}, reverses the temperature gradient. The case consists of a box 1~cm on a side with adiabatic, free-slip side walls and a 100 K temperature gradient over the height of the box. The box is filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of $2\times10^{-5}$~\si{kg/(m.s)}, a thermal conductivity of 0.025~\si{W/(m.K)}, and specific heat of 1~\si{kJ/(kg.K)}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 1~$\mu$m, a solid phase density of 2000~\si{kg/m^3}, and a solid phase conductivity of 1~\si{W/(m.K)}. The initial mass fraction of the aerosol is $1\times10^{-5}$. The gas temperature is initialized to its steady-state temperature gradient. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{THERMOPHORETIC_SETTLING} and \ct{THERMOPHORETIC_DEPOSITION} are turned off. Thermophoretic settling rates are weakly dependent on the gas density. Since there is a temperature gradient, the settling rates are not uniform over the height of the box. Unlike the gravitational settling case, this means over long enough time periods the overall settling rate is not linear in time; however, for a short time period a near linear settling rate is expected and can be determined analytically. Using the equation for the thermophoretic velocity, $u_{\rm th}$, the thermophoretic velocities for the gas cells adjacent to the hot and cold walls are respectively 2.25E-4~\si{m/s} and 2.15E-4~\si{m/s}. Adjacent to the cold wall, $u_{\rm th}$ is the rate at which the aerosol deposits onto the wall. Over the simulation time of 2~s, the soot will move 4.29E-4~m which is 42.9~\% of the cell size. That fraction of the aerosol in the cell will deposit which is 5.05E-9~\si{kg/m^2}. Adjacent to the hot wall, $u_{\rm th}$ is the rate at which the aerosol leaves the cell. Over the simulation time of 2~s, the soot will move 4.49E-4~m which is 44.9~\% of the cell size. One minus that fraction of the original aerosol density in the cell will remain which is 4.98E-6~\si{kg/m^3}. @@ -4444,14 +4444,14 @@ \subsection{Thermophoretic Settling and Deposition of Aerosols\\(\texorpdfstring \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_thermophoretic_deposition_2_gas} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_thermophoretic_deposition_2_wall} \end{tabular*} -\caption[Gas phase soot densities and wall surface densities for thermophoretic deposition]{Time evolution of soot density in the gas (left) and soot surface density on the wall (right) for the \ct{aerosol\_thermophoretic\_deposition} (Top) and \ct{aerosol\_thermophoretic\_deposition\_2} (Bottom) cases.} +\caption[Gas phase soot densities and wall surface densities for thermophoretic deposition]{Time evolution of soot density in the gas (left) and soot surface density on the wall (right) for the \ct{aerosol_thermophoretic_deposition} (Top) and \ct{aerosol_thermophoretic_deposition_2} (Bottom) cases.} \label{fig:thermophoretic_deposition} \end{figure} -\subsection{Turbulent Deposition of Aerosols (\texorpdfstring{\ct{aerosol\_turbulent\_deposition}}{aerosol\_turbulent\_deposition})} +\subsection{Turbulent Deposition of Aerosols (\texorpdfstring{\ct{aerosol_turbulent_deposition}}{aerosol_turbulent_deposition})} \label{aerosol_turbulent_deposition} -This verification test consists of three tunnel like geometries 10~cm on side with adiabatic, free-slip walls. One end of the tunnel is \ct{OPEN} and the other end has a constant inlet velocity of 0.001 m/s, 0.1 m/s, or 1 m/s. The tunnels are filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of $2\times10^{-5}$~\si{kg/(m.s)}, a thermal conductivity of 0.025~\si{W/(m.K)}, and specific heat of 1~\si{kJ/(kg.K)}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 100~$\mu$m, a solid phase density of 2000~\si{kg/m^3}, and a solid phase conductivity of 1~\si{W/(m.K}. The initial mass fraction of the aerosol is $1\times10^{-5}$. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{TURBULENT\_DEPOSITION} are turned off. Turbulent deposition is computed using a correlation based open the wall friction velocity and the wall dimensionless stopping distance. The correlation has three parts, and the selected velocities test each part. Since the inlet condition is a constant velocity with a constant aerosol mass fraction, the first wall cell after the inlet will see a uniform settling rate over time. +This verification test consists of three tunnel like geometries 10~cm on side with adiabatic, free-slip walls. One end of the tunnel is \ct{OPEN} and the other end has a constant inlet velocity of 0.001 m/s, 0.1 m/s, or 1 m/s. The tunnels are filled with two gas species each having a molecular weight of 28.8~g/mol, a viscosity of $2\times10^{-5}$~\si{kg/(m.s)}, a thermal conductivity of 0.025~\si{W/(m.K)}, and specific heat of 1~\si{kJ/(kg.K)}, and zero diffusivity. One of the gas species is defined as an aerosol with a diameter of 100~$\mu$m, a solid phase density of 2000~\si{kg/m^3}, and a solid phase conductivity of 1~\si{W/(m.K}. The initial mass fraction of the aerosol is $1\times10^{-5}$. \ct{STRATIFICATION}, \ct{NOISE}, and all aerosol behaviors except for \ct{TURBULENT_DEPOSITION} are turned off. Turbulent deposition is computed using a correlation based open the wall friction velocity and the wall dimensionless stopping distance. The correlation has three parts, and the selected velocities test each part. Since the inlet condition is a constant velocity with a constant aerosol mass fraction, the first wall cell after the inlet will see a uniform settling rate over time. \begin{figure}[ht] \centering @@ -4460,14 +4460,14 @@ \subsection{Turbulent Deposition of Aerosols (\texorpdfstring{\ct{aerosol\_turbu \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_turbulent_deposition_2_wall} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_turbulent_deposition_3_wall} \end{tabular} - \caption[Wall surface densities for the \ct{aerosol\_turbulent\_deposition} case]{Time evolution of soot surface density on the wall for the \ct{aerosol\_turbulent\_deposition}. Top left is the diffusion regime, top right is the diffusion-impaction regime, and bottom is the inertial regime.} + \caption[Wall surface densities for the \ct{aerosol_turbulent_deposition} case]{Time evolution of soot surface density on the wall for the \ct{aerosol_turbulent_deposition}. Top left is the diffusion regime, top right is the diffusion-impaction regime, and bottom is the inertial regime.} \label{fig:turbulent_deposition} \end{figure} -\subsection{Mass Conservation of Depositing Aerosols (\texorpdfstring{\ct{propane\_flame\_deposition}}{propane\_flame\_deposition})} +\subsection{Mass Conservation of Depositing Aerosols (\texorpdfstring{\ct{propane_flame_deposition}}{propane_flame_deposition})} \label{propane_flame_deposition} -The calculations described in this section check the conservation of mass for the aerosol deposition algorithms. The example involves a reaction that invokes the aerosol deposition model in FDS (i.e., soot deposition). For this example, the fuel will be propane with a peak heat release rate of 100~kW and a 5~\% soot yield. For a 100~kW propane fire (\ct{HEAT\_OF\_COMBUSTION} of 44,715~kJ/kg), the associated burning rate is 2.236~g/s. A \ct{RAMP} is used to specify a burning rate from a propane burner that ramps up linearly to 2.236~g/s from 0~s to 1~s, remains steady at 2.236~g/s from 1~s to 4~s, then linearly decreases to 0~g/s from 4~s to 5~s. The total fuel mass released is 8.944~g of propane. Therefore, the resulting mass of soot should be equal to 0.447~g, or 5~\% of the total amount of fuel. For a case with no aerosol deposition, we would expect the mass of soot in the gas phase to be equal to 0.447~g. For a case with aerosol deposition, we would expect some fraction of soot to exist in the gas phase and the remainder of soot to be deposited on the wall. The sum of soot in the gas phase and deposited soot should be 0.447~g. +The calculations described in this section check the conservation of mass for the aerosol deposition algorithms. The example involves a reaction that invokes the aerosol deposition model in FDS (i.e., soot deposition). For this example, the fuel will be propane with a peak heat release rate of 100~kW and a 5~\% soot yield. For a 100~kW propane fire (\ct{HEAT_OF_COMBUSTION} of 44,715~kJ/kg), the associated burning rate is 2.236~g/s. A \ct{RAMP} is used to specify a burning rate from a propane burner that ramps up linearly to 2.236~g/s from 0~s to 1~s, remains steady at 2.236~g/s from 1~s to 4~s, then linearly decreases to 0~g/s from 4~s to 5~s. The total fuel mass released is 8.944~g of propane. Therefore, the resulting mass of soot should be equal to 0.447~g, or 5~\% of the total amount of fuel. For a case with no aerosol deposition, we would expect the mass of soot in the gas phase to be equal to 0.447~g. For a case with aerosol deposition, we would expect some fraction of soot to exist in the gas phase and the remainder of soot to be deposited on the wall. The sum of soot in the gas phase and deposited soot should be 0.447~g. Figure~\ref{fig:deposition_mass} shows the time evolution of soot in the gas phase, deposited soot, and total soot (sum of soot in the gas phase and deposited soot) for five cases. The five cases are (1) all aerosol deposition mechanisms active, (2) no aerosol deposition mechanisms active, (3) gravitational deposition only, (4) thermophoretic deposition only, and (5) turbulent deposition only. @@ -4478,11 +4478,11 @@ \subsection{Mass Conservation of Depositing Aerosols (\texorpdfstring{\ct{propan \includegraphics[height=2.2in]{SCRIPT_FIGURES/propane_flame_deposition_wall} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/propane_flame_deposition_total} \end{tabular} - \caption[Soot mass conservation for \ct{propane\_flame\_deposition} case]{Time evolution of soot mass components for \ct{propane\_flame\_deposition} cases. (Top left) Mass of soot in gas phase. (Top right) Mass of soot deposited on walls. (Bottom) Total mass of soot in gas phase and deposited on walls.} + \caption[Soot mass conservation for \ct{propane_flame_deposition} case]{Time evolution of soot mass components for \ct{propane_flame_deposition} cases. (Top left) Mass of soot in gas phase. (Top right) Mass of soot deposited on walls. (Bottom) Total mass of soot in gas phase and deposited on walls.} \label{fig:deposition_mass} \end{figure} -\subsection{Agglomeration of Aerosols (\texorpdfstring{\ct{aerosol\_agglomeration}}{aerosol\_agglomeration})} +\subsection{Agglomeration of Aerosols (\texorpdfstring{\ct{aerosol_agglomeration}}{aerosol_agglomeration})} \label{aerosol_agglomeration} This verification case consists of two test cases. @@ -4495,7 +4495,7 @@ \subsection{Agglomeration of Aerosols (\texorpdfstring{\ct{aerosol\_agglomeratio \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_agglomeration_bin1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_agglomeration_bin2} \end{tabular} - \caption[Gas phase soot mass fractions the \ct{aerosol\_agglomeration} cases]{Time evolution of soot mass fraction in the gas for size bin 1 and both bins (left) and size bin 2 (right) for the \ct{aerosol\_agglomeration} case.} + \caption[Gas phase soot mass fractions the \ct{aerosol_agglomeration} cases]{Time evolution of soot mass fraction in the gas for size bin 1 and both bins (left) and size bin 2 (right) for the \ct{aerosol_agglomeration} case.} \label{fig:agglomeration} \end{figure} @@ -4507,12 +4507,12 @@ \subsection{Agglomeration of Aerosols (\texorpdfstring{\ct{aerosol\_agglomeratio \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_agglomeration_2_bin1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_agglomeration_2_bin2} \end{tabular} - \caption[Gas phase soot mass fractions the \ct{aerosol\_agglomeration\_2} cases]{Time evolution of soot mass fraction in the gas for size bin 1 and both bins (left) and size bin 2 (right) for the \ct{aerosol\_agglomeration\_2} case.} + \caption[Gas phase soot mass fractions the \ct{aerosol_agglomeration_2} cases]{Time evolution of soot mass fraction in the gas for size bin 1 and both bins (left) and size bin 2 (right) for the \ct{aerosol_agglomeration_2} case.} \label{fig:agglomeration_2} \end{figure} -\subsection{Scrubbing of Aerosols (\texorpdfstring{\ct{aerosol\_scrubbing}}{aerosol\_scrubbing})} +\subsection{Scrubbing of Aerosols (\texorpdfstring{\ct{aerosol_scrubbing}}{aerosol_scrubbing})} \label{aerosol_scrubbing} This verification case tests the scrubbing of aerosols by droplet. The case consists of a box that is 0.4~m on a side with 4 cells in each direction. The box is initially filled with pure water vapor with a soot mass fraction of 0.0001. The soot has a mean diameter of 1~$\mu$m. The calculation is initialized with a 100~$\mu$m droplet in every cell with an initial downward velocity of 0.1~m/s. Gravity and drag is disabled so the drops do not change velocity. The drops are given an initial weight so that the total projected area is 25~\% of the cell area. Since every cell always has a single drop of the same diameter and velocity, the result is a constant decay of the soot mass fraction with a decay constant of 0.0000666. After 5000~s, the case should predict a 28~\% drop in soot mass fraction. @@ -4522,12 +4522,12 @@ \subsection{Scrubbing of Aerosols (\texorpdfstring{\ct{aerosol\_scrubbing}}{aero \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/aerosol_scrubbing} \end{tabular} - \caption[Gas phase soot mass fractions the \ct{aerosol\_scrubbing} cases]{Time evolution of soot mass fraction in the gas for the \ct{aerosol\_scrubbing} case.} + \caption[Gas phase soot mass fractions the \ct{aerosol_scrubbing} cases]{Time evolution of soot mass fraction in the gas for the \ct{aerosol_scrubbing} case.} \label{fig:scrubbing} \end{figure} -\subsection{Oxidation of Soot on Surfaces (\texorpdfstring{\ct{soot\_oxidation\_wall}}{soot\_oxidation\_wall})} +\subsection{Oxidation of Soot on Surfaces (\texorpdfstring{\ct{soot_oxidation_wall}}{soot_oxidation_wall})} \label{soot_oxidation_wall} This verification case checks the routine for oxidizing soot on a surface. The calculation fills a 1~m$^3$ box with 0.1~g of soot with a mean diameter of 100 microns; the large diameter was selected so the soot would quickly settle to the floor. The case lets the soot settle for 10 s. This is followed by a one-second ramp that heats the floor from 20~$^\circ$C to 1000~$^\circ$C. This results in rapid oxidation of the soot. Once all the soot is oxidized, there should have been a heat release of 3.28~kJ, and the production of 0.37~g of CO$_2$. @@ -4539,14 +4539,14 @@ \subsection{Oxidation of Soot on Surfaces (\texorpdfstring{\ct{soot\_oxidation\_ \includegraphics[height=2.2in]{SCRIPT_FIGURES/soot_oxidation_energy} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/soot_oxidation_co2} \end{tabular} - \caption[Results of the \ct{soot\_oxidation\_wall} case]{Time evolution the accumulated wall mass of soot (upper left), energy release due to soot combustion (upper right), and mass of CO$_2$ (lower left) and H$_2$O (lower right) in the gas for the \ct{soot\_oxidation\_wall} case.} + \caption[Results of the \ct{soot_oxidation_wall} case]{Time evolution the accumulated wall mass of soot (upper left), energy release due to soot combustion (upper right), and mass of CO$_2$ (lower left) and H$_2$O (lower right) in the gas for the \ct{soot_oxidation_wall} case.} \label{fig:soot_oxidation} \end{figure} \section{Condensation} -\subsection{Condensation and Evaporation in the Gas Phase\\(\texorpdfstring{\ct{condensation\_1} and \ct{condensation\_2}}{condensation\_1 and condensation\_2})} +\subsection{Condensation and Evaporation in the Gas Phase\\(\texorpdfstring{\ct{condensation_1} and \ct{condensation_2}}{condensation_1 and condensation_2})} \label{condensation_evaporation} -This pair of verification cases test the condensation and evaporation of water vapor. Both cases use 1~m$^3$ box. Case \ct{condensation\_1} has an initial temperature of 200~$^\circ$C and contains an initial mass fraction of condensed water vapor of 0.01~kg/kg. At equilibrium all the condensed vapor will evaporate resulting in a temperature drop of 27~$^\circ$C and a pressure drop of 5800~Pa. Case \ct{condensation\_2} has an initial temperature of -100~$^\circ$C and contains an initial mass fraction of water vapor of 0.01~kg/kg. At equilibrium 99.9~\% of the vapor will condense resulting in a temperature rise of 36~$^\circ$C and a pressure rise of 21,000~Pa. +This pair of verification cases test the condensation and evaporation of water vapor. Both cases use 1~m$^3$ box. Case \ct{condensation_1} has an initial temperature of 200~$^\circ$C and contains an initial mass fraction of condensed water vapor of 0.01~kg/kg. At equilibrium all the condensed vapor will evaporate resulting in a temperature drop of 27~$^\circ$C and a pressure drop of 5800~Pa. Case \ct{condensation_2} has an initial temperature of -100~$^\circ$C and contains an initial mass fraction of water vapor of 0.01~kg/kg. At equilibrium 99.9~\% of the vapor will condense resulting in a temperature rise of 36~$^\circ$C and a pressure rise of 21,000~Pa. \begin{figure}[ht] \centering @@ -4556,13 +4556,13 @@ \subsection{Condensation and Evaporation in the Gas Phase\\(\texorpdfstring{\ct{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/condensation_2_T} \includegraphics[height=2.2in]{SCRIPT_FIGURES/condensation_2_P} \end{tabular} - \caption[Results of the \ct{condensation\_1} (top) and \ct{condensation\_2} (bottom) cases]{Temperature change (left) and pressure change (right) due to the evaporation (top) and condensation (bottom) of water vapor for the \ct{condensation\_1} (top) and \ct{condensation\_2} (bottom) cases.} + \caption[Results of the \ct{condensation_1} (top) and \ct{condensation_2} (bottom) cases]{Temperature change (left) and pressure change (right) due to the evaporation (top) and condensation (bottom) of water vapor for the \ct{condensation_1} (top) and \ct{condensation_2} (bottom) cases.} \label{fig:condensation_gas} \end{figure} -\subsection{Condensation and Evaporation in the Solid Phase\\(\texorpdfstring{\ct{wall\_cond}}{wall\_cond})} +\subsection{Condensation and Evaporation in the Solid Phase\\(\texorpdfstring{\ct{wall_cond}}{wall_cond})} \label{wall_condensation_evaporation} -This verification cases tests the condensation and evaporation of water vapor onto and from solid surfaces. The case uses 1~m$^3$ box. The case has an initial temperature of 100~$^\circ$C and contains an initial mass fraction of water vapor of 0.05~kg/kg. The walls are 1~mm thick with a density of 1000~kg/m$^3$, a specific heat of 1~\si{kJ/(kg.K)}, and a conductivity of 100~\si{W/(m.K)}. At equilibrium the wall and gas temperature will be equal at 32~$^\circ$C and the pressure drop will be -20000~Pa. Note that \ct{NUCLEATION\_SITES} on \ct{MISC} was set to zero to turn off condensation in the gas phase. +This verification cases tests the condensation and evaporation of water vapor onto and from solid surfaces. The case uses 1~m$^3$ box. The case has an initial temperature of 100~$^\circ$C and contains an initial mass fraction of water vapor of 0.05~kg/kg. The walls are 1~mm thick with a density of 1000~kg/m$^3$, a specific heat of 1~\si{kJ/(kg.K)}, and a conductivity of 100~\si{W/(m.K)}. At equilibrium the wall and gas temperature will be equal at 32~$^\circ$C and the pressure drop will be -20000~Pa. Note that \ct{NUCLEATION_SITES} on \ct{MISC} was set to zero to turn off condensation in the gas phase. \begin{figure}[ht] \centering @@ -4570,12 +4570,12 @@ \subsection{Condensation and Evaporation in the Solid Phase\\(\texorpdfstring{\c \includegraphics[height=2.2in]{SCRIPT_FIGURES/wall_cond_T} \includegraphics[height=2.2in]{SCRIPT_FIGURES/wall_cond_P} \end{tabular} - \caption[Results of the \ct{wall\_cond} case]{Temperature (left) and pressure change (right) for the \ct{wall\_cond} case.} + \caption[Results of the \ct{wall_cond} case]{Temperature (left) and pressure change (right) for the \ct{wall_cond} case.} \label{fig:wall_condensation} \end{figure} -\subsection{Radiation for Condensed Phase (\texorpdfstring{\ct{condensation\_3}} {condensation\_3})} +\subsection{Radiation for Condensed Phase (\texorpdfstring{\ct{condensation_3}} {condensation_3})} \label{condensation_radiation} This verification case tests that the radiation absorption of condensed vapor is equivalent to the absorption of an equivalent set of Lagrangian particles. The case contains two 1~m$^3$ boxes filled with dry air at 0~$^\circ$C. One box is initialized with an 0.001 mass fraction of condensed water vapor with a droplet size of 1 micron. The other box is filled with one particle per cell with the same diameter and total mass of droplets. One wall of each box is set to 1000~$^\circ$C. The radiative heat flux on the opposite face should be the same in both cases. @@ -4584,7 +4584,7 @@ \subsection{Radiation for Condensed Phase (\texorpdfstring{\ct{condensation\_3}} \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/condensation_3} \end{tabular} -\caption[Radiative heat flux for the \ct{condensation\_3} case]{Radiative heat flux for the \ct{condensation\_3} case} +\caption[Radiative heat flux for the \ct{condensation_3} case]{Radiative heat flux for the \ct{condensation_3} case} \label{fig:condensation_3} \end{figure} @@ -4615,7 +4615,7 @@ \chapter{Heat Conduction} -\section{Heat Conduction Through a Solid Slab (\texorpdfstring{\ct{heat\_conduction}}{heat\_conduction})} +\section{Heat Conduction Through a Solid Slab (\texorpdfstring{\ct{heat_conduction}}{heat_conduction})} \label{heat_conduction_a} \label{heat_conduction_b} \label{heat_conduction_c} @@ -4645,11 +4645,11 @@ \section{Heat Conduction Through a Solid Slab (\texorpdfstring{\ct{heat\_conduct \includegraphics[height=2.2in]{SCRIPT_FIGURES/heat_conduction_c} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/heat_conduction_d} \end{tabular*} - \caption[The \ct{heat\_conduction} test cases]{Comparison of heat conduction calculations with analytical solutions.} + \caption[The \ct{heat_conduction} test cases]{Comparison of heat conduction calculations with analytical solutions.} \label{heat_conduction} \end{figure} -\section{Heat Conduction Through a Solid Slab Part 2 (\texorpdfstring{\ct{back\_wall}}{back\_wall})} +\section{Heat Conduction Through a Solid Slab Part 2 (\texorpdfstring{\ct{back_wall}}{back_wall})} \label{back_wall} A slab of thickness $L=0.01$~m with a conductivity of 10~\si{W/(m.K)} is exposed to a backside temperature of $T_g=200$~\si{\degree C}. @@ -4661,11 +4661,11 @@ \section{Heat Conduction Through a Solid Slab Part 2 (\texorpdfstring{\ct{back\_ \begin{tabular}{c} \includegraphics[height=2.2in]{SCRIPT_FIGURES/back_wall} \end{tabular} - \caption[Front and back wall temperatures for the \ct{back\_wall} case]{Front and back wall temperatures for the \ct{back\_wall} case} + \caption[Front and back wall temperatures for the \ct{back_wall} case]{Front and back wall temperatures for the \ct{back_wall} case} \label{fig:back_wall} \end{figure} -\section{Temperature-Dependent Thermal Properties (\texorpdfstring{\ct{heat\_conduction\_kc}}{heat\_conduction\_kc})} +\section{Temperature-Dependent Thermal Properties (\texorpdfstring{\ct{heat_conduction_kc}}{heat_conduction_kc})} \label{heat_conduction_kc} This example demonstrates the 1-D heat conduction in Cartesian, cylindrical, and spherical geometries with temperature-dependent thermal properties. @@ -4705,12 +4705,12 @@ \section{Temperature-Dependent Thermal Properties (\texorpdfstring{\ct{heat\_con \includegraphics[height=2.2in]{SCRIPT_FIGURES/heat_conduction_kc_surf} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/heat_conduction_kc_back} \end{tabular*} -\caption[The \ct{heat\_conduction\_kc} test case]{Comparison of heat conduction calculations with a finite-element model.} +\caption[The \ct{heat_conduction_kc} test case]{Comparison of heat conduction calculations with a finite-element model.} \label{heat_conduction_kc_fig} \end{figure} -\section{Convective Cooling (\texorpdfstring{\ct{convective\_cooling}}{convective\_cooling})} +\section{Convective Cooling (\texorpdfstring{\ct{convective_cooling}}{convective_cooling})} \label{convective_cooling} This example tests the convective cooling algorithm. A 1~m thick solid slab that is initially at 1000~\si{\degree C} is suddenly exposed to air at 0~\si{\degree C}. The back of the slab is insulated. Its density is 1000~\si{kg/m^3}, its specific heat is 0.001~kJ/(kg$\cdot$K), its conductivity is 1~W/(m$\cdot$K), and its emissivity is zero, meaning there is no radiative loss from the surface. The convective heat transfer coefficient is 1~W/(m$^2\cdot$K). The predicted and exact temperature values at the back side of the slab are displayed in Fig.~\ref{convective_cooling_fig}. @@ -4718,7 +4718,7 @@ \section{Convective Cooling (\texorpdfstring{\ct{convective\_cooling}}{convectiv \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/convective_cooling} -\caption[The \ct{convective\_cooling} test case]{Predicted vs.~exact back side temperatures of a thick slab cooled by convection alone.} +\caption[The \ct{convective_cooling} test case]{Predicted vs.~exact back side temperatures of a thick slab cooled by convection alone.} \label{convective_cooling_fig} \end{figure} @@ -4727,7 +4727,7 @@ \section{Convective Cooling (\texorpdfstring{\ct{convective\_cooling}}{convectiv \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/convective_cooling_error} -\caption[Convergence study for the \ct{convective\_cooling} test case]{Convergence study for the \ct{convective\_cooling} test case.} +\caption[Convergence study for the \ct{convective_cooling} test case]{Convergence study for the \ct{convective_cooling} test case.} \label{convective_cooling_convergence} \end{figure} @@ -4747,7 +4747,7 @@ \section{Simple Thermocouple Model (\texorpdfstring{\ct{thermocouples}}{thermoco -\section{Heat Conduction through Insulated Steel (\texorpdfstring{\ct{insulated_steel_x}}{insulated\_steel\_x})} +\section{Heat Conduction through Insulated Steel (\texorpdfstring{\ct{insulated_steel_x}}{insulated_steel_x})} \label{insulated_steel_pipe} \label{insulated_steel_plate} @@ -4778,7 +4778,7 @@ \section{Heat Conduction through Insulated Steel (\texorpdfstring{\ct{insulated_ -\section{Heat Conduction across Mesh Boundaries (\texorpdfstring{\ct{back\_wall\_test}}{back\_wall\_test})} +\section{Heat Conduction across Mesh Boundaries (\texorpdfstring{\ct{back_wall_test}}{back_wall_test})} \label{back_wall_test} In this example, a hollow cube whose walls are either zero, one, or two cells thick contains a solid cube centered inside with a fixed temperature of 500~$^\circ$C. The objective of the test is to ensure that the heat conduction through the steel and across the mesh boundaries is computed properly when each wall has a specified \ct{THICKNESS} of 5~cm. In the left hand plot of Fig.~\ref{back_wall_test_fig}, the net radiative heat flux to the interior surface of the box matches the net radiative heat flux from the external surface in steady state. In the right hand plot, the external surface temperature of two sides of the box are compared. One side is a zero cell thick obstruction; the other side is a two cell thick obstruction. Since the sides all have a specified \ct{THICKNESS} of 0.5~cm, the fact that the obstruction is either zero, one, or two cells thick should not matter and the temperatures should match exactly. @@ -4789,12 +4789,12 @@ \section{Heat Conduction across Mesh Boundaries (\texorpdfstring{\ct{back\_wall\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/back_wall_test_flux} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/back_wall_test_temp} \end{tabular*} -\caption[The \ct{back\_wall\_test} test case]{(Left) The heat flux into and out of a steel plate. (Right) The external temperature of a steel box whose sides are either zero or two cells thick.} +\caption[The \ct{back_wall_test} test case]{(Left) The heat flux into and out of a steel plate. (Right) The external temperature of a steel box whose sides are either zero or two cells thick.} \label{back_wall_test_fig} \end{figure} -\section{Heat Conduction through Immersed Boundaries (\texorpdfstring{\ct{back\_wall\_test\_2}}{back\_wall\_test\_2})} +\section{Heat Conduction through Immersed Boundaries (\texorpdfstring{\ct{back_wall_test_2}}{back_wall_test_2})} \label{back_wall_test_2} A 0.8~m by 0.8~m plate with surface temperature 1000~$^\circ$C and emissivity of 1 exposes a parallel plate separated by 0.15~m. The exposed plate is 1~cm thick, with a conductivity of 25~W/(m$\cdot$K), density 1000~kg/m$^3$, specific heat 0.1~kJ/(kg$\cdot$K), emissivity 1, and a convective heat transfer coefficient of 0. Three different configurations are considered: (1) the plates are all defined as traditional FDS \ct{OBST}ructions, (2) the plates are defined as immersed boundary (\ct{GEOM}) obstructions, and (3) the same plates as in (2) are rotated 45$^\circ$. Figure~\ref{back_wall_test_2_fig} displays the front and back surface temperatures for all three cases, compared to the exact solution where the analytically determined heat flux, Eq.~(\ref{plate_view_factor_eq}), is imposed directly on the front plate surface. The error in all three cases is due mainly to the error in the radiation transport calculation on grids with 2.5~cm cells. @@ -4806,13 +4806,13 @@ \section{Heat Conduction through Immersed Boundaries (\texorpdfstring{\ct{back\_ \includegraphics[height=2.2in]{SCRIPT_FIGURES/back_wall_test_2_temp_geom} \\ \multicolumn{2}{c}{\includegraphics[height=2.2in]{SCRIPT_FIGURES/back_wall_test_2_temp_geom_rotated}} \end{tabular*} -\caption[The \ct{back\_wall\_test\_2} test cases]{Front and back surface temperatures of a plate defined using the \ct{OBST} namelist parameters (top, left); \ct{GEOM} namelist parameters (top, right); \ct{GEOM} parameters rotated 45$^\circ$.} +\caption[The \ct{back_wall_test_2} test cases]{Front and back surface temperatures of a plate defined using the \ct{OBST} namelist parameters (top, left); \ct{GEOM} namelist parameters (top, right); \ct{GEOM} parameters rotated 45$^\circ$.} \label{back_wall_test_2_fig} \end{figure} -\section{Specified Heat Flux Boundary Conditions (\texorpdfstring{\ct{adiabatic\_xxx\_flux}}{adiabatic\_xxx\_flux})} +\section{Specified Heat Flux Boundary Conditions (\texorpdfstring{\ct{adiabatic_xxx_flux}}{adiabatic_xxx_flux})} \label{adiabatic_con_flux} \label{adiabatic_net_flux} @@ -4834,7 +4834,7 @@ \section{Specified Heat Flux Boundary Conditions (\texorpdfstring{\ct{adiabatic\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/adiabatic_net_flux_pres} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/adiabatic_net_flux_temp} \end{tabular*} -\caption[The \ct{adiabatic\_con\_flux} and \ct{adiabatic\_net\_flux} test cases]{Pressure and average temperature of a small compartment with specified heat flux boundary conditions.} +\caption[The \ct{adiabatic_con_flux} and \ct{adiabatic_net_flux} test cases]{Pressure and average temperature of a small compartment with specified heat flux boundary conditions.} \label{adiabatic_flux} \end{figure} @@ -4848,7 +4848,7 @@ \section{Solid Heat Transfer 3-D (Beta)} This section presents test cases for solid phase heat diffusion (conduction) in 3-D. This feature is not yet connected to the 1-D pyrolysis heat transfer code discussed in the previous sections. Currently, the purpose of the HT3D functionality is to couple FDS with structural fire calculations. -\subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_energy\_conservation}}{ht3d\_energy\_conservation})} +\subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d_energy_conservation}}{ht3d_energy_conservation})} \label{ht3d_energy_conservation} A 0.8~m by 0.8~m by 2~cm thick metal plate is exposed to a hot radiating surface for 10~s. Figure \ref{fig:ht3d_energy_conservation} displays the increased internal enthalpy versus the net heat flux integrated over the surface and integrated over time. @@ -4860,7 +4860,7 @@ \subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_energy \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_fine} \end{tabular*} -\caption[The \ct{ht3d\_energy\_conservation} test case]{Plots of the enthalpy of a metal plate versus the surface heat flux integrated in space and time. At right is the same plot showing how the 3-D temperature field is updated over three time steps.} +\caption[The \ct{ht3d_energy_conservation} test case]{Plots of the enthalpy of a metal plate versus the surface heat flux integrated in space and time. At right is the same plot showing how the 3-D temperature field is updated over three time steps.} \label{fig:ht3d_energy_conservation} \end{figure} @@ -4871,11 +4871,11 @@ \subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_energy \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_2} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_3} \end{tabular*} -\caption[Additional \ct{ht3d\_energy\_conservation} test cases]{Plots of the enthalpy of a metal plate versus the surface heat flux integrated in space and time. The left plot is the case where the internal grid cells are 0.25 the size of the gas phase cells, and the right plot is the case where the internal cells stretch as is done in the 1-D solver.} +\caption[Additional \ct{ht3d_energy_conservation} test cases]{Plots of the enthalpy of a metal plate versus the surface heat flux integrated in space and time. The left plot is the case where the internal grid cells are 0.25 the size of the gas phase cells, and the right plot is the case where the internal cells stretch as is done in the 1-D solver.} \label{fig:ht3d_energy_conservation_2} \end{figure} -Figure~\ref{fig:ht3d_energy_conservation_4} compares the integrated net heat flux versus the internal enthalpy in a case where a small hot block is placed above a larger block for which 3-D heat conduction is invoked. In one case (upper left plot), the block is made of one material with a thermal conductivity of 0.1~W/m/K, typical of insulation. The internal cells cluster near all six faces of the block as would be done in a 1-D case. The calculation of the internal enthalpy can be performed in any coordinate direction, both positive and negative. In this case, the positive $x$ direction is chosen, whereas the hot block is placed above the larger block. This ensures that the energy is properly transferred in the lateral directions. In a second case (upper right plot), the solid block consists of a thin, 1~cm thick layer of insulation over a solid block of steel. The insulation layer is specified using a one-cell thick obstruction on top of the obstruction representing the steel. In a third case (lower plot), the solid block of steel is covered by two layers of insulation of thickness 1.5~cm and 1.0~cm that are specified using the conventional \ct{SURF} line with arrays of \ct{MATL\_ID} and \ct{THICKNESS}. Each layer of insulation is composed of two different material components. +Figure~\ref{fig:ht3d_energy_conservation_4} compares the integrated net heat flux versus the internal enthalpy in a case where a small hot block is placed above a larger block for which 3-D heat conduction is invoked. In one case (upper left plot), the block is made of one material with a thermal conductivity of 0.1~W/m/K, typical of insulation. The internal cells cluster near all six faces of the block as would be done in a 1-D case. The calculation of the internal enthalpy can be performed in any coordinate direction, both positive and negative. In this case, the positive $x$ direction is chosen, whereas the hot block is placed above the larger block. This ensures that the energy is properly transferred in the lateral directions. In a second case (upper right plot), the solid block consists of a thin, 1~cm thick layer of insulation over a solid block of steel. The insulation layer is specified using a one-cell thick obstruction on top of the obstruction representing the steel. In a third case (lower plot), the solid block of steel is covered by two layers of insulation of thickness 1.5~cm and 1.0~cm that are specified using the conventional \ct{SURF} line with arrays of \ct{MATL_ID} and \ct{THICKNESS}. Each layer of insulation is composed of two different material components. \begin{figure}[ht] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} @@ -4884,7 +4884,7 @@ \subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_energy \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_6} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_7} \end{tabular*} -\caption[Additional \ct{ht3d\_energy\_conservation} test cases, 4, 5, 6, and 7]{Comparison of the integrated net heat flux versus the internal enthalpy for a homogeneous solid block of insulation material (upper left), a block of steel with a single layer of insulation (upper right), a block with multiple layers of multi-component insulation (bottom left), a block of steel that abuts an open boundary (bottom right).} +\caption[Additional \ct{ht3d_energy_conservation} test cases, 4, 5, 6, and 7]{Comparison of the integrated net heat flux versus the internal enthalpy for a homogeneous solid block of insulation material (upper left), a block of steel with a single layer of insulation (upper right), a block with multiple layers of multi-component insulation (bottom left), a block of steel that abuts an open boundary (bottom right).} \label{fig:ht3d_energy_conservation_4} \end{figure} @@ -4898,14 +4898,14 @@ \subsection{Energy Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_energy \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_8} \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_energy_conservation_9} -\caption[Additional \ct{ht3d\_energy\_conservation} test cases 8 and 9]{(Left) Comparison of the integrated net heat flux versus the internal enthalpy for a steel column. (Right) Integrated heat flux from a solid object with an embedded solid object that generates heat at a constant rate.} +\caption[Additional \ct{ht3d_energy_conservation} test cases 8 and 9]{(Left) Comparison of the integrated net heat flux versus the internal enthalpy for a steel column. (Right) Integrated heat flux from a solid object with an embedded solid object that generates heat at a constant rate.} \label{fig:ht3d_energy_conservation_8} \end{figure} \FloatBarrier -\subsection{Heat Transfer to an I-Beam (\texorpdfstring{\ct{ht3d\_beam\_heating}}{ht3d\_beam\_heating})} +\subsection{Heat Transfer to an I-Beam (\texorpdfstring{\ct{ht3d_beam_heating}}{ht3d_beam_heating})} \label{ht3d_beam_heating} An aluminum I-beam $L=1.76$~m long and $d=0.58$~m deep (i.e.~in height), with flanges that are $b_{\rm f}=0.22$~m wide and $t_{\rm f}=0.005$~m thick and a web that is $t_{\rm w}=0.006$~m thick, is heated within a sealed compartment with volume $V_{\rm c}=0.8$~m$^3$, initial temperature $T_{\rm g,0}=1073.15$~K, pressure $p_0=101.325$~kPa, molecular weight $W=0.028$~kg/mol, specific heat $c_{\rm g}=1$~kJ/(kg$\cdot$K), and density $\rho_{\rm g}=p_0 W/(RT_{\rm g,0})\approx0.318$~kg/m$^3$. $R\approx0.008314$~kJ/(mol$\cdot$K) is the universal gas constant. The aluminum has a density $\rho_{\rm a}=2700$~kg/m$^3$, specific heat $c_{\rm a}=0.9$~kJ/(kg$\cdot$K), and initial temperature $T_{\rm a,0}=293.15$~K. Initially, the gas and aluminum have internal energies given by: @@ -4924,14 +4924,14 @@ \subsection{Heat Transfer to an I-Beam (\texorpdfstring{\ct{ht3d\_beam\_heating} \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_beam_heating_1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_beam_heating_2} -\caption[The \ct{ht3d\_beam\_heating} test cases]{(Left) Average surface temperature of an I-beam immersed in hot gas. (Right) Average temperature of an insulated I-beam exposed to the same conditions.} +\caption[The \ct{ht3d_beam_heating} test cases]{(Left) Average surface temperature of an I-beam immersed in hot gas. (Right) Average temperature of an insulated I-beam exposed to the same conditions.} \label{fig:ht3d_beam_heating} \end{figure} \FloatBarrier -\subsection{Mass Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_mass\_conservation}}{ht3d\_mass\_conservation})} +\subsection{Mass Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d_mass_conservation}}{ht3d_mass_conservation})} \label{ht3d_mass_conservation} Three abutting solids, one of which is thin, have a density of $\rho_{\rm s}=400$~kg/m$^3$, moisture mass fraction $Y_{\rm m}=0.05$, and total volume $V=0.0106$~m$^3$. When exposed to hot plates of 1000~$^\circ$C, it is expected that $\rho_{\rm s} Y_{\rm m} V=0.212$~kg should be evaporated. The left plot of Fig.~\ref{fig:ht3d_mass_conservation} displays the evaporated mass as a function of time. @@ -4939,7 +4939,7 @@ \subsection{Mass Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_mass\_co \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_mass_conservation} \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_mass_conservation_2} -\caption[The \ct{ht3d\_mass\_conservation} test case]{Evaporated moisture mass from a collection of solids.} +\caption[The \ct{ht3d_mass_conservation} test case]{Evaporated moisture mass from a collection of solids.} \label{fig:ht3d_mass_conservation} \end{figure} @@ -4948,7 +4948,7 @@ \subsection{Mass Conservation in a 3-D Solid (\texorpdfstring{\ct{ht3d\_mass\_co \FloatBarrier -\subsection{Continuous Heat Flux Boundary (\texorpdfstring{\ct{ht3d\_slab}}{ht3d\_slab})} +\subsection{Continuous Heat Flux Boundary (\texorpdfstring{\ct{ht3d_slab}}{ht3d_slab})} \label{ht3d_slab} In this test case, we utilize the non-steady state conduction solution provided in Carslaw and Jaeger \cite{Carslaw:1} for a semi-infinite slab exposed to a constant ambient temperature, $T_\infty$, with a constant convective heat transfer coefficient, $h$, and no radiation (see also Drysdale \cite{Drysdale:1}, Eq.~(2.25)). The initial temperature of the slab, $T_0$, is set to \SI{1000}{\degreeCelsius}. The thermal properties of the slab, $k=1$ \si{W/(m.K)}, $\rho=1000$ \si{kg/m^3}, and $c=0.001$ \si{kJ/(kg.K)}, are set to give a thermal diffusivity, $\alpha$, of 0.001 \si{m^2/s}. The analytical solution for this problem for the solid temperature, $T(x,t)$, is given by @@ -4965,13 +4965,13 @@ \subsection{Continuous Heat Flux Boundary (\texorpdfstring{\ct{ht3d\_slab}}{ht3d \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_slab} -\caption[The \ct{ht3d\_slab} test cases]{Test of continuous heat flux boundary condition for 3-D heat transfer.} +\caption[The \ct{ht3d_slab} test cases]{Test of continuous heat flux boundary condition for 3-D heat transfer.} \label{fig:ht3d_slab} \end{figure} \FloatBarrier -\subsection{3-D Heat Diffusion in a Steel I-Beam (\texorpdfstring{\ct{ht3d\_ibeam}}{ht3d\_ibeam})} +\subsection{3-D Heat Diffusion in a Steel I-Beam (\texorpdfstring{\ct{ht3d_ibeam}}{ht3d_ibeam})} \label{ht3d_ibeam} The purpose of this test case is to compare FDS HT3D with a well-established commercial finite-element model (ANSYS) for a reasonably practical problem. We consider a steel I-beam cross-section $0.4 \;\si{m}$ on each side. The flanges are $6 \;\si{cm}$ thick and the web is $4 \;\si{cm}$ thick. The grid resolution for both FEM and FDS models is $\Delta x = 1 \;\si{cm}$. The thermal properties of the steel are taken to be constant: $k=45 \;\si{W/(m.K)}$, $\rho=7850 \;\si{kg/m^3}$, and $c = 0.60 \;\si{kJ/(kg.K)}$. The boundary conditions are adiabatic except for a hot patch on the front half of the bottom flange maintained at $800 \;\si{\degreeCelsius}$. The initial temperature of the steel is $20 \;\si{\degreeCelsius}$ and the case is run for 3600 s. Note that the FEM model is run with a time step comparable to the explicit stability criterion ($\Delta t \approx 1.7 \;\si{s}$) in order to yield time accurate results for comparison with FDS. @@ -5002,7 +5002,7 @@ \subsection{3-D Heat Diffusion in a Steel I-Beam (\texorpdfstring{\ct{ht3d\_ibea \FloatBarrier -\subsection{3-D Heat Diffusion in Thin Steel Plates (\texorpdfstring{\ct{ht3d\_network}}{ht3d\_network})} +\subsection{3-D Heat Diffusion in Thin Steel Plates (\texorpdfstring{\ct{ht3d_network}}{ht3d_network})} \label{ht3d_network} This case tests the 3-D solid phase solver for a network of thin steel plates. Consider the image in Fig.~\ref{fig:ht3d_network} which shows a collection of connected steel plates that are 20~cm wide and 1~cm thick. Two hot panels heat up the single plate to the left and the heat is conducted through the network of plates. Besides the left-most plate, all other plates are perfectly insulated. The plot on the right simply demonstrates that the temperature of the outer two of the four right-most extremities are the same, verifying that the distribution of heat is symmetric given a symmetric arrangement of plates. @@ -5014,7 +5014,7 @@ \subsection{3-D Heat Diffusion in Thin Steel Plates (\texorpdfstring{\ct{ht3d\_n \includegraphics[height=2.25in]{SCRIPT_FIGURES/ht3d_network_28800} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_network} \end{tabular*} -\caption[The \ct{ht3d\_network} test case]{(Left) A collection of thin steel plates are heated at the left and heat is conducted laterally along the plates. (Right) The plot shows the temperature at the outer right extremities after 8~h.} +\caption[The \ct{ht3d_network} test case]{(Left) A collection of thin steel plates are heated at the left and heat is conducted laterally along the plates. (Right) The plot shows the temperature at the outer right extremities after 8~h.} \label{fig:ht3d_network} \end{figure} @@ -5022,7 +5022,7 @@ \subsection{3-D Heat Diffusion in Thin Steel Plates (\texorpdfstring{\ct{ht3d\_n \FloatBarrier -\subsection{3-D Heat Diffusion in a Sphere (\texorpdfstring{\ct{ht3d\_sphere}}{ht3d\_sphere})} +\subsection{3-D Heat Diffusion in a Sphere (\texorpdfstring{\ct{ht3d_sphere}}{ht3d_sphere})} \label{sec:ht3d_sphere} \label{ht3d_sphere_96} \label{ht3d_sphere_48} @@ -5046,14 +5046,14 @@ \subsection{3-D Heat Diffusion in a Sphere (\texorpdfstring{\ct{ht3d\_sphere}}{h \centering \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/ht3d_sphere_profile} \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/ht3d_sphere_convergence1} -\caption[The \ct{ht3d\_sphere} temperature profiles and convergence rate]{(Left) Comparison of analytical and numerical radial profiles of temperature at various times. (Right) $L_{\infty}$ error in temperature at $t=180$~s for three levels of grid refinement.} +\caption[The \ct{ht3d_sphere} temperature profiles and convergence rate]{(Left) Comparison of analytical and numerical radial profiles of temperature at various times. (Right) $L_{\infty}$ error in temperature at $t=180$~s for three levels of grid refinement.} \label{fig:ht3d_sphere_time} \end{figure} \FloatBarrier -\subsection{3-D Heat Conduction in a Layered Solid (\texorpdfstring{\ct{ht3d\_pile}}{ht1d\_pile})} +\subsection{3-D Heat Conduction in a Layered Solid (\texorpdfstring{\ct{ht3d_pile}}{ht1d_pile})} \label{ht1d_pile} \label{ht3d_pile} @@ -5062,7 +5062,7 @@ \subsection{3-D Heat Conduction in a Layered Solid (\texorpdfstring{\ct{ht3d\_pi \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht1d_pile} \includegraphics[height=2.2in]{SCRIPT_FIGURES/ht3d_pile} -\caption[The \ct{ht1d\_pile} and \ct{ht3d\_pile} test cases]{Temperature profiles through a stack of three materials with different thermal conductivities. (Left) A 1-D calculation with non-uniform internal nodes. (Right) A 3-D calculation with uniform internal nodes.} +\caption[The \ct{ht1d_pile} and \ct{ht3d_pile} test cases]{Temperature profiles through a stack of three materials with different thermal conductivities. (Left) A 1-D calculation with non-uniform internal nodes. (Right) A 3-D calculation with uniform internal nodes.} \label{fig:ht3d_pile} \end{figure} @@ -5206,13 +5206,13 @@ \chapter{Pyrolysis} This chapter includes tests of the routines that calculate the thermal decomposition of materials. Solid surfaces can consist of multiple layers, and each layer can consist of multiple material components. Each material component may undergo several competing reactions, and each of these reactions may produce some other solid component (residue), gaseous fuel, and/or water vapor. -\section{Conservation of Pyrolyzed Mass (\texorpdfstring{\ct{surf\_mass\_conservation}}{surf\_mass\_conservation})} +\section{Conservation of Pyrolyzed Mass (\texorpdfstring{\ct{surf_mass_conservation}}{surf_mass_conservation})} The calculations described in this section check the conservation of mass produced by the pyrolysis algorithm. In the tests, four independent modeling options are varied: \begin{enumerate} \item The \ct{SURF} line can be associated with either a solid surface as designated by a \ct{VENT} line, or by solid particles as described by a \ct{PART} line. \item The \ct{SURF} geometry can be either \ct{CARTESIAN}, \ct{CYLINDRICAL}, or \ct{SPHERICAL}. -\item The \ct{MATL} can be either charring (non-zero \ct{NU\_RESIDUE}) or non-charring. +\item The \ct{MATL} can be either charring (non-zero \ct{NU_RESIDUE}) or non-charring. \item The pyrolysis product can be either the fuel gas defined by the mixture fraction model, or an additional gas species, defined by a \ct{SPEC} line. \end{enumerate} In most cases, the wall thickness (or radius for cylindrical and spherical geometries) is 0.01~m. The material density is 360~\si{kg/m^3} and the yield of gaseous products for the charring cases is 0.5, i.e., half of the original mass. For Cartesian surfaces, the mass loss per unit area is 1.8~\si{kg/m^2} for charring, and 3.6~\si{kg/m^2} for non-charring materials. For cylindrical surfaces, the volume per unit surface area is $r/2$, and thus the mass loss per unit area is $360(1-0.5) \times r/2$=0.9~\si{kg/m^2} for charring, and 1.8~\si{kg/m^2} for non-charring materials. For spherical surfaces, the volume per unit surface area is $r/3$, and thus the mass loss per unit area is $360(1-0.5) \times r/3$=0.6~\si{kg/m^2} for charring, and 1.2~\si{kg/m^2} for non-charring materials. @@ -5243,7 +5243,7 @@ \subsection{Pyrolysis at a Solid Surface} \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_char_spher_fuel} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_char_spher_gas} \end{tabular*} -\caption[The \ct{ surf\_mass\_vent\_char} test cases]{Comparison of analytical and predicted mass change for charring surfaces that are introduced as \ct{VENT}s.} +\caption[The \ct{ surf_mass_vent_char} test cases]{Comparison of analytical and predicted mass change for charring surfaces that are introduced as \ct{VENT}s.} \label{surf_mass_vent_char} \end{figure} @@ -5257,7 +5257,7 @@ \subsection{Pyrolysis at a Solid Surface} \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_nonchar_spher_fuel} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_nonchar_spher_gas} \end{tabular*} -\caption[The \ct{surf\_mass\_vent\_nonchar} test cases]{Comparison of analytical and predicted mass change for non-charring surfaces that are introduced as \ct{VENT}s.} +\caption[The \ct{surf_mass_vent_nonchar} test cases]{Comparison of analytical and predicted mass change for non-charring surfaces that are introduced as \ct{VENT}s.} \label{surf_mass_vent_nonchar} \end{figure} @@ -5293,7 +5293,7 @@ \subsubsection{Charring Particles} \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_part_char_spher_fuel} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_part_char_spher_gas} \end{tabular*} -\caption[The \ct{surf\_mass\_part\_char} test cases]{Comparison of analytical and predicted mass change for charring particle surfaces.} +\caption[The \ct{surf_mass_part_char} test cases]{Comparison of analytical and predicted mass change for charring particle surfaces.} \label{surf_mass_part_char} \end{figure} @@ -5307,7 +5307,7 @@ \subsubsection{Charring Particles} \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_part_nonchar_spher_fuel} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_part_nonchar_spher_gas} \end{tabular*} -\caption[The \ct{surf\_mass\_part\_nonchar} test cases]{Comparison of analytical and predicted mass change for non-charring particle surfaces.} +\caption[The \ct{surf_mass_part_nonchar} test cases]{Comparison of analytical and predicted mass change for non-charring particle surfaces.} \label{surf_mass_part_nonchar} \end{figure} @@ -5325,13 +5325,13 @@ \subsubsection{Particles that Generate Multiple Gas Species} \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_two_species_cart} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_two_species_cyl} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_two_species_spher} -\caption[The \ct{surf\_mass\_two\_species} test cases]{Comparison of analytical and predicted mass change for particles that generate water and fuel gas.} +\caption[The \ct{surf_mass_two_species} test cases]{Comparison of analytical and predicted mass change for particles that generate water and fuel gas.} \label{surf_mass_two_species} \end{figure} \clearpage -\subsection{Rate of Solid Particle Decomposition (\texorpdfstring{\ct{part\_baking\_soda}}{part\_baking\_soda})} +\subsection{Rate of Solid Particle Decomposition (\texorpdfstring{\ct{part_baking_soda}}{part_baking_soda})} \label{sec:solid_particle_decomposition} \label{part_baking_soda} @@ -5398,7 +5398,7 @@ \subsection*{Contracting Volume Reaction Model} r = r_0 (1-k \, t) \end{equation} -However, the FDS reaction equation is not set up to mimic the contracting volume model. Instead, for the same kinetics parameters, we can achieve the correct mass decay of the particle by holding the volume constant (\ct{ALLOW\_SHRINKING=F}) and adjusting the pre-exponential factor to account for the initial mass. By holding the volume constant, Eq.~(\ref{eq:R3mass}) may be written in terms of solid density for material $\alpha$ as follows, +However, the FDS reaction equation is not set up to mimic the contracting volume model. Instead, for the same kinetics parameters, we can achieve the correct mass decay of the particle by holding the volume constant (\ct{ALLOW_SHRINKING=F}) and adjusting the pre-exponential factor to account for the initial mass. By holding the volume constant, Eq.~(\ref{eq:R3mass}) may be written in terms of solid density for material $\alpha$ as follows, \begin{equation} \label{eq:R3rho} \frac{\d \rho_{s,\alpha}}{\d t} = - k \, \underbrace{3 \, \rho_{s,\alpha}(0)^{1/3}}_{\mathrm{adjustment \; factor}} \, \rho_{s,\alpha}^{2/3} @@ -5407,18 +5407,18 @@ \subsection*{Contracting Volume Reaction Model} \subsection*{Example} -We consider the contracting volume model applied to a spherical baking soda (NaHCO$_3$) particle. We take $A = 3.4e11 \times 3(2200)^{1/3} = 133e11$ 1/s (note: the initial density of the particle is $2200$ \si{kg/m^3}), $E_a = 103000$ J/mol, $r_0 = 2.5$ $\mu$m, and compare FDS with the analytical solution for the particle diameter with the rate constant evaluated at $T=[420, 450, 500]$ K. We set \ct{ALLOW\_SHRINKING=F} and we report the particle diameter as the initial diameter times the cube root of the density ratio, $d(t) = d_0 (\rho_{s}[t]/\rho_s[0])^{1/3}$. The results are shown in Fig.~\ref{fig:part_baking_soda} along with a comparison to the rate for the first-order model with the same Arrhenius parameters. It is worth noting that the contracting volume model leads to a significantly higher decay rate than the first-order reaction for the same set of parameters. +We consider the contracting volume model applied to a spherical baking soda (NaHCO$_3$) particle. We take $A = 3.4e11 \times 3(2200)^{1/3} = 133e11$ 1/s (note: the initial density of the particle is $2200$ \si{kg/m^3}), $E_a = 103000$ J/mol, $r_0 = 2.5$ $\mu$m, and compare FDS with the analytical solution for the particle diameter with the rate constant evaluated at $T=[420, 450, 500]$ K. We set \ct{ALLOW_SHRINKING=F} and we report the particle diameter as the initial diameter times the cube root of the density ratio, $d(t) = d_0 (\rho_{s}[t]/\rho_s[0])^{1/3}$. The results are shown in Fig.~\ref{fig:part_baking_soda} along with a comparison to the rate for the first-order model with the same Arrhenius parameters. It is worth noting that the contracting volume model leads to a significantly higher decay rate than the first-order reaction for the same set of parameters. \begin{figure}[!h] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/part_baking_soda_420K} \includegraphics[height=2.2in]{SCRIPT_FIGURES/part_baking_soda_450K} \includegraphics[height=2.2in]{SCRIPT_FIGURES/part_baking_soda_500K} -\caption[The \ct{part\_baking\_soda} test cases]{Comparison of analytical and predicted particle diameter for first-order and contracting volume solid phase reaction under isothermal conditions.} +\caption[The \ct{part_baking_soda} test cases]{Comparison of analytical and predicted particle diameter for first-order and contracting volume solid phase reaction under isothermal conditions.} \label{fig:part_baking_soda} \end{figure} -\section{Conservation of Pyrolyzed Energy (\texorpdfstring{\ct{matl\_e\_cons}}{matl\_e\_cons})} +\section{Conservation of Pyrolyzed Energy (\texorpdfstring{\ct{matl_e_cons}}{matl_e_cons})} \label{matl_e_cons} Nine simple test cases are created to verify the process of ensuring the \ct{MATL} reactions conserve energy. Each case is a cube 1~m on a side with 4 grid cells in each dimension. One or more materials and gas species are defined. All materials are defined with a density of 1~\si{kg/m^3}. All species are defined with a molecular weight of 1000~\si{g/mol}. This is done for convenience as it means that the heat of formation in \si{kJ/mol} is the same numerical values as the enthalpy in \si{kJ/kg}. For each material that is defined, a single wall cell \ct{VENT} is defined with a \ct{SURF} such that the wall cell contains 1~kg of material. The \ct{WALL ENTHALPY} is output for each wall cell. The cases are explained below with results shown in Figs.~\ref{fig:matl_e_cons1} and ~\ref{fig:matl_e_cons2}. @@ -5472,7 +5472,7 @@ \section{Conservation of Pyrolyzed Energy (\texorpdfstring{\ct{matl\_e\_cons}}{m \includegraphics[height=2.2in]{SCRIPT_FIGURES/matl_e_cons_5} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/matl_e_cons_6} \end{tabular*} - \caption[The \ct{matl\_e\_cons} test cases 1-6]{Comparison of analytical and predicted wall enthalpy for the \ct{matl\_e\_cons} test cases 1-6.} + \caption[The \ct{matl_e_cons} test cases 1-6]{Comparison of analytical and predicted wall enthalpy for the \ct{matl_e_cons} test cases 1-6.} \label{fig:matl_e_cons1} \end{figure} @@ -5483,11 +5483,11 @@ \section{Conservation of Pyrolyzed Energy (\texorpdfstring{\ct{matl\_e\_cons}}{m \includegraphics[height=2.2in]{SCRIPT_FIGURES/matl_e_cons_8} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/matl_e_cons_9} \end{tabular*} - \caption[The \ct{matl\_e\_cons} test cases 7-9]{Comparison of analytical and predicted wall enthalpy for the \ct{matl\_e\_cons} test cases 7-9.} + \caption[The \ct{matl_e_cons} test cases 7-9]{Comparison of analytical and predicted wall enthalpy for the \ct{matl_e_cons} test cases 7-9.} \label{fig:matl_e_cons2} \end{figure} -\section{Burning Rate of a Small Object (\texorpdfstring{\ct{cell\_burn\_away}}{cell\_burn\_away})} +\section{Burning Rate of a Small Object (\texorpdfstring{\ct{cell_burn_away}}{cell_burn_away})} \label{cell_burn_away} In FDS, it is assumed that heat conduction and pyrolysis within solids are functions of depth only. This can be problematic in cases where entire solid obstructions burn away. In this example, a single grid cell, 4~cm on a side, is made up of a material with density $\rho_{\rm s}=50$~\si{kg/m^3} and constant reaction rate, $r_{\rm s}=0.05$~s$^{-1}$. The burning rate of the single grid cell, $\dm$, is given by: @@ -5498,18 +5498,18 @@ \section{Burning Rate of a Small Object (\texorpdfstring{\ct{cell\_burn\_away}}{ \be \dm = m \, r_{\rm s} = m_0 \, r_{\rm s} \, {\rm e}^{-r_{\rm s} t} \ee -Figure~\ref{cell_burn_away_fig} displays the computed and analytical burning rate. Note that the burning rate is proportional to the mass and the mass decays exponentially to zero in this case because we have specified the \ct{THICKNESS} to be $V/A$ and set the \ct{BULK\_DENSITY} to be 50~\si{kg/m^3} on the \ct{OBST} line defining the single solid grid cell. +Figure~\ref{cell_burn_away_fig} displays the computed and analytical burning rate. Note that the burning rate is proportional to the mass and the mass decays exponentially to zero in this case because we have specified the \ct{THICKNESS} to be $V/A$ and set the \ct{BULK_DENSITY} to be 50~\si{kg/m^3} on the \ct{OBST} line defining the single solid grid cell. \begin{figure}[!htb] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/cell_burn_away} -\caption[The \ct{cell\_burn\_away} test case]{Burning rate of a single grid cell with fixed reaction rate.} +\caption[The \ct{cell_burn_away} test case]{Burning rate of a single grid cell with fixed reaction rate.} \label{cell_burn_away_fig} \end{figure} \section{Evaporation of a Liquid Surface} -\subsection{Mass Conservation (\texorpdfstring{\ct{surf\_mass\_vent\_liquid}}{surf\_mass\_vent\_liquid})} +\subsection{Mass Conservation (\texorpdfstring{\ct{surf_mass_vent_liquid}}{surf_mass_vent_liquid})} \label{surf_mass_vent_liquid_fuel} \label{surf_mass_vent_liquid_fuel_nonconforming} @@ -5520,13 +5520,13 @@ \subsection{Mass Conservation (\texorpdfstring{\ct{surf\_mass\_vent\_liquid}}{su \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_liquid_fuel} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/surf_mass_vent_liquid_fuel_nonconforming} \end{tabular*} -\caption[The \ct{surf\_mass\_vent\_liquid\_fuel} test cases]{Comparison of analytical and predicted mass change for a liquid surface.} +\caption[The \ct{surf_mass_vent_liquid_fuel} test cases]{Comparison of analytical and predicted mass change for a liquid surface.} \label{surf_mass_vent_liquid} \end{figure} \FloatBarrier -\subsection{Evaporation Rate (\texorpdfstring{\ct{water\_pool}}{water\_pool})} +\subsection{Evaporation Rate (\texorpdfstring{\ct{water_pool}}{water_pool})} \label{water_pool} In this example, air with an $\rm{RH}=25$~\% relative humidity and temperature $T_{\rm a}=305$~K flows with velocity $U=0.15$~m/s over an $L=1.2$~m long, $W=1$~m wide pool of water with a surface temperature of $T_{\rm s}=293$~K. The evaporation rate of water is given by the following relation: @@ -5559,12 +5559,12 @@ \subsection{Evaporation Rate (\texorpdfstring{\ct{water\_pool}}{water\_pool})} \ee where $p_0=101325$~Pa. -Note that \ct{ADJUST\_H=F} is set in the input file to make the calculation of the analytical result easier. +Note that \ct{ADJUST_H=F} is set in the input file to make the calculation of the analytical result easier. \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_pool} -\caption[The \ct{water\_pool} test case]{Evaporation rate of a pool of water.} +\caption[The \ct{water_pool} test case]{Evaporation rate of a pool of water.} \label{water_pool_fig} \end{figure} @@ -5587,10 +5587,10 @@ \section{Change in Surface Emissivity (\texorpdfstring{\ct{emissivity}}{emissivi -\section{Shrinking and swelling materials (\texorpdfstring{\ct{shrink\_swell}}{shrink\_swell})} +\section{Shrinking and swelling materials (\texorpdfstring{\ct{shrink_swell}}{shrink_swell})} \label{shrink_swell} -A single layer of a multi-component material contains reacting material (1) and an inert matrix (2). If the product material (3) of the reaction is of higher density than the reactant ($\rho_3 > \rho_1$), the layer thickness $\Delta$ should shrink. If the product density is lower than the reactant's density ($\rho_3 < \rho_1$) the layer should swell (increase) in thickness. If the inert material has a static matrix structure (\ct{ALLOW\_SHRINKING=.FALSE.} or \ct{ALLOW\_SWELLING=.FALSE.}) the layer thickness should not change. The parameters of the six test cases are shown in the following table. Figure~\ref{shrink_swell2} shows the surface densities, which obviously should not change, and the surface thicknesses over the time of the simulation. +A single layer of a multi-component material contains reacting material (1) and an inert matrix (2). If the product material (3) of the reaction is of higher density than the reactant ($\rho_3 > \rho_1$), the layer thickness $\Delta$ should shrink. If the product density is lower than the reactant's density ($\rho_3 < \rho_1$) the layer should swell (increase) in thickness. If the inert material has a static matrix structure (\ct{ALLOW_SHRINKING=.FALSE.} or \ct{ALLOW_SWELLING=.FALSE.}) the layer thickness should not change. The parameters of the six test cases are shown in the following table. Figure~\ref{shrink_swell2} shows the surface densities, which obviously should not change, and the surface thicknesses over the time of the simulation. \begin{table}[!htb] \centering @@ -5619,7 +5619,7 @@ \section{Shrinking and swelling materials (\texorpdfstring{\ct{shrink\_swell}}{s \includegraphics[height=2.2in]{SCRIPT_FIGURES/shrink_thickness} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/swell_thickness} \\ \end{tabular*} -\caption[The \ct{shrink\_swell} test case]{Testing the shrinking and swelling surfaces.} +\caption[The \ct{shrink_swell} test case]{Testing the shrinking and swelling surfaces.} \label{shrink_swell2} \end{figure} @@ -5647,7 +5647,7 @@ \section{Enthalpy of Solid Materials (\texorpdfstring{\ct{enthalpy}}{enthalpy})} -\section{A Simple Two-Step Pyrolysis Example (\texorpdfstring{\ct{two\_step\_solid\_reaction}}{two\_step\_solid\_reaction})} +\section{A Simple Two-Step Pyrolysis Example (\texorpdfstring{\ct{two_step_solid_reaction}}{two_step_solid_reaction})} \label{two_step_solid_reaction} Before considering actual experimental measurements, it is necessary to check the accuracy of the ordinary differential @@ -5671,7 +5671,7 @@ \section{A Simple Two-Step Pyrolysis Example (\texorpdfstring{\ct{two\_step\_sol \begin{figure}[!htb] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/two_step_solid_reaction} -\caption[The \ct{two\_step\_solid\_reaction} test case]{Comparison of a two-step solid pyrolysis calculation with an analytical solution.} +\caption[The \ct{two_step_solid_reaction} test case]{Comparison of a two-step solid pyrolysis calculation with an analytical solution.} \label{fig:two_step_solid_reaction} \end{figure} @@ -5736,7 +5736,7 @@ \subsection{General Theory} \ee The examples in the following section describe how to interpret output from bench-scale material tests. -\subsection{Interpreting TGA Data (\texorpdfstring{\ct{tga\_sample}}{tga\_sample})} +\subsection{Interpreting TGA Data (\texorpdfstring{\ct{tga_sample}}{tga_sample})} \label{tga_sample} The solid curve of the left hand plot of Fig.~\ref{tga_sample_plot} shows the measured normalized mass of a small solid sample undergoing heating at a rate of 5~$^\circ$C/min in the TGA apparatus. The solid curve of the right hand plot is the mass loss rate, or minus the first derivative of the plot on the left. The goal of this example is to obtain the kinetic parameters, $E_\alpha$ and $A_\alpha$, from Eqs.~(\ref{E_formula}) and (\ref{A_formula}) to solve numerically the ODE, Eqs.~(\ref{dYdt}) and (\ref{dYrdt}). @@ -5748,7 +5748,7 @@ \subsection{Interpreting TGA Data (\texorpdfstring{\ct{tga\_sample}}{tga\_sample \end{figure} The first decision to make is the number of reactions. Usually, this corresponds to the number of peaks in the mass loss rate curve, but for realistic cases, some judgment is needed. In this example, it is assumed that there are two material components, each of which is undergoing a single reaction in the neighborhood of a certain temperature. By inspection, $T_{1,{\rm p}}=300 \; ^\circ$C and $T_{2,{\rm p}}=500 \; ^\circ$C. The next piece of information from the measurement is the residue fraction, which is obtained from the plot on the left, $\nu_{\rm r}=0.53$. From Eq.~(\ref{rr_calc}), the reaction rates are obtained by converting the peak mass loss rates from the plot on the right: $r_{1,{\rm p}}=0.00045/0.47$~s$^{-1}$ and $r_{2,{\rm p}}=0.0001/0.47$~s$^{-1}$. Finally, the initial mass fractions of the two components are estimated from the relative areas under the peaks in the right hand plot. In this case, $Y_{1,0}=0.6$ and $Y_{2,0}=0.4$. -In the FDS input file, \ct{tga\_sample.fds}, this information is conveyed via the following lines: +In the FDS input file, \ct{tga_sample.fds}, this information is conveyed via the following lines: \begin{lstlisting} &SURF ID = 'SAMPLE' ... @@ -5777,13 +5777,13 @@ \subsection{Interpreting TGA Data (\texorpdfstring{\ct{tga\_sample}}{tga\_sample NU_MATL = 0.53 MATL_ID = 'residue' / \end{lstlisting} -Note that \ct{REFERENCE\_RATE}, the FDS input parameter, represents the quantity, $r_{\alpha,{\rm p}}/Y_{\alpha,0}$. Note also that both material components have the same residue yield, \ct{NU\_MATL}. Solely from TGA data, it is not possible to determine how many unique material components there are, or what the reaction sequence is. The point of this exercise is simply to get FDS to mimic the total mass loss rate curve. +Note that \ct{REFERENCE_RATE}, the FDS input parameter, represents the quantity, $r_{\alpha,{\rm p}}/Y_{\alpha,0}$. Note also that both material components have the same residue yield, \ct{NU_MATL}. Solely from TGA data, it is not possible to determine how many unique material components there are, or what the reaction sequence is. The point of this exercise is simply to get FDS to mimic the total mass loss rate curve. -\subsection{Effect of the TGA Heating Rate (\texorpdfstring{\ct{birch\_tga}}{birch\_tga})} +\subsection{Effect of the TGA Heating Rate (\texorpdfstring{\ct{birch_tga}}{birch_tga})} \label{birch_tga} -This is an example of a comparison of a candidate solid phase model with TGA data that shows the effect of the sample heating rate. The sample cases called \ct{birch\_tga\_1step\_2} and \ct{birch\_tga\_1step\_20} simulate two standard TGA experiments in which small samples of birch wood are heated up slowly at constant rates of 2~\si{\degree C}/min and 20~\si{\degree C}/min, respectively. The model of the wood consists of only one reaction that converts virgin wood to char and fuel gases. There is also a reaction in the simulation that does nothing more than evaporate the small amount of moisture in the wood. This evaporation is evident in Fig.~\ref{fig_birch_tga} near the temperature of 100~\si{\degree C}. +This is an example of a comparison of a candidate solid phase model with TGA data that shows the effect of the sample heating rate. The sample cases called \ct{birch_tga_1step_2} and \ct{birch_tga_1step_20} simulate two standard TGA experiments in which small samples of birch wood are heated up slowly at constant rates of 2~\si{\degree C}/min and 20~\si{\degree C}/min, respectively. The model of the wood consists of only one reaction that converts virgin wood to char and fuel gases. There is also a reaction in the simulation that does nothing more than evaporate the small amount of moisture in the wood. This evaporation is evident in Fig.~\ref{fig_birch_tga} near the temperature of 100~\si{\degree C}. \begin{figure}[!htb] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/birch_tga} @@ -5791,7 +5791,7 @@ \subsection{Effect of the TGA Heating Rate (\texorpdfstring{\ct{birch\_tga}}{bir \end{figure} -\subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\_TGA})} +\subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle_TGA}}{Needle_TGA})} \label{Needle_TGA} In this section, kinetic parameters for a longleaf pine needle are derived based on a set of TGA measurements\footnote{TGA data provided by the Forest Products Laboratory of the U.S. Forest Service}. Cases~A and B listed in Table~\ref{Needle_TGA_table} have been used to derive the kinetic parameters for all eight cases. The mass and mass loss rate curves for all eight cases are shown in Figs.~\ref{Needle_TGA_plot_A_B} through \ref{Needle_TGA_plot_G_H} on the following pages. @@ -5821,7 +5821,7 @@ \subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_A_MLR_temp} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_B_MLR_temp} \end{tabular*} -\caption[Needle\_TGA calibration curves]{Mass loss rates for Cases A (left) and B (right). These cases are used to determine the kinetic parameters for all eight cases, A-H.} +\caption[\ct{Needle_TGA} calibration curves]{Mass loss rates for Cases A (left) and B (right). These cases are used to determine the kinetic parameters for all eight cases, A-H.} \label{Needle_TGA_plot_A_B_temp} \end{figure} @@ -5835,7 +5835,7 @@ \subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_A_MLR} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_B_MLR} \end{tabular*} -\caption[Results of pine Needle\_TGA calibration exercise, Cases A and B]{Results of TGA calibration exercise for a pine needle, Cases A (left) and B (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} +\caption[Results of pine \ct{Needle_TGA} calibration exercise, Cases A and B]{Results of TGA calibration exercise for a pine needle, Cases A (left) and B (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} \label{Needle_TGA_plot_A_B} \end{figure} @@ -5848,7 +5848,7 @@ \subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_C_MLR} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_D_MLR} \end{tabular*} -\caption[Results of pine Needle\_TGA calibration exercise, Cases C and D]{Results of TGA calibration exercise for a pine needle, Cases C (left) and D (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} +\caption[Results of pine \ct{Needle_TGA} calibration exercise, Cases C and D]{Results of TGA calibration exercise for a pine needle, Cases C (left) and D (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} \label{Needle_TGA_plot_C_D} \end{figure} @@ -5861,7 +5861,7 @@ \subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_E_MLR} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_F_MLR} \end{tabular*} -\caption[Results of pine Needle\_TGA calibration exercise, Cases E and F]{Results of TGA calibration exercise for a pine needle, Cases E (left) and F (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} +\caption[Results of pine \ct{Needle_TGA} calibration exercise, Cases E and F]{Results of TGA calibration exercise for a pine needle, Cases E (left) and F (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} \label{Needle_TGA_plot_E_F} \end{figure} @@ -5874,28 +5874,28 @@ \subsection{TGA for a Charring Sample (\texorpdfstring{\ct{Needle\_TGA}}{Needle\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_G_MLR} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Needle_TGA_H_MLR} \end{tabular*} -\caption[Results of pine Needle\_TGA calibration exercise, Cases G and H]{Results of TGA calibration exercise for a pine needle, Cases G (left) and H (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} +\caption[Results of pine \ct{Needle_TGA} calibration exercise, Cases G and H]{Results of TGA calibration exercise for a pine needle, Cases G (left) and H (right). (Top) Sample temperature vs time. (Middle) Sample mass fraction vs time. (Bottom) Sample mass loss rate vs time.} \label{Needle_TGA_plot_G_H} \end{figure} \FloatBarrier -\subsection{TGA of various Mediterranean vegetation (\texorpdfstring{\ct{Morvan\_TGA}}{Morvan\_TGA})} +\subsection{TGA of various Mediterranean vegetation (\texorpdfstring{\ct{Morvan_TGA}}{Morvan_TGA})} \label{Morvan_TGA} -In this section we analyze the TGA data for various Mediterranean vegetation species presented in Morvan and Dupuy, 2004 \cite{Morvan:CF2004}. The FDS feature \ct{TGA\_ANALYSIS=T} was used with the model set up with 10 \% moisture for the vegetation model. The heating rate is 1.6 \si{\degreeCelsius}/min, as reported in the paper. The reference temperature and pyrolysis range approach was used to tune the model to the data. The parameters can be found in the input file \ct{Verification/WUI/Morvan\_TGA.fds}. Note that an unusually high char fraction of 50 \% is needed to match the TGA data. The results are shown in Fig.~\ref{fig:Morvan_TGA}. +In this section we analyze the TGA data for various Mediterranean vegetation species presented in Morvan and Dupuy, 2004 \cite{Morvan:CF2004}. The FDS feature \ct{TGA_ANALYSIS=T} was used with the model set up with 10 \% moisture for the vegetation model. The heating rate is 1.6 \si{\degreeCelsius}/min, as reported in the paper. The reference temperature and pyrolysis range approach was used to tune the model to the data. The parameters can be found in the input file \ct{Verification/WUI/Morvan_TGA.fds}. Note that an unusually high char fraction of 50 \% is needed to match the TGA data. The results are shown in Fig.~\ref{fig:Morvan_TGA}. \begin{figure}[h] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \includegraphics[height=2.2in]{SCRIPT_FIGURES/Morvan_TGA_Total_Mass} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/Morvan_TGA_Total_MLR} \end{tabular*} -\caption[Results of Morvan\_TGA analysis]{Results of performing the FDS TGA analysis on the data for various Mediterranean vegetation presented in Morvan and Dupuy, 2004 \cite{Morvan:CF2004}. (Left) Total mass vs time. (Right) Mass loss rate vs time---the Morvan and Dupuy data were Savitsky-Golay filtered and the derivative of the resulting curve was normalized to give the dashed line.} +\caption[Results of \ct{Morvan_TGA} analysis]{Results of performing the FDS TGA analysis on the data for various Mediterranean vegetation presented in Morvan and Dupuy, 2004 \cite{Morvan:CF2004}. (Left) Total mass vs time. (Right) Mass loss rate vs time---the Morvan and Dupuy data were Savitsky-Golay filtered and the derivative of the resulting curve was normalized to give the dashed line.} \label{fig:Morvan_TGA} \end{figure} -\subsection{Complex multi-component pyrolysis with oxidative reactions (\texorpdfstring{\ct{pine\_wood\_TGA}}{pine\_wood\_TGA})} +\subsection{Complex multi-component pyrolysis with oxidative reactions (\texorpdfstring{\ct{pine_wood_TGA}}{pine_wood_TGA})} \label{pine_wood_TGA} These cases test the formulation of the solid-phase reaction model for multiple oxidative reactions which are not assumed to be first order. The generalized reaction rate for material $i$ undergoing its $j$th reaction ($r_{ij}$) is as follows: @@ -5950,7 +5950,7 @@ \subsection{Complex multi-component pyrolysis with oxidative reactions (\texorpd \includegraphics[height=2.2in]{SCRIPT_FIGURES/pine_wood_TGA_1C_rate} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/pine_wood_TGA_1C_oxygen} \end{tabular*} -\caption[Results of 1-component pine\_wood\_TGA]{Results of performing the FDS TGA analysis on the Anca-Couce~\cite{Anca-Couce:2012} pine wood data, assuming one original component to the wood. (Left) Effect of heating rate at \qty{20.5}{\percent} oxygen. (Right) Effect of oxygen concentration at a \qty{5}{\kelvin\per\minute} heating rate.} +\caption[Results of 1-component \ct{pine_wood_TGA}]{Results of performing the FDS TGA analysis on the Anca-Couce~\cite{Anca-Couce:2012} pine wood data, assuming one original component to the wood. (Left) Effect of heating rate at \qty{20.5}{\percent} oxygen. (Right) Effect of oxygen concentration at a \qty{5}{\kelvin\per\minute} heating rate.} \label{fig:pine_wood_TGA_3C} \end{figure} @@ -5960,7 +5960,7 @@ \subsection{Complex multi-component pyrolysis with oxidative reactions (\texorpd \includegraphics[height=2.2in]{SCRIPT_FIGURES/pine_wood_TGA_3C_rate} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/pine_wood_TGA_3C_oxygen} \end{tabular*} -\caption[Results of 3-component pine\_wood\_TGA]{Results of performing the FDS TGA analysis on the Anca-Couce~\cite{Anca-Couce:2012} pine wood data, assuming one original component to the wood. (Left) Effect of heating rate at \qty{20.5}{\percent} oxygen. (Right) Effect of oxygen concentration at a \qty{5}{\kelvin\per\minute} heating rate.} +\caption[Results of 3-component \ct{pine_wood_TGA}]{Results of performing the FDS TGA analysis on the Anca-Couce~\cite{Anca-Couce:2012} pine wood data, assuming one original component to the wood. (Left) Effect of heating rate at \qty{20.5}{\percent} oxygen. (Right) Effect of oxygen concentration at a \qty{5}{\kelvin\per\minute} heating rate.} \label{fig:pine_wood_TGA_1C} \end{figure} @@ -5968,7 +5968,7 @@ \subsection{Complex multi-component pyrolysis with oxidative reactions (\texorpd \newpage -\subsection{Interpreting MCC Data (\texorpdfstring{\ct{cable\_XX\_mcc}}{cable\_XX\_mcc})} +\subsection{Interpreting MCC Data (\texorpdfstring{\ct{cable_XX_mcc}}{cable_XX_mcc})} \label{cable_11_mcc} \label{cable_23_insulation} \label{cable_701_insulation} @@ -6023,7 +6023,7 @@ \subsection{Interpreting MCC Data (\texorpdfstring{\ct{cable\_XX\_mcc}}{cable\_X MATL_ID = 'char' NU_SPEC = 0.51 / \end{lstlisting} -Only the relevant parameters are shown. The other parameters are not relevant in this exercise. Note that \ct{REFERENCE\_TEMPERATURE} is $T_{\alpha,{\rm p}}$ in units of \si{\degreeCelsius}. \ct{REFERENCE\_RATE} is actually $r_{\alpha,{\rm p}}/Y_{\alpha,0}$, in units of s$^{-1}$. \ct{HEATING\_RATE} is $\beta$ in units of \si{\degree C}/min. \ct{NU\_MATL} is $\nu_{\rm r}$ and \ct{NU\_SPEC} is ($1-\nu_{\rm r}$). Table~\ref{cable_parameters} lists all of the kinetic parameters for the cable insulation and jacket materials. The peak temperatures are easy to estimate, and the values of $r_{p,i}/Y_{0,i}$ can be fine-tuned to closely match the data. Note that it is possible to compute values of $A_i$ and $E_i$ and input them directly into FDS, rather than inputting those listed in the table. However, the values of $A_i$ and $E_i$ are fairly large numbers and have little meaning in their own. +Only the relevant parameters are shown. The other parameters are not relevant in this exercise. Note that \ct{REFERENCE_TEMPERATURE} is $T_{\alpha,{\rm p}}$ in units of \si{\degreeCelsius}. \ct{REFERENCE_RATE} is actually $r_{\alpha,{\rm p}}/Y_{\alpha,0}$, in units of s$^{-1}$. \ct{HEATING_RATE} is $\beta$ in units of \si{\degree C}/min. \ct{NU_MATL} is $\nu_{\rm r}$ and \ct{NU_SPEC} is ($1-\nu_{\rm r}$). Table~\ref{cable_parameters} lists all of the kinetic parameters for the cable insulation and jacket materials. The peak temperatures are easy to estimate, and the values of $r_{p,i}/Y_{0,i}$ can be fine-tuned to closely match the data. Note that it is possible to compute values of $A_i$ and $E_i$ and input them directly into FDS, rather than inputting those listed in the table. However, the values of $A_i$ and $E_i$ are fairly large numbers and have little meaning in their own. \begin{table}[!htb] \centering @@ -6042,16 +6042,16 @@ \subsection{Interpreting MCC Data (\texorpdfstring{\ct{cable\_XX\_mcc}}{cable\_X \newpage \section{Scaling Pyrolysis (SPyro) Model \\ -(\texorpdfstring{\ct{spyro\_cone\_demo\_2} and \ct{spyro\_cone\_demo\_3}}{spyro\_cone\_demo\_2 and spyro\_cone\_demo\_3})} +(\texorpdfstring{\ct{spyro_cone_demo_2} and \ct{spyro_cone_demo_3}}{spyro_cone_demo_2 and spyro_cone_demo_3})} \label{spyro_cone_demo_2} \label{spyro_cone_demo_3} -This section uses two cases to test a model for scaling heat release rate data from a cone calorimeter to heat fluxes other than the one used during the cone test. The first case tests the interpolation of a single cone curve to a heat flux different than the one the sample was tested at. A surface is assigned an \ct{HRRPUA} and \ct{RAMP\_Q} from an inert cone test performed at 50~\si{kW/m^2}. The surface is given an \ct{IGNITION\_TEMPERATURE} of 0~$^\circ$C so it ignites immediately. The surface is exposed to a sawtooth \ct{EXTERNAL\_FLUX} that varies between 10~\si{kW/m^2} and 110~\si{kW/m^2}. The results are shown below in Fig~\ref{fig:spyro_cone_demo_2}. +This section uses two cases to test a model for scaling heat release rate data from a cone calorimeter to heat fluxes other than the one used during the cone test. The first case tests the interpolation of a single cone curve to a heat flux different than the one the sample was tested at. A surface is assigned an \ct{HRRPUA} and \ct{RAMP_Q} from an inert cone test performed at 50~\si{kW/m^2}. The surface is given an \ct{IGNITION_TEMPERATURE} of 0~$^\circ$C so it ignites immediately. The surface is exposed to a sawtooth \ct{EXTERNAL_FLUX} that varies between 10~\si{kW/m^2} and 110~\si{kW/m^2}. The results are shown below in Fig~\ref{fig:spyro_cone_demo_2}. \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/spyro_cone_demo_2} - \caption[Check of the Scaling Pyrolysis (SPyro) model (the \ct{spyro\_cone\_demo\_2} case)]{Extrapolating a single set of cone data to a time varying heat flux (the \ct{spyro\_cone\_demo\_2} case).} + \caption[Check of the Scaling Pyrolysis (SPyro) model (the \ct{spyro_cone_demo_2} case)]{Extrapolating a single set of cone data to a time varying heat flux (the \ct{spyro_cone_demo_2} case).} \label{fig:spyro_cone_demo_2} \end{figure} @@ -6060,19 +6060,19 @@ \section{Scaling Pyrolysis (SPyro) Model \\ \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/spyro_cone_demo_3} - \caption[Check of the Scaling Pyrolysis (SPyro) model (the \ct{spyro\_cone\_demo\_3} case)]{Interpolating a set of cone data to an intermediate surface thickness and exposure (the \ct{spyro\_cone\_demo\_3} case).} + \caption[Check of the Scaling Pyrolysis (SPyro) model (the \ct{spyro_cone_demo_3} case)]{Interpolating a set of cone data to an intermediate surface thickness and exposure (the \ct{spyro_cone_demo_3} case).} \label{fig:spyro_cone_demo_3} \end{figure} -\section{Melting Ice Cube (\texorpdfstring{\ct{ice\_cube}}{ice\_cube})} +\section{Melting Ice Cube (\texorpdfstring{\ct{ice_cube}}{ice_cube})} \label{ice_cube} -This section tests the ability for a \ct{MATL} reaction to produce particles. A 10~cm cube (1 kg) block of ice is defined with a 10~\si{kW/m^2} \ct{EXTERNAL\_FLUX}. The mass of water drops produced is tracked. The results are shown below in Fig~\ref{fig:ice_cube}. +This section tests the ability for a \ct{MATL} reaction to produce particles. A 10~cm cube (1 kg) block of ice is defined with a 10~\si{kW/m^2} \ct{EXTERNAL_FLUX}. The mass of water drops produced is tracked. The results are shown below in Fig~\ref{fig:ice_cube}. \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/ice_cube} - \caption[Check of the particle production by surface reaction feature (the \ct{ice\_cube} case)]{Check of the particle production by surface reaction feature.} + \caption[Check of the particle production by surface reaction feature (the \ct{ice_cube} case)]{Check of the particle production by surface reaction feature.} \label{fig:ice_cube} \end{figure} @@ -6086,7 +6086,7 @@ \section{Particle and Droplet Drag} The cases in this section test accuracy, stability, and momentum conservation for the general case of momentum transfer between solid particles or liquid droplets and air. Details of the FDS integration scheme are given in the Technical Reference Guide~\cite{FDS_Tech_Guide}. In short, we find an analytical solution for the case of binary fluid-particle interaction and apply this solution to the case of multiple particles by enforcing total momentum conservation within a fluid cell. The resulting scheme is guaranteed to be stable because the fluid velocity cannot overshoot the cell equilibrium velocity (total momentum of fluid and particles divided by the total mass). -\subsection{Dragless Particle (\texorpdfstring{\ct{cannon\_ball}}{cannon\_ball})} +\subsection{Dragless Particle (\texorpdfstring{\ct{cannon_ball}}{cannon_ball})} \label{cannon_ball} This simple case tests the particle transport scheme in the absence of drag. A 1~cm diameter sphere is shot from ground level with an initial velocity of $(u_0,v_0,w_0)=(10,10,10)$~m/s. The ball is expected to fall back to the ground in $t=2\, w_0/g\approx 2.04$~s at which time it will have travelled a horizontal distance of $d=t \sqrt{u_0^2+v_0^2}\approx 28.86$~m. The grid has a resolution of 1~m, and the default time step is 0.5~s. Thus, the particle trajectory is computed via only 5 calls to particle transport routine. However, the integration is performed using sub-steps such that the particle cannot cross farther than a single grid cell in a sub-step. This ensures an accurate computation of the trajectory, as shown in Fig.~\ref{cannon_ball_fig}. @@ -6094,12 +6094,12 @@ \subsection{Dragless Particle (\texorpdfstring{\ct{cannon\_ball}}{cannon\_ball}) \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/cannon_ball} -\caption[The \ct{cannon\_ball} case]{Horizontal distance travelled by a dragless sphere as a function of time.} +\caption[The \ct{cannon_ball} case]{Horizontal distance travelled by a dragless sphere as a function of time.} \label{cannon_ball_fig} \end{figure} -\subsection{Particles Swept Up in a Free Stream (\texorpdfstring{\ct{fluid\_part\_mom}}{fluid\_part\_mom})} +\subsection{Particles Swept Up in a Free Stream (\texorpdfstring{\ct{fluid_part_mom}}{fluid_part_mom})} Consider a 1~m square duct that is 10~m long. The boundary conditions are periodic in the stream-wise direction and free slip along the inside walls. The fluid velocity is initialized to be 10~m/s. A mono-disperse distribution of 1000 particles is initialized with zero velocity and random positions in the first cubic meter of the duct. Gravity is set to zero. As the case proceeds momentum is exchanged between the fluid and the particles. The results for all three tests are shown in Fig.~\ref{fig_fluid_part_mom}. On the top, the green symbols represent the total momentum of the system, which, as can be seen, is conserved. The fluid (blue) and the particle (red) momenta are closely following the analytical solution (solid lines) which is the basis of the scheme. The plot on the bottom shows the fluid (blue) and particle (red) velocities compared to the system equilibrium velocity (green dashed line). By construction of the method, both the fluid and the particle velocities are approaching the equilibrium velocity at long times. @@ -6107,12 +6107,12 @@ \subsection{Particles Swept Up in a Free Stream (\texorpdfstring{\ct{fluid\_part \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/fluid_part_momentum}\\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/fluid_part_velocity} -\caption[Test of fluid-particle momentum transfer for non-stationary particles]{Outputs of the \ct{fluid\_part\_mom} cases. (Top) The fluid momentum (blue), the particle momentum (red), and the total momentum (green) are plotted for each coordinate direction, $x$ (circles), $y$ (inverted triangles), and $z$ (plus symbols). The analytical solutions for the fluid and particle equations are shown by the solid blue and red lines, respectively. The total momentum should be constant, as indicated by the green symbols. (Bottom) The fluid (blue) and particle (red) velocities are plotted for each direction. Also, the equilibrium velocity (total momentum [fluid plus particles] divided by the total mass) is shown as a dashed green line. Stability of the momentum exchange is guaranteed because, by construction, the fluid velocity cannot overshoot the equilibrium velocity; the fluid velocity relaxes toward it.} +\caption[Test of fluid-particle momentum transfer for non-stationary particles]{Outputs of the \ct{fluid_part_mom} cases. (Top) The fluid momentum (blue), the particle momentum (red), and the total momentum (green) are plotted for each coordinate direction, $x$ (circles), $y$ (inverted triangles), and $z$ (plus symbols). The analytical solutions for the fluid and particle equations are shown by the solid blue and red lines, respectively. The total momentum should be constant, as indicated by the green symbols. (Bottom) The fluid (blue) and particle (red) velocities are plotted for each direction. Also, the equilibrium velocity (total momentum [fluid plus particles] divided by the total mass) is shown as a dashed green line. Stability of the momentum exchange is guaranteed because, by construction, the fluid velocity cannot overshoot the equilibrium velocity; the fluid velocity relaxes toward it.} \label{fig_fluid_part_mom} \end{figure} -\subsection{Particles Slowing Down a Gas Flow (\texorpdfstring{\ct{particle\_drag}}{particle\_drag})} +\subsection{Particles Slowing Down a Gas Flow (\texorpdfstring{\ct{particle_drag}}{particle_drag})} \label{particle_drag} \label{particle_drag_U10_N16} \label{particle_drag_U50_N16} @@ -6121,7 +6121,7 @@ \subsection{Particles Slowing Down a Gas Flow (\texorpdfstring{\ct{particle\_dra \label{particle_drag_U100_N1600} \label{particle_drag_U150_N1600} -The particle drag test cases consider a 1~m by 1~m by 1~m channel with periodic boundary conditions on the $x$-faces and \ct{FREE\_SLIP} walls on $y$- and $z$-faces. Static droplets are placed in the center of the channel, one particle per computational cell, so that they form a surface perpendicular to the flow direction. Gravity is set to zero. Due to the symmetry of the problem, the flow is one dimensional. Assuming that the droplets are of uniform diameter and the drag coefficient and gas density are constant, the velocity in the channel decays according to +The particle drag test cases consider a 1~m by 1~m by 1~m channel with periodic boundary conditions on the $x$-faces and \ct{FREE_SLIP} walls on $y$- and $z$-faces. Static droplets are placed in the center of the channel, one particle per computational cell, so that they form a surface perpendicular to the flow direction. Gravity is set to zero. Due to the symmetry of the problem, the flow is one dimensional. Assuming that the droplets are of uniform diameter and the drag coefficient and gas density are constant, the velocity in the channel decays according to \be u=\frac{u_{0}}{1 + B \, u_{0} \, t} \quad ; \quad B=\frac{1}{2}\frac{\sum \, C_{D} \, \pi \, r_{d}^{2}}{V} \ee In the above, $V$ is the volume of the channel, $r_{d}$ is the droplet radius, $C_{D}$ is the droplet drag coefficient, and $u$ is the gas velocity in the $x$-direction. The summation is over all $N$ particles. The common parameters used in all the simulations are: $C_{\rm d}=10$, $r_{\rm d}=0.005$~m. The initial velocity, $u_0$, for Cases~A-F are 10, 50, 100, 50, 100, and 150~m/s, respectively. Comparisons of computed and analytical results are shown in Fig.~\ref{particle_drag_plots}. @@ -6136,29 +6136,29 @@ \subsection{Particles Slowing Down a Gas Flow (\texorpdfstring{\ct{particle\_dra \includegraphics[height=2.2in]{SCRIPT_FIGURES/particle_drag_C} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/particle_drag_F} \end{tabular*} -\caption[Sample cases \ct{particle\_drag}]{Outputs of the \ct{particle\_drag} test cases compared with analytical solutions.} +\caption[Sample cases \ct{particle_drag}]{Outputs of the \ct{particle_drag} test cases compared with analytical solutions.} \label{particle_drag_plots} \end{figure} Following the above notation, the total drag force can also be written as: \be F_d=\rho V B\left(\frac{u_{0}}{1 + B \, u_{0} \, t}\right)^2 \ee -Checking this quantity is useful for confirming the \ct{PARTICLE DRAG FORCE X/Y/Z} output quantities and \ct{SPATIAL\_STATISTIC = 'SUM'} for a volume of particles. The computed results for Case~A are compared to the analytical solution in Fig.~\ref{particle_drag_sum}. +Checking this quantity is useful for confirming the \ct{PARTICLE DRAG FORCE X/Y/Z} output quantities and \ct{SPATIAL_STATISTIC = 'SUM'} for a volume of particles. The computed results for Case~A are compared to the analytical solution in Fig.~\ref{particle_drag_sum}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/particle_drag_sum_A} -\caption[Sample case of \ct{particle\_drag} sum]{Output of total drag from the \ct{particle\_drag\_U10\_N16} test case compared with analytical solution.} +\caption[Sample case of \ct{particle_drag} sum]{Output of total drag from the \ct{particle_drag_U10_N16} test case compared with analytical solution.} \label{particle_drag_sum} \end{figure} -\subsection{Stationary Spherical Particles in a Duct (\texorpdfstring{\ct{sphere\_drag}}{sphere\_drag})} +\subsection{Stationary Spherical Particles in a Duct (\texorpdfstring{\ct{sphere_drag}}{sphere_drag})} \label{sphere_drag_1} \label{sphere_drag_2} Consider a 2~m long duct with a 1~m square cross section, fixed air velocity of $u_0=2$~m/s, and free-slip walls. Five ducts are stacked vertically, each with its own mesh and a plane of particles spanning the duct at its center point. The particles are 1~cm in diameter and 10~particles are specified in each grid cell. The expected pressure drop is given by the formula: \be \Delta p=\frac{1}{2} \rho \frac{\sum \, C_{\rm d} \, \pi \, r_{\rm p}^{2} \, u_0^2} {A} \ee -where $A$ is the 1~m$^2$ cross-sectional area, $\rho=1.2$~kg/m$^3$ is the density of air, and the summation is over 4000 particles. For specified drag coefficients of [5, 10, 20, 50, 100] in the five ducts, the pressure drops are expected to be [3.77, 7.54, 15.08, 37.70, 75.40] Pa. Comparisons of computed and analytical results are shown in the left hand plot of Fig.~\ref{sphere_drag_fig}. Note that accurate steady state pressure drop for high drag forces may require small time steps because FDS explicitly time marches to the steady solution. In such cases, \ct{PARTICLE\_CFL\_MAX=0.1} may be required to achieve stable and accurate results. +where $A$ is the 1~m$^2$ cross-sectional area, $\rho=1.2$~kg/m$^3$ is the density of air, and the summation is over 4000 particles. For specified drag coefficients of [5, 10, 20, 50, 100] in the five ducts, the pressure drops are expected to be [3.77, 7.54, 15.08, 37.70, 75.40] Pa. Comparisons of computed and analytical results are shown in the left hand plot of Fig.~\ref{sphere_drag_fig}. Note that accurate steady state pressure drop for high drag forces may require small time steps because FDS explicitly time marches to the steady solution. In such cases, \ct{PARTICLE_CFL_MAX=0.1} may be required to achieve stable and accurate results. In a second test case, consider a single 10~m long, 1~m square duct. Spherical particles 2~mm in diameter with a density of 514~kg/m$^3$ are randomly distributed in the section of the duct between 4~m and 5~m from the upstream end. The particle mass per unit volume is set to 1.66~kg/m$^3$. The number of particles included in the simulation is 10000, which means that each particle actually represents 77.1 real particles. The drag coefficient is approximately 1.6, based on the local Reynolds number, which is about 40. The free stream velocity in the duct is 0.3~m/s, but the speed varies slightly within the cloud of particles. The pressure is expected to drop linearly from approximately 0.21~Pa to 0~Pa over the 1~m of duct filled by particles, as shown in the right hand plot of Fig.~\ref{sphere_drag_fig}. @@ -6168,12 +6168,12 @@ \subsection{Stationary Spherical Particles in a Duct (\texorpdfstring{\ct{sphere \includegraphics[height=2.2in]{SCRIPT_FIGURES/sphere_drag_1} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/sphere_drag_2} \end{tabular*} -\caption[The \ct{sphere\_drag} cases]{Outputs of the \ct{sphere\_drag} test cases compared with analytical solutions.} +\caption[The \ct{sphere_drag} cases]{Outputs of the \ct{sphere_drag} test cases compared with analytical solutions.} \label{sphere_drag_fig} \end{figure} -\subsection{Drag Caused by Vegetation (\texorpdfstring{\ct{vegetation\_drag}}{vegetation\_drag})} +\subsection{Drag Caused by Vegetation (\texorpdfstring{\ct{vegetation_drag}}{vegetation_drag})} \label{vegetation_drag_1} \label{vegetation_drag_2} \label{part_drag_stretched} @@ -6215,17 +6215,17 @@ \subsubsection{Pressure Drop due to Mass-Generating Particles} \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/vegetation_drag_1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/vegetation_drag_2} -\caption[The \ct{vegetation\_drag} test cases]{Pressure drop in duct filled with pine needles for three different particle insertion methods.} +\caption[The \ct{vegetation_drag} test cases]{Pressure drop in duct filled with pine needles for three different particle insertion methods.} \label{vegetation_drag_fig} \end{figure} -\subsection{Mesh Screen in a Duct (\texorpdfstring{\ct{screen\_drag}}{screen\_drag})} +\subsection{Mesh Screen in a Duct (\texorpdfstring{\ct{screen_drag}}{screen_drag})} \label{screen_drag_1} \label{screen_drag_2} -These two test cases consider a 1 m wide by 1 m tall by 2 m long channel with either a 2 m/s or a 20 m/s fixed velocity boundary condition fixed velocity boundary condition on one end, an \ct{OPEN} boundary condition on the other end, and \ct{FREE\_SLIP} on the $y$- and $z$-faces. Three channels are stacked vertically (each with its own \ct{MESH}, and a plane of particles is placed across each channel at 1 m. The plane of particles are defined as a screen with a wire diameter of 0.0003 m. A \ct{FREE\_AREA\_FRACTION} of 0.1, 0.4, and 0.8 is set for the particles in the channels. According to the screen drag formula +These two test cases consider a 1 m wide by 1 m tall by 2 m long channel with either a 2 m/s or a 20 m/s fixed velocity boundary condition fixed velocity boundary condition on one end, an \ct{OPEN} boundary condition on the other end, and \ct{FREE_SLIP} on the $y$- and $z$-faces. Three channels are stacked vertically (each with its own \ct{MESH}, and a plane of particles is placed across each channel at 1 m. The plane of particles are defined as a screen with a wire diameter of 0.0003 m. A \ct{FREE_AREA_FRACTION} of 0.1, 0.4, and 0.8 is set for the particles in the channels. According to the screen drag formula \be \Delta p \;= \; \left( \frac{\mu}{K} u \; + \; \rho \frac{Y}{\sqrt{K}} u^2 \right) \Delta x_{\rm screen} \ee @@ -6234,11 +6234,11 @@ \subsection{Mesh Screen in a Duct (\texorpdfstring{\ct{screen\_drag}}{screen\_dr \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/screen_drag_1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/screen_drag_2} -\caption[Sample cases \ct{screen\_drag}]{Outputs of the \ct{screen\_drag} test cases compared with analytical solutions. Left 2~m/s inlet, right 20~m/s inlet. The three cases represent different values of \ct{FREE\_AREA\_FRACTION} (0.1, 0.4, and 0.8) within the channel.} +\caption[Sample cases \ct{screen_drag}]{Outputs of the \ct{screen_drag} test cases compared with analytical solutions. Left 2~m/s inlet, right 20~m/s inlet. The three cases represent different values of \ct{FREE_AREA_FRACTION} (0.1, 0.4, and 0.8) within the channel.} \label{screen_drag_plots} \end{figure} -\subsection{Flow through Porous Media (\texorpdfstring{\ct{porous\_media}}{porous\_media})} +\subsection{Flow through Porous Media (\texorpdfstring{\ct{porous_media}}{porous_media})} \label{porous_media} This case involves a 2~m long duct with a 0.5~m by 0.5~m cross section and 1~m/s flow in the $x$ direction. An 8.5~cm thick block of rigid aluminum foam is positioned in the duct. The pressure drop induced by the foam is expected to be approximately: @@ -6250,14 +6250,14 @@ \subsection{Flow through Porous Media (\texorpdfstring{\ct{porous\_media}}{porou \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/porous_media} -\caption[Results of the \ct{porous\_media} test case]{Pressure drop caused by a block of aluminum foam.} +\caption[Results of the \ct{porous_media} test case]{Pressure drop caused by a block of aluminum foam.} \label{porous_media_plot} \end{figure} -\subsection{Particle Terminal Velocity (\texorpdfstring{\ct{terminal\_velocity}}{terminal\_velocity})} +\subsection{Particle Terminal Velocity (\texorpdfstring{\ct{terminal_velocity}}{terminal_velocity})} If a single particle with a constant drag coefficient falls through a stationary fluid, its terminal velocity can be found analytically. The equation governing this motion is \be @@ -6277,7 +6277,7 @@ \subsection{Particle Terminal Velocity (\texorpdfstring{\ct{terminal\_velocity}} \includegraphics[height=2.2in]{SCRIPT_FIGURES/terminal_velocity_convergence} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/position_convergence} \end{tabular*} -\caption[Convergence analysis of the \ct{terminal\_velocity} case]{(Left) FDS convergence for the particle velocity in the \ct{terminal\_velocity} case. (Right) FDS convergence for the particle position in the \ct{terminal\_velocity} case.} +\caption[Convergence analysis of the \ct{terminal_velocity} case]{(Left) FDS convergence for the particle velocity in the \ct{terminal_velocity} case. (Right) FDS convergence for the particle position in the \ct{terminal_velocity} case.} \label{fig_terminal_velocity_convergence} \end{figure} @@ -6285,7 +6285,7 @@ \subsection{Particle Terminal Velocity (\texorpdfstring{\ct{terminal\_velocity}} -\subsection{Particle Trajectory (\texorpdfstring{\ct{flat\_fire}}{flat\_fire})} +\subsection{Particle Trajectory (\texorpdfstring{\ct{flat_fire}}{flat_fire})} \label{flat_fire} There are no known solutions of the particle trajectory equations in multiple dimensions. However, ballisticians have developed an approximate solution useful for computing trajectories of projectiles when guns are shot within a certain range of angles. This solution makes use of the ``flat fire'' assumption. In short, if a particle is launched with its velocity in only the horizontal direction and its vertical velocity is relatively small compared to the horizontal velocity, then throughout the entire trajectory the horizontal velocity component, $u_{\rm p}$, is a good approximation for the velocity magnitude, $|\mathbf{u_{\rm p}}|$. In 2-D, this approximation decouples the horizontal ($x$) equation of motion from the vertical ($z$) and reduces the vertical equation of motion to a linear ODE: @@ -6323,7 +6323,7 @@ \subsection{Particle Trajectory (\texorpdfstring{\ct{flat\_fire}}{flat\_fire})} \includegraphics[height=2.2in]{SCRIPT_FIGURES/flat_fire_u} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/flat_fire_w} & \end{tabular*} -\caption[Results of the \ct{flat\_fire} test case]{Results of the \ct{flat\_fire} test case.} +\caption[Results of the \ct{flat_fire} test case]{Results of the \ct{flat_fire} test case.} \label{flat_fire_plots} \end{figure} @@ -6344,7 +6344,7 @@ \subsection{Radiation Absorption by Vegetation} \begin{figure}[!ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/vegetation_absorb} -\caption[Results of the \ct{vegetation\_absorb} test case]{Decrease in radiance caused by layers of vegetation of various densities.} +\caption[Results of the \ct{vegetation_absorb} test case]{Decrease in radiance caused by layers of vegetation of various densities.} \label{vegetation_absorb_fig} \end{figure} @@ -6353,7 +6353,7 @@ \subsection{Heating a Metal Sphere via Radiation and Convection} \label{particle_heating_convection} \label{particle_heating_radiation} -Ten small metal spheres, each with mass, $m_{\rm s}=0.005$~kg, are suspended in a 1~m cube filled with $m_{\rm g}=0.318$~kg nitrogen with a specified specific heat, $c_p=1$~kJ/(kg$\cdot$K), and initial temperature, $T_{\rm g,i}=1073.15$~K. The metal has a specified specific heat, $c_{\rm s}=1$~kJ/(kg$\cdot$K), and initial temperature, $T_{\rm s,i}=293.15$~K. The walls of the box are adiabatic. In the first case, \ct{particle\_heating\_convection}, the spheres are heated via convection only and there is no radiation heat transfer. In the second case, \ct{particle\_heating\_radiation}, the spheres are heated via radiation only. The initial heat flux in both cases is approximately 75~kW/m$^2$, and the final temperature in both cases, $T_{\rm f}$, is found from solving an equation that equates the internal energy gained by the solid with the internal energy lost by the gas: +Ten small metal spheres, each with mass, $m_{\rm s}=0.005$~kg, are suspended in a 1~m cube filled with $m_{\rm g}=0.318$~kg nitrogen with a specified specific heat, $c_p=1$~kJ/(kg$\cdot$K), and initial temperature, $T_{\rm g,i}=1073.15$~K. The metal has a specified specific heat, $c_{\rm s}=1$~kJ/(kg$\cdot$K), and initial temperature, $T_{\rm s,i}=293.15$~K. The walls of the box are adiabatic. In the first case, \ct{particle_heating_convection}, the spheres are heated via convection only and there is no radiation heat transfer. In the second case, \ct{particle_heating_radiation}, the spheres are heated via radiation only. The initial heat flux in both cases is approximately 75~kW/m$^2$, and the final temperature in both cases, $T_{\rm f}$, is found from solving an equation that equates the internal energy gained by the solid with the internal energy lost by the gas: \be 10 \, m_{\rm s} \, c_{\rm s} \, (T_{\rm f}-T_{\rm s,i}) = m_{\rm g} \, c_{v} \, (T_{\rm g,i}-T_{\rm f}) \quad ; \quad c_v = c_p - \frac{R}{W} = 1 - \frac{8.3145}{28} \approx 0.703 \; \hbox{kJ/(kg}\cdot\hbox{K}) \ee @@ -6361,17 +6361,17 @@ \subsection{Heating a Metal Sphere via Radiation and Convection} \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/particle_heating_convection} \includegraphics[height=2.2in]{SCRIPT_FIGURES/particle_heating_radiation} -\caption[The \ct{particle\_heating} test cases]{Temperature of a small cold sphere and surrounding hot gas when the sphere is heated by convection only (left) and radiation only (right).} +\caption[The \ct{particle_heating} test cases]{Temperature of a small cold sphere and surrounding hot gas when the sphere is heated by convection only (left) and radiation only (right).} \label{particle_heating_figs} \end{figure} \clearpage -\section{Water Droplet Evaporation (\texorpdfstring{{\ct{water\_evaporation}}}{water\_evaporation}) } +\section{Water Droplet Evaporation (\texorpdfstring{{\ct{water_evaporation}}}{water_evaporation}) } \label{water_evaporation} -The cases called \ct{water\_evaporation\_x} test the water evaporation routine in FDS. The geometry consists either of +The cases called \ct{water_evaporation_x} test the water evaporation routine in FDS. The geometry consists either of a sealed box or a tunnel with a cross flow. The walls are assumed adiabatic, meaning that there are no leaks or heat losses. For the box cases, the air within the box is stirred to maintain uniform conditions. In each case, the numerical solutions are compared to analytical solutions. @@ -6410,7 +6410,7 @@ \subsection{Case 1} \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_1_pressure} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_1_water_mass} \end{tabular*} -\caption[Sample case \ct{water\_evaporation\_1}]{Output of the \ct{water\_evaporation\_1} test case.} +\caption[Sample case \ct{water_evaporation_1}]{Output of the \ct{water_evaporation_1} test case.} \label{water_evaporation_1_plots} \end{figure} @@ -6433,7 +6433,7 @@ \subsection{Case 2} \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_2_pressure} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_2_W_density} \end{tabular*} -\caption[Sample case \ct{water\_evaporation\_2}]{Output of the \ct{water\_evaporation\_2} test case.} +\caption[Sample case \ct{water_evaporation_2}]{Output of the \ct{water_evaporation_2} test case.} \label{water_evaporation_2_plots} \end{figure} @@ -6458,7 +6458,7 @@ \subsection{Case 3} \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_3_pressure}& \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_3_W_density} \end{tabular*} -\caption[Sample case \ct{water\_evaporation\_3}]{Output of the \ct{water\_evaporation\_3} test case.} +\caption[Sample case \ct{water_evaporation_3}]{Output of the \ct{water_evaporation_3} test case.} \label{water_evaporation_3_plots} \end{figure} @@ -6468,7 +6468,7 @@ \subsection{Case 4} \label{water_evaporation_4} In the fourth case, air at 500~\si{\degree C} is forced through a 3~m long, 1~m wide, 1~m tall tunnel at 1~m/s. Water droplets with a median volumetric diameter of 20~$\mu$m are -introduced in the middle of the tunnel at a rate of 0.05~kg/s, starting at 10~s. Two cases are run with different values of \ct{DT\_INSERT} and \ct{N\_PARTICLES} while keeping the total rate of mass injected the same. The first case uses \ct{DT\_INSERT}=0.001 s and \ct{N\_PARTICLES}=1000; the second case, \ct{water\_evaporation\_4\_np100}, uses \ct{DT\_INSERT}=0.01 s and \ct{N\_PARTICLES}=100, reducing the total number of particles by a factor of 100. The water temperature is 20~\si{\degree C}. +introduced in the middle of the tunnel at a rate of 0.05~kg/s, starting at 10~s. Two cases are run with different values of \ct{DT_INSERT} and \ct{N_PARTICLES} while keeping the total rate of mass injected the same. The first case uses \ct{DT_INSERT}=0.001 s and \ct{N_PARTICLES}=1000; the second case, \ct{water_evaporation_4_np100}, uses \ct{DT_INSERT}=0.01 s and \ct{N_PARTICLES}=100, reducing the total number of particles by a factor of 100. The water temperature is 20~\si{\degree C}. The mass fraction of water vapor in the hot air flowing into the tunnel is 0. The water evaporates at approximately the same rate at which it is introduced. Figure~\ref{water_evaporation_4_plot}, left, displays the time history of the enthalpy flow out of the tunnel. The enthalpy flow rate of the dry hot air is 229~kW above its ambient value. The steady-state temperature is 211~\si{\degree C}. FDS reports heat flow as the difference in enthalpy of the flowing gas at its current temperature from that at ambient temperature. For the steady-state condition of 0.05~kg/s in the air flow at 211~\si{\degree C} the heat flow is expected to be 107 kW. @@ -6477,7 +6477,7 @@ \subsection{Case 4} \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_4_enthalpy} -\caption[Sample case \ct{water\_evaporation\_4}]{Output of \ct{water\_evaporation\_4} test case. The black line indicates the FDS results for the test case with 1000 particles injected every 0.001 s. The dashed red line shows results for FDS with 100 particles injected every 0.01 s. Note that the same total mass is injected in both cases.} +\caption[Sample case \ct{water_evaporation_4}]{Output of \ct{water_evaporation_4} test case. The black line indicates the FDS results for the test case with 1000 particles injected every 0.001 s. The dashed red line shows results for FDS with 100 particles injected every 0.01 s. Note that the same total mass is injected in both cases.} \label{water_evaporation_4_plot} \end{figure} @@ -6491,7 +6491,7 @@ \subsection{Case 5} \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_5} -\caption[Sample case \ct{water\_evaporation\_5}]{Output of \ct{water\_evaporation\_5} test case.} +\caption[Sample case \ct{water_evaporation_5}]{Output of \ct{water_evaporation_5} test case.} \label{water_evaporation_5_plot} \end{figure} @@ -6516,7 +6516,7 @@ \subsection{Case 6} \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_6_T} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_6_P} \end{tabular*} -\caption[Sample case \ct{water\_evaporation\_6}]{Output of \ct{water\_evaporation} case 6.} +\caption[Sample case \ct{water_evaporation_6}]{Output of \ct{water_evaporation} case 6.} \label{water_evaporation_6_plots} \end{figure} @@ -6525,7 +6525,7 @@ \subsection{Case 6} \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_6a} - \caption[Sample case \ct{water\_evaporation\_6a}]{Output of \ct{water\_evaporation\_6a} test case.} + \caption[Sample case \ct{water_evaporation_6a}]{Output of \ct{water_evaporation_6a} test case.} \label{water_evaporation_6a_plot} \end{figure} @@ -6534,14 +6534,14 @@ \subsection{Case 6} \subsection{Case 7} \label{water_evaporation_7} -A gas burner lies near the bottom of a 1~m by 1~m by 5~m high vertical channel whose walls are made of a thin sheet of insulated steel. Air at 20~$^\circ$C is forced into the bottom of the channel at 1~m/s. Mono-disperse water droplets with a diameter of $2\,000~\mu$m are introduced via a nozzle in the middle of the channel at a rate of 0.5~L/min, starting at 60~s. The water temperature is 20~\si{\degree C}, and the spray is directed at the walls with an initial velocity of 5~m/s. The water completely evaporates before it drips down to the bottom of the channel. Figure~\ref{water_evaporation_7_plot} displays the energy balance for this case. The heat release rate, \ct{HRR}, of the fire is expected to be 384~kW. The rate at which the water droplets extract energy from the system, \ct{Q\_PART}, is expected to be +A gas burner lies near the bottom of a 1~m by 1~m by 5~m high vertical channel whose walls are made of a thin sheet of insulated steel. Air at 20~$^\circ$C is forced into the bottom of the channel at 1~m/s. Mono-disperse water droplets with a diameter of $2\,000~\mu$m are introduced via a nozzle in the middle of the channel at a rate of 0.5~L/min, starting at 60~s. The water temperature is 20~\si{\degree C}, and the spray is directed at the walls with an initial velocity of 5~m/s. The water completely evaporates before it drips down to the bottom of the channel. Figure~\ref{water_evaporation_7_plot} displays the energy balance for this case. The heat release rate, \ct{HRR}, of the fire is expected to be 384~kW. The rate at which the water droplets extract energy from the system, \ct{Q_PART}, is expected to be \be - \left( 4.189 \; \hbox{\si{kJ/(kg.K)}} \times 80 \; \hbox{K} + 2269 \; \hbox{kJ/kg} \right) \times 0.5/60 \; \hbox{kg/s} = -21.7 \; \hbox{kW} \ee -The sum of all the terms, \ct{Q\_TOTAL}, is expected to be zero. The three other quantities, \ct{Q\_COND}, \ct{Q\_RADI}, \ct{Q\_CONV}, all have plausible values, but there is no way to determine the exact values. +The sum of all the terms, \ct{Q_TOTAL}, is expected to be zero. The three other quantities, \ct{Q_COND}, \ct{Q_RADI}, \ct{Q_CONV}, all have plausible values, but there is no way to determine the exact values. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_7} -\caption[Sample case \ct{water\_evaporation\_7}]{Output of \ct{water\_evaporation} case 7.} +\caption[Sample case \ct{water_evaporation_7}]{Output of \ct{water_evaporation} case 7.} \label{water_evaporation_7_plot} \end{figure} @@ -6559,7 +6559,7 @@ \subsection{Case 8} \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_8_z} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/water_evaporation_8_d} \end{tabular*} -\caption[Sample case \ct{water\_evaporation\_8}]{Output of \ct{water\_evaporation} case 8.} +\caption[Sample case \ct{water_evaporation_8}]{Output of \ct{water_evaporation} case 8.} \label{water_evaporation_8_plots} \end{figure} @@ -6567,37 +6567,37 @@ \subsection{Case 8} \section{Water Droplets on Solid Surfaces} -\subsection{Basic Flow and Mass Conservation (\texorpdfstring{{\ct{geom\_sprk\_mass}}}{geom\_sprk\_mass}) } +\subsection{Basic Flow and Mass Conservation (\texorpdfstring{{\ct{geom_sprk_mass}}}{geom_sprk_mass}) } \label{geom_sprk_mass} -In the test case called \ct{Sprinklers\_and\_Sprays/geom\_sprk\_mass.fds}, two identical sprinklers pour water on two identical obstructions, one of which is created using the traditional \ct{OBST} input parameters, the other is created using the immersed boundary \ct{GEOM} parameters. The objective is simply to ensure that the droplets behave the same way in both cases. The sprinklers operate for 4~s, each discharging 10.5~L of water. The \ct{HORIZONTAL\_VELOCITY} of the droplets on the solid surfaces is set to a low value of 0.05~m/s to allow for all of the water to pool before dripping over the edge. Figure~\ref{geom_sprk_mass_fig} displays the accumulated mass of water on each obstruction as a function of time, demonstrating equivalent behavior by both types of solid obstructions. +In the test case called \ct{Sprinklers_and_Sprays/geom_sprk_mass.fds}, two identical sprinklers pour water on two identical obstructions, one of which is created using the traditional \ct{OBST} input parameters, the other is created using the immersed boundary \ct{GEOM} parameters. The objective is simply to ensure that the droplets behave the same way in both cases. The sprinklers operate for 4~s, each discharging 10.5~L of water. The \ct{HORIZONTAL_VELOCITY} of the droplets on the solid surfaces is set to a low value of 0.05~m/s to allow for all of the water to pool before dripping over the edge. Figure~\ref{geom_sprk_mass_fig} displays the accumulated mass of water on each obstruction as a function of time, demonstrating equivalent behavior by both types of solid obstructions. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/geom_sprk_mass} -\caption[The \ct{geom\_sprk\_mass} test case]{Mass of water pooled on two solid obstructions.} +\caption[The \ct{geom_sprk_mass} test case]{Mass of water pooled on two solid obstructions.} \label{geom_sprk_mass_fig} \end{figure} -\subsection{Obstructions of Different Orientations (\texorpdfstring{{\ct{geom\_particle\_cascade\_2}}}{geom\_particle\_cascade\_2}) } +\subsection{Obstructions of Different Orientations (\texorpdfstring{{\ct{geom_particle_cascade_2}}}{geom_particle_cascade_2}) } \label{geom_particle_cascade_2} -In the test case called \ct{Complex\_Geometry/geom\_particle\_cascade\_2.fds}, four identical sprinklers pour water on four obstructions, one of which is created using the traditional \ct{OBST} input parameters, the other three are created using the immersed boundary \ct{GEOM} parameters. The objective is simply to ensure that the droplets drip off the obstructions appropriately. The sprinklers operate for 10~s, each discharging 10~L of water. Figure~\ref{geom_particle_cascade_2_fig} displays the accumulated mass of water on the floor as a function of time, demonstrating equivalent behavior by different types of solid obstructions. +In the test case called \ct{Complex_Geometry/geom_particle_cascade_2.fds}, four identical sprinklers pour water on four obstructions, one of which is created using the traditional \ct{OBST} input parameters, the other three are created using the immersed boundary \ct{GEOM} parameters. The objective is simply to ensure that the droplets drip off the obstructions appropriately. The sprinklers operate for 10~s, each discharging 10~L of water. Figure~\ref{geom_particle_cascade_2_fig} displays the accumulated mass of water on the floor as a function of time, demonstrating equivalent behavior by different types of solid obstructions. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/geom_particle_cascade_2} -\caption[The \ct{geom\_particle\_cascade\_2} test case]{Mass of water flowing over four obstructions.} +\caption[The \ct{geom_particle_cascade_2} test case]{Mass of water flowing over four obstructions.} \label{geom_particle_cascade_2_fig} \end{figure} -\subsection{Adiabatic Surface Temperature (\texorpdfstring{{\ct{adiabatic\_surf\_temp\_spray}}}{adiabatic\_surf\_temp\_spray}) } +\subsection{Adiabatic Surface Temperature (\texorpdfstring{{\ct{adiabatic_surf_temp_spray}}}{adiabatic_surf_temp_spray}) } \label{AST_spray} -This test case is a modified version of \ct{Radiation/adiabatic\_surface\_temperature}. A thin metal plate with insulated backing is heated for 100 s. Adiabatic surface temperature (AST) is measured from the surface of the plate. Figure~\ref{adiabatic_surf_temp_spray} shows that after about 40 s, the plate temperature and AST match each other. At 50 s, a water spray is turned on and it starts to cool down the surface. At 100 s, the heater is turned off, and the plate cools down even more. AST and plate temperatures should match each other in the end of every 50 s period. +This test case is a modified version of \ct{Radiation/adiabatic_surface_temperature}. A thin metal plate with insulated backing is heated for 100 s. Adiabatic surface temperature (AST) is measured from the surface of the plate. Figure~\ref{adiabatic_surf_temp_spray} shows that after about 40 s, the plate temperature and AST match each other. At 50 s, a water spray is turned on and it starts to cool down the surface. At 100 s, the heater is turned off, and the plate cools down even more. AST and plate temperatures should match each other in the end of every 50 s period. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/adiabatic_surf_temp_spray} -\caption[The \ct{adiabatic\_surface\_temperature\_spray} test case]{Adiabatic and true surface temperatures under radiative heating (0 - 50 s), heating and spray cooling (50-100 s) and only spray cooling (100-150 s).} +\caption[The \ct{adiabatic_surface_temperature_spray} test case]{Adiabatic and true surface temperatures under radiative heating (0 - 50 s), heating and spray cooling (50-100 s) and only spray cooling (100-150 s).} \label{adiabatic_surf_temp_spray} \end{figure} @@ -6615,27 +6615,27 @@ \subsection{Droplet Movement on Solid Surfaces with MPI (\texorpdfstring{{\ct{ca -\section{Flow Rate and Pipe Networks (\texorpdfstring{{\ct{flow\_rate\_2}}}{flow\_rate\_2}) } +\section{Flow Rate and Pipe Networks (\texorpdfstring{{\ct{flow_rate_2}}}{flow_rate_2}) } \label{flow_rate_2} -In this test case four sprinklers are placed in a room. The first three sprinklers are on one pipe network (\ct{PIPE\_INDEX = 1}) and the fourth sprinkler is on a second pipe network (\ct{PIPE\_INDEX = 2}). The sprinklers are defined with a pressure ramp such that all of the sprinklers within a pipe network flow at a combined rate of 10~L/min regardless of the number of open heads. The sprinklers are set to open every 15~s and to close at 60~s. After 45~s, the first three sprinklers (black line) have opened for a combined flow rate of 10~L/min and an accumulated water mass of 7.5~kg. At 60~s, the fourth sprinkler (red line) flowing at 10 L/min plus the first three sprinklers flowing at 10~L/min have produced 12.5~kg of water. The results are shown in Fig.~\ref{flow_rate_2_figure}. +In this test case four sprinklers are placed in a room. The first three sprinklers are on one pipe network (\ct{PIPE_INDEX = 1}) and the fourth sprinkler is on a second pipe network (\ct{PIPE_INDEX = 2}). The sprinklers are defined with a pressure ramp such that all of the sprinklers within a pipe network flow at a combined rate of 10~L/min regardless of the number of open heads. The sprinklers are set to open every 15~s and to close at 60~s. After 45~s, the first three sprinklers (black line) have opened for a combined flow rate of 10~L/min and an accumulated water mass of 7.5~kg. At 60~s, the fourth sprinkler (red line) flowing at 10 L/min plus the first three sprinklers flowing at 10~L/min have produced 12.5~kg of water. The results are shown in Fig.~\ref{flow_rate_2_figure}. \begin{figure}[ht] \begin{tabular*}{\textwidth}{lr} \includegraphics[height=2.2in]{SCRIPT_FIGURES/flow_rate_2_open_nozzles} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/flow_rate_2_water_mass} \end{tabular*} -\caption[The \ct{flow\_rate\_2} case]{Output of the \ct{flow\_rate\_2} test case.} +\caption[The \ct{flow_rate_2} case]{Output of the \ct{flow_rate_2} test case.} \label{flow_rate_2_figure} \end{figure} -\section{Turbulent Dispersion (\texorpdfstring{{\ct{random\_walk}}}{random\_walk}) } +\section{Turbulent Dispersion (\texorpdfstring{{\ct{random_walk}}}{random_walk}) } \label{turbulent_dispersion} \label{random_walk} -Two cases are set up to test the turbulent dispersion of tracer particles. Tracer particles are injected into a channel with a steady laminar flow with mean velocity 1 m/s. In the first case (\ct{random\_walk\_1}), the diffusivity is set to $D=0.0834$~m$^2$/s (this value results from setting the dynamic viscosity to $\mu = 0.1$~kg/(m$\cdot$s) with an ambient density of $\rho=1.199$~\si{kg/m^3} and a Schmidt number of unity). In the second case (\ct{random\_walk\_2}), the diffusivity is set to $D=0.00834$ m$^2$/s. The results are compared with Einstein's classic result for Brownian motion \cite{Gardiner:2004}: +Two cases are set up to test the turbulent dispersion of tracer particles. Tracer particles are injected into a channel with a steady laminar flow with mean velocity 1 m/s. In the first case (\ct{random_walk_1}), the diffusivity is set to $D=0.0834$~m$^2$/s (this value results from setting the dynamic viscosity to $\mu = 0.1$~kg/(m$\cdot$s) with an ambient density of $\rho=1.199$~\si{kg/m^3} and a Schmidt number of unity). In the second case (\ct{random_walk_2}), the diffusivity is set to $D=0.00834$ m$^2$/s. The results are compared with Einstein's classic result for Brownian motion \cite{Gardiner:2004}: \begin{equation} \label{eqn_number_density} f(z,t) = \frac{n}{4\pi D} \frac{\exp \left( -z^2/4Dt \right)}{\sqrt{t}} @@ -6647,7 +6647,7 @@ \section{Turbulent Dispersion (\texorpdfstring{{\ct{random\_walk}}}{random\_walk \includegraphics[height=2.2in]{SCRIPT_FIGURES/random_walk_1} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/random_walk_2} \end{tabular*} -\caption[Turbulent dispersion of tracer particles]{Turbulent dispersion of tracer particles \ct{random\_walk} test cases.} +\caption[Turbulent dispersion of tracer particles]{Turbulent dispersion of tracer particles \ct{random_walk} test cases.} \label{random_walk_fig} \end{figure} @@ -6656,7 +6656,7 @@ \section{Turbulent Dispersion (\texorpdfstring{{\ct{random\_walk}}}{random\_walk \chapter{Heating, Ventilating, and Air Conditioning (HVAC)} -\section{Duct Flow Losses (\texorpdfstring{\ct{HVAC\_flow\_loss}}{HVAC\_flow\_loss})} +\section{Duct Flow Losses (\texorpdfstring{\ct{HVAC_flow_loss}}{HVAC_flow_loss})} \label{HVAC_flow_loss} The pressure drop due to steady flow in a duct is given by @@ -6668,29 +6668,29 @@ \section{Duct Flow Losses (\texorpdfstring{\ct{HVAC\_flow\_loss}}{HVAC\_flow\_lo \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_flow_loss} -\caption[The \ct{HVAC\_flow\_loss} test case]{Duct velocities in three ducts with different loss coefficients.} +\caption[The \ct{HVAC_flow_loss} test case]{Duct velocities in three ducts with different loss coefficients.} \label{fig_HVAC_loss} \end{figure} -\section{Node Flow Losses (\texorpdfstring{\ct{HVAC\_tee\_loss\_1}}{HVAC\_tee\_loss\_1}, \texorpdfstring{\ct{HVAC\_tee\_loss\_2}}{HVAC\_tee\_loss\_2})} +\section{Node Flow Losses (\texorpdfstring{\ct{HVAC_tee_loss_1}}{HVAC_tee_loss_1}, \texorpdfstring{\ct{HVAC_tee_loss_2}}{HVAC_tee_loss_2})} \label{HVAC_tee_loss_1} \label{HVAC_tee_loss_2} -These two cases use the same geometry as in Sec.~\ref{HVAC_flow_loss}. However, instead of losses assigned to the ducts, the losses are assigned to the duct nodes. In the first case, \ct{HVAC\_tee\_loss\_1}, the flow goes into the primary leg of the tee. The secondary branches are assigned loss coefficients of 15 and 3 and the discharge nodes are assigned losses of 1. This gives total losses of 16 and 4. In the second case, \ct{ HVAC\_tee\_loss\_2}, the flow goes out the primary leg of the tee. Duct directions are reversed so the sign on velocity remains the same as in the first case. The same flow losses are assigned. In the first case, the two exhaust ducts are expected to have the same losses as in Sec.~\ref{HVAC_flow_loss} and the duct velocities should be the same (3~m/s, 2~m/s, and 1~m/s). In the second case, the exhaust ducts now function as supply ducts, and the supply duct now functions as an exhaust duct. This means that only the duct with the specified sees the pressure drop imposed by the tee as the other two ducts are now upstream of the tee. Since those ducts do not have any losses other than the node losses of 1, both ducts have the same total loss and see the same pressure drop. In this case the expected flows are 3~m/s, 1.5~m/s, and 1.5~m/s. FDS results are shown in Fig.~\ref{fig_HVAC_node}. +These two cases use the same geometry as in Sec.~\ref{HVAC_flow_loss}. However, instead of losses assigned to the ducts, the losses are assigned to the duct nodes. In the first case, \ct{HVAC_tee_loss_1}, the flow goes into the primary leg of the tee. The secondary branches are assigned loss coefficients of 15 and 3 and the discharge nodes are assigned losses of 1. This gives total losses of 16 and 4. In the second case, \ct{ HVAC_tee_loss_2}, the flow goes out the primary leg of the tee. Duct directions are reversed so the sign on velocity remains the same as in the first case. The same flow losses are assigned. In the first case, the two exhaust ducts are expected to have the same losses as in Sec.~\ref{HVAC_flow_loss} and the duct velocities should be the same (3~m/s, 2~m/s, and 1~m/s). In the second case, the exhaust ducts now function as supply ducts, and the supply duct now functions as an exhaust duct. This means that only the duct with the specified sees the pressure drop imposed by the tee as the other two ducts are now upstream of the tee. Since those ducts do not have any losses other than the node losses of 1, both ducts have the same total loss and see the same pressure drop. In this case the expected flows are 3~m/s, 1.5~m/s, and 1.5~m/s. FDS results are shown in Fig.~\ref{fig_HVAC_node}. \begin{figure}[ht] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_tee_loss_1} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_tee_loss_2} \end{tabular*} - \caption[The \ct{HVAC\_tee\_loss} test cases]{Duct velocities with varied node loss. \ct{HVAC\_tee\_loss\_1} (left) and \ct{HVAC\_tee\_loss\_2} (right).} + \caption[The \ct{HVAC_tee_loss} test cases]{Duct velocities with varied node loss. \ct{HVAC_tee_loss_1} (left) and \ct{HVAC_tee_loss_2} (right).} \label{fig_HVAC_node} \end{figure} -\section{HVAC Mass Conservation (\texorpdfstring{\ct{HVAC\_mass\_conservation}}{HVAC\_mass\_conservation})} +\section{HVAC Mass Conservation (\texorpdfstring{\ct{HVAC_mass_conservation}}{HVAC_mass_conservation})} \label{HVAC_mass_conservation} A 1~m by 1~m by 1~m compartment is initialized with the lower half of the compartment being filled with a species called \ct{SPEC1} having the same molecular weight as air, see Fig.~\ref{fig_HVAC_mass}. An HVAC system of two ducts is created with one duct taking suction from the lower half (red vent) and discharging into the upper half (blue vent), and the second duct taking suction from the upper half (green vent) and discharging into the lower half (yellow vent). The two ducts are assigned the same volume flow rate. It is expected that the total mass in the compartment will be conserved, that the mass of the second species will be conserved (at 50 \% of the total mass), and that at the start of the computation a slice file of species will show pure ambient being discharged in the lower half and pure \ct{SPEC1} being discharged in the upper half. @@ -6700,13 +6700,13 @@ \section{HVAC Mass Conservation (\texorpdfstring{\ct{HVAC\_mass\_conservation}}{ \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_conservation} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_conservation_plot} } \end{tabular*} - \caption[The \ct{HVAC\_mass\_conservation} case]{SPEC1 mass fraction at 1 s (left) and SPEC1 and total mass (right).} + \caption[The \ct{HVAC_mass_conservation} case]{SPEC1 mass fraction at 1 s (left) and SPEC1 and total mass (right).} \label{fig_HVAC_mass} \end{figure} -\section{HVAC Energy Conservation and Pressure (\texorpdfstring{\ct{HVAC\_energy\_pressure}}{HVAC\_energy\_pressure})} +\section{HVAC Energy Conservation and Pressure (\texorpdfstring{\ct{HVAC_energy_pressure}}{HVAC_energy_pressure})} \label{HVAC_energy_pressure} A 1~m by 1~m by 1~m box is divided into two equal compartments by a vertical wall, see Fig.~\ref{fig_HVAC_e_p}. @@ -6723,29 +6723,29 @@ \section{HVAC Energy Conservation and Pressure (\texorpdfstring{\ct{HVAC\_energy \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_e_p_enthalpy} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_e_p_pressure} \end{tabular*} -\caption[The \ct{HVAC\_energy\_pressure} case]{Clockwise from top left: Temperature at 1 s, duct velocities, total enthalpy in the domain, and duct node pressures for the top duct.} +\caption[The \ct{HVAC_energy_pressure} case]{Clockwise from top left: Temperature at 1 s, duct velocities, total enthalpy in the domain, and duct node pressures for the top duct.} \label{fig_HVAC_e_p} \end{figure} -\section{HVAC Dampers (\texorpdfstring{\ct{HVAC\_damper}}{HVAC\_damper})} +\section{HVAC Dampers (\texorpdfstring{\ct{HVAC_damper}}{HVAC_damper})} \label{HVAC_damper} -The \ct{HVAC\_damper} example case is a simple duct network of three ducts connected by a tee. A damper is present in one of the ducts and linked to a \ct{DEVC} that will change state at 10~s. With the damper open, the respective duct flow speeds should be 3~m/s, 1~m/s, and 2~m/s. When the damper closes, the respective duct flow speeds should be 3~m/s, 3~m/s, and~0 m/s. Results of this are shown in Fig.~\ref{fig:HVAC_damper}. +The \ct{HVAC_damper} example case is a simple duct network of three ducts connected by a tee. A damper is present in one of the ducts and linked to a \ct{DEVC} that will change state at 10~s. With the damper open, the respective duct flow speeds should be 3~m/s, 1~m/s, and 2~m/s. When the damper closes, the respective duct flow speeds should be 3~m/s, 3~m/s, and~0 m/s. Results of this are shown in Fig.~\ref{fig:HVAC_damper}. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_damper} -\caption[Example case \ct{HVAC\_damper}]{Simple duct network with a damper, case \ct{HVAC\_damper}.} +\caption[Example case \ct{HVAC_damper}]{Simple duct network with a damper, case \ct{HVAC_damper}.} \label{fig:HVAC_damper} \end{figure} -\section{HVAC Filters (\texorpdfstring{\ct{HVAC\_filter}}{HVAC\_filter})} +\section{HVAC Filters (\texorpdfstring{\ct{HVAC_filter}}{HVAC_filter})} \label{HVAC_filter} -The sample case \ct{HVAC\_filter} demonstrates the use of the filter input. A 1~m$^3$ compartment is initialized with a particulate species with a mass fraction of 0.001. A 100 \% efficient filter with a clean loss of 1 and a loading loss of 7732.446~kg$^{-1}$ (gives a total loss of 10 when all the soot in the compartment is filtered). A quadratic fan in a 0.01 m$^2$ duct with a maximum pressure of 20~Pa and a maximum flow of 0.2~\si{m^3/s} takes suction from one side of the compartment and discharges into the other. Over time, the filter removes the particulate from the compartment. However, since the filter loss increases with the mass of particulate filtered, the rate of removal will decrease over time. Applying the conservation of energy to the compartment and the steady state duct momentum equation to the duct, we can solve for the compartment temperature and pressure and the duct velocity. These results along with the loading of the filter and the mass of particulate in the compartment are shown in Fig.~\ref{fig_filter}. +The sample case \ct{HVAC_filter} demonstrates the use of the filter input. A 1~m$^3$ compartment is initialized with a particulate species with a mass fraction of 0.001. A 100 \% efficient filter with a clean loss of 1 and a loading loss of 7732.446~kg$^{-1}$ (gives a total loss of 10 when all the soot in the compartment is filtered). A quadratic fan in a 0.01 m$^2$ duct with a maximum pressure of 20~Pa and a maximum flow of 0.2~\si{m^3/s} takes suction from one side of the compartment and discharges into the other. Over time, the filter removes the particulate from the compartment. However, since the filter loss increases with the mass of particulate filtered, the rate of removal will decrease over time. Applying the conservation of energy to the compartment and the steady state duct momentum equation to the duct, we can solve for the compartment temperature and pressure and the duct velocity. These results along with the loading of the filter and the mass of particulate in the compartment are shown in Fig.~\ref{fig_filter}. \begin{figure}[h!] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} @@ -6754,12 +6754,12 @@ \section{HVAC Filters (\texorpdfstring{\ct{HVAC\_filter}}{HVAC\_filter})} \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_filter_v} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_filter_kg} } \end{tabular*} - \caption[Results for the \ct{HVAC\_filter} sample case]{Compartment pressure (upper left), compartment temperature (upper right), duct velocity (lower left), and particulate mass in the compartment and on the filter (lower right).} + \caption[Results for the \ct{HVAC_filter} sample case]{Compartment pressure (upper left), compartment temperature (upper right), duct velocity (lower left), and particulate mass in the compartment and on the filter (lower right).} \label{fig_filter} \end{figure} -\section{HVAC Fans (\texorpdfstring{\ct{fan\_test}}{fan\_test})} +\section{HVAC Fans (\texorpdfstring{\ct{fan_test}}{fan_test})} \label{fan_test} This case tests a quadratic fan using the default approach to finding the fan operation point. Two compartments share a common wall. Both compartments are considered as separate ``pressure zones.'' Two, 0.04~m$^2$ HVAC ducts are defined. One duct has a quadratic fan with a maximum volumetric flow of 0.16~\si{m^3/s} and a stall pressure of 10~Pa. The second is an open duct with a flow loss of 10. The volume flow through the fans is obtained from the equation below: @@ -6781,11 +6781,11 @@ \section{HVAC Fans (\texorpdfstring{\ct{fan\_test}}{fan\_test})} \includegraphics[height=2.2in]{SCRIPT_FIGURES/fan_test_Pressure} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/fan_test_Volume_Flow} \end{tabular*} -\caption[Results of the \ct{fan\_test} case]{Compartment pressure and volume flow for the \ct{fan\_test} case.} +\caption[Results of the \ct{fan_test} case]{Compartment pressure and volume flow for the \ct{fan_test} case.} \label{fan_test_fig} \end{figure} -\section{HVAC Operation Point Single Fan (\texorpdfstring{\ct{qfan\_test}}{qfan\_test})} +\section{HVAC Operation Point Single Fan (\texorpdfstring{\ct{qfan_test}}{qfan_test})} \label{qfan_test} This case tests a quadratic fan using the system curve approach to finding the fan operation point. Two compartments share a common wall. Both compartments are considered as separate ``pressure zones.'' Two, 0.04~m$^2$ HVAC ducts are defined. One duct has a quadratic fan with a maximum volumetric flow of 0.16~\si{m^3/s} and a stall pressure of 10~Pa. Both ducts have a flow loss of 5. At each time step system curve is generated by fitting a quadratic to two points. The first point is using the current compartment pressure difference and solving for the system flow with the fan off ($\dot{V}_{\hbox{\footnotesize system 0}}$). @@ -6805,11 +6805,11 @@ \section{HVAC Operation Point Single Fan (\texorpdfstring{\ct{qfan\_test}}{qfan\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/qfan_test_Pressure} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/qfan_test_Volume_Flow} \end{tabular*} - \caption[Results of the \ct{qfan\_test} case]{Compartment pressure and volume flow for the \ct{qfan\_test} case.} + \caption[Results of the \ct{qfan_test} case]{Compartment pressure and volume flow for the \ct{qfan_test} case.} \label{qfan_test_fig} \end{figure} -\section{HVAC Operation Point Multiple Fans (\texorpdfstring{\ct{qfan\_multi}}{qfan\_multi})} +\section{HVAC Operation Point Multiple Fans (\texorpdfstring{\ct{qfan_multi}}{qfan_multi})} \label{qfan_multi} This case tests the system curve approach for the cases a multiple fans in a duct run. Two duct runs are define. In one case two fans take parallel suction and discharge through a combined exhaust. In the second case there are two fans in series. All ducts are defined with an area of 0.04~\si{m^2} and a loss of 5. In each case two different quadratic fans are used. The first fan has a maximum volumetric flow of 0.2~\si{m^3/s} and a stall pressure of 10~Pa. The first fan has a maximum volumetric flow of 0.6~\si{m^3/s} and a stall pressure of 30~Pa. Since the domain is open, for all fans the zero fan pressure flow will be 0.0~\si{m^3/s}. With two fans in each duct run, two full fan pressure points are created, one for each fan. When the first fan is being solved for, the pressure of the second fan is set to zero and vice versa. This means in the parallel case that the system solution will mean some air exhausting through the duct branch with the fan that is off. @@ -6825,7 +6825,7 @@ \section{HVAC Operation Point Multiple Fans (\texorpdfstring{\ct{qfan\_multi}}{q \includegraphics[height=2.2in]{SCRIPT_FIGURES/qfan_multi_parallel_p} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/qfan_multi_series_p} \end{tabular*} - \caption[Results of the \ct{qfan\_multi} case]{Volume flow and fan pressure for the \ct{qfan\_multi}. Left is two fans in parallel, and right is two fans in series. Top is volume flow, and bottom is fan pressure.} + \caption[Results of the \ct{qfan_multi} case]{Volume flow and fan pressure for the \ct{qfan_multi}. Left is two fans in parallel, and right is two fans in series. Top is volume flow, and bottom is fan pressure.} \label{qfan_multi_fig} \end{figure} @@ -6833,7 +6833,7 @@ \section{Leakage} In the following examples, both leaks and fans are demonstrated. -\subsection{Single Zone Leakage (\texorpdfstring{\ct{leak\_test}}{leak\_test})} +\subsection{Single Zone Leakage (\texorpdfstring{\ct{leak_test}}{leak_test})} \label{single_zone_leak} \label{leak_test} @@ -6853,25 +6853,25 @@ \subsection{Single Zone Leakage (\texorpdfstring{\ct{leak\_test}}{leak\_test})} \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test} -\caption[The \ct{leak\_test} case]{Pressure difference between two compartments with leakage connected by a fan.} +\caption[The \ct{leak_test} case]{Pressure difference between two compartments with leakage connected by a fan.} \label{leak_test_fig} \end{figure} -\subsection{Multiple Zone Leakage (\texorpdfstring{\ct{leak\_test\_2}}{leak\_test\_2})} +\subsection{Multiple Zone Leakage (\texorpdfstring{\ct{leak_test_2}}{leak_test_2})} \label{leak_test_2} -This case starts with the same input as \ct{leak\_test}. A second leakage vent is added to the floor of the discharge side of the fan. This vent leaks to the ambient. When the simulation starts the fan pushes air from one compartment to the other. As the pressure rises, the leakage increases until the leakage flow rate is equal to the fan flow rate. Since some air from the interior compartment is being discharged to the ambient, the average pressure of the two compartments decreases until the pressure of the interior compartment is equal to that of the ambient. At this point in time, there is no more leakage to the outside and the fan flow rate equals the leakage flow rate between the two compartments. Given the leakage area and the fan curve, this occurs when the pressure difference between the two compartments is the same as the pressure difference from \ct{leak\_test}, only now the discharge side should be at 0~Pa. +This case starts with the same input as \ct{leak_test}. A second leakage vent is added to the floor of the discharge side of the fan. This vent leaks to the ambient. When the simulation starts the fan pushes air from one compartment to the other. As the pressure rises, the leakage increases until the leakage flow rate is equal to the fan flow rate. Since some air from the interior compartment is being discharged to the ambient, the average pressure of the two compartments decreases until the pressure of the interior compartment is equal to that of the ambient. At this point in time, there is no more leakage to the outside and the fan flow rate equals the leakage flow rate between the two compartments. Given the leakage area and the fan curve, this occurs when the pressure difference between the two compartments is the same as the pressure difference from \ct{leak_test}, only now the discharge side should be at 0~Pa. \begin{figure}[ht] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test_2_vector} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test_2} } \end{tabular*} - \caption[The \ct{leak\_test\_2} test case]{Vector plot of pressure at 10 s with geometry clipped to show compartment interiors (left) and a plot of zone pressures (right).} + \caption[The \ct{leak_test_2} test case]{Vector plot of pressure at 10 s with geometry clipped to show compartment interiors (left) and a plot of zone pressures (right).} \label{fig_HVAC_leak_fan} \end{figure} -\subsection{Leakage through Immersed Boundary Wall (\texorpdfstring{\ct{leak\_test\_3}}{leak\_test\_3})} +\subsection{Leakage through Immersed Boundary Wall (\texorpdfstring{\ct{leak_test_3}}{leak_test_3})} \label{leak_test_3} This case is intended to ensure that an immersed boundary obstruction (\ct{GEOM}) handles leakage in the same way as a simple grid-conforming obstruction (\ct{OBST}). Two rooms are separated by a wall specified via either an \ct{OBST} line or a \ct{GEOM} line. Air is pumped into the room on one side of the wall at a rate of $\dot{V}=0.02$~m$^3$/s, and the wall is assigned a leakage area $A_{\rm L}=0.001$~m$^2$. The room on the other side of the wall leaks to the outside through a hole of equal area. The pressure rise in rooms 1 and 2, $\Delta p_1$ and $\Delta p_2$, are found by solving: @@ -6886,11 +6886,11 @@ \subsection{Leakage through Immersed Boundary Wall (\texorpdfstring{\ct{leak\_te \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test_3_obst} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test_3_geom} } \end{tabular*} - \caption[The \ct{leak\_test\_3} test case]{Pressure rise in adjacent compartments separated by an \ct{OBST} (left) and \ct{GEOM} (right) wall.} + \caption[The \ct{leak_test_3} test case]{Pressure rise in adjacent compartments separated by an \ct{OBST} (left) and \ct{GEOM} (right) wall.} \label{fig_leak_test_3} \end{figure} -\subsection{Leakage through Immersed Boundary Compartment (\texorpdfstring{\ct{leak\_test\_4}}{leak\_test\_4})} +\subsection{Leakage through Immersed Boundary Compartment (\texorpdfstring{\ct{leak_test_4}}{leak_test_4})} \label{leak_test_4} This case is intended to ensure that a simple compartment constructed of immersed boundary obstructions (\ct{GEOM}) handles leakage in the same way as a simple grid-conforming compartment. Air is pumped into the compartment via a small rotated cube inside at a rate of $\dot{V}=0.024$~m$^3$/s, and the walls are assigned a total leakage area $A_{\rm L}=0.001$~m$^2$. The pressure rise, $\Delta p$ is found by solving: @@ -6903,26 +6903,26 @@ \subsection{Leakage through Immersed Boundary Compartment (\texorpdfstring{\ct{l \begin{figure}[ht] \centering \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_test_4} } - \caption[The \ct{leak\_test\_4} test case]{Pressure rise in a compartment constructed of immersed boundary obstructions.} + \caption[The \ct{leak_test_4} test case]{Pressure rise in a compartment constructed of immersed boundary obstructions.} \label{fig_leak_test_4} \end{figure} -\subsection{Localized Leakage (\texorpdfstring{\ct{leak\_enthalpy}}{leak\_enthalpy})} +\subsection{Localized Leakage (\texorpdfstring{\ct{leak_enthalpy}}{leak_enthalpy})} \label{leak_enthalpy} -A domain that is 2~m by 1~m by 1~m with 10~cm grid resolution is divided into two halves by a 20~cm thick wall. In the left side is given a 100~kW/m$^3$ heat source in its entire volume that lasts for 4~s. A localized leakage path that is 0.001~m$^2$ is defined for one grid cell at the center on either side of the dividing wall. The parameter \ct{LEAK\_PATH} is set to true. All the boundaries are defined as adiabatic. The heat source creates pressure on the left side which force heated on into the right side. The localized leakage should conserve mass, and the energy source should add 360~kJ to the domain. Results are shown in Fig.~\ref{fig_leak_enthalpy} +A domain that is 2~m by 1~m by 1~m with 10~cm grid resolution is divided into two halves by a 20~cm thick wall. In the left side is given a 100~kW/m$^3$ heat source in its entire volume that lasts for 4~s. A localized leakage path that is 0.001~m$^2$ is defined for one grid cell at the center on either side of the dividing wall. The parameter \ct{LEAK_PATH} is set to true. All the boundaries are defined as adiabatic. The heat source creates pressure on the left side which force heated on into the right side. The localized leakage should conserve mass, and the energy source should add 360~kJ to the domain. Results are shown in Fig.~\ref{fig_leak_enthalpy} \begin{figure}[ht] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_enthalpy_mass} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_enthalpy_energy} } \end{tabular*} - \caption[The \ct{leak\_enthalpy} test case]{Change in mass (left) and energy (right) in the domain.} + \caption[The \ct{leak_enthalpy} test case]{Change in mass (left) and energy (right) in the domain.} \label{fig_leak_enthalpy} \end{figure} -\subsection{Multiple Zone, Multiple Mesh Leakage (\texorpdfstring{\ct{zone\_shape\_2}}{zone\_shape\_2})} +\subsection{Multiple Zone, Multiple Mesh Leakage (\texorpdfstring{\ct{zone_shape_2}}{zone_shape_2})} \label{zone_shape_2} A duct with a square 1~m cross section winds its way through a 2 by 2 by 2 array of meshes that span a sealed 6.2~m cubic domain. A fan forces air into one end of the duct at a rate of $\dot{V}=0.1$~m$^3$/s. The other end of the duct has a leak with effective area $A_\mathrm{L}=0.007746$~m$^2$. The expected pressure difference between the interior and exterior of the duct is @@ -6935,17 +6935,17 @@ \subsection{Multiple Zone, Multiple Mesh Leakage (\texorpdfstring{\ct{zone\_shap \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/zone_shape_2_pres} } & \scalebox{1.0}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/zone_shape_2_mass} } \end{tabular*} - \caption[The \ct{zone\_shape\_2} test case]{(Left) Pressure difference between interior and exterior of the duct. (Right) Overall mass.} + \caption[The \ct{zone_shape_2} test case]{(Left) Pressure difference between interior and exterior of the duct. (Right) Overall mass.} \label{fig_zone_shape_2} \end{figure} \FloatBarrier -\subsection{Leak Pressure Exponent (\texorpdfstring{\ct{HVAC\_leak\_exponent}}{HVAC\_leak\_exponent})} +\subsection{Leak Pressure Exponent (\texorpdfstring{\ct{HVAC_leak_exponent}}{HVAC_leak_exponent})} \label{HVAC_leak_exponent} \label{HVAC_leak_exponent_2} -As the interior pressure rises in a typical building, the leakage area will grow as small gaps, cracks, and other leakage paths open up. Leakage tests performed according to test standards such as ASTM~E779 provide two additional data points to quantify this behavior. These are the \ct{LEAK\_PRESSURE\_EXPONENT} and the \ct{LEAK\_REFERENCE\_PRESSURE}. The use of these additional inputs are shown in the equation below as $n$ and $\Delta p_{\rm ref}$ respectively where $A_{\rm L,ref}$ is given by \ct{LEAK\_AREA}. Additionally, a discharge coefficient, $C_{\rm d}$, is often applied in practice. +As the interior pressure rises in a typical building, the leakage area will grow as small gaps, cracks, and other leakage paths open up. Leakage tests performed according to test standards such as ASTM~E779 provide two additional data points to quantify this behavior. These are the \ct{LEAK_PRESSURE_EXPONENT} and the \ct{LEAK_REFERENCE_PRESSURE}. The use of these additional inputs are shown in the equation below as $n$ and $\Delta p_{\rm ref}$ respectively where $A_{\rm L,ref}$ is given by \ct{LEAK_AREA}. Additionally, a discharge coefficient, $C_{\rm d}$, is often applied in practice. \be \dot{V}_{\rm L} = C_{\rm d} \, A_{\rm L,ref} \left( \frac{|\Delta p|}{\Delta p_{\rm ref}} \right)^{n-0.5} \sqrt{\frac{2 |\Delta p|}{\rho_0}} \ee @@ -6958,37 +6958,37 @@ \subsection{Leak Pressure Exponent (\texorpdfstring{\ct{HVAC\_leak\_exponent}}{H \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_leak_exponent} \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_leak_exponent_2} -\caption[The \ct{HVAC\_leak\_exponent} cases]{(Left) Leakage velocities resulting from varying \ct{LEAK\_PRESSURE\_EXPONENT} and \ct{LEAK\_REFERENCE\_PRESSURE}. (Right) Volume flow versus pressure for a leaking steel enclosure.} +\caption[The \ct{HVAC_leak_exponent} cases]{(Left) Leakage velocities resulting from varying \ct{LEAK_PRESSURE_EXPONENT} and \ct{LEAK_REFERENCE_PRESSURE}. (Right) Volume flow versus pressure for a leaking steel enclosure.} \label{leak_exponent_fig} \end{figure} \FloatBarrier -\section{Complex Geometry (\texorpdfstring{\ct{HVAC\_geom} and \ct{leak\_geom}} {HVAC\_geom and leak\_geom})} +\section{Complex Geometry (\texorpdfstring{\ct{HVAC_geom} and \ct{leak_geom}} {HVAC_geom and leak_geom})} Two verification cases demonstrate the usage of HVAC for complex geometry. \label{HVAC_geom} -In the first verification case (\ct{HVAC\_geom}), two, sealed, 1~m$^3$ compartments are separated by a common wall. An HVAC duct defined with \ct{GEOM} connects the two compartments and is given a duct velocity of 2~m/s. Two meshes are defined that divide the compartments along their centerline such that the \ct{GEOM} duct lies in each mesh. HVAC ducts are added to connect the other two ends of the compartments to ambient. The ducts have the same area as the \ct{GEOM} duct. At steady-state, all duct velocities should be the same. +In the first verification case (\ct{HVAC_geom}), two, sealed, 1~m$^3$ compartments are separated by a common wall. An HVAC duct defined with \ct{GEOM} connects the two compartments and is given a duct velocity of 2~m/s. Two meshes are defined that divide the compartments along their centerline such that the \ct{GEOM} duct lies in each mesh. HVAC ducts are added to connect the other two ends of the compartments to ambient. The ducts have the same area as the \ct{GEOM} duct. At steady-state, all duct velocities should be the same. \label{leak_geom} -In the second verification case (\ct{leak\_geom}), three, sealed, 1~m$^3$ compartments are defined in a row, separated by common walls. The left domain boundary is \ct{OPEN} with one grid cell before the start of the left compartment. The left side of the left compartment has a leak path that is a \ct{VENT} on the \ct{OPEN} side and a \ct{GEOM} inside the compartment. It is defined as four grid cells and given the leak area of a single grid cell. The right side of the left compartment has two leak paths connecting to the left side of the middle compartment. One path is defined with two \ct{VENT} inputs and the other with two \ct{GEOM} inputs. These are each defined with two grid cells and given half of the area of the first leak path. The right side of the middle compartment is connected to the left side of the right compartment with a leak path that is a \ct{GEOM} in the middle compartment and a \ct{VENT} in the right. It has the size and leak area as the first leak path. Combined these leak paths represent all combinations of \ct{VENT} and \ct{GEOM}. The right side of the right compartment has a single grid cell exhaust \ct{VENT}. At steady-state all four leak paths should have the same velocity. +In the second verification case (\ct{leak_geom}), three, sealed, 1~m$^3$ compartments are defined in a row, separated by common walls. The left domain boundary is \ct{OPEN} with one grid cell before the start of the left compartment. The left side of the left compartment has a leak path that is a \ct{VENT} on the \ct{OPEN} side and a \ct{GEOM} inside the compartment. It is defined as four grid cells and given the leak area of a single grid cell. The right side of the left compartment has two leak paths connecting to the left side of the middle compartment. One path is defined with two \ct{VENT} inputs and the other with two \ct{GEOM} inputs. These are each defined with two grid cells and given half of the area of the first leak path. The right side of the middle compartment is connected to the left side of the right compartment with a leak path that is a \ct{GEOM} in the middle compartment and a \ct{VENT} in the right. It has the size and leak area as the first leak path. Combined these leak paths represent all combinations of \ct{VENT} and \ct{GEOM}. The right side of the right compartment has a single grid cell exhaust \ct{VENT}. At steady-state all four leak paths should have the same velocity. \begin{figure}[ht] \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_geom} \includegraphics[height=2.2in]{SCRIPT_FIGURES/leak_geom} - \caption[The HVAC + complex geometry cases]{(Left) Results of the \ct{HVAC\_geom} case. (Right) Results of the \ct{leak\_geom} case.} + \caption[The HVAC + complex geometry cases]{(Left) Results of the \ct{HVAC_geom} case. (Right) Results of the \ct{leak_geom} case.} \label{HVAC_geom_fig} \end{figure} \FloatBarrier -\section{ASHRAE Sample Problem 7\\(\texorpdfstring{\ct{ashrae\_7\_fixed\_flow}}{ashrae\_7\_fixed\_flow}, \texorpdfstring{\ct{ashrae\_7\_quadratic}}{ashrae\_7\_quadratic}, \texorpdfstring{\ct{ashrae\_7\_table}}{ashrae\_7\_table})} +\section{ASHRAE Sample Problem 7\\(\texorpdfstring{\ct{ashrae_7_fixed_flow}}{ashrae_7_fixed_flow}, \texorpdfstring{\ct{ashrae_7_quadratic}}{ashrae_7_quadratic}, \texorpdfstring{\ct{ashrae_7_table}}{ashrae_7_table})} \label{ashrae7} \label{ashrae7_fixed_flow} \label{ashrae7_quadratic} \label{ashrae7_table} -ASHRAE Sample Problem 7~\cite{ASHRAE} is a simple HVAC system that represents a metal working exhaust system for a machine shop where particulates from three pieces of equipment are removed by a dust collector. The network, shown in Fig.~\ref{ASHRAE7}, consists of three inlets, two tees, the dust collector, and a fan. The lengths, diameters, and friction losses for all the components are specified, as well as the fan flow rate. The pressure drops and flow rates can be computed by hand. Also listed in Fig.~\ref{ASHRAE7} are the predicted pressure drops for a fan with a fixed flow rate, a fan with a quadratic fan curve (\ct{MAX\_FLOW=2.4094, MAX\_PRESSURE=3000.}) that includes the fixed flow state (i.e., the flow rate of 1.45~\si{m^3/s} and pressure drop of 1913.5~Pa from the fixed flow simulation sits on the quadratic curve), and a fan with a \ct{RAMP} to define the same quadratic fan curve at 500~Pa intervals. The hand calculations assume a constant density, whereas the FDS computation will have a slightly non-uniform density in the network due to pressure drops. It is expected that there will be small differences that will be more noticeable at higher pressure changes. Additionally since specifying a fan curve via a table results in a piecewise linear approximation, it is expected that the user-defined fan curve results will vary slightly from the quadratic and fixed flow results. +ASHRAE Sample Problem 7~\cite{ASHRAE} is a simple HVAC system that represents a metal working exhaust system for a machine shop where particulates from three pieces of equipment are removed by a dust collector. The network, shown in Fig.~\ref{ASHRAE7}, consists of three inlets, two tees, the dust collector, and a fan. The lengths, diameters, and friction losses for all the components are specified, as well as the fan flow rate. The pressure drops and flow rates can be computed by hand. Also listed in Fig.~\ref{ASHRAE7} are the predicted pressure drops for a fan with a fixed flow rate, a fan with a quadratic fan curve (\ct{MAX_FLOW=2.4094, MAX_PRESSURE=3000.}) that includes the fixed flow state (i.e., the flow rate of 1.45~\si{m^3/s} and pressure drop of 1913.5~Pa from the fixed flow simulation sits on the quadratic curve), and a fan with a \ct{RAMP} to define the same quadratic fan curve at 500~Pa intervals. The hand calculations assume a constant density, whereas the FDS computation will have a slightly non-uniform density in the network due to pressure drops. It is expected that there will be small differences that will be more noticeable at higher pressure changes. Additionally since specifying a fan curve via a table results in a piecewise linear approximation, it is expected that the user-defined fan curve results will vary slightly from the quadratic and fixed flow results. \begin{figure}[ht] @@ -7002,7 +7002,7 @@ \section{ASHRAE Sample Problem 7\\(\texorpdfstring{\ct{ashrae\_7\_fixed\_flow}}{ \section{HVAC transient mass transport} This section documents verification of the mass transport subroutine of the HVAC module. Unless otherwise stated, the general test case has a \SI{1}{\meter\cubed} domain split into two equally sized compartments (being their own pressure zones) connected in some manner by an HVAC network. The left and right compartments are initialized with species~1 and species~2 respectively. Both species have an initial density of \SI[per-mode=symbol]{1.0}{\kilogram\per\meter\cubed}. The ducts have a cross sectional area of \SI{0.01}{m^2} and a flow rate of \SI[per-mode=symbol]{0.01}{\meter\cubed\per\second} (velocity of \SI[per-mode=symbol]{1}{\meter\per\second}). -\subsection{Convergence study for HVAC mass transport (\texorpdfstring{\ct{HVAC\_convergence\_study\_x}}{HVAC\_mass\_transport\_conv\_x})} +\subsection{Convergence study for HVAC mass transport (\texorpdfstring{\ct{HVAC_convergence_study_x}}{HVAC_mass_transport_conv_x})} \label{HVAC_mass_transport_conv_0020} \label{HVAC_mass_transport_conv_0040} \label{HVAC_mass_transport_conv_0080} @@ -7015,7 +7015,7 @@ \subsection{Convergence study for HVAC mass transport (\texorpdfstring{\ct{HVAC\ \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_convergence_1} -\caption[\ct{HVAC\_mass\_transport\_conv\_x} test case result]{Species~\num{1} mass fraction in the downstream duct node for the cell size convergence study. The mass fraction starts at zero and then linearly increases due to the initial conditions in the duct. At \SI{1}{\second} the mass fraction reaches its maximum and remains at this value until the end of the simulation. The figure illustrates that at lower cell counts (blue line) there is increased numerical diffusivity and that, for higher cell counts (cyan line), the numerical solution converges toward the analytical solution (black dashed line).} +\caption[\ct{HVAC_mass_transport_conv_x} test case result]{Species~\num{1} mass fraction in the downstream duct node for the cell size convergence study. The mass fraction starts at zero and then linearly increases due to the initial conditions in the duct. At \SI{1}{\second} the mass fraction reaches its maximum and remains at this value until the end of the simulation. The figure illustrates that at lower cell counts (blue line) there is increased numerical diffusivity and that, for higher cell counts (cyan line), the numerical solution converges toward the analytical solution (black dashed line).} \label{fig_HVAC_mass_transport_conv_1} \end{figure} @@ -7024,98 +7024,98 @@ \subsection{Convergence study for HVAC mass transport (\texorpdfstring{\ct{HVAC\ \scalebox{1}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_convergence_2} } & \scalebox{1}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_convergence_3} } \end{tabular*} -\caption[\ct{HVAC\_mass\_transport\_conv\_x} L1 and L2 error results]{L1 (left) and L2 (right) norm errors in mass fraction for the convergence study using various cell numbers (320, 160, 80, 40, 20 from left to right). The plot demonstrates errors decreasing for increasing cell numbers (i.e., decreasing cell size).} +\caption[\ct{HVAC_mass_transport_conv_x} L1 and L2 error results]{L1 (left) and L2 (right) norm errors in mass fraction for the convergence study using various cell numbers (320, 160, 80, 40, 20 from left to right). The plot demonstrates errors decreasing for increasing cell numbers (i.e., decreasing cell size).} \label{fig_HVAC_mass_transport_conv_2} \end{figure} -\subsection{Transport time (\texorpdfstring{\ct{HVAC\_mass\_transport}}{HVAC\_mass\_transport})} +\subsection{Transport time (\texorpdfstring{\ct{HVAC_mass_transport}}{HVAC_mass_transport})} \label{HVAC_mass_transport} A single \SI{10}{\meter} long duct connects the two compartments. The duct is initialized using data from the right duct node (i.e. species 2). As HVAC does not account for diffusion in the duct (only advection) we expect to see species~1 mass fraction at the downstream duct node start and remain at \SI[per-mode=symbol]{0}{\kilogram\per\kilogram} until \SI{10}{\second} and then instantaneously increase to \SI[per-mode=symbol]{1}{\kilogram\per\kilogram}. Ideal result and FDS output is presented in Fig.~\ref{fig_HVAC_mass_transport}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport} -\caption[\ct{HVAC\_mass\_transport} test case]{Species \num{1} mass fraction in the downstream duct node.} +\caption[\ct{HVAC_mass_transport} test case]{Species \num{1} mass fraction in the downstream duct node.} \label{fig_HVAC_mass_transport} \end{figure} -\subsection{Duct definition sensitivity analysis (\texorpdfstring{\ct{HVAC\_mass\_transport\_x}}{HVAC\_mass\_transport\_\x})} +\subsection{Duct definition sensitivity analysis (\texorpdfstring{\ct{HVAC_mass_transport_x}}{HVAC_mass_transport_\x})} \label{HVAC_mass_transport_1} \label{HVAC_mass_transport_2} \label{HVAC_mass_transport_3} \label{HVAC_mass_transport_4} -A sensitivity analysis is carried out to verify that results are not sensitive to differing methods of defining the same duct network. The general arrangement is identical to that of Sec.~\ref{HVAC_mass_transport}. Test cases \numrange{1}{4} incorporate the use of increasing numbers of \ct{DUCT}s (one, two, four and five respectively) and affiliated \ct{DUCTNODE}s but the number of cells in the discretized duct (\ct{N\_CELLS}), and hence the cell size, remains identical. We look at species \num{1} mass fraction at the downstream \ct{DUCTNODE} and expect to see no variation in the results for the differing number of \ct{DUCT}s. Ideal result and FDS output is presented in Fig.~\ref{fig_HVAC_mass_transport_x}. +A sensitivity analysis is carried out to verify that results are not sensitive to differing methods of defining the same duct network. The general arrangement is identical to that of Sec.~\ref{HVAC_mass_transport}. Test cases \numrange{1}{4} incorporate the use of increasing numbers of \ct{DUCT}s (one, two, four and five respectively) and affiliated \ct{DUCTNODE}s but the number of cells in the discretized duct (\ct{N_CELLS}), and hence the cell size, remains identical. We look at species \num{1} mass fraction at the downstream \ct{DUCTNODE} and expect to see no variation in the results for the differing number of \ct{DUCT}s. Ideal result and FDS output is presented in Fig.~\ref{fig_HVAC_mass_transport_x}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_x} -\caption[\ct{HVAC\_mass\_transport\_x} test case]{Species \num{1} mass fraction in the downstream duct node for different duct definitions. Although different numbers of ducts are used, the number of cells is identical for all cases. Therefore the output for all cases should also be identical.} +\caption[\ct{HVAC_mass_transport_x} test case]{Species \num{1} mass fraction in the downstream duct node for different duct definitions. Although different numbers of ducts are used, the number of cells is identical for all cases. Therefore the output for all cases should also be identical.} \label{fig_HVAC_mass_transport_x} \end{figure} -\subsection{Mass conservation 1 (\texorpdfstring{\ct{HVAC\_mass\_transport\_conservation\_1}}{HVAC\_mass\_transport\_conservation\_1})} +\subsection{Mass conservation 1 (\texorpdfstring{\ct{HVAC_mass_transport_conservation_1}}{HVAC_mass_transport_conservation_1})} \label{HVAC_mass_transport_conservation_1} The two compartments are connected by two ducts, A and B, each being \SI{10}{\meter} long with areas of \SI{0.01}{\meter\squared}. The ducts are initialized with species~1 with Duct~A having flow from left to right and duct~B having flow from right to left. The total mass in the FDS domain and in both compartments is expected to remain the same. The mass of species~1 in the left compartment is expected to decrease from \SI{0.5}{\kilogram} to \SI{0.292}{\kilogram} and in the right compartment it is expected to increase from \SI{0}{\kilogram} to \SI{0.292}{\kilogram}. The spatially mirrored behavior is expected of species~2 with ending values of \SI{0.208}{\kilogram}. Fig.~\ref{fig_HVAC_mass_transport_conservation_1a} shows mass in the left compartment, right compartment and in the whole FDS domain. Fig.~\ref{fig_HVAC_mass_transport_conservation_1b} presents the species~1 and 2 masses in the left and right compartments. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_conservation_1a} -\caption[\ct{HVAC\_mass\_transport\_conservation\_1} test case]{Total mass in the FDS domain and total mass in the left and right compartments.} +\caption[\ct{HVAC_mass_transport_conservation_1} test case]{Total mass in the FDS domain and total mass in the left and right compartments.} \label{fig_HVAC_mass_transport_conservation_1a} \end{figure} \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_conservation_1b} -\caption[\ct{HVAC\_mass\_transport\_conservation\_1} test case]{Species~1 and 2 masses in the left and right compartments.} +\caption[\ct{HVAC_mass_transport_conservation_1} test case]{Species~1 and 2 masses in the left and right compartments.} \label{fig_HVAC_mass_transport_conservation_1b} \end{figure} -\subsection{Mass conservation 2 (\texorpdfstring{\ct{HVAC\_mass\_transport\_conservation\_2}}{HVAC\_mass\_transport\_conservation\_2})} +\subsection{Mass conservation 2 (\texorpdfstring{\ct{HVAC_mass_transport_conservation_2}}{HVAC_mass_transport_conservation_2})} \label{HVAC_mass_transport_conservation_2} The case setup is identical to that of Sec.~\ref{HVAC_mass_transport_conservation_1} with the exception of the length of duct~A is reduced to \SI{5}{\meter} and the length of duct~B is increased to \SI{20}{\meter}. This gives a total FDS and HVAC domain \(\text{species}\ 1 \colon \text{species}\ 2\) mass ratio of \(0.6 \colon 0.4\). We expect that the species~1 and 2 masses within the FDS domain will come to equilibrium at this ratio. Fig.~\ref{fig_HVAC_mass_transport_conservation_2} shows the total masses of species~1 and 2. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_conservation_2} -\caption[\ct{HVAC\_mass\_transport\_conservation\_2} test case]{Total species~1 and 2 masses in the FDS domain. The initial equilibrium is prior to species~1 entering duct~B and species~2 entering duct~A.} +\caption[\ct{HVAC_mass_transport_conservation_2} test case]{Total species~1 and 2 masses in the FDS domain. The initial equilibrium is prior to species~1 entering duct~B and species~2 entering duct~A.} \label{fig_HVAC_mass_transport_conservation_2} \end{figure} -\subsection{Mass conservation 3 (\texorpdfstring{\ct{HVAC\_mass\_transport\_conservation\_3}}{HVAC\_mass\_transport\_conservation\_3})} +\subsection{Mass conservation 3 (\texorpdfstring{\ct{HVAC_mass_transport_conservation_3}}{HVAC_mass_transport_conservation_3})} \label{HVAC_mass_transport_conservation_3} The case setup is identical to that of Sec.~\ref{HVAC_mass_transport_conservation_1} except that both ducts~A and B have a length of \SI{12.5}{\meter} and are initialized with species~2. This gives a total domain (FDS and HVAC) \(\text{species}\ 1 \colon \text{species}\ 2\) mass ratio of \(0.4 \colon 0.6\). We expect that the species~1 and 2 masses within the FDS domain will come to equilibrium at this ratio. Fig.~\ref{fig_HVAC_mass_transport_conservation_3} presents the ideal and FDS total masses of species~1 and 2. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_conservation_3} -\caption[\ct{HVAC\_mass\_transport\_conservation\_3} test case]{Total species~1 and 2 masses in the FDS domain. Due to the initial contents of the two ducts (species~2) the mass ratio of species~1 and 2 is \(0.4 \colon 0.6\); therefore at equilibrium this ratio should be observed throughout the domain.} +\caption[\ct{HVAC_mass_transport_conservation_3} test case]{Total species~1 and 2 masses in the FDS domain. Due to the initial contents of the two ducts (species~2) the mass ratio of species~1 and 2 is \(0.4 \colon 0.6\); therefore at equilibrium this ratio should be observed throughout the domain.} \label{fig_HVAC_mass_transport_conservation_3} \end{figure} -\subsection{Transient transport branching ducts (\texorpdfstring{\ct{HVAC\_mass\_transport\_branch}}{HVAC\_mass\_transport\_branch})} +\subsection{Transient transport branching ducts (\texorpdfstring{\ct{HVAC_mass_transport_branch}}{HVAC_mass_transport_branch})} \label{HVAC_mass_transport_branch} The two compartments are connected by an HVAC network comprising a single \SI{5}{\meter} feed duct which branches into two ducts (ducts~A and B) at a tee with both ducts discharging to the right compartment. Ducts~A and B each have a cross-sectional area of \SI{0.005}{\meter\squared}, half that of the feed duct, and will therefore both have a velocity of \SI[per-mode=symbol]{1}{\meter\per\second}. Duct~A has a length of \SI{5}{\meter} and duct~B has a length of \SI{10}{\meter}. The duct network is initialized using data from the right compartment. Based on the duct lengths and a constant velocity we expect to see the species~\num{1} mass fraction at outlet~A and B increase from \num{0} to \SI[per-mode=symbol]{1}{\kilogram\per\kilogram} at \SI{10}{\second} and \SI{15}{\second} respectively. Ideal result and FDS output is presented in Fig.~\ref{fig_HVAC_mass_transport_branch}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_branch} -\caption[\ct{HVAC\_mass\_transport\_branch} test case]{Species \num{1} mass fraction in the downstream duct nodes. The distance from the inlet to outlet~A and from the inlet to outlet~B is \SI{10}{\meter} and \SI{15}{\meter} respectively. Given a constant velocity of \SI[per-mode=symbol]{1}{\meter\per\second} through the network, the transport time from inlet to outlets~A and B should be \SI{10}{\second} and \SI{15}{\second} respectively.} +\caption[\ct{HVAC_mass_transport_branch} test case]{Species \num{1} mass fraction in the downstream duct nodes. The distance from the inlet to outlet~A and from the inlet to outlet~B is \SI{10}{\meter} and \SI{15}{\meter} respectively. Given a constant velocity of \SI[per-mode=symbol]{1}{\meter\per\second} through the network, the transport time from inlet to outlets~A and B should be \SI{10}{\second} and \SI{15}{\second} respectively.} \label{fig_HVAC_mass_transport_branch} \end{figure} -\subsection{Transient transport combining ducts (\texorpdfstring{\ct{HVAC\_mass\_transport\_combine}}{HVAC\_mass\_transport\_combine})} +\subsection{Transient transport combining ducts (\texorpdfstring{\ct{HVAC_mass_transport_combine}}{HVAC_mass_transport_combine})} \label{HVAC_mass_transport_combine} The left compartment is separated into two sub-compartments, A and B. These sub-compartments are initialized with species \numlist{1;2} respectively. An inlet vent is located in each sub-compartment and these vents are connected to separate ducts, of lengths \SI{1}{\meter} and \SI{2}{\meter} respectively, which combine at an internal tee. A single duct, with a length of \SI{1}{\meter}, connects this tee to the right compartment where it discharges to a single outlet into the right compartment. The right compartment and the duct network is initialized with species \num{3}. If we examine species mass fractions at the downstream outlet duct node we expect to see a species \num{3} mass fraction of \SI[per-mode=symbol]{1}{\kilogram\per\kilogram} for \SI{2}{\second}, a species \numlist{1;3} mass fraction of \SI[per-mode=symbol]{0.5}{\kilogram\per\kilogram} each from \SI{2}{\second} to \SI{3}{\second} and a species \numlist{1;2} mass fraction of \SI[per-mode=symbol]{0.5}{\kilogram\per\kilogram} each from \SI{3}{\second} until the end of the simulation. Ideal result and FDS output is presented in Fig.~\ref{fig_HVAC_mass_transport_combine}. \begin{figure}[ht] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_combine} -\caption[\ct{HVAC\_mass\_transport\_branch} test case]{Species mass fractions at the outlet duct node. Species~3 starts and remains at \SI[per-mode=symbol]{1}{\kilogram\per\kilogram} for \SI{2}{\second} as the initial contents of the duct flows out of the outlet. At \SI{2}{\second} the species from the sub-compartment connected via the shorter duct and the remaining initial species from the longer duct flows out of the outlet. At \SI{3}{\second} the species from the sub-compartment connected by the longer duct reaches the outlet and the mass fraction is split between the species from the two upstream sub-compartments - no initial species remains in the ducts.} +\caption[\ct{HVAC_mass_transport_branch} test case]{Species mass fractions at the outlet duct node. Species~3 starts and remains at \SI[per-mode=symbol]{1}{\kilogram\per\kilogram} for \SI{2}{\second} as the initial contents of the duct flows out of the outlet. At \SI{2}{\second} the species from the sub-compartment connected via the shorter duct and the remaining initial species from the longer duct flows out of the outlet. At \SI{3}{\second} the species from the sub-compartment connected by the longer duct reaches the outlet and the mass fraction is split between the species from the two upstream sub-compartments - no initial species remains in the ducts.} \label{fig_HVAC_mass_transport_combine} \end{figure} -\subsection{Energy conservation and pressure (\texorpdfstring{\ct{HVAC\_mass\_transport\_energy}}{HVAC\_mass\_transport\_energy})} +\subsection{Energy conservation and pressure (\texorpdfstring{\ct{HVAC_mass_transport_energy}}{HVAC_mass_transport_energy})} \label{HVAC_mass_transport_energy} The left compartment is initialized with a temperature of \SI{100}{\degreeCelsius}, the right compartment remains at ambient (\SI{20}{\degreeCelsius}). Both compartments and the duct network are initialized with a single species. The species has a specific heat of \SI[per-mode=symbol]{1}{\kilo\joule\per\kilogram\per\kelvin}. The compartments are connected by two separate ducts, duct~A and duct~B, both with a length of \SI{1}{\meter}. Duct~A has a specified flow from left to right with a velocity of \SI[per-mode=symbol]{1}{\meter\per\second}, duct~B has no defined flow and a minor losses coefficient of \num{2}. Duct~A and B are initialized using gas data from the left and right compartment duct nodes respectively. Based on Eq.~\ref{eq_HVAC_mass_transport_energy} enthalpy in the FDS domain should be \SI{293.15}{\kilo\joule} and should remain constant. Based upon Eq.~\ref{HVAC_steady_state} the pressure difference between the upstream and downstream duct node of duct~B should be \SI{0.8928}{\pascal}. Duct node pressure difference and total enthalpy are presented in Fig.~\ref{fig_HVAC_mass_transport_energy}. @@ -7129,7 +7129,7 @@ \subsection{Energy conservation and pressure (\texorpdfstring{\ct{HVAC\_mass\_tr \scalebox{1}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_energy_p} } & \scalebox{1}{ \includegraphics[height=2.2in]{SCRIPT_FIGURES/HVAC_mass_transport_energy_e} } \end{tabular*} -\caption[\ct{HVAC\_mass\_transport\_energy} $\Delta$ p and enthalpy results]{Pressure difference between the inlet and outlet of duct~B (left). Total enthalpy in the CFD domain (right).} +\caption[\ct{HVAC_mass_transport_energy} $\Delta$ p and enthalpy results]{Pressure difference between the inlet and outlet of duct~B (left). Total enthalpy in the CFD domain (right).} \label{fig_HVAC_mass_transport_energy} \end{figure} @@ -7149,16 +7149,16 @@ \section{Level Set Model} \subsection{Elliptical Fire Spread} One possible approach for advancing the fire front, and the default for level set in FDS, is to assume that point ignitions grow in an elliptical shape. Thus, the spread rate at any point along the front can be determined by assuming elliptical growth from this point (Huygens' principle)~\cite{Richards:1990,Finney:FARSITE}. The shape of the ellipse is determined by the Rothermel fire spread equation~\cite{Rothermel:1972} and empirical assumptions regarding the length-to-breadth ratio~\cite{Anderson:1983} and the head-to-backing fire spread ratio~\cite{Finney:FARSITE}. The orientation of the ellipse at a given point along the fireline is determined by the angle between the normal vector to the fireline and the vector summation of the wind and slope direction (with slope treated as an effective wind). Further details of the relevant equations and the solution technique employed in FDS can be found in Bova et al.~\cite{Bova:IJWF2015}. -In the simplest configuration of a static uniform wind field (\ct{LEVEL\_SET\_MODE = 1}), a uniform slope, and a uniform fuel it is possible to solve the equations for elliptical spread directly and to calculate the spread in all directions from a point ignition. This allows verification of the algorithm in FDS. Four cases are configured to test the influence of wind and slope: +In the simplest configuration of a static uniform wind field (\ct{LEVEL_SET_MODE = 1}), a uniform slope, and a uniform fuel it is possible to solve the equations for elliptical spread directly and to calculate the spread in all directions from a point ignition. This allows verification of the algorithm in FDS. Four cases are configured to test the influence of wind and slope: \begin{itemize} - \item \ct{LS\_ellipse\_0ms\_00deg.fds}: no wind and no slope; - \item \ct{LS\_ellipse\_5ms\_00deg.fds}: a \SI[per-mode=symbol]{5}{\meter\per\second} wind from the west and no slope; - \item \ct{LS\_ellipse\_0ms\_30deg.fds}: no wind and a \SI{30}{\degree} slope oriented to the northeast; - \item \ct{LS\_ellipse\_5ms\_30deg.fds}: a \SI[per-mode=symbol]{5}{\meter\per\second} wind from the west and a \SI{30}{\degree} slope oriented to the northeast. + \item \ct{LS_ellipse_0ms_00deg.fds}: no wind and no slope; + \item \ct{LS_ellipse_5ms_00deg.fds}: a \SI[per-mode=symbol]{5}{\meter\per\second} wind from the west and no slope; + \item \ct{LS_ellipse_0ms_30deg.fds}: no wind and a \SI{30}{\degree} slope oriented to the northeast; + \item \ct{LS_ellipse_5ms_30deg.fds}: a \SI[per-mode=symbol]{5}{\meter\per\second} wind from the west and a \SI{30}{\degree} slope oriented to the northeast. \end{itemize} -The cases involve a point ignition at $(x,y) = (0,0)$ and a fuel with an arbitrary zero-wind zero-slope spread rate (\ct{VEG\_LSET\_ROS\_00}) of \SI[per-mode=symbol]{0.05}{\meter\per\second}. The fuel layer has the default packing ratio (\ct{VEG\_LSET\_BETA}) of 0.01 and surface-to-volume ratio (\ct{VEG\_LSET\_SIGMA}) of \SI[per-mode=reciprocal]{5000}{\per\meter}, which are used to calculate the effect of wind and slope on fire spread~\cite{Rothermel:1972}. The default fuel height (\ct{VEG\_LSET\_HT}) of \SI{0.2}{\meter} is also applied, which is used to calculate the mid-flame wind speed from the value of the wind aloft~\cite{Andrews:2012}. +The cases involve a point ignition at $(x,y) = (0,0)$ and a fuel with an arbitrary zero-wind zero-slope spread rate (\ct{VEG_LSET_ROS_00}) of \SI[per-mode=symbol]{0.05}{\meter\per\second}. The fuel layer has the default packing ratio (\ct{VEG_LSET_BETA}) of 0.01 and surface-to-volume ratio (\ct{VEG_LSET_SIGMA}) of \SI[per-mode=reciprocal]{5000}{\per\meter}, which are used to calculate the effect of wind and slope on fire spread~\cite{Rothermel:1972}. The default fuel height (\ct{VEG_LSET_HT}) of \SI{0.2}{\meter} is also applied, which is used to calculate the mid-flame wind speed from the value of the wind aloft~\cite{Andrews:2012}. The shapes of the fire fronts are shown in Figure~\ref{fig:level_set_ellipse}. The relative errors between the FDS cases and the empirical model are shown in Figure~\ref{fig:level_set_ellipse_error}. @@ -7183,7 +7183,7 @@ \subsection{Elliptical Fire Spread} \label{fig:level_set_ellipse_error} \end{figure} -\subsection{Custom Wind Fuction (\texorpdfstring{\ct{LS\_wind\_ramp}}{LS\_wind\_ramp})} +\subsection{Custom Wind Fuction (\texorpdfstring{\ct{LS_wind_ramp}}{LS_wind_ramp})} \label{LS_wind_ramp} The level set model determines a wind-aided head fire spread rate based on the function @@ -7212,10 +7212,10 @@ \subsection{Custom Wind Fuction (\texorpdfstring{\ct{LS\_wind\_ramp}}{LS\_wind\_ \end{figure} -\subsection{Ember Generation (\texorpdfstring{\ct{LS4\_ember\_yield}}{LS4\_ember\_yield})} +\subsection{Ember Generation (\texorpdfstring{\ct{LS4_ember_yield}}{LS4_ember_yield})} \label{LS4_ember_yield} -This cases tests the application of an ember yield to a \ct{LEVEL\_SET\_MODE = 4} calculation. A hypothetical fuel layer with a no-wind, no-slope spread rate of 0.15~m/s is specified, using the default values for fuel properties. These defaults include a fuel load of 1.0~\unit{kg/m^2} and a char yield of 0.2. We set \ct{EMBER\_YIELD} to 0.05~kg/kg and verify this value by integrating the total mass of embers produced and total mass of fuel burned over the duration of the simulation. The inputs are as follows: +This cases tests the application of an ember yield to a \ct{LEVEL_SET_MODE = 4} calculation. A hypothetical fuel layer with a no-wind, no-slope spread rate of 0.15~m/s is specified, using the default values for fuel properties. These defaults include a fuel load of 1.0~\unit{kg/m^2} and a char yield of 0.2. We set \ct{EMBER_YIELD} to 0.05~kg/kg and verify this value by integrating the total mass of embers produced and total mass of fuel burned over the duration of the simulation. The inputs are as follows: \begin{lstlisting} &SURF ID = 'fuel' VEG_LSET_ROS_00 = 0.15 @@ -7225,7 +7225,7 @@ \subsection{Ember Generation (\texorpdfstring{\ct{LS4\_ember\_yield}}{LS4\_ember EMBER_TRACKING_RATIO = 100 PART_ID = 'brands'/ \end{lstlisting} -where the \ct{PART\_ID} corresponds to a \ct{PART} line that defines the properties of a single ember. The cumulative yield is shown in Figure~\ref{fig:LS4_ember_yield}. We also verify the use of \ct{EMBER\_TRACKING\_RATIO} by checking the average weighting factor for all Lagrangian particles (the number of embers each represents). +where the \ct{PART_ID} corresponds to a \ct{PART} line that defines the properties of a single ember. The cumulative yield is shown in Figure~\ref{fig:LS4_ember_yield}. We also verify the use of \ct{EMBER_TRACKING_RATIO} by checking the average weighting factor for all Lagrangian particles (the number of embers each represents). \begin{figure}[h] \begin{center} @@ -7239,10 +7239,10 @@ \subsection{Ember Generation (\texorpdfstring{\ct{LS4\_ember\_yield}}{LS4\_ember \end{figure} -\subsection{Ember ignition (\texorpdfstring{\ct{LS4\_ember\_ignition}}{LS4\_ember\_ignition})} +\subsection{Ember ignition (\texorpdfstring{\ct{LS4_ember_ignition}}{LS4_ember_ignition})} \label{LS4_ember_ignition} -This case tests the ember ignition model intended for use with \ct{LEVEL\_SET\_MODE = 4}. As with the previous example, a hypothetical fuel layer with a no-wind, no-slope spread rate of 0.15~m/s is specified, using the default fuel load of 1.0~\unit{kg/m^2} and char yield of 0.2. \ct{EMBER\_IGNITION\_POWER\_MEAN} is set to 0.005~kW and \ct{EMBER\_IGNITION\_POWER\_SIGMA} is left at the default value of 0.001~kW. Two meshes are configured each with a single ember dropped on the fuel bed. The power of the embers is determined by: +This case tests the ember ignition model intended for use with \ct{LEVEL_SET_MODE = 4}. As with the previous example, a hypothetical fuel layer with a no-wind, no-slope spread rate of 0.15~m/s is specified, using the default fuel load of 1.0~\unit{kg/m^2} and char yield of 0.2. \ct{EMBER_IGNITION_POWER_MEAN} is set to 0.005~kW and \ct{EMBER_IGNITION_POWER_SIGMA} is left at the default value of 0.001~kW. Two meshes are configured each with a single ember dropped on the fuel bed. The power of the embers is determined by: \be \dot{q}_{\rm ember} = A_s \left[h_c \left( T_{\rm ember} - T_\infty \right) + \sigma \epsilon \left( T^4_{\rm ember} - T^4_\infty \right) \right] \ee @@ -7254,7 +7254,7 @@ \subsection{Ember ignition (\texorpdfstring{\ct{LS4\_ember\_ignition}}{LS4\_embe \includegraphics[height=2.2in]{SCRIPT_FIGURES/LS4_ember_ignition.pdf} \end{tabular} \end{center} - \caption[Level set ember ignition]{Test of level set fire spread when initiated from spot fire based on \ct{EMBER\_IGNITION\_POWER\_MEAN}.} + \caption[Level set ember ignition]{Test of level set fire spread when initiated from spot fire based on \ct{EMBER_IGNITION_POWER_MEAN}.} \label{fig:LS4_ember_ignition} \end{figure} @@ -7277,26 +7277,17 @@ \section{Verification of setup checks on broken geometries} The following verification cases contain specific broken geometries in an otherwise correctly formatted FDS input file: - \begin{itemize} - \item \ct{geom\_bad\_inconsistent\_normals.fds}: a cube with only one face normal inverted; - \item \ct{geom\_bad\_inverted\_normals.fds}: a cube with all face normals inverted; - \item \ct{geom\_bad\_non\_manifold\_edge.fds}: a cube and a box sharing the same non manifold edge; - \item \ct{geom\_bad\_open\_surface.fds}: a cube missing one face, that is an open surface; + \item \ct{geom_bad_inconsistent_normals.fds}: a cube with only one face normal inverted; + \item \ct{geom_bad_inverted_normals.fds}: a cube with all face normals inverted; + \item \ct{geom_bad_non_manifold_edge.fds}: a cube and a box sharing the same non manifold edge; + \item \ct{geom_bad_open_surface.fds}: a cube missing one face, that is an open surface; \end{itemize} - -To allow Firebot to consider the test successful if it catches the error condition, -each of the above input files contain the following parameter in the \ct{MISC}\ line: - +The test is successful if FDS traps the error. Each input file contains the following parameter on the \ct{MISC} line: \begin{lstlisting} -&MISC POSITIVE_ERROR_TEST = T +&MISC ..., POSITIVE_ERROR_TEST = T, ... / \end{lstlisting} - -The effect of this parameter is replacing the \ct{ERROR} label of the message with a \ct{SUCCESS}\ label. - -After Firebot is run, the \ct{geom\_positive\_errors.m} Matlab script checks the existence -of the planned error condition in the \ct{CHID.err} file, reporting in cases where the condition -is not met. +This parameter causes the word \ct{ERROR} to be replaced by \ct{SUCCESS} in the error message. The script \ct{geom_positive_errors.py} checks the \ct{CHID.err} file and reports if the condition is not met. \newpage @@ -7305,7 +7296,7 @@ \section{Simple geometry and properties definitions} \subsection{Simple Geometry} -Figure~\ref{fig:geom_simple} was created using the following input. The \ct{VERTS} keyword is used to specify 3 vertices and the \ct{FACES}\ keyword is used to specify the indices of the triangular face and the \ct{SURF\_ID} the face has. +Figure~\ref{fig:geom_simple} was created using the following input. The \ct{VERTS} keyword is used to specify 3 vertices and the \ct{FACES}\ keyword is used to specify the indices of the triangular face and the \ct{SURF_ID} the face has. \begin{lstlisting} &GEOM ID='geom1', VERTS=0.0,0.0,0.0, 1.0,0.5,0.0, 1.0,1.0,1.0, FACES=1,2,3,1 SURF_ID='surf1' / @@ -7317,7 +7308,7 @@ \subsection{Simple Geometry} \includegraphics[height=2.2in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_simple.png} \end{tabular} \end{center} - \caption[Simple triangulated geometry]{A triangle created using 3 vertices and 1 face. Case: \ct{geom\_simple.fds}} + \caption[Simple triangulated geometry]{A triangle created using 3 vertices and 1 face. Case: \ct{geom_simple.fds}} \label{fig:geom_simple} \end{figure} @@ -7336,7 +7327,7 @@ \subsection{Cuboid Obstacle} \includegraphics[height=2.2in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_obst.png} \end{tabular} \end{center} - \caption[Block geometry using \ct{XB}]{A block generated using the \ct{XB}\ keyword. The block is refined automatically to be consistent with the underlying grid resolution. Case: \ct{geom\_obst.fds}} + \caption[Block geometry using \ct{XB}]{A block generated using the \ct{XB}\ keyword. The block is refined automatically to be consistent with the underlying grid resolution. Case: \ct{geom_obst.fds}} \label{fig:geom_obst} \end{figure} @@ -7351,7 +7342,7 @@ \subsection{Self-generated Sphere Geometry} &GEOM ID='sphere',SURF_ID='surf1',SPHERE_RADIUS=0.5, N_LEVELS=n,SPHERE_ORIGIN=0.0,0.0,0.0 / \end{lstlisting} -The \ct{N\_LEVELS}\ keyword is used to specify the resolution of the sphere, larger \ct{N\_LEVELS}\ values result in a more highly resolved sphere.\ct{LEVEL=0} produces a 20 sided sphere approximation, an icosahedron . \ct{LEVEL=n} produces a sphere approximation with four times as many triangles as the sphere produced with \ct{LEVEL=n-1}. The \ct{SPHERE\_RADIUS}\ and \ct{SPHERE\_ORIGIN}\ keywords are used to specify the size and location of the sphere. This discretization technique should result in equilateral triangles at each recursion level. +The \ct{N_LEVELS}\ keyword is used to specify the resolution of the sphere, larger \ct{N_LEVELS}\ values result in a more highly resolved sphere.\ct{LEVEL=0} produces a 20 sided sphere approximation, an icosahedron . \ct{LEVEL=n} produces a sphere approximation with four times as many triangles as the sphere produced with \ct{LEVEL=n-1}. The \ct{SPHERE_RADIUS}\ and \ct{SPHERE_ORIGIN}\ keywords are used to specify the size and location of the sphere. This discretization technique should result in equilateral triangles at each recursion level. \begin{figure} \begin{center} @@ -7368,28 +7359,28 @@ \subsection{Self-generated Sphere Geometry} \end{tabular} \end{center} \caption[Recursive sphere discretization]{Recursive sphere discretization. A sphere at a given level is - obtained by splitting each triangle from the previous level into four parts and re-normalizing added vertices. Cases: \ct{geom\_sphere1a.fds},...,\ct{geom\_sphere1f.fds}} + obtained by splitting each triangle from the previous level into four parts and re-normalizing added vertices. Cases: \ct{geom_sphere1a.fds},...,\ct{geom_sphere1f.fds}} \label{fig:geom_sphere} \end{figure} -Figure \ref{fig:geom_sphere2a} was created by using \ct{N\_LAT}\ and \ct{N\_LONG}\ keywords in a \ct{GEOM}\ namelist -to split a sphere in latitudinal (north/south) and longitudinal (east/west) directions respectively. The minimum values of \ct{N\_LAT}\ and \ct{N\_LONG} permitted are 3 and 6. This discretization technique results in triangles with high aspect ratios near the poles at higher discretization levels. +Figure \ref{fig:geom_sphere2a} was created by using \ct{N_LAT}\ and \ct{N_LONG}\ keywords in a \ct{GEOM}\ namelist +to split a sphere in latitudinal (north/south) and longitudinal (east/west) directions respectively. The minimum values of \ct{N_LAT}\ and \ct{N_LONG} permitted are 3 and 6. This discretization technique results in triangles with high aspect ratios near the poles at higher discretization levels. \begin{figure} \begin{center} \begin{tabular}{cc} \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3a.png}& \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3b.png}\\ - N\_LAT=3,N\_LONG=6&N\_LAT=6,N\_LONG=12\\ + N_LAT=3,N_LONG=6&N_LAT=6,N_LONG=12\\ \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3c.png}& \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3d.png}\\ - N\_LAT=12,N\_LONG=24&N\_LAT=24,N\_LONG=48\\ + N_LAT=12,N_LONG=24&N_LAT=24,N_LONG=48\\ \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3e.png}& \includegraphics[width=3.in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_sphere3f.png}\\ - N\_LAT=48,N\_LONG=96&N\_LAT=96,N\_LONG=192\\ + N_LAT=48,N_LONG=96&N_LAT=96,N_LONG=192\\ \end{tabular} \end{center} -\caption[Latitude/longitude sphere discretization]{Latitude/longitude sphere discretization. Spheres are split in longitudinal (east/west) and latitudinal (north/south) directions using the \ct{N\_LAT}\ and \ct{N\_LONG} keywords. Cases: \ct{geom\_sphere3a.fds,...,geom\_sphere3f.fds}} +\caption[Latitude/longitude sphere discretization]{Latitude/longitude sphere discretization. Spheres are split in longitudinal (east/west) and latitudinal (north/south) directions using the \ct{N_LAT}\ and \ct{N_LONG} keywords. Cases: \ct{geom_sphere3a.fds,...,geom_sphere3f.fds}} \label{fig:geom_sphere2a} \end{figure} @@ -7405,7 +7396,7 @@ \subsection{Terrain from Digital Elevation Map} \includegraphics[height=2.75in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_terrain.png} \end{tabular} \end{center} - \caption[Defining digital elevation maps using \ct{ZVALS}]{Elevations are defined on a rectangular array of grid points using the \ct{ZVALS}\ keyword. Case: \ct{gridgeom\_terrain.fds}} + \caption[Defining digital elevation maps using \ct{ZVALS}]{Elevations are defined on a rectangular array of grid points using the \ct{ZVALS}\ keyword. Case: \ct{gridgeom_terrain.fds}} \label{fig:geom_terrain} \end{figure} @@ -7414,7 +7405,7 @@ \subsection{Terrain from Digital Elevation Map} \subsection{Adding Texture Map} Figure \ref{fig:geom_texture} was created using the following \ct{SURF} and \ct{GEOM} namelists. -The \ct{TEXTURE\_MAP}\ keyword on the \ct{SURF}\ is used to specify the name of the image +The \ct{TEXTURE_MAP}\ keyword on the \ct{SURF}\ is used to specify the name of the image file used to texture map the geometric object. \begin{lstlisting} &SURF ID='surf1',TEXTURE_MAP='nistleft.jpg',TEXTURE_WIDTH=0.6, @@ -7431,7 +7422,7 @@ \subsection{Adding Texture Map} \includegraphics[width=4.0in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_texture.png} \end{tabular} \end{center} - \caption[Applying a texture map to a \ct{GEOM} surface]{A texture is applied to a triangle. Case: \ct{geom\_texture.fds}} + \caption[Applying a texture map to a \ct{GEOM} surface]{A texture is applied to a triangle. Case: \ct{geom_texture.fds}} \label{fig:geom_texture} \end{figure} @@ -7439,7 +7430,7 @@ \subsection{Adding Texture Map} \subsection{Adding Multiple Texture Maps} -Figure \ref{fig:geom_texture2} was created using the following \ct{SURF} and \ct{GEOM} namelists. The \ct{TEXTURE\_MAP}\ keyword on the \ct{SURF}\ is used to specify the name of the image file used to texture map the geometric object. This example has two textures. +Figure \ref{fig:geom_texture2} was created using the following \ct{SURF} and \ct{GEOM} namelists. The \ct{TEXTURE_MAP}\ keyword on the \ct{SURF}\ is used to specify the name of the image file used to texture map the geometric object. This example has two textures. \begin{lstlisting} &SURF ID='surf1' TEXTURE_MAP='nistleft.jpg', TEXTURE_WIDTH=0.6,TEXTURE_HEIGHT=0.2,COLOR='BLUE' / @@ -7462,7 +7453,7 @@ \subsection{Adding Multiple Texture Maps} \includegraphics[width=4.0in]{../FDS_User_Guide/SCRIPT_FIGURES/geom_texture2.png} \end{tabular} \end{center} - \caption[Applying multiple texture maps to a \ct{GEOM} surface]{Two texture maps are applied to two separate triangles. Case: \ct{geom\_texture2.fds}} + \caption[Applying multiple texture maps to a \ct{GEOM} surface]{Two texture maps are applied to two separate triangles. Case: \ct{geom_texture2.fds}} \label{fig:geom_texture2} \end{figure} @@ -7483,7 +7474,7 @@ \subsection{Adding Texture Maps with Different Methods} N_LEVELS=3,SPHERE_RADIUS=0.25,SPHERE_ORIGIN=0.75,0.5,0.5, TEXTURE_ORIGIN=0.75,0.5,0.5,TEXTURE_MAPPING='SPHERICAL' / \end{lstlisting} -The \ct{TEXTURE\_MAP}\ keyword is used to specify the name of the image file applied to the geometric object. The \ct{SPHERICAL}\ setting indicates that that the texture map image is applied to the object using spherical coordinates. +The \ct{TEXTURE_MAP}\ keyword is used to specify the name of the image file applied to the geometric object. The \ct{SPHERICAL}\ setting indicates that that the texture map image is applied to the object using spherical coordinates. \begin{figure}[!ht] @@ -7498,7 +7489,7 @@ \subsection{Adding Texture Maps with Different Methods} \end{center} \caption[Applying texture maps to a \ct{GEOM} surface, different methods]{Texture maps applied to spheres discretized using two different methods. The two spheres on the left are discretized by splitting the sphere along longitudinal (east/west) and latitudinal (north/south) directions. - The two spheres on the right are discretized recursively starting with an icosahedron (20 sided polyhedron). Texture maps applied to the top two sphere have 8 segments. Texture map applied to the bottom two spheres have 5 segments. Cases: \ct{geom\_texture3a.fds, geom\_texture3b.fds, geom\_texture4a.fds, geom\_texture4b.fds}} + The two spheres on the right are discretized recursively starting with an icosahedron (20 sided polyhedron). Texture maps applied to the top two sphere have 8 segments. Texture map applied to the bottom two spheres have 5 segments. Cases: \ct{geom_texture3a.fds, geom_texture3b.fds, geom_texture4a.fds, geom_texture4b.fds}} \label{fig:geom_texture3} \end{figure} @@ -7571,7 +7562,7 @@ \subsection{Temporal Error Analysis for Variable Density Projection} \title{Temporal Order of Accuracy} -Three cases are defined corresponding to default FDS DNS mode in cells not covered by cut-cells, and in the cut-cell region, for CFL numbers $0.25$, $0.125$, $0.0625$. These cases are defined in \\ \ct{/Complex\_Geometry/saad\_CC\_explicit\_*.fds}. +Three cases are defined corresponding to default FDS DNS mode in cells not covered by cut-cells, and in the cut-cell region, for CFL numbers $0.25$, $0.125$, $0.0625$. These cases are defined in \\ \ct{/Complex_Geometry/saad_CC_explicit_*.fds}. Same procedure as explained in Sec.~\ref{sec:saad_temporal_error} is used to define the temporal order of accuracy $p$. As noted there, this procedure filters out the spatial error from the computed temporal convergence. Initial and final fields for temperature and mixture fraction for the smallest integration time step are shown in the top figures of Fig.~\ref{fig:saad_cc_temporal_order}. Fields advect to the right with unitary velocity. The bottom figure shows the order $p$ computed point wise in the $x$ direction for explicit time integration on the cut-cell region. Deviations from $p \simeq 2$ are dependent on the formula used to compute $p$, as explained in Sec.~\ref{sec:saad_temporal_error}. The $l_2$ norm of $p$ computed pointwise for explicit integration in cut-cells is \input{../FDS_Verification_Guide/SCRIPT_FIGURES/saad_CC_explicit_l2_norm}\!. @@ -7611,42 +7602,32 @@ \subsection{Variable-Density Manufactured Solution} \subsection{Stress Method on Manufactured Solution Around Rotated Cube} - \label{sec:rotcube_cc_mms} Consider the solution of the following constant density, incompressible flow, momentum and scalar transport equations: -% \begin{eqnarray} \frac{\partial \rho \mathbf{u}(\mathbf{x},t)}{\partial t} &=& -\left[ \mathbf{F_v}(\mathbf{u},\mathbf{x},t) + \boldsymbol{\nabla} p(\mathbf{x},t) + \mathbf{fe_v}(\mathbf{u},p) \right] \label{eq:mmsMom} \\ \frac{\partial \rho Z}{\partial t} &=& -\left[ F_z(\mathbf{u},\mathbf{x},t) + fe_Z(\mathbf{u},Z) \right] \label{eq:mmsZ} \end{eqnarray} -% which are extended by the manufactured solution (MMS) sources $\mathbf{fe_v}(\mathbf{u},p)$ and $fe_Z(\mathbf{u},Z)$ respectively. The vectors $\mathbf{F_v}=-\mu \nabla^2(\mathbf{u}) + \nabla \cdot \left( \rho \mathbf{u} \otimes \mathbf{u} \right)$ and $F_z= \nabla \cdot \left( \rho Z \mathbf{u} - \rho D_z \nabla Z \right) $ contain the corresponding advection and diffusion operators. Now, consider in Fig.~\ref{Fig:ManuSoln}, a local set of fixed axes $x',y'$ and a manufactured solution defined on the fluid region $\Omega - \Omega_1$ of the form: -% \begin{eqnarray} u'(\mathbf{x}_{Bp}',t) &=& -\sin(t) \; \sin(kx')^2 \; \sin(2ky') \label{eq:upmf} \\ v'(\mathbf{x}_{Bp}',t) &=& \sin(t) \; \sin(2kx') \; \sin(ky')^2 \label{eq:vpmf} \\ p(\mathbf{x}_{Bp}',t) &=& \frac{\sin(t)}{4} \left( 2+\cos(2kx') \right) \left( 2+\cos(2ky') \right) - \sin(t) \label{eq:pmf} \\ Z(\mathbf{x}_{Bp}',t) &=& \frac{A_Z \sin(t)}{3} \left[ \left( 1-\cos(2k(x'-\frac{\pi}{2})) \right) - \left( 1-\cos(2k(y'-\frac{\pi}{2})) \right) - 1 \right] + Z_{mean} \label{eq:qmf} + \left( 1-\cos(2k(y'-\frac{\pi}{2})) \right) - 1 \right] + Z_{mean} \label{eq:qmf} \end{eqnarray} -% which is similar on velocities and pressure to the functions given in Ref.~\cite{E:CMS2003}. These functions imply zero initial conditions, a divergence free velocity field and the following -% \begin{equation} u'(\mathbf{x}',t)=v'(\mathbf{x}',t)=0, \; \; \frac{\partial p}{\partial n} = \frac{\partial Z}{\partial n}=0, \; \; for \; \; kx'=ky'= m \pi \; ; \; m \in \mathbb{N} \end{equation} -% -which can be used as \textit{no-slip wall} conditions in square boundaries defined by the integer $m$. -The MMS sources $\mathbf{fe_v'}$ and $fe_Z'$ are computed analytically as functions of $(\mathbf{x'},t)$ replacing definitions~\eqref{eq:upmf}-\eqref{eq:qmf} in the governing equations~\eqref{eq:mmsMom}-\eqref{eq:mmsZ} and computing symbolically the corresponding terms. See the Matlab script \texttt{Utilities/Matlab/scripts/source\_mms\_rotcube.m} in the FDS repository for said sources derivations. +which can be used as \textit{no-slip wall} conditions in square boundaries defined by the integer $m$. The MMS sources $\mathbf{fe_v'}$ and $fe_Z'$ are computed analytically as functions of $(\mathbf{x'},t)$ replacing definitions~\eqref{eq:upmf}-\eqref{eq:qmf} in the governing equations~\eqref{eq:mmsMom}-\eqref{eq:mmsZ} and computing symbolically the corresponding terms. See the script \ct{Utilities/Python/scripts/source_mms_rotcube.py} in the FDS repository for source derivations. We take values $m=0,1$ and wavenumber $k=1$, and consider the external flow to the resulting square immersed body, as seen in figure~\ref{Fig:ManuSoln}. The velocity field function inside the immersed object $\Omega_1$ (i.e. solid region) is assumed zero at all times, consistent with the fixed rigid body hypothesis. -% -% figure \begin{figure}[h] \centering \includegraphics[trim = 40mm 20mm 40mm 20mm, clip, @@ -7654,57 +7635,38 @@ \subsection{Stress Method on Manufactured Solution Around Rotated Cube} \caption[Reference frame for a rotated immersed body]{Reference frames for Eulerian ($E$) and immersed body local system ($B$), and vectors relating a generic point $p$ on the fluid region $\Omega-\Omega_1$.} \label{Fig:ManuSoln} \end{figure} -% An angular parameter $\alpha$ defines the orientation of the local axes $x',y'$ respect to the Eulerian frame coordinates $x,y$. The center of $\Omega_1$ in the Eulerian frame is situated in position $\mathbf{x}_{Ec}=(\pi,\pi)$. The rotation matrix from Eulerian $E$ to local frame $B$ coordinates is -% \begin{equation} [\mathbf{T}_{BE}] = \left[ \begin{array}{c c} \cos(\alpha) & \sin(\alpha) \\ -\sin(\alpha) & \cos(\alpha) \end{array} \right] \end{equation} -% In the local system, the center of the square in local coordinates is given by $\mathbf{x}_{Bc}'=(\pi/2,\pi/2)$. Then, the location of a general point $p$ in the local system is: -% \begin{equation} \mathbf{x}_{Bp}'= \mathbf{x}_{Bc}' +\mathbf{x}_{cp}' \end{equation} -% The same point $p$ location can be defined in terms of the $E$ frame as $\mathbf{x}_{Ep}= \mathbf{x}_{Ec} +\mathbf{x}_{cp}$ (Eulerian coordinates). Then -% \begin{equation} \mathbf{x}_{cp}'=[\mathbf{T}_{BE}] \mathbf{x}_{cp}=[\mathbf{T}_{BE}] \left( \mathbf{x}_{Ep} - \mathbf{x}_{Ec} \right) \end{equation} -% and finally -% \begin{equation} \mathbf{x}_{Bp}'= \mathbf{x}_{Bc}' +[\mathbf{T}_{BE}] \left( \mathbf{x}_{Ep} - \mathbf{x}_{Ec} \right) \end{equation} -% This last equation is employed to translate a given point $\mathbf{x}_{Ep}$ in the Eulerian frame (with Eulerian frame coordinates $x,y$) to the local frame coordinates where equations~\eqref{eq:upmf}-\eqref{eq:qmf} are defined. This transformation is used to define the initial conditions in the local frame, for points collocated in the Eulerian frame aligned fluid grid. It is also used to compute the source terms $\mathbf{fe_v'}$ and $fe_Z'$ in local coordinates at different time levels. To transform $\mathbf{fe_v'}$ and $fe_Z'$ to their Eulerian counterparts used in the numerical integration we use: -% \begin{eqnarray} \mathbf{fe_v} &=& [\mathbf{T}_{BE}]^T \mathbf{fe_v'} \\ fe_Z &=& fe_Z' \end{eqnarray} -% - Similarly, the manufactured variables can be defined at the final time to define error norms. The velocity components of interest are the ones defined in the Eulerian frame, and can be readily computed as -% \begin{equation} \left\{ \begin{array}{c} u \\ v \end{array} \right\}_p = [\mathbf{T}_{BE}]^T \left\{ \begin{array}{c} u' \\ v' \end{array} \right\}_p \end{equation} -% We assume periodic boundary conditions on $\partial \Omega$. Then, the size of the domain $\Omega$ depends on the periodicity lengths for a rotated flow field. When $\alpha=0$, a domain $\Omega$ of size $L_x=L_y=2\pi$ centered in $\mathbf{x}_{Ec}$ is sufficient for application of periodic boundary conditions. Then, for $\alpha=\arctan(1/r)$, $r=1,2,3,...$ the periodicity lengths on the Eulerian reference frame are $L_x=L_y=2\pi \sqrt{1+r^2}$. That is, if $\alpha=\arctan(1)$, the periodicity length increases to $L_x=L_y=\sqrt{8} \pi$. If $\alpha=\arctan(1/2)$, $L_x=L_y=\sqrt{20} \pi$. -%See figures~\ref{}a-c. - -% Figures showing each case with the geom and velocity field to show rotation: - -% Figures rotcube_cc 0deg: \begin{figure}[ht] \begin{center} \begin{tabular*}{\textwidth}{c@{\extracolsep{\fill}}c} @@ -7715,14 +7677,13 @@ \subsection{Stress Method on Manufactured Solution Around Rotated Cube} \caption[The \ct{Rotated Cube CC} accuracy order test case]{Zero degree rotation. The $L_2$ error defined on the whole domain at time $t = 0.95$ s is plotted as a function of grid spacing for $N=\{32,64,128,256,320\}$ points in each direction. (Left) Stress method, (Right) square defined by $\&$OBST.}\label{fig:rotcube_cc_0deg_accuracy_order} \end{figure} -% Figures for accuracy 27deg: \begin{figure}[ht] \centering \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/rotated_cube_27deg_stm_mms_convergence.pdf} \caption[The \ct{Rotated Cube CC} accuracy order test case]{$27$ degree rotation. The $L_2$ error defined on the whole domain at time $t = 0.95$ s is plotted as a function of grid spacing for $N=\{32,64,128,256,320\}$ points in each direction. Stress method.}\label{fig:rotcube_cc_27deg_accuracy_order} \end{figure} -Although the different orientation angles correspond to different periodicity lengths and domain sizes all cases were run with $N=\{32,64,128,256,320\}$ points in each direction for accuracy testing. The different inclination angles and grids were run with the stress method for shear stress imposition. The cases with zero inclination were also run with the \ct{\&OBST} functionality for comparison. Calculations were run at constant $CFL=0.1$ and errors were computed on the solution at the first time level after $t=0.95$. The cases input files are found on \texttt{/Complex\_Geometry/rotated\_cube\_*deg\_*\_*.fds}. +Although the different orientation angles correspond to different periodicity lengths and domain sizes all cases were run with $N=\{32,64,128,256,320\}$ points in each direction for accuracy testing. The different inclination angles and grids were run with the stress method for shear stress imposition. The cases with zero inclination were also run with the \ct{\&OBST} functionality for comparison. Calculations were run at constant $CFL=0.1$ and errors were computed on the solution at the first time level after $t=0.95$. The cases input files are found on \ct{/Complex_Geometry/rotated_cube_*deg_*_*.fds}. Overall the error norm behaves as $\mathcal{O}(\Delta x)$ for the scalar transport equation in cases where the cube is inclined. This is expected as the diffusive flux differences used are of this spatial accuracy. Note that for the non inclined cases of figure~\ref{fig:rotcube_cc_0deg_accuracy_order} the scalar $Z$ presents better accuracy, simply because the two point centroid to centroid difference coincides with a central difference. The $\mathcal{O}(\Delta x^2)$ accuracy in $Z$ is also seen for \ct{OBST} in the right figure of~\ref{fig:rotcube_cc_0deg_accuracy_order}, which use central differences for diffusive fluxes. @@ -7791,7 +7752,7 @@ \subsection{Radiating Sphere} \begin{figure}[ht] \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/sphere_radiate.png} \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/sphere_radiate.pdf} -\caption[The \ct{sphere\_radiate} test case]{Left: a radiating hot sphere. Right: heat flux to the nearest wall surface.} +\caption[The \ct{sphere_radiate} test case]{Left: a radiating hot sphere. Right: heat flux to the nearest wall surface.} \label{sphere_radiate_fig} \end{figure} @@ -7808,7 +7769,7 @@ \subsection{Leaking Sphere} \begin{figure}[ht] \centering \includegraphics[height=2.2in]{../FDS_User_Guide/SCRIPT_FIGURES/sphere_leak.pdf} -\caption[The \ct{sphere\_leak} test case]{Pressure rise in a leaking sphere.} +\caption[The \ct{sphere_leak} test case]{Pressure rise in a leaking sphere.} \label{sphere_leak_fig} \end{figure} @@ -7820,7 +7781,7 @@ \section{Restart Function} \begin{figure}[ht] \centering \includegraphics[height=2.2in]{../FDS_Verification_Guide/SCRIPT_FIGURES/geom_restart.pdf} -\caption[The \ct{geom\_restart} test case]{Test of restart functionality for complex geometry.} +\caption[The \ct{geom_restart} test case]{Test of restart functionality for complex geometry.} \label{fig:geom_restart} \end{figure} @@ -7831,7 +7792,7 @@ \chapter{Outputs} \section{Statistical Quantities} -\subsection{RMS, Co-Variance, and Cross-Correlation (\texorpdfstring{\ct{rms\_cov\_corr}}{rms\_cov\_corr})} +\subsection{RMS, Co-Variance, and Cross-Correlation (\texorpdfstring{\ct{rms_cov_corr}}{rms_cov_corr})} \label{rms_cov_corr} FDS can output the root mean square (RMS), co-variance, and cross-correlation for both point and line \ct{DEVC} outputs. To test these outputs a 1 m$^3$ box with open sides and a 10 cm grid size is defined with two inlet vents centered on adjacent faces. This results in two orthogonal flow streams that collide at the center of the box and exit diagonally. Within the diagonal portion of the flow, are placed point measurements for the FDS outputs of the u-velocity RMS, the u-velocity/w-velocity co-variance, and the u-velocity/w-velocity cross-correlation. @@ -7845,13 +7806,13 @@ \subsection{RMS, Co-Variance, and Cross-Correlation (\texorpdfstring{\ct{rms\_co \includegraphics[height=2.2in]{SCRIPT_FIGURES/rms_cov_corr_cov} \\ \includegraphics[height=2.2in]{SCRIPT_FIGURES/rms_cov_corr_corr} \end{tabular} -\caption[Sample case \ct{rms\_cov\_corr}]{Output of the \ct{rms\_cov\_corr} test case. By construction, the statistic matches the analytical result at time $t = \mbox{\ct{T_END}}$.} +\caption[Sample case \ct{rms_cov_corr}]{Output of the \ct{rms_cov_corr} test case. By construction, the statistic matches the analytical result at time $t = \mbox{\ct{T_END}}$.} \label{rms_cov_corr_plots} \end{figure} \FloatBarrier -\subsection{RMS as a Running Average (\texorpdfstring{\ct{rms\_example}}{rms\_example})} +\subsection{RMS as a Running Average (\texorpdfstring{\ct{rms_example}}{rms_example})} \label{rms_example} In this example, we want to compute the mean and rms of a hypothetical velocity time series @@ -7862,7 +7823,7 @@ \subsection{RMS as a Running Average (\texorpdfstring{\ct{rms\_example}}{rms\_ex \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/rms_example} -\caption[Sample case \ct{rms\_example}]{Output of the \ct{rms\_example} test case in which the mean and RMS of the time series is compared to expected values.} +\caption[Sample case \ct{rms_example}]{Output of the \ct{rms_example} test case in which the mean and RMS of the time series is compared to expected values.} \label{rms_example_plot} \end{figure} Note that this example is also a useful demonstration of how to use the math functions within FDS. Although there is not a tanh function included, it can be constructed from the expression: @@ -7887,29 +7848,29 @@ \subsection{RMS as a Running Average (\texorpdfstring{\ct{rms\_example}}{rms\_ex &CTRL ID='sum', FUNCTION_TYPE='SUM', INPUT_ID='tanh','rn2' / \end{lstlisting} -\subsection{Favre Average (\texorpdfstring{\ct{shunn3\_FavreZ}}{shunn3\_FavreZ})} +\subsection{Favre Average (\texorpdfstring{\ct{shunn3_FavreZ}}{shunn3_FavreZ})} \label{sec:favre_average} -The Shunn manufactured solution (see Sec.~\ref{sec:shunn_mms}) provides a 2-D analytical solution for both the density and mixture fraction. In this section, to test the statistical output \ct{TEMPORAL\_STATISTIC='FAVRE AVERAGE'} we compare FDS results at two grid resolutions, $\delta x$ = [$L/32$, $L/64$], with $L=2$. The case is run to $t=10$ s. Both the running average and Favre average are output at ($x=0,y=0$), the center of the domain. Note that this imparts an $\mathcal{O}(\delta x)$ error to the output. The higher grid resolution is therefore more accurate. +The Shunn manufactured solution (see Sec.~\ref{sec:shunn_mms}) provides a 2-D analytical solution for both the density and mixture fraction. In this section, to test the statistical output \ct{TEMPORAL_STATISTIC='FAVRE AVERAGE'} we compare FDS results at two grid resolutions, $\delta x$ = [$L/32$, $L/64$], with $L=2$. The case is run to $t=10$ s. Both the running average and Favre average are output at ($x=0,y=0$), the center of the domain. Note that this imparts an $\mathcal{O}(\delta x)$ error to the output. The higher grid resolution is therefore more accurate. \begin{figure}[h!] \centering \includegraphics[height=2.2in]{SCRIPT_FIGURES/shunn_mms_FavreZ} -\caption[Favre average test \ct{shunn3\_FavreZ}]{Output of the \ct{shunn3\_FavreZ} test cases in which the Favre average (continuous line) and running average (dashed line) at ($x=0,y=0$) are compared against expected values from the Shunn manufactured solution (see Sec.~\ref{sec:shunn_mms}).} +\caption[Favre average test \ct{shunn3_FavreZ}]{Output of the \ct{shunn3_FavreZ} test cases in which the Favre average (continuous line) and running average (dashed line) at ($x=0,y=0$) are compared against expected values from the Shunn manufactured solution (see Sec.~\ref{sec:shunn_mms}).} \label{fig:shunn_mms_FavreZ} \end{figure} \section{Interpolation} \label{devc_interpolation} -For line devices (\ct{POINTS=...}) used together with \ct{SPATIAL\_STATISTIC='INTERPOLATION'} the near wall values are usually truncated to the cell value. However, with temperature and velocity components the wall value is used to provide an interpolation between the first cell value and the wall value. In the test cases below, a linear field of velocity and temperature are generated with 100 points along the device and only 5 cells across the domain. Three linear point arrays are created, one at each end along the periodic mesh boundary, and one in the center of the domain, which is also a cell center. +For line devices (\ct{POINTS=...}) used together with \ct{SPATIAL_STATISTIC='INTERPOLATION'} the near wall values are usually truncated to the cell value. However, with temperature and velocity components the wall value is used to provide an interpolation between the first cell value and the wall value. In the test cases below, a linear field of velocity and temperature are generated with 100 points along the device and only 5 cells across the domain. Three linear point arrays are created, one at each end along the periodic mesh boundary, and one in the center of the domain, which is also a cell center. \begin{figure}[h] \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r} \includegraphics[height=2.2in]{SCRIPT_FIGURES/devc_interpolation_velocity} & \includegraphics[height=2.2in]{SCRIPT_FIGURES/devc_interpolation_temperature} \end{tabular*} -\caption[Test of \ct{devc\_interpolation}]{Output of the \ct{devc\_interpolation} test cases.} +\caption[Test of \ct{devc_interpolation}]{Output of the \ct{devc_interpolation} test cases.} \label{fig_devc_interpolation} \end{figure} diff --git a/Source/read.f90 b/Source/read.f90 index da3cf203713..b8aeef26db2 100644 --- a/Source/read.f90 +++ b/Source/read.f90 @@ -12459,7 +12459,7 @@ SUBROUTINE READ_VENT ENDIF IF (SURF_ID=='OPEN') VT%TYPE_INDICATOR = 2 - IF (SURF_ID=='MIRROR' .OR. SURF_ID=='PERIODIC') VT%TYPE_INDICATOR = -2 + IF (SURF_ID=='MIRROR' .OR. SURF_ID=='PERIODIC' .OR. SURF_ID=='PERIODIC FLOW ONLY') VT%TYPE_INDICATOR = -2 IF ((DB/='null' .OR. MB/='null' .OR. PBX>-1.E5_EB .OR. PBY>-1.E5_EB .OR. PBZ>-1.E5_EB) & .AND. SURF_ID=='OPEN') VT%TYPE_INDICATOR=-2 IF (SURF_ID=='PERIODIC FLOW ONLY') VT%SURF_INDEX = PERIODIC_FLOW_ONLY_SURF_INDEX diff --git a/Utilities/Python/fdsplotlib.py b/Utilities/Python/fdsplotlib.py index 9aa144da512..2a595fea4f2 100644 --- a/Utilities/Python/fdsplotlib.py +++ b/Utilities/Python/fdsplotlib.py @@ -528,8 +528,8 @@ def read_csv_cached(path, **kwargs): f = plot_to_fig( x_data=y_i if flip_axis else x_i, y_data=x_i if flip_axis else y_i, - revision_label=version_string, - figure_handle=f, # keep same figure + revision_label=version_string if dtest else None, + figure_handle=f, data_label=d2_key_labels[i], line_style=d2_styles[i], ) @@ -857,14 +857,6 @@ def plot_to_fig(x_data,y_data,**kwargs): if linestyle == '-.': dashes = kwargs.get('line_dashes',(6, 3, 1, 3)) if linestyle == ':': dashes = kwargs.get('line_dashes',(1, 3)) - # This set is what we were using in Matlab - # if linestyle == '': dashes = (None, None); linewidth = 0; - # if linestyle == '-': dashes = (None, None) - # if linestyle == '--': dashes = kwargs.get('line_dashes',(10, 6.2)) - # if linestyle == '-.': dashes = kwargs.get('line_dashes',(12, 7.4, 3, 7.4)) - # if linestyle == ':': dashes = kwargs.get('line_dashes',(1, 3)) - - data_label = kwargs.get('data_label',None) # trap any data_labels set to blank (old matlab convention) @@ -1014,6 +1006,88 @@ def plot_to_fig(x_data,y_data,**kwargs): fontsize=ax._legend_fontsize, frameon=False) + # plot title + if kwargs.get('plot_title'): + if kwargs.get('title_fontsize'): + title_fontsize=kwargs.get('title_fontsize') + else: + title_fontsize=default_title_fontsize + + plt.text(0.05, 0.95, kwargs.get('plot_title'), + transform=plt.gca().transAxes, + fontsize=title_fontsize, + verticalalignment='top', + horizontalalignment='left') + + # set axes and tick properties + xmin=kwargs.get('x_min') + xmax=kwargs.get('x_max') + ymin=kwargs.get('y_min') + ymax=kwargs.get('y_max') + + ax.set_xlim(xmin,xmax) + ax.set_ylim(ymin,ymax) + + # ------------------------------------------------------------ + # TICK HANDLING (clean, deterministic) + # ------------------------------------------------------------ + + scale_x = ax.get_xscale() + scale_y = ax.get_yscale() + + # ------------------------------- + # X-axis ticks + # ------------------------------- + if xticks is not None: + # USER EXPLICIT OVERRIDE + ax.set_xticks(xticks) + ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%g')) + + elif xnumticks is not None: + # USER requests a number of ticks + if scale_x == "log": + ax.set_xticks(np.logspace(np.log10(xmin), np.log10(xmax), xnumticks)) + else: + ax.set_xticks(np.linspace(xmin, xmax, xnumticks)) + + else: + # DEFAULT behavior + if scale_x == "log": + ax.xaxis.set_major_locator(ticker.LogLocator(base=10)) + ax.xaxis.set_major_formatter(ticker.LogFormatterSciNotation(base=10)) + else: + ax.xaxis.set_major_locator(ticker.MaxNLocator(nbins=detault_nticks, min_n_ticks=4)) + sf = ticker.ScalarFormatter(useMathText=True) + sf.set_powerlimits((-3, 4)) + ax.xaxis.set_major_formatter(sf) + + # ------------------------------- + # Y-axis ticks + # ------------------------------- + if yticks is not None: + # USER EXPLICIT OVERRIDE + ax.set_yticks(yticks) + ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%g')) + + elif ynumticks is not None: + # USER requests a number of ticks + if scale_y == "log": + ax.set_yticks(np.logspace(np.log10(ymin), np.log10(ymax), ynumticks)) + else: + ax.set_yticks(np.linspace(ymin, ymax, ynumticks)) + + else: + # DEFAULT behavior + if scale_y == "log": + ax.yaxis.set_major_locator(ticker.LogLocator(base=10)) + ax.yaxis.set_major_formatter(ticker.LogFormatterSciNotation(base=10)) + else: + ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=detault_nticks, min_n_ticks=4)) + sf = ticker.ScalarFormatter(useMathText=True) + sf.set_powerlimits((-3, 4)) + ax.yaxis.set_major_formatter(sf) + + # --- case 3: existing figure, adding more data --- else: loc = getattr(ax, '_legend_loc', 'best') @@ -1028,72 +1102,6 @@ def plot_to_fig(x_data,y_data,**kwargs): fontsize=fontsize, framealpha=framealpha) - - # plot title - if kwargs.get('plot_title'): - if kwargs.get('title_fontsize'): - title_fontsize=kwargs.get('title_fontsize') - else: - title_fontsize=default_title_fontsize - - plt.text(0.05, 0.95, kwargs.get('plot_title'), - transform=plt.gca().transAxes, - fontsize=title_fontsize, - verticalalignment='top', - horizontalalignment='left') - - # set axes and tick properties - xmin=kwargs.get('x_min') - xmax=kwargs.get('x_max') - ymin=kwargs.get('y_min') - ymax=kwargs.get('y_max') - - ax.set_xlim(xmin,xmax) - ax.set_ylim(ymin,ymax) - - # --- Tick handling AFTER limits are set --- - if ax.get_xscale() == 'linear': - # ----- LINEAR AXIS ----- - if xticks is None and xnumticks is None: - ax.xaxis.set_major_locator(ticker.MaxNLocator(nbins=detault_nticks, min_n_ticks=4)) - sf = ticker.ScalarFormatter(useMathText=True) - sf.set_powerlimits((-3, 4)) - ax.xaxis.set_major_formatter(sf) - - elif ax.get_xscale() == 'log': - # ----- LOG AXIS ----- - # Do not touch scalar formatters – LogFormatter is correct. - ax.xaxis.set_major_locator(ticker.LogLocator(base=10)) - ax.xaxis.set_major_formatter(ticker.LogFormatterSciNotation(base=10)) - - # Same for y-axis - if ax.get_yscale() == 'linear': - if yticks is None and ynumticks is None: - ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=detault_nticks, min_n_ticks=4)) - sf = ticker.ScalarFormatter(useMathText=True) - sf.set_powerlimits((-3, 4)) - ax.yaxis.set_major_formatter(sf) - - elif ax.get_yscale() == 'log': - ax.yaxis.set_major_locator(ticker.LogLocator(base=10)) - ax.yaxis.set_major_formatter(ticker.LogFormatterSciNotation(base=10)) - - # set number of ticks if requested by the user - if xnumticks is not None: - if plot_type in ('loglog', 'semilogx'): - ax.set_xticks(np.logspace(xmin, xmax, xnumticks)) - else: - ax.set_xticks(np.linspace(xmin, xmax, xnumticks)) - if ynumticks is not None: - if plot_type in ('loglog', 'semilogy'): - ax.set_yticks(np.logspace(ymin, ymax, ynumticks)) - else: - ax.set_yticks(np.linspace(ymin, ymax, ynumticks)) - - # set ticks if requested by the user - if xticks is not None: ax.set_xticks(xticks) - if yticks is not None: ax.set_yticks(yticks) - if kwargs.get('revision_label'): add_version_string(ax=ax, version_str=kwargs.get('revision_label'), plot_type=plot_type, font_size=version_fontsize) diff --git a/Utilities/Python/scripts/McCaffrey_Plume.py b/Utilities/Python/scripts/McCaffrey_Plume.py index 7c6e2eba3dd..db47c654fa0 100644 --- a/Utilities/Python/scripts/McCaffrey_Plume.py +++ b/Utilities/Python/scripts/McCaffrey_Plume.py @@ -160,7 +160,8 @@ y_label=r'$V/Q^{1/5}$ $({\rm m s}^{-1} \; {\rm kW}^{-1/5})$', plot_title=f'McCaffrey Centerline Velocity, {res}', legend_location='lower right', - plot_type='loglog') + plot_type='loglog', + yticks = [0.6, 1, 2, 3]) for i, c in enumerate(chid): fname = os.path.join(datadir, f'{c}_line.csv') @@ -175,7 +176,7 @@ v = M.iloc[:, 1].values zq_fds = z / (Q[i]**(2.0/5.0)) vq_fds = v / (Q[i]**(1.0/5.0)) - fdsplotlib.plot_to_fig(x_data=zq_fds, y_data=vq_fds, + fdsplotlib.plot_to_fig(x_data=zq_fds, y_data=vq_fds, data_label=f'{Q[i]} kW', marker_style=mark[i], figure_handle=fig_v) fig_v.savefig(os.path.join(pltdir, f'McCaffrey_Velocity_Correlation_{res}.pdf')) plt.close(fig_v) @@ -189,7 +190,7 @@ x_label=r'$z/Q^{2/5}$ $({\rm m kW}^{-2/5})$', y_label=r'$\Delta{T}$ ($^\circ$C)', plot_title=f'McCaffrey Centerline Temperature, {res}', - legend_location='lower right', + legend_location='lower left', plot_type='loglog') for i, c in enumerate(chid): @@ -203,7 +204,7 @@ z = M.iloc[:, 0].values T = M.iloc[:, 2].values + 273.15 if M.shape[1] > 2 else M.iloc[:, 1].values + 273.15 zq_fds = z / (Q[i]**(2.0/5.0)) - fdsplotlib.plot_to_fig(x_data=zq_fds, y_data=T-T0, + fdsplotlib.plot_to_fig(x_data=zq_fds, y_data=T-T0, data_label=f'{Q[i]} kW', marker_style=mark[i], figure_handle=fig_t) fig_t.savefig(os.path.join(pltdir, f'McCaffrey_Temperature_Correlation_{res}.pdf')) plt.close(fig_t) diff --git a/Utilities/Python/scripts/fds_moody_chart.py b/Utilities/Python/scripts/fds_moody_chart.py index 5036514dbde..691db304093 100644 --- a/Utilities/Python/scripts/fds_moody_chart.py +++ b/Utilities/Python/scripts/fds_moody_chart.py @@ -308,32 +308,38 @@ def friction_factor_calc(dpdx, H, filename, *args): vmethod = ['_stm'] for im in range(1): - + mth = vmethod[im] - + # plot convergence for Poiseuille flow aligned case theta=0 (mu = 0.025) f = np.zeros(4) Re = np.zeros(4) f2 = np.zeros(4) Re2 = np.zeros(4) - + f[0], Re[0] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N10a_theta0' + mth + '_devc.csv') f[1], Re[1] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N20a_theta0' + mth + '_devc.csv') f[2], Re[2] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N40a_theta0' + mth + '_devc.csv') f[3], Re[3] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N80a_theta0' + mth + '_devc.csv') - + f2[0], Re2[0] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N10nah_theta0' + mth + '_devc.csv') f2[1], Re2[1] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N20nah_theta0' + mth + '_devc.csv') f2[2], Re2[2] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N40nah_theta0' + mth + '_devc.csv') f2[3], Re2[3] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N80nah_theta0' + mth + '_devc.csv') - + dz = L / N error = np.abs(f - 24.0 / Re) error2 = np.abs(f2 - 24.0 / Re2) - + + if error[len(error)-1] > 1.e-4: + print('Python Warning: Error in geom_poiseuille_N80a_theta0 is out of tolerance. e_f = ',error[len(error)-1]) + + if error2[len(error2)-1] > 1.e-4: + print('Python Warning: Error in geom_poiseuille_N80nah_theta0 is out of tolerance. e_f = ',error2[len(error2)-1]) + fig = fdsplotlib.plot_to_fig(x_data=dz, y_data=error, marker_style='b*-', data_label='FDS, $h=0$', - x_min=0.01, x_max=0.2, y_min=5e-5, y_max=0.01, + x_min=0.01, x_max=0.2, y_min=1e-5, y_max=0.01, plot_type='loglog', revision_label=version_string, x_label=r'Grid Spacing, $\delta z$ (m)', @@ -342,29 +348,32 @@ def friction_factor_calc(dpdx, H, filename, *args): fdsplotlib.plot_to_fig(x_data=dz, y_data=error2, figure_handle=fig, marker_style='rx-', data_label=r'$h=\delta z/3$') fdsplotlib.plot_to_fig(x_data=dz, y_data=0.12*dz, figure_handle=fig, marker_style='k--', data_label=r'$O(\delta z)$') fdsplotlib.plot_to_fig(x_data=dz, y_data=0.4*dz**2,figure_handle=fig, marker_style='k-' , data_label=r'$O(\delta z^2)$') - + output_file = pltdir + 'geom_poiseuille_convergence_theta0a' + mth + '.pdf' plt.savefig(output_file, format='pdf') plt.close() - + # plot convergence for Poiseuille flow not aligned case theta=0 (mu = 0.025) - + f = np.zeros(4) Re = np.zeros(4) f2 = None Re2 = None H = [] - + f[0], Re[0] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N10na_theta0' + mth + '_devc.csv') f[1], Re[1] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N20na_theta0' + mth + '_devc.csv') f[2], Re[2] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N40na_theta0' + mth + '_devc.csv') f[3], Re[3] = friction_factor_calc(dpdx, L, outdir + 'geom_poiseuille_N80na_theta0' + mth + '_devc.csv') - + dz = L / N error = np.abs(f - 24.0 / Re) - + + if error[len(error)-1] > 1.e-4: + print('Python Warning: Error in geom_poiseuille_N80na_theta0 is out of tolerance. e_f = ',error[len(error)-1]) + fig = fdsplotlib.plot_to_fig(x_data=dz, y_data=error, marker_style='b*-', data_label=r'FDS, $h=\delta z_{10}/11$', - x_min=0.01, x_max=0.2, y_min=5e-5, y_max=0.01, + x_min=0.01, x_max=0.2, y_min=1e-5, y_max=0.01, plot_type='loglog', revision_label=version_string, x_label=r'Grid Spacing, $\delta z$ (m)', @@ -372,7 +381,7 @@ def friction_factor_calc(dpdx, H, filename, *args): fdsplotlib.plot_to_fig(x_data=dz, y_data=0.05*dz, figure_handle=fig, marker_style='k--', data_label=r'$O(\delta z)$') fdsplotlib.plot_to_fig(x_data=dz, y_data=0.4*dz**2,figure_handle=fig, marker_style='k-' , data_label=r'$O(\delta z^2)$') - + output_file = pltdir + 'geom_poiseuille_convergence_theta0na' + mth + '.pdf' plt.savefig(output_file, format='pdf') plt.close() @@ -405,7 +414,7 @@ def friction_factor_calc(dpdx, H, filename, *args): L = [1600, 1600, 1600, 1600, 1600] # tunnel length (m) pmin = [-1, 0, -20, 0, -10] pmax = [6, 18, 120, 460, 60] - + f_save = np.zeros(len(cases)) f_fds_save = np.zeros((len(res), len(cases))) diff --git a/Verification/Complex_Geometry/geom_poiseuille_N10a_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N10a_theta0_stm.fds index 4bc461d5af1..22be26655d2 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N10a_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N10a_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N10a_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh aligned case.' / # 10 cells in channel height (from 0 to 1): -&MESH IJK=4,1,12, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,12, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N10na_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N10na_theta0_stm.fds index 35b4fe13f52..5430d7bf366 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N10na_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N10na_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N10na_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 10 cells in channel height (from 0 to 1): Domain shifted up by 1/11*DZ10: -&MESH IJK=4,1,12, XB=3,7,-.5,.5,-0.109090909090909,1.090909090909091 / +&MESH IJK=4,1,12, XB=4.5,5.5,-.125,.125,-0.109090909090909,1.090909090909091 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N10nah_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N10nah_theta0_stm.fds index e044a45ee35..0754d7085e9 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N10nah_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N10nah_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N10nah_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 10 cells in channel height (from 0 to 1): GEOMs shifted up by 1/3*DZ10: -&MESH IJK=4,1,12, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,12, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.033333333333333,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N20a_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N20a_theta0_stm.fds index 62d37dbcabf..e97ae741f6a 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N20a_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N20a_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N20a_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh aligned case.' / # 20 cells in channel height (from 0 to 1): -&MESH IJK=4,1,24, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,24, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N20na_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N20na_theta0_stm.fds index 4266afcafd9..9d9acdf82fc 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N20na_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N20na_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N20na_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 20 cells in channel height (from 0 to 1): Domain shifted up by 1/11*DZ10: -&MESH IJK=4,1,24, XB=3,7,-.5,.5,-0.109090909090909,1.090909090909091 / +&MESH IJK=4,1,24, XB=4.5,5.5,-.125,.125,-0.109090909090909,1.090909090909091 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N20nah_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N20nah_theta0_stm.fds index 6823725e01a..2eedab87765 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N20nah_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N20nah_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N20nah_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 20 cells in channel height (from 0 to 1): GEOMs shifted up by 1/3*DZ20: -&MESH IJK=4,1,24, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,24, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.016666666666667,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N40a_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N40a_theta0_stm.fds index 5d3fbc2eab3..502d15c6959 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N40a_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N40a_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N40a_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh aligned case.' / # 40 cells in channel height (from 0 to 1): -&MESH IJK=4,1,48, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,48, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N40na_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N40na_theta0_stm.fds index c84de4982c3..bb05dfb036a 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N40na_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N40na_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N40na_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 40 cells in channel height (from 0 to 1): Domain shifted up by 1/11*DZ10: -&MESH IJK=4,1,48, XB=3,7,-.5,.5,-0.109090909090909,1.090909090909091 / +&MESH IJK=4,1,48, XB=4.5,5.5,-.125,.125,-0.109090909090909,1.090909090909091 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N40nah_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N40nah_theta0_stm.fds index fad09155cf6..52bf25db4af 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N40nah_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N40nah_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N40nah_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 40 cells in channel height (from 0 to 1): GEOMs shifted up by 1/3*DZ40: -&MESH IJK=4,1,48, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,48, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.008333333333333,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N80a_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N80a_theta0_stm.fds index c06bd2f02b5..a7279539658 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N80a_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N80a_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N80a_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh aligned case.' / # 80 cells in channel height (from 0 to 1): -&MESH IJK=4,1,96, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,96, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, 0.0,1.0, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N80na_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N80na_theta0_stm.fds index f08dddf0fac..01e96d5fada 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N80na_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N80na_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N80na_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 80 cells in channel height (from 0 to 1): Domain shifted up by 1/11*DZ10: -&MESH IJK=4,1,96, XB=3,7,-.5,.5,-0.109090909090909,1.090909090909091 / +&MESH IJK=4,1,96, XB=4.5,5.5,-.125,.125,-0.109090909090909,1.090909090909091 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.0,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.109090909090909,1.090909090909091, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' / diff --git a/Verification/Complex_Geometry/geom_poiseuille_N80nah_theta0_stm.fds b/Verification/Complex_Geometry/geom_poiseuille_N80nah_theta0_stm.fds index 81326a54544..20f5463e14e 100644 --- a/Verification/Complex_Geometry/geom_poiseuille_N80nah_theta0_stm.fds +++ b/Verification/Complex_Geometry/geom_poiseuille_N80nah_theta0_stm.fds @@ -1,12 +1,12 @@ &HEAD CHID='geom_poiseuille_N80nah_theta0_stm', TITLE='Poiseuille flow in 2D, GEOM channel at 0 degree slope respect to mesh. Mesh not aligned case.' / # 80 cells in channel height (from 0 to 1): GEOMs shifted up by 1/3*DZ80: -&MESH IJK=4,1,96, XB=3,7,-.5,.5,-0.1,1.1 / +&MESH IJK=4,1,96, XB=4.5,5.5,-.125,.125,-0.1,1.1 / -&TIME T_END=70.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) -&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4 / +&TIME T_END=60.0 / needs to be roughtly (.5*H)^2/VISCOSITY (here H=1) +&DUMP NFRAMES=100, SIG_FIGS=6, SIG_FIGS_EXP=4, DIAGNOSTICS_INTERVAL=1000 / -&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0. / +&MISC SIMULATION_MODE='DNS', NOISE=.FALSE., CCVOL_LINK=0., VN_MIN=0.8, VN_MAX=0.9 / &WIND STRATIFICATION=.FALSE., FORCE_VECTOR(1)=1 / @@ -19,11 +19,7 @@ &GEOM XB=-1,11,-.5,.5, 1.004166666666667,1.2/ &SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=.TRUE. / -&SLCF PBY=0, QUANTITY='H', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='DENSITY', CELL_CENTERED=.TRUE. / -&SLCF PBY=0, QUANTITY='VISCOSITY', CELL_CENTERED=.TRUE. / - -&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL' / +&DEVC XB=5.0,5.0, -0.5,0.5, -0.1,1.1, QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', CONVERSION_FACTOR=4. / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='U-VELOCITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='VISCOSITY' / &DEVC XYZ=5.0,0.0,0.5, QUANTITY='DENSITY' /