Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | BaseboardNum |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE SizeSteamBaseboard(BaseboardNum)
! SUBROUTINE INFORMATION:
! AUTHOR Fred Buhl
! DATE WRITTEN February 2002
! MODIFIED August 2013 Daeho Kang, add component sizing table entries
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine is for sizing steam baseboard components
! METHODOLOGY EMPLOYED:
! Obtains flow rates from the zone sizing arrays and plant sizing data.
! REFERENCES:
! na
! USE STATEMENTS:
USE DataSizing
USE PlantUtilities, ONLY: RegisterPlantCompDesignFlow
USE DataEnvironment, ONLY: StdBaroPress
USE FluidProperties, ONLY: GetSatEnthalpyRefrig,GetSatDensityRefrig, GetSatSpecificHeatRefrig
! USE BranchInputManager, ONLY: MyPlantSizingIndex
USE ReportSizingManager, ONLY: ReportSizingOutput
USE General, ONLY: RoundSigDigits
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: BaseboardNum
! SUBROUTINE PARAMETER DEFINITIONS:
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: PltSizSteamNum ! Index of plant sizing object for 1st steam loop
REAL(r64) :: DesCoilLoad ! Design heating load in the zone
REAL(r64) :: SteamInletTemp ! Inlet steam temperature in C
REAL(r64) :: EnthSteamInDry ! Enthalpy of dry steam
REAL(r64) :: EnthSteamOutWet ! Enthalpy of wet steam
REAL(r64) :: LatentHeatSteam ! latent heat of steam
REAL(r64) :: SteamDensity ! Density of steam
REAL(r64) :: Cp ! local fluid specific heat
REAL(r64) :: tmpSteamVolFlowRateMax ! local temporary design steam flow
LOGICAL :: ErrorsFound ! If errors detected in input
LOGICAL :: IsAutosize ! Indicator to autosizing steam flow
REAL(r64) :: SteamVolFlowRateMaxDes ! Design maximum steam volume flow for reporting
REAL(r64) :: SteamVolFlowRateMaxUser ! User hard-sized maximum steam volume flow for reporting
PltSizSteamNum = 0
DesCoilLoad = 0.0d0
ErrorsFound = .FALSE.
IsAutosize = .FALSE.
SteamVolFlowRateMaxDes = 0.0d0
SteamVolFlowRateMaxUser = 0.0d0
! Find the appropriate steam plant sizing object
PltSizSteamNum = PlantLoop(SteamBaseboard(BaseboardNum)%LoopNum)%PlantSizNum
! PltSizSteamNum = MyPlantSizingIndex('Coil:Heating:Steam', SteamBaseboard(BaseboardNum)%EquipID, &
! SteamBaseboard(BaseboardNum)%SteamInletNode, &
! SteamBaseboard(BaseboardNum)%SteamOutletNode, ErrorsFound)
IF (PltSizSteamNum > 0) THEN
IF (CurZoneEqNum > 0) THEN
IF (SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (.NOT. IsAutosize .AND. .NOT. ZoneSizingRunDone) THEN
IF (SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax > 0.0d0) THEN
CALL ReportSizingOutput(cCMO_BBRadiator_Steam,SteamBaseboard(BaseboardNum)%EquipID,&
'User-Specified Maximum Water Flow Rate [m3/s]', &
SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax)
END IF
ELSE
CALL CheckZoneSizing(cCMO_BBRadiator_Steam,SteamBaseboard(BaseboardNum)%EquipID)
DesCoilLoad = CalcFinalZoneSizing(CurZoneEqNum)%DesHeatLoad * CalcFinalZoneSizing(CurZoneEqNum)%HeatSizingFactor
IF (DesCoilLoad >= SmallLoad) THEN
SteamInletTemp = 100.0d0
EnthSteamInDry = GetSatEnthalpyRefrig('STEAM',SteamInletTemp,1.0d0, &
SteamBaseboard(BaseboardNum)%FluidIndex,'SizeSteamBaseboard')
EnthSteamOutWet = GetSatEnthalpyRefrig('STEAM',SteamInletTemp,0.0d0, &
SteamBaseboard(BaseboardNum)%FluidIndex,'SizeSteamBaseboard')
LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet
SteamDensity = GetSatDensityRefrig('STEAM',SteamInletTemp,1.0d0, &
SteamBaseboard(BaseboardNum)%FluidIndex,'SizeSteamBaseboard')
Cp = GetSatSpecificHeatRefrig('STEAM',SteamInletTemp,0.0d0,SteamBaseboard(BaseboardNum)%FluidIndex, &
'SizeSteamBaseboard')
SteamVolFlowRateMaxDes = DesCoilLoad / &
(SteamDensity*(LatentHeatSteam + SteamBaseboard(BaseboardNum)%DegOfSubCooling * Cp))
ELSE
SteamVolFlowRateMaxDes = 0.0d0
END IF
IF (IsAutosize) THEN
SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax = SteamVolFlowRateMaxDes
CALL ReportSizingOutput(cCMO_BBRadiator_Steam,SteamBaseboard(BaseboardNum)%EquipID,&
'Design Size Maximum Steam Flow Rate [m3/s]',SteamVolFlowRateMaxDes)
ELSE ! Hard size with sizing data
IF (SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax > 0.0d0 .AND. SteamVolFlowRateMaxDes > 0.0d0) THEN
SteamVolFlowRateMaxUser = SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax
CALL ReportSizingOutput(cCMO_BBRadiator_Steam,SteamBaseboard(BaseboardNum)%EquipID,&
'Design Size Maximum Steam Flow Rate [m3/s]',SteamVolFlowRateMaxDes, &
'User-Speicified Maximum Steam Flow Rate [m3/s]',SteamVolFlowRateMaxUser)
IF (DisplayExtraWarnings) THEN
! Report difference between design size and user-specified values
IF ((ABS(SteamVolFlowRateMaxDes - SteamVolFlowRateMaxUser)/SteamVolFlowRateMaxUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeSteamBaseboard: Potential issue with equipment sizing for ' &
// 'ZoneHVAC:Baseboard:RadiantConvective:Steam="'// &
TRIM(SteamBaseboard(BaseboardNum)%EquipID)//'".')
CALL ShowContinueError('User-Specified Maximum Steam Flow Rate of '// &
TRIM(RoundSigDigits(SteamVolFlowRateMaxUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Maximum Steam Flow Rate of ' // &
TRIM(RoundSigDigits(SteamVolFlowRateMaxDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END IF
ELSE
IF (IsAutosize) THEN
! if there is no heating Sizing:Plant object and autosizng was requested, issue an error message
! first error will be issued by MyPlantSizingIndex
CALL ShowSevereError('Autosizing of steam baseboard requires a heating loop Sizing:Plant object')
CALL ShowContinueError('Occurs in Baseboard Heater='//TRIM(SteamBaseboard(BaseboardNum)%EquipID))
ErrorsFound = .TRUE.
END IF
END IF
CALL RegisterPlantCompDesignFlow(SteamBaseboard(BaseboardNum)%SteamInletNode,SteamBaseboard(BaseboardNum)%SteamVolFlowRateMax)
IF (ErrorsFound) THEN
CALL ShowFatalError('Preceding sizing errors cause program termination')
END IF
RETURN
END SUBROUTINE SizeSteamBaseboard