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 | :: | EvapCoolNum |
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 CalcResearchSpecialPartLoad(EvapCoolNum)
! SUBROUTINE INFORMATION:
! AUTHOR B. Griffith
! DATE WRITTEN July 2003
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Subroutine models a "special" cooler.
! METHODOLOGY EMPLOYED:
! Needs description, as appropriate.
! REFERENCES:
! copied CalcWetIndirectEvapCooler as template for new cooler
! USE STATEMENTS:
USE DataHVACGlobals, only: TempControlTol
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
Integer :: EvapCoolNum
! SUBROUTINE PARAMETER DEFINITIONS:
! na
REAL(r64), PARAMETER :: MinAirMassFlow = 0.001d0
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
CHARACTER(len=MaxNameLength) :: CompName
REAL(r64) :: FullOutput
REAL(r64) :: ReqOutput
Integer :: InletNode
Integer :: OutletNode
Integer :: ControlNode
REAL(r64) :: PartLoadFrac
REAL(r64) :: DesOutTemp
! Set local variables
! Retrieve the load on the controlled zone
OutletNode = EvapCond(EvapCoolNum)%OutletNode
InletNode = EvapCond(EvapCoolNum)%InletNode
ControlNode = EvapCond(EvapCoolNum)%EvapControlNodeNum
DesOutTemp = EvapCond(EvapCoolNum)%DesiredOutletTemp
PartLoadFrac = 0.0d0
CompName=EvapCond(EvapCoolNum)%EvapCoolerName
! If Evap Cooler runs with a cooling load then set PartLoadFrac on Cooling System and the Mass Flow
If((GetCurrentScheduleValue(EvapCond(EvapCoolNum)%SchedPtr) .gt. 0.0d0) .and. &
(Node(InletNode)%MassFlowRate .gt. MinAirMassFlow) .and. &
(Node(InletNode)%Temp > Node(ControlNode)%TempSetPoint) .and. &
(ABS(Node(InletNode)%Temp - DesOutTemp) .gt. TempControlTol) ) Then
! Get full load result, depending on model
EvapCond(EvapCoolNum)%PartLoadFract = 1.0d0
SELECT CASE (EvapCond(EvapCoolNum)%EvapCoolerType)
CASE (iEvapCoolerInDirectRDDSpecial)
CALL CalcIndirectResearchSpecialEvapCooler(EvapCoolNum)
CALL UpdateEvapCooler(EvapCoolNum)
FullOutput = Node(InletNode)%MassFlowRate * &
(PsyHFnTdbW(Node(OutletNode)%Temp,Node(InletNode)%HumRat) &
- PsyHFnTdbW(Node(InletNode)%Temp,Node(InletNode)%HumRat))
ReqOutput = Node(InletNode)%MassFlowRate * &
(PsyHFnTdbW(EvapCond(EvapCoolNum)%DesiredOutletTemp,Node(InletNode)%HumRat) - &
PsyHFnTdbW(Node(InletNode)%Temp,Node(InletNode)%HumRat))
! now reinit after test call
CALL InitEvapCooler(EvapCoolNum)
CASE (iEvapCoolerDirectResearchSpecial)
CALL CalcDirectResearchSpecialEvapCooler(EvapCoolNum)
CALL UpdateEvapCooler(EvapCoolNum)
FullOutput = Node(OutletNode)%Temp - Node(InletNode)%Temp
ReqOutput = EvapCond(EvapCoolNum)%DesiredOutletTemp - Node(InletNode)%Temp
! now reinit after test call
CALL InitEvapCooler(EvapCoolNum)
END SELECT
! Since we are cooling, we expect FullOutput to be < 0 and FullOutput < NoCoolOutput
! Check that this is the case; if not set PartLoadFrac = 0.0 (off) and return
! Calculate the part load fraction
If (FullOutput .EQ. 0.0D0) then
FullOutput = 0.00001D0
ENDIF
PartLoadFrac = ReqOutput/FullOutput
IF(PartLoadFrac.GT.1.0D0) THEN
PartLoadFrac = 1.0D0
ELSEIF(PartLoadFrac < 0.0D0) THEN
PartLoadFrac = 0.0D0
END IF
ELSE ! No cooling
PartLoadFrac = 0.0D0
ENDIF ! End of the cooler running If block
!Set the final results
EvapCond(EvapCoolNum)%PartLoadFract = PartLoadFrac
RETURN
END SUBROUTINE CalcResearchSpecialPartLoad