From fa61253e6ac406a481aed90ec528ad3c4f36a986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Wed, 11 Feb 2026 14:37:17 +0100 Subject: [PATCH 01/20] Added base class TorqueEquation --- OpenHPLTest/TorqueEquation.mo | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/OpenHPLTest/TorqueEquation.mo b/OpenHPLTest/TorqueEquation.mo index ed03c8b..dec9066 100644 --- a/OpenHPLTest/TorqueEquation.mo +++ b/OpenHPLTest/TorqueEquation.mo @@ -2,36 +2,4 @@ within OpenHPLTest; package TorqueEquation extends Modelica.Icons.ExamplesPackage; - import SI = Modelica.Units.SI; - // - - model TorqueElement - extends OpenHPL.Icons.ElectroMech; - extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation; - equation - - end TorqueElement; - - model TorqueTest - extends Modelica.Icons.Example; - // - parameter SI.Torque shaftTorque0 = 1.e+03; - SI.Torque shaftTorque; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-52, 74}, extent = {{-10, -10}, {10, 10}}))); - TorqueElement te1(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 10) annotation( - Placement(transformation(origin = {-30, 52}, extent = {{-10, -10}, {10, 10}}))); - TorqueElement te2(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 22) annotation( - Placement(transformation(origin = {-30, 24}, extent = {{-10, -10}, {10, 10}}))); - equation - if (time > 0.1 and time < 0.4) then - shaftTorque = shaftTorque0; - elseif (time > 0.5 and time < 0.8) then - shaftTorque = -shaftTorque0; - else - shaftTorque = 0.0; - end if; - annotation( - Diagram(coordinateSystem(extent = {{-80, 80}, {-20, 0}}))); -end TorqueTest; end TorqueEquation; From e3cdf2f7f29bc243278385d103306107e6483dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Tue, 17 Feb 2026 12:46:59 +0100 Subject: [PATCH 02/20] Added f_grid - grid frequency to Data, corrected reference speed for normalization of speed (to p.u.) in Power2Torque and TorqueEquation. Added test case for TorqueEquation in OpenHPLTest --- OpenHPLTest/TorqueEquation.mo | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/OpenHPLTest/TorqueEquation.mo b/OpenHPLTest/TorqueEquation.mo index dec9066..ed03c8b 100644 --- a/OpenHPLTest/TorqueEquation.mo +++ b/OpenHPLTest/TorqueEquation.mo @@ -2,4 +2,36 @@ within OpenHPLTest; package TorqueEquation extends Modelica.Icons.ExamplesPackage; + import SI = Modelica.Units.SI; + // + + model TorqueElement + extends OpenHPL.Icons.ElectroMech; + extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation; + equation + + end TorqueElement; + + model TorqueTest + extends Modelica.Icons.Example; + // + parameter SI.Torque shaftTorque0 = 1.e+03; + SI.Torque shaftTorque; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-52, 74}, extent = {{-10, -10}, {10, 10}}))); + TorqueElement te1(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 10) annotation( + Placement(transformation(origin = {-30, 52}, extent = {{-10, -10}, {10, 10}}))); + TorqueElement te2(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 22) annotation( + Placement(transformation(origin = {-30, 24}, extent = {{-10, -10}, {10, 10}}))); + equation + if (time > 0.1 and time < 0.4) then + shaftTorque = shaftTorque0; + elseif (time > 0.5 and time < 0.8) then + shaftTorque = -shaftTorque0; + else + shaftTorque = 0.0; + end if; + annotation( + Diagram(coordinateSystem(extent = {{-80, 80}, {-20, 0}}))); +end TorqueTest; end TorqueEquation; From 6da79bc90100f27cf4261ad430c4db513678df73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Wed, 11 Feb 2026 14:18:02 +0100 Subject: [PATCH 03/20] First version of turbine model based on empirical data --- .../ElectroMech/Turbines/EmpiricalTurbine.mo | 26 ++++++ OpenHPL/ElectroMech/Turbines/package.order | 1 + OpenHPL/Functions/TurbineLookUp.mo | 79 +++++++++++++++++++ OpenHPL/Functions/WeightedControlPoints.mo | 46 +++++++++++ OpenHPL/Functions/deCasteljau.mo | 31 ++++++++ OpenHPL/Functions/package.order | 3 + OpenHPL/Types/HillChart.mo | 14 ++++ OpenHPL/Types/TurbineData.mo | 28 +++++++ OpenHPL/Types/package.order | 2 + 9 files changed, 230 insertions(+) create mode 100644 OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo create mode 100644 OpenHPL/Functions/TurbineLookUp.mo create mode 100644 OpenHPL/Functions/WeightedControlPoints.mo create mode 100644 OpenHPL/Functions/deCasteljau.mo create mode 100644 OpenHPL/Types/HillChart.mo create mode 100644 OpenHPL/Types/TurbineData.mo diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo new file mode 100644 index 0000000..9f724d5 --- /dev/null +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -0,0 +1,26 @@ +within OpenHPL.ElectroMech.Turbines; + +model EmpiricalTurbine + extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation(torque.y=Tt,speedSensor.w=2*nrps*C.pi); + extends OpenHPL.Interfaces.TurbineContacts(u_t=opening); + extends OpenHPL.Icons.Turbine; + // + parameter Boolean SteadyState = false "If true, starts in steady state" annotation( + Dialog(group = "Initialization")); + parameter OpenHPL.Types.HillChart hillChart; + parameter OpenHPL.Types.TurbineData turbineData; + SI.Length Ht "Turbine head"; + SI.VolumeFlowRate Qt "Turbine flow rate"; + + SI.Torque Tt "Turbine torque"; +protected + Real opening; + SI.Frequency nrps "Rotational speed (in rotations per seconds)"; +equation + Ht = (i.p - o.p)/(data.rho*data.g); + i.mdot + o.mdot = 0; + i.mdot = Qt*data.rho; + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, hillChart); +annotation( + Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.")); +end EmpiricalTurbine; diff --git a/OpenHPL/ElectroMech/Turbines/package.order b/OpenHPL/ElectroMech/Turbines/package.order index 66a526c..82b07e8 100644 --- a/OpenHPL/ElectroMech/Turbines/package.order +++ b/OpenHPL/ElectroMech/Turbines/package.order @@ -1,3 +1,4 @@ Turbine Francis Pelton +EmpiricalTurbine diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo new file mode 100644 index 0000000..d5eea1d --- /dev/null +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -0,0 +1,79 @@ +within OpenHPL.Functions; + +function TurbineLookUp + extends Modelica.Icons.Function; + // + input SI.Length Ht; + input SI.Frequency nrps; + input Real opening; + input OpenHPL.Types.TurbineData td "Turbine data"; + input OpenHPL.Types.HillChart hc "Hill chart"; + output SI.VolumeFlowRate Qt "Discharge"; + output SI.Torque Tt "Hydraulic torque"; +protected + constant Real phi = (1 + sqrt(5))/2 "Golden ratio"; + constant Real resphi = 2 - phi "Reciprocal of golden ratio (0.618...)"; + constant Real eps = 1.0e-08; + constant Integer nitr = 99; + Real a "Current left bound"; + Real b "Current right bound"; + Real t1 "First interior point"; + Real t2 "Second interior point"; + Real f1 "Function value at x1"; + Real f2 "Function value at x2"; + Real x_min "Current estimate of minimum location"; + Real f_min "Current estimate of minimum value"; + Real controlPoints[hc.nPoints, hc.nDim]; + Real[hc.nDim] cP1; + Real[hc.nDim] cP2; + Real target; + Real err; + Integer itr; +algorithm + controlPoints:=WeightedControlPoints(opening,hc); + target:=((nrps*td.Dn)/sqrt(Ht*td.g))/((td.nrps*td.Dn)/sqrt(td.Hbep*td.g)); + a:=0; + b:=1; + itr:=0; + err:=1.e+10; + t1 := a + resphi*(b - a); + cP1 := deCasteljau(t1, hc.nDim, controlPoints); + f1 := sqrt((cP1[1] - target)^2); + t2 := b - resphi*(b - a); + cP2 := deCasteljau(t2, hc.nDim, controlPoints); + f2 := sqrt((cP2[1] - target)^2); + while ((err > eps) and (itr < nitr)) loop + if f1 < f2 then +// Minimum is in [a, x2] + b := t2; + t2 := t1; + f2 := f1; + t1 := a + resphi*(b - a); + cP1 :=deCasteljau(t1, hc.nDim, controlPoints); + f1 := sqrt((cP1[1] - target)^2); + else +// Minimum is in [x1, b] + a := t1; + t1 := t2; + f1 := f2; + t2 := b - resphi*(b - a); + cP2 := deCasteljau(t2, hc.nDim, controlPoints); + f2 := sqrt((cP2[1] - target)^2); + end if; + itr := itr + 1; + err := min(f1, f2); + end while; + Qt := (cP1[2] + cP2[2])*0.5*(td.Qbep*sqrt(Ht/td.Hbep)); + Tt := (cP1[3] + cP2[3])*0.5*(td.Tbep*(Ht/td.Hbep)); + +annotation( + Documentation(info = " +

Compute the physical discharge and torque based on the speed [nrps] head [Ht] and opening. The algorithm is briely summarized below. +

    +
  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. +
  3. Use golden section search to find the correct position along the speed curve
  4. +
  5. Compute physcal discharge and torqu based on normalized unit data and the turbine information
  6. +

")); + + +end TurbineLookUp; diff --git a/OpenHPL/Functions/WeightedControlPoints.mo b/OpenHPL/Functions/WeightedControlPoints.mo new file mode 100644 index 0000000..07f9f5c --- /dev/null +++ b/OpenHPL/Functions/WeightedControlPoints.mo @@ -0,0 +1,46 @@ +within OpenHPL.Functions; + +function WeightedControlPoints +extends Modelica.Icons.Function; + /* + */ + input Real opening; + input OpenHPL.Types.HillChart hc "Hill chart"; + output Real data[hc.nPoints, hc.nDim]; +protected + Real td[hc.nPoints, hc.nDim]; + Real beta; + Integer i; + +algorithm +//if (opening >= hc.opening[1] and opening <= hc.opening[hc.nPoints]) then + i:=1; + while (i < hc.nCurves ) loop + if (opening < hc.opening[i]) then +// Defined as closed guide vanes + for j in 1:hc.nPoints loop + td[j,1] := hc.data[1, j, 1]; + td[j,2] := 0.0; +// Torque set to zero. Must be corrected in the future + td[j,3] := 0.0 ; + end for; + break; + elseif ( (hc.opening[i] <= opening) and (opening <= hc.opening[i+1]) ) then + beta:=(opening-hc.opening[i])/(hc.opening[i+1]-hc.opening[i]); + for j in 1:hc.nPoints loop + for k in 1:hc.nDim loop + td[j,k] := (1.-beta)*hc.data[i, j, k]+ beta*hc.data[i+1, j, k] ; + end for; + end for; + break; + else + i:=i+1; + end if; + end while; + + data:=td; +annotation( + Documentation(info = "Compute an intermediate turbine characteristics based on linear interpolation of the two closest curves. The turbine opening is used as argument for finding the closest curves. Assumes that the opening in the HillChart data is monotonously increasing. If data at small opening is missing, the flow and speed data for the first curve is used and the torque is set to zero.")); + + +end WeightedControlPoints; diff --git a/OpenHPL/Functions/deCasteljau.mo b/OpenHPL/Functions/deCasteljau.mo new file mode 100644 index 0000000..ce9fca4 --- /dev/null +++ b/OpenHPL/Functions/deCasteljau.mo @@ -0,0 +1,31 @@ +within OpenHPL.Functions; + +function deCasteljau + extends Modelica.Icons.Function; + input Real t "Parameter between 0 and 1"; + input Integer ndim "Dimensional space"; + input Real[:, ndim] controlPoints "Array of control points [n,ndim]"; + output Real[ndim] point "Computed point on the curve"; +protected + Integer n = size(controlPoints, 1); + Real temp[n, ndim]; +algorithm +// Initialize temp with control points + temp := controlPoints; +// Perform De Casteljau iterations + for r in 1:n - 1 loop + for i in 1:n - r loop + for k in 1:ndim loop + temp[i, k] := (1 - t)*temp[i, k] + t*temp[i + 1, k]; + end for; + end for; + end for; +// The first element now contains the point on the curve +for k in 1:ndim loop + point[k] := temp[1, k]; +end for; +annotation( + Documentation(info = "Implementation of Bezier curve evaluation using the deCasteljau algorithm.
At the moment only one single Bezier curve per parameter dimension is assumed, but the order of the curve is arbritray, but define by the number of control points (e.g. curve order = number of control points - 1).
")); + + +end deCasteljau; diff --git a/OpenHPL/Functions/package.order b/OpenHPL/Functions/package.order index 13c1d01..cafba8e 100644 --- a/OpenHPL/Functions/package.order +++ b/OpenHPL/Functions/package.order @@ -1,3 +1,6 @@ Fitting DarcyFriction KP07 +deCasteljau +WeightedControlPoints +TurbineLookUp diff --git a/OpenHPL/Types/HillChart.mo b/OpenHPL/Types/HillChart.mo new file mode 100644 index 0000000..a94abc2 --- /dev/null +++ b/OpenHPL/Types/HillChart.mo @@ -0,0 +1,14 @@ +within OpenHPL.Types; + +record HillChart + extends Modelica.Icons.Record; + parameter Integer nCurves; + parameter Integer nPoints; + parameter Integer nDim "parameter space, currently 3"; + parameter Real opening[nCurves]; + parameter Real data[nCurves, nPoints, nDim]; + + annotation( + Documentation(info = "
This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for
a number of normalized openings. 

The HillChart record contains three integer values:
1) nCurves - number of Bezier curves
2) nPoints - number of Bezier control points (order of curve +1)
3) nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

The data itself is contained in two multidimensional arrays
opening[nCurves] - gives the opening $$\in [0,1]$$ for each curve. It is assumed that the array is sorted from smallest to larges value.
data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED) 
")); + +end HillChart; diff --git a/OpenHPL/Types/TurbineData.mo b/OpenHPL/Types/TurbineData.mo new file mode 100644 index 0000000..126fd2a --- /dev/null +++ b/OpenHPL/Types/TurbineData.mo @@ -0,0 +1,28 @@ +within OpenHPL.Types; + +record TurbineData + extends Modelica.Icons.Record; + // + parameter SI.Length Dn "Nominal diameter"; + parameter SI.Frequency nrps "Best efficiency rotational speed"; + parameter SI.Length Hbep "Best efficiency head"; + parameter SI.VolumeFlowRate Qbep "Best efficiency discharge"; + parameter SI.Torque Tbep "Best efficiency shaft torque"; + parameter Real openingBep "Best efficiency opening"; + parameter SI.Acceleration g; + parameter SI.Density rho; + + annotation( + Documentation(info = "Data record with key turbine information. Used together with the normalized turbine characteristics to calculate physical values.

+ + + + + + + + + +
VariableDescription
Dn [m]Nominal diameter
nrps [1/s]Best efficiency rotational speed
Hbep [m]Best efficiency head
Qbep [m³/s]Best efficiency discharge
Tbep [Nm]Best efficiency torque
openingBep [-]Normalize best efficiency opening (must be between 0 and 1)
")); + +end TurbineData; diff --git a/OpenHPL/Types/package.order b/OpenHPL/Types/package.order index d23f790..4c407d8 100644 --- a/OpenHPL/Types/package.order +++ b/OpenHPL/Types/package.order @@ -4,3 +4,5 @@ Fitting FrictionMethod Lambda SurgeTank +HillChart +TurbineData From 6a950589d3ab20aa3daf41eef78a43618a104576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Thu, 26 Feb 2026 16:39:14 +0100 Subject: [PATCH 04/20] Updated Empirical turbine and added tests package under OpenHPLTest --- .../ElectroMech/Turbines/EmpiricalTurbine.mo | 4 +- OpenHPL/Functions/TurbineLookUp.mo | 2 +- OpenHPL/Functions/WeightedControlPoints.mo | 2 +- OpenHPL/Types/ReactionTurbines.mo | 13 ++ ...HillChart.mo => TurbineCharacteristics.mo} | 4 +- OpenHPL/Types/package.order | 3 +- OpenHPLTest/EmpiricalTurbine.mo | 190 ++++++++++++++++++ OpenHPLTest/package.order | 1 + 8 files changed, 212 insertions(+), 7 deletions(-) create mode 100644 OpenHPL/Types/ReactionTurbines.mo rename OpenHPL/Types/{HillChart.mo => TurbineCharacteristics.mo} (95%) create mode 100644 OpenHPLTest/EmpiricalTurbine.mo diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo index 9f724d5..e44bc17 100644 --- a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -7,7 +7,7 @@ model EmpiricalTurbine // parameter Boolean SteadyState = false "If true, starts in steady state" annotation( Dialog(group = "Initialization")); - parameter OpenHPL.Types.HillChart hillChart; + parameter OpenHPL.Types.TurbineCharacteristics turbineCharacteristics; parameter OpenHPL.Types.TurbineData turbineData; SI.Length Ht "Turbine head"; SI.VolumeFlowRate Qt "Turbine flow rate"; @@ -20,7 +20,7 @@ equation Ht = (i.p - o.p)/(data.rho*data.g); i.mdot + o.mdot = 0; i.mdot = Qt*data.rho; - (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, hillChart); + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, turbineCharacteristics); annotation( Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.")); end EmpiricalTurbine; diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index d5eea1d..c7e13a4 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -7,7 +7,7 @@ function TurbineLookUp input SI.Frequency nrps; input Real opening; input OpenHPL.Types.TurbineData td "Turbine data"; - input OpenHPL.Types.HillChart hc "Hill chart"; + input OpenHPL.Types.TurbineCharacteristics hc "Turbine characteristics"; output SI.VolumeFlowRate Qt "Discharge"; output SI.Torque Tt "Hydraulic torque"; protected diff --git a/OpenHPL/Functions/WeightedControlPoints.mo b/OpenHPL/Functions/WeightedControlPoints.mo index 07f9f5c..9eca9b7 100644 --- a/OpenHPL/Functions/WeightedControlPoints.mo +++ b/OpenHPL/Functions/WeightedControlPoints.mo @@ -5,7 +5,7 @@ extends Modelica.Icons.Function; /* */ input Real opening; - input OpenHPL.Types.HillChart hc "Hill chart"; + input OpenHPL.Types.TurbineCharacteristics hc "Turbine characteristics"; output Real data[hc.nPoints, hc.nDim]; protected Real td[hc.nPoints, hc.nDim]; diff --git a/OpenHPL/Types/ReactionTurbines.mo b/OpenHPL/Types/ReactionTurbines.mo new file mode 100644 index 0000000..90bccdb --- /dev/null +++ b/OpenHPL/Types/ReactionTurbines.mo @@ -0,0 +1,13 @@ +within OpenHPL.Types; + +record ReactionTurbines "Collection of empirical turbine characteristics for use together with the EmpiricalTurbine model" + extends Modelica.Icons.Record; + protected + parameter Real oA[5]={0.10,0.25,0.50,0.75,1.00}; + parameter Real cP1[5,4,3]={{{ 0.00,0.27,0.45 },{ 0.58,0.33,0.42 },{ 1.04,0.16,0.11 },{ 1.43,-0.13,-0.42 }},{{ 0.00,0.64,1.17 },{ 0.70,0.74,1.04 },{ 1.13,0.31,0.13 },{ 1.43,-0.17,-0.50 }},{{ 0.00,1.25,2.27 },{ 0.90,1.30,1.71 },{ 1.29,0.53,-0.05 },{ 1.43,-0.18,-0.52 }},{{ 0.00,1.71,2.95 },{ 1.05,1.71,1.99 },{ 1.31,0.63,-0.17 },{ 1.44,-0.16,-0.53 }},{{ 0.00,2.10,3.41 },{ 1.15,1.98,2.04 },{ 1.31,0.76,-0.18 },{ 1.45,-0.13,-0.54 }}}; + + parameter Real cP2[5,4,3]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + public + TurbineCharacteristics turbine1(nCurves = 5, nDim = 3, nPoints = 4, opening = oA, data = cPoints) "N_QE=0.07"; + TurbineCharacteristics turbine2(nCurves = 5, nDim = 3, nPoints = 4, opening = oA, data = cPoints) "N_EQ=0.20"; +end ReactionTurbines; diff --git a/OpenHPL/Types/HillChart.mo b/OpenHPL/Types/TurbineCharacteristics.mo similarity index 95% rename from OpenHPL/Types/HillChart.mo rename to OpenHPL/Types/TurbineCharacteristics.mo index a94abc2..7814a95 100644 --- a/OpenHPL/Types/HillChart.mo +++ b/OpenHPL/Types/TurbineCharacteristics.mo @@ -1,6 +1,6 @@ within OpenHPL.Types; -record HillChart +record TurbineCharacteristics extends Modelica.Icons.Record; parameter Integer nCurves; parameter Integer nPoints; @@ -11,4 +11,4 @@ record HillChart annotation( Documentation(info = "
This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for
a number of normalized openings. 

The HillChart record contains three integer values:
1) nCurves - number of Bezier curves
2) nPoints - number of Bezier control points (order of curve +1)
3) nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

The data itself is contained in two multidimensional arrays
opening[nCurves] - gives the opening $$\in [0,1]$$ for each curve. It is assumed that the array is sorted from smallest to larges value.
data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED) 
")); -end HillChart; +end TurbineCharacteristics; diff --git a/OpenHPL/Types/package.order b/OpenHPL/Types/package.order index 4c407d8..553b604 100644 --- a/OpenHPL/Types/package.order +++ b/OpenHPL/Types/package.order @@ -4,5 +4,6 @@ Fitting FrictionMethod Lambda SurgeTank -HillChart TurbineData +TurbineCharacteristics +ReactionTurbines diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo new file mode 100644 index 0000000..e3ba4b0 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -0,0 +1,190 @@ +within OpenHPLTest; + +package EmpiricalTurbine + extends Modelica.Icons.ExamplesPackage; + + package TestBasicFunctions + extends Modelica.Icons.ExamplesPackage; + // + model Test01_BezierCurve + extends Modelica.Icons.Example; + Real[ndim] curvePoint; + protected + constant Integer ndim=3; + parameter Real controlPoints[6, ndim]={{ 0.00,1.46,2.60 },{ 0.53,1.45,2.33 },{ 0.77,1.19,1.80 },{ 1.63,0.86,-0.58 },{ 1.13,0.24,0.31 },{ 1.43,-0.17,-0.52 }}; + equation + curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); + annotation( + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001)); +end Test01_BezierCurve; + // + model Test02_ControlPoints + extends Modelica.Icons.Example; + // + protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; + parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + + Real cPoints1[NP, ND],cPoints2[NP, ND],cPoints3[NP, ND]; + Real[ND] curvePoint1,curvePoint2,curvePoint3; + equation + + cPoints1 = OpenHPL.Functions.WeightedControlPoints(0.3, tc); + curvePoint1 = OpenHPL.Functions.deCasteljau(time, ND,cPoints1); + + + cPoints2 = OpenHPL.Functions.WeightedControlPoints(0.5, tc); + curvePoint2 = OpenHPL.Functions.deCasteljau(time, ND,cPoints2); + + + cPoints3 = OpenHPL.Functions.WeightedControlPoints(0.67, tc); + curvePoint3 = OpenHPL.Functions.deCasteljau(time, ND,cPoints3); + + annotation( + Documentation(info = "Test basic functions for finding intermediate control points and evaluate Bezier curve."), + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); +end Test02_ControlPoints; + end TestBasicFunctions; + + package TurbineTest + extends Modelica.Icons.ExamplesPackage; + import SI=Modelica.Units.SI; + + model Test01_TurbineLookUp + extends Modelica.Icons.Example; + protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; + parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + public + Real opening; + SI.Length Ht "Turbine head"; + SI.VolumeFlowRate Qt "Turbine flow rate"; + SI.Frequency nrps "Rotational speed"; + SI.Torque Tt "Turbine torque"; + + equation + Ht=425.0; + nrps=1.0e-03+8.33*time*1.4; + opening = 0.6; + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, td, tc); + annotation( + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001)); +end Test01_TurbineLookUp; + // + model Test02_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); + + protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; + parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + + public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(overvann.o, turbine.i) annotation( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + + end Test02_Turbin; + + // + model Test03_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); + + protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; + parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + + public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(overvann.o, turbine.i) annotation( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + + end Test03_Turbin; + + + + // + model Test04_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); + + protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; + parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + + public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + + equation + connect(overvann.o, turbine.i) annotation( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(ramp.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + + end Test04_Turbin; + + end TurbineTest; +end EmpiricalTurbine; diff --git a/OpenHPLTest/package.order b/OpenHPLTest/package.order index e2e7c76..d5fcdee 100644 --- a/OpenHPLTest/package.order +++ b/OpenHPLTest/package.order @@ -72,3 +72,4 @@ HPSTSimple HPSTAirCushion HPSTSharpOrifice HPSTThrottleValve +EmpiricalTurbine From 4421bae44e82649c7e62215abaabba2f970729f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Thu, 26 Feb 2026 21:32:26 +0100 Subject: [PATCH 05/20] Some updates to the turbine testing --- OpenHPLTest/EmpiricalTurbine.mo | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo index e3ba4b0..c947568 100644 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -15,7 +15,8 @@ package EmpiricalTurbine equation curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); annotation( - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001)); + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), + Documentation(info = "Basic test of evaluation of Bezier curve using deCasteljau algorithm.


")); end Test01_BezierCurve; // model Test02_ControlPoints @@ -79,7 +80,8 @@ end Test02_ControlPoints; opening = 0.6; (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, td, tc); annotation( - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001)); + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), + Documentation(info = "Basic test of Empirical turbine mode. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.")); end Test01_TurbineLookUp; // model Test02_Turbin @@ -101,7 +103,7 @@ end Test01_TurbineLookUp; Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); @@ -113,7 +115,9 @@ end Test01_TurbineLookUp; connect(const.y, turbine.u_t) annotation( Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - end Test02_Turbin; + annotation( + Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.

")); +end Test02_Turbin; // model Test03_Turbin @@ -187,4 +191,4 @@ end Test01_TurbineLookUp; end Test04_Turbin; end TurbineTest; -end EmpiricalTurbine; +end EmpiricalTurbine; \ No newline at end of file From 49419a2338738aae68dd1f92329c270443b0d609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Fri, 27 Feb 2026 11:59:44 +0100 Subject: [PATCH 06/20] Continued testing of empirical turbine model --- .../ElectroMech/Turbines/EmpiricalTurbine.mo | 4 +- OpenHPL/Functions/TurbineLookUp.mo | 3 +- OpenHPL/Types/TurbineCharacteristics.mo | 2 +- OpenHPLTest/EmpiricalTurbine.mo | 333 +++++++++--------- 4 files changed, 170 insertions(+), 172 deletions(-) diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo index e44bc17..3d5b441 100644 --- a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -17,10 +17,10 @@ protected Real opening; SI.Frequency nrps "Rotational speed (in rotations per seconds)"; equation - Ht = (i.p - o.p)/(data.rho*data.g); + Ht = abs(i.p - o.p)/(data.rho*data.g); i.mdot + o.mdot = 0; i.mdot = Qt*data.rho; (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, turbineCharacteristics); annotation( - Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.")); + Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.
In this intial release, the turbine characteristics and tubine data must be constructed separately passed to the model. This may change in future releases.
")); end EmpiricalTurbine; diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index c7e13a4..528d5eb 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -31,7 +31,8 @@ protected Integer itr; algorithm controlPoints:=WeightedControlPoints(opening,hc); - target:=((nrps*td.Dn)/sqrt(Ht*td.g))/((td.nrps*td.Dn)/sqrt(td.Hbep*td.g)); + // Modelica.Utilities.Streams.print("Ht = " + String(Ht)); + target:=((nrps*td.Dn)/sqrt(max(abs(Ht),eps)*td.g))/((td.nrps*td.Dn)/sqrt(td.Hbep*td.g)); a:=0; b:=1; itr:=0; diff --git a/OpenHPL/Types/TurbineCharacteristics.mo b/OpenHPL/Types/TurbineCharacteristics.mo index 7814a95..8999d8b 100644 --- a/OpenHPL/Types/TurbineCharacteristics.mo +++ b/OpenHPL/Types/TurbineCharacteristics.mo @@ -9,6 +9,6 @@ record TurbineCharacteristics parameter Real data[nCurves, nPoints, nDim]; annotation( - Documentation(info = "
This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for
a number of normalized openings. 

The HillChart record contains three integer values:
1) nCurves - number of Bezier curves
2) nPoints - number of Bezier control points (order of curve +1)
3) nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

The data itself is contained in two multidimensional arrays
opening[nCurves] - gives the opening $$\in [0,1]$$ for each curve. It is assumed that the array is sorted from smallest to larges value.
data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED) 
")); + Documentation(info = "
This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for
a number of normalized openings. 

The HillChart record contains three integer values:
1) nCurves - number of Bezier curves
2) nPoints - number of Bezier control points (order of curve +1)
3) nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

The data itself is contained in two multidimensional arrays
opening[nCurves] - gives the opening $$\\in [0,1]$$ for each curve. It is assumed that the array is sorted from smallest to larges value.
data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED) 
")); end TurbineCharacteristics; diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo index c947568..918ab5d 100644 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -6,189 +6,186 @@ package EmpiricalTurbine package TestBasicFunctions extends Modelica.Icons.ExamplesPackage; // + model Test01_BezierCurve - extends Modelica.Icons.Example; + extends Modelica.Icons.Example; Real[ndim] curvePoint; - protected - constant Integer ndim=3; - parameter Real controlPoints[6, ndim]={{ 0.00,1.46,2.60 },{ 0.53,1.45,2.33 },{ 0.77,1.19,1.80 },{ 1.63,0.86,-0.58 },{ 1.13,0.24,0.31 },{ 1.43,-0.17,-0.52 }}; - equation - curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); - annotation( + protected + constant Integer ndim = 3; + parameter Real controlPoints[6, ndim] = {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}; + equation + curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); + annotation( experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), - Documentation(info = "Basic test of evaluation of Bezier curve using deCasteljau algorithm.


")); -end Test01_BezierCurve; + Documentation(info = "Basic test of evaluation of Bezier curve using deCasteljau algorithm.
Parametric curve plot of curvePoint[1] againts curvPoint[2] should show a smooth trajectory of QED vs nED.


")); + end Test01_BezierCurve; + // + model Test02_ControlPoints - extends Modelica.Icons.Example; - // + extends Modelica.Icons.Example; + // protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; - parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public - - Real cPoints1[NP, ND],cPoints2[NP, ND],cPoints3[NP, ND]; - Real[ND] curvePoint1,curvePoint2,curvePoint3; - equation - - cPoints1 = OpenHPL.Functions.WeightedControlPoints(0.3, tc); - curvePoint1 = OpenHPL.Functions.deCasteljau(time, ND,cPoints1); - - - cPoints2 = OpenHPL.Functions.WeightedControlPoints(0.5, tc); - curvePoint2 = OpenHPL.Functions.deCasteljau(time, ND,cPoints2); - - - cPoints3 = OpenHPL.Functions.WeightedControlPoints(0.67, tc); - curvePoint3 = OpenHPL.Functions.deCasteljau(time, ND,cPoints3); - - annotation( - Documentation(info = "Test basic functions for finding intermediate control points and evaluate Bezier curve."), - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); -end Test02_ControlPoints; + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + Real cPoints1[NP, ND], cPoints2[NP, ND], cPoints3[NP, ND]; + Real[ND] curvePoint1, curvePoint2, curvePoint3; + equation + cPoints1 = OpenHPL.Functions.WeightedControlPoints(0.3, tc); + curvePoint1 = OpenHPL.Functions.deCasteljau(time, ND, cPoints1); + cPoints2 = OpenHPL.Functions.WeightedControlPoints(0.5, tc); + curvePoint2 = OpenHPL.Functions.deCasteljau(time, ND, cPoints2); + cPoints3 = OpenHPL.Functions.WeightedControlPoints(0.67, tc); + curvePoint3 = OpenHPL.Functions.deCasteljau(time, ND, cPoints3); + annotation( + Documentation(info = "Test basic functions for finding intermediate control points and evaluate Bezier curve.
Computes three curve trajectories as weighted intermediate curves. Parametrci curve plot of curvePoints1[1] against  curvePoints1[2] and similar for curvePonts2 and curvePoints3 should show smooth curves 2D curves.
"), + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); + end Test02_ControlPoints; end TestBasicFunctions; package TurbineTest extends Modelica.Icons.ExamplesPackage; - import SI=Modelica.Units.SI; - + import SI = Modelica.Units.SI; + model Test01_TurbineLookUp - extends Modelica.Icons.Example; + extends Modelica.Icons.Example; protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; - parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = 9.81, rho = 997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public public - Real opening; - SI.Length Ht "Turbine head"; - SI.VolumeFlowRate Qt "Turbine flow rate"; - SI.Frequency nrps "Rotational speed"; - SI.Torque Tt "Turbine torque"; - - equation - Ht=425.0; - nrps=1.0e-03+8.33*time*1.4; - opening = 0.6; - (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, td, tc); - annotation( + Real opening; + SI.Length Ht "Turbine head"; + SI.VolumeFlowRate Qt "Turbine flow rate"; + SI.Frequency nrps "Rotational speed"; + SI.Torque Tt "Turbine torque"; + equation + Ht = 425.0; + nrps = 1.0e-03 + 8.33*time*1.4; + opening = 0.6; + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, td, tc); + annotation( experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), - Documentation(info = "Basic test of Empirical turbine mode. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.")); -end Test01_TurbineLookUp; - // - model Test02_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); - + Documentation(info = "Basic test of  the turbine lookup function. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.
Running the model the turbine flow Qt or turbine torque Tt can be ploted as function of time.
")); + end Test01_TurbineLookUp; + + // + + model Test02_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-84, 82}, extent = {{-10, -10}, {10, 10}}))); protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; - parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - - public - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - equation - connect(overvann.o, turbine.i) annotation( - Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(const.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - - annotation( - Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.

")); -end Test02_Turbin; - - // - model Test03_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); - + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( + Placement(transformation(origin = {-82, 54}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(overvann.o, turbine.i) annotation( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + annotation( + Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.
Initial speed f_0 is set to 0.2 and the turbine is permitted to speed up as function of computed turbine torque Tt.

"), + experiment(StartTime = 0, StopTime = 20, Tolerance = 1e-06, Interval = 0.001)); + end Test02_Turbin; + + // + + model Test03_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation( + Placement(transformation(origin = {-44, 32}, extent = {{-10, -10}, {10, 10}}))); + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( + Placement(transformation(origin = {-82, 62}, extent = {{-10, -10}, {10, 10}}))); protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; - parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - - public - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - equation - connect(overvann.o, turbine.i) annotation( - Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(const.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - - end Test03_Turbin; - - - - // - model Test04_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); - + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-80, 32}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, enable_f = true, f_0 = 0.2) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + connect(overvann.o, tunnel.i) annotation( + Line(points = {{-70, 32}, {-54, 32}}, color = {0, 128, 255})); + connect(tunnel.o, turbine.i) annotation( + Line(points = {{-34, 32}, {-24, 32}, {-24, 12}, {2, 12}}, color = {0, 128, 255})); + annotation( + experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.01), + Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway.")); + end Test03_Turbin; + + // + + model Test04_Turbin + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC]={0.10,0.25,0.50,0.75,1.00}; - parameter Real controlPoints[NC,NP,ND]={{{ 0.00,0.18,0.26 },{ 0.41,0.10,0.17 },{ 1.04,0.31,0.25 },{ 1.32,-0.04,-0.21 }},{{ 0.00,0.44,0.73 },{ 0.43,0.37,0.67 },{ 1.27,0.55,0.29 },{ 1.38,0.00,-0.19 }},{{ 0.00,0.91,1.55 },{ 0.59,0.89,1.33 },{ 1.57,0.79,0.19 },{ 1.51,0.00,-0.29 }},{{ 0.00,1.30,2.11 },{ 0.78,1.33,1.77 },{ 1.72,0.92,-0.12 },{ 1.58,0.00,-0.28 }},{{ 0.00,1.57,2.41 },{ 0.92,1.63,1.91 },{ 1.82,1.02,-0.30 },{ 1.63,0.00,-0.35 }}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95,Tbep=1.718E+06, openingBep = 0.601,g=9.81,rho=997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - - public - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - - equation - connect(overvann.o, turbine.i) annotation( - Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(ramp.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - - end Test04_Turbin; - + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = 9.81, rho = 997.0); + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(overvann.o, turbine.i) annotation( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(ramp.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + end Test04_Turbin; end TurbineTest; -end EmpiricalTurbine; \ No newline at end of file +end EmpiricalTurbine; From 987e90effd385751abb4d9830ec40d310d9ee955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Fri, 27 Feb 2026 13:01:42 +0100 Subject: [PATCH 07/20] Continue to update testing. Currently there are numerical issues with the pipe + turbine model. --- OpenHPLTest/EmpiricalTurbine.mo | 112 ++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 49 deletions(-) diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo index 918ab5d..e3b6656 100644 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -51,18 +51,34 @@ package EmpiricalTurbine package TurbineTest extends Modelica.Icons.ExamplesPackage; import SI = Modelica.Units.SI; - - model Test01_TurbineLookUp + + partial model AbstractTurbineTest extends Modelica.Icons.Example; - protected - constant Integer NC = 5; + inner OpenHPL.Data data annotation( + Placement(transformation(origin = {-84, 82}, extent = {{-10, -10}, {10, 10}}))); + protected + constant Integer NC = 11; + constant Integer NP = 6; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.014, 0.030, 0.050, 0.100, 0.200, 0.300, 0.400, 0.500, 0.601, 0.800, 1.000}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.07, 0.07}, {0.30, 0.10, 0.07}, {0.54, -0.07, -0.03}, {0.92, 0.25, 0.13}, {1.13, -0.11, -0.17}, {1.43, -0.06, -0.31}}, {{0.00, 0.11, 0.15}, {0.32, 0.15, 0.17}, {0.51, -0.06, -0.09}, {1.00, 0.35, 0.35}, {1.11, -0.12, -0.30}, {1.43, -0.09, -0.31}}, {{0.00, 0.15, 0.23}, {0.34, 0.21, 0.24}, {0.47, -0.08, -0.01}, {1.07, 0.46, 0.35}, {1.09, -0.15, -0.24}, {1.43, -0.11, -0.37}}, {{0.00, 0.27, 0.45}, {0.37, 0.30, 0.40}, {0.40, 0.05, 0.30}, {1.38, 0.60, 0.26}, {0.97, -0.19, -0.17}, {1.43, -0.13, -0.42}}, {{0.00, 0.51, 0.92}, {0.40, 0.53, 0.80}, {0.45, 0.31, 0.83}, {1.48, 0.75, 0.14}, {0.99, -0.14, -0.06}, {1.44, -0.17, -0.49}}, {{0.00, 0.77, 1.41}, {0.44, 0.79, 1.23}, {0.51, 0.56, 1.29}, {1.62, 0.82, -0.14}, {0.99, -0.05, 0.11}, {1.43, -0.18, -0.51}}, {{0.00, 1.01, 1.87}, {0.48, 1.05, 1.70}, {0.56, 0.74, 1.46}, {1.68, 0.84, -0.35}, {1.03, 0.06, 0.23}, {1.43, -0.19, -0.53}}, {{0.00, 1.25, 2.27}, {0.52, 1.26, 1.99}, {0.63, 1.00, 1.84}, {1.70, 0.83, -0.64}, {1.08, 0.17, 0.35}, {1.43, -0.18, -0.52}}, {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}, {{0.00, 1.79, 3.06}, {0.55, 1.78, 2.77}, {0.99, 1.43, 1.67}, {1.53, 0.94, -0.59}, {1.20, 0.31, 0.28}, {1.45, -0.16, -0.54}}, {{0.00, 2.10, 3.41}, {0.59, 2.02, 2.99}, {1.05, 1.63, 1.56}, {1.53, 1.04, -0.47}, {1.22, 0.40, 0.24}, {1.45, -0.13, -0.54}}}; + /* + constant Integer NC = 5; constant Integer NP = 4; constant Integer ND = 3; parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = 9.81, rho = 997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public + */ + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); + public + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( + Placement(transformation(origin = {-82, 54}, extent = {{-10, -10}, {10, 10}}))); + + + end AbstractTurbineTest; + + model Test01_TurbineLookUp + extends AbstractTurbineTest; public Real opening; SI.Length Ht "Turbine head"; @@ -73,7 +89,7 @@ package EmpiricalTurbine Ht = 425.0; nrps = 1.0e-03 + 8.33*time*1.4; opening = 0.6; - (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, td, tc); + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, tc); annotation( experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), Documentation(info = "Basic test of  the turbine lookup function. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.
Running the model the turbine flow Qt or turbine torque Tt can be ploted as function of time.
")); @@ -82,19 +98,7 @@ package EmpiricalTurbine // model Test02_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-84, 82}, extent = {{-10, -10}, {10, 10}}))); - protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public - parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( - Placement(transformation(origin = {-82, 54}, extent = {{-10, -10}, {10, 10}}))); + extends AbstractTurbineTest; OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( @@ -118,21 +122,11 @@ package EmpiricalTurbine // model Test03_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); + extends AbstractTurbineTest; + + public OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation( Placement(transformation(origin = {-44, 32}, extent = {{-10, -10}, {10, 10}}))); - parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( - Placement(transformation(origin = {-82, 62}, extent = {{-10, -10}, {10, 10}}))); - protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( Placement(transformation(origin = {-80, 32}, extent = {{-10, -10}, {10, 10}}))); @@ -159,26 +153,18 @@ package EmpiricalTurbine // model Test04_Turbin - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-46, 62}, extent = {{-10, -10}, {10, 10}}))); - protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - parameter OpenHPL.Types.TurbineData td(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = 9.81, rho = 997.0); - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public + extends AbstractTurbineTest; + public OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = td, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 1.0, enable_f = true) annotation( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( + Modelica.Blocks.Sources.Ramp ramp(height = -1, duration = 10, offset = 1, startTime = 2) annotation( Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( + Placement(transformation(origin = {-80, 44}, extent = {{-12, 24}, {6, 6}}))); equation connect(overvann.o, turbine.i) annotation( Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); @@ -186,6 +172,34 @@ package EmpiricalTurbine Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); connect(ramp.y, turbine.u_t) annotation( Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - end Test04_Turbin; + annotation( + experiment(StartTime = 0, StopTime = 15, Tolerance = 1e-06, Interval = 0.01)); +end Test04_Turbin; + // + model Test05_Turbin + extends AbstractTurbineTest; + // + public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( + Placement(transformation(origin = {-82, 12}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation( + Placement(transformation(origin = {-42, 12}, extent = {{-10, -10}, {10, 10}}))); + + Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + equation + connect(turbine.o, undervann.o) annotation( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(ramp.y, turbine.u_t) annotation( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + connect(overvann.o, tunnel.i) annotation( + Line(points = {{-72, 12}, {-52, 12}}, color = {0, 128, 255})); + connect(tunnel.o, turbine.i) annotation( + Line(points = {{-32, 12}, {2, 12}}, color = {0, 128, 255})); + end Test05_Turbin; end TurbineTest; end EmpiricalTurbine; From 827d7c3fc80725dafd00989b2b18dc6a5cd2190c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Fri, 27 Feb 2026 13:10:45 +0100 Subject: [PATCH 08/20] Updated annotation string in TurbineLookUp to solve Github error issue. --- OpenHPL/Functions/TurbineLookUp.mo | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index 528d5eb..788ac52 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -31,7 +31,7 @@ protected Integer itr; algorithm controlPoints:=WeightedControlPoints(opening,hc); - // Modelica.Utilities.Streams.print("Ht = " + String(Ht)); + // Added the: max(abs(Ht),eps) due to errors when initializing the model. target:=((nrps*td.Dn)/sqrt(max(abs(Ht),eps)*td.g))/((td.nrps*td.Dn)/sqrt(td.Hbep*td.g)); a:=0; b:=1; @@ -68,13 +68,7 @@ algorithm Tt := (cP1[3] + cP2[3])*0.5*(td.Tbep*(Ht/td.Hbep)); annotation( - Documentation(info = " -

Compute the physical discharge and torque based on the speed [nrps] head [Ht] and opening. The algorithm is briely summarized below. -

    -
  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. -
  3. Use golden section search to find the correct position along the speed curve
  4. -
  5. Compute physcal discharge and torqu based on normalized unit data and the turbine information
  6. -

")); + Documentation(info = " 

TurbineLookUp:

Compute the physical discharge and torque based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that n is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves

")); end TurbineLookUp; From d53a709d426df79882227a66d79dc683c5c4ac4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Fri, 27 Feb 2026 15:19:33 +0100 Subject: [PATCH 09/20] Correcting documentation string to avoid GitHub check error --- OpenHPL/Functions/TurbineLookUp.mo | 2 +- OpenHPL/Functions/deCasteljau.mo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index 788ac52..b3be293 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -68,7 +68,7 @@ algorithm Tt := (cP1[3] + cP2[3])*0.5*(td.Tbep*(Ht/td.Hbep)); annotation( - Documentation(info = " 

TurbineLookUp:

Compute the physical discharge and torque based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that n is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves

")); + Documentation(info = "

Compute the physical discharge (Q) and torque (T) based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that \\(n_{ED}\\) is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves.

")); end TurbineLookUp; diff --git a/OpenHPL/Functions/deCasteljau.mo b/OpenHPL/Functions/deCasteljau.mo index ce9fca4..fc18a27 100644 --- a/OpenHPL/Functions/deCasteljau.mo +++ b/OpenHPL/Functions/deCasteljau.mo @@ -25,7 +25,7 @@ for k in 1:ndim loop point[k] := temp[1, k]; end for; annotation( - Documentation(info = "Implementation of Bezier curve evaluation using the deCasteljau algorithm.
At the moment only one single Bezier curve per parameter dimension is assumed, but the order of the curve is arbritray, but define by the number of control points (e.g. curve order = number of control points - 1).
")); + Documentation(info = "Implementation of Bezier curve evaluation using the deCasteljau algorithm.
At the moment only one single Bezier curve per parameter dimension is assumed, but the order of the curve is arbritray, but define by the number of control points (e.g. curve order = number of control points - 1).")); end deCasteljau; From 35c6b3f6e4a258b25bf3d19925123c07ea8040f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Fri, 27 Feb 2026 15:27:07 +0100 Subject: [PATCH 10/20] Correcting documentation string to avoid GitHub check error --- OpenHPL/Functions/TurbineLookUp.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index b3be293..f1d7686 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -68,7 +68,7 @@ algorithm Tt := (cP1[3] + cP2[3])*0.5*(td.Tbep*(Ht/td.Hbep)); annotation( - Documentation(info = "

Compute the physical discharge (Q) and torque (T) based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that \\(n_{ED}\\) is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves.

")); + Documentation(info ="

Compute the physical discharge (Q) and torque (T) based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that \\(n_{ED}\\) is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves.

")); end TurbineLookUp; From 4f20d598e5ae358e29dd877a9cf715651fba2e51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Sun, 1 Mar 2026 21:37:05 +0100 Subject: [PATCH 11/20] Updating testing --- OpenHPLTest/EmpiricalTurbine.mo | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo index e3b6656..e9e1c21 100644 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -3,6 +3,12 @@ within OpenHPLTest; package EmpiricalTurbine extends Modelica.Icons.ExamplesPackage; + class Information + extends Modelica.Icons.Information; + annotation( + Documentation(info = "The EmpiricalTurbine test package contains a series of test models for documeting and validating the implementation of the EmpiricalTurbine model.
There are two sub-packages:
  • TestBasicFunctions - testing of the Bezier spline algorithm, the search algorithm and the blening function (to find intermediate curves)
  • TurbineTetst - collection of gradually more complex test cases using the EmpiricalTurbine model
At the moment there are som robustness issues with the model. In the default configuration Test03_Turbine have issues with convergens at time t=0.34 with the message
Homotopy solver Newton iteration: Maximum number of iterations reached at time 0.340000, but no root found.
The following documents testing and investigations to resovle this.
The Homotopy analysis method is ")); + end Information; + package TestBasicFunctions extends Modelica.Icons.ExamplesPackage; // @@ -97,7 +103,7 @@ package EmpiricalTurbine // - model Test02_Turbin + model Test02_Turbine extends AbstractTurbineTest; OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); @@ -117,11 +123,11 @@ package EmpiricalTurbine annotation( Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.
Initial speed f_0 is set to 0.2 and the turbine is permitted to speed up as function of computed turbine torque Tt.

"), experiment(StartTime = 0, StopTime = 20, Tolerance = 1e-06, Interval = 0.001)); - end Test02_Turbin; + end Test02_Turbine; // - model Test03_Turbin + model Test03_Turbine extends AbstractTurbineTest; public @@ -146,13 +152,15 @@ package EmpiricalTurbine connect(tunnel.o, turbine.i) annotation( Line(points = {{-34, 32}, {-24, 32}, {-24, 12}, {2, 12}}, color = {0, 128, 255})); annotation( - experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.01), - Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway.")); - end Test03_Turbin; + experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.1), + Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway."), + __OpenModelica_commandLineOptions = "--matchingAlgorithm=PFPlusExt --indexReductionMethod=dynamicStateSelection -d=initialization,NLSanalyticJacobian", + __OpenModelica_simulationFlags(lv = "LOG_STDOUT,LOG_ASSERT,LOG_STATS", s = "dassl", noHomotopyOnFirstTry = "()",homMaxNewtonSteps= "50",homMaxTries="30",variableFilter = ".*")); + end Test03_Turbine; // - model Test04_Turbin + model Test04_Turbine extends AbstractTurbineTest; public OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( @@ -174,9 +182,9 @@ package EmpiricalTurbine Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); annotation( experiment(StartTime = 0, StopTime = 15, Tolerance = 1e-06, Interval = 0.01)); -end Test04_Turbin; +end Test04_Turbine; // - model Test05_Turbin + model Test05_Turbine extends AbstractTurbineTest; // public @@ -200,6 +208,6 @@ end Test04_Turbin; Line(points = {{-72, 12}, {-52, 12}}, color = {0, 128, 255})); connect(tunnel.o, turbine.i) annotation( Line(points = {{-32, 12}, {2, 12}}, color = {0, 128, 255})); - end Test05_Turbin; + end Test05_Turbine; end TurbineTest; -end EmpiricalTurbine; +end EmpiricalTurbine; \ No newline at end of file From a44c26dd8c506da2ca7e5a134b1f437ec6d0674c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjarne=20B=C3=B8rresen?= Date: Tue, 3 Mar 2026 10:57:21 +0100 Subject: [PATCH 12/20] Continue to resolve issue with convegence for EmpiricalTurbine model --- OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo | 2 +- OpenHPLTest/EmpiricalTurbine.mo | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo index 3d5b441..c522548 100644 --- a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -9,7 +9,7 @@ model EmpiricalTurbine Dialog(group = "Initialization")); parameter OpenHPL.Types.TurbineCharacteristics turbineCharacteristics; parameter OpenHPL.Types.TurbineData turbineData; - SI.Length Ht "Turbine head"; + SI.Length Ht(start=100) "Turbine head"; SI.VolumeFlowRate Qt "Turbine flow rate"; SI.Torque Tt "Turbine torque"; diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo index e9e1c21..f4403f8 100644 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ b/OpenHPLTest/EmpiricalTurbine.mo @@ -6,7 +6,7 @@ package EmpiricalTurbine class Information extends Modelica.Icons.Information; annotation( - Documentation(info = "The EmpiricalTurbine test package contains a series of test models for documeting and validating the implementation of the EmpiricalTurbine model.
There are two sub-packages:
  • TestBasicFunctions - testing of the Bezier spline algorithm, the search algorithm and the blening function (to find intermediate curves)
  • TurbineTetst - collection of gradually more complex test cases using the EmpiricalTurbine model
At the moment there are som robustness issues with the model. In the default configuration Test03_Turbine have issues with convergens at time t=0.34 with the message
Homotopy solver Newton iteration: Maximum number of iterations reached at time 0.340000, but no root found.
The following documents testing and investigations to resovle this.
The Homotopy analysis method is ")); + Documentation(info = "The EmpiricalTurbine test package contains a series of test models for documeting and validating the implementation of the EmpiricalTurbine model.
There are two sub-packages:
  • TestBasicFunctions - testing of the Bezier spline algorithm, the search algorithm and the blening function (to find intermediate curves)
  • TurbineTetst - collection of gradually more complex test cases using the EmpiricalTurbine model
At the moment there are som robustness issues with the model. In the default configuration Test03_Turbine have issues with convergens at time t=0.34 with the message
Homotopy solver Newton iteration: Maximum number of iterations reached at time 0.340000, but no root found.
The following documents testing and investigations to resovle this.
In particular it is important to understand some of the following topics and how different implementations may impact the robustness of the models.
Some observations:
  • Turbine model with only upstream and downstream reservoir and constant opening works fine (Test02).
  • Turbine model with upstream and downstream reservoir and ramping opening works fine (Test04).
  • Turbine model with rigid water pipe and constant opening works shows clear convergence issues (Test03).
Additional comments:
In general convergence issues can either be related to \"stiff\" problems or singularities or discontinuous functions (or gradients). Running Test03 with the dassl solver, with startTime=0 and stopTime=1 and varying time step gives the following result.
Time stepComments
0.005Convergence issues from t=0.26500 (nonlinear system 82)
0.01Convergence issues from t=0.34000
0.02Convergence issues from t=0.34000
0.05Convergence issues from t=0.683162
0.10Convergence issues from t=0.683162
0.20Convergence issues from t=0.683162

Normally, for stiff problems, reducing the time step should improve the convergence. This seems not to be the case here.")); end Information; package TestBasicFunctions @@ -152,7 +152,7 @@ package EmpiricalTurbine connect(tunnel.o, turbine.i) annotation( Line(points = {{-34, 32}, {-24, 32}, {-24, 12}, {2, 12}}, color = {0, 128, 255})); annotation( - experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.1), + experiment(StartTime = 0, StopTime = 10.0, Tolerance = 1e-06, Interval = 0.2000), Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway."), __OpenModelica_commandLineOptions = "--matchingAlgorithm=PFPlusExt --indexReductionMethod=dynamicStateSelection -d=initialization,NLSanalyticJacobian", __OpenModelica_simulationFlags(lv = "LOG_STDOUT,LOG_ASSERT,LOG_STATS", s = "dassl", noHomotopyOnFirstTry = "()",homMaxNewtonSteps= "50",homMaxTries="30",variableFilter = ".*")); @@ -210,4 +210,4 @@ end Test04_Turbine; Line(points = {{-32, 12}, {2, 12}}, color = {0, 128, 255})); end Test05_Turbine; end TurbineTest; -end EmpiricalTurbine; \ No newline at end of file +end EmpiricalTurbine; From cf837115ffcdc9dc9ceaba516d497ff0996a6416 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 16:03:02 +0100 Subject: [PATCH 13/20] Rearrange all test models and archive the old ones --- .../CaseStudingValentynasCase.mo | 2 +- .../{ => Archive}/HPAllTypeFittingsTest.mo | 2 +- OpenHPLTest/{ => Archive}/HPBjarneBorresen.mo | 2 +- OpenHPLTest/{ => Archive}/HPDraftTube.mo | 2 +- .../{ => Archive}/HPElasticKPPenstock.mo | 2 +- .../HPElasticKPPenstockANDIntake.mo | 2 +- .../HPElasticKPPenstockCompres.mo | 2 +- .../HPElasticKPPenstockFrancis.mo | 2 +- .../HPElasticKPPenstockFrancisGov.mo | 2 +- .../HPElasticKPPenstockHalfSurgeD.mo | 2 +- .../HPElasticKPPenstockWithoutSurge.mo | 2 +- OpenHPLTest/{ => Archive}/HPLinTest.mo | 2 +- OpenHPLTest/{ => Archive}/HPLiniarization.mo | 2 +- OpenHPLTest/{ => Archive}/HPLiniarization2.mo | 2 +- OpenHPLTest/{ => Archive}/HPLiniarization3.mo | 2 +- OpenHPLTest/{ => Archive}/HPLiniarization4.mo | 2 +- .../{ => Archive}/HPLiniarizationFranGen.mo | 2 +- .../{ => Archive}/HPLiniarizationGenIPSL.mo | 2 +- .../{ => Archive}/HPLiniarizationGenIPSLKP.mo | 2 +- .../{ => Archive}/HPLiniarizationKP.mo | 2 +- .../{ => Archive}/HPLiniarizationKPFran.mo | 2 +- OpenHPLTest/{ => Archive}/HPModel.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelDEA.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelKPLin.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelKPLinPI.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelLin.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelLinPI.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelManLin.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelObserv.mo | 2 +- OpenHPLTest/{ => Archive}/HPModelObservSim.mo | 2 +- OpenHPLTest/{ => Archive}/HPSTAirCushion.mo | 2 +- OpenHPLTest/{ => Archive}/HPSTSharpOrifice.mo | 2 +- OpenHPLTest/{ => Archive}/HPSTSimple.mo | 2 +- .../{ => Archive}/HPSTThrottleValve.mo | 2 +- .../{ => Archive}/HPSimpleElasticPenstock.mo | 2 +- .../HPSimpleElasticPenstockWithoutSurge.mo | 2 +- .../HPSimplePenstockAutoRefGate.mo | 2 +- .../{ => Archive}/HPSimplePenstockControl.mo | 2 +- .../{ => Archive}/HPSimplePenstockFrancis.mo | 2 +- .../{ => Archive}/HPSimplePenstockFrancis2.mo | 2 +- .../HPSimplePenstockFrancisGenIPSL.mo | 2 +- .../HPSimplePenstockFrancisGenIPSLGov.mo | 2 +- .../HPSimplePenstockFrancisGenIPSLInfBus.mo | 2 +- .../HPSimplePenstockFrancisGener.mo | 2 +- .../HPSimplePenstockGeneratorTest.mo | 2 +- .../HPSimplePenstockOpenChannel.mo | 2 +- .../{ => Archive}/HPSimplePenstockPelton.mo | 2 +- .../{ => Archive}/HPSimplePenstockResKP.mo | 2 +- .../{ => Archive}/HPSquareFittingsTest.mo | 2 +- .../{ => Archive}/HPTaperedFittingsTest.mo | 2 +- .../HydroCordModeKPlFrancisDraftTube.mo | 2 +- OpenHPLTest/{ => Archive}/HydroCordModel.mo | 2 +- OpenHPLTest/{ => Archive}/HydroCordModel2.mo | 2 +- .../{ => Archive}/HydroCordModelDraftTube.mo | 2 +- .../{ => Archive}/HydroCordModelDraftTube2.mo | 2 +- .../{ => Archive}/HydroCordModelDraftTube3.mo | 2 +- .../{ => Archive}/HydroCordModelFrancis.mo | 2 +- .../{ => Archive}/HydroCordModelFrancis2.mo | 2 +- .../HydroCordModelFrancisDraftTube.mo | 2 +- OpenHPLTest/{ => Archive}/HydroCordModelKP.mo | 2 +- .../{ => Archive}/HydroCordModelKP2.mo | 2 +- .../HydroCordModelKPDraftTube.mo | 2 +- .../{ => Archive}/HydroCordModelKPFran.mo | 2 +- .../{ => Archive}/HydroCordModelKPFran2.mo | 2 +- .../{ => Archive}/HydroCordModelKPall.mo | 2 +- OpenHPLTest/{ => Archive}/OpenChannel.mo | 2 +- OpenHPLTest/{ => Archive}/Reservoir.mo | 2 +- .../{ => Archive}/TestFitingSimpleHP.mo | 2 +- OpenHPLTest/{ => Archive}/TestMCB.mo | 2 +- OpenHPLTest/{ => Archive}/TestRunoff.mo | 2 +- .../{ => Archive}/TorpaHPPAirCushionTest.mo | 2 +- .../{ => Archive}/TorpaHPPAirCushionTest2.mo | 2 +- OpenHPLTest/Archive/package.mo | 6 + OpenHPLTest/Archive/package.order | 72 ++++++ OpenHPLTest/EmpiricalTurbine.mo | 213 ------------------ OpenHPLTest/EmpiricalTurbine/Information.mo | 6 + .../TestBasicFunctions/Test01_BezierCurve.mo | 13 ++ .../Test02_ControlPoints.mo | 27 +++ .../TestBasicFunctions/package.mo | 9 + .../TestBasicFunctions/package.order | 2 + .../TurbineTest/AbstractTurbineTest.mo | 24 ++ .../TurbineTest/Test01_TurbineLookUp.mo | 18 ++ .../TurbineTest/Test02_Turbine.mo | 22 ++ .../TurbineTest/Test03_Turbine.mo | 37 +++ .../TurbineTest/Test04_Turbine.mo | 24 ++ .../TurbineTest/Test05_Turbine.mo | 26 +++ .../EmpiricalTurbine/TurbineTest/package.mo | 17 ++ .../TurbineTest/package.order | 6 + OpenHPLTest/EmpiricalTurbine/package.mo | 7 + OpenHPLTest/EmpiricalTurbine/package.order | 3 + OpenHPLTest/TestPipe.mo | 105 --------- OpenHPLTest/TestPipe/AbstractTest.mo | 17 ++ OpenHPLTest/TestPipe/Test01.mo | 26 +++ OpenHPLTest/TestPipe/Test02.mo | 6 + OpenHPLTest/TestPipe/Test03.mo | 50 ++++ OpenHPLTest/TestPipe/package.mo | 9 + OpenHPLTest/TestPipe/package.order | 4 + OpenHPLTest/TorqueEquation.mo | 37 --- OpenHPLTest/TorqueEquation/TorqueElement.mo | 7 + OpenHPLTest/TorqueEquation/TorqueTest.mo | 23 ++ OpenHPLTest/TorqueEquation/package.mo | 8 + OpenHPLTest/TorqueEquation/package.order | 2 + OpenHPLTest/package.mo | 1 + OpenHPLTest/package.order | 75 +----- 104 files changed, 546 insertions(+), 500 deletions(-) rename OpenHPLTest/{ => Archive}/CaseStudingValentynasCase.mo (99%) rename OpenHPLTest/{ => Archive}/HPAllTypeFittingsTest.mo (99%) rename OpenHPLTest/{ => Archive}/HPBjarneBorresen.mo (99%) rename OpenHPLTest/{ => Archive}/HPDraftTube.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstock.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockANDIntake.mo (98%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockCompres.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockFrancis.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockFrancisGov.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockHalfSurgeD.mo (99%) rename OpenHPLTest/{ => Archive}/HPElasticKPPenstockWithoutSurge.mo (99%) rename OpenHPLTest/{ => Archive}/HPLinTest.mo (89%) rename OpenHPLTest/{ => Archive}/HPLiniarization.mo (98%) rename OpenHPLTest/{ => Archive}/HPLiniarization2.mo (98%) rename OpenHPLTest/{ => Archive}/HPLiniarization3.mo (98%) rename OpenHPLTest/{ => Archive}/HPLiniarization4.mo (98%) rename OpenHPLTest/{ => Archive}/HPLiniarizationFranGen.mo (99%) rename OpenHPLTest/{ => Archive}/HPLiniarizationGenIPSL.mo (99%) rename OpenHPLTest/{ => Archive}/HPLiniarizationGenIPSLKP.mo (99%) rename OpenHPLTest/{ => Archive}/HPLiniarizationKP.mo (98%) rename OpenHPLTest/{ => Archive}/HPLiniarizationKPFran.mo (99%) rename OpenHPLTest/{ => Archive}/HPModel.mo (98%) rename OpenHPLTest/{ => Archive}/HPModelDEA.mo (98%) rename OpenHPLTest/{ => Archive}/HPModelKPLin.mo (99%) rename OpenHPLTest/{ => Archive}/HPModelKPLinPI.mo (94%) rename OpenHPLTest/{ => Archive}/HPModelLin.mo (97%) rename OpenHPLTest/{ => Archive}/HPModelLinPI.mo (96%) rename OpenHPLTest/{ => Archive}/HPModelManLin.mo (99%) rename OpenHPLTest/{ => Archive}/HPModelObserv.mo (98%) rename OpenHPLTest/{ => Archive}/HPModelObservSim.mo (99%) rename OpenHPLTest/{ => Archive}/HPSTAirCushion.mo (98%) rename OpenHPLTest/{ => Archive}/HPSTSharpOrifice.mo (98%) rename OpenHPLTest/{ => Archive}/HPSTSimple.mo (98%) rename OpenHPLTest/{ => Archive}/HPSTThrottleValve.mo (98%) rename OpenHPLTest/{ => Archive}/HPSimpleElasticPenstock.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimpleElasticPenstockWithoutSurge.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockAutoRefGate.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockControl.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancis.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancis2.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancisGenIPSL.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancisGenIPSLGov.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancisGenIPSLInfBus.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockFrancisGener.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockGeneratorTest.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockOpenChannel.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockPelton.mo (99%) rename OpenHPLTest/{ => Archive}/HPSimplePenstockResKP.mo (99%) rename OpenHPLTest/{ => Archive}/HPSquareFittingsTest.mo (99%) rename OpenHPLTest/{ => Archive}/HPTaperedFittingsTest.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModeKPlFrancisDraftTube.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModel.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModel2.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelDraftTube.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelDraftTube2.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelDraftTube3.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelFrancis.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelFrancis2.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelFrancisDraftTube.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKP.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKP2.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKPDraftTube.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKPFran.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKPFran2.mo (99%) rename OpenHPLTest/{ => Archive}/HydroCordModelKPall.mo (99%) rename OpenHPLTest/{ => Archive}/OpenChannel.mo (98%) rename OpenHPLTest/{ => Archive}/Reservoir.mo (98%) rename OpenHPLTest/{ => Archive}/TestFitingSimpleHP.mo (99%) rename OpenHPLTest/{ => Archive}/TestMCB.mo (98%) rename OpenHPLTest/{ => Archive}/TestRunoff.mo (98%) rename OpenHPLTest/{ => Archive}/TorpaHPPAirCushionTest.mo (98%) rename OpenHPLTest/{ => Archive}/TorpaHPPAirCushionTest2.mo (98%) create mode 100644 OpenHPLTest/Archive/package.mo create mode 100644 OpenHPLTest/Archive/package.order delete mode 100644 OpenHPLTest/EmpiricalTurbine.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/Information.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test01_BezierCurve.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test02_ControlPoints.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.order create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/AbstractTurbineTest.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/Test01_TurbineLookUp.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/package.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/TurbineTest/package.order create mode 100644 OpenHPLTest/EmpiricalTurbine/package.mo create mode 100644 OpenHPLTest/EmpiricalTurbine/package.order delete mode 100644 OpenHPLTest/TestPipe.mo create mode 100644 OpenHPLTest/TestPipe/AbstractTest.mo create mode 100644 OpenHPLTest/TestPipe/Test01.mo create mode 100644 OpenHPLTest/TestPipe/Test02.mo create mode 100644 OpenHPLTest/TestPipe/Test03.mo create mode 100644 OpenHPLTest/TestPipe/package.mo create mode 100644 OpenHPLTest/TestPipe/package.order delete mode 100644 OpenHPLTest/TorqueEquation.mo create mode 100644 OpenHPLTest/TorqueEquation/TorqueElement.mo create mode 100644 OpenHPLTest/TorqueEquation/TorqueTest.mo create mode 100644 OpenHPLTest/TorqueEquation/package.mo create mode 100644 OpenHPLTest/TorqueEquation/package.order diff --git a/OpenHPLTest/CaseStudingValentynasCase.mo b/OpenHPLTest/Archive/CaseStudingValentynasCase.mo similarity index 99% rename from OpenHPLTest/CaseStudingValentynasCase.mo rename to OpenHPLTest/Archive/CaseStudingValentynasCase.mo index 7ecbc23..390702c 100644 --- a/OpenHPLTest/CaseStudingValentynasCase.mo +++ b/OpenHPLTest/Archive/CaseStudingValentynasCase.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model CaseStudingValentynasCase "HP system model for Valentyna's Master case" extends Modelica.Icons.Example; Real coef2, coef3; diff --git a/OpenHPLTest/HPAllTypeFittingsTest.mo b/OpenHPLTest/Archive/HPAllTypeFittingsTest.mo similarity index 99% rename from OpenHPLTest/HPAllTypeFittingsTest.mo rename to OpenHPLTest/Archive/HPAllTypeFittingsTest.mo index 88cd7d5..7dc303b 100644 --- a/OpenHPLTest/HPAllTypeFittingsTest.mo +++ b/OpenHPLTest/Archive/HPAllTypeFittingsTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPAllTypeFittingsTest "Test for comparing fitting behaviour" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir headWater(h_0=10) annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); diff --git a/OpenHPLTest/HPBjarneBorresen.mo b/OpenHPLTest/Archive/HPBjarneBorresen.mo similarity index 99% rename from OpenHPLTest/HPBjarneBorresen.mo rename to OpenHPLTest/Archive/HPBjarneBorresen.mo index 95f2c92..63cd867 100644 --- a/OpenHPLTest/HPBjarneBorresen.mo +++ b/OpenHPLTest/Archive/HPBjarneBorresen.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPBjarneBorresen "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=503 - 499.5) annotation (Placement(transformation( diff --git a/OpenHPLTest/HPDraftTube.mo b/OpenHPLTest/Archive/HPDraftTube.mo similarity index 99% rename from OpenHPLTest/HPDraftTube.mo rename to OpenHPLTest/Archive/HPDraftTube.mo index 8755ca8..872c83d 100644 --- a/OpenHPLTest/HPDraftTube.mo +++ b/OpenHPLTest/Archive/HPDraftTube.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPDraftTube "Testing the draft tube models." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation( diff --git a/OpenHPLTest/HPElasticKPPenstock.mo b/OpenHPLTest/Archive/HPElasticKPPenstock.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstock.mo rename to OpenHPLTest/Archive/HPElasticKPPenstock.mo index 0925406..1d67947 100644 --- a/OpenHPLTest/HPElasticKPPenstock.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstock.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstock "Model of HP system with elastic penctock (KP), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockANDIntake.mo b/OpenHPLTest/Archive/HPElasticKPPenstockANDIntake.mo similarity index 98% rename from OpenHPLTest/HPElasticKPPenstockANDIntake.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockANDIntake.mo index 8be46e7..2035172 100644 --- a/OpenHPLTest/HPElasticKPPenstockANDIntake.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockANDIntake.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockANDIntake "Model of HP system with elastic penctock and intake (KP), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockCompres.mo b/OpenHPLTest/Archive/HPElasticKPPenstockCompres.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstockCompres.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockCompres.mo index abd0a97..ff017de 100644 --- a/OpenHPLTest/HPElasticKPPenstockCompres.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockCompres.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockCompres "Model of HP system with elastic penctock (KP), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockFrancis.mo b/OpenHPLTest/Archive/HPElasticKPPenstockFrancis.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstockFrancis.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockFrancis.mo index 4efb54b..043b82c 100644 --- a/OpenHPLTest/HPElasticKPPenstockFrancis.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockFrancis.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockFrancis "HP system model with Francis turbine and elastic penstock" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockFrancisGov.mo b/OpenHPLTest/Archive/HPElasticKPPenstockFrancisGov.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstockFrancisGov.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockFrancisGov.mo index 3a015b8..ac90399 100644 --- a/OpenHPLTest/HPElasticKPPenstockFrancisGov.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockFrancisGov.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockFrancisGov "HP system model with Francis turbine and elastic penstock and governor" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockHalfSurgeD.mo b/OpenHPLTest/Archive/HPElasticKPPenstockHalfSurgeD.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstockHalfSurgeD.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockHalfSurgeD.mo index 06ab233..6531026 100644 --- a/OpenHPLTest/HPElasticKPPenstockHalfSurgeD.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockHalfSurgeD.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockHalfSurgeD "Similar to previous HP system, but with twice reduced surge tank diameter" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-92,66}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPElasticKPPenstockWithoutSurge.mo b/OpenHPLTest/Archive/HPElasticKPPenstockWithoutSurge.mo similarity index 99% rename from OpenHPLTest/HPElasticKPPenstockWithoutSurge.mo rename to OpenHPLTest/Archive/HPElasticKPPenstockWithoutSurge.mo index 336cf0d..a330329 100644 --- a/OpenHPLTest/HPElasticKPPenstockWithoutSurge.mo +++ b/OpenHPLTest/Archive/HPElasticKPPenstockWithoutSurge.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPElasticKPPenstockWithoutSurge "Model of HP system without surge tank and with elastic penctock (KP), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-90,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPLinTest.mo b/OpenHPLTest/Archive/HPLinTest.mo similarity index 89% rename from OpenHPLTest/HPLinTest.mo rename to OpenHPLTest/Archive/HPLinTest.mo index 98f0b13..1898ab4 100644 --- a/OpenHPLTest/HPLinTest.mo +++ b/OpenHPLTest/Archive/HPLinTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLinTest extends Modelica.Icons.Example; OpenHPLTest.HPLiniarizationKPFran hpl; diff --git a/OpenHPLTest/HPLiniarization.mo b/OpenHPLTest/Archive/HPLiniarization.mo similarity index 98% rename from OpenHPLTest/HPLiniarization.mo rename to OpenHPLTest/Archive/HPLiniarization.mo index 495e5d2..60ac787 100644 --- a/OpenHPLTest/HPLiniarization.mo +++ b/OpenHPLTest/Archive/HPLiniarization.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarization "Simple HP system model for liniarization" extends Modelica.Icons.Example; input Real u(start = 0.7493); diff --git a/OpenHPLTest/HPLiniarization2.mo b/OpenHPLTest/Archive/HPLiniarization2.mo similarity index 98% rename from OpenHPLTest/HPLiniarization2.mo rename to OpenHPLTest/Archive/HPLiniarization2.mo index 2e054e6..fdef2e9 100644 --- a/OpenHPLTest/HPLiniarization2.mo +++ b/OpenHPLTest/Archive/HPLiniarization2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarization2 "Simple HP system model for liniarization" extends Modelica.Icons.Example; input Real u(start = 0.7493); diff --git a/OpenHPLTest/HPLiniarization3.mo b/OpenHPLTest/Archive/HPLiniarization3.mo similarity index 98% rename from OpenHPLTest/HPLiniarization3.mo rename to OpenHPLTest/Archive/HPLiniarization3.mo index ff54ef4..f6da871 100644 --- a/OpenHPLTest/HPLiniarization3.mo +++ b/OpenHPLTest/Archive/HPLiniarization3.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarization3 "Simple HP system model for liniarization" extends Modelica.Icons.Example; input Real u(start = 0.7493); diff --git a/OpenHPLTest/HPLiniarization4.mo b/OpenHPLTest/Archive/HPLiniarization4.mo similarity index 98% rename from OpenHPLTest/HPLiniarization4.mo rename to OpenHPLTest/Archive/HPLiniarization4.mo index 479564a..1c0b5bf 100644 --- a/OpenHPLTest/HPLiniarization4.mo +++ b/OpenHPLTest/Archive/HPLiniarization4.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarization4 "Simple HP system model for liniarization" extends Modelica.Icons.Example; input Real u(start = 0.7493); diff --git a/OpenHPLTest/HPLiniarizationFranGen.mo b/OpenHPLTest/Archive/HPLiniarizationFranGen.mo similarity index 99% rename from OpenHPLTest/HPLiniarizationFranGen.mo rename to OpenHPLTest/Archive/HPLiniarizationFranGen.mo index 9a8b958..952ad3a 100644 --- a/OpenHPLTest/HPLiniarizationFranGen.mo +++ b/OpenHPLTest/Archive/HPLiniarizationFranGen.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarizationFranGen "HP system model for liniarization with Francis turbine + generator" extends Modelica.Icons.Example; OpenHPL.Waterway.Pipe intake(H=23, Vdot_0=18.5952) annotation (Placement(transformation(extent={{-72,50},{-52,70}}))); diff --git a/OpenHPLTest/HPLiniarizationGenIPSL.mo b/OpenHPLTest/Archive/HPLiniarizationGenIPSL.mo similarity index 99% rename from OpenHPLTest/HPLiniarizationGenIPSL.mo rename to OpenHPLTest/Archive/HPLiniarizationGenIPSL.mo index 0759279..6fa548c 100644 --- a/OpenHPLTest/HPLiniarizationGenIPSL.mo +++ b/OpenHPLTest/Archive/HPLiniarizationGenIPSL.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarizationGenIPSL "Synergy with OpenIPSL library(generator + governor)" extends Modelica.Icons.Example; input Real u = 0.574; diff --git a/OpenHPLTest/HPLiniarizationGenIPSLKP.mo b/OpenHPLTest/Archive/HPLiniarizationGenIPSLKP.mo similarity index 99% rename from OpenHPLTest/HPLiniarizationGenIPSLKP.mo rename to OpenHPLTest/Archive/HPLiniarizationGenIPSLKP.mo index 20e1ebb..51c28f3 100644 --- a/OpenHPLTest/HPLiniarizationGenIPSLKP.mo +++ b/OpenHPLTest/Archive/HPLiniarizationGenIPSLKP.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarizationGenIPSLKP "Synergy with OpenIPSL library(generator + governor)" extends Modelica.Icons.Example; input Real u = 0.574; diff --git a/OpenHPLTest/HPLiniarizationKP.mo b/OpenHPLTest/Archive/HPLiniarizationKP.mo similarity index 98% rename from OpenHPLTest/HPLiniarizationKP.mo rename to OpenHPLTest/Archive/HPLiniarizationKP.mo index ea5b4c1..01bb6f8 100644 --- a/OpenHPLTest/HPLiniarizationKP.mo +++ b/OpenHPLTest/Archive/HPLiniarizationKP.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarizationKP "HP system model for liniarization with elastic penstock (KP)" extends Modelica.Icons.Example; input Real u(start = 0.7493); diff --git a/OpenHPLTest/HPLiniarizationKPFran.mo b/OpenHPLTest/Archive/HPLiniarizationKPFran.mo similarity index 99% rename from OpenHPLTest/HPLiniarizationKPFran.mo rename to OpenHPLTest/Archive/HPLiniarizationKPFran.mo index f3ce3f4..6c5bf64 100644 --- a/OpenHPLTest/HPLiniarizationKPFran.mo +++ b/OpenHPLTest/Archive/HPLiniarizationKPFran.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPLiniarizationKPFran "HP system model for liniarization with elastic penstock (KP) + Francis turbine + generator" extends Modelica.Icons.Example; input Real u; diff --git a/OpenHPLTest/HPModel.mo b/OpenHPLTest/Archive/HPModel.mo similarity index 98% rename from OpenHPLTest/HPModel.mo rename to OpenHPLTest/Archive/HPModel.mo index 8a91986..9019ac5 100644 --- a/OpenHPLTest/HPModel.mo +++ b/OpenHPLTest/Archive/HPModel.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModel inner OpenHPL.Data data; import Modelica.Constants.pi; diff --git a/OpenHPLTest/HPModelDEA.mo b/OpenHPLTest/Archive/HPModelDEA.mo similarity index 98% rename from OpenHPLTest/HPModelDEA.mo rename to OpenHPLTest/Archive/HPModelDEA.mo index 783195e..b380710 100644 --- a/OpenHPLTest/HPModelDEA.mo +++ b/OpenHPLTest/Archive/HPModelDEA.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelDEA inner OpenHPL.Data data; import Modelica.Constants.pi; diff --git a/OpenHPLTest/HPModelKPLin.mo b/OpenHPLTest/Archive/HPModelKPLin.mo similarity index 99% rename from OpenHPLTest/HPModelKPLin.mo rename to OpenHPLTest/Archive/HPModelKPLin.mo index 38d595f..339b634 100644 --- a/OpenHPLTest/HPModelKPLin.mo +++ b/OpenHPLTest/Archive/HPModelKPLin.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelKPLin parameter Integer n = 24; // states diff --git a/OpenHPLTest/HPModelKPLinPI.mo b/OpenHPLTest/Archive/HPModelKPLinPI.mo similarity index 94% rename from OpenHPLTest/HPModelKPLinPI.mo rename to OpenHPLTest/Archive/HPModelKPLinPI.mo index 4d61526..bb64ebc 100644 --- a/OpenHPLTest/HPModelKPLinPI.mo +++ b/OpenHPLTest/Archive/HPModelKPLinPI.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelKPLinPI HPLiniarizationKP hpKP; parameter Real Kp = 0.1; diff --git a/OpenHPLTest/HPModelLin.mo b/OpenHPLTest/Archive/HPModelLin.mo similarity index 97% rename from OpenHPLTest/HPModelLin.mo rename to OpenHPLTest/Archive/HPModelLin.mo index 3c9b219..f1a1507 100644 --- a/OpenHPLTest/HPModelLin.mo +++ b/OpenHPLTest/Archive/HPModelLin.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelLin parameter Integer n = 5; // states diff --git a/OpenHPLTest/HPModelLinPI.mo b/OpenHPLTest/Archive/HPModelLinPI.mo similarity index 96% rename from OpenHPLTest/HPModelLinPI.mo rename to OpenHPLTest/Archive/HPModelLinPI.mo index 27e738f..732479f 100644 --- a/OpenHPLTest/HPModelLinPI.mo +++ b/OpenHPLTest/Archive/HPModelLinPI.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelLinPI HPModelLin hplin; HPLiniarization hp; diff --git a/OpenHPLTest/HPModelManLin.mo b/OpenHPLTest/Archive/HPModelManLin.mo similarity index 99% rename from OpenHPLTest/HPModelManLin.mo rename to OpenHPLTest/Archive/HPModelManLin.mo index 8ab8ee3..db5d9c1 100644 --- a/OpenHPLTest/HPModelManLin.mo +++ b/OpenHPLTest/Archive/HPModelManLin.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelManLin inner OpenHPL.Data data; import Modelica.Constants.pi; diff --git a/OpenHPLTest/HPModelObserv.mo b/OpenHPLTest/Archive/HPModelObserv.mo similarity index 98% rename from OpenHPLTest/HPModelObserv.mo rename to OpenHPLTest/Archive/HPModelObserv.mo index b206326..e434323 100644 --- a/OpenHPLTest/HPModelObserv.mo +++ b/OpenHPLTest/Archive/HPModelObserv.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelObserv inner OpenHPL.Data data; import Modelica.Constants.pi; diff --git a/OpenHPLTest/HPModelObservSim.mo b/OpenHPLTest/Archive/HPModelObservSim.mo similarity index 99% rename from OpenHPLTest/HPModelObservSim.mo rename to OpenHPLTest/Archive/HPModelObservSim.mo index e35742a..97281c1 100644 --- a/OpenHPLTest/HPModelObservSim.mo +++ b/OpenHPLTest/Archive/HPModelObservSim.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPModelObservSim inner OpenHPL.Data data; //HPModel hpmod; diff --git a/OpenHPLTest/HPSTAirCushion.mo b/OpenHPLTest/Archive/HPSTAirCushion.mo similarity index 98% rename from OpenHPLTest/HPSTAirCushion.mo rename to OpenHPLTest/Archive/HPSTAirCushion.mo index 6f06f2f..b1fd143 100644 --- a/OpenHPLTest/HPSTAirCushion.mo +++ b/OpenHPLTest/Archive/HPSTAirCushion.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSTAirCushion "Model of waterway of the HP system with simplified models for conduits, turbine, etc." extends Modelica.Icons.Example; diff --git a/OpenHPLTest/HPSTSharpOrifice.mo b/OpenHPLTest/Archive/HPSTSharpOrifice.mo similarity index 98% rename from OpenHPLTest/HPSTSharpOrifice.mo rename to OpenHPLTest/Archive/HPSTSharpOrifice.mo index 4061be7..691faa4 100644 --- a/OpenHPLTest/HPSTSharpOrifice.mo +++ b/OpenHPLTest/Archive/HPSTSharpOrifice.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSTSharpOrifice "Model of waterway of the HP system with simplified models for conduits, turbine, etc." extends Modelica.Icons.Example; diff --git a/OpenHPLTest/HPSTSimple.mo b/OpenHPLTest/Archive/HPSTSimple.mo similarity index 98% rename from OpenHPLTest/HPSTSimple.mo rename to OpenHPLTest/Archive/HPSTSimple.mo index 44d3b62..92c2ef3 100644 --- a/OpenHPLTest/HPSTSimple.mo +++ b/OpenHPLTest/Archive/HPSTSimple.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSTSimple "Model of waterway of the HP system with simplified models for conduits, turbine, etc." extends Modelica.Icons.Example; diff --git a/OpenHPLTest/HPSTThrottleValve.mo b/OpenHPLTest/Archive/HPSTThrottleValve.mo similarity index 98% rename from OpenHPLTest/HPSTThrottleValve.mo rename to OpenHPLTest/Archive/HPSTThrottleValve.mo index 0c1eafa..d0410e2 100644 --- a/OpenHPLTest/HPSTThrottleValve.mo +++ b/OpenHPLTest/Archive/HPSTThrottleValve.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSTThrottleValve "Model of waterway of the HP system with simplified models for conduits, turbine, etc." extends Modelica.Icons.Example; diff --git a/OpenHPLTest/HPSimpleElasticPenstock.mo b/OpenHPLTest/Archive/HPSimpleElasticPenstock.mo similarity index 99% rename from OpenHPLTest/HPSimpleElasticPenstock.mo rename to OpenHPLTest/Archive/HPSimpleElasticPenstock.mo index d3bb7b3..e8e57fa 100644 --- a/OpenHPLTest/HPSimpleElasticPenstock.mo +++ b/OpenHPLTest/Archive/HPSimpleElasticPenstock.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimpleElasticPenstock "Model of HP system with elastic penctock (StagardGrid), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-90,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimpleElasticPenstockWithoutSurge.mo b/OpenHPLTest/Archive/HPSimpleElasticPenstockWithoutSurge.mo similarity index 99% rename from OpenHPLTest/HPSimpleElasticPenstockWithoutSurge.mo rename to OpenHPLTest/Archive/HPSimpleElasticPenstockWithoutSurge.mo index bbdb6a1..d98e403 100644 --- a/OpenHPLTest/HPSimpleElasticPenstockWithoutSurge.mo +++ b/OpenHPLTest/Archive/HPSimpleElasticPenstockWithoutSurge.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimpleElasticPenstockWithoutSurge "Model of HP system without surge tank and with elastic penctock (StagardGrid), but simplified models for turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-90,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockAutoRefGate.mo b/OpenHPLTest/Archive/HPSimplePenstockAutoRefGate.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockAutoRefGate.mo rename to OpenHPLTest/Archive/HPSimplePenstockAutoRefGate.mo index 044a05e..4e8cb1b 100644 --- a/OpenHPLTest/HPSimplePenstockAutoRefGate.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockAutoRefGate.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockAutoRefGate extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockControl.mo b/OpenHPLTest/Archive/HPSimplePenstockControl.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockControl.mo rename to OpenHPLTest/Archive/HPSimplePenstockControl.mo index 4242944..09960d1 100644 --- a/OpenHPLTest/HPSimplePenstockControl.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockControl.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockControl "Model of HP system with governor" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockFrancis.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancis.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancis.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancis.mo index 5804861..2b7595f 100644 --- a/OpenHPLTest/HPSimplePenstockFrancis.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancis.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancis "HP system model with Francis turbine" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockFrancis2.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancis2.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancis2.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancis2.mo index 349da0e..a64de90 100644 --- a/OpenHPLTest/HPSimplePenstockFrancis2.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancis2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancis2 "HP system model with Francis turbine and generator" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockFrancisGenIPSL.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSL.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancisGenIPSL.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSL.mo index 502ff3e..0b09cce 100644 --- a/OpenHPLTest/HPSimplePenstockFrancisGenIPSL.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSL.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancisGenIPSL "Synergy with OpenIPSL library(generator)" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation( diff --git a/OpenHPLTest/HPSimplePenstockFrancisGenIPSLGov.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLGov.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancisGenIPSLGov.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLGov.mo index 14ff923..b5802f3 100644 --- a/OpenHPLTest/HPSimplePenstockFrancisGenIPSLGov.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLGov.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancisGenIPSLGov "Synergy with OpenIPSL library(generator + governor)" //input Real u; extends Modelica.Icons.Example; diff --git a/OpenHPLTest/HPSimplePenstockFrancisGenIPSLInfBus.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLInfBus.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancisGenIPSLInfBus.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLInfBus.mo index 279c8ea..43fd7c0 100644 --- a/OpenHPLTest/HPSimplePenstockFrancisGenIPSLInfBus.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancisGenIPSLInfBus.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancisGenIPSLInfBus "Synergy with OpenIPSL library(generator + infinitBus)" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockFrancisGener.mo b/OpenHPLTest/Archive/HPSimplePenstockFrancisGener.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockFrancisGener.mo rename to OpenHPLTest/Archive/HPSimplePenstockFrancisGener.mo index fb7615a..e8742f4 100644 --- a/OpenHPLTest/HPSimplePenstockFrancisGener.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockFrancisGener.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockFrancisGener "HP system model with Francis turbine and generator" extends Modelica.Icons.Example; Real coef; diff --git a/OpenHPLTest/HPSimplePenstockGeneratorTest.mo b/OpenHPLTest/Archive/HPSimplePenstockGeneratorTest.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockGeneratorTest.mo rename to OpenHPLTest/Archive/HPSimplePenstockGeneratorTest.mo index bf592de..1df4d92 100644 --- a/OpenHPLTest/HPSimplePenstockGeneratorTest.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockGeneratorTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockGeneratorTest "Generator testing for HP" extends Modelica.Icons.Example; import Modelica.Constants.pi; diff --git a/OpenHPLTest/HPSimplePenstockOpenChannel.mo b/OpenHPLTest/Archive/HPSimplePenstockOpenChannel.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockOpenChannel.mo rename to OpenHPLTest/Archive/HPSimplePenstockOpenChannel.mo index f4a73bd..ce08757 100644 --- a/OpenHPLTest/HPSimplePenstockOpenChannel.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockOpenChannel.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockOpenChannel "testing open channel" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir annotation (Placement(transformation(origin={-90,44}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockPelton.mo b/OpenHPLTest/Archive/HPSimplePenstockPelton.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockPelton.mo rename to OpenHPLTest/Archive/HPSimplePenstockPelton.mo index fe009b5..59a1c99 100644 --- a/OpenHPLTest/HPSimplePenstockPelton.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockPelton.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockPelton "HP system model with Pelton turbine" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation(origin={-92,62}, extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/HPSimplePenstockResKP.mo b/OpenHPLTest/Archive/HPSimplePenstockResKP.mo similarity index 99% rename from OpenHPLTest/HPSimplePenstockResKP.mo rename to OpenHPLTest/Archive/HPSimplePenstockResKP.mo index 6a4b43c..8680490 100644 --- a/OpenHPLTest/HPSimplePenstockResKP.mo +++ b/OpenHPLTest/Archive/HPSimplePenstockResKP.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSimplePenstockResKP "Model of HP system with using reservoir model based on open channel" extends Modelica.Icons.Example; Modelica.Blocks.Sources.Ramp control(duration = 1, height = -0.04615, offset = 0.7493, startTime = 600) annotation ( diff --git a/OpenHPLTest/HPSquareFittingsTest.mo b/OpenHPLTest/Archive/HPSquareFittingsTest.mo similarity index 99% rename from OpenHPLTest/HPSquareFittingsTest.mo rename to OpenHPLTest/Archive/HPSquareFittingsTest.mo index 33c3655..dd68655 100644 --- a/OpenHPLTest/HPSquareFittingsTest.mo +++ b/OpenHPLTest/Archive/HPSquareFittingsTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPSquareFittingsTest "Test for comparing fitting behaviour" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir headWater(h_0=10) annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); diff --git a/OpenHPLTest/HPTaperedFittingsTest.mo b/OpenHPLTest/Archive/HPTaperedFittingsTest.mo similarity index 99% rename from OpenHPLTest/HPTaperedFittingsTest.mo rename to OpenHPLTest/Archive/HPTaperedFittingsTest.mo index d006658..6c91589 100644 --- a/OpenHPLTest/HPTaperedFittingsTest.mo +++ b/OpenHPLTest/Archive/HPTaperedFittingsTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HPTaperedFittingsTest "Test for comparing fitting behaviour" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir headWater(h_0=10) annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); diff --git a/OpenHPLTest/HydroCordModeKPlFrancisDraftTube.mo b/OpenHPLTest/Archive/HydroCordModeKPlFrancisDraftTube.mo similarity index 99% rename from OpenHPLTest/HydroCordModeKPlFrancisDraftTube.mo rename to OpenHPLTest/Archive/HydroCordModeKPlFrancisDraftTube.mo index 97c781c..1be28e9 100644 --- a/OpenHPLTest/HydroCordModeKPlFrancisDraftTube.mo +++ b/OpenHPLTest/Archive/HydroCordModeKPlFrancisDraftTube.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModeKPlFrancisDraftTube "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModel.mo b/OpenHPLTest/Archive/HydroCordModel.mo similarity index 99% rename from OpenHPLTest/HydroCordModel.mo rename to OpenHPLTest/Archive/HydroCordModel.mo index f4f1d2b..9a95090 100644 --- a/OpenHPLTest/HydroCordModel.mo +++ b/OpenHPLTest/Archive/HydroCordModel.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModel "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=418.5 - 372, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModel2.mo b/OpenHPLTest/Archive/HydroCordModel2.mo similarity index 99% rename from OpenHPLTest/HydroCordModel2.mo rename to OpenHPLTest/Archive/HydroCordModel2.mo index d99c27c..e8cdeb3 100644 --- a/OpenHPLTest/HydroCordModel2.mo +++ b/OpenHPLTest/Archive/HydroCordModel2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModel2 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=418.5 - 372, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelDraftTube.mo b/OpenHPLTest/Archive/HydroCordModelDraftTube.mo similarity index 99% rename from OpenHPLTest/HydroCordModelDraftTube.mo rename to OpenHPLTest/Archive/HydroCordModelDraftTube.mo index 0de7355..efc25d2 100644 --- a/OpenHPLTest/HydroCordModelDraftTube.mo +++ b/OpenHPLTest/Archive/HydroCordModelDraftTube.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelDraftTube "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=418.5 - 372, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelDraftTube2.mo b/OpenHPLTest/Archive/HydroCordModelDraftTube2.mo similarity index 99% rename from OpenHPLTest/HydroCordModelDraftTube2.mo rename to OpenHPLTest/Archive/HydroCordModelDraftTube2.mo index 42eca68..b3b46f3 100644 --- a/OpenHPLTest/HydroCordModelDraftTube2.mo +++ b/OpenHPLTest/Archive/HydroCordModelDraftTube2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelDraftTube2 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=418.5 - 372, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelDraftTube3.mo b/OpenHPLTest/Archive/HydroCordModelDraftTube3.mo similarity index 99% rename from OpenHPLTest/HydroCordModelDraftTube3.mo rename to OpenHPLTest/Archive/HydroCordModelDraftTube3.mo index 0b5d7d3..064e3ca 100644 --- a/OpenHPLTest/HydroCordModelDraftTube3.mo +++ b/OpenHPLTest/Archive/HydroCordModelDraftTube3.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelDraftTube3 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=418.5 - 372, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelFrancis.mo b/OpenHPLTest/Archive/HydroCordModelFrancis.mo similarity index 99% rename from OpenHPLTest/HydroCordModelFrancis.mo rename to OpenHPLTest/Archive/HydroCordModelFrancis.mo index b2c3e2a..d19ceec 100644 --- a/OpenHPLTest/HydroCordModelFrancis.mo +++ b/OpenHPLTest/Archive/HydroCordModelFrancis.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelFrancis "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelFrancis2.mo b/OpenHPLTest/Archive/HydroCordModelFrancis2.mo similarity index 99% rename from OpenHPLTest/HydroCordModelFrancis2.mo rename to OpenHPLTest/Archive/HydroCordModelFrancis2.mo index 652ac88..12945b8 100644 --- a/OpenHPLTest/HydroCordModelFrancis2.mo +++ b/OpenHPLTest/Archive/HydroCordModelFrancis2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelFrancis2 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelFrancisDraftTube.mo b/OpenHPLTest/Archive/HydroCordModelFrancisDraftTube.mo similarity index 99% rename from OpenHPLTest/HydroCordModelFrancisDraftTube.mo rename to OpenHPLTest/Archive/HydroCordModelFrancisDraftTube.mo index 0fa4c10..881125f 100644 --- a/OpenHPLTest/HydroCordModelFrancisDraftTube.mo +++ b/OpenHPLTest/Archive/HydroCordModelFrancisDraftTube.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelFrancisDraftTube "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKP.mo b/OpenHPLTest/Archive/HydroCordModelKP.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKP.mo rename to OpenHPLTest/Archive/HydroCordModelKP.mo index b0098b0..e1c156c 100644 --- a/OpenHPLTest/HydroCordModelKP.mo +++ b/OpenHPLTest/Archive/HydroCordModelKP.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKP "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKP2.mo b/OpenHPLTest/Archive/HydroCordModelKP2.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKP2.mo rename to OpenHPLTest/Archive/HydroCordModelKP2.mo index 1f59bc9..078061e 100644 --- a/OpenHPLTest/HydroCordModelKP2.mo +++ b/OpenHPLTest/Archive/HydroCordModelKP2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKP2 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKPDraftTube.mo b/OpenHPLTest/Archive/HydroCordModelKPDraftTube.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKPDraftTube.mo rename to OpenHPLTest/Archive/HydroCordModelKPDraftTube.mo index be2c542..041bf70 100644 --- a/OpenHPLTest/HydroCordModelKPDraftTube.mo +++ b/OpenHPLTest/Archive/HydroCordModelKPDraftTube.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKPDraftTube "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKPFran.mo b/OpenHPLTest/Archive/HydroCordModelKPFran.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKPFran.mo rename to OpenHPLTest/Archive/HydroCordModelKPFran.mo index 9bcb478..ec9782c 100644 --- a/OpenHPLTest/HydroCordModelKPFran.mo +++ b/OpenHPLTest/Archive/HydroCordModelKPFran.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKPFran "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKPFran2.mo b/OpenHPLTest/Archive/HydroCordModelKPFran2.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKPFran2.mo rename to OpenHPLTest/Archive/HydroCordModelKPFran2.mo index 801e69b..a8e597d 100644 --- a/OpenHPLTest/HydroCordModelKPFran2.mo +++ b/OpenHPLTest/Archive/HydroCordModelKPFran2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKPFran2 "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=46.5, UseInFlow=false) annotation (Placement(transformation( diff --git a/OpenHPLTest/HydroCordModelKPall.mo b/OpenHPLTest/Archive/HydroCordModelKPall.mo similarity index 99% rename from OpenHPLTest/HydroCordModelKPall.mo rename to OpenHPLTest/Archive/HydroCordModelKPall.mo index 350211c..10476fe 100644 --- a/OpenHPLTest/HydroCordModelKPall.mo +++ b/OpenHPLTest/Archive/HydroCordModelKPall.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model HydroCordModelKPall "Model of HP system with simplified models for penstock, turbine, etc." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir( diff --git a/OpenHPLTest/OpenChannel.mo b/OpenHPLTest/Archive/OpenChannel.mo similarity index 98% rename from OpenHPLTest/OpenChannel.mo rename to OpenHPLTest/Archive/OpenChannel.mo index ce3f8f5..8ed7587 100644 --- a/OpenHPLTest/OpenChannel.mo +++ b/OpenHPLTest/Archive/OpenChannel.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model OpenChannel "Model of a hydropower system with open channel model" extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=5) annotation (Placement(transformation( diff --git a/OpenHPLTest/Reservoir.mo b/OpenHPLTest/Archive/Reservoir.mo similarity index 98% rename from OpenHPLTest/Reservoir.mo rename to OpenHPLTest/Archive/Reservoir.mo index 79567fb..40c92c8 100644 --- a/OpenHPLTest/Reservoir.mo +++ b/OpenHPLTest/Archive/Reservoir.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model Reservoir extends Modelica.Icons.Example; diff --git a/OpenHPLTest/TestFitingSimpleHP.mo b/OpenHPLTest/Archive/TestFitingSimpleHP.mo similarity index 99% rename from OpenHPLTest/TestFitingSimpleHP.mo rename to OpenHPLTest/Archive/TestFitingSimpleHP.mo index c4bc0f6..4159b96 100644 --- a/OpenHPLTest/TestFitingSimpleHP.mo +++ b/OpenHPLTest/Archive/TestFitingSimpleHP.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model TestFitingSimpleHP "Model of HP system with pipe fitting" extends Modelica.Icons.Example; OpenHPL.Waterway.Pipe conduit( diff --git a/OpenHPLTest/TestMCB.mo b/OpenHPLTest/Archive/TestMCB.mo similarity index 98% rename from OpenHPLTest/TestMCB.mo rename to OpenHPLTest/Archive/TestMCB.mo index 815e545..a1a8c4c 100644 --- a/OpenHPLTest/TestMCB.mo +++ b/OpenHPLTest/Archive/TestMCB.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model TestMCB "Testing the operation of the MCB" extends Modelica.Icons.Example; OpenHPL.ElectroMech.PowerSystem.MCB mCB(deltaSpeed=0.01) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/OpenHPLTest/TestRunoff.mo b/OpenHPLTest/Archive/TestRunoff.mo similarity index 98% rename from OpenHPLTest/TestRunoff.mo rename to OpenHPLTest/Archive/TestRunoff.mo index 8b0d168..6675db7 100644 --- a/OpenHPLTest/TestRunoff.mo +++ b/OpenHPLTest/Archive/TestRunoff.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model TestRunoff extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir1( diff --git a/OpenHPLTest/TorpaHPPAirCushionTest.mo b/OpenHPLTest/Archive/TorpaHPPAirCushionTest.mo similarity index 98% rename from OpenHPLTest/TorpaHPPAirCushionTest.mo rename to OpenHPLTest/Archive/TorpaHPPAirCushionTest.mo index c812d93..7441c46 100644 --- a/OpenHPLTest/TorpaHPPAirCushionTest.mo +++ b/OpenHPLTest/Archive/TorpaHPPAirCushionTest.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model TorpaHPPAirCushionTest "Test case for air cushion surge tank from Torpa hydro power plant." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=200) diff --git a/OpenHPLTest/TorpaHPPAirCushionTest2.mo b/OpenHPLTest/Archive/TorpaHPPAirCushionTest2.mo similarity index 98% rename from OpenHPLTest/TorpaHPPAirCushionTest2.mo rename to OpenHPLTest/Archive/TorpaHPPAirCushionTest2.mo index e7f6ac3..7e911e6 100644 --- a/OpenHPLTest/TorpaHPPAirCushionTest2.mo +++ b/OpenHPLTest/Archive/TorpaHPPAirCushionTest2.mo @@ -1,4 +1,4 @@ -within OpenHPLTest; +within OpenHPLTest.Archive; model TorpaHPPAirCushionTest2 "Test case for air cushion surge tank from Torpa hydro power plant." extends Modelica.Icons.Example; OpenHPL.Waterway.Reservoir reservoir(h_0=48) annotation (Placement(transformation( diff --git a/OpenHPLTest/Archive/package.mo b/OpenHPLTest/Archive/package.mo new file mode 100644 index 0000000..501102d --- /dev/null +++ b/OpenHPLTest/Archive/package.mo @@ -0,0 +1,6 @@ +within OpenHPLTest; +package Archive + extends Modelica.Icons.ExamplesPackage; + + extends Modelica.Icons.ObsoleteModel; +end Archive; diff --git a/OpenHPLTest/Archive/package.order b/OpenHPLTest/Archive/package.order new file mode 100644 index 0000000..8aaed84 --- /dev/null +++ b/OpenHPLTest/Archive/package.order @@ -0,0 +1,72 @@ +CaseStudingValentynasCase +HPAllTypeFittingsTest +HPBjarneBorresen +HPDraftTube +HPElasticKPPenstock +HPElasticKPPenstockANDIntake +HPElasticKPPenstockCompres +HPElasticKPPenstockFrancis +HPElasticKPPenstockFrancisGov +HPElasticKPPenstockHalfSurgeD +HPElasticKPPenstockWithoutSurge +HPLiniarization +HPLiniarization2 +HPLiniarization3 +HPLiniarization4 +HPLiniarizationFranGen +HPLiniarizationGenIPSL +HPLiniarizationGenIPSLKP +HPLiniarizationKP +HPLiniarizationKPFran +HPLinTest +HPModel +HPModelDEA +HPModelKPLin +HPModelKPLinPI +HPModelLin +HPModelLinPI +HPModelManLin +HPModelObserv +HPModelObservSim +HPSimpleElasticPenstock +HPSimpleElasticPenstockWithoutSurge +HPSimplePenstockAutoRefGate +HPSimplePenstockControl +HPSimplePenstockFrancis +HPSimplePenstockFrancis2 +HPSimplePenstockFrancisGener +HPSimplePenstockFrancisGenIPSL +HPSimplePenstockFrancisGenIPSLGov +HPSimplePenstockFrancisGenIPSLInfBus +HPSimplePenstockGeneratorTest +HPSimplePenstockOpenChannel +HPSimplePenstockPelton +HPSimplePenstockResKP +HPSquareFittingsTest +HPSTAirCushion +HPSTSharpOrifice +HPSTSimple +HPSTThrottleValve +HPTaperedFittingsTest +HydroCordModeKPlFrancisDraftTube +HydroCordModel +HydroCordModel2 +HydroCordModelDraftTube +HydroCordModelDraftTube2 +HydroCordModelDraftTube3 +HydroCordModelFrancis +HydroCordModelFrancis2 +HydroCordModelFrancisDraftTube +HydroCordModelKP +HydroCordModelKP2 +HydroCordModelKPall +HydroCordModelKPDraftTube +HydroCordModelKPFran +HydroCordModelKPFran2 +OpenChannel +Reservoir +TestFitingSimpleHP +TestMCB +TestRunoff +TorpaHPPAirCushionTest +TorpaHPPAirCushionTest2 diff --git a/OpenHPLTest/EmpiricalTurbine.mo b/OpenHPLTest/EmpiricalTurbine.mo deleted file mode 100644 index f4403f8..0000000 --- a/OpenHPLTest/EmpiricalTurbine.mo +++ /dev/null @@ -1,213 +0,0 @@ -within OpenHPLTest; - -package EmpiricalTurbine - extends Modelica.Icons.ExamplesPackage; - - class Information - extends Modelica.Icons.Information; - annotation( - Documentation(info = "The EmpiricalTurbine test package contains a series of test models for documeting and validating the implementation of the EmpiricalTurbine model.
There are two sub-packages:
  • TestBasicFunctions - testing of the Bezier spline algorithm, the search algorithm and the blening function (to find intermediate curves)
  • TurbineTetst - collection of gradually more complex test cases using the EmpiricalTurbine model
At the moment there are som robustness issues with the model. In the default configuration Test03_Turbine have issues with convergens at time t=0.34 with the message
Homotopy solver Newton iteration: Maximum number of iterations reached at time 0.340000, but no root found.
The following documents testing and investigations to resovle this.
In particular it is important to understand some of the following topics and how different implementations may impact the robustness of the models.
Some observations:
  • Turbine model with only upstream and downstream reservoir and constant opening works fine (Test02).
  • Turbine model with upstream and downstream reservoir and ramping opening works fine (Test04).
  • Turbine model with rigid water pipe and constant opening works shows clear convergence issues (Test03).
Additional comments:
In general convergence issues can either be related to \"stiff\" problems or singularities or discontinuous functions (or gradients). Running Test03 with the dassl solver, with startTime=0 and stopTime=1 and varying time step gives the following result.
Time stepComments
0.005Convergence issues from t=0.26500 (nonlinear system 82)
0.01Convergence issues from t=0.34000
0.02Convergence issues from t=0.34000
0.05Convergence issues from t=0.683162
0.10Convergence issues from t=0.683162
0.20Convergence issues from t=0.683162

Normally, for stiff problems, reducing the time step should improve the convergence. This seems not to be the case here.")); - end Information; - - package TestBasicFunctions - extends Modelica.Icons.ExamplesPackage; - // - - model Test01_BezierCurve - extends Modelica.Icons.Example; - Real[ndim] curvePoint; - protected - constant Integer ndim = 3; - parameter Real controlPoints[6, ndim] = {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}; - equation - curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); - annotation( - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), - Documentation(info = "Basic test of evaluation of Bezier curve using deCasteljau algorithm.
Parametric curve plot of curvePoint[1] againts curvPoint[2] should show a smooth trajectory of QED vs nED.


")); - end Test01_BezierCurve; - - // - - model Test02_ControlPoints - extends Modelica.Icons.Example; - // - protected - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public - Real cPoints1[NP, ND], cPoints2[NP, ND], cPoints3[NP, ND]; - Real[ND] curvePoint1, curvePoint2, curvePoint3; - equation - cPoints1 = OpenHPL.Functions.WeightedControlPoints(0.3, tc); - curvePoint1 = OpenHPL.Functions.deCasteljau(time, ND, cPoints1); - cPoints2 = OpenHPL.Functions.WeightedControlPoints(0.5, tc); - curvePoint2 = OpenHPL.Functions.deCasteljau(time, ND, cPoints2); - cPoints3 = OpenHPL.Functions.WeightedControlPoints(0.67, tc); - curvePoint3 = OpenHPL.Functions.deCasteljau(time, ND, cPoints3); - annotation( - Documentation(info = "Test basic functions for finding intermediate control points and evaluate Bezier curve.
Computes three curve trajectories as weighted intermediate curves. Parametrci curve plot of curvePoints1[1] against  curvePoints1[2] and similar for curvePonts2 and curvePoints3 should show smooth curves 2D curves.
"), - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); - end Test02_ControlPoints; - end TestBasicFunctions; - - package TurbineTest - extends Modelica.Icons.ExamplesPackage; - import SI = Modelica.Units.SI; - - partial model AbstractTurbineTest - extends Modelica.Icons.Example; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-84, 82}, extent = {{-10, -10}, {10, 10}}))); - protected - constant Integer NC = 11; - constant Integer NP = 6; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.014, 0.030, 0.050, 0.100, 0.200, 0.300, 0.400, 0.500, 0.601, 0.800, 1.000}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.07, 0.07}, {0.30, 0.10, 0.07}, {0.54, -0.07, -0.03}, {0.92, 0.25, 0.13}, {1.13, -0.11, -0.17}, {1.43, -0.06, -0.31}}, {{0.00, 0.11, 0.15}, {0.32, 0.15, 0.17}, {0.51, -0.06, -0.09}, {1.00, 0.35, 0.35}, {1.11, -0.12, -0.30}, {1.43, -0.09, -0.31}}, {{0.00, 0.15, 0.23}, {0.34, 0.21, 0.24}, {0.47, -0.08, -0.01}, {1.07, 0.46, 0.35}, {1.09, -0.15, -0.24}, {1.43, -0.11, -0.37}}, {{0.00, 0.27, 0.45}, {0.37, 0.30, 0.40}, {0.40, 0.05, 0.30}, {1.38, 0.60, 0.26}, {0.97, -0.19, -0.17}, {1.43, -0.13, -0.42}}, {{0.00, 0.51, 0.92}, {0.40, 0.53, 0.80}, {0.45, 0.31, 0.83}, {1.48, 0.75, 0.14}, {0.99, -0.14, -0.06}, {1.44, -0.17, -0.49}}, {{0.00, 0.77, 1.41}, {0.44, 0.79, 1.23}, {0.51, 0.56, 1.29}, {1.62, 0.82, -0.14}, {0.99, -0.05, 0.11}, {1.43, -0.18, -0.51}}, {{0.00, 1.01, 1.87}, {0.48, 1.05, 1.70}, {0.56, 0.74, 1.46}, {1.68, 0.84, -0.35}, {1.03, 0.06, 0.23}, {1.43, -0.19, -0.53}}, {{0.00, 1.25, 2.27}, {0.52, 1.26, 1.99}, {0.63, 1.00, 1.84}, {1.70, 0.83, -0.64}, {1.08, 0.17, 0.35}, {1.43, -0.18, -0.52}}, {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}, {{0.00, 1.79, 3.06}, {0.55, 1.78, 2.77}, {0.99, 1.43, 1.67}, {1.53, 0.94, -0.59}, {1.20, 0.31, 0.28}, {1.45, -0.16, -0.54}}, {{0.00, 2.10, 3.41}, {0.59, 2.02, 2.99}, {1.05, 1.63, 1.56}, {1.53, 1.04, -0.47}, {1.22, 0.40, 0.24}, {1.45, -0.13, -0.54}}}; - /* - constant Integer NC = 5; - constant Integer NP = 4; - constant Integer ND = 3; - parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; - parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; - */ - parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); - public - parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( - Placement(transformation(origin = {-82, 54}, extent = {{-10, -10}, {10, 10}}))); - - - end AbstractTurbineTest; - - model Test01_TurbineLookUp - extends AbstractTurbineTest; - public - Real opening; - SI.Length Ht "Turbine head"; - SI.VolumeFlowRate Qt "Turbine flow rate"; - SI.Frequency nrps "Rotational speed"; - SI.Torque Tt "Turbine torque"; - equation - Ht = 425.0; - nrps = 1.0e-03 + 8.33*time*1.4; - opening = 0.6; - (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, tc); - annotation( - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), - Documentation(info = "Basic test of  the turbine lookup function. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.
Running the model the turbine flow Qt or turbine torque Tt can be ploted as function of time.
")); - end Test01_TurbineLookUp; - - // - - model Test02_Turbine - extends AbstractTurbineTest; - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - equation - connect(overvann.o, turbine.i) annotation( - Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(const.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - annotation( - Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.
Initial speed f_0 is set to 0.2 and the turbine is permitted to speed up as function of computed turbine torque Tt.

"), - experiment(StartTime = 0, StopTime = 20, Tolerance = 1e-06, Interval = 0.001)); - end Test02_Turbine; - - // - - model Test03_Turbine - extends AbstractTurbineTest; - - public - OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation( - Placement(transformation(origin = {-44, 32}, extent = {{-10, -10}, {10, 10}}))); - - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-80, 32}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, enable_f = true, f_0 = 0.2) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Constant const(k = 0.603) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - equation - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(const.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - connect(overvann.o, tunnel.i) annotation( - Line(points = {{-70, 32}, {-54, 32}}, color = {0, 128, 255})); - connect(tunnel.o, turbine.i) annotation( - Line(points = {{-34, 32}, {-24, 32}, {-24, 12}, {2, 12}}, color = {0, 128, 255})); - annotation( - experiment(StartTime = 0, StopTime = 10.0, Tolerance = 1e-06, Interval = 0.2000), - Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway."), - __OpenModelica_commandLineOptions = "--matchingAlgorithm=PFPlusExt --indexReductionMethod=dynamicStateSelection -d=initialization,NLSanalyticJacobian", - __OpenModelica_simulationFlags(lv = "LOG_STDOUT,LOG_ASSERT,LOG_STATS", s = "dassl", noHomotopyOnFirstTry = "()",homMaxNewtonSteps= "50",homMaxTries="30",variableFilter = ".*")); - end Test03_Turbine; - - // - - model Test04_Turbine - extends AbstractTurbineTest; - public - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 1.0, enable_f = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.Ramp ramp(height = -1, duration = 10, offset = 1, startTime = 2) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation( - Placement(transformation(origin = {-80, 44}, extent = {{-12, 24}, {6, 6}}))); - equation - connect(overvann.o, turbine.i) annotation( - Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(ramp.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - annotation( - experiment(StartTime = 0, StopTime = 15, Tolerance = 1e-06, Interval = 0.01)); -end Test04_Turbine; - // - model Test05_Turbine - extends AbstractTurbineTest; - // - public - OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation( - Placement(transformation(origin = {-82, 12}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation( - Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation( - Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation( - Placement(transformation(origin = {-42, 12}, extent = {{-10, -10}, {10, 10}}))); - - Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation( - Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - equation - connect(turbine.o, undervann.o) annotation( - Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); - connect(ramp.y, turbine.u_t) annotation( - Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); - connect(overvann.o, tunnel.i) annotation( - Line(points = {{-72, 12}, {-52, 12}}, color = {0, 128, 255})); - connect(tunnel.o, turbine.i) annotation( - Line(points = {{-32, 12}, {2, 12}}, color = {0, 128, 255})); - end Test05_Turbine; - end TurbineTest; -end EmpiricalTurbine; diff --git a/OpenHPLTest/EmpiricalTurbine/Information.mo b/OpenHPLTest/EmpiricalTurbine/Information.mo new file mode 100644 index 0000000..cf1e5a6 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/Information.mo @@ -0,0 +1,6 @@ +within OpenHPLTest.EmpiricalTurbine; +class Information +extends Modelica.Icons.Information; + annotation ( + Documentation(info = "The EmpiricalTurbine test package contains a series of test models for documeting and validating the implementation of the EmpiricalTurbine model.
There are two sub-packages:
  • TestBasicFunctions - testing of the Bezier spline algorithm, the search algorithm and the blening function (to find intermediate curves)
  • TurbineTetst - collection of gradually more complex test cases using the EmpiricalTurbine model
At the moment there are som robustness issues with the model. In the default configuration Test03_Turbine have issues with convergens at time t=0.34 with the message
Homotopy solver Newton iteration: Maximum number of iterations reached at time 0.340000, but no root found.
The following documents testing and investigations to resovle this.
In particular it is important to understand some of the following topics and how different implementations may impact the robustness of the models.
Some observations:
  • Turbine model with only upstream and downstream reservoir and constant opening works fine (Test02).
  • Turbine model with upstream and downstream reservoir and ramping opening works fine (Test04).
  • Turbine model with rigid water pipe and constant opening works shows clear convergence issues (Test03).
Additional comments:
In general convergence issues can either be related to \"stiff\" problems or singularities or discontinuous functions (or gradients). Running Test03 with the dassl solver, with startTime=0 and stopTime=1 and varying time step gives the following result.
Time stepComments
0.005Convergence issues from t=0.26500 (nonlinear system 82)
0.01Convergence issues from t=0.34000
0.02Convergence issues from t=0.34000
0.05Convergence issues from t=0.683162
0.10Convergence issues from t=0.683162
0.20Convergence issues from t=0.683162

Normally, for stiff problems, reducing the time step should improve the convergence. This seems not to be the case here.")); +end Information; diff --git a/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test01_BezierCurve.mo b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test01_BezierCurve.mo new file mode 100644 index 0000000..1bccb13 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test01_BezierCurve.mo @@ -0,0 +1,13 @@ +within OpenHPLTest.EmpiricalTurbine.TestBasicFunctions; +model Test01_BezierCurve + extends Modelica.Icons.Example; + Real[ndim] curvePoint; +protected + constant Integer ndim = 3; + parameter Real controlPoints[6, ndim] = {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}; +equation + curvePoint = OpenHPL.Functions.deCasteljau(time, ndim, controlPoints); + annotation ( + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), + Documentation(info = "Basic test of evaluation of Bezier curve using deCasteljau algorithm.
Parametric curve plot of curvePoint[1] againts curvPoint[2] should show a smooth trajectory of QED vs nED.


")); +end Test01_BezierCurve; diff --git a/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test02_ControlPoints.mo b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test02_ControlPoints.mo new file mode 100644 index 0000000..754e335 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/Test02_ControlPoints.mo @@ -0,0 +1,27 @@ +within OpenHPLTest.EmpiricalTurbine.TestBasicFunctions; +model Test02_ControlPoints + extends Modelica.Icons.Example; + // +protected + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); +public + Real cPoints1[NP, ND], cPoints2[NP, ND], cPoints3[NP, ND]; + Real[ND] curvePoint1; + Real[ND] curvePoint2; + Real[ND] curvePoint3; +equation + cPoints1 = OpenHPL.Functions.WeightedControlPoints(0.3, tc); + curvePoint1 = OpenHPL.Functions.deCasteljau(time, ND, cPoints1); + cPoints2 = OpenHPL.Functions.WeightedControlPoints(0.5, tc); + curvePoint2 = OpenHPL.Functions.deCasteljau(time, ND, cPoints2); + cPoints3 = OpenHPL.Functions.WeightedControlPoints(0.67, tc); + curvePoint3 = OpenHPL.Functions.deCasteljau(time, ND, cPoints3); + annotation ( + Documentation(info = "Test basic functions for finding intermediate control points and evaluate Bezier curve.
Computes three curve trajectories as weighted intermediate curves. Parametrci curve plot of curvePoints1[1] against  curvePoints1[2] and similar for curvePonts2 and curvePoints3 should show smooth curves 2D curves.
"), + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); +end Test02_ControlPoints; diff --git a/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.mo b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.mo new file mode 100644 index 0000000..2d071fd --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.mo @@ -0,0 +1,9 @@ +within OpenHPLTest.EmpiricalTurbine; +package TestBasicFunctions + extends Modelica.Icons.ExamplesPackage; + // + + + // + +end TestBasicFunctions; diff --git a/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.order b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.order new file mode 100644 index 0000000..9aa35a0 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TestBasicFunctions/package.order @@ -0,0 +1,2 @@ +Test01_BezierCurve +Test02_ControlPoints diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/AbstractTurbineTest.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/AbstractTurbineTest.mo new file mode 100644 index 0000000..f4f675b --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/AbstractTurbineTest.mo @@ -0,0 +1,24 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +partial model AbstractTurbineTest + extends Modelica.Icons.Example; + inner OpenHPL.Data data annotation ( + Placement(transformation(origin = {-84, 82}, extent = {{-10, -10}, {10, 10}}))); +protected + constant Integer NC = 11; + constant Integer NP = 6; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.014, 0.030, 0.050, 0.100, 0.200, 0.300, 0.400, 0.500, 0.601, 0.800, 1.000}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.07, 0.07}, {0.30, 0.10, 0.07}, {0.54, -0.07, -0.03}, {0.92, 0.25, 0.13}, {1.13, -0.11, -0.17}, {1.43, -0.06, -0.31}}, {{0.00, 0.11, 0.15}, {0.32, 0.15, 0.17}, {0.51, -0.06, -0.09}, {1.00, 0.35, 0.35}, {1.11, -0.12, -0.30}, {1.43, -0.09, -0.31}}, {{0.00, 0.15, 0.23}, {0.34, 0.21, 0.24}, {0.47, -0.08, -0.01}, {1.07, 0.46, 0.35}, {1.09, -0.15, -0.24}, {1.43, -0.11, -0.37}}, {{0.00, 0.27, 0.45}, {0.37, 0.30, 0.40}, {0.40, 0.05, 0.30}, {1.38, 0.60, 0.26}, {0.97, -0.19, -0.17}, {1.43, -0.13, -0.42}}, {{0.00, 0.51, 0.92}, {0.40, 0.53, 0.80}, {0.45, 0.31, 0.83}, {1.48, 0.75, 0.14}, {0.99, -0.14, -0.06}, {1.44, -0.17, -0.49}}, {{0.00, 0.77, 1.41}, {0.44, 0.79, 1.23}, {0.51, 0.56, 1.29}, {1.62, 0.82, -0.14}, {0.99, -0.05, 0.11}, {1.43, -0.18, -0.51}}, {{0.00, 1.01, 1.87}, {0.48, 1.05, 1.70}, {0.56, 0.74, 1.46}, {1.68, 0.84, -0.35}, {1.03, 0.06, 0.23}, {1.43, -0.19, -0.53}}, {{0.00, 1.25, 2.27}, {0.52, 1.26, 1.99}, {0.63, 1.00, 1.84}, {1.70, 0.83, -0.64}, {1.08, 0.17, 0.35}, {1.43, -0.18, -0.52}}, {{0.00, 1.46, 2.60}, {0.53, 1.45, 2.33}, {0.77, 1.19, 1.80}, {1.63, 0.86, -0.58}, {1.13, 0.24, 0.31}, {1.43, -0.17, -0.52}}, {{0.00, 1.79, 3.06}, {0.55, 1.78, 2.77}, {0.99, 1.43, 1.67}, {1.53, 0.94, -0.59}, {1.20, 0.31, 0.28}, {1.45, -0.16, -0.54}}, {{0.00, 2.10, 3.41}, {0.59, 2.02, 2.99}, {1.05, 1.63, 1.56}, {1.53, 1.04, -0.47}, {1.22, 0.40, 0.24}, {1.45, -0.13, -0.54}}}; + /* + constant Integer NC = 5; + constant Integer NP = 4; + constant Integer ND = 3; + parameter Real openingArray[NC] = {0.10, 0.25, 0.50, 0.75, 1.00}; + parameter Real controlPoints[NC, NP, ND] = {{{0.00, 0.18, 0.26}, {0.41, 0.10, 0.17}, {1.04, 0.31, 0.25}, {1.32, -0.04, -0.21}}, {{0.00, 0.44, 0.73}, {0.43, 0.37, 0.67}, {1.27, 0.55, 0.29}, {1.38, 0.00, -0.19}}, {{0.00, 0.91, 1.55}, {0.59, 0.89, 1.33}, {1.57, 0.79, 0.19}, {1.51, 0.00, -0.29}}, {{0.00, 1.30, 2.11}, {0.78, 1.33, 1.77}, {1.72, 0.92, -0.12}, {1.58, 0.00, -0.28}}, {{0.00, 1.57, 2.41}, {0.92, 1.63, 1.91}, {1.82, 1.02, -0.30}, {1.63, 0.00, -0.35}}}; + */ + parameter OpenHPL.Types.TurbineCharacteristics tc(nCurves = NC, nPoints = NP, nDim = ND, opening = openingArray, data = controlPoints); +public + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation ( + Placement(transformation(origin = {-82, 54}, extent = {{-10, -10}, {10, 10}}))); + +end AbstractTurbineTest; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test01_TurbineLookUp.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test01_TurbineLookUp.mo new file mode 100644 index 0000000..7d03fe4 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test01_TurbineLookUp.mo @@ -0,0 +1,18 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +model Test01_TurbineLookUp + extends AbstractTurbineTest; +public + Real opening; + SI.Length Ht "Turbine head"; + SI.VolumeFlowRate Qt "Turbine flow rate"; + SI.Frequency nrps "Rotational speed"; + SI.Torque Tt "Turbine torque"; +equation + Ht = 425.0; + nrps = 1.0e-03 + 8.33*time*1.4; + opening = 0.6; + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, tc); + annotation ( + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.001), + Documentation(info = "Basic test of  the turbine lookup function. The head is kept constant, the speed is a linear function of time, and the flow and torque is computed from the model.
Running the model the turbine flow Qt or turbine torque Tt can be ploted as function of time.
")); +end Test01_TurbineLookUp; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo new file mode 100644 index 0000000..2a89add --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo @@ -0,0 +1,22 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +model Test02_Turbine +extends AbstractTurbineTest; + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation ( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation ( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation ( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); +equation + connect(overvann.o, turbine.i) annotation ( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation ( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation ( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + annotation ( + Documentation(info = "Basic test of EpiricalTurbine model. Opening is kept constant.
Initial speed f_0 is set to 0.2 and the turbine is permitted to speed up as function of computed turbine torque Tt.

"), + experiment(StartTime = 0, StopTime = 20, Tolerance = 1e-06, Interval = 0.001)); +end Test02_Turbine; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo new file mode 100644 index 0000000..d541f95 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo @@ -0,0 +1,37 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +model Test03_Turbine + extends AbstractTurbineTest; + +public + OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation ( + Placement(transformation(origin = {-44, 32}, extent = {{-10, -10}, {10, 10}}))); + + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation ( + Placement(transformation(origin = {-80, 32}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, enable_f = true, f_0 = 0.2) annotation ( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Constant const(k = 0.603) annotation ( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); +equation + connect(turbine.o, undervann.o) annotation ( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(const.y, turbine.u_t) annotation ( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); + connect(overvann.o, tunnel.i) annotation ( + Line(points = {{-70, 32}, {-54, 32}}, color = {0, 128, 255})); + connect(tunnel.o, turbine.i) annotation ( + Line(points = {{-34, 32}, {-24, 32}, {-24, 12}, {2, 12}}, color = {0, 128, 255})); + annotation ( + experiment(StartTime = 0, StopTime = 10.0, Tolerance = 1e-06, Interval = 0.2000), + Documentation(info = "Generic test with penstock and emprical turbine model. The opening is kept fixed and the unit is allowed to speed up to runaway."), + __OpenModelica_commandLineOptions="--matchingAlgorithm=PFPlusExt --indexReductionMethod=dynamicStateSelection -d=initialization,NLSanalyticJacobian", + __OpenModelica_simulationFlags( + lv="LOG_STDOUT,LOG_ASSERT,LOG_STATS", + s="dassl", + noHomotopyOnFirstTry="()", + homMaxNewtonSteps="50", + homMaxTries="30", + variableFilter=".*")); +end Test03_Turbine; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo new file mode 100644 index 0000000..5a3be68 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo @@ -0,0 +1,24 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +model Test04_Turbine + extends AbstractTurbineTest; +public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation ( + Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 1.0, enable_f = true) annotation ( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.Ramp ramp(height = -1, duration = 10, offset = 1, startTime = 2) annotation ( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + parameter OpenHPL.Types.TurbineData turbineData(Dn = 1.59, nrps = 8.33, Hbep = 425.0, Qbep = 23.95, Tbep = 1.718E+06, openingBep = 0.601, g = data.g, rho = data.rho) annotation ( + Placement(transformation(origin = {-80, 44}, extent = {{-12, 24}, {6, 6}}))); +equation + connect(overvann.o, turbine.i) annotation ( + Line(points = {{-36, 28}, {-20, 28}, {-20, 12}, {2, 12}}, color = {0, 128, 255})); + connect(turbine.o, undervann.o) annotation ( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(ramp.y, turbine.u_t) annotation ( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); +annotation ( + experiment(StartTime = 0, StopTime = 15, Tolerance = 1e-06, Interval = 0.01)); +end Test04_Turbine; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo new file mode 100644 index 0000000..d78e99c --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo @@ -0,0 +1,26 @@ +within OpenHPLTest.EmpiricalTurbine.TurbineTest; +model Test05_Turbine + extends AbstractTurbineTest; + // +public + OpenHPL.Waterway.Reservoir overvann(h_0 = 425.0, constantLevel = true) annotation ( + Placement(transformation(origin = {-82, 12}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( + Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation ( + Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation ( + Placement(transformation(origin = {-42, 12}, extent = {{-10, -10}, {10, 10}}))); + + Modelica.Blocks.Sources.Ramp ramp(height = 1, duration = 10, offset = 0, startTime = 0.1) annotation ( + Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); +equation + connect(turbine.o, undervann.o) annotation ( + Line(points = {{22, 12}, {28, 12}, {28, -16}, {62, -16}}, color = {0, 128, 255})); + connect(ramp.y, turbine.u_t) annotation ( + Line(points = {{41, 72}, {4, 72}, {4, 24}}, color = {0, 0, 127})); +connect(overvann.o, tunnel.i) annotation ( + Line(points = {{-72, 12}, {-52, 12}}, color = {0, 128, 255})); +connect(tunnel.o, turbine.i) annotation ( + Line(points = {{-32, 12}, {2, 12}}, color = {0, 128, 255})); +end Test05_Turbine; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.mo new file mode 100644 index 0000000..d8210d6 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.mo @@ -0,0 +1,17 @@ +within OpenHPLTest.EmpiricalTurbine; +package TurbineTest + extends Modelica.Icons.ExamplesPackage; + import Modelica.Units.SI; + + + + // + + + // + + + // + + // +end TurbineTest; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.order b/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.order new file mode 100644 index 0000000..871b47d --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/package.order @@ -0,0 +1,6 @@ +AbstractTurbineTest +Test01_TurbineLookUp +Test02_Turbine +Test03_Turbine +Test04_Turbine +Test05_Turbine diff --git a/OpenHPLTest/EmpiricalTurbine/package.mo b/OpenHPLTest/EmpiricalTurbine/package.mo new file mode 100644 index 0000000..c186e19 --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/package.mo @@ -0,0 +1,7 @@ +within OpenHPLTest; +package EmpiricalTurbine + extends Modelica.Icons.ExamplesPackage; + + + +end EmpiricalTurbine; diff --git a/OpenHPLTest/EmpiricalTurbine/package.order b/OpenHPLTest/EmpiricalTurbine/package.order new file mode 100644 index 0000000..dc6141d --- /dev/null +++ b/OpenHPLTest/EmpiricalTurbine/package.order @@ -0,0 +1,3 @@ +Information +TestBasicFunctions +TurbineTest diff --git a/OpenHPLTest/TestPipe.mo b/OpenHPLTest/TestPipe.mo deleted file mode 100644 index 1148e23..0000000 --- a/OpenHPLTest/TestPipe.mo +++ /dev/null @@ -1,105 +0,0 @@ -within OpenHPLTest; - -package TestPipe - extends Modelica.Icons.ExamplesPackage; - - partial model AbstractTest - extends Modelica.Icons.Example; - // - inner OpenHPL.Data data(Vdot_0 = 0.0, p_a = 0.0, p_eps = 0.0) annotation( - Placement(transformation(origin = {-70, 70}, extent = {{-10, -10}, {10, 10}}))); - // - parameter Modelica.Units.SI.Length Ln = 1000.; - parameter Modelica.Units.SI.Length Dn = sqrt(A*4/Modelica.Constants.pi); - Real error; - OpenHPL.Waterway.Reservoir Upstream(h_0 = 100, constantLevel = true) annotation( - Placement(transformation(origin = {-50, 30}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Reservoir Downstream(constantLevel = true, h_0 = 0) annotation( - Placement(transformation(origin = {70, 10}, extent = {{10, -10}, {-10, 10}}))); - protected - constant Modelica.Units.SI.Area A = 0.1; - end AbstractTest; - - model Test01 - extends AbstractTest; - OpenHPL.Waterway.Pipe pipe1(H = 0, L = Ln, D_i = 0.8*Dn, D_o = 1.2*Dn) annotation( - Placement(transformation(origin = {0, 60}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Pipe pipe2(H = 0, L = Ln, D_i = Dn, D_o = Dn) annotation( - Placement(transformation(origin = {0, 30}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Pipe pipe3(H = 0, L = Ln, D_i = 1.2*Dn, D_o = 0.8*Dn) annotation( - Placement(transformation(extent = {{-10, -10}, {10, 10}}))); - equation - error=sqrt((pipe1.mdot-pipe2.mdot)^2 + (pipe2.mdot-pipe3.mdot)^2 + (pipe3.mdot-pipe1.mdot)^2); - connect(Upstream.o, pipe1.i) annotation( - Line(points = {{-40, 30}, {-20, 30}, {-20, 60}, {-10, 60}}, color = {0, 128, 255})); - connect(pipe2.i, Upstream.o) annotation( - Line(points = {{-10, 30}, {-40, 30}}, color = {0, 128, 255})); - connect(Upstream.o, pipe3.i) annotation( - Line(points = {{-40, 30}, {-20, 30}, {-20, 0}, {-10, 0}}, color = {0, 128, 255})); - connect(pipe1.o, Downstream.o) annotation( - Line(points = {{10, 60}, {50, 60}, {50, 10}, {60, 10}}, color = {0, 128, 255})); - connect(pipe2.o, Downstream.o) annotation( - Line(points = {{10, 30}, {50, 30}, {50, 10}, {60, 10}}, color = {0, 128, 255})); - connect(pipe3.o, Downstream.o) annotation( - Line(points = {{10, 0}, {50, 0}, {50, 10}, {60, 10}}, color = {0, 128, 255})); - annotation( - experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); -end Test01; - - model Test02 - extends OpenHPLTest.TestPipe.Test01(data(SteadyState = true)); - equation - - end Test02; - - model Test03 - extends AbstractTest(data(SteadyState = true)); - - OpenHPL.Waterway.Pipe pipe1(H = 0, L = Ln, D_i = Dn) annotation( - Placement(transformation(origin = {0, 60}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Pipe pipe2(H = 0, L = Ln, D_i = Dn) annotation( - Placement(transformation(origin = {0, 30}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Pipe pipe3(H = 0, L = Ln, D_i = Dn) annotation( Placement(transformation(extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Valve valve1(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation( - Placement(transformation(origin = {30, 60}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Valve valve2(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation( - Placement(transformation(origin = {30, 30}, extent = {{-10, -10}, {10, 10}}))); - OpenHPL.Waterway.Valve valve3(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation( - Placement(transformation(origin = {30, 0}, extent = {{-10, 10}, {10, -10}}))); - Modelica.Blocks.Sources.Ramp ramp1(height = 1, duration = 5, offset = 0, startTime = 2) annotation( - Placement(transformation(origin = {80, 80}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - Modelica.Blocks.Sources.Ramp ramp2(duration = 5, height = 0.5, offset = 0.5, startTime = 2) annotation( - Placement(transformation(origin = {80, 50}, extent = {{10, -10}, {-10, 10}}))); - Modelica.Blocks.Sources.Ramp ramp3(duration = 5, height = -1, offset = 1, startTime = 2) annotation( - Placement(transformation(origin = {80, -20}, extent = {{10, -10}, {-10, 10}}))); - equation - error=sqrt((pipe1.mdot-pipe2.mdot)^2 + (pipe2.mdot-pipe3.mdot)^2 + (pipe3.mdot-pipe1.mdot)^2); - connect(pipe1.o, valve1.i) annotation( - Line(points = {{10, 60}, {20, 60}}, color = {0, 128, 255})); - connect(pipe2.o, valve2.i) annotation( - Line(points = {{10, 30}, {20, 30}}, color = {0, 128, 255})); - connect(pipe3.o, valve3.i) annotation( - Line(points = {{10, 0}, {20, 0}}, color = {0, 128, 255})); - connect(ramp1.y, valve1.opening) annotation( - Line(points = {{69, 80}, {30, 80}, {30, 68}}, color = {0, 0, 127})); - connect(valve1.o, Downstream.o) annotation( - Line(points = {{40, 60}, {52, 60}, {52, 10}, {62, 10}}, color = {0, 128, 255})); - connect(valve2.o, Downstream.o) annotation( - Line(points = {{40, 30}, {52, 30}, {52, 10}, {62, 10}}, color = {0, 128, 255})); - connect(ramp3.y, valve3.opening) annotation( - Line(points = {{69, -20}, {30, -20}, {30, -8}}, color = {0, 0, 127})); - connect(valve3.o, Downstream.o) annotation( - Line(points = {{40, 0}, {52, 0}, {52, 10}, {62, 10}}, color = {0, 128, 255})); - connect(valve2.opening, ramp2.y) annotation( - Line(points = {{30, 38}, {30, 50}, {70, 50}}, color = {0, 0, 127})); - connect(Upstream.o, pipe2.i) annotation( - Line(points = {{-40, 30}, {-10, 30}}, color = {0, 128, 255})); - connect(Upstream.o, pipe1.i) annotation( - Line(points = {{-40, 30}, {-20, 30}, {-20, 60}, {-10, 60}}, color = {0, 128, 255})); - connect(Upstream.o, pipe3.i) annotation( - Line(points = {{-40, 30}, {-20, 30}, {-20, 0}, {-10, 0}}, color = {0, 128, 255})); - annotation( - experiment(StartTime = 0, StopTime = 30, Tolerance = 1e-06, Interval = 0.001)); -end Test03; - -end TestPipe; \ No newline at end of file diff --git a/OpenHPLTest/TestPipe/AbstractTest.mo b/OpenHPLTest/TestPipe/AbstractTest.mo new file mode 100644 index 0000000..1f0f7c1 --- /dev/null +++ b/OpenHPLTest/TestPipe/AbstractTest.mo @@ -0,0 +1,17 @@ +within OpenHPLTest.TestPipe; +partial model AbstractTest + extends Modelica.Icons.Example; + // + inner OpenHPL.Data data(Vdot_0 = 0.0, p_a = 0.0, p_eps = 0.0) annotation ( + Placement(transformation(origin = {-70, 70}, extent = {{-10, -10}, {10, 10}}))); + // + parameter Modelica.Units.SI.Length Ln = 1000.; + parameter Modelica.Units.SI.Length Dn = sqrt(A*4/Modelica.Constants.pi); + Real error; + OpenHPL.Waterway.Reservoir Upstream(h_0 = 100, constantLevel = true) annotation ( + Placement(transformation(origin = {-50, 30}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Reservoir Downstream(constantLevel = true, h_0 = 0) annotation ( + Placement(transformation(origin = {70, 10}, extent = {{10, -10}, {-10, 10}}))); +protected + constant Modelica.Units.SI.Area A = 0.1; +end AbstractTest; diff --git a/OpenHPLTest/TestPipe/Test01.mo b/OpenHPLTest/TestPipe/Test01.mo new file mode 100644 index 0000000..76af1da --- /dev/null +++ b/OpenHPLTest/TestPipe/Test01.mo @@ -0,0 +1,26 @@ +within OpenHPLTest.TestPipe; +model Test01 + extends AbstractTest; + OpenHPL.Waterway.Pipe pipe1(H = 0, L = Ln, D_i = 0.8*Dn, D_o = 1.2*Dn) annotation ( + Placement(transformation(origin = {0, 60}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe pipe2(H = 0, L = Ln, D_i = Dn, D_o = Dn) annotation ( + Placement(transformation(origin = {0, 30}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe pipe3(H = 0, L = Ln, D_i = 1.2*Dn, D_o = 0.8*Dn) annotation ( + Placement(transformation(extent = {{-10, -10}, {10, 10}}))); +equation + error=sqrt((pipe1.mdot-pipe2.mdot)^2 + (pipe2.mdot-pipe3.mdot)^2 + (pipe3.mdot-pipe1.mdot)^2); +connect(Upstream.o, pipe1.i) annotation ( + Line(points = {{-40, 30}, {-20, 30}, {-20, 60}, {-10, 60}}, color = {0, 128, 255})); +connect(pipe2.i, Upstream.o) annotation ( + Line(points = {{-10, 30}, {-40, 30}}, color = {0, 128, 255})); +connect(Upstream.o, pipe3.i) annotation ( + Line(points = {{-40, 30}, {-20, 30}, {-20, 0}, {-10, 0}}, color = {0, 128, 255})); +connect(pipe1.o, Downstream.o) annotation ( + Line(points = {{10, 60}, {50, 60}, {50, 10}, {60, 10}}, color = {0, 128, 255})); +connect(pipe2.o, Downstream.o) annotation ( + Line(points = {{10, 30}, {50, 30}, {50, 10}, {60, 10}}, color = {0, 128, 255})); +connect(pipe3.o, Downstream.o) annotation ( + Line(points = {{10, 0}, {50, 0}, {50, 10}, {60, 10}}, color = {0, 128, 255})); +annotation ( + experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002)); +end Test01; diff --git a/OpenHPLTest/TestPipe/Test02.mo b/OpenHPLTest/TestPipe/Test02.mo new file mode 100644 index 0000000..024ff01 --- /dev/null +++ b/OpenHPLTest/TestPipe/Test02.mo @@ -0,0 +1,6 @@ +within OpenHPLTest.TestPipe; +model Test02 + extends OpenHPLTest.TestPipe.Test01(data(SteadyState=true)); +equation + +end Test02; diff --git a/OpenHPLTest/TestPipe/Test03.mo b/OpenHPLTest/TestPipe/Test03.mo new file mode 100644 index 0000000..cd4bb21 --- /dev/null +++ b/OpenHPLTest/TestPipe/Test03.mo @@ -0,0 +1,50 @@ +within OpenHPLTest.TestPipe; +model Test03 + extends AbstractTest(data(SteadyState = true)); + + OpenHPL.Waterway.Pipe pipe1(H = 0, L = Ln, D_i = Dn) annotation ( + Placement(transformation(origin = {0, 60}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe pipe2(H = 0, L = Ln, D_i = Dn) annotation ( + Placement(transformation(origin = {0, 30}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Pipe pipe3(H = 0, L = Ln, D_i = Dn) annotation ( Placement(transformation(extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Valve valve1(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation ( + Placement(transformation(origin = {30, 60}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Valve valve2(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation ( + Placement(transformation(origin = {30, 30}, extent = {{-10, -10}, {10, 10}}))); + OpenHPL.Waterway.Valve valve3(ValveCapacity = false, H_n = 100, Vdot_n = 1) annotation ( + Placement(transformation(origin = {30, 0}, extent = {{-10, 10}, {10, -10}}))); + Modelica.Blocks.Sources.Ramp ramp1(height = 1, duration = 5, offset = 0, startTime = 2) annotation ( + Placement(transformation(origin = {80, 80}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); + Modelica.Blocks.Sources.Ramp ramp2(duration = 5, height = 0.5, offset = 0.5, startTime = 2) annotation ( + Placement(transformation(origin = {80, 50}, extent = {{10, -10}, {-10, 10}}))); + Modelica.Blocks.Sources.Ramp ramp3(duration = 5, height = -1, offset = 1, startTime = 2) annotation ( + Placement(transformation(origin = {80, -20}, extent = {{10, -10}, {-10, 10}}))); +equation +error=sqrt((pipe1.mdot-pipe2.mdot)^2 + (pipe2.mdot-pipe3.mdot)^2 + (pipe3.mdot-pipe1.mdot)^2); +connect(pipe1.o, valve1.i) annotation ( + Line(points = {{10, 60}, {20, 60}}, color = {0, 128, 255})); +connect(pipe2.o, valve2.i) annotation ( + Line(points = {{10, 30}, {20, 30}}, color = {0, 128, 255})); +connect(pipe3.o, valve3.i) annotation ( + Line(points = {{10, 0}, {20, 0}}, color = {0, 128, 255})); +connect(ramp1.y, valve1.opening) annotation ( + Line(points = {{69, 80}, {30, 80}, {30, 68}}, color = {0, 0, 127})); +connect(valve1.o, Downstream.o) annotation ( + Line(points = {{40, 60}, {52, 60}, {52, 10}, {62, 10}}, color = {0, 128, 255})); +connect(valve2.o, Downstream.o) annotation ( + Line(points = {{40, 30}, {52, 30}, {52, 10}, {62, 10}}, color = {0, 128, 255})); +connect(ramp3.y, valve3.opening) annotation ( + Line(points = {{69, -20}, {30, -20}, {30, -8}}, color = {0, 0, 127})); +connect(valve3.o, Downstream.o) annotation ( + Line(points = {{40, 0}, {52, 0}, {52, 10}, {62, 10}}, color = {0, 128, 255})); +connect(valve2.opening, ramp2.y) annotation ( + Line(points = {{30, 38}, {30, 50}, {70, 50}}, color = {0, 0, 127})); +connect(Upstream.o, pipe2.i) annotation ( + Line(points = {{-40, 30}, {-10, 30}}, color = {0, 128, 255})); +connect(Upstream.o, pipe1.i) annotation ( + Line(points = {{-40, 30}, {-20, 30}, {-20, 60}, {-10, 60}}, color = {0, 128, 255})); +connect(Upstream.o, pipe3.i) annotation ( + Line(points = {{-40, 30}, {-20, 30}, {-20, 0}, {-10, 0}}, color = {0, 128, 255})); +annotation ( + experiment(StartTime = 0, StopTime = 30, Tolerance = 1e-06, Interval = 0.001)); +end Test03; diff --git a/OpenHPLTest/TestPipe/package.mo b/OpenHPLTest/TestPipe/package.mo new file mode 100644 index 0000000..36e1c48 --- /dev/null +++ b/OpenHPLTest/TestPipe/package.mo @@ -0,0 +1,9 @@ +within OpenHPLTest; +package TestPipe + extends Modelica.Icons.ExamplesPackage; + + + + + +end TestPipe; diff --git a/OpenHPLTest/TestPipe/package.order b/OpenHPLTest/TestPipe/package.order new file mode 100644 index 0000000..fcf8ae3 --- /dev/null +++ b/OpenHPLTest/TestPipe/package.order @@ -0,0 +1,4 @@ +AbstractTest +Test01 +Test02 +Test03 diff --git a/OpenHPLTest/TorqueEquation.mo b/OpenHPLTest/TorqueEquation.mo deleted file mode 100644 index ed03c8b..0000000 --- a/OpenHPLTest/TorqueEquation.mo +++ /dev/null @@ -1,37 +0,0 @@ -within OpenHPLTest; - -package TorqueEquation - extends Modelica.Icons.ExamplesPackage; - import SI = Modelica.Units.SI; - // - - model TorqueElement - extends OpenHPL.Icons.ElectroMech; - extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation; - equation - - end TorqueElement; - - model TorqueTest - extends Modelica.Icons.Example; - // - parameter SI.Torque shaftTorque0 = 1.e+03; - SI.Torque shaftTorque; - inner OpenHPL.Data data annotation( - Placement(transformation(origin = {-52, 74}, extent = {{-10, -10}, {10, 10}}))); - TorqueElement te1(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 10) annotation( - Placement(transformation(origin = {-30, 52}, extent = {{-10, -10}, {10, 10}}))); - TorqueElement te2(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 22) annotation( - Placement(transformation(origin = {-30, 24}, extent = {{-10, -10}, {10, 10}}))); - equation - if (time > 0.1 and time < 0.4) then - shaftTorque = shaftTorque0; - elseif (time > 0.5 and time < 0.8) then - shaftTorque = -shaftTorque0; - else - shaftTorque = 0.0; - end if; - annotation( - Diagram(coordinateSystem(extent = {{-80, 80}, {-20, 0}}))); -end TorqueTest; -end TorqueEquation; diff --git a/OpenHPLTest/TorqueEquation/TorqueElement.mo b/OpenHPLTest/TorqueEquation/TorqueElement.mo new file mode 100644 index 0000000..5b24726 --- /dev/null +++ b/OpenHPLTest/TorqueEquation/TorqueElement.mo @@ -0,0 +1,7 @@ +within OpenHPLTest.TorqueEquation; +model TorqueElement + extends OpenHPL.Icons.ElectroMech; + extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation; +equation + +end TorqueElement; diff --git a/OpenHPLTest/TorqueEquation/TorqueTest.mo b/OpenHPLTest/TorqueEquation/TorqueTest.mo new file mode 100644 index 0000000..b364afb --- /dev/null +++ b/OpenHPLTest/TorqueEquation/TorqueTest.mo @@ -0,0 +1,23 @@ +within OpenHPLTest.TorqueEquation; +model TorqueTest + extends Modelica.Icons.Example; + // + parameter SI.Torque shaftTorque0 = 1.e+03; + SI.Torque shaftTorque; + inner OpenHPL.Data data annotation ( + Placement(transformation(origin = {-52, 74}, extent = {{-10, -10}, {10, 10}}))); + TorqueElement te1(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 10) annotation ( + Placement(transformation(origin = {-30, 52}, extent = {{-10, -10}, {10, 10}}))); + TorqueElement te2(J = 10, f_0 = 0, torque(y = shaftTorque), enable_f = true, p = 22) annotation ( + Placement(transformation(origin = {-30, 24}, extent = {{-10, -10}, {10, 10}}))); +equation + if (time > 0.1 and time < 0.4) then + shaftTorque = shaftTorque0; + elseif (time > 0.5 and time < 0.8) then + shaftTorque = -shaftTorque0; + else + shaftTorque = 0.0; + end if; +annotation ( + Diagram(coordinateSystem(extent = {{-80, 80}, {-20, 0}}))); +end TorqueTest; diff --git a/OpenHPLTest/TorqueEquation/package.mo b/OpenHPLTest/TorqueEquation/package.mo new file mode 100644 index 0000000..d6edd2d --- /dev/null +++ b/OpenHPLTest/TorqueEquation/package.mo @@ -0,0 +1,8 @@ +within OpenHPLTest; +package TorqueEquation + extends Modelica.Icons.ExamplesPackage; + import Modelica.Units.SI; + // + + +end TorqueEquation; diff --git a/OpenHPLTest/TorqueEquation/package.order b/OpenHPLTest/TorqueEquation/package.order new file mode 100644 index 0000000..cad0b91 --- /dev/null +++ b/OpenHPLTest/TorqueEquation/package.order @@ -0,0 +1,2 @@ +TorqueElement +TorqueTest diff --git a/OpenHPLTest/package.mo b/OpenHPLTest/package.mo index bf26e7b..e9099d6 100644 --- a/OpenHPLTest/package.mo +++ b/OpenHPLTest/package.mo @@ -3,6 +3,7 @@ package OpenHPLTest "Test library for OpenHPL" extends Modelica.Icons.ExamplesPackage; extends Modelica.Icons.UnderConstruction; + annotation (uses( Modelica(version="4.0.0"), OpenHPL(version="3.0.0"), diff --git a/OpenHPLTest/package.order b/OpenHPLTest/package.order index d5fcdee..24d43db 100644 --- a/OpenHPLTest/package.order +++ b/OpenHPLTest/package.order @@ -1,75 +1,4 @@ +EmpiricalTurbine TestPipe TorqueEquation -OpenChannel -Reservoir -TestMCB -TorpaHPPAirCushionTest -TorpaHPPAirCushionTest2 -HPTaperedFittingsTest -HPSquareFittingsTest -HPAllTypeFittingsTest -HPSimpleElasticPenstock -HPSimpleElasticPenstockWithoutSurge -HPElasticKPPenstock -HPElasticKPPenstockCompres -HPElasticKPPenstockWithoutSurge -HPElasticKPPenstockANDIntake -HPElasticKPPenstockHalfSurgeD -TestFitingSimpleHP -HPSimplePenstockControl -HPSimplePenstockAutoRefGate -HPSimplePenstockResKP -HPSimplePenstockOpenChannel -HPSimplePenstockGeneratorTest -HPSimplePenstockFrancis -HPSimplePenstockFrancisGener -HPSimplePenstockFrancis2 -CaseStudingValentynasCase -HPSimplePenstockPelton -TestRunoff -HPElasticKPPenstockFrancis -HPElasticKPPenstockFrancisGov -HPLiniarization -HPLiniarizationKP -HPLiniarizationFranGen -HPLiniarizationKPFran -HPLinTest -HPSimplePenstockFrancisGenIPSL -HPSimplePenstockFrancisGenIPSLGov -HPSimplePenstockFrancisGenIPSLInfBus -HPLiniarizationGenIPSL -HPLiniarizationGenIPSLKP -HPModel -HPModelDEA -HPBjarneBorresen -HPModelLin -HPModelLinPI -HPModelKPLin -HPModelObserv -HPModelKPLinPI -HPModelObservSim -HPLiniarization2 -HPModelManLin -HPLiniarization3 -HPLiniarization4 -HydroCordModel -HydroCordModelKP -HydroCordModelFrancis -HydroCordModelKPall -HydroCordModelFrancis2 -HydroCordModelKP2 -HydroCordModel2 -HydroCordModelKPFran -HydroCordModelKPFran2 -HydroCordModelDraftTube -HydroCordModelDraftTube2 -HydroCordModelKPDraftTube -HydroCordModelFrancisDraftTube -HydroCordModeKPlFrancisDraftTube -HydroCordModelDraftTube3 -HPDraftTube -HPSTSimple -HPSTAirCushion -HPSTSharpOrifice -HPSTThrottleValve -EmpiricalTurbine +Archive From 40e400fd95eab556c952c46abcbb7c6b27854c60 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 17:57:51 +0100 Subject: [PATCH 14/20] Adapting the models after rebase. --- .../ElectroMech/Turbines/EmpiricalTurbine.mo | 21 +++++++++---------- .../TurbineTest/Test02_Turbine.mo | 2 +- .../TurbineTest/Test03_Turbine.mo | 2 +- .../TurbineTest/Test04_Turbine.mo | 2 +- .../TurbineTest/Test05_Turbine.mo | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo index c522548..d14d129 100644 --- a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -1,26 +1,25 @@ within OpenHPL.ElectroMech.Turbines; - model EmpiricalTurbine - extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation(torque.y=Tt,speedSensor.w=2*nrps*C.pi); - extends OpenHPL.Interfaces.TurbineContacts(u_t=opening); + extends OpenHPL.ElectroMech.BaseClasses.TorqueEquation; + extends OpenHPL.Interfaces.TurbineContacts; extends OpenHPL.Icons.Turbine; - // - parameter Boolean SteadyState = false "If true, starts in steady state" annotation( - Dialog(group = "Initialization")); + parameter OpenHPL.Types.TurbineCharacteristics turbineCharacteristics; parameter OpenHPL.Types.TurbineData turbineData; SI.Length Ht(start=100) "Turbine head"; SI.VolumeFlowRate Qt "Turbine flow rate"; - + SI.Torque Tt "Turbine torque"; + Modelica.Blocks.Sources.RealExpression realExpression(y=Tt) annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); protected - Real opening; - SI.Frequency nrps "Rotational speed (in rotations per seconds)"; + Real opening=u_t; + SI.Frequency nrps=speedSensor.w/(2*C.pi) "Rotational speed (in revolutions per seconds)"; equation Ht = abs(i.p - o.p)/(data.rho*data.g); i.mdot + o.mdot = 0; i.mdot = Qt*data.rho; - (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, turbineCharacteristics); -annotation( + (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, turbineCharacteristics); + connect(realExpression.y, torque.tau) annotation (Line(points={{-49,0},{-37.2,0}}, color={0,0,127})); +annotation ( Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.
In this intial release, the turbine characteristics and tubine data must be constructed separately passed to the model. This may change in future releases.
")); end EmpiricalTurbine; diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo index 2a89add..e165044 100644 --- a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test02_Turbine.mo @@ -5,7 +5,7 @@ extends AbstractTurbineTest; Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation ( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, enable_nomSpeed = false, f_0 = 0.2, enable_f = true) annotation ( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); Modelica.Blocks.Sources.Constant const(k = 0.603) annotation ( Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo index d541f95..4669eee 100644 --- a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test03_Turbine.mo @@ -10,7 +10,7 @@ public Placement(transformation(origin = {-80, 32}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, enable_f = true, f_0 = 0.2) annotation ( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, enable_nomSpeed = false, enable_f = true, f_0 = 0.2) annotation ( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); Modelica.Blocks.Sources.Constant const(k = 0.603) annotation ( Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo index 5a3be68..be9643b 100644 --- a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test04_Turbine.mo @@ -6,7 +6,7 @@ public Placement(transformation(origin = {-46, 28}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = false, f_0 = 1.0, enable_f = true) annotation ( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, enable_nomSpeed = false, f_0 = 1.0, enable_f = true) annotation ( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); Modelica.Blocks.Sources.Ramp ramp(height = -1, duration = 10, offset = 1, startTime = 2) annotation ( Placement(transformation(origin = {52, 72}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); diff --git a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo index d78e99c..c864abd 100644 --- a/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo +++ b/OpenHPLTest/EmpiricalTurbine/TurbineTest/Test05_Turbine.mo @@ -7,7 +7,7 @@ public Placement(transformation(origin = {-82, 12}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Reservoir undervann(h_0 = 0.0, constantLevel = true) annotation ( Placement(transformation(origin = {72, -16}, extent = {{10, -10}, {-10, 10}}, rotation = -0))); - OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, SteadyState = false, enable_nomSpeed = true) annotation ( + OpenHPL.ElectroMech.Turbines.EmpiricalTurbine turbine(turbineData = turbineData, turbineCharacteristics = tc, enable_nomSpeed = true) annotation ( Placement(transformation(origin = {12, 12}, extent = {{-10, -10}, {10, 10}}))); OpenHPL.Waterway.Pipe tunnel(H = 0, L = 2000, p_eps_input(displayUnit = "mm") = 1e-4, D_i = 4.6, SteadyState = true, Vdot_0 = 20.5) annotation ( Placement(transformation(origin = {-42, 12}, extent = {{-10, -10}, {10, 10}}))); From d993fc9192ec50b86cd13b24bca0b3db5b2fa588 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:09:46 +0100 Subject: [PATCH 15/20] HTML fix --- OpenHPL/Functions/TurbineLookUp.mo | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/OpenHPL/Functions/TurbineLookUp.mo b/OpenHPL/Functions/TurbineLookUp.mo index f1d7686..02dab4e 100644 --- a/OpenHPL/Functions/TurbineLookUp.mo +++ b/OpenHPL/Functions/TurbineLookUp.mo @@ -1,5 +1,4 @@ within OpenHPL.Functions; - function TurbineLookUp extends Modelica.Icons.Function; // @@ -68,7 +67,15 @@ algorithm Tt := (cP1[3] + cP2[3])*0.5*(td.Tbep*(Ht/td.Hbep)); annotation( - Documentation(info ="

Compute the physical discharge (Q) and torque (T) based on the turbine speed [nrps], turbine head [Ht] and opening. The algorithm is briely summarized below.

  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. Use golden section search to find the correct position along the speed curve
  3. Compute physcal discharge and torque based on normalized unit data and the turbine information
At the moment the algorithm assumes that \\(n_{ED}\\) is monotonously increasing as function of the parametric value and is not able to handle s-shaped curves.

")); - - + Documentation(info=" +

Compute the physical discharge (Q) and torque (T) based on the turbine speed [nrps], +turbine head [Ht] and opening. The algorithm is briely summarized below.

+
    +
  1. Find the actual charateristic curve by weighted interpolation of the two closest curves
  2. +
  3. Use golden section search to find the correct position along the speed curve
  4. +
  5. Compute physcal discharge and torque based on normalized unit data and the turbine information
  6. +
+

At the moment the algorithm assumes that \\(n_{ED}\\) is monotonously increasing as function of the +parametric value and is not able to handle s-shaped curves.

+")); end TurbineLookUp; From 378bde826fd5a47bbc28309f4e4c04c8c233857b Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:14:52 +0100 Subject: [PATCH 16/20] HTML fixes --- .../ElectroMech/Turbines/EmpiricalTurbine.mo | 5 ++++- OpenHPL/Functions/WeightedControlPoints.mo | 20 ++++++++++--------- OpenHPL/Functions/deCasteljau.mo | 11 ++++++---- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo index d14d129..e44b289 100644 --- a/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo +++ b/OpenHPL/ElectroMech/Turbines/EmpiricalTurbine.mo @@ -21,5 +21,8 @@ equation (Qt, Tt) = OpenHPL.Functions.TurbineLookUp(Ht, nrps, opening, turbineData, turbineCharacteristics); connect(realExpression.y, torque.tau) annotation (Line(points={{-49,0},{-37.2,0}}, color={0,0,127})); annotation ( - Documentation(info = "Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.
In this intial release, the turbine characteristics and tubine data must be constructed separately passed to the model. This may change in future releases.
")); + Documentation(info = " +

Turbine model based on normalized, empirical turbine characteristics and turbine data for the best efficiency point.

+

In this intial release, the turbine characteristics and tubine data must be constructed separately passed to the model. This may change in future releases.

+")); end EmpiricalTurbine; diff --git a/OpenHPL/Functions/WeightedControlPoints.mo b/OpenHPL/Functions/WeightedControlPoints.mo index 9eca9b7..6447c2e 100644 --- a/OpenHPL/Functions/WeightedControlPoints.mo +++ b/OpenHPL/Functions/WeightedControlPoints.mo @@ -1,5 +1,4 @@ within OpenHPL.Functions; - function WeightedControlPoints extends Modelica.Icons.Function; /* @@ -11,25 +10,25 @@ protected Real td[hc.nPoints, hc.nDim]; Real beta; Integer i; - + algorithm //if (opening >= hc.opening[1] and opening <= hc.opening[hc.nPoints]) then i:=1; - while (i < hc.nCurves ) loop + while (i < hc.nCurves) loop if (opening < hc.opening[i]) then // Defined as closed guide vanes for j in 1:hc.nPoints loop td[j,1] := hc.data[1, j, 1]; td[j,2] := 0.0; // Torque set to zero. Must be corrected in the future - td[j,3] := 0.0 ; + td[j,3] := 0.0; end for; break; - elseif ( (hc.opening[i] <= opening) and (opening <= hc.opening[i+1]) ) then + elseif ( (hc.opening[i] <= opening) and (opening <= hc.opening[i+1])) then beta:=(opening-hc.opening[i])/(hc.opening[i+1]-hc.opening[i]); for j in 1:hc.nPoints loop for k in 1:hc.nDim loop - td[j,k] := (1.-beta)*hc.data[i, j, k]+ beta*hc.data[i+1, j, k] ; + td[j,k] := (1.-beta)*hc.data[i, j, k]+ beta*hc.data[i+1, j, k]; end for; end for; break; @@ -37,10 +36,13 @@ algorithm i:=i+1; end if; end while; - + data:=td; annotation( - Documentation(info = "Compute an intermediate turbine characteristics based on linear interpolation of the two closest curves. The turbine opening is used as argument for finding the closest curves. Assumes that the opening in the HillChart data is monotonously increasing. If data at small opening is missing, the flow and speed data for the first curve is used and the torque is set to zero.")); - + Documentation(info=" +

Compute an intermediate turbine characteristics based on linear interpolation of the two closest curves. +The turbine opening is used as argument for finding the closest curves. Assumes that the opening in the HillChart data is monotonously increasing. +If data at small opening is missing, the flow and speed data for the first curve is used and the torque is set to zero.

+")); end WeightedControlPoints; diff --git a/OpenHPL/Functions/deCasteljau.mo b/OpenHPL/Functions/deCasteljau.mo index fc18a27..0a2753f 100644 --- a/OpenHPL/Functions/deCasteljau.mo +++ b/OpenHPL/Functions/deCasteljau.mo @@ -1,5 +1,4 @@ within OpenHPL.Functions; - function deCasteljau extends Modelica.Icons.Function; input Real t "Parameter between 0 and 1"; @@ -25,7 +24,11 @@ for k in 1:ndim loop point[k] := temp[1, k]; end for; annotation( - Documentation(info = "Implementation of Bezier curve evaluation using the deCasteljau algorithm.
At the moment only one single Bezier curve per parameter dimension is assumed, but the order of the curve is arbritray, but define by the number of control points (e.g. curve order = number of control points - 1).")); - - +Documentation(info = " +

+Implementation of Bezier curve evaluation using the deCasteljau algorithm.

+

At the moment only one single Bezier curve per parameter dimension is assumed, +but the order of the curve is arbritray, but define by the number of control points +(e.g., curve order = number of control points - 1).

+")); end deCasteljau; From ad88d39de9596fe408d2ee0f800f54efd86fd173 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:16:22 +0100 Subject: [PATCH 17/20] HTML fix --- OpenHPL/Functions/deCasteljau.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenHPL/Functions/deCasteljau.mo b/OpenHPL/Functions/deCasteljau.mo index 0a2753f..d573e69 100644 --- a/OpenHPL/Functions/deCasteljau.mo +++ b/OpenHPL/Functions/deCasteljau.mo @@ -26,7 +26,7 @@ end for; annotation( Documentation(info = "

-Implementation of Bezier curve evaluation using the deCasteljau algorithm.

+Implementation of Bezier curve evaluation using the deCasteljau algorithm.

At the moment only one single Bezier curve per parameter dimension is assumed, but the order of the curve is arbritray, but define by the number of control points (e.g., curve order = number of control points - 1).

From 633b0684b79ede4ae17306f7fd9baae5cf648a5d Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:25:49 +0100 Subject: [PATCH 18/20] HTML fix --- OpenHPL/Types/TurbineCharacteristics.mo | 19 ++++++++++++++++--- OpenHPL/Types/TurbineData.mo | 15 +++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/OpenHPL/Types/TurbineCharacteristics.mo b/OpenHPL/Types/TurbineCharacteristics.mo index 8999d8b..67aa2c3 100644 --- a/OpenHPL/Types/TurbineCharacteristics.mo +++ b/OpenHPL/Types/TurbineCharacteristics.mo @@ -1,5 +1,4 @@ within OpenHPL.Types; - record TurbineCharacteristics extends Modelica.Icons.Record; parameter Integer nCurves; @@ -7,8 +6,22 @@ record TurbineCharacteristics parameter Integer nDim "parameter space, currently 3"; parameter Real opening[nCurves]; parameter Real data[nCurves, nPoints, nDim]; - + annotation( - Documentation(info = "
This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for
a number of normalized openings. 

The HillChart record contains three integer values:
1) nCurves - number of Bezier curves
2) nPoints - number of Bezier control points (order of curve +1)
3) nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

The data itself is contained in two multidimensional arrays
opening[nCurves] - gives the opening $$\\in [0,1]$$ for each curve. It is assumed that the array is sorted from smallest to larges value.
data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED) 
")); + Documentation(info=" +

This data record is based on the first version of the empirical turbine model, where normalized data for nED, QED and TED are given for +a number of normalized openings.

+

The HillChart record contains three integer values:

+
    +
  1. nCurves - number of Bezier curves
  2. +
  3. nPoints - number of Bezier control points (order of curve +1)
  4. +
  5. nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values). +
+

The data itself is contained in two multidimensional arrays:

+
    +
  • opening[nCurves] - gives the opening \\(\\in [0,1]\\) for each curve. It is assumed that the array is sorted from smallest to larges value.
  • +
  • data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED)
  • +
      +")); end TurbineCharacteristics; diff --git a/OpenHPL/Types/TurbineData.mo b/OpenHPL/Types/TurbineData.mo index 126fd2a..bfac7d0 100644 --- a/OpenHPL/Types/TurbineData.mo +++ b/OpenHPL/Types/TurbineData.mo @@ -1,5 +1,4 @@ within OpenHPL.Types; - record TurbineData extends Modelica.Icons.Record; // @@ -11,11 +10,15 @@ record TurbineData parameter Real openingBep "Best efficiency opening"; parameter SI.Acceleration g; parameter SI.Density rho; - + annotation( - Documentation(info = "Data record with key turbine information. Used together with the normalized turbine characteristics to calculate physical values.

      + Documentation(info = " +

      Data record with key turbine information. Used together with the normalized turbine characteristics to calculate physical values.

      +
      + - + + @@ -23,6 +26,6 @@ record TurbineData -
      VariableDescription
      Dn [m]Nominal diameter
      nrps [1/s]Best efficiency rotational speed
      Hbep [m]Best efficiency head
      Tbep [Nm]Best efficiency torque
      openingBep [-]Normalize best efficiency opening (must be between 0 and 1)
      ")); - +")); + end TurbineData; From 2fa58e2de5b73250a79347b8a3bab206f307bd69 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:27:50 +0100 Subject: [PATCH 19/20] HTML fix --- OpenHPL/Types/TurbineCharacteristics.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenHPL/Types/TurbineCharacteristics.mo b/OpenHPL/Types/TurbineCharacteristics.mo index 67aa2c3..76457a5 100644 --- a/OpenHPL/Types/TurbineCharacteristics.mo +++ b/OpenHPL/Types/TurbineCharacteristics.mo @@ -15,12 +15,12 @@ a number of normalized openings.

      1. nCurves - number of Bezier curves
      2. nPoints - number of Bezier control points (order of curve +1)
      3. -
      4. nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values). +
      5. nDim - parameter space (currently assumed to be 3. (Model may/will (?) fail for other values).

      The data itself is contained in two multidimensional arrays:

      • opening[nCurves] - gives the opening \\(\\in [0,1]\\) for each curve. It is assumed that the array is sorted from smallest to larges value.
      • -
      • data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED)
      • +
      • data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED).
        • ")); From 6431e2dd28074cc824e7ad813c5151f6421d06a8 Mon Sep 17 00:00:00 2001 From: Dietmar Winkler Date: Tue, 3 Mar 2026 18:30:32 +0100 Subject: [PATCH 20/20] HTML fix --- OpenHPL/Types/TurbineCharacteristics.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenHPL/Types/TurbineCharacteristics.mo b/OpenHPL/Types/TurbineCharacteristics.mo index 76457a5..a06a69d 100644 --- a/OpenHPL/Types/TurbineCharacteristics.mo +++ b/OpenHPL/Types/TurbineCharacteristics.mo @@ -21,7 +21,7 @@ a number of normalized openings.

          • opening[nCurves] - gives the opening \\(\\in [0,1]\\) for each curve. It is assumed that the array is sorted from smallest to larges value.
          • data[nCurves, nPoints, nDim] - gives the Bezier control points for each curve and each parameter (nED,QED,TED).
          • -
              +
            ")); end TurbineCharacteristics;