diff --git a/Manuals/FDS_User_Guide/FDS_User_Guide.tex b/Manuals/FDS_User_Guide/FDS_User_Guide.tex index 8fda1d644e8..a5a78981681 100644 --- a/Manuals/FDS_User_Guide/FDS_User_Guide.tex +++ b/Manuals/FDS_User_Guide/FDS_User_Guide.tex @@ -2513,6 +2513,7 @@ \subsection{Limitations} \item If your 3-D obstruction extends beyond meshes that abut, FDS uses a special algorithm to identify all the meshes where this obstruction lives, and also those obstructions connected to it. However, if this algorithm fails to detect all the meshes and you recieve an error stating that there is a problem, add the parameter {\ct NEIGHBOR\_SEPARATION\_DISTANCE} to the {\ct MISC} line. Any mesh within this distance of another mesh will share geometry information for use in the 3-D heat conduction calculation. If you set this parameter to a value larger than the width of the computational domain, then all meshes will establish communication channels for exchanging boundary information. \item By default, the interior nodes are clustered near the surface and stretched out deeper within the solid. If you want to maintain uniform spacing, set {\ct CELL\_SIZE} on the {\ct SURF} or {\ct OBST} line to indicate the desired interior node spacing. The {\ct CELL\_SIZE} is typically chosen to be comparable to the gas phase cells. If the obstruction is thin; that is, less than one gas phase cell thick, the specified {\ct CELL\_SIZE} will only apply to the heat conduction in the transverse, not normal, direction. The normal direction gridding will be controlled by the parameters {\ct STRETCH\_FACTOR} and {\ct CELL\_SIZE\_FACTOR}. This may be useful in cases where the specified {\ct CELL\_SIZE} is too coarse to resolve variations in surface definition along the normal dimension (see Section~\ref{checkerboard} for an example). \item {\ct HT3D} cannot be applied to an {\ct OBST} that is to {\ct BURN\_AWAY}. +\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. \end{enumerate} \subsubsection{Example: Steel Assembly} @@ -13856,6 +13857,7 @@ \chapter{Error Codes} 316 \> {\ct SURF \ldots\ N\_LAYER\_CELLS\_MAX must be > 0. } \> Section~\ref{info:solid_phase_stability} \\ 317 \> {\ct SURF \ldots\ Specify either ROUGHNESS or Z\_0, not both. } \> Section~\ref{info:WALL_MODEL} \\ 318 \> {\ct SURF \ldots\ MASS\_FLUX\_TOTAL is only for outflow. } \> Section~\ref{info:MASS_FLUX_TOTAL} \\ +319 \> {\ct SURF \ldots\ must have a MATL\_ID. } \> Section~\ref{info:HT3D_Limitations} \\ 320 \> {\ct SURF \ldots\ cannot use both MASS\_FLUX and MASS\_FRACTION. } \> Section~\ref{info:MASS_FLUX} \\ 321 \> {\ct SURF \ldots\ MASS\_FLUX cannot be less than zero. } \> Section~\ref{info:MASS_FLUX} \\ 322 \> {\ct SURF \ldots\ cannot use both MASS\_FLUX and VEL. } \> Section~\ref{info:MASS_FLUX} \\ diff --git a/Source/init.f90 b/Source/init.f90 index f9fc55aaab1..82e004db504 100644 --- a/Source/init.f90 +++ b/Source/init.f90 @@ -4132,7 +4132,10 @@ SUBROUTINE FIND_WALL_BACK_INDEX(NM,IW) DO NN=1,ONE_D%N_MATL ALLOCATE(ONE_D%MATL_COMP(NN)%MASS_FRACTION(ONE_D%N_LAYERS)) ONE_D%MATL_INDEX(NN) = MATL_INDEX(NN) - IF (MATERIAL(ONE_D%MATL_INDEX(NN))%PYROLYSIS_MODEL/=PYROLYSIS_NONE) ONE_D%PYROLYSIS_MODEL = PYROLYSIS_PREDICTED + IF (MATERIAL(ONE_D%MATL_INDEX(NN))%PYROLYSIS_MODEL/=PYROLYSIS_NONE) THEN + ONE_D%PYROLYSIS_MODEL = PYROLYSIS_PREDICTED + SF%SPECIES_BC_INDEX = SPECIFIED_MASS_FLUX + ENDIF DO NL=1,ONE_D%N_LAYERS ONE_D%MATL_COMP(NN)%MASS_FRACTION(NL) = MATL_MASS_FRACTION(NL,NN) ENDDO diff --git a/Source/read.f90 b/Source/read.f90 index 665a420828b..6b8546a704f 100644 --- a/Source/read.f90 +++ b/Source/read.f90 @@ -6858,9 +6858,11 @@ SUBROUTINE READ_MATL ! Add reserved materials if necessary -N_MATL_RESERVED = 1 +N_MATL_RESERVED = 3 ALLOCATE(SEARCH_PHRASE(N_MATL_RESERVED)) ; ALLOCATE(MATL_NAME_RESERVED(N_MATL_RESERVED)) -SEARCH_PHRASE(1) = 'MOISTURE_FRACTION' ; MATL_NAME_RESERVED(1) = 'MOISTURE' +SEARCH_PHRASE(1) = 'MOISTURE_FRACTION' ; MATL_NAME_RESERVED(1) = 'MOISTURE' +SEARCH_PHRASE(2) = 'VARIABLE_THICKNESS' ; MATL_NAME_RESERVED(2) = 'MATERIAL PLACEHOLDER' +SEARCH_PHRASE(3) = 'HT3D' ; MATL_NAME_RESERVED(3) = 'MATERIAL PLACEHOLDER' DO NN=1,N_MATL_RESERVED CALL SEARCH_INPUT_FILE(LU_INPUT,TRIM(SEARCH_PHRASE(NN)),FOUND) @@ -6910,6 +6912,11 @@ SUBROUTINE READ_MATL NU_SPEC(1,1) = 1._EB HEAT_OF_REACTION(1) = 2295._EB MOISTURE_INDEX = N + CASE('MATERIAL PLACEHOLDER') + ID = 'MATERIAL PLACEHOLDER' + DENSITY = 1000._EB + CONDUCTIVITY = 1._EB + SPECIFIC_HEAT = 1._EB END SELECT ENDIF @@ -7071,6 +7078,8 @@ SUBROUTINE READ_MATL IF (N_REACTIONS==0) ML%PYROLYSIS_MODEL = PYROLYSIS_NONE + IF (ML%PYROLYSIS_MODEL/=PYROLYSIS_NONE) INCLUDE_PYROLYSIS = .TRUE. + ! If oxygen is consumed in the reaction, set a global variable for ! use in calculating the heat release rate based on oxygen consumption @@ -7608,8 +7617,7 @@ END SUBROUTINE PROC_MATL !> \brief Read the SURF namelist lines - -!> \brief Read the SURF namelist lines +!> \param QUICK_READ Flag indicating that this routine is to be run only to search for HT3D surfaces SUBROUTINE READ_SURF(QUICK_READ) @@ -7806,11 +7814,19 @@ SUBROUTINE READ_SURF(QUICK_READ) SURF_DEFAULT = TRIM(ID) ENDIF - ! Set up a dummy surface for VARIABLE_THICKNESS and HT3D. The properties will be changed later. + ! Specify a dummy material for a VARIABLE_THICKNESS or HT3D surface unless the user has also specified a mass flux, in which + ! case throw an error. If no mass flux is specified, the material properties will be changed later. IF ((VARIABLE_THICKNESS .OR. HT3D) .AND. THICKNESS(1)>TWO_EPSILON_EB .AND. MATL_ID(1,1)/='null') SF%LINING = .TRUE. IF ((VARIABLE_THICKNESS .OR. HT3D) .AND. THICKNESS(1)0._EB) .OR. HRRPUA>0._EB .OR. MLRPUA>0._EB) THEN + WRITE (MESSAGE,'(A,A,A)') 'ERROR(319): SURF ',TRIM(SF%ID),' must have a MATL_ID.' + CALL SHUTDOWN(MESSAGE) ; RETURN + ELSE + MATL_ID(1,1) = 'MATERIAL PLACEHOLDER' + ENDIF + ENDIF ! Load RAMP parameters into appropriate array diff --git a/Verification/Fires/box_burn_away3.fds b/Verification/Fires/box_burn_away3.fds index e54f598c1ce..8190e184390 100644 --- a/Verification/Fires/box_burn_away3.fds +++ b/Verification/Fires/box_burn_away3.fds @@ -22,6 +22,7 @@ The gas species here is mixture fraction fuel, burning rate specified. COLOR = 'TOMATO 3' VARIABLE_THICKNESS = T BURN_AWAY = T + MATL_ID = 'FOAM' HRRPUA = 4000. / &REAC FUEL='METHANE', AUTO_IGNITION_TEMPERATURE=10000. / diff --git a/Verification/Fires/box_burn_away4.fds b/Verification/Fires/box_burn_away4.fds index 3e6bb384dd5..811453544f6 100644 --- a/Verification/Fires/box_burn_away4.fds +++ b/Verification/Fires/box_burn_away4.fds @@ -24,6 +24,7 @@ The gas species here is mixture fraction fuel, burning rate specified. COLOR = 'TOMATO 3' VARIABLE_THICKNESS = T BURN_AWAY = T + MATL_ID = 'FOAM' HRRPUA = 2200. / &REAC FUEL='ETHYLENE' diff --git a/Verification/Fires/box_burn_away8.fds b/Verification/Fires/box_burn_away8.fds index c433b2300fb..188a1123f29 100644 --- a/Verification/Fires/box_burn_away8.fds +++ b/Verification/Fires/box_burn_away8.fds @@ -24,6 +24,7 @@ The gas species here is mixture fraction fuel, burning rate specified. COLOR = 'TOMATO 3' VARIABLE_THICKNESS = T BURN_AWAY = T + MATL_ID = 'FOAM' MLRPUA = 0.0733333 / &REAC FUEL='ETHYLENE'