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.
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 GetFluidHeatExchangerInput
! SUBROUTINE INFORMATION:
! AUTHOR B. Griffith
! DATE WRITTEN November 2012
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! get input for heat exchanger model
! METHODOLOGY EMPLOYED:
! <description>
! REFERENCES:
! na
! USE STATEMENTS:
USE InputProcessor, ONLY: GetNumObjectsFound, GetObjectDefMaxArgs, GetObjectItem, &
FindItemInList, VerifyName, SameString, FindItem
USE General, ONLY: RoundSigDigits
USE NodeInputManager, ONLY: GetOnlySingleNode
USE BranchNodeConnections, ONLY: TestCompSet
USE DataGlobals, ONLY: ScheduleAlwaysOn, AnyEnergyManagementSystemInModel
USE ScheduleManager, ONLY: GetScheduleIndex
USE EMSManager , ONLY: CheckIfNodeSetpointManagedByEMS, iTemperatureSetpoint, &
iTemperatureMinSetpoint, iTemperatureMaxSetpoint
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER(len=*), PARAMETER :: RoutineName='GetFluidHeatExchangerInput: '
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
LOGICAL :: ErrorsFound = .FALSE.
INTEGER :: NumAlphas ! Number of elements in the alpha array
INTEGER :: NumNums ! Number of elements in the numeric array
INTEGER :: IOStat ! IO Status when calling get input subroutine
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
INTEGER :: MaxNumAlphas = 0 !argument for call to GetObjectDefMaxArgs
INTEGER :: MaxNumNumbers = 0 !argument for call to GetObjectDefMaxArgs
INTEGER :: TotalArgs = 0 !argument for call to GetObjectDefMaxArgs
CHARACTER(len=MaxNameLength+40),ALLOCATABLE, DIMENSION(:) :: cAlphaFieldNames
CHARACTER(len=MaxNameLength+40),ALLOCATABLE, DIMENSION(:) :: cNumericFieldNames
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericFieldBlanks
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaFieldBlanks
CHARACTER(len=MaxNameLength),ALLOCATABLE, DIMENSION(:) :: cAlphaArgs
REAL(r64),ALLOCATABLE, DIMENSION(:) :: rNumericArgs
CHARACTER(len=MaxNameLength) :: cCurrentModuleObject
INTEGER :: CompLoop
LOGICAL :: NodeEMSSetpointMissing
cCurrentModuleObject = 'HeatExchanger:FluidToFluid'
NumberOfPlantFluidHXs = GetNumObjectsFound(cCurrentModuleObject)
IF (NumberOfPlantFluidHXs == 0) RETURN
CALL GetObjectDefMaxArgs(cCurrentModuleObject,TotalArgs,NumAlphas,NumNums)
MaxNumNumbers=NumNums
MaxNumAlphas=NumAlphas
ALLOCATE(cAlphaFieldNames(MaxNumAlphas))
cAlphaFieldNames=' '
ALLOCATE(cAlphaArgs(MaxNumAlphas))
cAlphaArgs=' '
ALLOCATE(lAlphaFieldBlanks(MaxNumAlphas))
lAlphaFieldBlanks=.false.
ALLOCATE(cNumericFieldNames(MaxNumNumbers))
cNumericFieldNames=' '
ALLOCATE(rNumericArgs(MaxNumNumbers))
rNumericArgs=0.0d0
ALLOCATE(lNumericFieldBlanks(MaxNumNumbers))
lNumericFieldBlanks=.false.
IF (NumberOfPlantFluidHXs > 0) THEN
ALLOCATE(FluidHX(NumberOfPlantFluidHXs))
ALLOCATE(CheckFluidHXs(NumberOfPlantFluidHXs))
CheckFluidHXs = .TRUE.
DO CompLoop =1, NumberOfPlantFluidHXs
CALL GetObjectItem(cCurrentModuleObject, CompLoop, cAlphaArgs, NumAlphas, rNumericArgs, &
NumNums, IOSTAT, AlphaBlank=lAlphaFieldBlanks, NumBlank=lNumericFieldBlanks, &
AlphaFieldnames=cAlphaFieldNames,NumericFieldNames=cNumericFieldNames)
IsNotOK = .FALSE.
IsBlank = .FALSE.
CALL VerifyName(cAlphaArgs(1), FluidHX%Name, CompLoop - 1, IsNotOK, IsBlank, TRIM(cCurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound = .TRUE.
IF (IsBlank) cAlphaArgs(1) = 'xxxxx'
END IF
FluidHX(CompLoop)%Name = cAlphaArgs(1)
IF (lAlphaFieldBlanks(2)) THEN
FluidHX(CompLoop)%AvailSchedNum = ScheduleAlwaysOn
ELSE
FluidHX(CompLoop)%AvailSchedNum = GetScheduleIndex(cAlphaArgs(2))
IF (FluidHX(CompLoop)%AvailSchedNum <= 0) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Invalid '//TRIM(cAlphaFieldNames(2))//' = '//TRIM(cAlphaArgs(2)) )
CALL ShowContinueError('Schedule was not found ')
ErrorsFound = .TRUE.
ENDIF
ENDIF
FluidHX(CompLoop)%DemandSideLoop%InletNodeNum = &
GetOnlySingleNode(cAlphaArgs(3),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Inlet, 1, ObjectIsNotParent)
FluidHX(CompLoop)%DemandSideLoop%OutletNodeNum = &
GetOnlySingleNode(cAlphaArgs(4),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Outlet, 1, ObjectIsNotParent)
CALL TestCompSet(TRIM(cCurrentModuleObject),cAlphaArgs(1),cAlphaArgs(3),cAlphaArgs(4), &
'Loop Demand Side Plant Nodes')
FluidHX(CompLoop)%DemandSideLoop%DesignVolumeFlowRate = rNumericArgs(1)
FluidHX(CompLoop)%SupplySideLoop%InletNodeNum = &
GetOnlySingleNode(cAlphaArgs(5),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Inlet, 2, ObjectIsNotParent)
FluidHX(CompLoop)%SupplySideLoop%OutletNodeNum = &
GetOnlySingleNode(cAlphaArgs(6),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Outlet, 2, ObjectIsNotParent)
CALL TestCompSet(TRIM(cCurrentModuleObject),cAlphaArgs(1),cAlphaArgs(5),cAlphaArgs(6), &
'Loop Supply Side Plant Nodes')
FluidHX(CompLoop)%SupplySideLoop%DesignVolumeFlowRate = rNumericArgs(2)
IF (SameString(cAlphaArgs(7), 'CrossFlowBothUnMixed')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = CrossFlowBothUnMixed
ELSEIF (SameString(cAlphaArgs(7), 'CrossFlowBothMixed')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = CrossFlowBothMixed
ELSEIF (SameString(cAlphaArgs(7), 'CrossFlowSupplyMixedDemandUnMixed')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = CrossFlowSupplyLoopMixedDemandLoopUnMixed
ELSEIF (SameString(cAlphaArgs(7), 'CrossFlowSupplyUnMixedDemandMixed')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = CrossFlowSupplyLoopUnMixedDemandLoopMixed
ELSEIF (SameString(cAlphaArgs(7), 'CounterFlow')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = CounterFlow
ELSEIF (SameString(cAlphaArgs(7), 'ParallelFlow')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = ParallelFlow
ELSEIF (SameString(cAlphaArgs(7),'Ideal')) THEN
FluidHX(CompLoop)%HeatExchangeModelType = Ideal
ELSE
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Invalid '//TRIM(cAlphaFieldNames(7))//' = '//TRIM(cAlphaArgs(7)) )
ErrorsFound = .TRUE.
ENDIF
IF (.NOT. lNumericFieldBlanks(3)) THEN
FluidHX(CompLoop)%UA = rNumericArgs(3)
ELSE
IF (FluidHX(CompLoop)%HeatExchangeModelType /= Ideal) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Missing entry for '//TRIM(cNumericFieldNames(3)) )
ErrorsFound = .TRUE.
ENDIF
ENDIF
IF ( SameString(cAlphaArgs(8) , 'UncontrolledOn')) THEN
FluidHX(CompLoop)%ControlMode = UncontrolledOn
ELSEIF (SameString(cAlphaArgs(8) , 'OperationSchemeModulated')) THEN
FluidHX(CompLoop)%ControlMode = OperationSchemeModulated
ELSEIF (SameString(cAlphaArgs(8) , 'OperationSchemeOnOff')) THEN
FluidHX(CompLoop)%ControlMode = OperationSchemeOnOff
ELSEIF (SameString(cAlphaArgs(8) , 'HeatingSetpointModulated')) THEN
FluidHX(CompLoop)%ControlMode = HeatingSetpointModulated
ELSEIF (SameString(cAlphaArgs(8) , 'HeatingSetpointOnOff')) THEN
FluidHX(CompLoop)%ControlMode = HeatingSetpointOnOff
ELSEIF (SameString(cAlphaArgs(8) , 'CoolingSetpointModulated')) THEN
FluidHX(CompLoop)%ControlMode = CoolingSetpointModulated
ELSEIF (SameString(cAlphaArgs(8) , 'CoolingSetpointOnOff')) THEN
FluidHX(CompLoop)%ControlMode = CoolingSetpointOnOff
ELSEIF (SameString(cAlphaArgs(8) , 'DualDeadbandSetpointModulated')) THEN
FluidHX(CompLoop)%ControlMode = DualDeadbandSetpointModulated
ELSEIF (SameString(cAlphaArgs(8) , 'DualDeadbandSetpointOnOff')) THEN
FluidHX(CompLoop)%ControlMode = DualDeadbandSetpointOnOff
ELSEIF (SameString(cAlphaArgs(8) , 'CoolingDifferentialOnOff')) THEN
FluidHX(CompLoop)%ControlMode = CoolingDifferentialOnOff
ELSEIF (SameString(cAlphaArgs(8) , 'CoolingSetpointOnOffWithComponentOverride')) THEN
FluidHX(CompLoop)%ControlMode = CoolingSetpointOnOffWithComponentOverride
ELSEIF (SameString(cAlphaArgs(8) , 'TrackComponentOnOff')) THEN
FluidHX(CompLoop)%ControlMode = TrackComponentOnOff
ELSE
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Invalid '//TRIM(cAlphaFieldNames(8))//' = '//TRIM(cAlphaArgs(8)) )
ErrorsFound = .TRUE.
ENDIF
IF (.NOT. lAlphaFieldBlanks(9)) THEN
FluidHX(CompLoop)%SetpointNodeNum = &
GetOnlySingleNode(cAlphaArgs(9),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Sensor, 1, ObjectIsNotParent)
! check that node actually has setpoints on it
IF ( (FluidHX(CompLoop)%ControlMode == HeatingSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == HeatingSetpointOnOff) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOff) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOffWithComponentOverride) ) THEN
IF (Node(FluidHX(CompLoop)%SetpointNodeNum)%TempSetPoint == SensedNodeFlagValue) THEN
IF (.NOT. AnyEnergyManagementSystemInModel) THEN
CALL ShowSevereError(RoutineName//' Missing temperature setpoint for node = '//TRIM(cAlphaArgs(9)) )
CALL ShowContinueError('Occurs for '//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1)) )
CALL ShowContinueError(' Use a setpoint manager to place a single temperature setpoint on the node')
ErrorsFound=.true.
ELSE
! need call to EMS to check node
NodeEMSSetpointMissing = .FALSE.
CALL CheckIfNodeSetpointManagedByEMS(FluidHX(CompLoop)%SetpointNodeNum, &
iTemperatureSetpoint, NodeEMSSetpointMissing)
IF (NodeEMSSetpointMissing) THEN
CALL ShowSevereError(RoutineName//' Missing temperature setpoint for node = '//TRIM(cAlphaArgs(9)) )
CALL ShowContinueError('Occurs for '//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1)) )
CALL ShowContinueError( &
'Use a setpoint manager or EMS actuator to place a single temperature setpoint on the node')
ErrorsFound=.true.
ENDIF
ENDIF
ENDIF
ELSEIF ((FluidHX(CompLoop)%ControlMode == DualDeadbandSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == DualDeadbandSetpointOnOff)) THEN
IF ((Node(FluidHX(CompLoop)%SetpointNodeNum)%TempSetPointHi == SensedNodeFlagValue) &
.OR. (Node(FluidHX(CompLoop)%SetpointNodeNum)%TempSetPointLo == SensedNodeFlagValue) ) THEN
IF (.NOT. AnyEnergyManagementSystemInModel) THEN
CALL ShowSevereError(RoutineName//' Missing dual temperature setpoints for node = '//TRIM(cAlphaArgs(9)) )
CALL ShowContinueError('Occurs for '//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1)) )
CALL ShowContinueError(' Use a setpoint manager to place a dual temperature setpoint on the node')
ErrorsFound=.true.
ELSE
! need call to EMS to check node
NodeEMSSetpointMissing = .FALSE.
CALL CheckIfNodeSetpointManagedByEMS(FluidHX(CompLoop)%SetpointNodeNum, &
iTemperatureMinSetpoint, NodeEMSSetpointMissing)
CALL CheckIfNodeSetpointManagedByEMS(FluidHX(CompLoop)%SetpointNodeNum, &
iTemperatureMaxSetpoint, NodeEMSSetpointMissing)
IF (NodeEMSSetpointMissing) THEN
CALL ShowSevereError(RoutineName//' Missing temperature setpoint for node = '//TRIM(cAlphaArgs(9)) )
CALL ShowContinueError('Occurs for '//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1)) )
CALL ShowContinueError( &
'Use a setpoint manager or EMS actuators to place a dual temperature setpoints on the node')
ErrorsFound=.true.
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
! need to name a setpoint node if using a setpoint type control mode
IF ( (FluidHX(CompLoop)%ControlMode == HeatingSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == HeatingSetpointOnOff) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOff) &
.OR. (FluidHX(CompLoop)%ControlMode == DualDeadbandSetpointModulated) &
.OR. (FluidHX(CompLoop)%ControlMode == DualDeadbandSetpointOnOff) &
.OR. (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOffWithComponentOverride) ) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Missing entry for '//TRIM(cAlphaFieldNames(9)) )
ErrorsFound = .TRUE.
ENDIF
ENDIF
IF (.NOT. lNumericFieldBlanks(4)) THEN
FluidHX(CompLoop)%TempControlTol = rNumericArgs(4)
ELSE
FluidHX(CompLoop)%TempControlTol = 0.01d0
ENDIF
FluidHX(CompLoop)%HeatTransferMeteringEndUse = cAlphaArgs(10)
IF (.NOT. lAlphaFieldBlanks(11)) THEN
FluidHX(CompLoop)%OtherCompSupplySideLoop%InletNodeNum = &
GetOnlySingleNode(cAlphaArgs(11),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Actuator, 1, ObjectIsNotParent)
ELSE
IF (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOffWithComponentOverride) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Missing entry for '//TRIM(cAlphaFieldNames(11)) )
ErrorsFound = .TRUE.
ENDIF
ENDIF
IF (.NOT. lAlphaFieldBlanks(12)) THEN
FluidHX(CompLoop)%OtherCompDemandSideLoop%InletNodeNum = &
GetOnlySingleNode(cAlphaArgs(12),ErrorsFound,TRIM(cCurrentModuleObject),cAlphaArgs(1),NodeType_Water, &
NodeConnectionType_Actuator, 1, ObjectIsNotParent)
ELSE
IF (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOffWithComponentOverride) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Missing entry for '//TRIM(cAlphaFieldNames(12)) )
ErrorsFound = .TRUE.
ENDIF
ENDIF
IF (.NOT. lAlphaFieldBlanks(13)) THEN
IF ( SameString(cAlphaArgs(13) , 'WetBulbTemperature')) THEN
FluidHX(CompLoop)%ControlSignalTemp = WetBulbTemperature
ELSEIF ( SameString(cAlphaArgs(13) , 'DryBulbTemperature')) THEN
FluidHX(CompLoop)%ControlSignalTemp = DryBulbTemperature
ELSEIF ( SameString(cAlphaArgs(13) , 'Loop')) THEN
FluidHX(CompLoop)%ControlSignalTemp = LoopTemperature
ENDIF
ELSE
IF (FluidHX(CompLoop)%ControlMode == CoolingSetpointOnOffWithComponentOverride) THEN
CALL ShowSevereError(RoutineName//TRIM(cCurrentModuleObject)//'="'//TRIM(cAlphaArgs(1))//'", invalid entry.')
CALL ShowContinueError('Missing entry for '//TRIM(cAlphaFieldNames(13)) )
ErrorsFound = .TRUE.
ENDIF
ENDIF
IF (.NOT. lNumericFieldBlanks(5)) THEN
FluidHX(CompLoop)%SizingFactor = rNumericArgs(5)
ELSE
FluidHX(CompLoop)%SizingFactor = 1.d0
ENDIF
IF (.NOT. lNumericFieldBlanks(6)) THEN
FluidHX(CompLoop)%MinOperationTemp = rNumericArgs(6)
ELSE
FluidHX(CompLoop)%MinOperationTemp = -9999.d0
ENDIF
IF (.NOT. lNumericFieldBlanks(7)) THEN
FluidHX(CompLoop)%MaxOperationTemp = rNumericArgs(7)
ELSE
FluidHX(CompLoop)%MaxOperationTemp = 9999.d0
ENDIF
ENDDO
ENDIF
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in processing '//TRIM(cCurrentModuleObject)//' input.')
ENDIF
DO CompLoop =1, NumberOfPlantFluidHXs
CALL SetupOutputVariable('Fluid Heat Exchanger Heat Transfer Rate [W]', &
FluidHX(CompLoop)%HeatTransferRate, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Heat Transfer Energy [J]', &
FluidHX(CompLoop)%HeatTransferEnergy, 'System', 'Sum', &
FluidHX(CompLoop)%Name, &
ResourceTypeKey='ENERGYTRANSFER',EndUseKey=TRIM(FluidHX(CompLoop)%HeatTransferMeteringEndUse) &
,GroupKey='Plant')
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Supply Side Mass Flow Rate [kg/s]', &
FluidHX(CompLoop)%SupplySideLoop%InletMassFlowRate, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Supply Side Inlet Temperature [C]', &
FluidHX(CompLoop)%SupplySideLoop%InletTemp, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Supply Side Outlet Temperature [C]', &
FluidHX(CompLoop)%SupplySideLoop%OutletTemp, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Demand Side Mass Flow Rate [kg/s]', &
FluidHX(CompLoop)%DemandSideLoop%InletMassFlowRate, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Demand Side Inlet Temperature [C]', &
FluidHX(CompLoop)%DemandSideLoop%InletTemp, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Loop Demand Side Outlet Temperature [C]', &
FluidHX(CompLoop)%DemandSideLoop%OutletTemp, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Operation Status [ ]', &
FluidHX(CompLoop)%OperationStatus, 'System', 'Average', &
FluidHX(CompLoop)%Name )
CALL SetupOutputVariable('Fluid Heat Exchanger Effectiveness [ ]', &
FluidHX(CompLoop)%Effectiveness, 'System', 'Average', &
FluidHX(CompLoop)%Name )
ENDDO
RETURN
END SUBROUTINE GetFluidHeatExchangerInput