Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -3696,7 +3696,7 @@ \section{HVAC Systems}
\end{lstlisting}
where:
\begin{itemize}
\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}).
\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}).
\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).
\end{itemize}
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.
Expand Down Expand Up @@ -3807,6 +3807,7 @@ \subsection{HVAC Node Parameters}
\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).
\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.
\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.
\item \ct{GEOM} Indicates the node is attached to an unstructured geometry object (Section~\ref{info:hvac_geom}).
\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.
\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.
\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}.
Expand All @@ -3818,6 +3819,8 @@ \subsection{HVAC Node Parameters}

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}.

The pressure zone and physical presence restrictions also apply to \ct{GEOM} being used for an HVAC system.

\subsection{HVAC Fan Parameters}
\label{info:HVACfan}

Expand Down Expand Up @@ -14003,6 +14006,7 @@ \chapter{Error Codes}
174 \> \ct{REAC, Not enough nitrogen for the FUEL_N_TO_HCN_FRACTION.} \> Section~\ref{info:simple_chemistry} \\
175 \> \ct{REAC, Not enough carbon for the FUEL_C_TO_CO_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
176 \> \ct{REAC, Not enough hydrogen for the FUEL_H_TO_H2_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
179 \> \ct{BACK tracked species ... not found.} \> Section~\ref{info:BACKGROUND_SPECIES} \\
180 \> \ct{SPEC ... does not have a SPECIFIC_HEAT_LIQUID ...} \> Section~\ref{info:liquid_props} \\
181 \> \ct{SPEC ... does not have a MELTING_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
182 \> \ct{SPEC ... does not have a VAPORIZATION_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
Expand Down Expand Up @@ -14161,6 +14165,7 @@ \chapter{Error Codes}
376 \> \ct{Meshes must have the same y/z bounds for TUNNEL_PRECONDITIONER.} \> Section~\ref{tunnel_solver} \\
377 \> \ct{SURF ... IMPINGING JET model requires ...} \> Section~\ref{info:impinging_jet} \\
378 \> \ct{SURF ... cannot be applied to a 3-D conducting solid.} \> Section~\ref{info:BACKING} \\
379 \> \ct{SURF ... NODE_ID does not exist.} \> Section~\ref{hvac_geom} \\
\> \> \\
381 \> \ct{Need more spectral band limits.} \> Section~\ref{info:RADI_Wide_Band} \\
382 \> \ct{Spectral band limits should be given in ascending order.} \> Section~\ref{info:RADI_Wide_Band} \\
Expand Down Expand Up @@ -14290,6 +14295,13 @@ \chapter{Error Codes}
\> \ct{A_TROE, T1_TROE, and T3_TROE.} \\
567 \> \ct{REAC: ... Tracked species ... used in a finite rate reaction} \> Section~\ref{info:finite} \\
\> \ct{without N_S defined is not a primitive species.} \\
568 \> \ct{Ductnode with GEOM cannot have a VENT_ID. Ductnode ID:...} \> Section~\ref{info:hvac_geom} \\
569 \> \ct{Ductnode with one duct needs either AMBIENT, GEOM, or VENT_ID.} \> Section~\ref{info:hvac_geom} \\
\> \ct{ Ductnode ID:...} \\
570 \> \ct{Problem with ductnode:..., cannot assign to both VENT and GEOM.} \> Section~\ref{info:hvac_geom} \\
571 \> \ct{VENT_ID for leakage cannot be AMBIENT if GEOM is set. Leak ID:...} \> Section~\ref{info:hvac_geom} \\
572 \> \ct{VENT2_ID for leakage cannot be AMBIENT if GEOM2 is set. Leak ID:...}\> Section~\ref{info:hvac_geom} \\
573 \> \ct{Ductnode:...,Ductnode ID:... defined with GEOM had no CFACE found.}\> Section~\ref{info:hvac_geom} \\
\> \> \\
601 \> \ct{OBST ... MULT_ID ... not found.} \> Section~\ref{info:MULT} \\
602 \> \ct{OBST ... SHAPE requires RADIUS.} \> Section~\ref{info:multobst} \\
Expand All @@ -14304,7 +14316,7 @@ \chapter{Error Codes}
611 \> \ct{OBST ... has a BULK_DENSITY but zero volume.} \> Section~\ref{info:BURN_AWAY} \\
612 \> \ct{OBST ... must have a volume to be assigned HT3D.} \> Section~\ref{checkerboard} \\
613 \> \ct{OBST ... and OBST ... cannot overlap in Mesh ...} \> Section~\ref{info:OVERLAY} \\
\> \> \\
614 \> \ct{OBST_ID ... cannot have a SURF with NODE_ID} \> Section~\ref{info:hvac_geom} \\ \> \> \\
701 \> \ct{problem with GEOM, local SURF_ID index ... out of bounds.} \> Section~\ref{info:GEOM_Basics} \\
702 \> \ct{problem with GEOM, SURF_IDS not defined properly.} \> Section~\ref{info:first_geom} \\
703 \> \ct{missing SURF_ID in \&GEOM line ...} \> Section~\ref{subsec:readbin} \\
Expand Down Expand Up @@ -14362,6 +14374,7 @@ \chapter{Error Codes}
820 \> \ct{VENT ... has no solid backing or an IOR is needed.} \> Section~\ref{info:VENT_Basics} \\
821 \> \ct{VENT ... cannot have normal component of UVW equal to 0.} \> Section~\ref{info:HVAClouvers} \\
822 \> \ct{VENT ... has the same ID as another VENT.} \> Section~\ref{info:HVAC} \\
823 \> \ct{VENT ... cannot have SURF_ID=HVAC and GEOM=T.} \> Section~\ref{info:hvac_geom} \\
\> \> \\
841 \> \ct{INIT ... has an unknown MULT_ID ...} \> Section~\ref{info:MULT} \\
842 \> \ct{INIT ... cannot have both MASS and VOLUME_FRACTION.} \> Section~\ref{info:init_species} \\
Expand Down Expand Up @@ -14488,9 +14501,13 @@ \chapter{Error Codes}
1043 \> \ct{PROP_ID ... not found.} \> Section~\ref{info:gasoutputquantities} \\
1044 \> \ct{Cannot set EXTERNAL_FILE=T for a RAMP used for an output clock ...} \> Section~\ref{info:external_control} \\
1045 \> \ct{QUANTITY ... requires a PART_ID for particles with mass.} \> Section~\ref{tab:particleoutputquantities} \\
\> \> \\
\\
1051 \> \ct{RESTART initial time equals T_END.} \> Section~\ref{info:restart} \\

1052 \> \ct{On TIME, do not set both RAMP_TIME and RAMP_DT.} \> Section~\ref{info:simulation_time_ramp} \\
1053 \> \ct{One TIME, if one of DT_EXTERNAL_HEARTBEAT or} \> Section~\ref{info:external_control} \\
\> \ct{EXTERNAL_HEARTBEAT_FILENAME is set, both must be set.} \\
\\
1054 \> \ct{On MULT, must set DX if I_UPPER-I_LOWER>0, etc.} \> Section~\ref{info:MULT} \\
\end{tabbing}


Expand Down
4 changes: 2 additions & 2 deletions Source/hvac.f90
Original file line number Diff line number Diff line change
Expand Up @@ -434,8 +434,8 @@ SUBROUTINE READ_HVAC
', HVAC line number:',NN
CALL SHUTDOWN(MESSAGE); RETURN
ENDIF
IF (.NOT. GEOM .AND. VENT_ID=='null' .AND. N_DUCTS==1) THEN
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): Ductnode with one duct needs either GEOM or VENT_ID. Ductnode ID:',&
IF (.NOT. AMBIENT .AND. .NOT. GEOM .AND. VENT_ID=='null' .AND. N_DUCTS==1) THEN
WRITE(MESSAGE,'(A,A,A,I5)') 'ERROR(yyy): Ductnode with one duct needs either AMBIENT, GEOM, or VENT_ID. Ductnode ID:',&
TRIM(DN%ID),', HVAC line number:',NN
CALL SHUTDOWN(MESSAGE); RETURN
ENDIF
Expand Down
14 changes: 7 additions & 7 deletions Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1510,7 +1510,7 @@ SUBROUTINE READ_TIME(DT)

IF (RAMP_TIME /='null' .AND. RAMP_DT /='null') THEN
WRITE(MESSAGE,'(A)') &
'ERROR(XXX): On TIME, do not set both RAMP_TIME and RAMP_DT.'
'ERROR(1052): On TIME, do not set both RAMP_TIME and RAMP_DT.'
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDIF

Expand All @@ -1519,7 +1519,7 @@ SUBROUTINE READ_TIME(DT)

IF (DT_EXTERNAL_HEARTBEAT <= TWO_EPSILON_EB .NEQV. EXTERNAL_HEARTBEAT_FILENAME=='null') THEN
WRITE(MESSAGE,'(A)') &
'ERROR(XXX): On TIME, if one of DT_EXTERNAL_HEARTBEAT or EXTERNAL_HEARTBEAT_FILENAME is set, both must be set.'
'ERROR(1053): On TIME, if one of DT_EXTERNAL_HEARTBEAT or EXTERNAL_HEARTBEAT_FILENAME is set, both must be set.'
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDIF

Expand Down Expand Up @@ -1687,7 +1687,7 @@ SUBROUTINE READ_MULT
IF ( (I_UPPER-I_LOWER>0 .AND. ABS(DX)<TWO_EPSILON_EB) .OR. &
(J_UPPER-J_LOWER>0 .AND. ABS(DY)<TWO_EPSILON_EB) .OR. &
(K_UPPER-K_LOWER>0 .AND. ABS(DZ)<TWO_EPSILON_EB) ) THEN
WRITE(MESSAGE,'(A)') 'ERROR(XXX): On MULT, must set DX if I_UPPER-I_LOWER>0, etc.'
WRITE(MESSAGE,'(A)') 'ERROR(1054): On MULT, must set DX if I_UPPER-I_LOWER>0, etc.'
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDIF

Expand Down Expand Up @@ -3361,7 +3361,7 @@ SUBROUTINE READ_SPEC
ENDIF
ENDDO
IF (N1 > N_TRACKED_SPECIES) THEN
WRITE(MESSAGE,'(A,A,A)') 'ERROR(XXX): BACK tracked species ',TRIM(SPEC_ID(NS)),' not found.'
WRITE(MESSAGE,'(A,A,A)') 'ERROR(179): BACK tracked species ',TRIM(SPEC_ID(NS)),' not found.'
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDIF
ENDIF
Expand Down Expand Up @@ -9217,7 +9217,7 @@ SUBROUTINE PROC_SURF_1
ENDIF
ENDDO
IF (SF%NODE_INDEX==0) THEN
WRITE(MESSAGE,'(A,A,A)') 'ERROR(xxx): SURF ',TRIM(SF%ID),' NODE_ID does not exist'
WRITE(MESSAGE,'(A,A,A)') 'ERROR(379): SURF ',TRIM(SF%ID),' NODE_ID does not exist'
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDIF
ENDIF
Expand Down Expand Up @@ -11092,7 +11092,7 @@ SUBROUTINE READ_OBST(QUICK_READ)

DO NNN=-3,3
IF (SURFACE(OB%SURF_INDEX(NNN))%NODE_ID/='null') THEN
WRITE(MESSAGE,'(A,A,A)') 'ERROR(xxx): OBST_ID ',TRIM(ID),' cannot have a SURF with NODE_ID.'
WRITE(MESSAGE,'(A,A,A)') 'ERROR(614): OBST_ID ',TRIM(ID),' cannot have a SURF with NODE_ID.'
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
ENDIF
ENDDO
Expand Down Expand Up @@ -11967,7 +11967,7 @@ SUBROUTINE READ_VENT
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
ENDIF
IF (SURF_ID=='HVAC' .AND. GEOM) THEN
WRITE(MESSAGE,'(3A)') 'ERROR(xxx): VENT ',TRIM(ID), ' cannot have SURF_ID=HVAC and GEOM=T.'
WRITE(MESSAGE,'(3A)') 'ERROR(823): VENT ',TRIM(ID), ' cannot have SURF_ID=HVAC and GEOM=T.'
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
ENDIF

Expand Down