Skip to content
Merged
15 changes: 11 additions & 4 deletions Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2553,6 +2553,7 @@ \subsection{Limitations}
\item By default, the interior nodes are clustered near the surface and stretched out deeper within the solid. If you want to maintain uniform spacing, set \ct{CELL_SIZE} on the \ct{SURF} or \ct{OBST} line to indicate the desired interior node spacing. The \ct{CELL_SIZE} is typically chosen to be comparable to the gas phase cells. If the obstruction is thin; that is, less than one gas phase cell thick, the specified \ct{CELL_SIZE} will only apply to the heat conduction in the transverse, not normal, direction. The normal direction gridding will be controlled by the parameters \ct{STRETCH_FACTOR} and \ct{CELL_SIZE_FACTOR}. This may be useful in cases where the specified \ct{CELL_SIZE} is too coarse to resolve variations in surface definition along the normal dimension (see Section~\ref{checkerboard} for an example).
\item \ct{HT3D} cannot be applied to an \ct{OBST} that is to \ct{BURN_AWAY}. In addition, if the solid undergoes significant shrinking or swelling, do not use \ct{HT3D}. ``Significant'' means that the number of internal cells changes, in which case the 3-D nodal structure breaks down. To determine if this happens, use the \ct{PROF}ile output feature (Sec.~\ref{info:PROF}) to visualize profiles of internal temperature or other solid phase quantities. These output files contain the internal node coordinates as a function of time.
\item If a \ct{SURF} line specifies either \ct{HT3D=T} or \ct{VARIABLE_THICKNESS=T} and also specifies an \ct{HRRPUA}, \ct{MLPUA}, or \ct{MASS_FLUX}, you must specify a \ct{MATL_ID} on the \ct{SURF} line and the appropriate \ct{OBST} lines. The reason for doubly specifying the \ct{MATL_ID} is so that the \ct{SURF} line can be set up properly. Note that the specification of \ct{HRRPUA} or similar on the surface of a 3-D or variably thick solid means that no obstruction making up the solid can have specified internal reactions, i.e. pyrolysis.
\item Issues regarding pyrolysis and material transport in 3-D solids is discussed in Section~\ref{info:LAYER_DIVIDE}.
\end{enumerate}

\subsubsection{Example: Steel Assembly}
Expand Down Expand Up @@ -2686,7 +2687,6 @@ \subsection{1-D Heat Conduction in Solids of Varying Thickness}




\chapter{Fire and Pyrolysis}

FDS has several approaches for describing the pyrolysis of solids and liquids. The approach to take depends on the purpose of your simulation, the availability of material properties, and the appropriateness of the underlying pyrolysis model. Note that all pyrolysis models in FDS require that you explicitly define the gas phase reaction. See Chapter~\ref{chap:combustion} for details. A given surface may only use only one pyrolysis model at a time.
Expand Down Expand Up @@ -2889,7 +2889,7 @@ \subsection{Reaction Mechanism}
\subsection{Solid Phase Gas Transport}
\label{info:LAYER_DIVIDE}

The solid phase conduction/reaction algorithm does not have an explicit transport mechanism for pyrolyzed gases. Rather, the pyrolyzates are assumed to appear instantaneously at the solid surface. What fraction of the pyrolyzates are emitted by the surface is controlled by the real number \ct{SURF} line parameter \ct{LAYER_DIVIDE}. This parameter specifies the number of layers whose gaseous pyrolyzates are to be applied to the surface with the given \ct{SURF} label. For example, if \ct{LAYER_DIVIDE=1.5}, the gases generated by the first layer and half of the second layer shall be applied at the given surface. This same partitioning holds whether or not the solid is shrinking or swelling. Be careful to ensure that the specified values of \ct{LAYER_DIVIDE} are consistent for the \ct{SURF} lines that control opposing surfaces. If two different \ct{SURF} lines govern the front and back of a solid obstruction, the specified values of \ct{LAYER_DIVIDE} should sum to the total number of layers. Otherwise, the mass of evolved gases may not be correct.
The solid phase conduction/reaction algorithm (both 1-D and 3-D) does not have an explicit transport mechanism for pyrolyzed gases. Rather, the pyrolyzates are assumed to appear instantaneously at the solid surface. What fraction of the pyrolyzates are emitted by the surface is controlled by the real number \ct{SURF} line parameter \ct{LAYER_DIVIDE}. This parameter specifies the number of layers whose gaseous pyrolyzates are to be applied to the surface with the given \ct{SURF} label. For example, if \ct{LAYER_DIVIDE=1.5}, the gases generated by the first layer and half of the second layer shall be applied at the given surface. This same partitioning holds whether or not the solid is shrinking or swelling. Be careful to ensure that the specified values of \ct{LAYER_DIVIDE} are consistent for the \ct{SURF} lines that control opposing surfaces. If two different \ct{SURF} lines govern the front and back of a solid obstruction, the specified values of \ct{LAYER_DIVIDE} should sum to the total number of layers. Otherwise, the mass of evolved gases may not be correct.

If \ct{LAYER_DIVIDE} is not set, it is assumed that for a solid with \ct{BACKING='EXPOSED'}, the gases generated within a depth of half the total thickness are to be applied at the front surface and the other half at the back. If the \ct{BACKING} is not \ct{'EXPOSED'}, all of the gases will be applied at the front surface.

Expand All @@ -2901,6 +2901,12 @@ \subsection{Solid Phase Gas Transport}
\end{lstlisting}
shows the distance from the surface where the pyrolyzates are directed toward that surface, as opposed to the opposite side of the solid.

For 3-D solids, there is an additional set of parameters that control the transport of pyrolyzed gases. The real triplet \ct{HT3D_WEIGHT} indicates the relative amount of the pyrolyzate that is assigned to the $x$, $y$, and $z$ directions. By default, each of the three values is $1/3$, meaning that one-third of the pyrolyzate is assigned to each coordinate direction, regardless of the aspect ratio of the solid. In addition, the \ct{LAYER_DIVIDE} assigned to each coordinate direction still applies. This means that, by default, one-sixth of the pyrolyzate emanates from each face of a solid. Obviously, for solids with large aspect ratio this does not make sense. To rectify the situation, \ct{HT3D_WEIGHT} can shift some, or all, of the pyrolyzed mass to one of three directions. For example, the line
\begin{lstlisting}
&SURF ..., HT3D=T, HT3D_WEIGHT=0,0,1 /
\end{lstlisting}
directs all the pyrolzate to the $z$ (vertical) direction. To apply a \ct{LAYER_DIVIDE} to this direction as well, you will need to assign appropriate \ct{SURF} lines to the bottom and top of the solid.

\subsection{Reaction Rates}
\label{info:reaction_rates}

Expand Down Expand Up @@ -12179,7 +12185,7 @@ \section{\texorpdfstring{{\tt DEVC}}{DEVC} (Device Parameters)}
\ct{IOR} & Integer & Section~\ref{info:DEVC} & & \\ \hline
\ct{LATCH} & Logical & Section~\ref{info:basic_control} & & \ct{T} \\ \hline
\ct{LP_TAG} & Integer & Section~\ref{info:tagging_particles} & & \\ \hline
\ct{MATL_ID} & Character & Section~\ref{info:more_wall_outputs} & & \\ \hline
\ct{MATL_ID} & Character & Section~\ref{info:more_wall_outputs} & & \\ \hline
\ct{MOVE_ID} & Character & Section~\ref{info:MOVE_ID} & & \\ \hline
\ct{N_INTERVALS} & Integer & Section~\ref{info:time_integral} & & 10 \\ \hline
\ct{NODE_ID} & Character(2) & Section~\ref{info:HVAC} & & \\ \hline
Expand Down Expand Up @@ -13610,6 +13616,7 @@ \section{\texorpdfstring{{\tt SURF}}{SURF} (Surface Properties)}
\ct{HORIZONTAL} & Logical & Section~\ref{info:GEOMETRY} & & \ct{F} \\ \hline
\ct{HRRPUA} & Real & Section~\ref{info:gas_burner} & \unit{kW/m^2} & \rule{0pt}{2.3ex} \\ \hline
\ct{HT3D} & Logical & Section~\ref{info:ht3d} & & \ct{F} \\ \hline
\ct{HT3D_WEIGHT(:)} & Real Triplet & Section~\ref{info:LAYER_DIVIDE} & & $1/3$ \\ \hline
\ct{ID} & Character & Section~\ref{info:SURF} & & \\ \hline
\ct{IGNITION_TEMPERATURE} & Real & Section~\ref{info:specified_burning} & \unit{\degreeCelsius} & 5000. \\ \hline
\ct{INERT_Q_REF} & Logical & Section~\ref{info:scaled_burning} & & F \\ \hline
Expand Down Expand Up @@ -13672,7 +13679,7 @@ \section{\texorpdfstring{{\tt SURF}}{SURF} (Surface Properties)}
\ct{RAMP_V_Y} & Character & Section~\ref{info:RAMP_Vel_Prof} & & \\ \hline
\ct{RAMP_V_Z} & Character & Section~\ref{info:RAMP_Vel_Prof} & & \\ \hline
\ct{REFERENCE_HEAT_FLUX} & Real Array & Section~\ref{info:scaled_burning} & \unit{kW/m^2} & \rule{0pt}{2.3ex} \\ \hline
\ct{REFERENCE_HEAT_FLUX_TIME_INTERVA} & Real & Section~\ref{info:scaled_burning} & s & 1.0 \\ \hline
\ct{REFERENCE_HEAT_FLUX_TIME_INTERVAL} & Real & Section~\ref{info:scaled_burning} & s & 1.0 \\ \hline
\ct{REFERENCE_THICKNESS} & Real Array & Section~\ref{info:scaled_burning} & m & \\ \hline
\ct{REMESH_RATIO} & Real & Section~\ref{info:solid_phase_stability} & & 0.15 \\ \hline
\ct{RGB(3)} & Integer Array & Section~\ref{info:colors} & & \small 255,204,102 \\ \hline
Expand Down
2 changes: 1 addition & 1 deletion Manuals/FDS_Verification_Guide/FDS_Verification_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4963,7 +4963,7 @@ \subsection{Mass Conservation in a 3-D Solid}
\label{fig:ht3d_mass_conservation}
\end{figure}

In this case, the moisture is not explicitly modeled; that is, ``wet wood'' undergoes a single reaction becoming ``dry wood'' and water vapor. A variation of the case is to mix moisture and dry wood together and allow the moisture to evaporate. To mimic the conditions of the first case, the density of the dry wood is set to 387.76~kg/m$^3$ and the moisture 1000~kg/m$^3$. The same mass of water vapor should be produced, as shown in the right plot of Fig.~\ref{fig:ht3d_mass_conservation}, but the time histories of the two cases are not the same because the thermal properties of the combination of two material components in the second case are different than that of the single component of the first case.
In this case, the moisture is not explicitly modeled; that is, ``wet wood'' undergoes a single reaction becoming ``dry wood'' and water vapor. A variation of the case is to mix moisture and dry wood together and allow the moisture to evaporate. To mimic the conditions of the first case, the density of the dry wood is set to 387.76~kg/m$^3$ and the moisture 1000~kg/m$^3$. The same mass of water vapor should be produced, as shown in the right plot of Fig.~\ref{fig:ht3d_mass_conservation}, but the time histories of the two cases are not the same because the thermal properties of the combination of two material components in the second case are different than that of the single component of the first case. Another difference between the first and second cases is that the evaporated vapor is forced out of the horizontal surfaces only, and the result is checked by comparing the time integrals of the surface and volume spatial integrals.

\FloatBarrier

Expand Down
6 changes: 4 additions & 2 deletions Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -7995,7 +7995,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
CHARACTER(LABEL_LENGTH) :: TEXTURE_MAP,HEAT_TRANSFER_MODEL,LEAK_PATH_ID(2),NODE_ID
CHARACTER(25) :: COLOR
REAL(EB) :: TAU_Q,TAU_V,TAU_T,TAU_MF(MAX_SPECIES),HRRPUA,MLRPUA,TEXTURE_WIDTH,TEXTURE_HEIGHT,VEL_T(2),&
TAU_EF,E_COEFFICIENT,VOLUME_FLOW,&
TAU_EF,E_COEFFICIENT,VOLUME_FLOW,HT3D_WEIGHT(3),&
TMP_FRONT,TMP_FRONT_INITIAL,TMP_INNER,THICKNESS(MAX_LAYERS),VEL,VEL_BULK,INTERNAL_HEAT_SOURCE(MAX_LAYERS),&
MASS_FLUX(MAX_SPECIES),Z0,PLE,CONVECTIVE_HEAT_FLUX,PARTICLE_MASS_FLUX,&
TRANSPARENCY,EXTERNAL_FLUX,TMP_BACK,TMP_GAS_BACK,TMP_GAS_FRONT,MASS_FLUX_TOTAL,MASS_FLUX_VAR,&
Expand Down Expand Up @@ -8034,7 +8034,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
DELAMINATION_DENSITY,DELAMINATION_TMP,&
FREE_SLIP,INERT_Q_REF,FYI,GEOMETRY,HEAT_OF_VAPORIZATION,&
HEAT_TRANSFER_COEFFICIENT,HEAT_TRANSFER_COEFFICIENT_BACK,HEAT_TRANSFER_COEFFICIENT_SIGMA,&
HEAT_TRANSFER_MODEL,HORIZONTAL,HRRPUA,VARIABLE_THICKNESS,HT3D,ID,IGNITION_TEMPERATURE,&
HEAT_TRANSFER_MODEL,HORIZONTAL,HRRPUA,VARIABLE_THICKNESS,HT3D,HT3D_WEIGHT,ID,IGNITION_TEMPERATURE,&
INIT_IDS,INIT_PER_AREA,&
INNER_RADIUS,INTERNAL_HEAT_SOURCE,LAYER_DIVIDE,&
LEAK_PATH,LEAK_PATH_ID,LENGTH,MASS_FLUX,MASS_FLUX_TOTAL,MASS_FLUX_VAR,MASS_FRACTION,&
Expand Down Expand Up @@ -8464,6 +8464,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
SF%INCLUDE_BOUNDARY_THR_D_TYPE = .TRUE.
SOLID_HEAT_TRANSFER_3D = .TRUE.
ENDIF
SF%HT3D_WEIGHT = HT3D_WEIGHT
SF%BLOWING = BLOWING
SF%DIRICHLET_FRONT = DIRICHLET_FRONT
SF%DIRICHLET_BACK = DIRICHLET_BACK
Expand Down Expand Up @@ -9285,6 +9286,7 @@ SUBROUTINE SET_SURF_DEFAULTS
THICKNESS = -1._EB
VARIABLE_THICKNESS = .FALSE.
HT3D = .FALSE.
HT3D_WEIGHT = ONTH
TMP_BACK = -TMPM-1._EB
TMP_GAS_FRONT = -TMPM-1._EB
TMP_GAS_BACK = -TMPM-1._EB
Expand Down
1 change: 1 addition & 0 deletions Source/type.f90
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,7 @@ MODULE TYPES
REAL(EB) :: TIME_STEP_FACTOR=10._EB !< Maximum amount to reduce solid phase conduction time step
REAL(EB) :: REMESH_RATIO=0.05 !< Fraction change in wall node DX to trigger a remesh
REAL(EB) :: FILM_FACTOR=ONTH !< Weighting factor for evaluating surface file properties
REAL(EB), DIMENSION(3) :: HT3D_WEIGHT=ONTH !< Directional weighting factor for HT3D mass transport

REAL(EB), ALLOCATABLE, DIMENSION(:) :: DX,RDX,RDXN,X_S,DX_WGT,MF_FRAC,PARTICLE_INSERT_CLOCK
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: RHO_0
Expand Down
26 changes: 17 additions & 9 deletions Source/wall.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1840,7 +1840,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
N_CELLS,ITMP,ITER,BACK_MESH,BACK_INDEX,BACK_WALL_INDEX,FIRST_CELL,LAST_CELL
CHARACTER(MESSAGE_LENGTH) :: MESSAGE
LOGICAL :: ISOLATED_THIN_WALL,ISOLATED_THIN_WALL_BACK,REMESH_LAYER(MAX_LAYERS_HT3D),REMESH_CHECK,DIRICHLET_BACK,&
CELL_ZERO(MAX_LAYERS_HT3D),TMP_CHECK(MAX_LAYERS_HT3D),CELL_ZERO_CELL(NWP_MAX)
CELL_ZERO(MAX_LAYERS_HT3D),TMP_CHECK(MAX_LAYERS_HT3D),CELL_ZERO_CELL(NWP_MAX),FLAT_PLATE
TYPE(WALL_TYPE), POINTER :: WC,WC_BACK
TYPE(THIN_WALL_TYPE), POINTER :: TW,TW_BACK
TYPE(CFACE_TYPE), POINTER :: CFA,CFA_BACK
Expand All @@ -1861,6 +1861,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,

ISOLATED_THIN_WALL = .FALSE.
ISOLATED_THIN_WALL_BACK = .FALSE.
FLAT_PLATE = .FALSE.

UNPACK_WALL_PARTICLE: IF (PRESENT(WALL_INDEX)) THEN

Expand Down Expand Up @@ -1894,6 +1895,10 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
Q_LIQUID_F = B1%Q_CONDENSE
ENDIF

! Indicate if this is a surface (not an edge) of a zero-cell thick flat plate

IF (OBSTRUCTION(OBST_INDEX)%THIN .AND. .NOT.CELL(CELL_INDEX(BC%II,BC%JJ,BC%KK))%SOLID) FLAT_PLATE = .TRUE.

ELSEIF (PRESENT(THIN_WALL_INDEX)) THEN

TW => THIN_WALL(THIN_WALL_INDEX)
Expand Down Expand Up @@ -2048,7 +2053,6 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
ONE_D%X(0:NWP),LAYER_DIVIDE,DX_S(1:NWP),RDX_S(0:NWP+1),RDXN_S(0:NWP),DX_WGT_S(0:NWP),DXF,DXB,&
LAYER_INDEX(0:NWP+1),MF_FRAC(1:NWP),SF%INNER_RADIUS,ONE_D%LAYER_DIVIDE_DEPTH)
ELSE COMPUTE_GRID
! NWP = SF%N_CELLS_INI
DXF = SF%DXF
DXB = SF%DXB
DX_S(1:NWP) = SF%DX(1:NWP)
Expand Down Expand Up @@ -2287,9 +2291,12 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
ENDIF

! Add internal radiation and additional heat sources to pyrolysis

Q_S = Q_S + Q_IR + Q_ADD
! If the 3D solver is used, divide Q_S by 3
Q_S = Q_S/REAL(SF%HT_DIM,EB)

! If the 3D solver is used, apportion the source term Q_S in the various coordinate directions

IF (SF%HT_DIM>1) Q_S = SF%HT3D_WEIGHT(HT_3D_SWEEP_DIRECTION)*Q_S

! Explicitly update the temperature field and adjust time step if the change in temperature exceeds DELTA_TMP_MAX

Expand Down Expand Up @@ -2319,8 +2326,8 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
CALL PERFORM_PYROLYSIS
! Add internal radiation and additional heat sources to pyrolysis
Q_S = Q_S + Q_IR + Q_ADD
! If the 3D solver is used, divide Q_S by 3
Q_S = Q_S/REAL(SF%HT_DIM,EB)
! If the 3D solver is used, apportion the source term in the various coordinate directions
IF (SF%HT_DIM>1) Q_S = SF%HT3D_WEIGHT(HT_3D_SWEEP_DIRECTION)*Q_S
ENDIF
ENDIF

Expand All @@ -2334,9 +2341,10 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
ENDIF

IF (ONE_D%PYROLYSIS_MODEL==PYROLYSIS_PREDICTED .AND. .NOT.PRESENT(THIN_WALL_INDEX)) THEN
RDT = 1._EB/(DT_BC*REAL(SF%HT_DIM,EB))
IF (PRESENT(WALL_INDEX)) THEN
IF (OBSTRUCTION(OBST_INDEX)%THIN .AND. .NOT.CELL(CELL_INDEX(BC%II,BC%JJ,BC%KK))%SOLID) RDT = 1._EB/DT_BC
IF (SF%HT_DIM==1 .OR. FLAT_PLATE) THEN
RDT = 1._EB/DT_BC ! Pyrolyzate is not transported to the edge of a thin plate
ELSE
RDT = SF%HT3D_WEIGHT(HT_3D_SWEEP_DIRECTION)/DT_BC ! Apply weighted amount to each coordinate direction
ENDIF
Q_DOT_G_PP_NET = Q_DOT_G_PP_NET + Q_DOT_G_PP*DT_BC_SUB*RDT
Q_DOT_O2_PP_NET = Q_DOT_O2_PP_NET + Q_DOT_O2_PP*DT_BC_SUB*RDT
Expand Down
Loading
Loading