Buildings.Fluid.HeatExchangers.CoolingTowers

Package with cooling tower models

Information

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

NameDescription
Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations Correlations Package with correlations for cooling tower performance
Buildings.Fluid.HeatExchangers.CoolingTowers.FixedApproach FixedApproach Cooling tower with constant approach temperature
Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc YorkCalc Cooling tower with variable speed using the York calculation for the approach temperature
Buildings.Fluid.HeatExchangers.CoolingTowers.Examples Examples Collection of models that illustrate model use and test models


Buildings.Fluid.HeatExchangers.CoolingTowers.FixedApproach Buildings.Fluid.HeatExchangers.CoolingTowers.FixedApproach

Cooling tower with constant approach temperature

Buildings.Fluid.HeatExchangers.CoolingTowers.FixedApproach

Information


Model for a steady state cooling tower with constant approach temperature.

By connecting a signal that contains either the dry bulb or the wet bulb temperature, this model can be used to estimate the water return temperature from a cooling tower. For a more detailed model, use for example the YorkCalc model.

Extends from Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer (Partial model transporting fluid between two ports without storing mass or energy), Buildings.BaseClasses.BaseIcon (Base icon).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
BooleansensibleOnlytrueSet to true if sensible exchange only
TemperatureDifferenceTApp2Approach temperature difference [K]
Nominal condition
MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]
Pressuredp_nominal Pressure [Pa]
Initialization
MassFlowRatem_flow.start0Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressuredp.start0Pressure difference between port_a and port_b [Pa]
Assumptions
BooleanallowFlowReversalsystem.allowFlowReversal= true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
BooleanhomotopyInitializationtrue= true, use homotopy method
Diagnostics
Booleanshow_V_flowfalse= true, if volume flow rate at inflowing port is computed
Booleanshow_Ttrue= true, if actual temperature at port is computed (may lead to events)
Flow resistance
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input RealInputTAirEntering air dry or wet bulb temperature [K]

Modelica definition

model FixedApproach 
  "Cooling tower with constant approach temperature"
  extends Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer(sensibleOnly=true,
  final show_T = true);
  extends Buildings.BaseClasses.BaseIcon;
  parameter Modelica.SIunits.TemperatureDifference TApp(min=0, displayUnit="K") = 2 
    "Approach temperature difference";
  Modelica.Blocks.Interfaces.RealInput TAir(min=0, unit="K") 
    "Entering air dry or wet bulb temperature";
equation 
 Q_flow = m_flow * (Medium.specificEnthalpy(
                       Medium.setState_pTX(
                       p=port_b.p,
                       T=TAir+TApp,
                       X=inStream(port_b.Xi_outflow)))-inStream(port_a.h_outflow));
 // No mass added or remomved from water stream
 mXi_flow     = zeros(Medium.nXi);
end FixedApproach;

Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc

Cooling tower with variable speed using the York calculation for the approach temperature

Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc

Information


Model for a steady state cooling tower with variable speed fan using the York calculation for the approach temperature at off-design conditions.

Thermal performance

To compute the thermal performance, this model takes as parameters the approach temperature, the range temperature and the inlet air wet bulb temperature at the design condition. Since the design mass flow rate (of the chiller condenser loop) is also a parameter, these parameters define the rejected heat.
For off-design conditions, the model uses the actual range temperature and a polynomial to compute the approach temperature for free convection and for forced convection, i.e., with the fan operating. The polynomial is valid for a York cooling tower. If the fan input signal y is below the minimum fan revolution yMin, then the cooling tower operates in free convection mode, otherwise it operates in the forced convection mode. For numerical reasons, this transition occurs in the range of y ∈ [0.9*yMin, yMin].

Fan power consumption

The fan power consumption at the design condition can be specified as follows:

In the forced convection mode, the actual fan power is computed as PFan=fanRelPow(y) * PFan_nominal, where the default value for the fan relative power consumption at part load is fanRelPow(y)=y^3. In the free convection mode, the fan power consumption is zero. For numerical reasons, the transition of fan power from the part load mode to zero power consumption in the free convection mode occurs in the range y ∈ [0.9*yMin, yMin].
To change the function for fan relative power consumption at part load in the forced convection mode, tuples of fan control signal and relative power consumption can be specified.

Comparison the the cooling tower model of EnergyPlus

This model is similar to the model Cooling Tower:Variable Speed that is implemented in the EnergyPlus building energy simulation program version 6.0. The main differences are

  1. Not implemented are the basin heater power consumption, and the make-up water usage.
  2. The model has no built-in control to switch individual cells of the tower on or off. To switch cells on or off, use multiple instances of this model, and use your own control law to compute the input signal y.

    References

    EnergyPlus 2.0.0 Engineering Reference, April 9, 2007.

    Extends from Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer (Partial model transporting fluid between two ports without storing mass or energy), Buildings.BaseClasses.BaseIcon (Base icon).

    Parameters

    TypeNameDefaultDescription
    replaceable package MediumPartialMediumMedium in the component
    BooleansensibleOnlytrueSet to true if sensible exchange only
    RealfraPFan_nominal275/0.15Fan power divived by water mass flow rate at design condition [W/(kg/s)]
    PowerPFan_nominalfraPFan_nominal*m_flow_nominalFan power [W]
    RealyMin0.3Minimum control signal until fan is switched off (used for smoothing between forced and free convection regime)
    RealfraFreCon0.125Fraction of tower capacity in free convection regime
    Nominal condition
    MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]
    Pressuredp_nominal Pressure [Pa]
    TemperatureTAirInWB_nominal273.15 + 25.55Design inlet air wet bulb temperature [K]
    TemperatureDifferenceTApp_nominal3.89Design approach temperature [K]
    TemperatureDifferenceTRan_nominal5.56Design range temperature (water in - water out) [K]
    Initialization
    MassFlowRatem_flow.start0Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
    Pressuredp.start0Pressure difference between port_a and port_b [Pa]
    Assumptions
    BooleanallowFlowReversalsystem.allowFlowReversal= true to allow flow reversal, false restricts to design direction (port_a -> port_b)
    Advanced
    MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
    BooleanhomotopyInitializationtrue= true, use homotopy method
    Diagnostics
    Booleanshow_V_flowfalse= true, if volume flow rate at inflowing port is computed
    Booleanshow_Ttrue= true, if actual temperature at port is computed (may lead to events)
    Flow resistance
    Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
    BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
    RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar

    Connectors

    TypeNameDescription
    FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
    FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
    input RealInputTAirEntering air wet bulb temperature [K]
    input RealInputyFan control signal

    Modelica definition

    model YorkCalc 
      "Cooling tower with variable speed using the York calculation for the approach temperature"
      extends Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer(sensibleOnly=true,
      final show_T = true);
      extends Buildings.BaseClasses.BaseIcon;
    
      parameter Modelica.SIunits.Temperature TAirInWB_nominal = 273.15+25.55 
        "Design inlet air wet bulb temperature";
      parameter Modelica.SIunits.TemperatureDifference TApp_nominal(displayUnit="K") = 3.89 
        "Design approach temperature";
      parameter Modelica.SIunits.TemperatureDifference TRan_nominal(displayUnit="K") = 5.56 
        "Design range temperature (water in - water out)";
      parameter Real fraPFan_nominal(unit="W/(kg/s)") = 275/0.15 
        "Fan power divived by water mass flow rate at design condition";
      parameter Modelica.SIunits.Power PFan_nominal = fraPFan_nominal*m_flow_nominal 
        "Fan power";
      replaceable function fanRelPow =
        Buildings.Fluid.Movers.BaseClasses.Characteristics.polynomialEfficiency (
           r_V_nominal = {0.1,   0.3,   0.6,   1},
           eta_nominal = {0.1^3, 0.3^3, 0.6^3, 1}) constrainedby 
        Buildings.Fluid.Movers.BaseClasses.Characteristics.baseEfficiency 
        "Fan relative power consumption as a function of control signal, fanParLoaEff=P(y)/P(y=1)";
      parameter Real yMin(min=0.01, max=1) = 0.3 
        "Minimum control signal until fan is switched off (used for smoothing between forced and free convection regime)";
      parameter Real fraFreCon(min=0, max=1) = 0.125 
        "Fraction of tower capacity in free convection regime";
    
      Modelica.Blocks.Interfaces.RealInput TAir(min=0, unit="K") 
        "Entering air wet bulb temperature";
    
      Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.BoundsYorkCalc bou 
        "Bounds for correlation";
      Modelica.Blocks.Interfaces.RealInput y "Fan control signal";
    
      Modelica.SIunits.TemperatureDifference TAppAct(min=0, nominal=1, displayUnit="K") 
        "Actual approach temperature";
    
      Modelica.SIunits.TemperatureDifference TRan(nominal=1, displayUnit="K") 
        "Range temperature";
      Modelica.SIunits.MassFraction FRWat 
        "Ratio actual over design water mass flow ratio";
      Modelica.SIunits.MassFraction FRAir 
        "Ratio actual over design air mass flow ratio";
      Modelica.SIunits.Power PFan "Fan power";
    protected 
      parameter Modelica.SIunits.MassFraction FRWat0(min=0, start=1, fixed=false) 
        "Ratio actual over design water mass flow ratio at nominal condition";
      parameter Modelica.SIunits.Temperature TWatIn0(fixed=false) 
        "Water inlet temperature at nominal condition";
      parameter Modelica.SIunits.Temperature TWatOut_nominal(fixed=false) 
        "Water outlet temperature at nominal condition";
      parameter Modelica.SIunits.MassFlowRate mRef_flow(min=0, start=m_flow_nominal, fixed=false) 
        "Reference water flow rate";
    
      Modelica.SIunits.TemperatureDifference dTMax(nominal=1, displayUnit="K") 
        "Maximum possible temperature difference";
      Modelica.SIunits.TemperatureDifference TAppCor(min=0, nominal=1, displayUnit="K") 
        "Approach temperature for forced convection";
      Modelica.SIunits.TemperatureDifference TAppFreCon(min=0, nominal=1, displayUnit="K") 
        "Approach temperature for free convection";
    initial equation 
      TWatOut_nominal = TAirInWB_nominal + TApp_nominal;
      TRan_nominal = TWatIn0 - TWatOut_nominal; // by definition of the range temp.
      TApp_nominal = Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
                       TRan=TRan_nominal, TWetBul=TAirInWB_nominal,
                       FRWat=FRWat0, FRAir=1); // this will be solved for FRWat0
      mRef_flow = m_flow_nominal/FRWat0;
      // Check validity of relative fan power consumption at y=yMin and y=1
      assert(fanRelPow(r_V=yMin)>-1E-4, "The fan relative power consumption must be negative for y=0."
      + "\n   Obtained fanRelPow(0) = " + realString(fanRelPow(r_V=yMin))
      + "\n   You need to choose a different function for fanRelPow.");
      assert(abs(1-fanRelPow(r_V=1))<1E-4, "The fan relative power consumption must be one for y=1."
      + "\n   Obtained fanRelPow(1) = " + realString(fanRelPow(r_V=1))
      + "\n   You need to choose a different function for fanRelPow."
      + "\n   To increase the fan power, change fraPFan_nominal or PFan_nominal.");
    equation 
      // Range temperature
      TRan = Medium.temperature(sta_a) - Medium.temperature(sta_b);
      // Fractional mass flow rates
      FRWat = m_flow/mRef_flow;
      FRAir = y;
    
      TAppCor = Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
                   TRan=TRan, TWetBul=TAir,
                   FRWat=FRWat, FRAir=max(FRWat/bou.liqGasRat_max, FRAir));
      dTMax = Medium.temperature(sta_a) - TAir;
      TAppFreCon = (1-fraFreCon) * dTMax  + fraFreCon *
                   Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
                       TRan=TRan, TWetBul=TAir, FRWat=FRWat, FRAir=1);
    
      // Actual approach temperature and fan power consumption,
      // which depends on forced vs. free convection.
      // The transition is for y in [yMin-yMin/10, yMin]
      [TAppAct, PFan] = Buildings.Utilities.Math.Functions.spliceFunction(
                                                     pos=[TAppCor, fanRelPow(r_V=y) * PFan_nominal],
                                                     neg=[TAppFreCon, 0],
                                                     x=y-yMin+yMin/20,
                                                     deltax=yMin/20);
      Medium.temperature(sta_b) = TAppAct + TAir;
    
      // No mass added or remomved from water stream
      mXi_flow     = zeros(Medium.nXi);
    
    end YorkCalc;
    

    Automatically generated Fri May 06 14:11:57 2011.