Skip to content

Commit 00b685d

Browse files
authored
Merge pull request #14838 from cxp484/FireX
FireX: Merge with firemodels/master
2 parents ce4cf98 + 4da0e1e commit 00b685d

File tree

9 files changed

+135
-80
lines changed

9 files changed

+135
-80
lines changed

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3323,7 +3323,9 @@ \subsubsection{Examples}
33233323
\label{box_burn_away_2D_fig}
33243324
\end{figure}
33253325

3326-
3326+
\subsection{Delamination of layers}
3327+
\label{info:surf_delamination}
3328+
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.
33273329

33283330
\newpage
33293331

@@ -3694,7 +3696,7 @@ \section{HVAC Systems}
36943696
\end{lstlisting}
36953697
where:
36963698
\begin{itemize}
3697-
\item \ct{TYPE_ID} is a character string that indicates the type of component that the namelist group is defining. \ct{TYPE_ID} can be \ct{DUCT}, \ct{NODE}, \ct{FAN}, \ct{FILTER}, \ct{AIRCOIL}, or \ct{LEAK} (see ~Sec.~\ref{info:local_leakage}).
3699+
\item \ct{TYPE_ID} is a character string that indicates the type of component that the namelist group is defining. \ct{TYPE_ID} can be \ct{DUCT}, \ct{NODE}, \ct{FAN}, \ct{FILTER}, \ct{AIRCOIL}, or \ct{LEAK} (see ~Sec.~\ref{info:local_leakage}).
36983700
\item \ct{ID} is a character string giving a name to the component. The name must be unique amongst all other components of that type; however, the same name can be given to components of different types (i.e., a duct and a node can have the same name but two ducts cannot).
36993701
\end{itemize}
37003702
A number of examples of simple HVAC systems are given in the HVAC folder of the sample cases and are discussed in the FDS Verification Guide.
@@ -3805,6 +3807,7 @@ \subsection{HVAC Node Parameters}
38053807
\item \ct{AMBIENT} is a logical value. If \ct{T}, then the node is connected to the ambient (i.e., it is equivalent to the \ct{OPEN} boundary condition on a \ct{SURF} line).
38063808
\item \ct{DUCT_ID} gives the \ct{ID}s of the ducts connected to the node. Only one duct is allowed if the node is \ct{AMBIENT} or has a \ct{VENT_ID}. Up to 10 ducts can be connected to a node.
38073809
\item \ct{FILTER_ID} gives the \ct{ID} a filter located at the node. A node with a filter must have two connected ducts. This means a filter cannot be located at an ambient node, a node that is attached to a \ct{VENT}, or node with three or more ducts.
3810+
\item \ct{GEOM} Indicates the node is attached to an unstructured geometry object (Section~\ref{info:hvac_geom}).
38083811
\item \ct{LOSS} is an $n$ by $n$ array of real numbers giving the dimensionless loss coefficients for the node. \ct{LOSS(I,J)} is the loss coefficient for flow from duct \ct{I} to duct \ct{J} expressed in terms of the downstream duct area (see discussion in ~\ref{info:HVACduct} on how to adjust losses for area changes). For a terminal node (e.g., a node connected to the ambient or to a \ct{VENT}) the \ct{LOSS} is entered as a pair of numbers representing loss coefficient for flow entering the HVAC system and for flow exiting the HVAC system.
38093812
\item \ct{NETWORK_ID} Used for Smokeview visualization. All ducts and nodes with a common \ct{NETWORK_ID} can be selected or deselected as a group in Smokeview. If no value is given, the node will be placed in the Unassigned network.
38103813
\item \ct{VENT_ID} is the name of the \ct{VENT} where the node connects to the FDS computational domain. No two \ct{VENTs} should be defined with the same \ct{VENT_ID}.
@@ -3816,6 +3819,8 @@ \subsection{HVAC Node Parameters}
38163819

38173820
Note that a \ct{VENT} being used for an HVAC system must be present throughout the simulation. The \ct{VENT} should not have a \ct{CTRL_ID} or \ct{DEVC_ID}. This also includes the solid surface it is attached; i.e., any \ct{OBST} the \ct{VENT} is attached to also needs to be present throughout the simulation. Turning on or off a \ct{VENT} connected to an HVAC system, requires a damper in the duct connected to \ct{VENT}.
38183821

3822+
The pressure zone and physical presence restrictions also apply to \ct{GEOM} being used for an HVAC system.
3823+
38193824
\subsection{HVAC Fan Parameters}
38203825
\label{info:HVACfan}
38213826

@@ -13537,6 +13542,8 @@ \section{\texorpdfstring{{\tt SURF}}{SURF} (Surface Properties)}
1353713542
\ct{CONVECTIVE_HEAT_FLUX} & Real & Section~\ref{info:convection} & \si{kW/m^2} & \\ \hline
1353813543
\ct{CONVERT_VOLUME_TO_MASS} & Logical & Section~\ref{info:MASS_FLUX} & & \ct{F} \\ \hline
1353913544
\ct{DEFAULT} & Logical & Section~\ref{info:SURF} & & \ct{F} \\ \hline
13545+
\ct{DELAMINATION_DENSITY(:)} & Real Array & Section~\ref{info:surf_delamination} & \si{kg/m^3} & \\ \hline
13546+
\ct{DELAMINATION_TMP(:)} & Real Array & Section~\ref{info:surf_delamination} & $^\circ$C & \\ \hline
1354013547
\ct{DELTA_TMP_MAX} & Real & Section~\ref{info:solid_phase_stability} & $^\circ$C & 10 \\ \hline
1354113548
\ct{DRAG_COEFFICIENT} & Real & Section~\ref{info:boundary_fuel_model} & & 2.8 \\ \hline
1354213549
\ct{DSC_CONVERSION_FACTOR} & Real & Section~\ref{info:TGA_DSC_MCC} & & 1 \\ \hline
@@ -14004,6 +14011,7 @@ \chapter{Error Codes}
1400414011
174 \> \ct{REAC, Not enough nitrogen for the FUEL_N_TO_HCN_FRACTION.} \> Section~\ref{info:simple_chemistry} \\
1400514012
175 \> \ct{REAC, Not enough carbon for the FUEL_C_TO_CO_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
1400614013
176 \> \ct{REAC, Not enough hydrogen for the FUEL_H_TO_H2_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
14014+
179 \> \ct{BACK tracked species ... not found.} \> Section~\ref{info:BACKGROUND_SPECIES} \\
1400714015
180 \> \ct{SPEC ... does not have a SPECIFIC_HEAT_LIQUID ...} \> Section~\ref{info:liquid_props} \\
1400814016
181 \> \ct{SPEC ... does not have a MELTING_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
1400914017
182 \> \ct{SPEC ... does not have a VAPORIZATION_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
@@ -14162,6 +14170,7 @@ \chapter{Error Codes}
1416214170
376 \> \ct{Meshes must have the same y/z bounds for TUNNEL_PRECONDITIONER.} \> Section~\ref{tunnel_solver} \\
1416314171
377 \> \ct{SURF ... IMPINGING JET model requires ...} \> Section~\ref{info:impinging_jet} \\
1416414172
378 \> \ct{SURF ... cannot be applied to a 3-D conducting solid.} \> Section~\ref{info:BACKING} \\
14173+
379 \> \ct{SURF ... NODE_ID does not exist.} \> Section~\ref{hvac_geom} \\
1416514174
\> \> \\
1416614175
381 \> \ct{Need more spectral band limits.} \> Section~\ref{info:RADI_Wide_Band} \\
1416714176
382 \> \ct{Spectral band limits should be given in ascending order.} \> Section~\ref{info:RADI_Wide_Band} \\
@@ -14291,6 +14300,13 @@ \chapter{Error Codes}
1429114300
\> \ct{A_TROE, T1_TROE, and T3_TROE.} \\
1429214301
567 \> \ct{REAC: ... Tracked species ... used in a finite rate reaction} \> Section~\ref{info:finite} \\
1429314302
\> \ct{without N_S defined is not a primitive species.} \\
14303+
568 \> \ct{Ductnode with GEOM cannot have a VENT_ID. Ductnode ID:...} \> Section~\ref{info:hvac_geom} \\
14304+
569 \> \ct{Ductnode with one duct needs either AMBIENT, GEOM, or VENT_ID.} \> Section~\ref{info:hvac_geom} \\
14305+
\> \ct{ Ductnode ID:...} \\
14306+
570 \> \ct{Problem with ductnode:..., cannot assign to both VENT and GEOM.} \> Section~\ref{info:hvac_geom} \\
14307+
571 \> \ct{VENT_ID for leakage cannot be AMBIENT if GEOM is set. Leak ID:...} \> Section~\ref{info:hvac_geom} \\
14308+
572 \> \ct{VENT2_ID for leakage cannot be AMBIENT if GEOM2 is set. Leak ID:...}\> Section~\ref{info:hvac_geom} \\
14309+
573 \> \ct{Ductnode:...,Ductnode ID:... defined with GEOM had no CFACE found.}\> Section~\ref{info:hvac_geom} \\
1429414310
\> \> \\
1429514311
601 \> \ct{OBST ... MULT_ID ... not found.} \> Section~\ref{info:MULT} \\
1429614312
602 \> \ct{OBST ... SHAPE requires RADIUS.} \> Section~\ref{info:multobst} \\
@@ -14305,7 +14321,7 @@ \chapter{Error Codes}
1430514321
611 \> \ct{OBST ... has a BULK_DENSITY but zero volume.} \> Section~\ref{info:BURN_AWAY} \\
1430614322
612 \> \ct{OBST ... must have a volume to be assigned HT3D.} \> Section~\ref{checkerboard} \\
1430714323
613 \> \ct{OBST ... and OBST ... cannot overlap in Mesh ...} \> Section~\ref{info:OVERLAY} \\
14308-
\> \> \\
14324+
614 \> \ct{OBST_ID ... cannot have a SURF with NODE_ID} \> Section~\ref{info:hvac_geom} \\ \> \> \\
1430914325
701 \> \ct{problem with GEOM, local SURF_ID index ... out of bounds.} \> Section~\ref{info:GEOM_Basics} \\
1431014326
702 \> \ct{problem with GEOM, SURF_IDS not defined properly.} \> Section~\ref{info:first_geom} \\
1431114327
703 \> \ct{missing SURF_ID in \&GEOM line ...} \> Section~\ref{subsec:readbin} \\
@@ -14363,6 +14379,7 @@ \chapter{Error Codes}
1436314379
820 \> \ct{VENT ... has no solid backing or an IOR is needed.} \> Section~\ref{info:VENT_Basics} \\
1436414380
821 \> \ct{VENT ... cannot have normal component of UVW equal to 0.} \> Section~\ref{info:HVAClouvers} \\
1436514381
822 \> \ct{VENT ... has the same ID as another VENT.} \> Section~\ref{info:HVAC} \\
14382+
823 \> \ct{VENT ... cannot have SURF_ID=HVAC and GEOM=T.} \> Section~\ref{info:hvac_geom} \\
1436614383
\> \> \\
1436714384
841 \> \ct{INIT ... has an unknown MULT_ID ...} \> Section~\ref{info:MULT} \\
1436814385
842 \> \ct{INIT ... cannot have both MASS and VOLUME_FRACTION.} \> Section~\ref{info:init_species} \\
@@ -14489,9 +14506,13 @@ \chapter{Error Codes}
1448914506
1043 \> \ct{PROP_ID ... not found.} \> Section~\ref{info:gasoutputquantities} \\
1449014507
1044 \> \ct{Cannot set EXTERNAL_FILE=T for a RAMP used for an output clock ...} \> Section~\ref{info:external_control} \\
1449114508
1045 \> \ct{QUANTITY ... requires a PART_ID for particles with mass.} \> Section~\ref{tab:particleoutputquantities} \\
14492-
\> \> \\
14509+
\\
1449314510
1051 \> \ct{RESTART initial time equals T_END.} \> Section~\ref{info:restart} \\
14494-
14511+
1052 \> \ct{On TIME, do not set both RAMP_TIME and RAMP_DT.} \> Section~\ref{info:simulation_time_ramp} \\
14512+
1053 \> \ct{One TIME, if one of DT_EXTERNAL_HEARTBEAT or} \> Section~\ref{info:external_control} \\
14513+
\> \ct{EXTERNAL_HEARTBEAT_FILENAME is set, both must be set.} \\
14514+
\\
14515+
1054 \> \ct{On MULT, must set DX if I_UPPER-I_LOWER>0, etc.} \> Section~\ref{info:MULT} \\
1449514516
\end{tabbing}
1449614517

1449714518

Source/dump.f90

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4808,13 +4808,16 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
48084808
QUANTITY => WORK3
48094809

48104810
ISOF_LOOP: DO N=1,N_ISOF
4811+
48114812
IS => ISOSURFACE_FILE(N)
48124813
ERROR = 0
48134814
ISOOFFSET = 1
48144815
HAVE_ISO2 = 0
48154816

48164817
! Fill up the dummy array QUANTITY with the appropriate gas phase output
4818+
48174819
IF (IS%DEBUG) THEN
4820+
48184821
ISO_CENX = REAL((XS_MIN + XF_MAX)/2.0_EB, FB)
48194822
ISO_CENY = REAL((YS_MIN + YF_MAX)/2.0_EB, FB)
48204823
ISO_CENZ = REAL((ZS_MIN + ZF_MAX)/2.0_EB, FB)
@@ -4825,7 +4828,9 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
48254828
ENDDO
48264829
ENDDO
48274830
ENDDO
4831+
48284832
ELSE
4833+
48294834
DO K=0,KBP1
48304835
DO J=0,JBP1
48314836
DO I=0,IBP1
@@ -4834,39 +4839,34 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
48344839
ENDDO
48354840
ENDDO
48364841

4837-
! Mirror QUANTITY into ghost cells
4838-
4839-
QUANTITY(0 ,0:JBP1,0:KBP1) = QUANTITY(1 ,0:JBP1,0:KBP1)
4840-
QUANTITY(IBP1,0:JBP1,0:KBP1) = QUANTITY(IBAR,0:JBP1,0:KBP1)
4841-
QUANTITY(0:IBP1,0 ,0:KBP1) = QUANTITY(0:IBP1,1 ,0:KBP1)
4842-
QUANTITY(0:IBP1,JBP1,0:KBP1) = QUANTITY(0:IBP1,JBAR,0:KBP1)
4843-
QUANTITY(0:IBP1,0:JBP1,0 ) = QUANTITY(0:IBP1,0:JBP1,1 )
4844-
QUANTITY(0:IBP1,0:JBP1,KBP1) = QUANTITY(0:IBP1,0:JBP1,KBAR)
48454842
CALL FILL_EDGES(QUANTITY)
48464843

4847-
! Average the data (which is assumed to be cell-centered) at cell corners
4844+
! Average the data (which is assumed to be cell-centered) at cell corners
48484845

48494846
DO K=0,KBAR
48504847
DO J=0,JBAR
48514848
DO I=0,IBAR
48524849
QQ(I,J,K,1) = REAL(S(I,J,K)*(QUANTITY(I,J,K)*B(I,J,K) + QUANTITY(I+1,J,K)*B(I+1,J,K)+ &
4853-
QUANTITY(I,J,K+1)*B(I,J,K+1) + QUANTITY(I+1,J,K+1)*B(I+1,J,K+1)+ &
4854-
QUANTITY(I,J+1,K)*B(I,J+1,K) + QUANTITY(I+1,J+1,K)*B(I+1,J+1,K)+ &
4855-
QUANTITY(I,J+1,K+1)*B(I,J+1,K+1)+ QUANTITY(I+1,J+1,K+1)*B(I+1,J+1,K+1)),FB)
4850+
QUANTITY(I,J,K+1)*B(I,J,K+1) + QUANTITY(I+1,J,K+1)*B(I+1,J,K+1)+ &
4851+
QUANTITY(I,J+1,K)*B(I,J+1,K) + QUANTITY(I+1,J+1,K)*B(I+1,J+1,K)+ &
4852+
QUANTITY(I,J+1,K+1)*B(I,J+1,K+1)+ QUANTITY(I+1,J+1,K+1)*B(I+1,J+1,K+1)),FB)
48564853
ENDDO
48574854
ENDDO
48584855
ENDDO
4856+
48594857
ENDIF
48604858

48614859
! Fill up QUANTITY2 and QQ2 arrays if the isosurface is colored with a second quantity
48624860

48634861
INDEX2_IF: IF ( IS%INDEX2 /= -1 ) THEN
4862+
48644863
HAVE_ISO2 = 1
48654864
QUANTITY2 => WORK4
48664865

48674866
! Fill up the dummy array QUANTITY2 with the appropriate gas phase output
48684867

48694868
IF (IS%DEBUG) THEN
4869+
48704870
DO K=0,KBAR+1
48714871
IF (K.EQ.KBAR+1) THEN
48724872
ZZ = 2.0_FB*ZPLT(KBAR) - ZPLT(KBAR-1)
@@ -4879,7 +4879,9 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
48794879
ENDDO
48804880
ENDDO
48814881
ENDDO
4882+
48824883
ELSE
4884+
48834885
DO K=0,KBP1
48844886
DO J=0,JBP1
48854887
DO I=0,IBP1
@@ -4888,17 +4890,9 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
48884890
ENDDO
48894891
ENDDO
48904892

4891-
! Mirror QUANTITY into ghost cells
4892-
4893-
QUANTITY2(0 ,0:JBP1,0:KBP1) = QUANTITY2(1 ,0:JBP1,0:KBP1)
4894-
QUANTITY2(IBP1,0:JBP1,0:KBP1) = QUANTITY2(IBAR,0:JBP1,0:KBP1)
4895-
QUANTITY2(0:IBP1,0 ,0:KBP1) = QUANTITY2(0:IBP1,1 ,0:KBP1)
4896-
QUANTITY2(0:IBP1,JBP1,0:KBP1) = QUANTITY2(0:IBP1,JBAR,0:KBP1)
4897-
QUANTITY2(0:IBP1,0:JBP1,0 ) = QUANTITY2(0:IBP1,0:JBP1,1 )
4898-
QUANTITY2(0:IBP1,0:JBP1,KBP1) = QUANTITY2(0:IBP1,0:JBP1,KBAR)
48994893
CALL FILL_EDGES(QUANTITY2)
49004894

4901-
! Average the data (which is assumed to be cell-centered) at cell corners
4895+
! Average the data (which is assumed to be cell-centered) at cell corners
49024896

49034897
DO KK=0,KBAR+1
49044898
K = MIN(KK, KBAR)
@@ -4913,6 +4907,7 @@ SUBROUTINE DUMP_ISOF(T,DT,NM)
49134907
ENDDO
49144908
ENDDO
49154909
ENDDO
4910+
49164911
ENDIF
49174912

49184913
ENDIF INDEX2_IF

Source/hvac.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -430,19 +430,19 @@ SUBROUTINE READ_HVAC
430430
CALL SHUTDOWN(MESSAGE); RETURN
431431
ENDIF
432432
IF ((GEOM .OR. GEOM2) .AND. VENT_ID/='null') THEN
433-
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): Ductnode with GEOM cannot have a VENT_ID. Ductnode ID:',TRIM(DN%ID),&
433+
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(568): Ductnode with GEOM cannot have a VENT_ID. Ductnode ID:',TRIM(DN%ID),&
434434
', HVAC line number:',NN
435435
CALL SHUTDOWN(MESSAGE); RETURN
436436
ENDIF
437-
IF (.NOT. GEOM .AND. VENT_ID=='null' .AND. N_DUCTS==1) THEN
438-
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): Ductnode with one duct needs either GEOM or VENT_ID. Ductnode ID:',&
437+
IF (.NOT. AMBIENT .AND. .NOT. GEOM .AND. VENT_ID=='null' .AND. N_DUCTS==1) THEN
438+
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(569): Ductnode with one duct needs either AMBIENT, GEOM, or VENT_ID. Ductnode ID:',&
439439
TRIM(DN%ID),', HVAC line number:',NN
440440
CALL SHUTDOWN(MESSAGE); RETURN
441441
ENDIF
442442
DN%VENT_ID = VENT_ID
443443
DN%GEOM = GEOM
444444
IF (DN%VENT .AND. DN%GEOM) THEN
445-
WRITE(MESSAGE,'(A,A,A,A)') 'ERROR(yyy): Problem with ductnode:',TRIM(DN%ID), &
445+
WRITE(MESSAGE,'(A,A,A,A)') 'ERROR(570): Problem with ductnode:',TRIM(DN%ID), &
446446
', cannot assign to both VENT and GEOM.'
447447
CALL SHUTDOWN(MESSAGE); RETURN
448448
ENDIF
@@ -604,7 +604,7 @@ SUBROUTINE READ_HVAC
604604
IF (GEOM) THEN
605605
DN%GEOM = .TRUE.
606606
IF (TRIM(DN%VENT_ID)=='AMBIENT') THEN
607-
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): VENT_ID for leakage cannot be AMBIENT if GEOM is set. Leak ID:',TRIM(ID),&
607+
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(571): VENT_ID for leakage cannot be AMBIENT if GEOM is set. Leak ID:',TRIM(ID),&
608608
', HVAC line number:',NN
609609
CALL SHUTDOWN(MESSAGE); RETURN
610610
ENDIF
@@ -637,7 +637,7 @@ SUBROUTINE READ_HVAC
637637
IF (GEOM2) THEN
638638
DN%GEOM = .TRUE.
639639
IF (TRIM(DN%VENT_ID)=='AMBIENT') THEN
640-
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): VENT2_ID for leakage cannot be AMBIENT if GEOM2 is set. Leak ID:',&
640+
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(572): VENT2_ID for leakage cannot be AMBIENT if GEOM2 is set. Leak ID:',&
641641
TRIM(ID),', HVAC line number:',NN
642642
CALL SHUTDOWN(MESSAGE); RETURN
643643
ENDIF
@@ -1123,7 +1123,7 @@ SUBROUTINE PROC_HVAC
11231123

11241124
IF (DN%GEOM) THEN
11251125
IF (CF_AREA(NN) < TWO_EPSILON_EB) THEN
1126-
WRITE(MESSAGE,'(A,I5,A,A,A)') 'ERROR(yyy): Ductnode:',NN,', Ductnode ID:',TRIM(DN%ID),&
1126+
WRITE(MESSAGE,'(A,I5,A,A,A)') 'ERROR(573): Ductnode:',NN,', Ductnode ID:',TRIM(DN%ID),&
11271127
' defined with GEOM had no CFACE found.'
11281128
CALL SHUTDOWN(MESSAGE); RETURN
11291129
ENDIF

0 commit comments

Comments
 (0)