Skip to content

Commit 12172d3

Browse files
authored
Merge pull request #14835 from drjfloyd/master
FDS Source: Fix Issue #14383 and add new error codes to guide
2 parents aa2ac49 + 14a77a9 commit 12172d3

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3696,7 +3696,7 @@ \section{HVAC Systems}
36963696
\end{lstlisting}
36973697
where:
36983698
\begin{itemize}
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}).
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}).
37003700
\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).
37013701
\end{itemize}
37023702
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.
@@ -3807,6 +3807,7 @@ \subsection{HVAC Node Parameters}
38073807
\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).
38083808
\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.
38093809
\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}).
38103811
\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.
38113812
\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.
38123813
\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}.
@@ -3818,6 +3819,8 @@ \subsection{HVAC Node Parameters}
38183819

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

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

@@ -14003,6 +14006,7 @@ \chapter{Error Codes}
1400314006
174 \> \ct{REAC, Not enough nitrogen for the FUEL_N_TO_HCN_FRACTION.} \> Section~\ref{info:simple_chemistry} \\
1400414007
175 \> \ct{REAC, Not enough carbon for the FUEL_C_TO_CO_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
1400514008
176 \> \ct{REAC, Not enough hydrogen for the FUEL_H_TO_H2_FRACTION ...} \> Section~\ref{info:simple_chemistry} \\
14009+
179 \> \ct{BACK tracked species ... not found.} \> Section~\ref{info:BACKGROUND_SPECIES} \\
1400614010
180 \> \ct{SPEC ... does not have a SPECIFIC_HEAT_LIQUID ...} \> Section~\ref{info:liquid_props} \\
1400714011
181 \> \ct{SPEC ... does not have a MELTING_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
1400814012
182 \> \ct{SPEC ... does not have a VAPORIZATION_TEMPERATURE.} \> Section~\ref{info:liquid_props} \\
@@ -14161,6 +14165,7 @@ \chapter{Error Codes}
1416114165
376 \> \ct{Meshes must have the same y/z bounds for TUNNEL_PRECONDITIONER.} \> Section~\ref{tunnel_solver} \\
1416214166
377 \> \ct{SURF ... IMPINGING JET model requires ...} \> Section~\ref{info:impinging_jet} \\
1416314167
378 \> \ct{SURF ... cannot be applied to a 3-D conducting solid.} \> Section~\ref{info:BACKING} \\
14168+
379 \> \ct{SURF ... NODE_ID does not exist.} \> Section~\ref{hvac_geom} \\
1416414169
\> \> \\
1416514170
381 \> \ct{Need more spectral band limits.} \> Section~\ref{info:RADI_Wide_Band} \\
1416614171
382 \> \ct{Spectral band limits should be given in ascending order.} \> Section~\ref{info:RADI_Wide_Band} \\
@@ -14290,6 +14295,13 @@ \chapter{Error Codes}
1429014295
\> \ct{A_TROE, T1_TROE, and T3_TROE.} \\
1429114296
567 \> \ct{REAC: ... Tracked species ... used in a finite rate reaction} \> Section~\ref{info:finite} \\
1429214297
\> \ct{without N_S defined is not a primitive species.} \\
14298+
568 \> \ct{Ductnode with GEOM cannot have a VENT_ID. Ductnode ID:...} \> Section~\ref{info:hvac_geom} \\
14299+
569 \> \ct{Ductnode with one duct needs either AMBIENT, GEOM, or VENT_ID.} \> Section~\ref{info:hvac_geom} \\
14300+
\> \ct{ Ductnode ID:...} \\
14301+
570 \> \ct{Problem with ductnode:..., cannot assign to both VENT and GEOM.} \> Section~\ref{info:hvac_geom} \\
14302+
571 \> \ct{VENT_ID for leakage cannot be AMBIENT if GEOM is set. Leak ID:...} \> Section~\ref{info:hvac_geom} \\
14303+
572 \> \ct{VENT2_ID for leakage cannot be AMBIENT if GEOM2 is set. Leak ID:...}\> Section~\ref{info:hvac_geom} \\
14304+
573 \> \ct{Ductnode:...,Ductnode ID:... defined with GEOM had no CFACE found.}\> Section~\ref{info:hvac_geom} \\
1429314305
\> \> \\
1429414306
601 \> \ct{OBST ... MULT_ID ... not found.} \> Section~\ref{info:MULT} \\
1429514307
602 \> \ct{OBST ... SHAPE requires RADIUS.} \> Section~\ref{info:multobst} \\
@@ -14304,7 +14316,7 @@ \chapter{Error Codes}
1430414316
611 \> \ct{OBST ... has a BULK_DENSITY but zero volume.} \> Section~\ref{info:BURN_AWAY} \\
1430514317
612 \> \ct{OBST ... must have a volume to be assigned HT3D.} \> Section~\ref{checkerboard} \\
1430614318
613 \> \ct{OBST ... and OBST ... cannot overlap in Mesh ...} \> Section~\ref{info:OVERLAY} \\
14307-
\> \> \\
14319+
614 \> \ct{OBST_ID ... cannot have a SURF with NODE_ID} \> Section~\ref{info:hvac_geom} \\ \> \> \\
1430814320
701 \> \ct{problem with GEOM, local SURF_ID index ... out of bounds.} \> Section~\ref{info:GEOM_Basics} \\
1430914321
702 \> \ct{problem with GEOM, SURF_IDS not defined properly.} \> Section~\ref{info:first_geom} \\
1431014322
703 \> \ct{missing SURF_ID in \&GEOM line ...} \> Section~\ref{subsec:readbin} \\
@@ -14362,6 +14374,7 @@ \chapter{Error Codes}
1436214374
820 \> \ct{VENT ... has no solid backing or an IOR is needed.} \> Section~\ref{info:VENT_Basics} \\
1436314375
821 \> \ct{VENT ... cannot have normal component of UVW equal to 0.} \> Section~\ref{info:HVAClouvers} \\
1436414376
822 \> \ct{VENT ... has the same ID as another VENT.} \> Section~\ref{info:HVAC} \\
14377+
823 \> \ct{VENT ... cannot have SURF_ID=HVAC and GEOM=T.} \> Section~\ref{info:hvac_geom} \\
1436514378
\> \> \\
1436614379
841 \> \ct{INIT ... has an unknown MULT_ID ...} \> Section~\ref{info:MULT} \\
1436714380
842 \> \ct{INIT ... cannot have both MASS and VOLUME_FRACTION.} \> Section~\ref{info:init_species} \\
@@ -14488,9 +14501,13 @@ \chapter{Error Codes}
1448814501
1043 \> \ct{PROP_ID ... not found.} \> Section~\ref{info:gasoutputquantities} \\
1448914502
1044 \> \ct{Cannot set EXTERNAL_FILE=T for a RAMP used for an output clock ...} \> Section~\ref{info:external_control} \\
1449014503
1045 \> \ct{QUANTITY ... requires a PART_ID for particles with mass.} \> Section~\ref{tab:particleoutputquantities} \\
14491-
\> \> \\
14504+
\\
1449214505
1051 \> \ct{RESTART initial time equals T_END.} \> Section~\ref{info:restart} \\
14493-
14506+
1052 \> \ct{On TIME, do not set both RAMP_TIME and RAMP_DT.} \> Section~\ref{info:simulation_time_ramp} \\
14507+
1053 \> \ct{One TIME, if one of DT_EXTERNAL_HEARTBEAT or} \> Section~\ref{info:external_control} \\
14508+
\> \ct{EXTERNAL_HEARTBEAT_FILENAME is set, both must be set.} \\
14509+
\\
14510+
1054 \> \ct{On MULT, must set DX if I_UPPER-I_LOWER>0, etc.} \> Section~\ref{info:MULT} \\
1449414511
\end{tabbing}
1449514512

1449614513

Source/hvac.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,8 @@ SUBROUTINE READ_HVAC
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(yyy): 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

Source/read.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,7 +1510,7 @@ SUBROUTINE READ_TIME(DT)
15101510

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

@@ -1519,7 +1519,7 @@ SUBROUTINE READ_TIME(DT)
15191519

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

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

@@ -3361,7 +3361,7 @@ SUBROUTINE READ_SPEC
33613361
ENDIF
33623362
ENDDO
33633363
IF (N1 > N_TRACKED_SPECIES) THEN
3364-
WRITE(MESSAGE,'(A,A,A)') 'ERROR(XXX): BACK tracked species ',TRIM(SPEC_ID(NS)),' not found.'
3364+
WRITE(MESSAGE,'(A,A,A)') 'ERROR(179): BACK tracked species ',TRIM(SPEC_ID(NS)),' not found.'
33653365
CALL SHUTDOWN(MESSAGE) ; RETURN
33663366
ENDIF
33673367
ENDIF
@@ -9217,7 +9217,7 @@ SUBROUTINE PROC_SURF_1
92179217
ENDIF
92189218
ENDDO
92199219
IF (SF%NODE_INDEX==0) THEN
9220-
WRITE(MESSAGE,'(A,A,A)') 'ERROR(xxx): SURF ',TRIM(SF%ID),' NODE_ID does not exist'
9220+
WRITE(MESSAGE,'(A,A,A)') 'ERROR(379): SURF ',TRIM(SF%ID),' NODE_ID does not exist'
92219221
CALL SHUTDOWN(MESSAGE) ; RETURN
92229222
ENDIF
92239223
ENDIF
@@ -11092,7 +11092,7 @@ SUBROUTINE READ_OBST(QUICK_READ)
1109211092

1109311093
DO NNN=-3,3
1109411094
IF (SURFACE(OB%SURF_INDEX(NNN))%NODE_ID/='null') THEN
11095-
WRITE(MESSAGE,'(A,A,A)') 'ERROR(xxx): OBST_ID ',TRIM(ID),' cannot have a SURF with NODE_ID.'
11095+
WRITE(MESSAGE,'(A,A,A)') 'ERROR(614): OBST_ID ',TRIM(ID),' cannot have a SURF with NODE_ID.'
1109611096
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
1109711097
ENDIF
1109811098
ENDDO
@@ -11967,7 +11967,7 @@ SUBROUTINE READ_VENT
1196711967
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
1196811968
ENDIF
1196911969
IF (SURF_ID=='HVAC' .AND. GEOM) THEN
11970-
WRITE(MESSAGE,'(3A)') 'ERROR(xxx): VENT ',TRIM(ID), ' cannot have SURF_ID=HVAC and GEOM=T.'
11970+
WRITE(MESSAGE,'(3A)') 'ERROR(823): VENT ',TRIM(ID), ' cannot have SURF_ID=HVAC and GEOM=T.'
1197111971
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.) ; RETURN
1197211972
ENDIF
1197311973

0 commit comments

Comments
 (0)