-
Notifications
You must be signed in to change notification settings - Fork 162
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3543 from karthikeyad-pnnl/issue3492_DirectEvapor…
…ativeCooler Issue3492 direct evaporative cooler
- Loading branch information
Showing
47 changed files
with
10,467 additions
and
0 deletions.
There are no files selected for viewing
188 changes: 188 additions & 0 deletions
188
Buildings/Fluid/Humidifiers/EvaporativeCoolers/Baseclasses/DirectCalculations.mo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
within Buildings.Fluid.Humidifiers.EvaporativeCoolers.Baseclasses; | ||
block DirectCalculations | ||
"Calculates the water vapor mass flow rate of a direct evaporative coolder" | ||
|
||
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium | ||
"Medium"; | ||
|
||
parameter Modelica.Units.SI.Area padAre | ||
"Area of the rigid media evaporative pad"; | ||
|
||
parameter Modelica.Units.SI.Length dep | ||
"Depth of the rigid media evaporative pad"; | ||
|
||
parameter Real effCoe[11] = {0.792714, 0.958569, -0.25193, -1.03215, 0.0262659, | ||
0.914869, -1.48241, -0.018992, 1.13137, 0.0327622, | ||
-0.145384} | ||
"Coefficients for evaporative medium efficiency calculation"; | ||
|
||
Real eff( | ||
final unit="1") | ||
"Evaporative humidifier efficiency"; | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput V_flow( | ||
final unit="m3/s", | ||
displayUnit="m3/s", | ||
final quantity = "VolumeFlowRate") | ||
"Air volume flow rate" | ||
annotation ( | ||
Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,-20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-120,-20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TDryBulIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Dry bulb temperature of the inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-120,20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TWetBulIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Wet bulb temperature of the inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-120,60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput p( | ||
final unit="Pa", | ||
displayUnit="Pa", | ||
final quantity="AbsolutePressure") | ||
"Pressure" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,-60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-120,-60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealOutput dmWat_flow( | ||
final unit="kg/s", | ||
displayUnit="kg/s", | ||
final quantity="MassFlowRate") | ||
"Water vapor mass flow rate difference between inlet and outlet" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={120,0}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={120,0}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Fluid.Humidifiers.EvaporativeCoolers.Baseclasses.Xi_TDryBulTWetBul | ||
XiOut(redeclare package Medium = Medium) | ||
"Water vapor mass fraction at the outlet"; | ||
|
||
Buildings.Fluid.Humidifiers.EvaporativeCoolers.Baseclasses.Xi_TDryBulTWetBul | ||
XiIn(redeclare package Medium = Medium) | ||
"Water vapor mass fraction at the inlet"; | ||
|
||
Modelica.Units.SI.Velocity vel | ||
"Air velocity"; | ||
|
||
Modelica.Units.SI.ThermodynamicTemperature TDryBulOut( | ||
displayUnit="degC") | ||
"Dry bulb temperature of the outlet air"; | ||
|
||
protected | ||
parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( | ||
T=Medium.T_default, p=Medium.p_default, X=Medium.X_default) | ||
"Default state of medium"; | ||
parameter Modelica.Units.SI.Density rho_default=Medium.density(sta_default) | ||
"Density, used to compute fluid volume"; | ||
|
||
equation | ||
vel =abs(V_flow)/padAre; | ||
eff = effCoe[1] + effCoe[2]*(dep) + effCoe[3]*(vel) + effCoe[4]*(dep^2) + | ||
effCoe[5]*(vel^2) + effCoe[6]*(dep*vel) + effCoe[7]*(vel*dep^2) + | ||
effCoe[8]*(dep*vel^3) + effCoe[9]*(dep^3*vel) + effCoe[10]*(vel^3*dep^2) + | ||
effCoe[11]*(dep^3*vel^2); | ||
TDryBulOut = TDryBulIn - eff*(TDryBulIn - TWetBulIn); | ||
connect(TDryBulIn, XiIn.TDryBul); | ||
connect(TWetBulIn, XiIn.TWetBul); | ||
connect(p, XiIn.p); | ||
connect(TWetBulIn, XiOut.TWetBul); | ||
connect(p, XiOut.p); | ||
TDryBulOut = XiOut.TDryBul; | ||
dmWat_flow = (XiOut.Xi[1] - XiIn.Xi[1])*V_flow*rho_default; | ||
annotation (Documentation(info="<html> | ||
<p>Block that calculates the water vapor mass flow rate addition in the | ||
direct evaporative cooler component. The calculations are based on the direct | ||
evaporative cooler model in the Engineering Reference document from EnergyPlus v23.1.0.</p> | ||
<p> | ||
The effectiveness of the evaporative media <code>eff</code> is calculated using | ||
the curve</p> | ||
<p align=\"center\" style=\"font-style:italic;\"> | ||
eff = effCoe[1] + effCoe[2]*(dep) + effCoe[3]*(vel) + effCoe[4]*(dep<sup>2</sup>) + | ||
effCoe[5]*(vel<sup>2</sup>) + effCoe[6]*(dep*vel) + effCoe[7]*(vel*dep<sup>2</sup>) + | ||
effCoe[8]*(dep*vel<sup>3</sup>) + effCoe[9]*(dep<sup>3</sup>*vel) + effCoe[10]*(vel<sup>3</sup>*dep<sup>2</sup>) + | ||
effCoe[11]*(dep<sup>3</sup>*vel<sup>2</sup>)</p> | ||
<p> | ||
where <code>effCoe</code> is the evaporative efficiency coefficients for the media, | ||
<code>vel</code> is the velocity of the fluid media, and <code>dep</code> is the | ||
depth of the evaporative media.<br> | ||
<code>vel</code> is calculated from the volume flowrate <code>V_flow</code> and | ||
evaporative media cross-sectional area <code>padAre</code> using | ||
</p> | ||
<p align=\"center\" style=\"font-style:italic;\"> | ||
vel = V_flow/padAre</p> | ||
<p> | ||
The outlet air drybulb temperature <code>TDryBulOut</code> is calculated using the heat-balance equation | ||
</p> | ||
<p align=\"center\" style=\"font-style:italic;\"> | ||
TDryBulOut = TDryBulIn - eff*(TDryBulIn - TWetBulIn)</p> | ||
<p> | ||
where <code>TDryBulIn</code> is the inlet air drybulb temperature and | ||
<code>TWetBulIn</code> is the inlet air wetbulb temperature.<br> | ||
The difference in humidity ratio between the inlet and outlet air is used to | ||
calculate the added mass of water vapor <code>dmWat_flow</code>, with the humidity | ||
ratios being determined from psychrometric relationships, while assuming the | ||
outlet air wetbulb temperature is the same as inlet air wetbulb temperature. | ||
</p> | ||
</html>", revisions="<html> | ||
<ul> | ||
<li> | ||
Semptember 14, 2023 by Cerrina Mouchref, Karthikeya Devaprasad, Lingzhe Wang:<br/> | ||
First implementation. | ||
</li> | ||
</ul> | ||
</html>"), Icon(graphics={ Text( | ||
extent={{-152,144},{148,104}}, | ||
textString="%name", | ||
textColor={0,0,255}), Rectangle(extent={{-100,100},{100,-100}}, | ||
lineColor={0,0,0}, | ||
fillColor={255,255,255}, | ||
fillPattern=FillPattern.Solid)})); | ||
end DirectCalculations; |
177 changes: 177 additions & 0 deletions
177
Buildings/Fluid/Humidifiers/EvaporativeCoolers/Baseclasses/IndirectWetCalculations.mo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
within Buildings.Fluid.Humidifiers.EvaporativeCoolers.Baseclasses; | ||
block IndirectWetCalculations | ||
"Calculates the heat transfer in an indirect wet evaporative cooler" | ||
|
||
parameter Real maxEff( | ||
displayUnit="1") | ||
"Maximum efficiency of heat exchanger coil"; | ||
|
||
parameter Real floRat( | ||
displayUnit="1") | ||
"Coil flow efficency ratio of actual to maximum heat transfer rate"; | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput VPri_flow( | ||
final unit="m3/s", | ||
displayUnit="m3/s", | ||
final quantity = "VolumeFlowRate") | ||
"Primary air volume flow rate" | ||
annotation ( | ||
Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,-60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,-60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput VSec_flow( | ||
final unit="m3/s", | ||
displayUnit="m3/s", | ||
final quantity = "VolumeFlowRate") | ||
"Secondary air volume flow rate" | ||
annotation ( | ||
Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,-100}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,-100}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TDryBulPriIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Dry bulb temperature of the primary inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,100}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,100}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TWetBulPriIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Wet bulb temperature of the primary inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,60}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TDryBulSecIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Dry bulb temperature of the secondary inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealInput TWetBulSecIn( | ||
final unit="K", | ||
displayUnit="degC", | ||
final quantity="ThermodynamicTemperature") | ||
"Wet bulb temperature of the secondary inlet air" | ||
annotation (Placement( | ||
visible=true, | ||
transformation( | ||
origin={-120,-20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={-140,-20}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TDryBulPriOut( | ||
displayUnit="degC", | ||
final unit="K", | ||
final quantity="ThermodynamicTemperature") | ||
"Dry bulb temperature of the outlet air" | ||
annotation (Placement( | ||
transformation( | ||
origin={120,0}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0), | ||
iconTransformation( | ||
origin={140,0}, | ||
extent={{-20,-20},{20,20}}, | ||
rotation=0))); | ||
|
||
Real eff( | ||
displayUnit="1") | ||
"Actual efficiency of component"; | ||
|
||
equation | ||
eff = max((maxEff - floRat*abs(VPri_flow)/abs(VSec_flow)),0); | ||
TDryBulPriOut = TDryBulPriIn - eff*(TDryBulSecIn - TWetBulSecIn); | ||
|
||
annotation (defaultComponentName="indWetCal", | ||
Documentation(info="<html> | ||
<p>Block that calculates the water vapor mass flow rate addition in the | ||
direct evaporative cooler component. The calculations are based on the indirect | ||
wet evaporative cooler model in the Engineering Reference document from EnergyPlus | ||
v23.1.0.</p> | ||
<p> | ||
The effective efficiency of the heat exchanger <code>eff</code> is calculated using | ||
the formula</p> | ||
<p align=\"center\" style=\"font-style:italic;\"> | ||
eff = max((maxEff - floRat*abs(VPri_flow)/abs(VSec_flow)),0)</p> | ||
<p> | ||
where <code>VPri_flow</code> and <code>VSec_flow</code> are the volume flow | ||
rates of the primary and secondary fluid media respectively. The maximum | ||
efficiency of the heat exchanger <code>maxEff</code> as well as the efficiency-reduction | ||
coil flow ratio <code>floRat</code> are empirically determined for the specific | ||
equipment using experiments.<br> | ||
The outlet primary fluid drybulb temperature <code>TDryBulPriOut</code> is calculated | ||
using the energy-balance equation | ||
</p> | ||
<p align=\"center\" style=\"font-style:italic;\"> | ||
TDryBulPriOut = TDryBulPriIn - eff*(TDryBulSecIn - TWetBulSecIn)</p> | ||
<p> | ||
where <code>TDryBulPriIn</code> is the inlet primary fluid drybulb temperature, | ||
<code>TDryBulSecIn</code> is the inlet secondary air drybulb temperature and | ||
<code>TWetBulSecIn</code> is the inlet secondary air wetbulb temperature. | ||
</p> | ||
</html>", revisions="<html> | ||
<ul> | ||
<li> | ||
September 29, 2023 by Karthikeya Devaprasad:<br/> | ||
First implementation. | ||
</li> | ||
</ul> | ||
</html>"), Icon(coordinateSystem(extent={{-120,-120},{120,120}}), | ||
graphics={ Text( | ||
extent={{-150,160},{150,120}}, | ||
textString="%name", | ||
textColor={0,0,255}), Rectangle(extent={{-120,120},{120,-120}}, | ||
lineColor={0,0,0}, | ||
fillColor={255,255,255}, | ||
fillPattern=FillPattern.Solid)}), | ||
Diagram(coordinateSystem(extent={{-100,-120},{100,120}}))); | ||
end IndirectWetCalculations; |
Oops, something went wrong.