diff --git a/Manuals/FDS_User_Guide/FDS_User_Guide.tex b/Manuals/FDS_User_Guide/FDS_User_Guide.tex index 696ceedf898..cdc932542f7 100644 --- a/Manuals/FDS_User_Guide/FDS_User_Guide.tex +++ b/Manuals/FDS_User_Guide/FDS_User_Guide.tex @@ -11248,6 +11248,7 @@ \subsection{Dry Volume and Mass Fractions} DRY=T / \end{lstlisting} +\ct{DRY} can also be specified on an \ct{SLCF} line that reports the \ct{'MASS FRACTION'} or \ct{'VOLUME FRACTION'} of a species as well as an \ct{HVAC} \ct{DUCT QUANTITY LIST} or \ct{NODE QUANTITY LIST}. For \ct{HVAC} line outputs, \ct{DRY} is an array corresponding to each entry on the \ct{QUANTITY LIST}. \subsection{Aerosol and Soot Concentration} \label{info:soot} @@ -12547,6 +12548,7 @@ \section{\texorpdfstring{{\tt HVAC}}{HVAC} (HVAC System Definition)} \ct{DEVC_ID} & Character & Sections ~\ref{info:HVACduct}, \ref{info:HVACfan}, \ref{info:HVACfilter} & & \\ \hline \ct{DIAMETER} & Real & Section~\ref{info:HVACduct} & m & \\ \hline \ct{DISCHARGE_COEFFICIENT} & Real & Section~\ref{info:Leaks} & & 1. \\ \hline +\ct{DRY} & Log. Array & Section~\ref{info:dry} & & \\ \hline \ct{DUCT_ID} & Char.~Array & Section~\ref{info:HVACnode} & & \\ \hline \ct{EFFICIENCY} & Real Array & Sections~\ref{info:HVACfilter}, \ref{info:HVACaircoil} & & 1.0 \\ \hline \ct{FAN_ID} & Character & Section~\ref{info:HVACduct} & & \\ \hline @@ -13421,6 +13423,7 @@ \section{\texorpdfstring{{\tt REAC}}{REAC} (Reaction Parameters)} \ct{CHECK_ATOM_BALANCE} & Logical & Section~\ref{info:REAC_Diagnostics} & & \ct{T} \\ \hline \ct{CO_YIELD} & Real & Section~\ref{info:simple_chemistry} & kg/kg & 0 \\ \hline \ct{CRITICAL_FLAME_TEMPERATURE} & Real & Section~\ref{info:extinction} & $^\circ$C & 1427 \\ \hline +\ct{DRY} & Logical ray & Section~\ref{info:dry} & & \\ \hline \ct{E} & Real & Section~\ref{info:finite} & J/mol & \\ \hline \ct{E_LOW_PR} & Real & Section~\ref{info:falloff_reactions} & J/mol & \\ \hline \ct{EPUMO2} & Real & Section~\ref{info:heat_of_combustion} & kJ/kg & 13100 \\ \hline @@ -13480,6 +13483,7 @@ \section{\texorpdfstring{{\tt SLCF}}{SLCF} (Slice File Parameters)} \ct{AGL_SLICE} & Real & Section~\ref{info:complex_terrain} & m & \\ \hline \ct{CELL_CENTERED} & Logical & Section~\ref{info:SLCF} & & \ct{F} \\ \hline \ct{DB} & Character & Section~\ref{info:SLCF} & & \\ \hline +\ct{DRY} & Logical & Section~\ref{info:dry} & & \\ \hline \ct{ID} & Character & Section~\ref{info:SLCF} & & \\ \hline \ct{MAXIMUM_VALUE} & Real & Reference~\cite{Smokeview_Users_Guide} & & \\ \hline \ct{MESH_NUMBER} & Integer & Section~\ref{info:SLCF} & & \\ \hline diff --git a/Source/dump.f90 b/Source/dump.f90 index 32862c809fb..45a863a17a4 100644 --- a/Source/dump.f90 +++ b/Source/dump.f90 @@ -5970,8 +5970,6 @@ SUBROUTINE DUMP_SLCF(T,DT,NM,IFRMT) ! Return if there are no slices to process and this is not a Plot3D dump -DRY=.FALSE. - SELECT CASE(IFRMT) CASE(0) ; PLOT3D=.FALSE. ; SLCF3D=.FALSE. CASE(1) ; PLOT3D=.TRUE. ; SLCF3D=.FALSE. @@ -6087,6 +6085,7 @@ SUBROUTINE DUMP_SLCF(T,DT,NM,IFRMT) AGL_TERRAIN_SLICE = .FALSE. CC_CELL_CENTERED = .FALSE. CC_INTERP2FACES = .FALSE. + DRY = .FALSE. ELSE SL => SLICE(IQ) IND = SL%INDEX @@ -6104,6 +6103,7 @@ SUBROUTINE DUMP_SLCF(T,DT,NM,IFRMT) J2 = SL%J2 K1 = SL%K1 K2 = SL%K2 + DRY = SL%DRY DEBUG = 0 IF(SL%DEBUG)DEBUG = 1 AGL_TERRAIN_SLICE = SL%TERRAIN_SLICE @@ -6811,7 +6811,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM) CASE(300:350) OUTPUT_INDEX_SELECT ! HVAC output - SDV%VALUE_1 = HVAC_OUTPUT(DV%QUANTITY_INDEX(1),DV%Y_INDEX,DV%Z_INDEX,DV%DUCT_INDEX,DV%NODE_INDEX,DV%DUCT_CELL_INDEX) + SDV%VALUE_1 = HVAC_OUTPUT(DV%QUANTITY_INDEX(1),DV%Y_INDEX,DV%Z_INDEX,DV%DUCT_INDEX,DV%NODE_INDEX,DV%DUCT_CELL_INDEX,DV%DRY) CASE(400:454) OUTPUT_INDEX_SELECT ! Particle-specific output @@ -9544,7 +9544,7 @@ REAL(EB) FUNCTION SOLID_PHASE_OUTPUT(INDX,Y_INDEX,Z_INDEX,PART_INDEX,OPT_WALL_IN END FUNCTION SOLID_PHASE_OUTPUT -REAL(EB) FUNCTION HVAC_OUTPUT(IND,Y_INDEX,Z_INDEX,DUCT_INDEX,NODE_INDEX,DUCT_CELL_INDEX) +REAL(EB) FUNCTION HVAC_OUTPUT(IND,Y_INDEX,Z_INDEX,DUCT_INDEX,NODE_INDEX,DUCT_CELL_INDEX,DRY) ! Compute HVAC Output Quantities @@ -9552,6 +9552,7 @@ REAL(EB) FUNCTION HVAC_OUTPUT(IND,Y_INDEX,Z_INDEX,DUCT_INDEX,NODE_INDEX,DUCT_CEL USE PHYSICAL_FUNCTIONS, ONLY: GET_MASS_FRACTION,GET_MOLECULAR_WEIGHT,GET_ENTHALPY,GET_SENSIBLE_ENTHALPY INTEGER, INTENT(IN) :: Y_INDEX,Z_INDEX,IND,DUCT_INDEX,NODE_INDEX(2),DUCT_CELL_INDEX REAL(EB) :: Y_H2O,ZZ_GET(1:N_TRACKED_SPECIES),MW,Y_SPECIES,RCON,H_DUCT,H_TMPA +LOGICAL :: DRY Y_H2O = 0._EB Y_SPECIES=1.0_EB @@ -10170,7 +10171,7 @@ SUBROUTINE DUMP_HVAC(T) NODE_INDEX(1)=N DO NN = 1, N_NODE_QUANTITY HQT=>NODE_QUANTITY_ARRAY(NN) - OUTVAL_N(NN) = REAL(HVAC_OUTPUT(HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,-1,NODE_INDEX,-1),FB) + OUTVAL_N(NN) = REAL(HVAC_OUTPUT(HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,-1,NODE_INDEX,-1,HQT%DRY),FB) ENDDO WRITE(LU_HVAC) OUTVAL_N ENDDO @@ -10182,14 +10183,14 @@ SUBROUTINE DUMP_HVAC(T) DO NNN=1,DUCT(N)%N_CELLS DO NN = 1, N_DUCT_QUANTITY HQT=>DUCT_QUANTITY_ARRAY(NN) - OUTVAL_D(NN) = REAL(HVAC_OUTPUT(HVAC_SMV_EQUIVALENCE(HQT%OUTPUT_INDEX),HQT%Y_INDEX,HQT%Z_INDEX,N,NODE_INDEX,NNN),FB) + OUTVAL_D(NN) = REAL(HVAC_OUTPUT(HVAC_SMV_EQUIVALENCE(HQT%OUTPUT_INDEX),HQT%Y_INDEX,HQT%Z_INDEX,N,NODE_INDEX,NNN,HQT%DRY),FB) ENDDO WRITE(LU_HVAC) OUTVAL_D ENDDO ELSE DO NN = 1, N_DUCT_QUANTITY HQT=>DUCT_QUANTITY_ARRAY(NN) - OUTVAL_D(NN) = REAL(HVAC_OUTPUT(HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,N,NODE_INDEX,-1),FB) + OUTVAL_D(NN) = REAL(HVAC_OUTPUT(HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,N,NODE_INDEX,-1,HQT%DRY),FB) ENDDO WRITE(LU_HVAC) OUTVAL_D ENDIF diff --git a/Source/hvac.f90 b/Source/hvac.f90 index 3b1104e484c..6ac24415b7d 100644 --- a/Source/hvac.f90 +++ b/Source/hvac.f90 @@ -124,6 +124,7 @@ SUBROUTINE READ_HVAC LOGICAL :: INITIALIZED_HVAC_MASS_TRANSPORT !< Flag indicating DUCTs with N_CELLS>1 have been initiazed. LOGICAL :: DUCT_QUANTITY_DEFINED=.FALSE. !< Flag indicating a DUCT_QUANTITY list has alreayd been defined LOGICAL :: NODE_QUANTITY_DEFINED=.FALSE. !< Flag indicating a NODE_QUANTITY list has alreayd been defined +LOGICAL :: DRY(20) !< Flag indicating species output is DRY CHARACTER(LABEL_LENGTH) :: AIRCOIL_ID !< ID of an AIRCOIL located in a DUCT. CHARACTER(LABEL_LENGTH) :: CTRL_ID !< Name of a control function controlling a FAN, damper, or AIRCOIL. CHARACTER(LABEL_LENGTH) :: DEVC_ID !< Name of a device controlling a FAN, damper, or AIRCOIL. @@ -145,7 +146,7 @@ SUBROUTINE READ_HVAC TYPE(DUCT_TYPE), POINTER :: DU !< Pointer to a DUCT TYPE(HVAC_QUANTITY_TYPE), POINTER :: HQT !< Pointer to a DUCT_ or NODE_QUANTITY_ARRAY NAMELIST /HVAC/ AIRCOIL_ID,AMBIENT,AREA,CLEAN_LOSS,COOLANT_SPECIFIC_HEAT,COOLANT_MASS_FLOW,COOLANT_TEMPERATURE,CTRL_ID,& - DAMPER,DEBUG,DEVC_ID,DIAMETER,DISCHARGE_COEFFICIENT,DUCT_ID,& + DAMPER,DEBUG,DEVC_ID,DIAMETER,DISCHARGE_COEFFICIENT,DRY,DUCT_ID,& EFFICIENCY,FAN_ID,FILTER_ID,FIXED_Q,GEOM,GEOM2,ID,LEAK_ENTHALPY,LEAK_PRESSURE_EXPONENT,LEAK_REFERENCE_PRESSURE,& LENGTH,LOADING,LOADING_MULTIPLIER,LOSS,& MASS_FLOW,MAX_FLOW,MAX_PRESSURE,N_CELLS,NETWORK_ID,NODE_ID,PERIMETER,QUANTITY,QUANTITY_SPEC_ID,& @@ -719,6 +720,7 @@ SUBROUTINE READ_HVAC N_DUCT_QUANTITY = N_DUCT_QUANTITY + 1 ENDDO ALLOCATE (DUCT_QUANTITY_ARRAY(N_DUCT_QUANTITY)) + DUCT_QUANTITY_ARRAY(1:N_DUCT_QUANTITY)%DRY = DRY(1:N_DUCT_QUANTITY) DO N=1, N_DUCT_QUANTITY HQT => DUCT_QUANTITY_ARRAY(N) CALL GET_QUANTITY_INDEX(HQT%SMOKEVIEW_LABEL,HQT%SMOKEVIEW_BAR_LABEL,HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,& @@ -736,6 +738,7 @@ SUBROUTINE READ_HVAC N_NODE_QUANTITY = N_NODE_QUANTITY + 1 ENDDO ALLOCATE (NODE_QUANTITY_ARRAY(N_NODE_QUANTITY)) + NODE_QUANTITY_ARRAY(1:N_NODE_QUANTITY)%DRY = DRY(1:N_NODE_QUANTITY) DO N=1, N_NODE_QUANTITY HQT => NODE_QUANTITY_ARRAY(N) CALL GET_QUANTITY_INDEX(HQT%SMOKEVIEW_LABEL,HQT%SMOKEVIEW_BAR_LABEL,HQT%OUTPUT_INDEX,HQT%Y_INDEX,HQT%Z_INDEX,& @@ -774,6 +777,7 @@ SUBROUTINE SET_HVAC_DEFAULTS DAMPER = .FALSE. DEVC_ID = 'null' DIAMETER = -1._EB +DRY = .FALSE. DUCT_ID = 'null' FAN_ID = 'null' FIXED_Q = -1.E10_EB diff --git a/Source/read.f90 b/Source/read.f90 index a7b0894bba5..1904fd0f6fe 100644 --- a/Source/read.f90 +++ b/Source/read.f90 @@ -15716,12 +15716,12 @@ SUBROUTINE READ_SLCF REAL(EB) :: MAXIMUM_VALUE,MINIMUM_VALUE REAL(EB) :: AGL_SLICE INTEGER :: N,NN,NM,MESH_NUMBER,N_SLCF_O,NITER,ITER,VELO_INDEX,GEOM_INDEX,IOR -LOGICAL :: VECTOR,CELL_CENTERED,DEBUG,CULL_SLICE +LOGICAL :: VECTOR,CELL_CENTERED,DEBUG,CULL_SLICE,DRY CHARACTER(LABEL_LENGTH) :: QUANTITY,SPEC_ID,PART_ID,QUANTITY2,PROP_ID,REAC_ID,SLICETYPE REAL(EB), PARAMETER :: TOL=1.E-10_EB REAL(FB) :: RLE_MIN, RLE_MAX TYPE (SLICE_TYPE), POINTER :: SL -NAMELIST /SLCF/ AGL_SLICE,CELL_CENTERED,DB,FYI,DEBUG,ID,MAXIMUM_VALUE,MESH_NUMBER,& +NAMELIST /SLCF/ AGL_SLICE,CELL_CENTERED,DB,DRY,FYI,DEBUG,ID,MAXIMUM_VALUE,MESH_NUMBER,& MINIMUM_VALUE,PART_ID,PBX,PBY,PBZ,PROP_ID,QUANTITY,QUANTITY2,REAC_ID,RLE_MIN,RLE_MAX,SLICETYPE,& SPEC_ID,VECTOR,VELO_INDEX,XB @@ -15785,6 +15785,7 @@ SUBROUTINE READ_SLCF VELO_INDEX = 0 RLE_MIN = 1.0_FB RLE_MAX = 0.0_FB + DRY = .FALSE. CALL CHECKREAD('SLCF',LU_INPUT,IOS) ; IF (STOP_STATUS==SETUP_STOP) RETURN IF (IOS==1) EXIT SLCF_LOOP @@ -15894,6 +15895,7 @@ SUBROUTINE READ_SLCF SL=>SLICE(N) SL%SLCF_INDEX=NN SL%ID = ID + SL%DRY = DRY SL%IOR = IOR SL%SLICETYPE = TRIM(SLICETYPE) SL%GEOM_INDEX = GEOM_INDEX diff --git a/Source/type.f90 b/Source/type.f90 index bbd8fb4111d..a13c1211546 100644 --- a/Source/type.f90 +++ b/Source/type.f90 @@ -1564,7 +1564,7 @@ MODULE TYPES REAL(FB), DIMENSION(2) :: MINMAX REAL(FB) :: RLE_MIN, RLE_MAX REAL(EB):: AGL_SLICE - LOGICAL :: TERRAIN_SLICE=.FALSE.,CELL_CENTERED=.FALSE.,RLE=.FALSE.,DEBUG=.FALSE.,THREE_D=.FALSE. + LOGICAL :: TERRAIN_SLICE=.FALSE.,CELL_CENTERED=.FALSE.,RLE=.FALSE.,DEBUG=.FALSE.,THREE_D=.FALSE.,DRY=.FALSE. CHARACTER(LABEL_LENGTH) :: SLICETYPE='STRUCTURED',SMOKEVIEW_LABEL CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_BAR_LABEL,ID='null',MATL_ID='null' END TYPE SLICE_TYPE @@ -2130,6 +2130,7 @@ MODULE TYPES CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_LABEL !< Smokeview label for QUANTITY CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_BAR_LABEL !< Smokeview colorbar label for QUANTITY CHARACTER(LABEL_LENGTH) :: UNITS !< Units for QUANTITY + LOGICAL :: DRY !< Remove water vapor before computing a mass or volume fraction END TYPE HVAC_QUANTITY_TYPE