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