Buildings.Fluid.HeatExchangers.CoolingTowers.Validation

Collection of validation models

Information

This package contains validation models for the classes in Buildings.Fluid.HeatExchangers.CoolingTowers.

Note that most validation models contain simple input data which may not be realistic, but for which the correct output can be obtained through an analytic solution. The examples plot various outputs, which have been verified against these solutions. These model outputs are stored as reference data and used for continuous validation whenever models in the library change.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelEnergyPlus MerkelEnergyPlus Validation with EnergyPlus model for Merkel's cooling tower
Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelNominal MerkelNominal Validation model that simulates the cooling tower at design conditions

Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelEnergyPlus Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelEnergyPlus

Validation with EnergyPlus model for Merkel's cooling tower

Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelEnergyPlus

Information

This model validates the model Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel by comparing against results obtained from EnergyPlus.

The EnergyPlus results were obtained using the example file CoolingTower:VariableSpeed, with the cooling tower evaluated as the CoolingTower:VariableSpeed:Merkel model from EnergyPlus.

The difference in results of the cooling tower's leaving water temperature (tow.TLvg and TLvg.EP) during the middle and end of the simulation is because the mass flow rate is zero. For zero mass flow rate, EnergyPlus assumes a steady state condition, whereas the Modelica model is a dynamic model and hence the properties at the outlet are equal to the state variables of the model.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
DensityrhoWatMediumWat.density(MediumWat....Default density of water [kg/m3]
DensityrhoAirMediumAir.density(MediumAir....Default density of air [kg/m3]
PressureDifferencedp_nominal6000Nominal pressure difference of cooling tower [Pa]
VolumeFlowRateVWat_flow_nominal0.00109317Nominal volumetric flow rate of water (medium 2) [m3/s]
VolumeFlowRateVAir_flow_nominal0.561240Nominal volumetric flow rate of air (medium 1) [m3/s]
TemperatureTAirInWB_nominal25.60 + 273.15Nominal outdoor wetbulb temperature [K]
TemperatureDifferenceTRan5.50Range temperature (difference between water in and out) [K]
TemperatureDifferenceTApp3.90Approach temperature (difference between water out and wetbulb) [K]
TemperatureTWatOut_initial33.019 + 273.15Nominal water inlet temperature [K]
PowerPFan_nominal213.27113Nominal fan power [W]
Realr_VEnePlu[:]{0,0.1,0.2,0.3,0.4,0.5,0.6,0...Fan control signal
Realr_PEnePlu[:]{0,0.020982275,0.027843038,0...Fan power output as a function of the signal

Modelica definition

model MerkelEnergyPlus "Validation with EnergyPlus model for Merkel's cooling tower" extends Modelica.Icons.Example; package MediumAir = Buildings.Media.Air "Air medium model"; package MediumWat = Buildings.Media.Water "Water medium model"; parameter Modelica.Units.SI.Density rhoWat=MediumWat.density( MediumWat.setState_pTX( MediumWat.p_default, MediumWat.T_default, MediumWat.X_default)) "Default density of water"; parameter Modelica.Units.SI.Density rhoAir=MediumAir.density( MediumAir.setState_pTX( MediumAir.p_default, MediumAir.T_default, MediumAir.X_default)) "Default density of air"; // Cooling tower parameters - values quoted from EnergyPlus parameter Modelica.Units.SI.PressureDifference dp_nominal=6000 "Nominal pressure difference of cooling tower"; parameter Modelica.Units.SI.VolumeFlowRate VWat_flow_nominal=0.00109317 "Nominal volumetric flow rate of water (medium 2)"; parameter Modelica.Units.SI.VolumeFlowRate VAir_flow_nominal=0.561240 "Nominal volumetric flow rate of air (medium 1)"; parameter Modelica.Units.SI.Temperature TAirInWB_nominal=25.60 + 273.15 "Nominal outdoor wetbulb temperature"; parameter Modelica.Units.SI.TemperatureDifference TRan=5.50 "Range temperature (difference between water in and out)"; parameter Modelica.Units.SI.TemperatureDifference TApp=3.90 "Approach temperature (difference between water out and wetbulb)"; parameter Modelica.Units.SI.Temperature TWatOut_initial=33.019 + 273.15 "Nominal water inlet temperature"; parameter Modelica.Units.SI.Power PFan_nominal=213.27113 "Nominal fan power"; parameter Real r_VEnePlu[:] = {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} "Fan control signal"; parameter Real r_PEnePlu[:] = {0,0.020982275,0.027843038,0.046465108, 0.082729139,0.142515786,0.231705701,0.356179538,0.521817952,0.734501596,1} "Fan power output as a function of the signal"; // Values calculated from principals final parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal= VWat_flow_nominal*rhoWat "Nominal mass flow rate of water (medium 2)"; final parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= VAir_flow_nominal*rhoAir "Nominal mass flow rate of air (medium 1)"; final parameter Real ratWatAir_nominal = mWat_flow_nominal/mAir_flow_nominal "Nominal water-to-air ratio"; final parameter Modelica.Units.SI.Temperature TWatIn_nominal=TWatOut_nominal + TRan "Nominal water inlet temperature"; final parameter Modelica.Units.SI.Temperature TWatOut_nominal=TAirInWB_nominal + TApp "Nominal water outlet temperature, 29.5 in EnergyPlus"; Modelica.Blocks.Sources.CombiTimeTable datRea( tableOnFile=true, fileName=ModelicaServices.ExternalReferences.loadResource( "modelica://Buildings//Resources/Data/Fluid/HeatExchangers/CoolingTowers/Validation/MerkelEnergyPlus/CoolingTower_VariableSpeed_Merkel.dat"), verboseRead=false, columns=2:10, tableName="EnergyPlus", smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments) "Reader for \"CoolingTower_VariableSpeed_Merkel.idf\" energy plus example results"; Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel tow( redeclare package Medium = MediumWat, dp_nominal=dp_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=TWatOut_initial, m_flow_nominal=mWat_flow_nominal, ratWatAir_nominal=ratWatAir_nominal, TAirInWB_nominal=TAirInWB_nominal, TWatIn_nominal=TWatIn_nominal, TWatOut_nominal=TWatOut_nominal, PFan_nominal=PFan_nominal, yMin=0.1, fraFreCon=0.1, fanRelPow(r_V=r_VEnePlu, r_P=r_PEnePlu), UACor(FRAirMin=0.2)) "Merkel-theory based cooling tower"; Sources.MassFlowSource_T souWat( redeclare package Medium = MediumWat, use_m_flow_in=true, T=328.15, nPorts=1, use_T_in=true) "Water source to the cooling tower"; Sources.Boundary_pT sinWat(redeclare package Medium = MediumWat,nPorts=1) "Water sink from the cooling tower"; Controls.OBC.UnitConversions.From_degC TEntWat "Block that converts entering water temperature"; Controls.OBC.UnitConversions.From_degC TAirWB "Block that converts entering air wetbulb temperature"; Modelica.Blocks.Sources.RealExpression TLvg_EP(y=datRea.y[4]) "EnergyPlus results: cooling tower leaving water temperature"; Modelica.Blocks.Sources.RealExpression Q_flow_EP(y=-1*datRea.y[6]) "EnergyPlus results: cooling tower heat flow rate"; Modelica.Blocks.Sources.RealExpression PFan_EP(y=datRea.y[7]) "EnergyPlus results: fan power consumption"; equation connect(tow.TAir, TAirWB.y); connect(souWat.ports[1], tow.port_a); connect(tow.port_b, sinWat.ports[1]); connect(TEntWat.y, souWat.T_in); connect(datRea.y[2], TAirWB.u); connect(TEntWat.u, datRea.y[3]); connect(souWat.m_flow_in, datRea.y[5]); connect(tow.y, datRea.y[9]); end MerkelEnergyPlus;

Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelNominal Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelNominal

Validation model that simulates the cooling tower at design conditions

Buildings.Fluid.HeatExchangers.CoolingTowers.Validation.MerkelNominal

Information

Validation model for the Merkel cooling tower.

The model simulates the cooling tower at the design conditions, and it verifies that at steady-state, the outlet temperature is the same as the one from the design condition.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
Nominal condition
MassFlowRatem_flow_nominal0.5Design water flow rate [kg/s]
RealratWatAir_nominal0.625Design water-to-air ratio

Modelica definition

model MerkelNominal "Validation model that simulates the cooling tower at design conditions" extends Modelica.Icons.Example; package Medium_W = Buildings.Media.Water "Medium model for water"; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=0.5 "Design water flow rate"; parameter Real ratWatAir_nominal = 0.625 "Design water-to-air ratio"; Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel tow( redeclare package Medium = Medium_W, ratWatAir_nominal=ratWatAir_nominal, TAirInWB_nominal=273.15 + 25.55, TWatIn_nominal=273.15 + 35, TWatOut_nominal=273.15 + 35 - 5.56, PFan_nominal=4800, m_flow_nominal=m_flow_nominal, dp_nominal=6000, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, show_T=true) "Cooling tower"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFan(k=1) "Fan speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWetBul(k=tow.TAirInWB_nominal) "Wetbulb temperature"; Buildings.Fluid.Sources.MassFlowSource_T sou( redeclare final package Medium = Medium_W, m_flow=m_flow_nominal, T=tow.TWatIn_nominal, nPorts=1) "Water source"; Buildings.Fluid.Sources.Boundary_pT sin( redeclare package Medium = Medium_W, nPorts=1) "Sink"; equation connect(sou.ports[1], tow.port_a); connect(tow.port_b,sin. ports[1]); connect(TWetBul.y, tow.TAir); connect(yFan.y, tow.y); end MerkelNominal;