Skip to content

Commit

Permalink
Implementation of a Tainter Gate
Browse files Browse the repository at this point in the history
  • Loading branch information
dietmarw committed Apr 19, 2024
1 parent acd5cdb commit 45d5fec
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 0 deletions.
38 changes: 38 additions & 0 deletions OpenHPL/Examples/TainterGate.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
within OpenHPL.Examples;
model TainterGate "Usage of the tainter gate"
extends Modelica.Icons.Example;
inner Data data(SteadyState = true, Vdot_0 = 75) annotation (
Placement(transformation(extent = {{-100, 80}, {-80, 100}})));
Modelica.Blocks.Sources.Ramp gateOpening(
height=5,
duration=1000,
offset=0.1,
startTime=500) annotation (Placement(transformation(extent={{-40,30},{-20,50}})));
Waterway.Reservoir upstream(
h_0=5,
constantLevel=true,
L=10,
W=10) annotation (Placement(transformation(extent={{-40,-20},{-20,0}})));
Waterway.Reservoir downstream(
h_0=4,
constantLevel=false,
useLevel=true,
L=10,
W=10) annotation (Placement(transformation(
extent={{-10,10},{10,-10}},
rotation=180,
origin={30,-10})));
Waterway.TainterGate tainterGate(W=16.5, T=5.6) annotation (Placement(transformation(extent={{-10,-20},{10,0}})));
Modelica.Blocks.Sources.Ramp level(
height=4.89,
duration=1000,
offset=0.1,
startTime=500) annotation (Placement(transformation(extent={{80,-20},{60,0}})));
equation
connect(upstream.o, tainterGate.i) annotation (Line(points={{-20,-10},{-10,-10}}, color={0,128,255}));
connect(tainterGate.o, downstream.o) annotation (Line(points={{10,-10},{20,-10}}, color={0,128,255}));
connect(gateOpening.y, tainterGate.B) annotation (Line(points={{-19,40},{0,40},{0,2}}, color={0,0,127}));
connect(level.y, downstream.level) annotation (Line(points={{59,-10},{50,-10},{50,-4},{42,-4}}, color={0,0,127}));
annotation (
experiment(StopTime=2000, Interval=0.4));
end TainterGate;
1 change: 1 addition & 0 deletions OpenHPL/Examples/package.order
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ DetailedGen
DetailedGenFrancis
PowerSystemSimple
VolumeFlowSource
TainterGate
WithOpenIPSL
41 changes: 41 additions & 0 deletions OpenHPL/Icons/TainterGate.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
within OpenHPL.Icons;
partial class TainterGate "Icon of a tainter gate"
annotation (Icon(graphics={
Rectangle(
extent={{-100,-2},{-46,-72}},
lineColor={28,108,200},
fillColor={28,108,200},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{-60,140},{220,-140}},
lineColor={135,135,135},
startAngle=155,
endAngle=196,
fillColor={175,175,175},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-100,-72},{100,-80}},
lineColor={0,0,0},
fillColor={215,215,215},
fillPattern=FillPattern.Forward),
Rectangle(
extent={{-46,-60},{100,-72}},
lineColor={28,108,200},
fillColor={28,108,200},
fillPattern=FillPattern.Solid),
Rectangle(extent={{-100,100},{100,-100}}, lineColor={0,0,0}),
Text(
lineColor={28,108,200},
extent={{-90,100},{90,60}},
textString="%name",
textStyle={TextStyle.Bold}),
Ellipse(
extent={{-2,-4},{2,-8}},
lineColor={0,0,0},
fillColor={0,0,0},
fillPattern=FillPattern.Solid),
Line(
points={{0,-6},{0,100}},
color={0,0,0},
pattern=LinePattern.Dash)}));
end TainterGate;
1 change: 1 addition & 0 deletions OpenHPL/Icons/package.order
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ Pylon
RunOff
Method
Governor
TainterGate
Binary file added OpenHPL/Resources/Images/TainterGate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 89 additions & 0 deletions OpenHPL/Waterway/TainterGate.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
within OpenHPL.Waterway;
model TainterGate "Model of a tainter gate (HEC-RAS)"
outer Data data "Using standard class with system parameters";
extends Icons.TainterGate;
extends OpenHPL.Interfaces.ContactPort;

parameter SI.Height W "Width of the gated spillway"
annotation (Dialog(group="Geometry"));
parameter SI.Height T "Trunnion height (from spillway crest to trunnion pivot point)"
annotation (Dialog(group="Geometry"));
parameter Real Cd = 0.7 "Discharge coefficient (typically ranges from 0.6 - 0.8)"
annotation (Dialog(group="Coefficients"));
parameter Real TE = 0.16 "Trunnion height exponent, typically about 0.16"
annotation (Dialog(group="Coefficients"));
parameter Real BE = 0.72 "Gate opening exponent, typically about 0.72"
annotation (Dialog(group="Coefficients"));
SI.Length H = h_i "Upstream Energy Head above the spillway crest";
parameter Real HE = 0.62 "Head exponent, typically about 0.62"
annotation (Dialog(group="Coefficients"));
SI.Height h_i "Inlet water level";
SI.Height h_o "Outlet water level";
SI.VolumeFlowRate Vdot "Volume flow rate through the gate";
Real H_ratio = h_o/h_i "Ratio of outlet to inlet height";

Modelica.Blocks.Interfaces.RealInput B "Height of gate opening [m]" annotation (Placement(transformation(
extent={{-20,-20},{20,20}},
rotation=270,
origin={0,120})));
protected
SI.VolumeFlowRate Vdot_free "Free base volume flow rate through the gate";
SI.VolumeFlowRate Vdot_partial "Partially submerged base volume flow rate through the gate";
SI.VolumeFlowRate Vdot_full "Fully submerged base volume flow rate through the gate";
Real Cdx "Discharge coefficient tuned for a smooth transition between partially and fully submerged";

equation
Vdot_free = sqrt(2*data.g)* W * T^TE * B^BE * h_i^HE "Free flow condition";
Vdot_partial = sqrt(2*data.g)* W * T^TE * B^BE * (3*(h_i-h_o))^HE "Partially submerged";
Vdot_full = sqrt(2*data.g*(h_i-h_o))* W * B "Fully submerged";
Cdx = Cd * Vdot_partial/Vdot_full;
if H_ratio <= 0.67 then
Vdot=Cd * Vdot_free "Free flow condition";
elseif H_ratio <= 0.8 then
Vdot= Cd * Vdot_partial "Partially submerged";
else
Vdot= Cdx * Vdot_full "Fully submerged";
end if;
mdot = Vdot * data.rho "Mass flow rate through the gate";
i.p = h_i * data.g * data.rho + data.p_a "Inlet water pressure";
o.p = h_o * data.g * data.rho + data.p_a "Outlet water pressure";
annotation (Documentation(info="<html>
<h4>Background</h4>
<p>
The Tainter Gate (also known as Radial Gate) is modelled based on a simplified calculation
as used in the <a href=\"https://en.wikipedia.org/wiki/HEC-RAS\">HEC-RAS</a> simulation software.
More specifically the following documentation is taken from the
<a href=\"https://www.hec.usace.army.mil/confluence/rasdocs/ras1dtechref/latest\">
HEC-RAS Hydraulic Reference Manual</a> on <a href=\"https://www.hec.usace.army.mil/confluence/rasdocs/ras1dtechref/latest/modeling-gated-spillways-weirs-and-drop-structures/hydraulic-computations-through-gated-spillways/radial-gates\">Radial Gates</a>.
</p>
<p>
<figure>
<img src=\"modelica://OpenHPL/Resources/Images/TainterGate.png\"/>
<figcaption>Example Radial Gate with an Ogee Spillway Crest [HEC-RAS].</figcaption>
</figure>
</p>
<h4>Implementation</h4>
<p>
The calculation of the flow through the gate is approximated for three different regions:
</p>
<h5>Free flowing</h5>
<p>
$$Q = C_d W T^{T_E} B^{B_E} H^{H_E} \\sqrt{2g} \\tag{1} $$
(valid for gate opening higher than the downstream water level)
</p>
<h5>Partially submerged</h5>
<p>
$$Q = C_d W T^{T_E} B^{B_E} (3H)^{H_E} \\sqrt{2g} \\tag{2} $$
(valid for the region where the ratio of downstream water level to upstream water level (<code>H_ratio = h_o/h_i</code>) is between 0.67 and 0.8)
</p>
<h5>Fully submerged</h5>
<p>
$$Q = C_{dx} A \\sqrt{2gH} \\tag{3}$$
(otherwise with <code>Cdx</code> being a discharge coefficient tuned for a smooth transition between partially and fully submerged)
</p>
<p>
<strong>Note:</strong>
The use of <code>Cdx</code> is different to the implementaion as done in HEC-RAS. This was done in order to have a smoother transition from the partially to fully submerged region.
</p>
</html>"));
end TainterGate;
1 change: 1 addition & 0 deletions OpenHPL/Waterway/package.order
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Pipe
PenstockKP
SurgeTank
Reservoir
TainterGate
RunOff_zones
RunOff_zones_input
VolumeFlowSource
Expand Down

0 comments on commit 45d5fec

Please sign in to comment.