From 35b6c1ab63c83f472e2f5e7b034b426cce4dede9 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 09:51:28 +0100 Subject: [PATCH 01/86] feat: add modified PV model in BaseClasses of PVT validation --- .../PVT_UI/BaseClasses/PVOrientedDCPower.mo | 178 ++++++++++++++++++ .../Validation/PVT_UI/BaseClasses/package.mo | 3 + .../PVT_UI/BaseClasses/package.order | 1 + .../Validation/PVT_UI/package.order | 1 + 4 files changed, 183 insertions(+) create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo new file mode 100644 index 0000000000..296877dcfb --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo @@ -0,0 +1,178 @@ +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; +model PVOrientedDCPower + "Model for a photovoltaic installation which has a power output (DC)" + + parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Efficiency P_loss_factor=0.14 "Loss factor of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; + parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + + Modelica.Units.SI.Temperature T_cell "Cell temperature"; + Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; + Modelica.Units.SI.TemperatureDifference T_diff; + Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity wind_speed "Wind speed"; + Modelica.Units.SI.Irradiance G "Total solar irradiance"; + + Modelica.Blocks.Math.Add G_glob "Total irradiation on tilted surface" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={0,10}))); + + Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, + -10},{-120,10}}))); + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-P_loss_factor)) + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, + {69,-30}}))); + + IDEAS.Utilities.IO.SignalExchange.Read reaP(description= + "Power generated by the PV installation", y(unit="W")) "Read" + annotation (Placement(transformation(extent={{-20,-50},{-40,-30}}))); +protected + final parameter Modelica.Units.SI.Temperature _T_ref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature _noct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; + +public + outer Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource( + "modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), + columns=1:25) annotation (Placement(transformation(extent={{92,72},{72,92}}))); + Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) + "[W/m2]" annotation (Placement(transformation(extent={{-31.5, + 44},{-12.5,60}}))); + Modelica.Blocks.Sources.RealExpression Qdif(y=meaDat.y[3]) "[W/m2]" + annotation (Placement(transformation(extent={{-31.5,58},{-12.5,74}}))); +equation + assert(solarPower.y>=0, "Solar power must be positive"); + noct_adj=_noct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(noct_adj-293) "in Kelvin"; + heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + wind_speed = sim.Va; + wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); + T_cell=sim.Te+T_cell_init*heat_loss*wind_loss; + G = G_glob.y; + T_diff=T_cell-_T_ref; + + connect(solarPower.y, reaP.u) + annotation (Line(points={{68,-40},{-18,-40}}, color={0,0,127})); + connect(reaP.y, P) annotation (Line(points={{-41,-40},{-80,-40},{-80,0},{-110, + 0}}, color={0,0,127})); + connect(Qdir.y, G_glob.u1) + annotation (Line(points={{-11.55,52},{-6,52},{-6,22}}, color={0,0,127})); + connect(Qdif.y, G_glob.u2) + annotation (Line(points={{-11.55,66},{6,66},{6,22}}, color={0,0,127})); + annotation (Dialog(group="Characteristics of the photovoltaic installation"), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Line(points={{-100,0},{-59,0}},color={0,0,0}), + Polygon( + points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, + smooth=Smooth.None, + fillColor={205,203,203}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Polygon( + points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{28,27},{40,53},{63,53},{52,27},{28,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-122,35},{-100,9}}, + textColor={0,0,127}, + textString="P")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", + info=" +

+This is a simple model for a photovoltaic installation. +The model inputs are wheater data and some parameters set by the user. +The model outputs the power generated by the PV installation. +

+

+We use the SAM Photovoltaic Model by NREL:
+Gilman, P., Dobos, A., DiOrio, N., Freeman, J., Janzou, S., Ryberg, D., +2018, 'SAM Photovoltaic Model Technical Reference Update', +National Renewable Energy Laboratory Report NREL/TP-6A20-67399. +

+")); +end PVOrientedDCPower; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.mo new file mode 100644 index 0000000000..918b7c4713 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.mo @@ -0,0 +1,3 @@ +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; +package BaseClasses +end BaseClasses; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order new file mode 100644 index 0000000000..62d5e6742c --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order @@ -0,0 +1 @@ +PVOrientedDCPower diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.order index 340467c5d7..61e544f9d2 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.order @@ -1,3 +1,4 @@ PVTQuasiDynamicCollectorValidation Electrical Thermal +BaseClasses From 4ae0adf7a53a44ef9df40e280250739b3769efb7 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 10:19:37 +0100 Subject: [PATCH 02/86] refactor: read inputs from meaDat instead of sim --- .../PVT_UI/BaseClasses/PVOrientedDCPower.mo | 11 +++++++---- .../PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo index 296877dcfb..c03973e078 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo @@ -50,22 +50,25 @@ public outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", - fileName=Modelica.Utilities.Files.loadResource( - "modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), + fileName=Modelica.Utilities.Files.loadResource("modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), columns=1:25) annotation (Placement(transformation(extent={{92,72},{72,92}}))); Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) "[W/m2]" annotation (Placement(transformation(extent={{-31.5, 44},{-12.5,60}}))); Modelica.Blocks.Sources.RealExpression Qdif(y=meaDat.y[3]) "[W/m2]" annotation (Placement(transformation(extent={{-31.5,58},{-12.5,74}}))); + Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" + annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); + Modelica.Blocks.Sources.RealExpression Tamb(y=meaDat.y[12] + 273.15) "[K]" + annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); equation assert(solarPower.y>=0, "Solar power must be positive"); noct_adj=_noct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; T_cell_init=G/800*(noct_adj-293) "in Kelvin"; heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - wind_speed = sim.Va; + wind_speed = winSpe.y; wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); - T_cell=sim.Te+T_cell_init*heat_loss*wind_loss; + T_cell=Tamb.y+T_cell_init*heat_loss*wind_loss; G = G_glob.y; T_diff=T_cell-_T_ref; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index e9ffeda82e..7973b7836c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -51,6 +51,14 @@ model PVT_UI_Electrical_DayType1 "[W/m2K]" annotation (Placement(transformation(extent={{15,-84},{41,-68}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); + BaseClasses.PVOrientedDCPower pVOrientedDCPower( + P_STC=datPvtCol.P_nominal, + gamma=datPvtCol.gamma, + P_loss_factor=eleLosFac, + n=1, + module_efficiency=datPvtCol.etaEl, + til=0.78539816339745, + azi=0) annotation (Placement(transformation(extent={{-72,68},{-92,88}}))); equation connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60, From 29f76605345942edd0f8eb24c7b6667a5ff9e6b7 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 10:23:35 +0100 Subject: [PATCH 03/86] refactor: change naming conventions --- .../PVT_UI/BaseClasses/PVOrientedDCPower.mo | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo index c03973e078..e862445d2f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo @@ -27,8 +27,9 @@ model PVOrientedDCPower Modelica.Units.SI.Velocity wind_speed "Wind speed"; Modelica.Units.SI.Irradiance G "Total solar irradiance"; - Modelica.Blocks.Math.Add G_glob "Total irradiation on tilted surface" - annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + Modelica.Blocks.Math.Add Gglob "Total irradiation on tilted surface" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, rotation=90, origin={0,10}))); @@ -59,7 +60,7 @@ public annotation (Placement(transformation(extent={{-31.5,58},{-12.5,74}}))); Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); - Modelica.Blocks.Sources.RealExpression Tamb(y=meaDat.y[12] + 273.15) "[K]" + Modelica.Blocks.Sources.RealExpression TAmb(y=meaDat.y[12] + 273.15) "[K]" annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); equation assert(solarPower.y>=0, "Solar power must be positive"); @@ -68,17 +69,17 @@ equation heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; wind_speed = winSpe.y; wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); - T_cell=Tamb.y+T_cell_init*heat_loss*wind_loss; - G = G_glob.y; + T_cell=TAmb.y+T_cell_init*heat_loss*wind_loss; + G =Gglob.y; T_diff=T_cell-_T_ref; connect(solarPower.y, reaP.u) annotation (Line(points={{68,-40},{-18,-40}}, color={0,0,127})); connect(reaP.y, P) annotation (Line(points={{-41,-40},{-80,-40},{-80,0},{-110, 0}}, color={0,0,127})); - connect(Qdir.y, G_glob.u1) + connect(Qdir.y, Gglob.u1) annotation (Line(points={{-11.55,52},{-6,52},{-6,22}}, color={0,0,127})); - connect(Qdif.y, G_glob.u2) + connect(Qdif.y, Gglob.u2) annotation (Line(points={{-11.55,66},{6,66},{6,22}}, color={0,0,127})); annotation (Dialog(group="Characteristics of the photovoltaic installation"), Icon(coordinateSystem( From 495fa0d4b131231663a49d2d9fd7d305615f6aef Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 10:50:47 +0100 Subject: [PATCH 04/86] docs: add documentation to ElectricalPV validation model --- .../{PVOrientedDCPower.mo => ElectricalPV.mo} | 44 +++++++++---------- .../PVT_UI/BaseClasses/package.order | 2 +- .../Electrical/PVT_UI_Electrical_DayType1.mo | 2 +- 3 files changed, 22 insertions(+), 26 deletions(-) rename IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/{PVOrientedDCPower.mo => ElectricalPV.mo} (84%) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo similarity index 84% rename from IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo rename to IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index e862445d2f..5b31d8495a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/PVOrientedDCPower.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; -model PVOrientedDCPower - "Model for a photovoltaic installation which has a power output (DC)" +model ElectricalPV + "Model for a photovoltaic panels using PV-oriented cell-temperature equations" parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -8,7 +8,7 @@ model PVOrientedDCPower annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Efficiency P_loss_factor=0.14 "Loss factor of the photovoltaic panel(s)" + parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" annotation (Dialog(group="Characteristics of the photovoltaic installation")); @@ -35,7 +35,7 @@ model PVOrientedDCPower Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, -10},{-120,10}}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-P_loss_factor)) + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-eleLosFac)) "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, {69,-30}}))); @@ -154,29 +154,25 @@ equation textString="P")}), Diagram( coordinateSystem(preserveAspectRatio=false)), - Documentation(revisions=" + Documentation(info=" +

This model is an adapted PV-oriented electrical submodel (based on the MoPED PVOrientedDCPower) provided for validation only.

+

Purpose / validation note: Demonstrate the bias caused by using PV-only cell-temperature equations for PVT collectors. Unglazed PVT collectors operate at lower cell temperatures due to thermal extraction; applying PV-based Tcell estimates typically overpredicts cell temperature and underestimates electrical output.

+ + +

References

    -
  • September 27, 2023, by Javier Arroyo:
    -Add Read and Overwrite blocks. See !83.
  • -
  • August 1, 2023, by Lucas Verleyen:
    -Add quantity=\"Power\" and unit=\"W\" to RealOutput. (see #112)
  • -December 7, 2022, by Attila Balint and Lucas Verleyen:
    -Initial implementation.
    +Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641
+ ", - info=" -

-This is a simple model for a photovoltaic installation. -The model inputs are wheater data and some parameters set by the user. -The model outputs the power generated by the PV installation. -

-

-We use the SAM Photovoltaic Model by NREL:
-Gilman, P., Dobos, A., DiOrio, N., Freeman, J., Janzou, S., Ryberg, D., -2018, 'SAM Photovoltaic Model Technical Reference Update', -National Renewable Energy Laboratory Report NREL/TP-6A20-67399. -

+revisions=" +
    +
  • +January 16, 2026, by Lone Meertens:
    +Adapted PV-oriented electrical model from the MoPED library for validation purposes only. This model is included to demonstrate the impact of using PV-based cell-temperature equations for PVT collectors. The adaptation and inclusion in the validation package are tracked in #1473. +
  • +
")); -end PVOrientedDCPower; +end ElectricalPV; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order index 62d5e6742c..c3e570b09f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order @@ -1 +1 @@ -PVOrientedDCPower +ElectricalPV diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 7973b7836c..92a4380ed7 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -51,7 +51,7 @@ model PVT_UI_Electrical_DayType1 "[W/m2K]" annotation (Placement(transformation(extent={{15,-84},{41,-68}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); - BaseClasses.PVOrientedDCPower pVOrientedDCPower( + BaseClasses.ElectricalPV pVOrientedDCPower( P_STC=datPvtCol.P_nominal, gamma=datPvtCol.gamma, P_loss_factor=eleLosFac, From 11805463e5c516311bc1aad69c2a4c81812ab28a Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 10:58:16 +0100 Subject: [PATCH 05/86] refactor: fix error in parameter propagation --- .../PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 92a4380ed7..ae88d4d464 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -51,10 +51,10 @@ model PVT_UI_Electrical_DayType1 "[W/m2K]" annotation (Placement(transformation(extent={{15,-84},{41,-68}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); - BaseClasses.ElectricalPV pVOrientedDCPower( + BaseClasses.ElectricalPV ElectricalPV( P_STC=datPvtCol.P_nominal, gamma=datPvtCol.gamma, - P_loss_factor=eleLosFac, + eleLosFac=eleLosFac, n=1, module_efficiency=datPvtCol.etaEl, til=0.78539816339745, From b2eed38e0b7f2fd1c3e22c79ff99d4b99bfed8c9 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 14:40:09 +0100 Subject: [PATCH 06/86] feat: add ElectricalPV model for PVT UN validation --- .../Validation/BaseClasses/ElectricalPV.mo | 166 ++++++++++++++++++ .../Validation/BaseClasses/package.order | 1 + 2 files changed, 167 insertions(+) create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo new file mode 100644 index 0000000000..cd8cebbd18 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo @@ -0,0 +1,166 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +model ElectricalPV + "Model for a photovoltaic panels using PV-oriented cell-temperature equations" + + parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; + parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + + Modelica.Units.SI.Temperature T_cell "Cell temperature"; + Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; + Modelica.Units.SI.TemperatureDifference T_diff; + Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity wind_speed "Wind speed"; + Modelica.Units.SI.Irradiance G "Total solar irradiance"; + + Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, + -10},{-120,10}}))); + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-eleLosFac)) + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, + {69,-30}}))); + + IDEAS.Utilities.IO.SignalExchange.Read reaP(description= + "Power generated by the PV installation", y(unit="W")) "Read" + annotation (Placement(transformation(extent={{-20,-50},{-40,-30}}))); +protected + final parameter Modelica.Units.SI.Temperature _T_ref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature _noct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; + +public + Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" + annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); + Modelica.Blocks.Sources.RealExpression TAmb(y=meaDat.y[12] + 273.15) "[K]" + annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); + Modelica.Blocks.Sources.RealExpression Gglob(y=meaDat.y[4]) "[W/m2]" + annotation (Placement(transformation(extent={{-79.5,40},{-60.5,56}}))); + outer Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource( + "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements.txt"), + columns=1:25) annotation (Placement(transformation(extent={{80,60},{60,80}}))); +equation + assert(solarPower.y>=0, "Solar power must be positive"); + noct_adj=_noct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(noct_adj-293) "in Kelvin"; + heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + wind_speed = winSpe.y; + wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); + T_cell=TAmb.y+T_cell_init*heat_loss*wind_loss; + G =Gglob.y; + T_diff=T_cell-_T_ref; + + connect(solarPower.y, reaP.u) + annotation (Line(points={{68,-40},{-18,-40}}, color={0,0,127})); + connect(reaP.y, P) annotation (Line(points={{-41,-40},{-80,-40},{-80,0},{-110, + 0}}, color={0,0,127})); + annotation (Dialog(group="Characteristics of the photovoltaic installation"), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Line(points={{-100,0},{-59,0}},color={0,0,0}), + Polygon( + points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, + smooth=Smooth.None, + fillColor={205,203,203}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Polygon( + points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{28,27},{40,53},{63,53},{52,27},{28,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-122,35},{-100,9}}, + textColor={0,0,127}, + textString="P")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

This model is an adapted PV-oriented electrical submodel (based on the MoPED PVOrientedDCPower) provided for validation only.

+

Purpose / validation note: Demonstrate the bias caused by using PV-only cell-temperature equations for PVT collectors. Unglazed PVT collectors operate at lower cell temperatures due to thermal extraction; applying PV-based Tcell estimates typically overpredicts cell temperature and underestimates electrical output.

+ + +

References

+ + +", +revisions=" +
    +
  • +January 16, 2026, by Lone Meertens:
    +Adapted PV-oriented electrical model from the MoPED library for validation purposes only. This model is included to demonstrate the impact of using PV-based cell-temperature equations for PVT collectors. The adaptation and inclusion in the validation package are tracked in #1473. +
  • +
+")); +end ElectricalPV; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 0f878d243b..14b65e58aa 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,3 +1,4 @@ ISO9806QuasiDynamicHeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation +ElectricalPV From ee843fd872fbbc90ca0f10c4ed72a0497b5b6172 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 14:41:27 +0100 Subject: [PATCH 07/86] feat: add ElectricalPV model and output expr to Electrical validation model --- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 916dd18e97..63d6433692 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -1,4 +1,4 @@ -within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; model PVT_UN_Electrical "Electrical Behavior of Unglazed Rear-Non-Insulated PVT Collector" extends Modelica.Icons.Example; @@ -52,6 +52,16 @@ model PVT_UN_Electrical "[W/m2K]" annotation (Placement(transformation(extent={{17,-82},{43,-66}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-39,-80},{-13,-64}}))); + BaseClasses.ElectricalPV electricalPV( + P_STC=datPvtCol.P_nominal, + gamma=datPvtCol.gamma, + eleLosFac=eleLosFac, + n=1, + module_efficiency=datPvtCol.etaEl, + til=0.34906585039887, + azi=0) annotation (Placement(transformation(extent={{-84,68},{-64,88}}))); + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" + annotation (Placement(transformation(extent={{-57,68},{-31,84}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); @@ -128,7 +138,8 @@ UAbsFluid horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated -electrical power")}), +electrical power"), + Rectangle(extent={{-90,96},{-18,60}}, lineColor={28,108,200})}), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mos" "Simulate and plot"), experiment( From 00c7b7c2f36ccaaa8f8d553c90882c4038d3efb2 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 16 Jan 2026 14:42:38 +0100 Subject: [PATCH 08/86] refactor: add expr for P output ElectricalPV for UI PVT validation --- .../PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index ae88d4d464..4906a1eb08 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -58,7 +58,9 @@ model PVT_UI_Electrical_DayType1 n=1, module_efficiency=datPvtCol.etaEl, til=0.78539816339745, - azi=0) annotation (Placement(transformation(extent={{-72,68},{-92,88}}))); + azi=0) annotation (Placement(transformation(extent={{-68,68},{-88,88}}))); + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" + annotation (Placement(transformation(extent={{-51,70},{-25,86}}))); equation connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60, @@ -113,5 +115,6 @@ UAbsFluid horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated -electrical power")})); +electrical power"), + Rectangle(extent={{-90,94},{-18,58}}, lineColor={28,108,200})})); end PVT_UI_Electrical_DayType1; From 6d47bc9bc26e03c1cc33d2c2aad1781d1205595a Mon Sep 17 00:00:00 2001 From: u0169319 Date: Mon, 19 Jan 2026 15:04:41 +0100 Subject: [PATCH 09/86] refactor: change naming of parameters following convention. --- IDEAS/Fluid/PVTCollectors/Examples/WISC.mo | 4 ++-- .../Fluid/PVTCollectors/Validation/BaseClasses/package.order | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo index 17574ac0fe..5a10938735 100644 --- a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo +++ b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo @@ -47,9 +47,9 @@ model WISC "Test model for WISC (Wind and Infrared Sensitive Collector) - uncove nPanels=5, nSeg=9, sysConfig=IDEAS.Fluid.SolarCollectors.Types.SystemConfiguration.Series, - per=datPvtCol) + per=datPVTCol) annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPvtCol + parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{64,64},{84,84}}))); equation connect(sou.ports[1], TIn.port_a) annotation (Line( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 14b65e58aa..c8d1431ac0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -2,3 +2,5 @@ ISO9806QuasiDynamicHeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation ElectricalPV +UI_Validation +UN_Validation From 6f0e09c1d384c48c3dfc01784b8d85c76813ebc7 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Mon, 19 Jan 2026 15:05:34 +0100 Subject: [PATCH 10/86] feat: add new data files for validation where heat losses of c3, c4 and c6 are set to 0 --- .../Validation/BaseClasses/UI_Validation.mo | 65 ++++++++++++++ .../Validation/BaseClasses/UN_Validation.mo | 88 +++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo new file mode 100644 index 0000000000..c577fac662 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo @@ -0,0 +1,65 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +record UI_Validation = + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + final A=1.66, + final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, + final C=42200*1.66, + final V=5/1000, + final mDry=28, + final mperA_flow_nominal=0.03, + final dp_nominal=60000, + final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), + final incAngModDat={1,1,1,0.99,0.99,0.98,0.96,0.92,0.00}, + final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, + final IAMDiff=1, + final eta0=0.475, + final c1=7.411, + final c2=0.0, + final c3=0.0, // Put to 0.0 for validation purposes + final c4=0.0, // Put to 0.0 for validation purposes + final c6=0.0, // Put to 0.0 for validation purposes + final P_nominal=280, + final gamma=-0.0041, + final etaEl=0.1687) + "Parameters for an uncovered flat-plate PVT collector with rear cover and back-side thermal insulation" +annotation( + defaultComponentPrefixes = "parameter", + defaultComponentName = "datPVTColVal", + Documentation(info = " +

+This record contains anonymized thermal and electrical performance parameters for +an uncovered photovoltaic–thermal (PVT) collector with rear insulation, +tested under ISO 9806:2013 quasi-dynamic conditions. +Thermal performance parameters correspond to operation of the PVT collector at maximum power point (MPP mode). +

+

+This datasheet is used in the validation of +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +which can be found in the +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI package. +

+ +

References

+
  • +ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +
  • +
  • +IEA SHC Task 60 (2018). PVT Systems: Application of PVT Collectors and New Solutions in HVAC Systems. +iea-shc.org/task60. +
  • +
  • +Meertens, L.; Jansen, J.; Helsen, L. (2025). +Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters. +Submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +
  • + +", +revisions=" +
      +
    • +July 7, 2025, by Lone Meertens:
      +First implementation PVT model. +This is for #1436. +
    • +
    +")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo new file mode 100644 index 0000000000..1825a21c6d --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo @@ -0,0 +1,88 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +record UN_Validation = + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + final A=1.64, + final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, + final C=22100*1.64, + final V=1.54/1000, + final mDry=30, + final mperA_flow_nominal=0.02, + final dp_nominal=300000, + final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,80,90}), + final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, + final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, + final IAMDiff=0.93, + final eta0=0.535, + final c1=10.74, + final c2=0.0, + final c3=0.0, // Put to 0.0 for validation purposes + final c4=0.0, // Put to 0.0 for validation purposes + final c6=0.0, // Put to 0.0 for validation purposes + final P_nominal=300, + final gamma=-0.00375, + final etaEl=0.183) + "Parameters for an uncovered flat-plate PVT collector without rear cover or back-side insulation" +annotation( + defaultComponentPrefixes = "parameter", + defaultComponentName = "datPVTColVal", + Documentation(info = " +

    +This record contains performance parameters for a flat‑plate, uncovered and uninsulated PVT collector, +derived from manufacturer datasheets and thermal rating documentation. +Thermal parameters follow the ISO 9806:2013 quasi‑dynamic format and correspond to operation at the PV module’s maximum power point (MPP). +

    +

    +The thermal coefficients were originally obtained using the ISO 9806:2013 unglazed +steady-state method, and converted to quasi‑dynamic form according to the procedure detailed +in +SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017. +

    +

    +For this PVT collector, additional real-life measurement data is publicly available (Veynandt, 2023) and has been used in the validation of +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +which can be found in the +IDEAS.Fluid.PVTCollectors.Validation.PVT_UN package. +

    + +

    Certificate

    + + +

    References

    + +"), +revisions=" +
      +
    • +July 7, 2025, by Lone Meertens:
      +First implementation PVT model. +This is for #1436. +
    • +
    +"); From fb3387a1ec9750a155792056c29f1268bdb7c351 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Mon, 19 Jan 2026 15:06:07 +0100 Subject: [PATCH 11/86] feat: structure validation models to output simulation variables --- .../Electrical/PVT_UI_Electrical_DayType1.mo | 64 +++++++------- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 86 +++++++++++++++---- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 10 +-- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 6 +- 4 files changed, 112 insertions(+), 54 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 4906a1eb08..b4d1d2759a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -7,8 +7,8 @@ model PVT_UI_Electrical_DayType1 parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09; - parameter Data.Uncovered.UI_Validation datPvtCol - annotation (Placement(transformation(extent={{60,56},{80,76}}))); + parameter Data.Uncovered.UI_Validation datPVTCol + annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTQuasiDynamicCollectorValidation PvtCol( @@ -22,56 +22,60 @@ model PVT_UI_Electrical_DayType1 rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, - per=datPvtCol, + per=datPVTCol, eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt"), - columns=1:25) annotation (Placement(transformation(extent={{-92,24},{-72,44}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-1}, - {-77,9}}))); + columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, + {-77,-11}}))); IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, p(displayUnit="Pa") = 101325, nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-10},{42,10}}))); + annotation (Placement(transformation(extent={{62,-30},{42,-10}}))); IDEAS.Fluid.Sources.MassFlowSource_T bou( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); + annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[21]) "[W]" - annotation (Placement(transformation(extent={{-77,-82},{-51,-66}}))); + annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{15,-84},{41,-68}}))); + "[W/m2K]" annotation (Placement(transformation(extent={{5,50},{31,66}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" - annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); - BaseClasses.ElectricalPV ElectricalPV( - P_STC=datPvtCol.P_nominal, - gamma=datPvtCol.gamma, + annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.ElectricalPV ElectricalPV( + P_STC=datPVTCol.P_nominal, + gamma=datPVTCol.gamma, eleLosFac=eleLosFac, n=1, - module_efficiency=datPvtCol.etaEl, + module_efficiency=datPVTCol.etaEl, til=0.78539816339745, - azi=0) annotation (Placement(transformation(extent={{-68,68},{-88,88}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-51,70},{-25,86}}))); + azi=0) annotation (Placement(transformation(extent={{-60,-82},{-80,-62}}))); + Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" + annotation (Placement(transformation(extent={{-49,-80},{-23,-64}}))); equation - connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60, - 34},{-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); - connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); + connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, + 14},{-60,-4},{-92,-4},{-92,-16},{-88,-16}}, color={0,0,127})); + connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-16},{-76.5, + -16}}, color={0,0,127})); connect(bou.m_flow_in, meaDat.y[17]) - annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); + annotation (Line(points={{-60,-12},{-60,14},{-71,14}}, + color={0,0,127})); connect(bou.ports[1], PvtCol.port_a) - annotation (Line(points={{-38,0},{-10,0}}, color={0,127,255})); + annotation (Line(points={{-38,-20},{-10,-20}}, + color={0,127,255})); connect(PvtCol.port_b, sou.ports[1]) - annotation (Line(points={{10,0},{42,0}}, color={0,127,255})); + annotation (Line(points={{10,-20},{42,-20}}, + color={0,127,255})); annotation ( Documentation(info="

    @@ -100,21 +104,21 @@ __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTColle Tolerance=1e-06, __Dymola_Algorithm="Cvode"), Diagram(graphics={ - Rectangle(extent={{12,-44},{46,-84}}, lineColor={28,108,200}), + Rectangle(extent={{2,90},{36,50}}, lineColor={28,108,200}), Text( - extent={{8,-46},{48,-64}}, + extent={{-2,88},{38,70}}, textColor={28,108,200}, textStyle={TextStyle.Bold}, textString="Calculated UAbsFluid [W/m2K]"), - Rectangle(extent={{-82,-46},{-10,-82}}, lineColor={28,108,200}), + Rectangle(extent={{-92,88},{-20,52}}, lineColor={28,108,200}), Text( - extent={{-80,-40},{-14,-68}}, + extent={{-90,94},{-24,66}}, textColor={28,108,200}, horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated electrical power"), - Rectangle(extent={{-90,94},{-18,58}}, lineColor={28,108,200})})); + Rectangle(extent={{-88,-56},{-16,-92}}, lineColor={28,108,200})})); end PVT_UI_Electrical_DayType1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 0e82ead685..9dbd061528 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -6,8 +6,10 @@ model PVT_UI_Thermal_DayType1 parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter String pvtTyp = "Typ1"; parameter Real eleLosFac = 0.09; - parameter Data.Uncovered.UI_Validation datPvtCol - annotation (Placement(transformation(extent={{60,56},{80,76}}))); + parameter Data.Uncovered.UI_Validation datPVTCol + annotation (Placement(transformation(extent={{72,-6},{92,14}}))); + parameter IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.UI_Validation datPVTColVal + annotation (Placement(transformation(extent={{72,-36},{92,-16}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTQuasiDynamicCollectorValidation PvtCol( @@ -21,7 +23,7 @@ model PVT_UI_Thermal_DayType1 rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, - per=datPvtCol, + per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); inner Modelica.Blocks.Sources.CombiTimeTable meaDat( @@ -45,19 +47,51 @@ model PVT_UI_Thermal_DayType1 nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "[W]" - annotation (Placement(transformation(extent={{-77,-82},{-51,-66}}))); + annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); Modelica.Blocks.Sources.RealExpression c1_c2_term(y=PvtCol.heaLosStc.c1_c2_term) - "[W]" annotation (Placement(transformation(extent={{25,-74},{51,-58}}))); + "[W]" annotation (Placement(transformation(extent={{19,68},{45,84}}))); Modelica.Blocks.Sources.RealExpression c3_term(y=PvtCol.heaLosStc.c3_term) - "[W]" annotation (Placement(transformation(extent={{25,-90},{51,-74}}))); + "[W]" annotation (Placement(transformation(extent={{19,52},{45,68}}))); Modelica.Blocks.Sources.RealExpression c4_term(y=PvtCol.heaLosStc.c4_term) - "[W]" annotation (Placement(transformation(extent={{63,-74},{89,-58}}))); + "[W]" annotation (Placement(transformation(extent={{57,68},{83,84}}))); Modelica.Blocks.Sources.RealExpression c6_term(y=PvtCol.heaLosStc.c6_term) - "[W]" annotation (Placement(transformation(extent={{63,-90},{89,-74}}))); + "[W]" annotation (Placement(transformation(extent={{57,52},{83,68}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow - *(PvtCol.sta_a.T - PvtCol.sta_b.T)) - "[W]" - annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); + *(PvtCol.sta_a.T - PvtCol.sta_b.T)) "[W]" + annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); + PVTQuasiDynamicCollectorValidation PvtColVal( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start(displayUnit="K") = T_start, + show_T=true, + azi=0, + til(displayUnit="deg") = 0.78539816339745, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTColVal, + eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-36},{10,-16}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel1 + annotation (Placement(transformation(extent={{-87,-27}, + {-77,-17}}))); + Sources.Boundary_pT sou1( + redeclare package Medium = Medium, + use_p_in=false, + p(displayUnit="Pa") = 101325, + nPorts=1) "Outlet for water flow" + annotation (Placement(transformation(extent={{62,-36},{42,-16}}))); + Sources.MassFlowSource_T bou1( + redeclare package Medium = Medium, + use_m_flow_in=true, + m_flow=0.03, + use_T_in=true, + nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" + annotation (Placement(transformation(extent={{-58,-36},{-38,-16}}))); + + Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow + *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" + annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); equation connect(meaDat.y[13],TAmbKel. Celsius) annotation (Line(points={{-71,34},{-60, @@ -70,6 +104,17 @@ equation annotation (Line(points={{-38,0},{-10,0}}, color={0,127,255})); connect(PvtCol.port_b, sou.ports[1]) annotation (Line(points={{10,0},{42,0}}, color={0,127,255})); + connect(meaDat.y[13], TAmbKel1.Celsius) annotation (Line(points={{-71,34},{-60, + 34},{-60,16},{-92,16},{-92,-22},{-88,-22}}, color={0,0,127})); + connect(bou1.T_in, TAmbKel1.Kelvin) + annotation (Line(points={{-60,-22},{-76.5,-22}}, color={0,0,127})); + connect(bou1.m_flow_in, meaDat.y[17]) annotation (Line(points={{-60,-18},{-72, + -18},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, + 0,127})); + connect(bou1.ports[1],PvtColVal. port_a) + annotation (Line(points={{-38,-26},{-10,-26}}, color={0,127,255})); + connect(PvtColVal.port_b, sou1.ports[1]) + annotation (Line(points={{10,-26},{42,-26}}, color={0,127,255})); annotation ( Documentation(info="

    @@ -98,18 +143,27 @@ __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTColle Tolerance=1e-06, __Dymola_Algorithm="Cvode"), Diagram(graphics={ - Rectangle(extent={{12,-46},{96,-92}}, lineColor={28,108,200}), + Rectangle(extent={{6,96},{90,50}}, lineColor={28,108,200}), Text( - extent={{14,-44},{96,-60}}, + extent={{8,98},{90,82}}, textColor={28,108,200}, textString="Distribution of heat losses ", textStyle={TextStyle.Bold}), - Rectangle(extent={{-82,-46},{-10,-82}}, lineColor={28,108,200}), + Rectangle(extent={{-86,96},{-14,60}}, lineColor={28,108,200}), Text( - extent={{-80,-46},{-10,-62}}, + extent={{-84,96},{-14,80}}, textColor={28,108,200}, horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated -thermal power")})); +thermal power"), + Rectangle(extent={{-86,-52},{-14,-88}}, lineColor={28,108,200}), + Text( + extent={{-84,-56},{2,-64}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Left, + textStyle={TextStyle.Bold}, + textString="Simulated thermal power, +neglecting c3-, c4- and c6-term +loss contributions")})); end PVT_UI_Thermal_DayType1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 63d6433692..28fc66402d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -41,10 +41,10 @@ model PVT_UN_Electrical rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, - per=datPvtCol, + per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); - parameter Data.Uncovered.UN_Validation datPvtCol + parameter Data.Uncovered.UN_Validation datPVTCol annotation (Placement(transformation(extent={{66,54},{86,74}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-75,-80},{-49,-64}}))); @@ -53,11 +53,11 @@ model PVT_UN_Electrical Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-39,-80},{-13,-64}}))); BaseClasses.ElectricalPV electricalPV( - P_STC=datPvtCol.P_nominal, - gamma=datPvtCol.gamma, + P_STC=datPVTCol.P_nominal, + gamma=datPVTCol.gamma, eleLosFac=eleLosFac, n=1, - module_efficiency=datPvtCol.etaEl, + module_efficiency=datPVTCol.etaEl, til=0.34906585039887, azi=0) annotation (Placement(transformation(extent={{-84,68},{-64,88}}))); Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 9ea667017a..854e7fe494 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -1,4 +1,4 @@ -within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; model PVT_UN_Thermal "Thermal Behavior of Unglazed Rear-Non-Insulated PVT Collector" extends Modelica.Icons.Example; @@ -56,10 +56,10 @@ model PVT_UN_Thermal rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, - per=datPvtCol, + per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); - parameter Data.Uncovered.UN_Validation datPvtCol + parameter Data.Uncovered.UN_Validation datPVTCol annotation (Placement(transformation(extent={{66,54},{86,74}}))); equation connect(bou.T_in,TFluKel. Kelvin) From 2e145d9881cf1731f832e4d0159cbdc2c01cac39 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Mon, 19 Jan 2026 15:08:19 +0100 Subject: [PATCH 12/86] refactor: make additional BaseClasses folders to keep conventional structure --- .../Fluid/PVTCollectors/Validation/BaseClasses/package.order | 3 --- .../Validation/{ => PVT_UI}/BaseClasses/UI_Validation.mo | 2 +- .../PVTCollectors/Validation/PVT_UI/BaseClasses/package.order | 1 + .../Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 4 +++- .../Validation/{ => PVT_UN}/BaseClasses/ElectricalPV.mo | 2 +- .../Validation/{ => PVT_UN}/BaseClasses/UN_Validation.mo | 2 +- .../PVTCollectors/Validation/PVT_UN/BaseClasses/package.mo | 3 +++ .../PVTCollectors/Validation/PVT_UN/BaseClasses/package.order | 2 ++ .../PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo | 3 ++- IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.order | 1 + 10 files changed, 15 insertions(+), 8 deletions(-) rename IDEAS/Fluid/PVTCollectors/Validation/{ => PVT_UI}/BaseClasses/UI_Validation.mo (97%) rename IDEAS/Fluid/PVTCollectors/Validation/{ => PVT_UN}/BaseClasses/ElectricalPV.mo (99%) rename IDEAS/Fluid/PVTCollectors/Validation/{ => PVT_UN}/BaseClasses/UN_Validation.mo (98%) create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index c8d1431ac0..0f878d243b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,6 +1,3 @@ ISO9806QuasiDynamicHeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation -ElectricalPV -UI_Validation -UN_Validation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo similarity index 97% rename from IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo rename to IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index c577fac662..ac7b7cc296 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -1,4 +1,4 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; record UI_Validation = IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( final A=1.66, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order index c3e570b09f..87403ddb12 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order @@ -1 +1,2 @@ ElectricalPV +UI_Validation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 9dbd061528..2728da54e5 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -8,7 +8,9 @@ model PVT_UI_Thermal_DayType1 parameter Real eleLosFac = 0.09; parameter Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{72,-6},{92,14}}))); - parameter IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.UI_Validation datPVTColVal + parameter + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.UI_Validation + datPVTColVal annotation (Placement(transformation(extent={{72,-36},{92,-16}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTQuasiDynamicCollectorValidation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo similarity index 99% rename from IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo rename to IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index cd8cebbd18..3c3f166635 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -1,4 +1,4 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; model ElectricalPV "Model for a photovoltaic panels using PV-oriented cell-temperature equations" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo similarity index 98% rename from IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo rename to IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 1825a21c6d..e774ea11db 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -1,4 +1,4 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; record UN_Validation = IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( final A=1.64, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.mo new file mode 100644 index 0000000000..1a53520b35 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.mo @@ -0,0 +1,3 @@ +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; +package BaseClasses +end BaseClasses; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order new file mode 100644 index 0000000000..1733918309 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order @@ -0,0 +1,2 @@ +ElectricalPV +UN_Validation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 28fc66402d..7b6178105f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -52,7 +52,8 @@ model PVT_UN_Electrical "[W/m2K]" annotation (Placement(transformation(extent={{17,-82},{43,-66}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-39,-80},{-13,-64}}))); - BaseClasses.ElectricalPV electricalPV( + .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV + electricalPV( P_STC=datPVTCol.P_nominal, gamma=datPVTCol.gamma, eleLosFac=eleLosFac, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.order index e0771709d8..de89110a6b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.order @@ -1,3 +1,4 @@ PVTQuasiDynamicCollectorValidation PVT_UN_Electrical PVT_UN_Thermal +BaseClasses From 216e174ea2b01ae819b2b5fdad6162299754260d Mon Sep 17 00:00:00 2001 From: u0169319 Date: Mon, 19 Jan 2026 15:11:27 +0100 Subject: [PATCH 13/86] factor: validation model for UN collector --- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 22 +++--- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 79 ++++++++++++++++--- 2 files changed, 78 insertions(+), 23 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 7b6178105f..c43be8acb3 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -45,13 +45,13 @@ model PVT_UN_Electrical eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); parameter Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{66,54},{86,74}}))); + annotation (Placement(transformation(extent={{72,-6},{92,14}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" - annotation (Placement(transformation(extent={{-75,-80},{-49,-64}}))); + annotation (Placement(transformation(extent={{-83,58},{-57,74}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{17,-82},{43,-66}}))); + "[W/m2K]" annotation (Placement(transformation(extent={{9,56},{35,72}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" - annotation (Placement(transformation(extent={{-39,-80},{-13,-64}}))); + annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV electricalPV( P_STC=datPVTCol.P_nominal, @@ -60,9 +60,9 @@ model PVT_UN_Electrical n=1, module_efficiency=datPVTCol.etaEl, til=0.34906585039887, - azi=0) annotation (Placement(transformation(extent={{-84,68},{-64,88}}))); + azi=0) annotation (Placement(transformation(extent={{-84,-76},{-64,-56}}))); Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-57,68},{-31,84}}))); + annotation (Placement(transformation(extent={{-57,-76},{-31,-60}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); @@ -124,23 +124,23 @@ This is for #1436"), Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle(extent={{14,-42},{48,-82}}, lineColor={28,108,200}), + Rectangle(extent={{6,96},{40,56}}, lineColor={28,108,200}), Text( - extent={{10,-44},{50,-62}}, + extent={{2,94},{42,76}}, textColor={28,108,200}, textStyle={TextStyle.Bold}, textString="Calculated UAbsFluid [W/m2K]"), - Rectangle(extent={{-80,-44},{-8,-80}}, lineColor={28,108,200}), + Rectangle(extent={{-88,94},{-16,58}}, lineColor={28,108,200}), Text( - extent={{-78,-38},{-12,-66}}, + extent={{-86,100},{-20,72}}, textColor={28,108,200}, horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated electrical power"), - Rectangle(extent={{-90,96},{-18,60}}, lineColor={28,108,200})}), + Rectangle(extent={{-90,-48},{-18,-84}}, lineColor={28,108,200})}), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 854e7fe494..234b27d37e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -31,19 +31,19 @@ model PVT_UN_Thermal nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "[W]" - annotation (Placement(transformation(extent={{-77,-82},{-51,-66}}))); + annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); Modelica.Blocks.Sources.RealExpression c1_c2_term(y=PvtCol.heaLosStc.c1_c2_term) - "[W]" annotation (Placement(transformation(extent={{25,-74},{51,-58}}))); + "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); Modelica.Blocks.Sources.RealExpression c3_term(y=PvtCol.heaLosStc.c3_term) - "[W]" annotation (Placement(transformation(extent={{25,-90},{51,-74}}))); + "[W]" annotation (Placement(transformation(extent={{21,52},{47,68}}))); Modelica.Blocks.Sources.RealExpression c4_term(y=PvtCol.heaLosStc.c4_term) - "[W]" annotation (Placement(transformation(extent={{63,-74},{89,-58}}))); + "[W]" annotation (Placement(transformation(extent={{59,68},{85,84}}))); Modelica.Blocks.Sources.RealExpression c6_term(y=PvtCol.heaLosStc.c6_term) - "[W]" annotation (Placement(transformation(extent={{63,-90},{89,-74}}))); + "[W]" annotation (Placement(transformation(extent={{59,52},{85,68}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow *(PvtCol.sta_a.T - PvtCol.sta_b.T)) "[W]" - annotation (Placement(transformation(extent={{-41,-82},{-15,-66}}))); + annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTQuasiDynamicCollectorValidation PvtCol( redeclare package Medium = Medium, @@ -60,7 +60,42 @@ model PVT_UN_Thermal eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); parameter Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{66,54},{86,74}}))); + annotation (Placement(transformation(extent={{70,-8},{90,12}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel1 + annotation (Placement(transformation(extent={{-87,-33}, + {-77,-23}}))); + Sources.Boundary_pT sou1( + redeclare package Medium = Medium, + use_p_in=false, + p(displayUnit="Pa") = 101325, + nPorts=1) "Outlet for water flow" + annotation (Placement(transformation(extent={{62,-42},{42,-22}}))); + Sources.MassFlowSource_T bou1( + redeclare package Medium = Medium, + use_m_flow_in=true, + m_flow=0.03, + use_T_in=true, + nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" + annotation (Placement(transformation(extent={{-58,-42},{-38,-22}}))); + PVTQuasiDynamicCollectorValidation PvtColVal( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_start, + show_T=true, + nSeg=1, + azi=0, + til=0.34906585039887, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTColVal, + eleLosFac=eleLosFac) + annotation (Placement(transformation(extent={{-8,-42},{12,-22}}))); + parameter BaseClasses.UN_Validation datPVTColVal + annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); + Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow + *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" + annotation (Placement(transformation(extent={{-81,-90},{-55,-74}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); @@ -72,6 +107,17 @@ equation annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60,34}, {-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); + connect(bou1.T_in, TFluKel1.Kelvin) + annotation (Line(points={{-60,-28},{-76.5,-28}}, color={0,0,127})); + connect(PvtColVal.port_a, bou1.ports[1]) + annotation (Line(points={{-8,-32},{-38,-32}}, color={0,127,255})); + connect(PvtColVal.port_b, sou1.ports[1]) + annotation (Line(points={{12,-32},{42,-32}}, color={0,127,255})); + connect(bou1.m_flow_in, meaDat.y[3]) annotation (Line(points={{-60,-24},{-72, + -24},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, + 0,127})); + connect(meaDat.y[2], TFluKel1.Celsius) annotation (Line(points={{-71,34},{-60, + 34},{-60,16},{-92,16},{-92,-28},{-88,-28}}, color={0,0,127})); annotation ( Documentation(info = "

    This model validates the thermal performance of the @@ -123,20 +169,29 @@ This is for #1436"), Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle(extent={{12,-46},{96,-92}}, lineColor={28,108,200}), + Rectangle(extent={{8,96},{92,50}}, lineColor={28,108,200}), Text( - extent={{14,-44},{96,-60}}, + extent={{10,98},{92,82}}, textColor={28,108,200}, textString="Distribution of heat losses ", textStyle={TextStyle.Bold}), - Rectangle(extent={{-82,-46},{-10,-82}}, lineColor={28,108,200}), + Rectangle(extent={{-86,96},{-14,60}}, lineColor={28,108,200}), Text( - extent={{-80,-46},{-10,-62}}, + extent={{-84,96},{-14,80}}, textColor={28,108,200}, horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Measured and simulated -thermal power")}), +thermal power"), + Rectangle(extent={{-86,-56},{-14,-92}}, lineColor={28,108,200}), + Text( + extent={{-84,-60},{2,-68}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Left, + textStyle={TextStyle.Bold}, + textString="Simulated thermal power, +neglecting c3-, c4- and c6-term +loss contributions")}), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos" "Simulate and plot"), experiment( From 8264c3b1f4d48a8e9291060864b4e48a74457650 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 20 Jan 2026 17:10:28 +0100 Subject: [PATCH 14/86] refactor: make sure Tcell is in deg Celcius --- .../Electrical/PVT_UI_Electrical_DayType1.mo | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index b4d1d2759a..8c1dce6b57 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -48,7 +48,7 @@ model PVT_UI_Electrical_DayType1 Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[21]) "[W]" annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{5,50},{31,66}}))); + "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.ElectricalPV ElectricalPV( @@ -60,7 +60,13 @@ model PVT_UI_Electrical_DayType1 til=0.78539816339745, azi=0) annotation (Placement(transformation(extent={{-60,-82},{-80,-62}}))); Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-49,-80},{-23,-64}}))); + annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); + Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); + Modelica.Blocks.Sources.RealExpression simTcell(y=PvtCol.eleGen.TavgCel - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); equation connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, @@ -104,15 +110,15 @@ __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTColle Tolerance=1e-06, __Dymola_Algorithm="Cvode"), Diagram(graphics={ - Rectangle(extent={{2,90},{36,50}}, lineColor={28,108,200}), + Rectangle(extent={{8,86},{42,46}}, lineColor={28,108,200}), Text( - extent={{-2,88},{38,70}}, + extent={{4,84},{44,66}}, textColor={28,108,200}, textStyle={TextStyle.Bold}, textString="Calculated UAbsFluid [W/m2K]"), - Rectangle(extent={{-92,88},{-20,52}}, lineColor={28,108,200}), + Rectangle(extent={{-92,88},{-18,42}}, lineColor={28,108,200}), Text( extent={{-90,94},{-24,66}}, textColor={28,108,200}, From 4fc29f840f84f22231917b9d7ca38245bf336e37 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 20 Jan 2026 17:12:39 +0100 Subject: [PATCH 15/86] feat: include expression for Tcell --- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index c43be8acb3..1d586068b2 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -13,23 +13,23 @@ model PVT_UN_Electrical tableOnFile=true, tableName="data", fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_"+week+".txt"), - columns=1:26) annotation (Placement(transformation(extent={{-92,24},{-72,44}}))); + columns=1:26) annotation (Placement(transformation(extent={{-92,14},{-72,34}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-1}, - {-77,9}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-11}, + {-77,-1}}))); IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, p(displayUnit="Pa") = 101325, nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-10},{42,10}}))); + annotation (Placement(transformation(extent={{62,-20},{42,0}}))); IDEAS.Fluid.Sources.MassFlowSource_T bou( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); + annotation (Placement(transformation(extent={{-58,-20},{-38,0}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTQuasiDynamicCollectorValidation PvtCol( redeclare package Medium = Medium, @@ -43,9 +43,9 @@ model PVT_UN_Electrical nPanels=1, per=datPVTCol, eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); + annotation (Placement(transformation(extent={{-8,-20},{12,0}}))); parameter Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{72,-6},{92,14}}))); + annotation (Placement(transformation(extent={{72,-16},{92,4}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-83,58},{-57,74}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) @@ -60,20 +60,30 @@ model PVT_UN_Electrical n=1, module_efficiency=datPVTCol.etaEl, til=0.34906585039887, - azi=0) annotation (Placement(transformation(extent={{-84,-76},{-64,-56}}))); + azi=0) annotation (Placement(transformation(extent={{-64,-72},{-84,-54}}))); Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-57,-76},{-31,-60}}))); + annotation (Placement(transformation(extent={{-53,-68},{-27,-52}}))); + Modelica.Blocks.Sources.RealExpression simTcell(y=PvtCol.eleGen.TavgCel - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-47,44},{-21,60}}))); + Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-53,-82},{-27,-66}}))); equation connect(bou.T_in,TFluKel. Kelvin) - annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); + annotation (Line(points={{-60,-6},{-76.5,-6}}, + color={0,0,127})); connect(PvtCol.port_a, bou.ports[1]) - annotation (Line(points={{-8,0},{-38,0}}, color={0,127,255})); + annotation (Line(points={{-8,-10},{-38,-10}}, + color={0,127,255})); connect(PvtCol.port_b, sou.ports[1]) - annotation (Line(points={{12,0},{42,0}}, color={0,127,255})); + annotation (Line(points={{12,-10},{42,-10}}, + color={0,127,255})); connect(bou.m_flow_in, meaDat.y[3]) - annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); - connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60,34}, - {-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); + annotation (Line(points={{-60,-2},{-60,24},{-71,24}},color={0,0,127})); + connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,24},{-60, + 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, + color={0,0,127})); annotation (Documentation(info = "

    This model validates the electrical performance of the @@ -132,7 +142,7 @@ This is for #1436 Date: Tue, 17 Feb 2026 09:31:23 +0100 Subject: [PATCH 16/86] feat: adding c7 and c8 to generic data sheet to switch from ISO 9806 2013 to ISO 9806 2017 --- .../PVTCollectors/Data/GenericQuasiDynamic.mo | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo b/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo index 56f8397428..49371b8ffe 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo @@ -9,16 +9,20 @@ record GenericQuasiDynamic "Incidence angle modifier for diffuse irradiance (incidence angle of 50°)"; parameter Real eta0(final min=0, final max=1, final unit="1") "Optical thermal efficiency (Maximum efficiency)"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1(final min=0) + parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1(final min=0) "First order thermal heat loss coefficient"; - parameter Real c2(final min=0, final unit="W/(m2.K2)") + parameter Real a2(final min=0, final unit="W/(m2.K2)") "Second order thermal heat loss coefficient"; - parameter Modelica.Units.SI.SpecificHeatCapacity c3(final min=0) + parameter Modelica.Units.SI.SpecificHeatCapacity a3(final min=0) "Wind speed dependence of thermal heat loss"; - parameter Modelica.Units.SI.DimensionlessRatio c4(final min=0) + parameter Modelica.Units.SI.DimensionlessRatio a4(final min=0) "Sky temperature dependence of the thermal heat loss coefficient"; - parameter Real c6(final min=0, final unit="s/m") + parameter Real a6(final min=0, final unit="s/m") "Wind speed dependence of thermal zero-loss efficiency"; + parameter Real a7(final min=0, final unit="W/(m2.K4)") + "Wind speed dependence of IR radiation exchange"; + parameter Real a8(final min=0, final unit="W/(m2.K4)") + "Radiation losses"; parameter Real P_nominal(final min=0, final unit="W") "PV panel power at nominal conditions"; parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma From 840e1c766685fc2f6463041566c9ed74d1df8c14 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 09:35:23 +0100 Subject: [PATCH 17/86] refactor: change genericQuasiDynamic to Generic since ISO 9806 2017 applicable beyond quasi dynamic approach --- .../PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo | 6 +++--- IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo | 6 +++--- .../Data/{GenericQuasiDynamic.mo => Generic.mo} | 5 ++--- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo | 6 +++--- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/package.order | 2 +- IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo | 2 +- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 2 +- .../Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo | 2 +- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 2 +- .../Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo | 2 +- 13 files changed, 21 insertions(+), 22 deletions(-) rename IDEAS/Fluid/PVTCollectors/Data/{GenericQuasiDynamic.mo => Generic.mo} (96%) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 09db9db2c4..50917f7c95 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -4,7 +4,7 @@ model ISO9806HeatLoss extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium in the system"; - parameter IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic per= + parameter IDEAS.Fluid.PVTCollectors.Data.Generic per= IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation() "Performance data" annotation (choicesAllMatching=true); Modelica.Blocks.Sources.Sine T1( @@ -117,7 +117,7 @@ First implementation of ISO 9806 quasi-dynamic heat loss example. This is for 1436. -"), +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index c5555c4dd9..7aa7f07b06 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Covered; record CI_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.79, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=16631*1.79, @@ -25,7 +25,7 @@ record CI_Jonas2018 = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains thermal and electrical parameters for a covered and insulated PVT collector, based on experimental identification results from Jonas et al. (2018). @@ -35,7 +35,7 @@ These parameters were used in the validation of a TRNSYS PVT collector model und This record can be used as a generic representation of a covered, insulated PVT collector. However, if you know the brand and model of the PVT collector you plan to simulate or install, it is recommended to use the actual datasheet parameters in a custom - + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record.

    References

    diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index b8464ae29b..48eec52d4f 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Covered; record CN_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.79, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=16075*1.79, @@ -25,7 +25,7 @@ record CN_Jonas2018 = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains thermal and electrical parameters for a covered PVT collector without rear insulation, based on experimental identification results from Jonas et al. (2018). @@ -35,7 +35,7 @@ These parameters were used in the validation of a TRNSYS PVT collector model und This record can be used as a generic representation of a covered, non-insulated PVT collector. However, if you know the brand and model of the PVT collector you plan to simulate or install, it is recommended to use the actual datasheet parameters in a custom - + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record.

    References

    diff --git a/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo similarity index 96% rename from IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo rename to IDEAS/Fluid/PVTCollectors/Data/Generic.mo index 49371b8ffe..35b4f406c0 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/GenericQuasiDynamic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -1,6 +1,5 @@ within IDEAS.Fluid.PVTCollectors.Data; -record GenericQuasiDynamic - "Generic data record for PVT collector models" +record Generic "Generic data record for PVT collector models" extends IDEAS.Fluid.SolarCollectors.Data.BaseClasses.Generic; parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType colTyp @@ -62,4 +61,4 @@ This is for #1436 ")); -end GenericQuasiDynamic; +end Generic; diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index df81cbc274..87c749e0e7 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UI_Validation = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=42200*1.66, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index 8fdfcc7ff9..d636521987 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UN_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=35800*1.66, @@ -25,7 +25,7 @@ record UN_Jonas2018 = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains thermal and electrical parameters for an uncovered and non-insulated PVT collector (WISC type), based on experimental identification results from Jonas et al. (2018). @@ -35,7 +35,7 @@ These parameters were used in the validation of a TRNSYS PVT collector model und This record can be used as a generic representation of a WISC-type collector. However, if you know the brand and model of the PVT collector you plan to simulate or install, it is recommended to use the actual datasheet parameters in a custom - + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record.

    Reference

    diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index e866362ac9..03a1de529b 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UN_Validation = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.64, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=22100*1.64, diff --git a/IDEAS/Fluid/PVTCollectors/Data/package.order b/IDEAS/Fluid/PVTCollectors/Data/package.order index 61ff421538..bfdb6e8933 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/package.order +++ b/IDEAS/Fluid/PVTCollectors/Data/package.order @@ -1,3 +1,3 @@ -GenericQuasiDynamic +Generic Covered Uncovered diff --git a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo index 3ddb6d0ee4..21496bbc84 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo @@ -3,7 +3,7 @@ model PVTQuasiDynamicCollector "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic per); + redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); // ===== Parameters ===== parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.10 diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index ac7b7cc296..2f5e7a482a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; record UI_Validation = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=42200*1.66, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo index 08e6ad7399..adb6c29719 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo @@ -3,7 +3,7 @@ model PVTQuasiDynamicCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic per, + redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per, break weaBus, break HDifTilIso, break HDirTil); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index e774ea11db..2e0135ff93 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; record UN_Validation = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.64, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=22100*1.64, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo index e138537e76..99d1df6db1 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo @@ -3,7 +3,7 @@ model PVTQuasiDynamicCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic per, + redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per, break weaBus, break HDifTilIso, break HDirTil); From 81bb14d2e792783f3f0b1be2df1c2d7f5a282576 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 09:54:27 +0100 Subject: [PATCH 18/86] feat: update all data records to have 8 term format --- .../PVTCollectors/Data/Covered/CI_Jonas2018.mo | 16 +++++++++------- .../PVTCollectors/Data/Covered/CN_Jonas2018.mo | 16 +++++++++------- .../Data/Uncovered/UI_Validation.mo | 16 +++++++++------- .../PVTCollectors/Data/Uncovered/UN_Jonas2018.mo | 16 +++++++++------- .../Data/Uncovered/UN_Validation.mo | 14 ++++++++------ 5 files changed, 44 insertions(+), 34 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index 7aa7f07b06..d406d626da 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -11,13 +11,15 @@ record CI_Jonas2018 = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,0.99,0.98,0.97,0.95,0.92,0.88,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Covered, - final IAMDiff=0.94, - final eta0=0.573, - final c1=5.008, - final c2=0.059, - final c3=0.011, - final c4=0.039, - final c6=0.003, + final IAMDiff=(0.573*0.94-3*0.003)/(0.573-3*0.003), + final eta0=0.573-3*0.003, + final a1=5.008 + 3*0.011, + final a2=0.059, + final a3=0.011, + final a4=0.039, + final a6=0.003, + final a7=0.0, + final a8=0.0, final P_nominal=280, final gamma=-0.00370, final etaEl=0.1390) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index 48eec52d4f..c1b3e520c9 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -11,13 +11,15 @@ record CN_Jonas2018 = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,0.99,0.98,0.97,0.95,0.92,0.88,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Covered, - final IAMDiff=0.93, - final eta0=0.596, - final c1=6.583, - final c2=0.021, - final c3=0.000, - final c4=0.066, - final c6=0.009, + final IAMDiff=(0.596*0.93-3*0.009)/(0.596-3*0.009), + final eta0=0.596-3*0.009, + final a1=6.583+3*0.000, + final a2=0.021, + final a3=0.000, + final a4=0.066, + final a6=0.009, + final a7=0.0, + final a8=0.0, final P_nominal=280, final gamma=-0.00370, final etaEl=0.1406) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index 87c749e0e7..dab76f4992 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -11,13 +11,15 @@ record UI_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,1,0.99,0.99,0.98,0.96,0.92,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=1, - final eta0=0.475, - final c1=7.411, - final c2=0.0, - final c3=1.7, - final c4=0.437, - final c6=0.003, + final IAMDiff=(0.475*1-3*0.003)/(0.475-3*0.003), + final eta0=0.475-3*0.003, + final a1=7.411+3*1.7, + final a2=0.0, + final a3=1.7, + final a4=0.437, + final a6=0.003, + final a7=0.0, + final a8=0.0, final P_nominal=280, final gamma=-0.0041, final etaEl=0.1687) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index d636521987..ae0fd703a9 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -11,13 +11,15 @@ record UN_Jonas2018 = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,0.99,0.98,0.97,0.95,0.92,0.88,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=0.91, - final eta0=0.436, - final c1=7.750, - final c2=0.026, - final c3=1.640, - final c4=0.000, - final c6=0.008, + final IAMDiff=(0.436*0.91-3*0.008)/(0.436-3*0.008), + final eta0=0.436-3*0.008, + final a1=7.750+3*1.640, + final a2=0.026, + final a3=1.640, + final a4=0.000, + final a6=0.008, + final a7=0.0, + final a8=0.0, final P_nominal=280, final gamma=-0.00467, final etaEl=0.1688) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 03a1de529b..d850f1b4ab 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -12,12 +12,14 @@ record UN_Validation = final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, final IAMDiff=0.93, - final eta0=0.535, - final c1=10.74, - final c2=0.0, - final c3=1.0997, - final c4=0.535*0.85*(1-3*0.067), - final c6=0.067*0.535, + final eta0=0.535/(0.85+0.15*0.93), + final a1=10.74+3*1.0997, + final a2=0.0, + final a3=1.0997, + final a4=0.535*0.85*(1-3*0.067), + final a6=0.067*0.535, + final a7=0.067*0.535*0.85, + final a8=0.0, final P_nominal=300, final gamma=-0.00375, final etaEl=0.183) From bb1bb14451e2a5871d98f44f620d3cbff1de240a Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 09:56:48 +0100 Subject: [PATCH 19/86] refactor: heaLosStc in PVTCollector model to include a7 and a8 loss terms --- .../PVTCollectors/PVTQuasiDynamicCollector.mo | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo index 21496bbc84..1aa9fe368c 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo @@ -49,11 +49,13 @@ model PVTQuasiDynamicCollector IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss heaLosStc( redeclare final package Medium = Medium, final nSeg=nSeg, - final c1=per.c1, - final c2=per.c2, - final c3=per.c3, - final c4=per.c4, - final c6=per.c6, + final a1=per.a1, + final a2=per.a2, + final a3=per.a3, + final a4=per.a4, + final a6=per.a6, + final a7=per.a4, + final a8=per.a6, final A_c=ATot_internal) "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); @@ -142,14 +144,14 @@ equation horizontalAlignment=TextAlignment.Right)); connect(temSen.T, eleGen.Tflu) annotation (Line(points={{-11,-20},{-30,-20}, {-30,-64},{-22,-64}}, color={0,0,127})); connect(HDifTilIso.H, HGloTil.u1) annotation (Line(points={{-59,80},{-54,80},{ - -54,14},{-64,14},{-64,-66},{-53,-66}}, color={0,0,127})); + -54,14},{-64,14},{-64,-87},{-56,-87}}, color={0,0,127})); connect(HDirTil.H, HGloTil.u2) annotation (Line(points={{-59,50},{-50,50},{-50, - 52},{-46,52},{-46,14},{-64,14},{-64,-72},{-53,-72}}, color={0,0,127})); + 52},{-46,52},{-46,14},{-64,14},{-64,-93},{-56,-93}}, color={0,0,127})); connect(HGloTil.y, eleGen.HGloTil) annotation (Line( - points={{-40,-90},{-30,-90},{-30,-76},{-22,-76}}, + points={{-44.5,-90},{-30,-90},{-30,-76},{-22,-76}}, color={0,0,127})); connect(qThSegExp.y,eleGen.Qth) annotation (Line( - points={{-40,-70},{-22,-70}}, + points={{-39,-70},{-22,-70}}, color={0,0,127})); annotation ( defaultComponentName = "pvtCol", From f14156e09384190e079d6989ad8cbb90c9de5d58 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 09:58:43 +0100 Subject: [PATCH 20/86] refactor: rename PVTQuasiDynamicCollector to PVTCollector since new standard is generic --- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Examples/WISC.mo | 4 ++-- .../{PVTQuasiDynamicCollector.mo => PVTCollector.mo} | 6 +++--- .../BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo | 2 +- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 4 ++-- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/package.order | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) rename IDEAS/Fluid/PVTCollectors/{PVTQuasiDynamicCollector.mo => PVTCollector.mo} (98%) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index dab76f4992..05dc9fc5d9 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -27,7 +27,7 @@ record UI_Validation = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains anonymized thermal and electrical performance parameters for an uncovered photovoltaic–thermal (PVT) collector with rear insulation, @@ -36,7 +36,7 @@ Thermal performance parameters correspond to operation of the PVT collector at m

    This datasheet is used in the validation of -IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, which can be found in the IDEAS.Fluid.PVTCollectors.Validation.PVT_UI package.

    diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index d850f1b4ab..15a5b6c8bd 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -27,7 +27,7 @@ record UN_Validation = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains performance parameters for a flat‑plate, uncovered and uninsulated PVT collector, derived from manufacturer datasheets and thermal rating documentation. @@ -41,7 +41,7 @@ SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017.

    For this PVT collector, additional real-life measurement data is publicly available (Veynandt, 2023) and has been used in the validation of -IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, which can be found in the IDEAS.Fluid.PVTCollectors.Validation.PVT_UN package.

    diff --git a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo index 5a10938735..78b3dd7848 100644 --- a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo +++ b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo @@ -36,7 +36,7 @@ model WISC "Test model for WISC (Wind and Infrared Sensitive Collector) - uncove amplitude=-pvtCol.dp_nominal, offset=1E5) "Pressure source" annotation (Placement(transformation(extent={{-88,-18},{-68,2}}))); - IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector pvtCol( + IDEAS.Fluid.PVTCollectors.PVTCollector pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, show_T=true, @@ -72,7 +72,7 @@ equation Documentation(info="

    This example demonstrates the implementation of the - + IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector for a variable fluid flow rate and weather data from San Francisco, CA, USA.

    diff --git a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo similarity index 98% rename from IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo rename to IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 1aa9fe368c..d052377605 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTQuasiDynamicCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors; -model PVTQuasiDynamicCollector - "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling" +model PVTCollector + "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); @@ -216,4 +216,4 @@ Line(points={{32,0},{52,0}}, color={255,255,0}), Line(points={{-8,-8},{6,6}}, color={255,255,0}, origin={28,32}, rotation=180), Line(points={{-10,0},{10,0}}, color={255,255,0}, origin={0,40}, rotation=90), Polygon(points={{72,96},{36,26},{60,34},{48,-24},{88,58},{64,48},{72,96}}, lineColor={0,0,0}, fillColor={0,255,0}, fillPattern=FillPattern.Solid)})); -end PVTQuasiDynamicCollector; +end PVTCollector; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo index ac40d3799b..189dfc2272 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo @@ -49,7 +49,7 @@ A term‑by‑term breakdown of each thermal loss contribution; Cumulative sums showing how each additional term builds up to the total heat loss. -", +", revisions="
    • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 2f5e7a482a..291c302de6 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -25,7 +25,7 @@ record UI_Validation = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTColVal", - Documentation(info = " + Documentation(info="

      This record contains anonymized thermal and electrical performance parameters for an uncovered photovoltaic–thermal (PVT) collector with rear insulation, @@ -34,7 +34,7 @@ Thermal performance parameters correspond to operation of the PVT collector at m

      This datasheet is used in the validation of -IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, which can be found in the IDEAS.Fluid.PVTCollectors.Validation.PVT_UI package.

      diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 2e0135ff93..be49b075eb 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -25,7 +25,7 @@ record UN_Validation = annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTColVal", - Documentation(info = " + Documentation(info="

      This record contains performance parameters for a flat‑plate, uncovered and uninsulated PVT collector, derived from manufacturer datasheets and thermal rating documentation. @@ -39,7 +39,7 @@ SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017.

      For this PVT collector, additional real-life measurement data is publicly available (Veynandt, 2023) and has been used in the validation of -IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, +IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, which can be found in the IDEAS.Fluid.PVTCollectors.Validation.PVT_UN package.

      diff --git a/IDEAS/Fluid/PVTCollectors/package.order b/IDEAS/Fluid/PVTCollectors/package.order index 83567db19d..6cca36ddc3 100644 --- a/IDEAS/Fluid/PVTCollectors/package.order +++ b/IDEAS/Fluid/PVTCollectors/package.order @@ -1,5 +1,5 @@ UsersGuide -PVTQuasiDynamicCollector +PVTCollector Data Types Examples From 9c7f2223681d0b9c595f40daaf1881b5ec3f091a Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:06:28 +0100 Subject: [PATCH 21/86] refactor: include a7 and a8 terms in heat loss calculation and modify wind speed to reduced wind speed as required by ISO9806:2017 --- .../ISO9806QuasiDynamicHeatLoss.mo | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo index 8351e0465d..032af21c6b 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo @@ -4,23 +4,28 @@ model ISO9806QuasiDynamicHeatLoss extends IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss( // Override the internal heat-loss expression to include c3, c4 and c6 terms - final QLos_internal=A_c/nSeg*{dT[i]*(c1 - c2*dT[i] + c3*winSpePla) + c4*(HHorIR - - Modelica.Constants.sigma*TEnv^4) - c6*winSpePla*HGloTil for i in 1:nSeg}, - final a1=c1, - final a2=c2); + final QLos_internal=A_c/nSeg*{dT[i]*(a1 - a2*dT[i] + a3*(winSpePla-3)) + a4*(HHorIR + - Modelica.Constants.sigma*TEnv^4) - a6*(winSpePla-3)*HGloTil + - a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a8*(dT[i])^4 for i in 1:nSeg}, + final a1=a1, + final a2=a2); - parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1(final min=0) + parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1(final min=0) "Linear heat loss coefficient (a1)"; - parameter Real c2(final unit="W/(m2.K2)", final min=0) + parameter Real a2(final unit="W/(m2.K2)", final min=0) "Quadratic heat loss coefficient (a2)"; // —— Additional quasi-dynamic coefficients —— - parameter Modelica.Units.SI.SpecificHeatCapacity c3(final min=0) + parameter Modelica.Units.SI.SpecificHeatCapacity a3(final min=0) "Wind speed dependence of heat loss"; - parameter Modelica.Units.SI.DimensionlessRatio c4(final min=0) + parameter Modelica.Units.SI.DimensionlessRatio a4(final min=0) "Sky long-wave irradiance dependence"; - parameter Real c6(final unit="s/m", final min=0) + parameter Real a6(final unit="s/m", final min=0) "Wind speed dependence of thermal zero-loss efficiency"; + parameter Real a7(final unit="W/(m2.K4)", final min=0) + "Wind speed dependence of IR radiation exchange"; + parameter Real a8(final unit="W/(m2.K4)", final min=0) + "Radiation losses"; // Quasi-dynamic inputs Modelica.Blocks.Interfaces.RealInput winSpePla( From db34925a25314d74609813c3982c94addaa269c1 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:12:37 +0100 Subject: [PATCH 22/86] refactor: HeatLoss test example adapt wind speed amplitude to not become negative --- .../BaseClasses/Examples/ISO9806HeatLoss.mo | 18 ++++++++++-------- .../BaseClasses/ISO9806QuasiDynamicHeatLoss.mo | 4 +--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 50917f7c95..dc10e26920 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -25,19 +25,21 @@ model ISO9806HeatLoss ISO9806QuasiDynamicHeatLoss heaLosQuaDyn( nSeg=3, redeclare package Medium = Medium, - c1=per.c1, - c2=per.c2, - c3=per.c3, - c4=per.c4, - c6=per.c6, + a1=per.a1, + a2=per.a2, + a3=per.a3, + a4=per.a4, + a6=per.a6, + a7=per.a7, + a8=per.a8, A_c=per.A) annotation (Placement(transformation(extent={{18,-2},{38,18}}))); IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss heaLosSteSta( A_c=per.A, nSeg=3, redeclare package Medium = Medium, - a1=per.c1, - a2=per.c2) + a1=per.a1, + a2=per.a2) annotation (Placement(transformation(extent={{18,-68},{38,-48}}))); Modelica.Blocks.Sources.Sine TEnv( f=0.01, @@ -48,7 +50,7 @@ model ISO9806HeatLoss f=1/(24*3600), phase=0, offset=3, - amplitude=5) "wind speed in the collector plane" + amplitude=2) "wind speed in the collector plane" annotation (Placement(transformation(extent={{60,58},{80,78}}))); Modelica.Blocks.Sources.RealExpression HHorIR(y=400) "long wave irradiance" annotation (Placement(transformation(extent={{-1.5,58},{17.5,74}}))); diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo index 032af21c6b..38fbf84b96 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo @@ -6,9 +6,7 @@ model ISO9806QuasiDynamicHeatLoss // Override the internal heat-loss expression to include c3, c4 and c6 terms final QLos_internal=A_c/nSeg*{dT[i]*(a1 - a2*dT[i] + a3*(winSpePla-3)) + a4*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a6*(winSpePla-3)*HGloTil - - a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a8*(dT[i])^4 for i in 1:nSeg}, - final a1=a1, - final a2=a2); + - a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a8*(dT[i])^4 for i in 1:nSeg}); parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1(final min=0) "Linear heat loss coefficient (a1)"; From a275b9f863c21fd79486bae645f8eb5e8a617cf5 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:14:18 +0100 Subject: [PATCH 23/86] refactor: rename ISO9806QuasiDynamicHeatLoss to ISO9806HeatLoss since 2017 standard supports broader range of collectors --- .../PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo | 7 +++---- .../{ISO9806QuasiDynamicHeatLoss.mo => ISO9806HeatLoss.mo} | 6 +++--- IDEAS/Fluid/PVTCollectors/BaseClasses/package.order | 2 +- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 6 +++--- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 2 +- .../BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo | 6 +++--- .../PVT_UI/PVTQuasiDynamicCollectorValidation.mo | 2 +- .../PVT_UN/PVTQuasiDynamicCollectorValidation.mo | 2 +- 8 files changed, 16 insertions(+), 17 deletions(-) rename IDEAS/Fluid/PVTCollectors/BaseClasses/{ISO9806QuasiDynamicHeatLoss.mo => ISO9806HeatLoss.mo} (98%) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index dc10e26920..2e55134d65 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -1,6 +1,5 @@ within IDEAS.Fluid.PVTCollectors.BaseClasses.Examples; -model ISO9806HeatLoss - "Example showing the use of ISO9806QuasiDynamicHeatLoss" +model ISO9806HeatLoss "Example showing the use of ISO9806HeatLoss" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium in the system"; @@ -22,7 +21,7 @@ model ISO9806HeatLoss amplitude=15, offset=273.15 + 20) "Temperature of the third segment" annotation (Placement(transformation(extent={{-90,-52},{-70,-32}}))); - ISO9806QuasiDynamicHeatLoss heaLosQuaDyn( + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss heaLosQuaDyn( nSeg=3, redeclare package Medium = Medium, a1=per.a1, @@ -93,7 +92,7 @@ equation Documentation(info="

      This example demonstrates the implementation of - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss, which calculates the quasi-dynamic heat loss of a PVT or solar thermal collector according to the ISO 9806:2013 standard. diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo similarity index 98% rename from IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo rename to IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo index 38fbf84b96..f0e32c489b 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.BaseClasses; -model ISO9806QuasiDynamicHeatLoss - "Calculate the heat loss of a PVT/solar collector using ISO9806:2013" +model ISO9806HeatLoss + "Calculate the heat loss of a PVT/solar collector using ISO9806:2017" extends IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss( // Override the internal heat-loss expression to include c3, c4 and c6 terms @@ -129,4 +129,4 @@ This is for #1436

    ")); -end ISO9806QuasiDynamicHeatLoss; +end ISO9806HeatLoss; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order index 841c049367..45a8703789 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order @@ -1,3 +1,3 @@ ElectricalPVT -ISO9806QuasiDynamicHeatLoss +ISO9806HeatLoss Examples diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index d052377605..7dc6d11e65 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -46,7 +46,7 @@ model PVTCollector "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss heaLosStc( + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss heaLosStc( redeclare final package Medium = Medium, final nSeg=nSeg, final a1=per.a1, @@ -156,7 +156,7 @@ equation annotation ( defaultComponentName = "pvtCol", -Documentation(info = " +Documentation(info="

    This component models a photovoltaic–thermal (PVT) collector by coupling the ISO 9806 quasi-dynamic thermal method with an internal electrical model. The model uses only datasheet parameters (no measured calibration data) and has been validated experimentally for unglazed PVT collectors (with and without rear insulation) under a wide range of weather conditions.

    @@ -175,7 +175,7 @@ IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT
  • Quasi-dynamic thermal losses: see - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss
  • diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 7744f77623..1181d2b56f 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -18,7 +18,7 @@ The equations related to the heat losses and heat gains can be found in the foll
    • Quasi‑dynamic thermal losses: see - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss
    • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo index 189dfc2272..d25f30fae5 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo @@ -2,7 +2,7 @@ within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; model ISO9806QuasiDynamicHeatLossValidation "Validation variant with term‑by‑term breakdown of quasi‑dynamic heat loss" - extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss; + extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss; // —— Diagnostic internal variables —— Modelica.Units.SI.Power c1_c2_term "Contribution from c1–c2 (steady-state) term"; @@ -33,11 +33,11 @@ equation annotation ( defaultComponentName="heaLosStcVal", - Documentation(info = " + Documentation(info="

      Extends the standard quasi‑dynamic heat‑loss model -( +( IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss). For validation purposes, this block adds:

      diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo index adb6c29719..fc87298419 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo @@ -200,7 +200,7 @@ IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT
    • Quasi-dynamic thermal losses: - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss
    • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo index 99d1df6db1..3be50aff8e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTQuasiDynamicCollectorValidation.mo @@ -158,7 +158,7 @@ IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT
    • Quasi-dynamic thermal losses: - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss
    • From 5074916b9c5e4b74247b00ebdb074d52cc86ab1b Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:17:42 +0100 Subject: [PATCH 24/86] refactor: adapt UAbsFluid calculation in ElectricalPVT by changing c1 to a1 --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 09f9e9e4ac..eb57b389b0 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -13,11 +13,11 @@ model ElectricalPVT parameter Modelica.Units.SI.Area A "PV area"; parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff "Effective transmittance–absorptance product"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1 "First-order heat loss coefficient"; + parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1 "First-order heat loss coefficient"; parameter Modelica.Units.SI.Efficiency etaEl "Electrical efficiency"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid = - ((tauAlpEff - etaEl) * (c1 + abs(gamma)*HGloHorNom)) / ((tauAlpEff - etaEl) - eta0) + ((tauAlpEff - etaEl) * (a1 + abs(gamma)*HGloHorNom)) / ((tauAlpEff - etaEl) - eta0) "Heat transfer coefficient between the fluid and the PV cells, calculated from datasheet parameters"; // Inputs diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 7dc6d11e65..2dc8518b00 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -15,7 +15,7 @@ model PVTCollector "Effective transmittance–absorptance product"; parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid( - min=0) = ((tauAlpEff - per.etaEl) * (per.c1 + abs(per.gamma)*HGloHorNom)) / + min=0) = ((tauAlpEff - per.etaEl) * (per.a1 + abs(per.gamma)*HGloHorNom)) / ((tauAlpEff - per.etaEl) - per.eta0) "Internal heat transfer coefficient between the fluid and PV cells; computed from datasheet parameters by default." annotation(Dialog(tab="Advanced", group="Electrical parameters")); @@ -69,7 +69,7 @@ model PVTCollector final A = per.A, final eta0 = per.eta0, final tauAlpEff = tauAlpEff, - final c1 = per.c1, + final a1 = per.a1, final etaEl = per.etaEl, final UAbsFluid = UAbsFluid) "Calculates the electrical power output of the PVT model" From 72c9918df8361858f5aa406a54a7de68016823f5 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:32:03 +0100 Subject: [PATCH 25/86] refactor: PVT_UI validation to include additional loss terms --- .../ISO9806QuasiDynamicHeatLossValidation.mo | 40 +++++++++++-------- .../PVT_UI/BaseClasses/UI_Validation.mo | 16 ++++---- .../PVTQuasiDynamicCollectorValidation.mo | 16 ++++---- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 19 +++++---- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo index d25f30fae5..2c084a1baa 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo @@ -5,31 +5,39 @@ model ISO9806QuasiDynamicHeatLossValidation extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss; // —— Diagnostic internal variables —— - Modelica.Units.SI.Power c1_c2_term "Contribution from c1–c2 (steady-state) term"; - Modelica.Units.SI.Power c3_term "Contribution from wind-speed dependence (c3)"; - Modelica.Units.SI.Power c4_term "Contribution from sky long-wave (c4)"; - Modelica.Units.SI.Power c6_term "Contribution from wind–irradiance coupling (c6)"; + Modelica.Units.SI.Power a1_a2_term "Contribution from a1–a2 (steady-state) term"; + Modelica.Units.SI.Power a3_term "Contribution from wind-speed dependence (a3)"; + Modelica.Units.SI.Power a4_term "Contribution from sky long-wave (a4)"; + Modelica.Units.SI.Power a6_term "Contribution from wind–irradiance coupling (a6)"; + Modelica.Units.SI.Power a7_term "Contribution from wind–irradiance dependence of IR radiation exchange (a7)"; + Modelica.Units.SI.Power a8_term "Contribution from radiation losses (a8)"; Modelica.Units.SI.Irradiance EL_term "Sky long-wave irradiance difference (HHorIR – σ·TEnv⁴)"; // —— Cumulative sums —— - Modelica.Units.SI.Power pvt_st_st "Steady-state loss (c1–c2)"; - Modelica.Units.SI.Power pvt_c3 "Steady-state + c3"; - Modelica.Units.SI.Power pvt_c4 "Steady-state + c3 + c4"; - Modelica.Units.SI.Power pvt_c6 "Total quasi-dynamic loss"; + Modelica.Units.SI.Power pvt_st_st "Steady-state loss (a1–a2)"; + Modelica.Units.SI.Power pvt_a3 "Steady-state + a3"; + Modelica.Units.SI.Power pvt_a4 "Steady-state + a3 + a4"; + Modelica.Units.SI.Power pvt_a6 "Steady-state + a3 + a4 + a6"; + Modelica.Units.SI.Power pvt_a7 "Steady-state + a3 + a4 + a6 + a7"; + Modelica.Units.SI.Power pvt_a8 "Steady-state + a3 + a4 + a6 + a7 + a8"; equation // term-by-term breakdown - c1_c2_term = sum(A_c/nSeg * { dT[i]*(c1 - c2*dT[i]) for i in 1:nSeg}); - c3_term = sum(A_c/nSeg * { dT[i]*c3*winSpePla for i in 1:nSeg}); - c4_term = sum(A_c/nSeg * { c4*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); - c6_term = sum(A_c/nSeg * { -c6*winSpePla*HGloTil for i in 1:nSeg}); + a1_a2_term = sum(A_c/nSeg * { dT[i]*(a1 - a2*dT[i]) for i in 1:nSeg}); + a3_term = sum(A_c/nSeg * { dT[i]*a3*(winSpePla-3) for i in 1:nSeg}); + a4_term = sum(A_c/nSeg * { a4*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); + a6_term = sum(A_c/nSeg * { -a6*(winSpePla-3)*HGloTil for i in 1:nSeg}); + a7_term = sum(A_c/nSeg * { -a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); + a8_term = sum(A_c/nSeg * { -a8*(dT[i])^4 for i in 1:nSeg}); EL_term = HHorIR - Modelica.Constants.sigma*TEnv^4; // cumulative contributions - pvt_st_st = c1_c2_term; - pvt_c3 = pvt_st_st + c3_term; - pvt_c4 = pvt_c3 + c4_term; - pvt_c6 = pvt_c4 + c6_term; + pvt_st_st = a1_a2_term; + pvt_a3 = pvt_st_st + a3_term; + pvt_a4 = pvt_a3 + a4_term; + pvt_a6 = pvt_a4 + a6_term; + pvt_a7 = pvt_a6 + a7_term; + pvt_a8 = pvt_a7 + a8_term; annotation ( defaultComponentName="heaLosStcVal", diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 291c302de6..3d5bdfc951 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -11,13 +11,15 @@ record UI_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,1,0.99,0.99,0.98,0.96,0.92,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=1, - final eta0=0.475, - final c1=7.411, - final c2=0.0, - final c3=0.0, // Put to 0.0 for validation purposes - final c4=0.0, // Put to 0.0 for validation purposes - final c6=0.0, // Put to 0.0 for validation purposes + final IAMDiff=(0.475*1-3*0.003)/(0.475-3*0.003), + final eta0=0.475-3*0.003, + final a1=7.411+3*1.7, + final a2=0.0, + final a3=0.0, // Put to 0.0 for validation purposes + final a4=0.0, // Put to 0.0 for validation purposes + final a6=0.0, // Put to 0.0 for validation purposes + final a7=0.0, // Put to 0.0 for validation purposes + final a8=0.0, // Put to 0.0 for validation purposes final P_nominal=280, final gamma=-0.0041, final etaEl=0.1687) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo index fc87298419..a9101e6dad 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo @@ -53,11 +53,13 @@ model PVTQuasiDynamicCollectorValidation heaLosStc( redeclare final package Medium = Medium, final nSeg=nSeg, - final c1=per.c1, - final c2=per.c2, - final c3=per.c3, - final c4=per.c4, - final c6=per.c6, + final a1=per.a1, + final a2=per.a2, + final a3=per.a3, + final a4=per.a4, + final a6=per.a6, + final a7=per.a7, + final a8=per.a8, final A_c=ATot_internal) "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); @@ -70,7 +72,7 @@ model PVTQuasiDynamicCollectorValidation final A = per.A, final eta0 = per.eta0, final tauAlpEff = tauAlpEff, - final c1 = per.c1, + final a1 = per.a1, final etaEl = per.etaEl) "Calculates the electrical power output of the PVT model" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); @@ -170,7 +172,7 @@ equation connect(Eglob.y, eleGen.HGloTil) annotation (Line(points={{-73.55,-38},{-32,-38}, {-32,-76},{-22,-76}}, color={0,0,127})); connect(qThSegExp.y,eleGen.Qth) annotation (Line( - points={{-40,-90},{-30,-90},{-30,-70},{-22,-70}}, + points={{-39,-90},{-30,-90},{-30,-70},{-22,-70}}, color={0,0,127})); annotation ( defaultComponentName="pvtCol", diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 2728da54e5..502160dceb 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -50,14 +50,18 @@ model PVT_UI_Thermal_DayType1 annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression c1_c2_term(y=PvtCol.heaLosStc.c1_c2_term) + Modelica.Blocks.Sources.RealExpression a1_a2_term(y=PvtCol.heaLosStc.a1_a2_term) "[W]" annotation (Placement(transformation(extent={{19,68},{45,84}}))); - Modelica.Blocks.Sources.RealExpression c3_term(y=PvtCol.heaLosStc.c3_term) + Modelica.Blocks.Sources.RealExpression a3_term(y=PvtCol.heaLosStc.a3_term) "[W]" annotation (Placement(transformation(extent={{19,52},{45,68}}))); - Modelica.Blocks.Sources.RealExpression c4_term(y=PvtCol.heaLosStc.c4_term) + Modelica.Blocks.Sources.RealExpression a4_term(y=PvtCol.heaLosStc.a4_term) "[W]" annotation (Placement(transformation(extent={{57,68},{83,84}}))); - Modelica.Blocks.Sources.RealExpression c6_term(y=PvtCol.heaLosStc.c6_term) + Modelica.Blocks.Sources.RealExpression a6_term(y=PvtCol.heaLosStc.a6_term) "[W]" annotation (Placement(transformation(extent={{57,52},{83,68}}))); + Modelica.Blocks.Sources.RealExpression a7_term(y=PvtCol.heaLosStc.a7_term) + "[W]" annotation (Placement(transformation(extent={{19,36},{45,52}}))); + Modelica.Blocks.Sources.RealExpression a8_term(y=PvtCol.heaLosStc.a8_term) + "[W]" annotation (Placement(transformation(extent={{57,36},{83,52}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow *(PvtCol.sta_a.T - PvtCol.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); @@ -94,6 +98,7 @@ model PVT_UI_Thermal_DayType1 Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); + equation connect(meaDat.y[13],TAmbKel. Celsius) annotation (Line(points={{-71,34},{-60, @@ -145,7 +150,7 @@ __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTColle Tolerance=1e-06, __Dymola_Algorithm="Cvode"), Diagram(graphics={ - Rectangle(extent={{6,96},{90,50}}, lineColor={28,108,200}), + Rectangle(extent={{6,96},{92,34}}, lineColor={28,108,200}), Text( extent={{8,98},{90,82}}, textColor={28,108,200}, @@ -159,13 +164,13 @@ __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTColle textStyle={TextStyle.Bold}, textString="Measured and simulated thermal power"), - Rectangle(extent={{-86,-52},{-14,-88}}, lineColor={28,108,200}), + Rectangle(extent={{-86,-52},{18,-86}}, lineColor={28,108,200}), Text( extent={{-84,-56},{2,-64}}, textColor={28,108,200}, horizontalAlignment=TextAlignment.Left, textStyle={TextStyle.Bold}, textString="Simulated thermal power, -neglecting c3-, c4- and c6-term +neglecting c3-, c4-, c6-, c7- and c8-term loss contributions")})); end PVT_UI_Thermal_DayType1; From d24fa28973b402880a6557fa63e619629c073c5d Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 10:37:55 +0100 Subject: [PATCH 26/86] refactor: renaming PVT validation collector model and submodels (remove quasi-dynamic namings) --- ...dation.mo => ISO9806HeatLossValidation.mo} | 6 ++-- .../BaseClasses/LongWaveRadiation.mo | 2 +- .../Validation/BaseClasses/package.order | 2 +- .../Electrical/PVT_UI_Electrical_DayType1.mo | 3 +- ...alidation.mo => PVTCollectorValidation.mo} | 8 +++--- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 28 +++++++++---------- .../Validation/PVT_UI/package.order | 2 +- ...alidation.mo => PVTCollectorValidation.mo} | 8 +++--- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 3 +- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 5 ++-- .../Validation/PVT_UN/package.order | 2 +- 11 files changed, 33 insertions(+), 36 deletions(-) rename IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/{ISO9806QuasiDynamicHeatLossValidation.mo => ISO9806HeatLossValidation.mo} (94%) rename IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/{PVTQuasiDynamicCollectorValidation.mo => PVTCollectorValidation.mo} (98%) rename IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/{PVTQuasiDynamicCollectorValidation.mo => PVTCollectorValidation.mo} (97%) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo similarity index 94% rename from IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo rename to IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index 2c084a1baa..9825ee4a82 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806QuasiDynamicHeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; -model ISO9806QuasiDynamicHeatLossValidation - "Validation variant with term‑by‑term breakdown of quasi‑dynamic heat loss" +model ISO9806HeatLossValidation + "Validation variant with term‑by‑term breakdown of ISO9806:2017 standard thermal heat loss" extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss; @@ -67,4 +67,4 @@ This is for #1436
    ")); -end ISO9806QuasiDynamicHeatLossValidation; +end ISO9806HeatLossValidation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index b8dc0c5e96..dbd119f135 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -84,7 +84,7 @@ accounting for both sky and ground contributions.

    Implementation Notes

    This model is used in the validation of unglazed photovoltaic–thermal (PVT) collectors -( +( IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTQuasiDynamicCollectorValidation) where direct longwave irradiance measurements are unreliable or unavailable. It assumes a ground emissivity of 0.95. The clear-sky emissivity is calculated using an empirical correlation based on the dew point temperature. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 0f878d243b..691691dfee 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,3 +1,3 @@ -ISO9806QuasiDynamicHeatLossValidation +ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 8c1dce6b57..0069808e62 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -10,8 +10,7 @@ model PVT_UI_Electrical_DayType1 parameter Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTQuasiDynamicCollectorValidation - PvtCol( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation PvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo similarity index 98% rename from IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo rename to IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index a9101e6dad..336c8f5bd9 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTQuasiDynamicCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; -model PVTQuasiDynamicCollectorValidation - "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling" +model PVTCollectorValidation + "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per, @@ -49,7 +49,7 @@ model PVTQuasiDynamicCollectorValidation final A_c=ATot_internal) "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806QuasiDynamicHeatLossValidation + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation heaLosStc( redeclare final package Medium = Medium, final nSeg=nSeg, @@ -325,4 +325,4 @@ This is for #1436#1436 Date: Tue, 17 Feb 2026 10:55:38 +0100 Subject: [PATCH 27/86] refactor: updating UN PVT validation model and submodels to use ISO9806:2017 methos --- .../PVT_UN/BaseClasses/UN_Validation.mo | 14 ++++--- .../PVT_UN/PVTCollectorValidation.mo | 16 ++++---- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 4 +- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 40 ++++++++++--------- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index be49b075eb..b2774e93e4 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -12,12 +12,14 @@ record UN_Validation = final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, final IAMDiff=0.93, - final eta0=0.535, - final c1=10.74, - final c2=0.0, - final c3=0.0, // Put to 0.0 for validation purposes - final c4=0.0, // Put to 0.0 for validation purposes - final c6=0.0, // Put to 0.0 for validation purposes + final eta0=0.535/(0.85+0.15*0.93), + final a1=10.74+3*1.0997, + final a2=0.0, + final a3=0.0, // Put to 0.0 for validation purposes + final a4=0.0, // Put to 0.0 for validation purposes + final a6=0.0, // Put to 0.0 for validation purposes + final a7=0.0, // Put to 0.0 for validation purposes + final a8=0.0, // Put to 0.0 for validation purposes final P_nominal=300, final gamma=-0.00375, final etaEl=0.183) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index bcc85dbaef..0c0c5e85cd 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -41,11 +41,13 @@ model PVTCollectorValidation heaLosStc( redeclare final package Medium = Medium, final nSeg=nSeg, - final c1=per.c1, - final c2=per.c2, - final c3=per.c3, - final c4=per.c4, - final c6=per.c6, + final a1=per.a1, + final a2=per.a2, + final a3=per.a3, + final a4=per.a4, + final a6=per.a6, + final a7=per.a7, + final a8=per.a8, final A_c=ATot_internal) "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); @@ -69,7 +71,7 @@ model PVTCollectorValidation final A = per.A, final eta0 = per.eta0, final tauAlpEff = tauAlpEff, - final c1 = per.c1, + final a1 = per.a1, final etaEl = per.etaEl) "Calculates the electrical power output of the PVT model" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); @@ -128,7 +130,7 @@ equation connect(TFluKel.Celsius, meaDat.y[5]) annotation (Line(points={{22,82},{54,82}, {54,80},{57,80}}, color={0,0,127})); connect(qThSegExp.y,eleGen.Qth) annotation (Line( - points={{-40,-70},{-22,-70}}, + points={{-39,-70},{-22,-70}}, color={0,0,127})); annotation ( defaultComponentName="pvtCol", diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 5bdd6ad4fb..b7cfe493d9 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -52,7 +52,7 @@ model PVT_UN_Electrical Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV - electricalPV( + ElectricalPV( P_STC=datPVTCol.P_nominal, gamma=datPVTCol.gamma, eleLosFac=eleLosFac, @@ -60,7 +60,7 @@ model PVT_UN_Electrical module_efficiency=datPVTCol.etaEl, til=0.34906585039887, azi=0) annotation (Placement(transformation(extent={{-64,-72},{-84,-54}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" + Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" annotation (Placement(transformation(extent={{-53,-68},{-27,-52}}))); Modelica.Blocks.Sources.RealExpression simTcell(y=PvtCol.eleGen.TavgCel - 273.15) "[°C]" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 932593dc25..cbe746da2b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -32,14 +32,6 @@ model PVT_UN_Thermal annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "[W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression c1_c2_term(y=PvtCol.heaLosStc.c1_c2_term) - "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); - Modelica.Blocks.Sources.RealExpression c3_term(y=PvtCol.heaLosStc.c3_term) - "[W]" annotation (Placement(transformation(extent={{21,52},{47,68}}))); - Modelica.Blocks.Sources.RealExpression c4_term(y=PvtCol.heaLosStc.c4_term) - "[W]" annotation (Placement(transformation(extent={{59,68},{85,84}}))); - Modelica.Blocks.Sources.RealExpression c6_term(y=PvtCol.heaLosStc.c6_term) - "[W]" annotation (Placement(transformation(extent={{59,52},{85,68}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow *(PvtCol.sta_a.T - PvtCol.sta_b.T)) "[W]" @@ -94,7 +86,19 @@ model PVT_UN_Thermal annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" - annotation (Placement(transformation(extent={{-81,-90},{-55,-74}}))); + annotation (Placement(transformation(extent={{-81,-94},{-55,-78}}))); + Modelica.Blocks.Sources.RealExpression a1_a2_term(y=PvtCol.heaLosStc.a1_a2_term) + "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); + Modelica.Blocks.Sources.RealExpression a3_term(y=PvtCol.heaLosStc.a3_term) + "[W]" annotation (Placement(transformation(extent={{21,52},{47,68}}))); + Modelica.Blocks.Sources.RealExpression a4_term(y=PvtCol.heaLosStc.a4_term) + "[W]" annotation (Placement(transformation(extent={{59,68},{85,84}}))); + Modelica.Blocks.Sources.RealExpression a6_term(y=PvtCol.heaLosStc.a6_term) + "[W]" annotation (Placement(transformation(extent={{59,52},{85,68}}))); + Modelica.Blocks.Sources.RealExpression a7_term(y=PvtCol.heaLosStc.a7_term) + "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); + Modelica.Blocks.Sources.RealExpression a8_term(y=PvtCol.heaLosStc.a8_term) + "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); @@ -168,12 +172,6 @@ This is for #1436"), Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle(extent={{8,96},{92,50}}, lineColor={28,108,200}), - Text( - extent={{10,98},{92,82}}, - textColor={28,108,200}, - textString="Distribution of heat losses ", - textStyle={TextStyle.Bold}), Rectangle(extent={{-86,96},{-14,60}}, lineColor={28,108,200}), Text( extent={{-84,96},{-14,80}}, @@ -182,14 +180,20 @@ This is for #1436 Date: Tue, 17 Feb 2026 13:20:51 +0100 Subject: [PATCH 28/86] refactor: modify coefficients for state-of-the-art model following ErP section of datasheet --- .../PVT_UI/BaseClasses/UI_Validation.mo | 16 ++++++++-------- .../PVT_UN/BaseClasses/UN_Validation.mo | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 3d5bdfc951..9d5b2ca9ac 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -11,15 +11,15 @@ record UI_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,1,0.99,0.99,0.98,0.96,0.92,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=(0.475*1-3*0.003)/(0.475-3*0.003), - final eta0=0.475-3*0.003, - final a1=7.411+3*1.7, + final IAMDiff=0.98, + final eta0=0.475, + final a1=12.51, final a2=0.0, - final a3=0.0, // Put to 0.0 for validation purposes - final a4=0.0, // Put to 0.0 for validation purposes - final a6=0.0, // Put to 0.0 for validation purposes - final a7=0.0, // Put to 0.0 for validation purposes - final a8=0.0, // Put to 0.0 for validation purposes + final a3=0.0, + final a4=0.0, + final a6=0.0, + final a7=0.0, + final a8=0.0, final P_nominal=280, final gamma=-0.0041, final etaEl=0.1687) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index b2774e93e4..08acd65163 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -11,15 +11,15 @@ record UN_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,80,90}), final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=0.93, - final eta0=0.535/(0.85+0.15*0.93), - final a1=10.74+3*1.0997, + final IAMDiff=0.97, + final eta0=0.499, + final a1=11.84, final a2=0.0, - final a3=0.0, // Put to 0.0 for validation purposes - final a4=0.0, // Put to 0.0 for validation purposes - final a6=0.0, // Put to 0.0 for validation purposes - final a7=0.0, // Put to 0.0 for validation purposes - final a8=0.0, // Put to 0.0 for validation purposes + final a3=0.0, + final a4=0.0, + final a6=0.0, + final a7=0.0, + final a8=0.0, final P_nominal=300, final gamma=-0.00375, final etaEl=0.183) From cb1d1c343449f779d9861d9fd78347e410cfbe38 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 13:23:00 +0100 Subject: [PATCH 29/86] refactor: calculate Kd based on ISO Annex B.3 - B.5, also influences eta0 --- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 15a5b6c8bd..0379f3bf45 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -11,8 +11,8 @@ record UN_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,80,90}), final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=0.93, - final eta0=0.535/(0.85+0.15*0.93), + final IAMDiff=4.718/6.216, + final eta0=0.535/(0.85+0.15*4.718/6.216), final a1=10.74+3*1.0997, final a2=0.0, final a3=1.0997, From e831d9d00c420a36437913721646084abad972b3 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 14:28:11 +0100 Subject: [PATCH 30/86] refactor: error in eta0 conversion from 2013 to 2017 standard --- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 0379f3bf45..0c953c513c 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -12,7 +12,7 @@ record UN_Validation = final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, final IAMDiff=4.718/6.216, - final eta0=0.535/(0.85+0.15*4.718/6.216), + final eta0=(1-3*0.067)*0.535/(0.85+0.15*4.718/6.216), final a1=10.74+3*1.0997, final a2=0.0, final a3=1.0997, From f67dcb407b1110ce287cb4a132878e06d21a664e Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 15:46:03 +0100 Subject: [PATCH 31/86] refactor: correct for too low Kd and set number of segment to default --- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 0c953c513c..ad62c237ed 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -11,8 +11,8 @@ record UN_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,80,90}), final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=4.718/6.216, - final eta0=(1-3*0.067)*0.535/(0.85+0.15*4.718/6.216), + final IAMDiff=0.966, + final eta0=(1-3*0.067)*0.535/(0.85+0.15*0.966), final a1=10.74+3*1.0997, final a2=0.0, final a3=1.0997, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index cbe746da2b..a358481c21 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -41,7 +41,6 @@ model PVT_UN_Thermal energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, show_T=true, - nSeg=1, azi=0, til=0.34906585039887, rho=0.2, @@ -73,7 +72,6 @@ model PVT_UN_Thermal energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, show_T=true, - nSeg=1, azi=0, til=0.34906585039887, rho=0.2, From 916a7d88ebd5b89a0f3d361773d5836427af0b59 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 17 Feb 2026 16:00:48 +0100 Subject: [PATCH 32/86] refactor: change Kd to detailed annex B ISO 9806 2017 method --- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index ad62c237ed..df6743ae35 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -11,8 +11,8 @@ record UN_Validation = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,80,90}), final incAngModDat={1,1,1,1,0.99,0.97,0.92,0.80,0.55,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered, - final IAMDiff=0.966, - final eta0=(1-3*0.067)*0.535/(0.85+0.15*0.966), + final IAMDiff=0.931, + final eta0=(1-3*0.067)*0.535/(0.85+0.15*0.931), final a1=10.74+3*1.0997, final a2=0.0, final a3=1.0997, From 55a8d568334dce4f8c68137a88bf32512f59d09c Mon Sep 17 00:00:00 2001 From: u0169319 Date: Wed, 11 Mar 2026 20:45:45 +0100 Subject: [PATCH 33/86] docs: update user guide --- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 87 ++++++++++++------ .../Fluid/PVTCollectors/RCnetwork_dotted.png | Bin 34016 -> 52285 bytes 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 1181d2b56f..6e30eadbaa 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -4,9 +4,12 @@ package UsersGuide "User’s Guide" annotation(preferredView="info", Documentation(info="

    -This package contains a model for photovoltaic–thermal (PVT) collectors -based on the ISO 9806:2013 quasi-dynamic thermal procedure -coupled with an internal electrical submodel. +This package contains a physics‑based, datasheet‑driven model for +photovoltaic–thermal (PVT) collectors. The thermal formulation follows the +ISO 9806:2017 quasi‑dynamic test standard, which is currently the most +widely used test method for both glazed and unglazed (WISC) collectors. +The electrical submodel is internally coupled via a datasheet‑derived +absorber–fluid heat transfer coefficient.

    Model description

    @@ -30,15 +33,31 @@ IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain

    -

    -Thermal parameters used in the Quasi-dynamic thermal losses model follow the ISO 9806:2013 quasi-dynamic thermal procedure. -Parameters obtained from other ISO 9806 test procedures, such as the ISO 9806:2013 unglazed test or the ISO 9806:2017 quasi-dynamic method, -can be converted into the thermal parameter set required by this model (c1 to c6, η0, and Kd) -using the procedure detailed in - -SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017. +

    +The thermal parameters used by this model are expressed in the +ISO 9806:2017 quasi‑dynamic format. +

    +

    +Because some commercial PVT collectors are still tested under +ISO 9806:2013 (steady‑state unglazed or quasi‑dynamic) or the +newly published ISO 9806:2025 quasi‑dynamic method, a +unified conversion procedure is provided to translate datasheet +parameters from these standards into their ISO 9806:2017 equivalents. +This guarantees that the model can be used for all commercially tested +PVT collectors. +

    +

    +The standard‑to‑standard conversion routines are implemented in: +
    +IDEAS.Resources.Data.Fluid.PVTCollectors +

    +

    +The conversion procedure is based on (i) SKN‑N0474R0 for ISO 9806:2013 +to ISO 9806:2017, and (ii) a newly introduced conversion for +ISO 9806:2025 to ISO 9806:2017 as published in Meertens et al. (2026).

    +
    Electrical part

    The equations and assumptions related to electrical part can be found in the following model: @@ -52,23 +71,31 @@ IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT +

    Electrical–thermal coupling

    -The internal heat transfer coefficient UAbsFluid (visualised in Figure 1) is approximately calculated from datasheet parameters: +The internal absorber–fluid heat transfer coefficient +UAbsFluid couples the thermal and electrical models by +linking the PV cell temperature to the fluid temperature. This coupling is +critical for accurately predicting electrical output.

    -
    -
    UAbsFluid =
    - +

    +The coefficient UAbsFluid is computed solely from +datasheet parameters following the method introduced in +Meertens et al. (2026). For ISO 9806:2017 and MPP‑tested collectors, +the approximate formula is: +

    +
    +
    UAbsFluid =
    +
    - -
    -(τ·α)eff – η0,el -· (c1 + c3·u + b1,el) + +(τ·α)eff – η0,el · (a1 + a3·ur + b1,el)
    -(τ·α)eff – η0,el -– (1 – c60,th·u) · η0,th + +(τ·α)eff – η0,el – (1 – a60,b · ur) · η0,b
    @@ -84,28 +111,28 @@ where γ is the temperature coefficient of power (in % K−1Gnom = 1000 W m−2.
  • -u is the in-plane wind speed. -In this approximation, u = 0 is used to derive UAbsFluid. +ur is the in-plane reduced wind speed. +In this approximation, ur = 0 is used to derive UAbsFluid. The internal heat transfer coefficient is only weakly dependent on external wind speed when the datasheet thermal parameters are accurate (Stegmann 2011).
  • This approach removes the need for a hidden fit parameter: both thermal and electrical coupling coefficients derive solely from publicly available -datasheet values. +datasheet values.

    \"Two-node,

    -Figure 1: Two-node, one-capacitance thermal network for PVT collectors (ISO 9806: dashed lines; extension: solid lines) (Meertens et al., 2025). +Figure 1: Two-node, one-capacitance thermal network for PVT collectors (ISO 9806: dashed lines; extension: solid lines) (Meertens et al., 2026).

    References

    ")); end UsersGuide; diff --git a/IDEAS/Resources/Images/Fluid/PVTCollectors/RCnetwork_dotted.png b/IDEAS/Resources/Images/Fluid/PVTCollectors/RCnetwork_dotted.png index dee0f7c6934d1557b037ee48c4858993fa63912f..f60c1b2b31a5f8eb36d71d9868e4edc2e0c7f268 100644 GIT binary patch literal 52285 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

    ~dJ2l$ z9Z&8$=YF1a+Iqe#n*29FtuA0tsVF4=G|XAQyLz7OVD$u2om3D;rkH9Q;3T6zfQax*Iw5w&)9Y5=b)3+ch|qTo~OOR%g{ zP5K5IN}oBot3ZSu>lSG&Bb0vTMz-+yW#J-Mp|N$*<$~wtYTV4sE-Xedp8HAVD*GK@ zRQaOY9Q+=|PI$-HRgI(GtYLnx~wK{T_bOz$(aw|tI34v7zxTpNSv>MxwkcszlJR5G6K57eCUBjEE4 zauTndZ;XJ#qZ zfKX4C&BymJ=INA?A!S^``M<48mg`=bn51?lstDAL@7%NdCFYT;0jkH67y?XS8u|XL z!1iD^W_qFPo4sltWJJ>Nn@69z051aiJ@E9Ba%vUgOB}Q+?=&lm?NUGyp=kzrHV}%i zQBdXz^}bM8j%2}}gAu2Y`pF<$a0sCK7}6iP#7}nA%1Y%ytcFksi3`qGh*?O>%K90` zK^B<40Jhxr+@FSZ?=yGlucw7zpF9`YA-w{s8_$~?mHjgSDhdh(Y$O21mVw;B_P;A2 zs(5E-GbF1=#Ki@lq0deebW*i}Uu%a1A>bkkpq?OL@0ghM7}zr=iw5-gR<37dX4ZKh zH+wIHJ2*JlP1It*Wh1|S&EfW(g*xp10W3!nE2LEnf@D7*>>yugGeZH1d5thkNQ43! zDrswEIEi5+I&ra7-KEc%7 zM)0;F*~`8t7Qr$8ufn|xQnb_ajtHMXQw%^9?3h5x;JMNBLaIyI9spQw3PBG8q6winET#D zsNh&FfGLwc{n4}mtcf9H=7yh zmdt<`E{uF5QjzPN_*1H(#ee-iP!Ou)qoR!2$f0&(ahn=b5@1S6I?Nw&mOfu*Z=~uT z(+YsZ>;Gny77EBZ!LaFGv8mj|^(UtDH%;)QsyUwJo?Y@n;y=KFUszhI2PW_Tf*UP; zD3pe-BPF~99;o<7)#5RF_yApI8fIIC4kZdf%{6=pKyV%~r->b>qyR!*&A{gKmco+P z0T_0~=OjPUHDoK}>lA$hon(H;i_yjCdzCS~6+2w`<^oe~Mwh7YH}INLQ9gjoGlJO+ z6E8aZGVr13URQY@?HT^J$dP(ju-}kuwGWLfbaTnb!SB3bgE=yd+q9Mjh*_TKcBI?R z+t{*R>yifZq9slfFlYdR^l6`s%wB?0O@Ql!A=&6!gFpy_R9%lS9IOA=#)ml1q(}>@ z`Dd35-_KuN2?b7u+k41PP({cU;21@*C_Sz|J+uJ03_FSf)dpYfMl=I zGc-)<9vp;|(gG}%9yDI!?*wQzz&p{19?)nUfaQEU8Y;}$P&?ijY+y(Ed*9E_%&?)N zAuX*;Vcu3K8b~TQK7budt62lw0|n{<^dJ~;hkiSY(7^<-SQ(zyz z^0`(O07zP8gQhO76<&Qrw06g+maS(jD$gLdv{bVdC<>P3`ifrTK%TvD5C0XiN9>NC zB|@UdGBSX(upIl|kVEqz=uD%9k$5~@a}u|OoG{=?@7m7<@B$wM$0ss2HsiZ~jh2!i)=c?}xTeHySm66by6G|K)$C91_i~b}#PRkMwx&Q&;4Ldh2Lv27LZ}S^BFcg31PtoM*QiV1{A*5z@(v z0*tjx@k{kP<(s-Ar5fQizui;e6M4f*hg+=OqHFLMRec#xNIpaduJC0 zLU`hzEF7&>?Nflh`5x+_)O{=3VMCGsfNZO(P=Nz;j@xUK5b_;n@g(+rF(nTWrv=9c z8Lsm%Y!(A~Mf!QeDuzo#N3<VHl#w8;UcdnIvYd2AD-#H`n?_S4Au= zEu(`eWnW_Ke$bSAAK#!)4~N&#q}|(^WVG)Z3>6Bmvt~gXl7EdrnM`JT{Pd|G;!r>g zo*R|{Wa?}{9Vu!}T^1;nuqhy*F^KxYh8CUh`Vedj!jDE707=6>zwW#~`1^Mb>1P=L zu*%Hq{LJ63!U8R?5b!TFFFZ$5e8{FrNl5{Ckuf|X$_JV^Ld8TYh_P(H&P_G1R!o=R zxCgn!VORJDxQsN=A+WpRlh?BLIQ((CATLo58Ll@aaCU#5_ql;hj3>JFob2i*sEh)7 z3t?G%8o<4SxvTLJYU%*_AM8lj(!ilaAz^Txl_(lpFTiyn{EVP;Cnov#jToI|Q=At2q@$x*<}#qt`wpu$V(4f&ui5K_o<-=YOG#5FUdI z3c7i`4|W@^_B`6zr5AC+Cfb5(T;ftJQ53)v&zsQTa}{0f7%=q!3@DKDp}STfP+B`w zUX%<2WQb_^4xG4A5YRTgT%7(NM#kR?Web$U+OKzuDmddnagm*=PK7_{q53QuFawZ4 zqkp;;6U6kKr3yX@=}HDW%rh`7%QdIj_5cK5q)k=^D=oeUs;4SfzoV1WEy!u;UuL*# zFO%DyT?hq?Q{36*16|ffK^K`v!O&lp;%aDdo6s66CK}TlB zlt4B&TrotPg-T1q?8n10eW^S1K6y7NN1Vbq#h9K6F=UNX88ifFShvLCEn*R^LC{tiXIyW z`Wvl&HH#)u9D$`4PsoB;bglleUOH#X^&y>uV0kWu12{ zOz~vwU2~c%^wg@w74$W3XmV6-gP?w3UqRmcy`6Jroop4v8j)84i%<>{e-My2g#&y7 z&(@aIexl14owvU~a0-o_;-DmNCNNVU?VPpJ!Ehx1f#V1U`uSeUQu#g!N2WyRihgmc ztPIMBQ(ok@!>FAllnv^D#|FPO!^ej0)1{%GmX{}TX~^aa0P9p+0RFc+RP;Z_?(XV; zq;Lcb0Ny{*(cfCY1pF(tyN*msDBD^d{_|h+5O`XI$^L`HPuYSe#95d6%(r`$agq9n zcD$O1SmHrU_F_NOROB%n@?A_g!9@5a6KfyuwDMv@p<7GeO(H0-*Q~Cfe>Yt7xA`=r z(&G|u6y9{1*>wY20fn(teXF}ezR8>yzlftXo_ieea&#PAd=YY)MdO?JUnrf+@?Yw{$;3iwK%j(8(@d|- zjB@D(ay9>!r*6+r=@=JA?|UB^XelJTLxv&^B0=!@z_5@sGrLJ4D+RSZu-SqAAo9f{ z76s@R@R+AeC5~tzNh=tP5LEGi90&Hw2#%A0jIOMtbA+^^#9d|msb4V{zZtDR6T3=8 zK{58f8vA#hUcPs~<<)8p7ik*N`=TX|2-Vl_23vfjfBQ|k${=|o+WHK?M}x5murCOE z0a65wW{LR!=9(Q4(Q?!Of`Xte>l5=|8HW2Ci<@i-hEmH3)s4R$n^g;&u4#PJn}O#< zU^gYFm6ZRb!WwvRFcXo=Hr%Di5nx=cZA>Vc(pdL;{nq;wSH0th0gy#>91dzGR;Rg+ z4My$Y@(N=)8lE1LHpu1SBPRRdHz2imp|7Td)3gSAq|Ta6>KZibp%8))in7M4BAALDKX8OfU zB6mO(Jiab|xijhIBn(za%*E;Uyy{=ficEW==Ar|vXUW6>LO}U^;Nvhf*w|gnA%U!*CwjfxSgAepzww@jTs9CiK)v0W=ZY)dnQ6#`!viK4{`UtECoSf z0z2}KPx4Mk5sm|V=HKIg3qEx^cjBeHl5K;f*9Fc-c1Z1c`iDemMH2>{$~Ck%JwC_{&{Ds%XpXF0RPE#*_uqw(khPiX{-=EXon=%gm3%bE z-j~PPN{8K$^KbcHfIwJSF!Fw@{FcxpqgOR}0_Ggpy7`4Wm%TfoB*_zZ z{-fa=Tlvp!Uw4thTETY`QQ13z;}Wm1;Jcg1ms-a~Dkvk&1+O9rza05t_={&)z_Lze z+lWdy#tKCKKGOPQLD zW0;L@ukb|T?|j+8R(mGSCCrZ`?Jp0ZsR_V@`G?qK4-zqEs8;Yk?i8(Bz4OS+i!?^p zEij3{E#alaJEl)AUw$#W|8#2O^)qJoV)V4iS-q^|w0Hw~J)*1DyM#}b-`oSAILPB% z((1Klf(;Yy5c<5PmaM&a@d9_{-h*DcLTm!W6gxB@Sf7vsQz~;TbZLnFRF+Gibk1J+ zpqLz}c{6bW0t9PZWv4n0Wvp>Cdh*YU_KqRAg0;rg_N6V^6e`VCdyB%kSPy3!b{Ov!a+}Q1u+D)&OU<(R&qJ`M7VfL^ZbErN}HK7$;4n6Z62HITZhL8lIr%)6034-pkuti`X zEKYmJH-L{t0Mp!+8<>caDXR)60O)%w?op~EW{%MM4iBL(ixC^4AJzVWwwnkR`|fX; z&qh##cpHlQJ-_tww_lv<;BQu`Mspwq4Zx>aDhR%?x#rB4<7ewkNZeQQPA4nR`#`Yh z!~0{4^}`2aGXn}qMe-JPq0B=b{^^}3lziC?eRNW8g8hC<8}!m6VFy&%S$ZjESPJX zqjh7>YuT)}Tid}dmOnp-YB|BjNk6&@oL{zjvrz@kkG@}Df);xj1kyK6Mm)^5fFKfb z=CY;cgX1BhQ9)x@0Cv0i#Kp%$eXNoBmH2=5ZhcSVXXq)k!7D;;4S~=w>hE9Zd_;!< zq@n1o`=xxG1Yjg4^Eodf_5R#7hnLU1QqQ;)#gal}?qAs=R`^-L> z_4e~%8C!4R^|B0-{>$vFRSVg1c%%HSQ?A}!0$x_I-%r4HW(0l%FcK&qeF%B;Se&3! z`HTy3P!yMxr;)7@xeCGA_u}6>IGd$Pw3&Jfc;t%nDk)to`SSQV`6$~Dw#F;_>1P&f z%NA1yWD96PfaTbho)C__|2XrZis~NI^-UK2t6(shG|#0-=&;VVY=gwkP?9#+h?+rj z-9@2`hpnT6-I+BBwVkQ5`)<`dYymMOHxJK3mN*4EZnA44nWNL1~*7 zNI|Q9)e!+##SU4e+qffQg-_6EgeeA9otKxq$G>|1Pcc;+ao zEtGfuR_-#&dLMB#;JT(=w@Z-!sV{i;Y^>M#eDE`LNde3XUBSmuowN2y06t_)ChwtCQW(iw<0B}O z-xQADB5NhX^Sqvtsmvq`g-YP^5u!@3bGF(Tk@5)Pr-~RlpYK>XHMT7ri1@M1x6nml%0m)M~g%tCt;mGTiCUY^M#oiw0KR!GAkwZ)?c(F~wn&I~DSiJryo$(W2t0Ti zI_z|7%fYiEM|$wqu1iQTf@$g=Gj|?`u+NfIDb2?G+#J$AZuP@Q^$Yrlvu7DBtnP%s zIRGcatzVLVD zcUzM^(+$-a*BHXbrj|>Eg}Im<7o}=F3#Q*p+4smeI2W$(UkrIdOxD?$RdV3K= z!Pxj)XX0Nt3qtB1%11Vsina|Ld@61|A{3OO2}B3N|D8h}zsZG02EQ2sM)Jg(5$&?n zH5BaY5P-#6`}hwTKjT|AzyO7TMRYvzH}^^_ehCN&7Yc7B!FPQGGo<&}C-4%oIsIYk z+)u#qi_l^@BJ516Cg*tLpue2AjWn}Wh1NBOvuz(hz3wY;2R~>k=^aBo#Mh2-b+jy! zpfw0k86XU6JJm>F3A`a#Aqy)jL_-%ciVQF$A@bJU(=&Su!)#OsLQK=<4|PGM=>Pug z8(tqA3IPBcD`=xvQt&}tLt`3(9~dKoSpV$*)c~n8SG=zwGt$nhnffDQAF$E?X0kog zF0B&-$nb!O@Pc$@9LE?A$=+#wRRhC%qsTER2>-TUPSnI0Stv6X|MEhYVI6AruNBhx z-xF;vAD(iY|7`5m{YjFO9ofWp=a-Jlk~}2DNUhrwSo%AX6qw>Il6L0s)177Y7uN3f zk|XaG6KT8xh796AsjLcjUoBkP+S)qC^+Ul(6PC{3>(!zS4hjO$_{KP7A%K94@#Y@t zUkyNW8LUbS(4HV+- z;#%nk%sRYG4D{7y8`PJenv15G-wiPVBX1PjUk;nBF+Lj*(&2IMU3d(Qc6_W^;z`Me z8l|T`RkMs?gPZBkyQFROgDOLD7M!iik=Sp$pXLB77IBS0Frn{m3X-#|B4FhS5bD~* zOTc;b^6I1FQH>t!MzYPRg0My}wB$J!0buE`p;;0D-OmUaSy9J@Gr+ zG`dChQL%)22+Fcu)bT7@x8}EXRwI^KzHk>>jFquv0IPao845)tRPj{5yG)+NcMV|S zMA+iJhw@**z`jdry8dL!&uzFF+z~>V-;r6NC0p`DSGch@5ql-+CA2n``-E5dVMP&`pDm9QjXtKH_rPM)ue*-2i*`xN3zRyB4s^sOz21#$vdJJ%)Z0$dW-OZkzUOx5sW?*4J9c0Pa>Ry2 zM zt$$B)yIjxde(;?-I3B_PVOEE~Wb)!Rs%ILUbmAYLM-FMu55FjgzW}eg9?WNwN8XSd z<#!x*9U}uF73yE3lgpyF#@(qv_gKWx_+cG`oQtWspBpBJ=S~=Dbi$FtfQ>vbkMz4@ z#&^NaBq+X4OyEl$mgp`)Gzx?sS#}rYyns9n2dg$9?m{yt?2#UWfNA2)^}rm$1f6}lEA+pp zeBg{diEh?)F?#T`TImaxB3)j}CthAs(3hs*)a(OH17MA&8G=Uc3ldCXr^*Nx*9VMLLaCbiR17|!Z zJiAH=;U0qmP%fqsFEMn7GT`;*QzP~WkNlc*O~MJFXV-VE2*KoCn8>Rcqw>t=i!_|wN?#009WRY4?~H%?NRj>ONPfSreERSdwE?ISs^bm}z_mWq z_M||h*eccrq;NjLT0C_i^aW59`@PxW*l}<&W}(&lumoHjJbJRf8a2wBm79)H$=t}% z+Yo8BF~MMwp%j;>yo_5o;k@K>qpLCcnpDM4KO=wJ zx}P^%Txh$HVtD673oY^O%NElxzm`tSYlTdADD~F+y6i~NHGA?QWp20ORKuqe+u=Qp zwE}ABjegR@QVyl4?aJzL5s8jk*rnpF9Sn=JWU}C$?@ZgliB6pS!%L|RKq=zF-VGT=3N6sJ>=&QOaK4u$(#hWQ{9bYywmf{~ z;twAwH6pj@+tEB<^ZMH~6C%?g-_Y5&SP*>LsD5t~Js(W<19zG1)^ex=8~UjuTeA)0 zL%tmaP3H+UM7T!$p!5g7CciS8E|?&5H!Vl}LTQ05P(yZV+$Tf4!(L4hSGw+z5SiGX z{W<-=qMxXOO<47zr$A5-gI}4A^7-q51e#_@zu0xXG#Nja{QWx-RGJbAkJdqcg0FQk zl{sfLDgwdQUq3_o9m074ioj{-zC-5<9AH(08~Iz(-6tUD1NJza0%2BQv7 zXb@=DgiGjXKzN{H1w%-3aou}0JQkch1!yn4JaK*x#pI;SuHJImpBLwS=C>+QX`476(F@@+d0BfS& z5Ls&nqgcIT8Z3s`L_wqpL?Hpv?E_l#N}Jntr+r@Na1pTjObEQsJE$As(5({bQ-MgT4W&N}kZBJdHUir!-3#)r%NskvhLhcNs=pJWl`rV(p1iLZs2|PRSScj+ z&($!pnE603zH{`&_t$f|Z-}x8%6f)F*Vm!YakRklCU+cdUdO9o2HBhOKaYrVR*p&yk z!H8b`n}(k#j&Ws}fl=%(`Y2dn4Jf754dVS#-d$q}UwlYDbLP6gyMkf_Su?F85 z=9K>8{&*=T33X>jU6z6Wy}lq%IDuaTC;XY zA*+Zy5Ju$Z!(-3MF#QWDu*o2|kLdBBS*vrcIg*5(eH2$t^zf2-9gpo7QJxsHYAqPO zOPwRT(NV~pSG&V$Xx+@}m+ySpYCIqMQ(g(iIUj#={lJ<-GKjfuJ=WC?h48_1ILtr- zW>hd1aPM3G{DGF!pux~TAyeINGu7OoKo8bf60%F1DF;%2tmcXkw>4$i<)5tsjThzo zmrei2uL=nQK*I?Oe7Gkt=v~ux_I!0RC&{O=Z(`Pq{p6u2IxI-nxxkE zAcYK3IO~y^aU{P0nHM0B@V69SJelgc`M#qXmD-mIbJEE{+ zZs2UWrbYJfICyeQHQX77RuinBkNbB34k}G*J@&o~$7}`A{h~X6>@1h2DIn)0u?rXY zJC*2sL4ODY?M|zcYDmA4PO#d`l+(1YhP?XM{@P(8`9x^kkKGycr=u)k#x+>3jSfAc zv|o?F>tgB##RmwvU!axE3^qR?#1LLC;36Rcd>I9SO!>)_Y`en|eLJ{e)ftB2ftW&O zg6hXv!BIv>X>LPEIh;ZK*JpM$`1bIjat2iDbOOo80F4Fu1J$l>!I|K_jIJZ!e1P`XXg z?w2_yQ#K_qzwQx7!c(}yVOq7=8G@=z4Q~w% zr|T*fO>}4kzY&-pMjT*A)mxok5%{QCc6joGh1ZmwjjcUJt}9@QpVTZ=_KX%O$Gx$s zTkriIRL3PQ3##b#qZq4~Cp|GpxUnI;d+_mscn9J(AtBrTp~`}AYj6#Lsa^lM&|@yc z&}FxJ`8I^CU5-i-GhhFC_(w(I#Mc)!*t%uvSF|t~3DC@MNp{x~|Qs zINjHIgvSp1t>MhfxWPKr%%3$g=!#7b+$S@-#$Fw@oAhg z-xK8bk$)gc5;9GIqxEsrz{6yd=offX$~Gc7;nyp!a}rSUadQwt!$sRRkvHJC5=*=ihMrtS zFuRCiSQj4BiT@&`a94ku8#*N3zJEO(m>RP+hCwUKZW22$=k6<=N`&3h{AEBhy{~C?ZI|!+Xtj~1J8IN!9LXEin))+i<#TH92UBX-?@W=f+o)7 z(ppHahD1Sai|iq*LU;;}CvPGpsn5bCE&@R)cYVZ+NCirDtSgjsl@+nV=(nR)ZQ}$m z3SML`r=|kI!leyZrv&7^-q3vHs@2X*Wmo;S4)r&Uq}P3}%VQ=m%J3j*<1os(J?VYH zr|_@DAC)?}hP~aGzzN8mpTl&j&}r!TjE^FuIzC$+^?dSVw_0MOWH};WN&!0+67lLH0BTJ^yK+?3irr0tHD->oxNAe=A+YXqAy6s9F(bw!}>xU`Jc^8wKuQe?nf|O zyLN|wqKgRMkMu*C0zRhy=8lKU?h{d$$|nSGBf3b)t_BFtat< zn9r=opM`PE0dypD_vr7di+=}WPysSw>iOsNv`D+zs1h(o3M^mHRZ(~ z2NH%SWV>TOy=%5??g!eBUOJ# zte$%90xIP44f#+qvK>3?T$*e0joUM9i?}|J`?R?>YSeh7=OV>e(Np#@gT&AX(p6#ka(C zn*7W)^^Gu%S_TG(ZMb<<2U)F8+-AqGNmmNa+WomadvLg`_BpszOaEr|Bb(J{&J#Z3 zPU%|ssG_1Ru`pS=rD?^OM*P8^59ouv;oW?#x>cnqYJ#OF&zU4@&p%e9ua}KrvVnws zI)o^(K&?#dkZohL`N6y9a0zvBgR|rLEt>_}-2-aQ?(7%*{1325<%5EENsb5z#)k1! zP9z!0lJCUZy^E!J^o32%GBB^ABwMRmL9`?{D}RfMa_sP4!~3K4f#xY{A{oys=Od|~ z!eUZZcKBl1=-%Et2~=k0VQ2iK`rdhNHdL{tYB7U~cTK@9<@^L3b51F)F5m4C3nEEMWG*OovkMr8meQe;PoaD*3$dD zX9aTW8>RNCCn=Y@-`Q#Opv!OFdNAmrv%yf9Mmdi~$0y3W(j>PNNy)6?&#yC0jCCg&|~ zswM-o^_2gU3YilR}o6Mi6-kZs`TT<1PI*jOF7WYW9#5_%U4&O2StXgw( zTQ-yJ9O%dq%8AY(F-F$QjACPGJw5+d44<oe_p*(uJq?SLS6+C~K>J>3w5yMbV(RE`Ojg1elNaekmb95&zIe6zy!!Dy-~Ts| z)ka`nR@gA!>;y-MYj@homb-Z@o z+ZnstkkNI#N;RUP%?t->btCa`Rne-PzWveap{DN9QVV)~+1SRiVCo`^{|u}Nn47!& z?CJ}~rUcAy+hWTZuYLc}(wFVq%%JAg@w+#?ME(ntuzd=RDil0uQ)K8=rNxs;w8VT2 zBAsvS$jK#>=2`o*WU9~O^j&Y#+MHJ%$7HJPtAJ9-PJASp=g4SBv5dI?`TXJ*c95%< z&$msoyPP7@SJwOF=&5Y}>$%?=`isWyJwiP_p=f!T0M&1wFQ;lRM_g-*?gy)>X_wDi z_4MnSu(AKX!srQldD{C}Iz&j&>AP38x%n4X?j@~G_#`zq3-jp3vZX?u{OikyyN89N z*Q9-*bi=r*scpKq=4{OUYt2P{rfU7E%bL#&leY3&u|;>IuN2)#;Iq5D^M9KA>aeQ1 zuiJyINT;Nq0MUl&*!QJ(fMnrlVXSS_}-PEC6 z)O&T^-Zk<^1EgUkrSr=VvX2SULdacw0xRHo!engU9BEm#xwhWm>PWJgi^p&aN%P7N z@s?`SJ_M9@SxZ&Er_Q1xTR5Bk{yI_e2T|kmQ#itebmcI>ekQ7%p$c{BBcT(G{jxOa z)5AG9;#~S%ahi16`s!%L2$kbwr|5%29I8v9Yy~F<)J*cy#QinCfN;BeCDkDb#eJC= z4gMEfTE2mo2eb5N+->9Y0ZE&r3%M^a2tIM$5NGhwEbG#U zQ6cyOlN5Z{0Xjymk9i}sdB5WYD{Nn^)*NkZR!UCu%}L8u%t=jaCddpC*XX|s+mDY| z+hw4J!tN>w?Xf@qF|w9fu&_LM;Mj=GIXQxUTc^?MYidRfM6wkm^Vjbm2|VT;Uf={@uh zX@1%Dk3o4`qNRDlmoxcnUXrRa(6(^37jMHkf?Ed0WgY_sYxgJ1`3Qq3BmLds90=>I5e1neFIWEhb$7}9z3RjzZ=i(y(c8pE+l^ zw~Ww7x})5#Aw2vp6FsS6OsxxSEJLy3w$#Twr+jpQj&Jao9ignUz0^d-O%v$*m9A}N zJf}LAh;{moQe0n70c-(~O$*SV#A`Ns{jvPt_L1@IscA~dHrcv4neF!@zE!ur zuqCrpPKk(=ZHdfV&9u$T?kkaYoVYyI^LGrkern;9gPs(r`?2#YN(u^XcBloX*;;ci z2#DV)X=i4#dIsCtu2r^d9}XC{lxsN%uD|cfy~9toH%o4z`o#UyImw!d_wLd3Sn+n% z#Un~`?KnZnFhm%eD4!6Qb^4d2VTsMQt-Mgaw#0Lh{pa`3{h6FRLdX zHX(4!8cMo#W}=v7+g2@R!>stfi;OqOWRFiI{MjWcT+zv(0-kmana<6_D_zPS%b-Xn z`jvX;@cL)XUNS!AfO#KSe+n8S6O(T%@_M6JJ7btTPWQY|l73;b-x>DC-KROLuqRNP z(=L@4d?>G+{;gH-X|k-rHzatt%SwHakpTy1)pB?n7P%)ENiX@CNW-N$N1HP%&AQSY zS*^1B>zO}UQs9c}Px#BF+iY_Cd~_ZvQq4J>=vPgn)V;Bp|Js}!kIx_tb}eRf?MC%2 zm4ay{$p;+NCA_*6U+$Q_`m0~H$` z6&Wd4Rk#6AcA`2y-2Xx)+m@4WBu{kzqh8$=22S#1`FKRqMO4vUwrThfs!`_5(@Y$&|BjUCO$ zcW`{N9C!L$0UO?vgzs8JZY7V6ix>YnkXqe-N6tI|J3@?!BQ+?HuPL zg;x#V)%c!i$a+T+|BL(aH#Xv`gBu$8Vhh-dZTxHscmym8>NmwZJIBm9eyCl-IGj_E zb6+|3S5kV~1u0en8qTrx=nF>(0?%W$Me!FR$Q0f8m72s z*%xUqAgrj-{2YFS8-34}Xi(f4fj}eJ+*$mAM%w2)TVD9gJ>ahq`niE7_E(gepS}(~ z67#CpZ~j(f6W)}Qdq&j7+>OT5{@zLZ8@$Gd(mI<;WK)iY=3?&Q^!QAL&k@-fkwvj) z3G>jE9I-pHp9)Xo?)zl^;Ke{l2Qk|;#a|>E&f91jPE8eN@kSn8%07G9cy-5tA(ws3 z9yxZ*m`5LV6dnoOcr1Ss>`JPWawEgmYWj~*50BdS$^;?=?k#-p@F@H*JhR68R^B{B zM&DDNN!&voQjur+KwwH#zkh-IBA34WxsI#m3A zaJ%Q#N0HUxXVLN8KGM`Bq_&OsU=xa4;e0k!U5#v45Iww6K~C#L3qca0q5Nj7$B1N% z_;9Y-TYSsKhm&3Flizl6-->eB#~ek4(&O**p9?)BZf&8!ZQV*Qm|tsMZL-&aFOc8K zKhD%GM+(>nP0UF)o?zdywOJXfr@#N`VeR_E#VQt=TfXTI7>G&lF@H|HV5|-Jr^xQ( z_TSfLENvY1;!y!VJ(7#BBnG(tX!LOrle!xlbENye=%eHO7S%p3ZCu@%juM3x%zdN9 zLToN0u5TAWk!<={hk%%Wome*Tl!R~jSxC~K^-anNX|FhO7^sNeV_d}TyL)PUvZIB& zJ&i+-wd=-S;U+eJJcb53x5k%Icb{nn=!Td4-yTHFs+u&Fc5mqN7dyz%+F#hvpXABWpPwlKh=p!Hqk6Ha`WNbyq2FvoNiEy zuTO@11M$Yh^l=*BI4(Q)99@pV)mjfav-FyLw-g@3&f;hL7TygwalRcNO5k+F)pXuI zt~bs@Dj3D$faq&!+nZ3C$(2bVmp3s~H^mokWAU4=s$HbWI!w)2C^I;!-_OCyJ8Fq} zv-U>Zt>AgadSBdo^MAP;dgVGCy6*>S+c33#lro`u9D_rKAq z^z3=d7a@zhx&=qUAe~q=7C_9w1o`#^DLgzL4qKJ&evwjAY&T%NB?|X*!LzBckx6p9 zOE)&`g!uF$)Z27)UmK^@#dlXI4QqUmF(*+PH|uLl5d;hf=RJ9~Vr1R=<$7m#jQqvF z_u6Y?gUK;Wzs{}p5sVII*T(uwj`fjsyxn!CEAP`d!%ZcK^US|4*WsG|AmC)lH%iqu zkkvCJ53N@@gjlt_3Ffd903GmXtWi1hc-#BC(Id!%*Iar!Q`-xjvipj15M<#$ooSdo ziwv$Ip736BSQ0JYM&Wa# ztZscXsn~C5ptt-l`PH#Z|6bEP-ciy-;cCq^Milos+5M7~gdK5J_es)BcyZb8Hv#I- zNn^uU3A2GaD@F=T`iq28Y1eR(GwjgOs(+|)}hd$u=c@iLKVrxsr_%gjzX`v^(u+O zVD}m?Q8bS<$E9wmE_rJ?Yjy-WJxb*?!iN=>BuhB#W zZHF0uHo^-RKf+>jGD@^R9{8@WX)rG5E6Z8UIymk| z?ux-d85n-S;|=7he>eaqgd2QF1!N!$j{~tt#Yty9W6sjOw!#|M;tV zkp|`Hor!D19_G(5Ljbn16n$F~_{sT&J;v12F%0oV{zUJ$iyA!{TJ!_oRCZ=aj%fhAY>Fze)#j=?}dg>y?izU@$3IwgEGqZ(<$R%gvi8Z;2^>M z7;hino`Hdu*2ZI~vLjgAPO}hQR)=1g+K@;_45@N)+`jhCRdJzXfo*chX3HTYax*V} zUJmgX0_jm0D%2GziKLY7Ze&|PQF%=+UD7LX`%qq$Up43|R}tc?V-VY4XqvNg?NZrh;dWLg=~s3G^h?y6ypgKJlF~GZvs7(;D7Mjv*WFEZ zomoB6?7|dQwr=rBNo|Tgn`+8Pst3_Z5#+2zc?pX~>X}XMBeUA}C5JQHQfBy5cbPrk z9*<2M9H$Hnq#T<>(J)px?tkQ|QtN$_w}2Ncf)YQET+e~bI;9I&maJFZH5^ic?_{>m z&F@lhzf1F{v|IR-GY~HrRzm&>iDgtT@nAK#u;Ab@!zDwnY_Hscl!j z3P$~y9~o5Sq`1@T&dNT+aY+Af%Xs5lmb$t-NNN4~8m*gv-oMcGG&OMWorxch{kA@3 zp9IGa4@G-;uwP;mAv|squG@kGH`iqMHt=4RBs0im)Dll|FclVfN+l?+y<}Is;3E1b zWNlHVFi+sR1e9VeqMDlbw`(GoA4cI1hWQW~8L66u3`naV{ip+RNFnSRNz+IEImRl2 z^sA-8S#o$#aIZG;7q%!~e#?{9)}?$ELCW{`=csWSWM1?`2T~|G@~lRaJ+0qQidE+G zeaCw6=@1;3$KD|Q?y}hp0Hcw!2E^|&Pz}8gfG!;sP{y;yP-mz*`Fe_I+qrNMZg2sn6M zFu{#QiEoa~XpSq#5>wi~$5y6FKA)PSV{UVSN!qdl>(|iRDqva_g*nmT)BH;ZHkaD zBNLPI>Y*dAj`~VFgUb8|hGi^t-Rnl~eYjNDQOkm#^(~MmrcHb~!D|UR&0F zSUC%C>!ca36PCZL)qL(*R4|i+KWDm2qBf`3-s~UF;YxOYcG>_4SdDmyMNd|6;YMD; zC$DfiSh2c>9Vl4b^{Pp;uIS};S;6eDpN}njfAgb|ZlnyS@~sg^v3i^#WsC@Z8g?#X|SjTa0we*7kE zJO!8?Vkr#Y;CEzGm{r9M&^R~?{wplg{y)VRy(ZvFGEXLNMK#>l8FYRkH>7PYf^BT; zq6E|u_;W)zvY98UA)|g=*Q8BSOp2oR3KrK<3}C*LPt*#^4ypOhtf4hd@Fs#(*p&so z5QLLQ!<4>iWA~x}JFBa_o`0yNu0L%!!Skx*KOY3B8-SWaVo!7|j5ZbUP(AgPT~Jm| z#V06-+@cpx)^nV{rv1|uL%g@5qo?ovzd~Wgn=EzB@?Suw=quK?o^$X)>ypZ~=ZG3N zYvXW1=Xlp^K?-|=897x4>8?y5)$DYDDhBiuVIc6mMyG683>?HhjeMYa!aGr$q^VtH za~;M|x;b0%MaVv{@2#QU>910oB1#~|+Q(@ZAvL8a_b{37S4S^svAq!~ebJmD#pIlU+L}HPDdY<6! z*PMrAQf-uK{P4;S^-T>{j>X7)-H{yyDe_~>A#k%MjE=20P)_0RQbp=!FiTk%g;KPx z-5rhavXx7jsTloAvDq#^zO+0=ZnfXSfEJovD_k>HaaNL!_+FPrJ-tG0AG$i@2nknV z?1#inDi4d-dooN0CC+WsP~tS>*tXW3cyRLB6Km#Z*M?-6qoWxn=GTaZkACtSS<0Y* z!35$a9IiXubB1drQ3ynV#4)j`T-}UlZr0XCM2$|+?nJ;kJ>Rn8lis-@!a2#Wu?{YO z89KMUh|roDg2`9ka{g&ihgMHNE-9`j$?1Yy37Kyb*}b^NrLvZ#>d=sA@nK~QULg2_ zi`#@$6d%G;2GvS_pH{S|WZJv17z3HpIR0Jm<~VOZ@`a&TYz;TM-9~kv)7h)|uSX8! zr^%sO(-1-t4f0#UTdNifpK@23Qg|x)6!S(qG?Gh@rmN9eKJ;tK<1UghuN8FmuFN+a z)KW?ci!BBIy+-MXncR5lN5P0AY~k&qQJ>}O_;c?FlRmD7+GNV31>SB+>QIkPHg zYs#^goKuN?bsi;%PGRM(I@+V+a6y)XvNzl&Y2PuKQFO}&a#InaAR|Kw?5@s!>40a^ z&82!Yks)B!jHwGP=|Kbw1h}JhW)R4Uc+7i2IcJ3g9=fj_e{pC+gXnqSe)X-PW*isj zeS%d#8I?ZI6&GUo(jDqaqQxDOfMgCT{z`Jt+*F4GX{Km!49LUX87M6588q|9KoD(9 zZoD{Ivj)ixDu1I#@SUErl-rdv;UuDOhiyX63JaKM$6Kk^v;9dYqHhjDgJkkI^O`swAc1xkFvE}d}X!xs0TZ+FGE_!R(;fMyBiBWw%#kN$7v>&U7tY>-^Z!?;imMX zh3yn`to0PL_8YQ3F`o)K60B&$_9XbGiWe7&$*8an)O4-=L{Ncbcu zl%m1QzqWKZ`AxsNy%RBt#U9ZoUs^4@x6OV0?(ti;^JPXKM%xhGg#Dj9A#@uBe!x1~ zyoENCP|}C;<_#cL5eTS_GaPt!7_4V^JWSgHs0_HF)=;BjJ#uGpiENrP6FwOCl3Vae zH99w(f)oa!EDtr@kVVGc^G2pdl{TPn1^Af`k`#=ae<0I=_N!r={7B%nXh0J$!`QGw_u#os19ixZSDtZgy%u_c&Hw_*7=MAsUAZm_p{V<7Ue zvqYrLsn8OMFyiAxJe}1B>hiSe@?#fCRuDP4xA*<27zj^*KFA0JqQ94_#T38&l&dPe z4HQ0FYDs~CgN`Sh?Qn1c2%ouS>tGUiDJ-ewTY^H4!@2te$`Ubs^#>qkFhx%1U3F9` z+H=@#u0{hgT(x|La+EKZ;KDG_(nG`9G&;H! z5&}^JzE!da3C|l+NaKqL5UK`;ou@qYmHGx-Hy^zl9|qIxancMaB+&(6Ca&Q+!!p9? z4;aN1O3LJssppoYlN78K+7AIyekZdnsLnkehWgW&@_msAH&BIrT#w2Wp}q!~L$3N~ z!G=^l4QS$4-;@Wm&0J9btB06LOH3eK4Ix4i%m)^k2v=m|CoD3r%gvVPPto=jtDCM+ zy+j&36q({ccb^^`jHj=4V$&FBQQKsQE<1oY$eTU|X^MjhjI^+h*cp#G^?fu^T~Nf8 zZL3_b4bm_=wIw4ZJnK!S#`sJ0J-leZ>U+;UI1W~VE3%Cg%DZcInj&%(G-a&!Tf9F0L% zlOy^NXtcHBGpS7V+h$Xg4}yYpOe#|Sy}biC>R<9=|9noqYp>c$;v-#>VUqdtq$5iA z_CSJ=aDO1a&bfo_`k%JV{^9>)+spw1duvHJiU9HIz-;$0RqRFahP^WjT|=d(ei10N zRyLrtfa@l88Kyu_!8}25(wP4f$ zeKH#2z;K^ipEVJ{wD|)GK6`%WMaoxLA~kf&dL%dPVcnDtL4~r83L19fLb5I*(6kqD zV@C7=EIt}YAb<9zJOXxomYDPI4~CcoYxLT{4F+U>OQi;mmD)^`OIC9m2HSnTE)!Uj zMY(1NlJ+SQ1VIjYXR1?_<*sB=-aw(K+AHSnz6hrZ+MeOV8_tJo8xEB*ge_GW>_Ka= zSz!&j%Ms+g)j(E9G#F^wy%MdeR&VzXF!8KgfE&2*bVh+*sIAwOu-*Kn6h)})b5?4R z3wZ`09&fZK{bZmvxUF_GN1VI3q8}H}3Hz+935jWY%-mtVq&MGpXHA7EBmbMe3Os|g z5*rBouV{GqFm`j17%_R`yrMpQlQW`J-$k82?ts-=S4y4o>2EgL($L_hcjxsQ4;-PP zfx)*ePzUN5*8xV!Cx5{2kSmfA_CEX7BVU1fjCrF39eyU z^%C6K$qByKIfF_1Ev^T2HB1)iweQc8nY#+ok4~C0{TMs*-2ab95c*hCb8#IUP;`y} zWP=;om;MD#Y`9wbn*-~bIDp2E`(fUZm4Em@F^BO(xV93@-xgV%@CX_=>QZhQykup( ztK_1KmcAAg>{UkA`UzNhW3*ML*(@Vs)0Ag$>G~z1_yl6`Rx&n!27(f-4@y>f!DoQD z$!<~(#Z0l`q~($LEWRMv)8EONW61}TZ0{S^Nesq_m>Q>vzW!x%cPP|1Nuc{CQ5zIJ z)9#mGFW2pK;S_2BH;TC2ng?Wv$E|O0X`R8~qaCUiPgFM1f`uArIkSTht+zQLC{wgU z^lb{3oem7jotUA|@T;MUwbv1DSkF>!#c&L+Qv1KFU?3U*GBm2_9ndbcZh&gly^4AB z+WmTH0htP4-Nxx_$VOI6+E3L)73F0x$LE8)Vjitq)Qzk1D$K~(rw&L}lm0hwsI!QQFzOW6^G5eD5^T>!V>zCS@H2UyBqM&QVgVG)1_&>70# z16Q>l?cA(b!*w=*iG3^i#m;4@ibMOL)X7&u>|v1uY4?ZcR49yWj9=Ali+9Im_Rv05STRRef0B zBC{Uq+nY+8>k}SyoVllZz!}#|a>i@RlDk3Naz1K{^*vBV>vE{`rCg7i6~*5&xX(LA zKRV^Ur(5O;<<|=)H*AR98ahbDAyt78Gxac}&9&z=!h{zOaT>nY&^W&N!$msqjzd27 zlnkgnWZ9&4w{c>i*5~HDr!&i-Fqio^)DbmhGDf%rp~#fAV}+52>#uJv3zPolJ}mO> zPaHOS+CClim6mbp&u>e8VF{v;I>4Y@?!z8|A8lok%EWS!|84xIJf6)IeQ*x3wa`)G0u1{$l7`i zmTByp*UPVy-0Pi0g~$NP)W-0Rf7;6PD@wj=Q0uUrf(>dM&1AyyPCbv7(1P5+;;9&L zCDl`PucH=)yrp{Gvo-kX`YS6Dx348eQ-=coEy3zFg|9f)Z@_g3rx3u*QolFR(#wN3 z1sj)q^{=iPosk6v#VZf_YiKKKEIuP((|Dki^;m@h(R8dF}nMSD@ds@x_LE9 zOrbd2iUIux*XvUB;bqx2q`Iz$dG@Of;)C+LcCY91PM-kif%C=bFk*nNfu7_e@V;gz zDN8e}HDkB{bUzhh0_}4#HvW}>jtC_3)aDd9nq)y@%*tuJE?Mw<15^i%s*fICU{}y$ z@^<+R);5}>fK);EEpUe&Ot^$tRbGTu?n;hMAFKOpj+)d?vZDp8aZ_vZyO+ECitRC) zMfPEPv5ECj}u6_=RU5T#E+S zsqAd_qvRcgp1H*XK8s=s#vd>0&pNdVGwRD7WLcl9&C@B+1J~@nRWy~t1?0GktQnNc zJ@3lZ)O{IqGxjo-{=C6qrZs42VlXua3Rm>l<5_h@6d#Sy)R2`pSWq%&wsn4O1HLxr z#8lpJ-hX1YZhs<4J^%Y;$owGF6jTmyP-fOvF2YT3CFIXQTn+x`oEvjlROb zUJm$h@u>Jqsb~uOCIBXdz}FZ06~+yJ+DP?3BPZdJIcLf@N-7jG+GKFSnEu?k;CtQ27{TH2JA#8tnsIK@c0=Xw!w zhjY%b->3Qq7{joy3MM9FWx!%aAs}%=N&Nr z?RKD|M}T}0hK{A A6951J literal 34016 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 OWKzXihH%QemG3zqHC96hv&j(t4Ok>a8jgTlDW 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 From 7c30f648e5aaaeec558b117c5d5209d65238d8ea Mon Sep 17 00:00:00 2001 From: u0169319 Date: Wed, 11 Mar 2026 20:47:26 +0100 Subject: [PATCH 34/86] docs: update PVTCollector model documentation --- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 2dc8518b00..b9ee174ac8 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors; model PVTCollector - "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" + "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated thermal-electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); @@ -158,7 +158,7 @@ equation Documentation(info="

    -This component models a photovoltaic–thermal (PVT) collector by coupling the ISO 9806 quasi-dynamic thermal method with an internal electrical model. The model uses only datasheet parameters (no measured calibration data) and has been validated experimentally for unglazed PVT collectors (with and without rear insulation) under a wide range of weather conditions. +This component models a photovoltaic–thermal (PVT) collector by coupling the ISO 9806:2017 quasi-dynamic thermal method with an internal electrical model. The model uses only datasheet parameters (no measured calibration data) and has been validated experimentally for unglazed PVT collectors (with and without rear insulation) under a wide range of weather conditions.

    The main equations used in this model can be found in the following submodels, as described in the From a11c2d929d1dac1a36a22bdb6d9d7709e6b726f7 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Wed, 11 Mar 2026 21:14:47 +0100 Subject: [PATCH 35/86] docs: update Data package --- .../Data/Covered/CI_Jonas2018.mo | 10 ++++++- .../Data/Covered/CN_Jonas2018.mo | 10 ++++++- IDEAS/Fluid/PVTCollectors/Data/Generic.mo | 9 ++++-- .../Data/Uncovered/UI_Validation.mo | 29 ++++++++++++++----- .../Data/Uncovered/UN_Jonas2018.mo | 10 ++++++- .../Data/Uncovered/UN_Validation.mo | 25 +++++++++------- IDEAS/Fluid/PVTCollectors/Data/package.mo | 12 +++++++- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 5 ++++ IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 11 ++----- 9 files changed, 88 insertions(+), 33 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index d406d626da..565b0e2f95 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -31,7 +31,10 @@ annotation(

    This record contains thermal and electrical parameters for a covered and insulated PVT collector, based on experimental identification results from Jonas et al. (2018). -These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 quasi-dynamic conditions. +These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted +to the ISO 9806:2017 quasi‑dynamic formulation used by +IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel +file located at IDEAS.Resources.Data.Fluid.PVTCollectors.

    This record can be used as a generic representation of a covered, insulated PVT collector. @@ -52,6 +55,11 @@ EuroSun 2018. DOI: 10.18086/eurosun2018.02.16 revisions="

    • +March 11, 2026, by Lone Meertens:
      +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
    • +
    • July 7, 2025, by Lone Meertens:
      First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index c1b3e520c9..7080dc7ac2 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -31,7 +31,10 @@ annotation(

      This record contains thermal and electrical parameters for a covered PVT collector without rear insulation, based on experimental identification results from Jonas et al. (2018). -These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 quasi-dynamic conditions. +These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted +to the ISO 9806:2017 quasi‑dynamic formulation used by +IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel +file located at IDEAS.Resources.Data.Fluid.PVTCollectors.

      This record can be used as a generic representation of a covered, non-insulated PVT collector. @@ -52,6 +55,11 @@ EuroSun 2018. DOI: 10.18086/eurosun2018.02.16 revisions="

      • +March 11, 2026, by Lone Meertens:
        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
      • +
      • July 7, 2025, by Lone Meertens:
        First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo index 35b4f406c0..a0f1b3c392 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -35,7 +35,7 @@ defaultComponentName="datPVTCol", Documentation(info="

        Record containing both thermal and electrical performance parameters for PVT -collectors. Thermal parameters, tested according to the ISO 9806:2013 +collectors. Thermal parameters, tested according to the ISO 9806:2017 quasi-dynamic procedure, apply to covered and uncovered designs, while electrical parameters and system loss factors follow from the manufacturer datasheets.

        @@ -47,13 +47,18 @@ IEA SHC (2018). Task 60. PVT Systems: Application of PVT Collectors and New Solu International Energy Agency Solar Heating and Cooling Programme.
      • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
      ", revisions="
      • +March 11, 2026, by Lone Meertens:
        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
      • +
      • July 7, 2025, by Lone Meertens:
        First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index 05dc9fc5d9..f6b5d4ece5 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -29,10 +29,15 @@ annotation( defaultComponentName = "datPVTCol", Documentation(info="

        -This record contains anonymized thermal and electrical performance parameters for -an uncovered photovoltaic–thermal (PVT) collector with rear insulation, -tested under ISO 9806:2013 quasi-dynamic conditions. -Thermal performance parameters correspond to operation of the PVT collector at maximum power point (MPP mode). +This record contains anonymized thermal and electrical performance parameters for +an uncovered photovoltaic–thermal (PVT) collector with rear insulation. +The collector was originally tested under ISO 9806:2013 conditions and subsequently +converted to the ISO 9806:2017 quasi‑dynamic formulation used by + +IDEAS.Fluid.PVTCollectors.PVTCollector, using the Excel conversion file located at +IDEAS.Resources.Data.Fluid.PVTCollectors. +Thermal performance parameters correspond to operation of the collector in maximum +power point (MPP) mode.

        This datasheet is used in the validation of @@ -43,22 +48,30 @@ which can be found in the

        References

      • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
      • IEA SHC Task 60 (2018). PVT Systems: Application of PVT Collectors and New Solutions in HVAC Systems. iea-shc.org/task60.
      • -Meertens, L.; Jansen, J.; Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters. -Submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
      ", revisions="
      • +March 11, 2026, by Lone Meertens:
        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
      • +
      • July 7, 2025, by Lone Meertens:
        First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index ae0fd703a9..c92e475043 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -31,7 +31,10 @@ annotation(

        This record contains thermal and electrical parameters for an uncovered and non-insulated PVT collector (WISC type), based on experimental identification results from Jonas et al. (2018). -These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 quasi-dynamic conditions. +These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted +to the ISO 9806:2017 quasi‑dynamic formulation used by +IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel +file located at IDEAS.Resources.Data.Fluid.PVTCollectors.

        This record can be used as a generic representation of a WISC-type collector. @@ -52,6 +55,11 @@ EuroSun 2018. DOI: 10.18086/eurosun2018.02.16 revisions="

        • +March 11, 2026, by Lone Meertens:
          +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
        • +
        • July 7, 2025, by Lone Meertens:
          First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index df6743ae35..e84d568c93 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -31,13 +31,8 @@ annotation(

          This record contains performance parameters for a flat‑plate, uncovered and uninsulated PVT collector, derived from manufacturer datasheets and thermal rating documentation. -Thermal parameters follow the ISO 9806:2013 quasi‑dynamic format and correspond to operation at the PV module’s maximum power point (MPP). -

          -

          -The thermal coefficients were originally obtained using the ISO 9806:2013 unglazed -steady-state method, and converted to quasi‑dynamic form according to the procedure detailed -in -SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017. +Thermal parameters follow the ISO 9806:2017 quasi‑dynamic format and correspond to operation at the PV module’s maximum power point (MPP). +They were originally provided under ISO 9806:2013 and converted to the ISO 9806:2017 formulation using the Excel file in IDEAS.Resources.Data.Fluid.PVTCollectors.

          For this PVT collector, additional real-life measurement data is publicly available (Veynandt, 2023) and has been used in the validation of @@ -70,18 +65,26 @@ Solar Keymark Network (2019). Thermal performance parameter conversion to the ISO 9806‑2017 quasi‑dynamic method. SKN‑N0474R0

        • -ISO 9806:2013. Solar thermal collectors — Test methods +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
        • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025 +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
        "), revisions="
        • +March 11, 2026, by Lone Meertens:
          +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
        • +
        • July 7, 2025, by Lone Meertens:
          First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Data/package.mo b/IDEAS/Fluid/PVTCollectors/Data/package.mo index 39550a1569..a420360590 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/package.mo @@ -7,7 +7,7 @@ annotation (Documentation(info = " This package contains both thermal and electrical performance data records for photovoltaic–thermal (PVT) collectors. All parameters are openly available from datasheets and certificates. Thermal performance data, structured according -to the ISO 9806:2013 quasi-dynamic test method, can be found in rating databases +to the ISO 9806:2017 quasi-dynamic test method, can be found in rating databases such as:
          • @@ -49,5 +49,15 @@ PVT collector types are categorized as follows: All record names should begin with one of the above abbreviations to indicate the collector classification.

            +

            +To ensure compatibility with all commercially tested PVT collectors, this package +also provides a standard‑to‑standard conversion tool that converts thermal +parameters from ISO 9806:2013 and ISO 9806:2025 into the +ISO 9806:2017 quasi-dynamic format used throughout IDEAS. +The conversion is implemented in an easy‑to‑use Excel file located at: +
            +IDEAS.Resources.Data.Fluid.PVTCollectors. +

            ")); + end Data; diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index b9ee174ac8..01181325fd 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -196,6 +196,11 @@ It is compatible with dynamic simulations where irradiance and fluid temperature revisions="
            • +March 11, 2026, by Lone Meertens:
              +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
            • +
            • July 7, 2025, by Lone Meertens:
              First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 6e30eadbaa..8816da5c25 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -45,13 +45,8 @@ unified conversion procedure is provided to translate datasheet parameters from these standards into their ISO 9806:2017 equivalents. This guarantees that the model can be used for all commercially tested PVT collectors. -

              -

              -The standard‑to‑standard conversion routines are implemented in: -
              -IDEAS.Resources.Data.Fluid.PVTCollectors -

              -

              +The standard‑to‑standard conversion routines are provided in the easy‑to‑use Excel file located at +IDEAS.Resources.Data.Fluid.PVTCollectors. The conversion procedure is based on (i) SKN‑N0474R0 for ISO 9806:2013 to ISO 9806:2017, and (ii) a newly introduced conversion for ISO 9806:2025 to ISO 9806:2017 as published in Meertens et al. (2026). @@ -132,7 +127,7 @@ Figure 1: Two-node, one-capacitance thermal network for PVT collectors (ISO 9806

              References

              ", revisions="
              • +March 11, 2026, by Lone Meertens:
                +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
              • +
              • July 7, 2025, by Lone Meertens:
                First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 2e55134d65..c85308a406 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -95,10 +95,10 @@ This example demonstrates the implementation of IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss, which calculates the quasi-dynamic heat loss of a PVT or solar thermal collector -according to the ISO 9806:2013 standard. +according to the ISO 9806:2017 standard.

                -In addition to showcasing the ISO 9806-based model, this example also compares its behavior +In addition to showcasing the ISO 9806:2017-based model, this example also compares its behavior to the steady-state heat loss model IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss, @@ -113,6 +113,11 @@ and long-wave irradiance. revisions="

                • +March 11, 2026, by Lone Meertens:
                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                • +
                • July 2, 2025, by Lone Meertens:
                  First implementation of ISO 9806 quasi-dynamic heat loss example. This is for 1436. diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo index f0e32c489b..3d7418f01c 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo @@ -49,57 +49,87 @@ defaultComponentName="heaLosStc", Documentation(info="

                  This component computes the quasi-dynamic heat loss from a solar thermal or PVT collector -to the environment, following the methodology described in the international standard ISO 9806:2013. +to the environment, following the methodology described in the international standard ISO 9806:2017. It extends the original IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss model for code reuse, but implements the more comprehensive quasi-dynamic formulation.

                  -The heat loss is calculated for each segment i ∈ {1, ..., nseg} as: +The thermal losses are calculated for each segment i ∈ {1, ..., nseg} as:

                  -

                  -Qlos,i = Ac / nseg · [ΔTi · -(c1 - c2 · ΔTi + c3 · u) - + c4 · (EL - σ · Tenv4) - c6 · u · G] + +

                  +Qlos,i = +Ac / nseg · [ +a1 · ΔTi ++ a2 · (ΔTi)2 ++ a3 · ur · ΔTi ++ a4 · (EL − σ · Ta4) ++ a6 · ur · G ++ a7 · ur · (EL − σ · Ta4) ++ a8 · (ΔTi)4 +]

                  where:

                  • -ΔTi = Tenv - Tflu,i: temperature difference between environment and fluid in segment i +ΔTi = Tm,i − Ta: +temperature difference between the mean fluid temperature in segment i and the ambient temperature +
                  • +
                  • +a1: +heat loss coefficient (W/m²·K) +
                  • +
                  • +a2: +temperature dependence of the heat loss coefficient (W/m²·K²)
                  • -c1: linear heat loss coefficient (alias for a1) +a3: +wind dependence of the heat loss coefficient (J/m³·K)
                  • -c2: quadratic heat loss coefficient (alias for a2) +a4: +sky long-wave irradiance dependence
                  • -c3: wind speed dependence of heat loss +a6: +wind dependence of thermal zero-loss efficiency (s/m)
                  • -c4: sky long-wave irradiance dependence +a7: +wind dependence of long-wave exchange (W/m²·K⁴)
                  • -c6: wind speed dependence of thermal zero-loss efficiency +a8: +higher-order radiation loss coefficient (W/m²·K⁴)
                  • -u: wind speed normal to the collector plane +ur: +wind speed normal to the collector plane
                  • -EL: long-wave irradiance from the sky +EL: +long-wave irradiance from the sky
                  • -G: global solar irradiance on the tilted collector plane +G: +global solar irradiance on the tilted collector plane
                  • -σ: Stefan–Boltzmann constant (5.67×10⁻⁸ W/m²·K⁴) +Ta: +ambient air temperature +
                  • +
                  • +σ: +Stefan–Boltzmann constant (5.67×10⁻⁸ W/m²·K⁴)

                  This model provides a more accurate representation of collector heat loss under dynamic environmental conditions, -as required by ISO 9806:2013. It is suitable for use in simulations where wind speed, sky radiation, and irradiance +as required by ISO 9806:2017. It is suitable for use in simulations where wind speed, sky radiation, and irradiance vary over time.

                  @@ -108,20 +138,24 @@ vary over time. The model inherits from IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss for structural consistency and reuse of base functionality, -but the naming and equations have been overwritten to reflect the ISO 9806 standard. Parameters a1 and a2 -are overwritten to c1 and c2 for clarity. +but the naming and equations have been overwritten to reflect the ISO 9806:2017 standard.

                  References

                • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
                • ", revisions="
                  • +March 11, 2026, by Lone Meertens:
                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                  • +
                  • July 7, 2025, by Lone Meertens:
                    First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo index 78b3dd7848..4eb738b6b0 100644 --- a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo +++ b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo @@ -95,6 +95,11 @@ IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record. revisions="
                    • +March 11, 2026, by Lone Meertens:
                      +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                    • +
                    • July 7, 2025, by Lone Meertens:
                      First implementation PVT model. This is for 1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index 9825ee4a82..3059aa4854 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -61,8 +61,13 @@ Cumulative sums showing how each additional term builds up to the total heat los revisions="
                      • +March 11, 2026, by Lone Meertens:
                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                      • +
                      • July 7, 2025, by Lone Meertens:
                        -First implementation PVT model. +First implementation PVT model. This is for #1436.
                      diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo index 0bad3e7361..cd66ce4766 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo @@ -79,6 +79,11 @@ and can be directly provided as an input to this block. revisions = "
                      • +March 11, 2026, by Lone Meertens:
                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                      • +
                      • July 7, 2025, by Lone Meertens:
                        First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index dbd119f135..67d90af109 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -98,14 +98,22 @@ Buck, A.L., New equations for computing vapor pressure and enhancement factor Journal of Applied Meteorology, 1981.
                      • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. -
                      • Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters
                        . Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards. +
                      ", revisions= - " -
                        + " +
                          +
                        • +March 11, 2026, by Lone Meertens:
                          +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                        • July 7, 2025, by Lone Meertens:
                          First implementation PVT model. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index 5b31d8495a..ee167b55ed 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -170,6 +170,11 @@ Dobos, A. P. (2014). revisions="
                          • +March 11, 2026, by Lone Meertens:
                            +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for
                            #1473. +
                          • +
                          • January 16, 2026, by Lone Meertens:
                            Adapted PV-oriented electrical model from the MoPED library for validation purposes only. This model is included to demonstrate the impact of using PV-based cell-temperature equations for PVT collectors. The adaptation and inclusion in the validation package are tracked in #1473.
                          • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 9d5b2ca9ac..61da3c769a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -28,36 +28,31 @@ annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTColVal", Documentation(info=" +

                            -This record contains anonymized thermal and electrical performance parameters for -an uncovered photovoltaic–thermal (PVT) collector with rear insulation, -tested under ISO 9806:2013 quasi-dynamic conditions. -Thermal performance parameters correspond to operation of the PVT collector at maximum power point (MPP mode). -

                            -

                            -This datasheet is used in the validation of -IDEAS.Fluid.PVTCollectors.PVTQuasiDynamicCollector, -which can be found in the -IDEAS.Fluid.PVTCollectors.Validation.PVT_UI package. +For comparison with the simplified steady-state thermal formulation, this validation +record is adapted to use the thermal coefficients a1 and +a2 reported under the EU Ecodesign Regulation CDR 812/2013, +which are provided directly in the collector datasheet.

                            -

                            References

                          • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. -
                          • -
                          • -IEA SHC Task 60 (2018). PVT Systems: Application of PVT Collectors and New Solutions in HVAC Systems. -iea-shc.org/task60. -
                          • -
                          • -Meertens, L.; Jansen, J.; Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters. -Submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                          ", revisions=" -
                            +
                              +
                            • +March 11, 2026, by Lone Meertens:
                              +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                            • July 7, 2025, by Lone Meertens:
                              First implementation PVT model. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 0069808e62..13ffd308ac 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -94,6 +94,11 @@ for details on the validation examples and usage. "
                              • +March 11, 2026, by Lone Meertens:
                                +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                              • +
                              • July 7, 2025, by Lone Meertens:
                                First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index 7aa6c217de..508c10c2dc 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -5,11 +5,11 @@ package Electrical "Electrical Behavior of Unglazed Rear-Insulated PVT Collector "

                                This subpackage contains four validation models for the electrical performance of the PVT_UI collector, -aligned with the same four ISO 9806:2013 day types used in the Thermal subpackage. +aligned with the same four ISO 9806:2017 day types used in the Thermal subpackage.

                                -Each model compares simulated and measured electrical output and computes the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2025). +Each model compares simulated and measured electrical output and computes the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2026).

                                @@ -25,12 +25,17 @@ The PV cell temperature is derived from the thermal model using a two-node coupl

                                -Validation results show excellent agreement across all day types, with normalized MAE and RMSE values below 3.1% (Meertens et al., 2025). The model is robust to variations in UAbsFluid, confirming the reliability of the datasheet-based estimation. +Validation results show excellent agreement across all day types, with normalized MAE and RMSE values below 4.2% (Meertens et al., 2026). The model is robust to variations in UAbsFluid, confirming the reliability of the datasheet-based estimation.

                                References

                                • -Meertens, L., Jansen, J., Helsen, L. (2025). Development and Experimental Validation of an Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters, submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                • Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 @@ -40,6 +45,11 @@ Dobos, A. P. (2014). revisions=" ", revisions="
                                  • +March 11, 2026, by Lone Meertens:
                                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                  • +
                                  • July 7, 2025, by Lone Meertens:
                                    First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index a8aecb1e2e..cbe91349d0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -135,6 +135,11 @@ for details on the validation examples and usage. "
                                    • +March 11, 2026, by Lone Meertens:
                                      +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                    • +
                                    • July 7, 2025, by Lone Meertens:
                                      First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index b2a73186f3..fac55d0349 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -6,7 +6,7 @@ package Thermal "Thermal Behavior of Unglazed Rear-Insulated PVT Collector"

                                      This subpackage contains four validation models for the thermal performance of the PVT_UI collector, -an uncovered PVT collector with rear insulation. The models correspond to the four ISO 9806:2013 day types: +an uncovered PVT collector with rear insulation. The models correspond to the four ISO 9806:2017 day types:

                                      • @@ -29,16 +29,25 @@ The following loss mechanisms are included:

                                        • -Linear and quadratic heat loss (c1, c2) +Linear and quadratic heat loss (a1, a2)
                                        • -Convective heat loss (wind-dependent, c3, c6) +Wind‑dependent convective heat loss (a3)
                                        • -Radiative heat loss (sky temperature dependent, c4) +Sky‑temperature‑dependent radiative loss (a4)
                                        • -Thermal inertia effects (c5) +Effective thermal capacity (a5) +
                                        • +
                                        • +Wind dependence of the zero‑loss efficiency (a6) +
                                        • +
                                        • +Wind dependence of long‑wave radiative exchange (a7) +
                                        • +
                                        • +Higher‑order temperature‑dependent radiation losses (a8)

                                        @@ -51,23 +60,31 @@ Validation results show strong agreement for day types 1–3, with thermal energ For day type 4, larger deviations (ΔE = 36.7 %) are observed due to high temperature differences and wind speeds, highlighting limitations in the datasheet-based coefficients under extreme conditions. As the absolute thermal output is low in this case, model limitations have a stronger effect, -leading to disproportionately large relative deviations (Meertens et al., 2025). +leading to disproportionately large relative deviations (Meertens et al., 2026).

                                        References

                                        • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                        • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
                                        ", revisions="
                                        • +March 11, 2026, by Lone Meertens:
                                          +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                        • +
                                        • July 7, 2025, by Lone Meertens:
                                          First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index 240fd6527c..d8c3327e45 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -4,12 +4,12 @@ package PVT_UI "

                                          This package contains validation models for the PVT_UI collector -(referred to as PVT1 in Meertens et al., 2025), +(referred to as PVT1 in Meertens et al., 2026), an uncovered PVT collector with rear insulation, based on experimental data from HTW Saar (Jonas et al., 2019).

                                          -The validation is structured according to the ISO 9806:2013 standard and includes four representative day types: +The validation is structured according to the ISO 9806:2017 standard and includes four representative day types:

                                          • @@ -35,25 +35,34 @@ Contains four models corresponding to the four day types. Each model compares th

                                            • -Linear and quadratic heat loss (c1, c2) +Linear and quadratic heat loss (a1, a2)
                                            • -Convective heat loss (wind-dependent, c3, c6) +Wind‑dependent convective heat loss (a3)
                                            • -Radiative heat loss (sky temperature dependent, c4) +Sky‑temperature‑dependent radiative loss (a4)
                                            • -Thermal inertia effects (c5) +Effective thermal capacity (a5) +
                                            • +
                                            • +Wind dependence of the zero‑loss efficiency (a6) +
                                            • +
                                            • +Wind dependence of long‑wave radiative exchange (a7) +
                                            • +
                                            • +Higher‑order temperature‑dependent radiation losses (a8)

                                            -The thermal model is based on the quasi-dynamic ISO 9806 formulation and uses only datasheet parameters. The model is discretized into nSeg segments to capture temperature gradients along the flow path. +The thermal model is based on the quasi-dynamic ISO 9806:2017 formulation and uses only datasheet parameters. The model is discretized into nSeg segments to capture temperature gradients along the flow path.

                                            Subpackage: Electrical

                                            -Also includes four models for the same day types. These models validate the electrical output by comparing simulated and measured power, and compute the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2025). +Also includes four models for the same day types. These models validate the electrical output by comparing simulated and measured power, and compute the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2026).

                                            The electrical model uses the PVWatts V5 formulation and includes temperature-dependent efficiency losses. The PV cell temperature is derived from the thermal model using a two-node coupling heat transfer coefficient UAbsFluid. @@ -76,9 +85,12 @@ potentially leading to additional discrepancies between the modeled and measured

                                            References

                                            • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                            • Jonas, D., Theis, D., Frey, G. (2019). @@ -90,6 +102,11 @@ Solar Energy 193, pp. 51–64. revisions="
                                              • +March 11, 2026, by Lone Meertens:
                                                +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                              • +
                                              • July 7, 2025, by Lone Meertens:
                                                First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index 3c3f166635..13a3bd448e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -158,8 +158,14 @@ Dobos, A. P. (2014). revisions=" ")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 08acd65163..ef3d000930 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -29,15 +29,10 @@ annotation( defaultComponentName = "datPVTColVal", Documentation(info="

                                                -This record contains performance parameters for a flat‑plate, uncovered and uninsulated PVT collector, -derived from manufacturer datasheets and thermal rating documentation. -Thermal parameters follow the ISO 9806:2013 quasi‑dynamic format and correspond to operation at the PV module’s maximum power point (MPP). -

                                                -

                                                -The thermal coefficients were originally obtained using the ISO 9806:2013 unglazed -steady-state method, and converted to quasi‑dynamic form according to the procedure detailed -in -SKN-N0474R0: Thermal Performance Parameter Conversion to ISO 9806-2017. +For comparison with the simplified steady-state thermal formulation, this validation +record is adapted to use the thermal coefficients a1 and +a2 reported under the EU Ecodesign Regulation CDR 812/2013, +which are provided directly in the collector datasheet.

                                                For this PVT collector, additional real-life measurement data is publicly available (Veynandt, 2023) and has been used in the validation of @@ -70,17 +65,22 @@ Solar Keymark Network (2019). Thermal performance parameter conversion to the ISO 9806‑2017 quasi‑dynamic method. SKN‑N0474R0

                                              • -ISO 9806:2013. Solar thermal collectors — Test methods -
                                              • -
                                              • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025 +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                              "), revisions=" -
                                                +
                                                  +
                                                • +March 11, 2026, by Lone Meertens:
                                                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                • July 7, 2025, by Lone Meertens:
                                                  First implementation PVT model. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 0c0c5e85cd..d6432b9aba 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -136,8 +136,8 @@ equation defaultComponentName="pvtCol", Documentation(info="

                                                  -Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling. -Discretizes the collector into segments, computes heat loss and gain per ISO 9806, +Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling. +Discretizes the collector into segments, computes heat loss and gain per ISO 9806:2017, and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters.

                                                  @@ -184,18 +184,26 @@ It is compatible with dynamic simulations in which irradiance, ambient and fluid Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641
                                                • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. +ISO 9806:2017. Solar thermal collectors — Test methods. ISO.
                                                • -Meertens, L., Jansen, J., Helsen, L. (2025). -Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, -submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                                ", revisions="
                                                • +March 11, 2026, by Lone Meertens:
                                                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                • +
                                                • July 7, 2025, by Lone Meertens:
                                                  First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index b7cfe493d9..cd03a12f96 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -110,7 +110,7 @@ ensuring accurate representation of the thermal-electrical interaction.

                                                  Despite the presence of extreme weather conditions, including wind speeds up to 10–12 m/s and continuous pump operation, the electrical model remains robust. Validation shows excellent agreement with measurements, -with a normalized MAE of 5.2 % and nRMSE of 9.9 % (Meertens et al., 2025). +with a normalized MAE of 5.3 % and nRMSE of 10.1 % (Meertens et al., 2026).

                                                  The model's accuracy confirms the reliability of the datasheet-based estimation method for UAbsFluid, @@ -120,6 +120,11 @@ even under challenging real-world conditions. revisions="

                                                  • +March 11, 2026, by Lone Meertens:
                                                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                  • +
                                                  • September 3, 2025, by Jelger Jansen:
                                                    Introduce week parameter to change the weather dataset. This is for #1462. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index a358481c21..a328afece7 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -126,20 +126,29 @@ This model validates the thermal performance of the an uncovered and uninsulated PVT collector, using a long-term dataset from a test bench in Austria (Veynandt et al., 2023).

                                                    -The model uses the quasi-dynamic ISO 9806 formulation and includes: +The model uses the quasi-dynamic ISO 9806:2017 formulation and includes:

                                                    • -Linear and quadratic heat losses (c1, c2) +Linear and quadratic heat loss (a1, a2)
                                                    • -Wind-dependent convective losses (c3, c6) +Wind‑dependent convective heat loss (a3)
                                                    • -Radiative losses based on sky temperature (c4) +Sky‑temperature‑dependent radiative loss (a4)
                                                    • -Thermal inertia (c5) +Effective thermal capacity (a5) +
                                                    • +
                                                    • +Wind dependence of the zero‑loss efficiency (a6) +
                                                    • +
                                                    • +Wind dependence of long‑wave radiative exchange (a7) +
                                                    • +
                                                    • +Higher‑order temperature‑dependent radiation losses (a8)

                                                    @@ -148,15 +157,31 @@ which significantly increase convective losses. Additionally, the circulation pump remains active throughout the test period, even when thermal output is negative—unlike real-world systems, which would deactivate the pump under such conditions.

                                                    +

                                                    -As a result, the raw energy deviation of +53.1 % is not a meaningful indicator of model performance. -When filtered to periods with positive simulated thermal output, the deviation improves to +6.85 % (Meertens et al., 2025). -This filtered metric better reflects the model's accuracy under realistic operating conditions. +Moreover, the experimental setup forces the collector to operate at unusually high +temperature differences between the HTF and the ambient air. This operating regime is +not representative of practical unglazed PVT use, where collectors typically run at +much lower temperatures due to their inherently high thermal losses.

                                                    + +

                                                    +As a result, the raw energy deviation of +54.9% is not a meaningful indicator of +model performance. When filtered to periods with positive simulated thermal output, +the deviation improves to +8.09% (Meertens et al., 2026). This filtered metric +provides a more realistic assessment of the model's accuracy under these high operating +temperatueres. +

                                                    + ", revisions="
                                                    • +March 11, 2026, by Lone Meertens:
                                                      +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                    • +
                                                    • September 3, 2025, by Jelger Jansen:
                                                      Introduce week parameter to change the weather dataset. This is for #1462. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo index a6f44ae6f6..eb730404ab 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo @@ -4,7 +4,7 @@ package PVT_UN "

                                                      This package contains validation models for the PVT_UN collector -(referred to as PVT2 in Meertens et al., 2025), +(referred to as PVT2 in Meertens et al., 2026), an uncovered and uninsulated PVT collector, based on experimental data from a long-term outdoor test campaign in Austria (Veynandt et al., 2023).

                                                      @@ -26,7 +26,7 @@ The package includes two models:
                                                      • Thermal: -Validates thermal output using the quasi-dynamic ISO 9806 formulation. +Validates thermal output using the quasi-dynamic ISO 9806:2017 formulation.
                                                      • Electrical: @@ -35,22 +35,37 @@ Validates electrical output using the PVWatts V5 formulation.

                                                      Due to the absence of rear insulation and the continuous operation of the circulation pump, -also during periods of negative thermal output, the raw energy deviation of +53.1 % +also during periods of negative thermal output, the raw energy deviation of +54.9 % is not representative of real-world operation. In practice, the pump would only be activated when thermal gains exceed losses. When filtered to periods with positive thermal output, -the deviation improves to +6.85%. This filtered metric provides a more meaningful assessment of the model performance. +the deviation improves to +8.09%. This filtered metric provides a more meaningful assessment of the model performance.

                                                      -The electrical model shows excellent agreement with measurements, with a normalized MAE of 5.2% and nRMSE of 9.9%. +Due to the absence of rear insulation, the continuous operation of the circulation +pump—even during periods of negative thermal output—and the exceptionally high +HTF–ambient temperature differences imposed by the experimental setup +(an operating regime not representative for unglazed PVT collectors, which +normally run at much lower temperatures), the raw energy deviation of +54.9% is +not representative of real-world operation. In practice, the pump would only be +activated when thermal gains exceed losses. When filtered to periods with +positive thermal output, the deviation improves to +8.09%. This filtered metric +therefore provides a more meaningful assessment of the model performance under +such extreme conditions. +

                                                      +

                                                      +The electrical model shows excellent agreement with measurements, with a nMAE of 5.3% and nRMSE of 10.1%. The model is robust to variations in UAbsFluid, confirming the reliability of the datasheet-based estimation method.

                                                      References

                                                      +", +revisions=" + ")); end PVT_UN; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/package.mo index 24cb0cc03f..4c74a42bab 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/package.mo @@ -20,7 +20,7 @@ The validation examples use experimental data from two types of unglazed PVT col These are implemented in the subpackages PVT_UI and PVT_UN, respectively. The naming convention used in this implementation (PVT_UI and PVT_UN) corresponds to the datasets referred to as respectively PVT1 and PVT2 -in Meertens et al. (2025), where they are described in detail. +in Meertens et al. (2026), where they are described in detail.

                                                      @@ -33,13 +33,23 @@ with measured results.

                                                      References

                                                      • -Meertens, L., Jansen, J., Helsen, L. (2025). “Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters”, submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Unglazed +Photovoltaic‑Thermal Collector Modelica Model that only needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
                                                      ", revisions="
                                                      • +March 11, 2026, by Lone Meertens:
                                                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                      • +
                                                      • July 7, 2025, by Lone Meertens:
                                                        First implementation PVT model; tracked in From c08aa29a3519e9f6928ffa63139a4d5126ec3938 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 12 Mar 2026 11:35:38 +0100 Subject: [PATCH 37/86] feat: add excel format conversion template in corresponding Resources folder --- .../ISO9806_conversion_template.xlsx | Bin 0 -> 21359 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 IDEAS/Resources/Data/Fluid/PVTCollectors/ISO9806_conversion_template.xlsx diff --git a/IDEAS/Resources/Data/Fluid/PVTCollectors/ISO9806_conversion_template.xlsx b/IDEAS/Resources/Data/Fluid/PVTCollectors/ISO9806_conversion_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a90aee690fe6be0a015caab24754c53d3cd4d801 GIT binary patch literal 21359 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 literal 0 HcmV?d00001 From 6a327a1b0a112aa9b4f4b3ad318c2a2b8d76cc77 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 12 Mar 2026 11:45:08 +0100 Subject: [PATCH 38/86] docs: update reference paper title --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 2 +- .../PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo | 2 +- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 2 +- .../Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo | 2 +- .../PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo | 2 +- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 2 +- .../PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/package.mo | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 3c5551f251..3b4236d4bc 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -192,7 +192,7 @@ Dobos, A. P. (2014).
                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index f6b5d4ece5..649c0b46d1 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -56,7 +56,7 @@ IEA SHC Task 60 (2018). PVT Systems: Application of PVT Collectors and New So
                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index e84d568c93..6baedad321 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -69,7 +69,7 @@ ISO 9806:2017. Solar therma
                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 8816da5c25..2d8cc0143f 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -150,7 +150,7 @@ Dobos, A. P. (2014).
                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index 67d90af109..44e2924a94 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -99,7 +99,7 @@ Journal of Applied Meteorology, 1981.
                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 61da3c769a..ad004c4489 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -38,7 +38,7 @@ which are provided directly in the collector datasheet.

                                                        References

                                                      • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index 508c10c2dc..eb29234ef0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -31,7 +31,7 @@ Validation results show excellent agreement across all day types, with normalize
                                                        • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index b005339241..7a50a4c828 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -238,7 +238,7 @@ ISO 9806:2017. Solar therma
                                                        • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index fac55d0349..ad5ee08fb5 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -66,7 +66,7 @@ leading to disproportionately large relative deviations (Meertens et al., 2026).
                                                          • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index d8c3327e45..66615b6e1d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -86,7 +86,7 @@ potentially leading to additional discrepancies between the modeled and measured
                                                            • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index ef3d000930..659c96d85a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -66,7 +66,7 @@ Thermal performance parameter conversion to the ISO 9806‑2017 quasi‑dynamic
                                                            • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index d6432b9aba..ddfb625e35 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -188,7 +188,7 @@ ISO 9806:2017. Solar therma
                                                            • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Unglazed +Development and Experimental Validation of an Open-Source Unglazed Photovoltaic‑Thermal Collector Modelica Model that only needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo index eb730404ab..546b82d350 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo @@ -61,7 +61,7 @@ The model is robust to variations in UAbsFluid, confirmi

                                                              Implementation Notes

                                                              +

                                                              This validation model exclusively relies on measurement data provided by the CombiTimeTable meaDat. However, because it extends +IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector +and to limit the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 remains instantiated +and connected to the inherited weaBus. The reader is retained only to satisfy the parent class connector and is not used +during simulation: all weather inputs (irradiance, ambient temperature, wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                              +

                                                              This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index cd03a12f96..aed19f7606 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -68,6 +68,11 @@ model PVT_UN_Electrical Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - 273.15) "[°C]" annotation (Placement(transformation(extent={{-53,-82},{-27,-66}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource( + "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Weather data input file" + annotation (Placement(transformation(extent={{-38,16},{-18,36}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-6},{-76.5,-6}}, @@ -83,6 +88,10 @@ equation connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,24},{-60, 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, color={0,0,127})); + connect(weaDat.weaBus, PvtCol.weaBus) annotation (Line( + points={{-18,26},{-14,26},{-14,-2},{-8,-2}}, + color={255,204,51}, + thickness=0.5)); annotation (Documentation(info = "

                                                              This model validates the electrical performance of the diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index a328afece7..e00354647e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -97,6 +97,11 @@ model PVT_UN_Thermal "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); Modelica.Blocks.Sources.RealExpression a8_term(y=PvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource( + "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Weather data input file" + annotation (Placement(transformation(extent={{-40,24},{-20,44}}))); equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); @@ -119,6 +124,14 @@ equation 0,127})); connect(meaDat.y[2], TFluKel1.Celsius) annotation (Line(points={{-71,34},{-60, 34},{-60,16},{-92,16},{-92,-28},{-88,-28}}, color={0,0,127})); + connect(PvtCol.weaBus, weaDat.weaBus) annotation (Line( + points={{-8,8},{-14,8},{-14,34},{-20,34}}, + color={255,204,51}, + thickness=0.5)); + connect(PvtColVal.weaBus, weaDat.weaBus) annotation (Line( + points={{-8,-24},{-14,-24},{-14,34},{-20,34}}, + color={255,204,51}, + thickness=0.5)); annotation ( Documentation(info = "

                                                              This model validates the thermal performance of the From 4589aecf81a84a0922714e55e7ae847dcf43cf27 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 19 Mar 2026 15:00:01 +0100 Subject: [PATCH 40/86] refactor: update UAbsFluid formulation, assuming electrical power independent of ambient temperature --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 4 +--- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 3b4236d4bc..96353c58dc 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -5,10 +5,8 @@ model ElectricalPVT extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialParameters; // Parameters - parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; - parameter Real gamma "Temperature coefficient [1/K]"; parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; parameter Modelica.Units.SI.Area A "PV area"; parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; @@ -17,7 +15,7 @@ model ElectricalPVT parameter Modelica.Units.SI.Efficiency etaEl "Electrical efficiency"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid = - ((tauAlpEff - etaEl) * (a1 + abs(gamma)*HGloHorNom)) / ((tauAlpEff - etaEl) - eta0) + ((tauAlpEff - etaEl) * a1) / ((tauAlpEff - etaEl) - eta0) "Heat transfer coefficient between the fluid and the PV cells, calculated from datasheet parameters"; // Inputs diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 01181325fd..db881e4fad 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -13,9 +13,8 @@ model PVTCollector parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff(min=0, max=1) = (if collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84) "Effective transmittance–absorptance product"; - parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid( - min=0) = ((tauAlpEff - per.etaEl) * (per.a1 + abs(per.gamma)*HGloHorNom)) / + min=0) = ((tauAlpEff - per.etaEl) * (per.a1)) / ((tauAlpEff - per.etaEl) - per.eta0) "Internal heat transfer coefficient between the fluid and PV cells; computed from datasheet parameters by default." annotation(Dialog(tab="Advanced", group="Electrical parameters")); From b4de0f29004102f759f7f0702fdd2c3facd0e22c Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 19 Mar 2026 15:07:42 +0100 Subject: [PATCH 41/86] fix: redo parameter removed --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 96353c58dc..dd0b5dfa88 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -5,8 +5,10 @@ model ElectricalPVT extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialParameters; // Parameters + parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; + parameter Real gamma "Temperature coefficient [1/K]"; parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; parameter Modelica.Units.SI.Area A "PV area"; parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; From f2de8687f3dbe266bf44edd2a56a14180a45c9c0 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 09:20:37 +0100 Subject: [PATCH 42/86] docs: update revision --- .../PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index c85308a406..79db72b0c4 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -114,8 +114,8 @@ revisions="

                                                              • March 11, 2026, by Lone Meertens:
                                                                -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                              • July 2, 2025, by Lone Meertens:
                                                                From c07afa570aa8df634d920a5dbf523c7379aeb915 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 09:27:07 +0100 Subject: [PATCH 43/86] refactor: change gamma to beta to be consitent with paper --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 8 ++++---- IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Generic.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 2 +- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 7 +------ .../Validation/PVT_UI/BaseClasses/ElectricalPV.mo | 4 ++-- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 2 +- .../PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo | 2 +- .../Validation/PVT_UI/PVTCollectorValidation.mo | 2 +- .../Validation/PVT_UN/BaseClasses/ElectricalPV.mo | 4 ++-- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 2 +- .../Validation/PVT_UN/PVTCollectorValidation.mo | 2 +- .../PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo | 2 +- 17 files changed, 22 insertions(+), 27 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index dd0b5dfa88..ee24727495 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -8,7 +8,7 @@ model ElectricalPVT parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; - parameter Real gamma "Temperature coefficient [1/K]"; + parameter Real beta "Temperature coefficient [1/K]"; parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; parameter Modelica.Units.SI.Area A "PV area"; parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; @@ -61,7 +61,7 @@ equation TCel[i] = Tflu[i] +Qth[i] / UAbsFluid; TDif[i] = TCel[i] - TpvtRef; Pel_int[i] = (A_c/nSeg) * (P_nominal/A) * (HGloTil/HGloHorNom) * - (1 + gamma * TDif[i]) * (1 - eleLosFac); + (1 + beta * TDif[i]) * (1 - eleLosFac); end for; Pel = sum(Pel_int); @@ -82,7 +82,7 @@ The model calculates the electrical output for each segment i ∈ {1, ..., n<

                                                                Pel,i = (Ac / nseg) · (Pnom / A) -· (Gtilt / Gnom) · (1 + γ · ΔTi) · (1 - eleLosFac) +· (Gtilt / Gnom) · (1 + β · ΔTi) · (1 - eleLosFac)

                                                                where: @@ -106,7 +106,7 @@ where: Gnom: nominal irradiance (typically 1000 W/m²)

                                                              • -γ: temperature coefficient of power [%/K] +β: temperature coefficient of power [%/K]
                                                              • eleLosFac: lumped system loss factor diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index 565b0e2f95..3f864262d8 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -21,7 +21,7 @@ record CI_Jonas2018 = final a7=0.0, final a8=0.0, final P_nominal=280, - final gamma=-0.00370, + final beta=-0.00370, final etaEl=0.1390) "Parameter set for a covered, insulated PVT collector based on Jonas et al. (2018)" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index 7080dc7ac2..5e4a6620be 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -21,7 +21,7 @@ record CN_Jonas2018 = final a7=0.0, final a8=0.0, final P_nominal=280, - final gamma=-0.00370, + final beta=-0.00370, final etaEl=0.1406) "Parameter set for a covered, non-insulated PVT collector based on Jonas et al. (2018)" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo index a0f1b3c392..90205ed23b 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -24,7 +24,7 @@ record Generic "Generic data record for PVT collector models" "Radiation losses"; parameter Real P_nominal(final min=0, final unit="W") "PV panel power at nominal conditions"; - parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma + parameter Modelica.Units.SI.LinearTemperatureCoefficient beta "Temperature coefficient of the PV panel(s)"; parameter Modelica.Units.SI.Efficiency etaEl(final min=0, final max=1) "Module efficiency of the photovoltaic installation"; diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index 649c0b46d1..9f68acc932 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -21,7 +21,7 @@ record UI_Validation = final a7=0.0, final a8=0.0, final P_nominal=280, - final gamma=-0.0041, + final beta=-0.0041, final etaEl=0.1687) "Parameters for an uncovered flat-plate PVT collector with rear cover and back-side thermal insulation" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index c92e475043..7f64d2d25d 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -21,7 +21,7 @@ record UN_Jonas2018 = final a7=0.0, final a8=0.0, final P_nominal=280, - final gamma=-0.00467, + final beta=-0.00467, final etaEl=0.1688) "Parameter set for a uncovered, non-insulated PVT collector (WISC type) based on Jonas et al. (2018)" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 6baedad321..916b7e70a0 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -21,7 +21,7 @@ record UN_Validation = final a7=0.067*0.535*0.85, final a8=0.0, final P_nominal=300, - final gamma=-0.00375, + final beta=-0.00375, final etaEl=0.183) "Parameters for an uncovered flat-plate PVT collector without rear cover or back-side insulation" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index db881e4fad..f18354854b 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -63,7 +63,7 @@ model PVTCollector final nSeg = nSeg, final A_c = ATot_internal, final eleLosFac = eleLosFac, - final gamma = per.gamma, + final beta = per.beta, final P_nominal = per.P_nominal, final A = per.A, final eta0 = per.eta0, diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 2d8cc0143f..7c99b5480d 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -85,7 +85,7 @@ the approximate formula is: @@ -101,11 +101,6 @@ Here, (τ·α)eff = 0.901 for unglazed PVT collect and 0.84 for covered collectors.
                                                              • -The electrical temperature‑dependence term is b1,el = |γ| · Gnom, -where γ is the temperature coefficient of power (in % K−1) -and Gnom = 1000 W m−2. -
                                                              • -
                                                              • ur is the in-plane reduced wind speed. In this approximation, ur = 0 is used to derive UAbsFluid. The internal heat transfer coefficient is only weakly dependent on external wind speed when the datasheet thermal parameters are accurate (Stegmann 2011). diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index ee167b55ed..c4e075bd05 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -6,7 +6,7 @@ model ElectricalPV annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -35,7 +35,7 @@ model ElectricalPV Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, -10},{-120,10}}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-eleLosFac)) + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, {69,-30}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index ad004c4489..90083d7363 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -21,7 +21,7 @@ record UI_Validation = final a7=0.0, final a8=0.0, final P_nominal=280, - final gamma=-0.0041, + final beta=-0.0041, final etaEl=0.1687) "Parameters for an uncovered flat-plate PVT collector with rear cover and back-side thermal insulation" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 17033062fb..d20e5494c5 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -52,7 +52,7 @@ model PVT_UI_Electrical_DayType1 annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.ElectricalPV ElectricalPV( P_STC=datPVTCol.P_nominal, - gamma=datPVTCol.gamma, + beta=datPVTCol.beta, eleLosFac=eleLosFac, n=1, module_efficiency=datPVTCol.etaEl, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index ce8c610845..73fbe89aab 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -64,7 +64,7 @@ model PVTCollectorValidation final nSeg = nSeg, final A_c = ATot_internal, final eleLosFac = eleLosFac, - final gamma = per.gamma, + final beta = per.beta, final P_nominal = per.P_nominal, final A = per.A, final eta0 = per.eta0, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index 13a3bd448e..81791f9219 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -6,7 +6,7 @@ model ElectricalPV annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -29,7 +29,7 @@ model ElectricalPV Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, -10},{-120,10}}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+gamma*T_diff)*(1-eleLosFac)) + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, {69,-30}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 659c96d85a..8782229942 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -21,7 +21,7 @@ record UN_Validation = final a7=0.0, final a8=0.0, final P_nominal=300, - final gamma=-0.00375, + final beta=-0.00375, final etaEl=0.183) "Parameters for an uncovered flat-plate PVT collector without rear cover or back-side insulation" annotation( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 5b698f00b2..1cb1bb167a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -63,7 +63,7 @@ model PVTCollectorValidation final nSeg = nSeg, final A_c = ATot_internal, final eleLosFac = eleLosFac, - final gamma = per.gamma, + final beta = per.beta, final P_nominal = per.P_nominal, final A = per.A, final eta0 = per.eta0, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index aed19f7606..5f459e410e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -54,7 +54,7 @@ model PVT_UN_Electrical .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV ElectricalPV( P_STC=datPVTCol.P_nominal, - gamma=datPVTCol.gamma, + beta=datPVTCol.beta, eleLosFac=eleLosFac, n=1, module_efficiency=datPVTCol.etaEl, From afdd4ba5e2a5433769c8b40c07858358d3dfd802 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 09:34:28 +0100 Subject: [PATCH 44/86] docs: update title journal paper in references --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 4 ++-- .../PVTCollectors/Data/Uncovered/UI_Validation.mo | 4 ++-- .../PVTCollectors/Data/Uncovered/UN_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 10 +++++++--- .../Validation/BaseClasses/LongWaveRadiation.mo | 4 ++-- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 4 ++-- .../Validation/PVT_UI/Electrical/package.mo | 4 ++-- .../Validation/PVT_UI/PVTCollectorValidation.mo | 4 ++-- .../PVTCollectors/Validation/PVT_UI/Thermal/package.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo | 4 ++-- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 4 ++-- .../Validation/PVT_UN/PVTCollectorValidation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo | 4 ++-- 13 files changed, 31 insertions(+), 27 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index ee24727495..507f69f74b 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -192,8 +192,8 @@ Dobos, A. P. (2014).
                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index 9f68acc932..dabb636151 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -56,8 +56,8 @@ IEA SHC Task 60 (2018). PVT Systems: Application of PVT Collectors and New So
                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index 916b7e70a0..d5e9749e74 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -69,8 +69,8 @@ ISO 9806:2017. Solar therma
                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 7c99b5480d..c419dc0631 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -145,13 +145,17 @@ Dobos, A. P. (2014).
                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards.
                                                              • - +
                                                              • +Meertens, L., Jansen, J., Helsen, L. (2025). +Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, +submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. +
                                                              • ")); end UsersGuide; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index 44e2924a94..1db81d8e90 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -99,8 +99,8 @@ Journal of Applied Meteorology, 1981.
                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 90083d7363..55f456a044 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -38,8 +38,8 @@ which are provided directly in the collector datasheet.

                                                                References

                                                              • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index eb29234ef0..1bedf8459c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -31,8 +31,8 @@ Validation results show excellent agreement across all day types, with normalize
                                                                • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 73fbe89aab..8427fa6db3 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -239,8 +239,8 @@ ISO 9806:2017. Solar therma
                                                                • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index ad5ee08fb5..3f54510b90 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -66,8 +66,8 @@ leading to disproportionately large relative deviations (Meertens et al., 2026).
                                                                  • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index 66615b6e1d..ac1b9387f5 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -86,8 +86,8 @@ potentially leading to additional discrepancies between the modeled and measured
                                                                    • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 8782229942..b267d1d32d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -66,8 +66,8 @@ Thermal performance parameter conversion to the ISO 9806‑2017 quasi‑dynamic
                                                                    • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 1cb1bb167a..d855b2113c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -191,8 +191,8 @@ ISO 9806:2017. Solar therma
                                                                    • Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source Unglazed -Photovoltaic‑Thermal Collector Modelica Model that only needs +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo index 546b82d350..12f1411ec0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo @@ -61,8 +61,8 @@ The model is robust to variations in UAbsFluid, confirmi

                                                                      -This model provides a more accurate representation of collector heat loss under dynamic environmental conditions, -as required by ISO 9806:2017. It is suitable for use in simulations where wind speed, sky radiation, and irradiance -vary over time. +This model captures additional wind- and long‑wave irradiance‑dependent heat‑loss +mechanisms defined in ISO 9806:2017, allowing the collector performance to +be represented more realistically under varying outdoor conditions than when using +only the EN 12975 a1 and a2 terms.

                                                                      Implementation Notes

                                                                      -The model inherits from +The heat-loss block inherits from -IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss for structural consistency and reuse of base functionality, -but the naming and equations have been overwritten to reflect the ISO 9806:2017 standard. +IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss to reuse its interface +and segment-wise structure. Only the heat‑loss equations and parameters are replaced +to match the ISO 9806:2017 +formulation.

                                                                      References

                                                                      From e7f4f77940be5d277ae474a284bc63bb9a58a657 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 10:42:49 +0100 Subject: [PATCH 47/86] docs: update docs --- IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo | 2 +- IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index 3f864262d8..cbb70ce9de 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -34,7 +34,7 @@ based on experimental identification results from Jonas et al. (2018). These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted to the ISO 9806:2017 quasi‑dynamic formulation used by IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel -file located at IDEAS.Resources.Data.Fluid.PVTCollectors. +file located in IDEAS/Resources/Data/Fluid/PVTCollectors.

                                                                      This record can be used as a generic representation of a covered, insulated PVT collector. diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index 5e4a6620be..892f40f2e2 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -34,7 +34,7 @@ based on experimental identification results from Jonas et al. (2018). These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted to the ISO 9806:2017 quasi‑dynamic formulation used by IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel -file located at IDEAS.Resources.Data.Fluid.PVTCollectors. +file located in IDEAS/Resources/Data/Fluid/PVTCollectors.

                                                                      This record can be used as a generic representation of a covered, non-insulated PVT collector. From be272d40322384250ee2411c44623ac318a4fa54 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 10:43:47 +0100 Subject: [PATCH 48/86] refactor: fix unit inconsistency --- IDEAS/Fluid/PVTCollectors/Data/Generic.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo index 90205ed23b..34d0682552 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -12,7 +12,7 @@ record Generic "Generic data record for PVT collector models" "First order thermal heat loss coefficient"; parameter Real a2(final min=0, final unit="W/(m2.K2)") "Second order thermal heat loss coefficient"; - parameter Modelica.Units.SI.SpecificHeatCapacity a3(final min=0) + parameter Real a3(final min=0, final unit="J/(m3.K)") "Wind speed dependence of thermal heat loss"; parameter Modelica.Units.SI.DimensionlessRatio a4(final min=0) "Sky temperature dependence of the thermal heat loss coefficient"; From c883f1b0546143329f0bf36a64dd0f13b9860df7 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:00:19 +0100 Subject: [PATCH 49/86] docs: update docs --- IDEAS/Fluid/PVTCollectors/Data/Generic.mo | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo index 34d0682552..119199c9d9 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -35,9 +35,17 @@ defaultComponentName="datPVTCol", Documentation(info="

                                                                      Record containing both thermal and electrical performance parameters for PVT -collectors. Thermal parameters, tested according to the ISO 9806:2017 -quasi-dynamic procedure, apply to covered and uncovered designs, while -electrical parameters and system loss factors follow from the manufacturer datasheets. +collectors. Thermal parameters follow the ISO 9806:2017 quasi‑dynamic +procedure and apply to both covered and uncovered designs. Note that the +ISO 9806 coefficient a5 is not included here because this +record extends from +IDEAS.Fluid.SolarCollectors.Data.BaseClasses.Generic , which defines heat‑capacity +handling at the collector level. As a result, a5 (thermal +capacitance) must be specified directly in the collector model as a +total heat capacity, typically by multiplying the specific capacitance by +the collector gross area (e.g., C = a5·Agross when using +CTyp = IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity). Electrical parameters follow manufacturer +datasheets.

                                                                      References

                                                                        From a3f3cde7c35c0fcfb7e73c27b7133145e7cca89f Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:03:32 +0100 Subject: [PATCH 50/86] refactor: remove obsolute whitespaces --- .../BaseClasses/ISO9806HeatLossValidation.mo | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index 3059aa4854..002e3202d3 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -5,7 +5,7 @@ model ISO9806HeatLossValidation extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss; // —— Diagnostic internal variables —— - Modelica.Units.SI.Power a1_a2_term "Contribution from a1–a2 (steady-state) term"; + Modelica.Units.SI.Power a1_a2_term "Contribution from a1_a2 term"; Modelica.Units.SI.Power a3_term "Contribution from wind-speed dependence (a3)"; Modelica.Units.SI.Power a4_term "Contribution from sky long-wave (a4)"; Modelica.Units.SI.Power a6_term "Contribution from wind–irradiance coupling (a6)"; @@ -14,30 +14,30 @@ model ISO9806HeatLossValidation Modelica.Units.SI.Irradiance EL_term "Sky long-wave irradiance difference (HHorIR – σ·TEnv⁴)"; // —— Cumulative sums —— - Modelica.Units.SI.Power pvt_st_st "Steady-state loss (a1–a2)"; - Modelica.Units.SI.Power pvt_a3 "Steady-state + a3"; - Modelica.Units.SI.Power pvt_a4 "Steady-state + a3 + a4"; - Modelica.Units.SI.Power pvt_a6 "Steady-state + a3 + a4 + a6"; - Modelica.Units.SI.Power pvt_a7 "Steady-state + a3 + a4 + a6 + a7"; - Modelica.Units.SI.Power pvt_a8 "Steady-state + a3 + a4 + a6 + a7 + a8"; + Modelica.Units.SI.Power pvt_st_st "a1_a2"; + Modelica.Units.SI.Power pvt_a3 "a1_a2 + a3"; + Modelica.Units.SI.Power pvt_a4 "a1_a2 + a3 + a4"; + Modelica.Units.SI.Power pvt_a6 "a1_a2 + a3 + a4 + a6"; + Modelica.Units.SI.Power pvt_a7 "a1_a2 + a3 + a4 + a6 + a7"; + Modelica.Units.SI.Power pvt_a8 "a1_a2 + a3 + a4 + a6 + a7 + a8"; equation // term-by-term breakdown - a1_a2_term = sum(A_c/nSeg * { dT[i]*(a1 - a2*dT[i]) for i in 1:nSeg}); - a3_term = sum(A_c/nSeg * { dT[i]*a3*(winSpePla-3) for i in 1:nSeg}); - a4_term = sum(A_c/nSeg * { a4*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); - a6_term = sum(A_c/nSeg * { -a6*(winSpePla-3)*HGloTil for i in 1:nSeg}); - a7_term = sum(A_c/nSeg * { -a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); - a8_term = sum(A_c/nSeg * { -a8*(dT[i])^4 for i in 1:nSeg}); - EL_term = HHorIR - Modelica.Constants.sigma*TEnv^4; + a1_a2_term = sum(A_c/nSeg * {dT[i]*(a1 - a2*dT[i]) for i in 1:nSeg}); + a3_term = sum(A_c/nSeg * {dT[i]*a3*(winSpePla-3) for i in 1:nSeg}); + a4_term = sum(A_c/nSeg * {a4*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); + a6_term = sum(A_c/nSeg * {-a6*(winSpePla-3)*HGloTil for i in 1:nSeg}); + a7_term = sum(A_c/nSeg * {-a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) for i in 1:nSeg}); + a8_term = sum(A_c/nSeg * {-a8*(dT[i])^4 for i in 1:nSeg}); + EL_term = HHorIR - Modelica.Constants.sigma*TEnv^4; // cumulative contributions pvt_st_st = a1_a2_term; - pvt_a3 = pvt_st_st + a3_term; - pvt_a4 = pvt_a3 + a4_term; - pvt_a6 = pvt_a4 + a6_term; - pvt_a7 = pvt_a6 + a7_term; - pvt_a8 = pvt_a7 + a8_term; + pvt_a3 = pvt_st_st + a3_term; + pvt_a4 = pvt_a3 + a4_term; + pvt_a6 = pvt_a4 + a6_term; + pvt_a7 = pvt_a6 + a7_term; + pvt_a8 = pvt_a7 + a8_term; annotation ( defaultComponentName="heaLosStcVal", From d98077022182f95bb04076d2154c558a06923732 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:08:39 +0100 Subject: [PATCH 51/86] docs: update revisions --- .../BaseClasses/ISO9806HeatLossValidation.mo | 2 +- .../Validation/PVT_UI/BaseClasses/ElectricalPV.mo | 11 ++++------- .../Validation/PVT_UN/BaseClasses/ElectricalPV.mo | 10 +++------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index 002e3202d3..c1033c44a6 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -44,7 +44,7 @@ equation Documentation(info="

                                                                        -Extends the standard quasi‑dynamic heat‑loss model +Extends from the standard quasi‑dynamic heat‑loss model ( IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss). For validation purposes, this block adds: diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index c4e075bd05..e54a288429 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -2,7 +2,7 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; model ElectricalPV "Model for a photovoltaic panels using PV-oriented cell-temperature equations" - parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" + parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at standard conditions (usualy 1000 W/m2)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -171,12 +171,9 @@ revisions="

                                                                        • March 11, 2026, by Lone Meertens:
                                                                          -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                        • -
                                                                        • -January 16, 2026, by Lone Meertens:
                                                                          -Adapted PV-oriented electrical model from the MoPED library for validation purposes only. This model is included to demonstrate the impact of using PV-based cell-temperature equations for PVT collectors. The adaptation and inclusion in the validation package are tracked in #1473. +Adapted PV-oriented electrical model from the MoPED library for verification purposes only. +This model is included to demonstrate the impact of using PV-based cell-temperature +equations for PVT collectors. This is for #1473.
                                                                        ")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index 81791f9219..98d64b8c06 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -159,13 +159,9 @@ revisions="
                                                                        • March 11, 2026, by Lone Meertens:
                                                                          -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                        • -
                                                                        • -July 7, 2025, by Lone Meertens:
                                                                          -First implementation PVT model. -This is for #1436. +Adapted PV-oriented electrical model from the MoPED library for verification purposes only. +This model is included to demonstrate the impact of using PV-based cell-temperature +equations for PVT collectors. This is for #1473.
                                                                        ")); From 5d069e3070f331c0f0ce2ba4b4c2da20dc0ef3ed Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:11:31 +0100 Subject: [PATCH 52/86] docs: update documentation strings --- .../Validation/PVT_UI/BaseClasses/ElectricalPV.mo | 4 ++-- .../Validation/PVT_UN/BaseClasses/ElectricalPV.mo | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index e54a288429..0c7748fa33 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; model ElectricalPV - "Model for a photovoltaic panels using PV-oriented cell-temperature equations" + "Model for PV panels using PV-oriented cell-temperature equations" parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at standard conditions (usualy 1000 W/m2)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -20,7 +20,7 @@ model ElectricalPV Modelica.Units.SI.Temperature T_cell "Cell temperature"; Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; - Modelica.Units.SI.TemperatureDifference T_diff; + Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index 98d64b8c06..f2953687ff 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; model ElectricalPV - "Model for a photovoltaic panels using PV-oriented cell-temperature equations" + "Model for PV panels using PV-oriented cell-temperature equations" parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" annotation (Dialog(group="Characteristics of the photovoltaic panel")); @@ -20,7 +20,7 @@ model ElectricalPV Modelica.Units.SI.Temperature T_cell "Cell temperature"; Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; - Modelica.Units.SI.TemperatureDifference T_diff; + Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; From a38aae9e37ff93d8b9e607a3808911cff0ccc17a Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:40:27 +0100 Subject: [PATCH 53/86] refactor: rename variables following conventions --- .../PVT_UI/BaseClasses/ElectricalPV.mo | 78 ++++++++++--------- .../PVT_UN/BaseClasses/ElectricalPV.mo | 68 ++++++++-------- 2 files changed, 79 insertions(+), 67 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo index 0c7748fa33..834096abe7 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo @@ -21,13 +21,13 @@ model ElectricalPV Modelica.Units.SI.Temperature T_cell "Cell temperature"; Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; - Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; - Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; - Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; - Modelica.Units.SI.Velocity wind_speed "Wind speed"; + Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity v_wind "Wind speed"; Modelica.Units.SI.Irradiance G "Total solar irradiance"; - Modelica.Blocks.Math.Add Gglob "Total irradiation on tilted surface" + Modelica.Blocks.Math.Add Gtil "Total irradiation on tilted surface" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, @@ -36,27 +36,24 @@ model ElectricalPV Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, -10},{-120,10}}))); Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) - "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, - {69,-30}}))); + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{11,-52}, + {-9,-32}}))); - IDEAS.Utilities.IO.SignalExchange.Read reaP(description= - "Power generated by the PV installation", y(unit="W")) "Read" - annotation (Placement(transformation(extent={{-20,-50},{-40,-30}}))); protected - final parameter Modelica.Units.SI.Temperature _T_ref=25+273 "Reference temperature of the cell"; - final parameter Modelica.Units.SI.Temperature _noct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; public outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), + fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_Typ1_measurements.txt"), columns=1:25) annotation (Placement(transformation(extent={{92,72},{72,92}}))); - Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) - "[W/m2]" annotation (Placement(transformation(extent={{-31.5, + Modelica.Blocks.Sources.RealExpression Gdir(y=meaDat.y[2] - meaDat.y[3]) "[W/m2]" + annotation (Placement(transformation(extent={{-31.5, 44},{-12.5,60}}))); - Modelica.Blocks.Sources.RealExpression Qdif(y=meaDat.y[3]) "[W/m2]" + Modelica.Blocks.Sources.RealExpression Gdif(y=meaDat.y[3]) "[W/m2]" annotation (Placement(transformation(extent={{-31.5,58},{-12.5,74}}))); Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); @@ -64,23 +61,21 @@ public annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); equation assert(solarPower.y>=0, "Solar power must be positive"); - noct_adj=_noct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; - T_cell_init=G/800*(noct_adj-293) "in Kelvin"; - heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - wind_speed = winSpe.y; - wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); - T_cell=TAmb.y+T_cell_init*heat_loss*wind_loss; - G =Gglob.y; - T_diff=T_cell-_T_ref; + T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; + eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + v_wind = winSpe.y; + eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); + T_cell=TAmb.y+T_cell_init*eff_heat_loss*eff_wind_loss; + G =Gtil.y; + T_diff=T_cell-Tref; - connect(solarPower.y, reaP.u) - annotation (Line(points={{68,-40},{-18,-40}}, color={0,0,127})); - connect(reaP.y, P) annotation (Line(points={{-41,-40},{-80,-40},{-80,0},{-110, - 0}}, color={0,0,127})); - connect(Qdir.y, Gglob.u1) + connect(Gdir.y, Gtil.u1) annotation (Line(points={{-11.55,52},{-6,52},{-6,22}}, color={0,0,127})); - connect(Qdif.y, Gglob.u2) + connect(Gdif.y, Gtil.u2) annotation (Line(points={{-11.55,66},{6,66},{6,22}}, color={0,0,127})); + connect(solarPower.y, P) annotation (Line(points={{-10,-42},{-96,-42},{-96,0}, + {-110,0}}, color={0,0,127})); annotation (Dialog(group="Characteristics of the photovoltaic installation"), Icon(coordinateSystem( preserveAspectRatio=false, @@ -155,17 +150,28 @@ equation Diagram( coordinateSystem(preserveAspectRatio=false)), Documentation(info=" -

                                                                        This model is an adapted PV-oriented electrical submodel (based on the MoPED PVOrientedDCPower) provided for validation only.

                                                                        -

                                                                        Purpose / validation note: Demonstrate the bias caused by using PV-only cell-temperature equations for PVT collectors. Unglazed PVT collectors operate at lower cell temperatures due to thermal extraction; applying PV-based Tcell estimates typically overpredicts cell temperature and underestimates electrical output.

                                                                        - - +

                                                                        +This model is an adapted PV-oriented electrical submodel based on the +PVOrientedDCPower model from the MoPED library +(Verleyen et al., 2022). It is included for verification only. +

                                                                        +

                                                                        +Purpose / verification note: +This submodel is used to demonstrate the bias introduced when applying +PV-only cell‑temperature equations to PVT collectors. Because unglazed +PVT collectors actively extract heat, their cell temperatures are typically +lower than those predicted by PV-based formulations, which leads PV models +to overpredict Tcell and underpredict electrical output. +

                                                                        References

                                                                        • -Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 +Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). +Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). +Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. +(Source of the MoPED library electrical model).
                                                                        - ", revisions="
                                                                          diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo index f2953687ff..4f44111a15 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo @@ -21,24 +21,21 @@ model ElectricalPV Modelica.Units.SI.Temperature T_cell "Cell temperature"; Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; - Modelica.Units.SI.Temperature noct_adj "Adjusted nominal operating cell temperature"; - Modelica.Units.SI.Efficiency heat_loss "Heat loss coefficient of the PV panel"; - Modelica.Units.SI.Efficiency wind_loss "Wind loss coefficient of the PV panel"; - Modelica.Units.SI.Velocity wind_speed "Wind speed"; + Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity v_wind "Wind speed"; Modelica.Units.SI.Irradiance G "Total solar irradiance"; Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, -10},{-120,10}}))); Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) - "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{89,-50}, - {69,-30}}))); + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, + {-11,-30}}))); - IDEAS.Utilities.IO.SignalExchange.Read reaP(description= - "Power generated by the PV installation", y(unit="W")) "Read" - annotation (Placement(transformation(extent={{-20,-50},{-40,-30}}))); protected - final parameter Modelica.Units.SI.Temperature _T_ref=25+273 "Reference temperature of the cell"; - final parameter Modelica.Units.SI.Temperature _noct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; public @@ -46,29 +43,27 @@ public annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); Modelica.Blocks.Sources.RealExpression TAmb(y=meaDat.y[12] + 273.15) "[K]" annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); - Modelica.Blocks.Sources.RealExpression Gglob(y=meaDat.y[4]) "[W/m2]" + Modelica.Blocks.Sources.RealExpression Gtil(y=meaDat.y[4]) "[W/m2]" annotation (Placement(transformation(extent={{-79.5,40},{-60.5,56}}))); outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", fileName=Modelica.Utilities.Files.loadResource( - "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements.txt"), + "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements_week1.txt"), columns=1:25) annotation (Placement(transformation(extent={{80,60},{60,80}}))); equation assert(solarPower.y>=0, "Solar power must be positive"); - noct_adj=_noct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; - T_cell_init=G/800*(noct_adj-293) "in Kelvin"; - heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - wind_speed = winSpe.y; - wind_loss = wind_init/(5.7+3.8*0.51*wind_speed); - T_cell=TAmb.y+T_cell_init*heat_loss*wind_loss; - G =Gglob.y; - T_diff=T_cell-_T_ref; + T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; + eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + v_wind = winSpe.y; + eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); + T_cell=TAmb.y+T_cell_init*eff_heat_loss*eff_wind_loss; + G =Gtil.y; + T_diff=T_cell-Tref; - connect(solarPower.y, reaP.u) - annotation (Line(points={{68,-40},{-18,-40}}, color={0,0,127})); - connect(reaP.y, P) annotation (Line(points={{-41,-40},{-80,-40},{-80,0},{-110, - 0}}, color={0,0,127})); + connect(solarPower.y, P) annotation (Line(points={{-12,-40},{-96,-40},{-96,0}, + {-110,0}}, color={0,0,127})); annotation (Dialog(group="Characteristics of the photovoltaic installation"), Icon(coordinateSystem( preserveAspectRatio=false, @@ -143,17 +138,28 @@ equation Diagram( coordinateSystem(preserveAspectRatio=false)), Documentation(info=" -

                                                                          This model is an adapted PV-oriented electrical submodel (based on the MoPED PVOrientedDCPower) provided for validation only.

                                                                          -

                                                                          Purpose / validation note: Demonstrate the bias caused by using PV-only cell-temperature equations for PVT collectors. Unglazed PVT collectors operate at lower cell temperatures due to thermal extraction; applying PV-based Tcell estimates typically overpredicts cell temperature and underestimates electrical output.

                                                                          - - +

                                                                          +This model is an adapted PV-oriented electrical submodel based on the +PVOrientedDCPower model from the MoPED library +(Verleyen et al., 2022). It is included for verification only. +

                                                                          +

                                                                          +Purpose / verification note: +This submodel is used to demonstrate the bias introduced when applying +PV-only cell‑temperature equations to PVT collectors. Because unglazed +PVT collectors actively extract heat, their cell temperatures are typically +lower than those predicted by PV-based formulations, which leads PV models +to overpredict Tcell and underpredict electrical output. +

                                                                          References

                                                                          • -Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 +Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). +Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). +Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. +(Source of the MoPED library electrical model).
                                                                          - ", revisions="
                                                                            From 30906adc99c77295d5ee7f7c231690911ad38e6e Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:43:14 +0100 Subject: [PATCH 54/86] docs: update docs --- .../Validation/PVT_UI/BaseClasses/UI_Validation.mo | 12 +++--------- .../Validation/PVT_UN/BaseClasses/UN_Validation.mo | 13 +++---------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 55f456a044..461bb0b2f0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; record UI_Validation = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=42200*1.66, @@ -28,7 +28,6 @@ annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTColVal", Documentation(info=" -

                                                                            For comparison with the simplified steady-state thermal formulation, this validation record is adapted to use the thermal coefficients a1 and @@ -47,16 +46,11 @@ Special Issue on Modelica, FMI, and Open Standards.

                                                                          ", revisions=" -
                                                                            -
                                                                          • +
                                                                              +
                                                                            • March 11, 2026, by Lone Meertens:
                                                                              Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added conversion support.This is for #1473.
                                                                            • -
                                                                            • -July 7, 2025, by Lone Meertens:
                                                                              -First implementation PVT model. -This is for #1436. -
                                                                            ")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index b267d1d32d..15e78635dd 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; record UN_Validation = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic ( final A=1.64, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=22100*1.64, @@ -40,13 +40,11 @@ For this PVT collector, additional real-life measurement data is publicly availa which can be found in the IDEAS.Fluid.PVTCollectors.Validation.PVT_UN package.

                                                                            -

                                                                            Certificate

                                                                            -

                                                                            References

                                                                            • @@ -75,16 +73,11 @@ Special Issue on Modelica, FMI, and Open Standards.
                                                                            "), revisions=" -
                                                                              -
                                                                            • +
                                                                                +
                                                                              • March 11, 2026, by Lone Meertens:
                                                                                Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added conversion support.This is for #1473.
                                                                              • -
                                                                              • -July 7, 2025, by Lone Meertens:
                                                                                -First implementation PVT model. -This is for #1436. -
                                                                              "); From e16a5bde2f65df299b93cec94d0fdd61c4b86eff Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:44:46 +0100 Subject: [PATCH 55/86] refactor: adapting naming conventions --- .../Electrical/PVT_UI_Electrical_DayType1.mo | 14 ++++---- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 36 +++++++++---------- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 14 ++++---- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 36 +++++++++---------- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index d20e5494c5..291a0feb36 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -10,7 +10,7 @@ model PVT_UI_Electrical_DayType1 parameter Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation PvtCol( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, @@ -46,9 +46,9 @@ model PVT_UI_Electrical_DayType1 annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[21]) "[W]" annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); - Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) + Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); - Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" + Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.ElectricalPV ElectricalPV( P_STC=datPVTCol.P_nominal, @@ -63,7 +63,7 @@ model PVT_UI_Electrical_DayType1 Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - 273.15) "[°C]" annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); - Modelica.Blocks.Sources.RealExpression simTcell(y=PvtCol.eleGen.TavgCel - + Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - 273.15) "[°C]" annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= @@ -79,13 +79,13 @@ equation connect(bou.m_flow_in, meaDat.y[17]) annotation (Line(points={{-60,-12},{-60,14},{-71,14}}, color={0,0,127})); - connect(bou.ports[1], PvtCol.port_a) + connect(bou.ports[1],pvtCol. port_a) annotation (Line(points={{-38,-20},{-10,-20}}, color={0,127,255})); - connect(PvtCol.port_b, sou.ports[1]) + connect(pvtCol.port_b, sou.ports[1]) annotation (Line(points={{10,-20},{42,-20}}, color={0,127,255})); - connect(weaDat.weaBus, PvtCol.weaBus) annotation (Line( + connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( points={{-32,18},{-14,18},{-14,-12},{-10,-12}}, color={255,204,51}, thickness=0.5)); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 14286ec453..f5ef1c8781 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -13,7 +13,7 @@ model PVT_UI_Thermal_DayType1 datPVTColVal annotation (Placement(transformation(extent={{72,-36},{92,-16}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation PvtCol( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, @@ -49,22 +49,22 @@ model PVT_UI_Thermal_DayType1 annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression a1_a2_term(y=PvtCol.heaLosStc.a1_a2_term) + Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) "[W]" annotation (Placement(transformation(extent={{19,68},{45,84}}))); - Modelica.Blocks.Sources.RealExpression a3_term(y=PvtCol.heaLosStc.a3_term) + Modelica.Blocks.Sources.RealExpression a3_term(y=pvtCol.heaLosStc.a3_term) "[W]" annotation (Placement(transformation(extent={{19,52},{45,68}}))); - Modelica.Blocks.Sources.RealExpression a4_term(y=PvtCol.heaLosStc.a4_term) + Modelica.Blocks.Sources.RealExpression a4_term(y=pvtCol.heaLosStc.a4_term) "[W]" annotation (Placement(transformation(extent={{57,68},{83,84}}))); - Modelica.Blocks.Sources.RealExpression a6_term(y=PvtCol.heaLosStc.a6_term) + Modelica.Blocks.Sources.RealExpression a6_term(y=pvtCol.heaLosStc.a6_term) "[W]" annotation (Placement(transformation(extent={{57,52},{83,68}}))); - Modelica.Blocks.Sources.RealExpression a7_term(y=PvtCol.heaLosStc.a7_term) + Modelica.Blocks.Sources.RealExpression a7_term(y=pvtCol.heaLosStc.a7_term) "[W]" annotation (Placement(transformation(extent={{19,36},{45,52}}))); - Modelica.Blocks.Sources.RealExpression a8_term(y=PvtCol.heaLosStc.a8_term) + Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{57,36},{83,52}}))); - Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow - *(PvtCol.sta_a.T - PvtCol.sta_b.T)) "[W]" + Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow + *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); - PVTCollectorValidation PvtColVal( + PVTCollectorValidation pvtColVal( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, @@ -95,8 +95,8 @@ model PVT_UI_Thermal_DayType1 nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-36},{-38,-16}}))); - Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow - *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" + Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow + *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= @@ -111,9 +111,9 @@ equation annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); connect(bou.m_flow_in, meaDat.y[17]) annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); - connect(bou.ports[1], PvtCol.port_a) + connect(bou.ports[1],pvtCol. port_a) annotation (Line(points={{-38,0},{-10,0}}, color={0,127,255})); - connect(PvtCol.port_b, sou.ports[1]) + connect(pvtCol.port_b, sou.ports[1]) annotation (Line(points={{10,0},{42,0}}, color={0,127,255})); connect(meaDat.y[13], TAmbKel1.Celsius) annotation (Line(points={{-71,34},{-60, 34},{-60,16},{-92,16},{-92,-22},{-88,-22}}, color={0,0,127})); @@ -122,15 +122,15 @@ equation connect(bou1.m_flow_in, meaDat.y[17]) annotation (Line(points={{-60,-18},{-72, -18},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, 0,127})); - connect(bou1.ports[1],PvtColVal. port_a) + connect(bou1.ports[1],pvtColVal. port_a) annotation (Line(points={{-38,-26},{-10,-26}}, color={0,127,255})); - connect(PvtColVal.port_b, sou1.ports[1]) + connect(pvtColVal.port_b, sou1.ports[1]) annotation (Line(points={{10,-26},{42,-26}}, color={0,127,255})); - connect(weaDat.weaBus, PvtCol.weaBus) annotation (Line( + connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( points={{-20,28},{-16,28},{-16,6},{-10,6},{-10,8}}, color={255,204,51}, thickness=0.5)); - connect(weaDat.weaBus, PvtColVal.weaBus) annotation (Line( + connect(weaDat.weaBus,pvtColVal. weaBus) annotation (Line( points={{-20,28},{-16,28},{-16,-18},{-10,-18}}, color={255,204,51}, thickness=0.5)); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 5f459e410e..7aa49f59ef 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -30,7 +30,7 @@ model PVT_UN_Electrical use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-20},{-38,0}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation PvtCol( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, @@ -47,9 +47,9 @@ model PVT_UN_Electrical annotation (Placement(transformation(extent={{72,-16},{92,4}}))); Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-83,58},{-57,74}}))); - Modelica.Blocks.Sources.RealExpression UAbsFluid(y=PvtCol.eleGen.UAbsFluid) + Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) "[W/m2K]" annotation (Placement(transformation(extent={{9,56},{35,72}}))); - Modelica.Blocks.Sources.RealExpression simPel(y=PvtCol.Pel) "[W]" + Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV ElectricalPV( @@ -62,7 +62,7 @@ model PVT_UN_Electrical azi=0) annotation (Placement(transformation(extent={{-64,-72},{-84,-54}}))); Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" annotation (Placement(transformation(extent={{-53,-68},{-27,-52}}))); - Modelica.Blocks.Sources.RealExpression simTcell(y=PvtCol.eleGen.TavgCel - + Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - 273.15) "[°C]" annotation (Placement(transformation(extent={{-47,44},{-21,60}}))); Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - @@ -77,10 +77,10 @@ equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-6},{-76.5,-6}}, color={0,0,127})); - connect(PvtCol.port_a, bou.ports[1]) + connect(pvtCol.port_a, bou.ports[1]) annotation (Line(points={{-8,-10},{-38,-10}}, color={0,127,255})); - connect(PvtCol.port_b, sou.ports[1]) + connect(pvtCol.port_b, sou.ports[1]) annotation (Line(points={{12,-10},{42,-10}}, color={0,127,255})); connect(bou.m_flow_in, meaDat.y[3]) @@ -88,7 +88,7 @@ equation connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,24},{-60, 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, color={0,0,127})); - connect(weaDat.weaBus, PvtCol.weaBus) annotation (Line( + connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( points={{-18,26},{-14,26},{-14,-2},{-8,-2}}, color={255,204,51}, thickness=0.5)); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index e00354647e..3c22c969e4 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -32,11 +32,11 @@ model PVT_UN_Thermal annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "[W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*PvtCol.port_b.m_flow - *(PvtCol.sta_a.T - PvtCol.sta_b.T)) + Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow + *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation PvtCol( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, @@ -67,7 +67,7 @@ model PVT_UN_Thermal use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-42},{-38,-22}}))); - PVTCollectorValidation PvtColVal( + PVTCollectorValidation pvtColVal( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, @@ -82,20 +82,20 @@ model PVT_UN_Thermal annotation (Placement(transformation(extent={{-8,-42},{12,-22}}))); parameter BaseClasses.UN_Validation datPVTColVal annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); - Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*PvtColVal.port_b.m_flow - *(PvtColVal.sta_a.T - PvtColVal.sta_b.T)) "[W]" + Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow + *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "[W]" annotation (Placement(transformation(extent={{-81,-94},{-55,-78}}))); - Modelica.Blocks.Sources.RealExpression a1_a2_term(y=PvtCol.heaLosStc.a1_a2_term) + Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); - Modelica.Blocks.Sources.RealExpression a3_term(y=PvtCol.heaLosStc.a3_term) + Modelica.Blocks.Sources.RealExpression a3_term(y=pvtCol.heaLosStc.a3_term) "[W]" annotation (Placement(transformation(extent={{21,52},{47,68}}))); - Modelica.Blocks.Sources.RealExpression a4_term(y=PvtCol.heaLosStc.a4_term) + Modelica.Blocks.Sources.RealExpression a4_term(y=pvtCol.heaLosStc.a4_term) "[W]" annotation (Placement(transformation(extent={{59,68},{85,84}}))); - Modelica.Blocks.Sources.RealExpression a6_term(y=PvtCol.heaLosStc.a6_term) + Modelica.Blocks.Sources.RealExpression a6_term(y=pvtCol.heaLosStc.a6_term) "[W]" annotation (Placement(transformation(extent={{59,52},{85,68}}))); - Modelica.Blocks.Sources.RealExpression a7_term(y=PvtCol.heaLosStc.a7_term) + Modelica.Blocks.Sources.RealExpression a7_term(y=pvtCol.heaLosStc.a7_term) "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); - Modelica.Blocks.Sources.RealExpression a8_term(y=PvtCol.heaLosStc.a8_term) + Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource( @@ -105,9 +105,9 @@ model PVT_UN_Thermal equation connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); - connect(PvtCol.port_a, bou.ports[1]) + connect(pvtCol.port_a, bou.ports[1]) annotation (Line(points={{-8,0},{-38,0}}, color={0,127,255})); - connect(PvtCol.port_b, sou.ports[1]) + connect(pvtCol.port_b, sou.ports[1]) annotation (Line(points={{12,0},{42,0}}, color={0,127,255})); connect(bou.m_flow_in, meaDat.y[3]) annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); @@ -115,20 +115,20 @@ equation {-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); connect(bou1.T_in, TFluKel1.Kelvin) annotation (Line(points={{-60,-28},{-76.5,-28}}, color={0,0,127})); - connect(PvtColVal.port_a, bou1.ports[1]) + connect(pvtColVal.port_a, bou1.ports[1]) annotation (Line(points={{-8,-32},{-38,-32}}, color={0,127,255})); - connect(PvtColVal.port_b, sou1.ports[1]) + connect(pvtColVal.port_b, sou1.ports[1]) annotation (Line(points={{12,-32},{42,-32}}, color={0,127,255})); connect(bou1.m_flow_in, meaDat.y[3]) annotation (Line(points={{-60,-24},{-72, -24},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, 0,127})); connect(meaDat.y[2], TFluKel1.Celsius) annotation (Line(points={{-71,34},{-60, 34},{-60,16},{-92,16},{-92,-28},{-88,-28}}, color={0,0,127})); - connect(PvtCol.weaBus, weaDat.weaBus) annotation (Line( + connect(pvtCol.weaBus, weaDat.weaBus) annotation (Line( points={{-8,8},{-14,8},{-14,34},{-20,34}}, color={255,204,51}, thickness=0.5)); - connect(PvtColVal.weaBus, weaDat.weaBus) annotation (Line( + connect(pvtColVal.weaBus, weaDat.weaBus) annotation (Line( points={{-8,-24},{-14,-24},{-14,34},{-20,34}}, color={255,204,51}, thickness=0.5)); From 8f10b8255f2a112c92568f9e692d049543120205 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 11:52:07 +0100 Subject: [PATCH 56/86] docs: update comment strings --- .../Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo | 2 +- .../Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo | 2 +- IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index 1bedf8459c..1410cf409a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -1,5 +1,5 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; -package Electrical "Electrical Behavior of Unglazed Rear-Insulated PVT Collector" +package Electrical "Electrical behavior of an unglazed rear‑insulated PVT collector" annotation (preferredView="info", Documentation(info= " diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index 3f54510b90..e929ff0411 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -1,5 +1,5 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; -package Thermal "Thermal Behavior of Unglazed Rear-Insulated PVT Collector" +package Thermal "Thermal behavior of an unglazed rear‑insulated PVT collector" annotation (preferredView="info", Documentation(info= " diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 7aa49f59ef..eb8d8ea20b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; model PVT_UN_Electrical - "Electrical Behavior of Unglazed Rear-Non-Insulated PVT Collector" + "Electrical behavior of an unglazed rear‑non‑insulated PVT collector" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater ( property_T = 293.15, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 3c22c969e4..0255b5a4a7 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; model PVT_UN_Thermal - "Thermal Behavior of Unglazed Rear-Non-Insulated PVT Collector" + "Thermal behavior of an unglazed rear‑non‑insulated PVT collector" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater ( property_T = 293.15, From 7545bcfc40343c67c9abe728d3e4be60127040e5 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 13:50:46 +0100 Subject: [PATCH 57/86] docs: group documentation in main PVT_UI package --- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 2 +- .../Validation/PVT_UI/Electrical/package.mo | 30 +------ .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 19 ++--- .../Validation/PVT_UI/Thermal/package.mo | 63 +------------- .../Validation/PVT_UI/package.mo | 85 +++++++++---------- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 15 ++-- 6 files changed, 63 insertions(+), 151 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index c419dc0631..413e956ddf 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -22,7 +22,7 @@ The equations related to the heat losses and heat gains can be found in the foll
                                                                            • Quasi‑dynamic thermal losses: see -IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss +IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss
                                                                            • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index 1410cf409a..bf0134ecad 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -2,30 +2,11 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; package Electrical "Electrical behavior of an unglazed rear‑insulated PVT collector" annotation (preferredView="info", Documentation(info= -" + "

                                                                              -This subpackage contains four validation models for the electrical performance of the PVT_UI collector, -aligned with the same four ISO 9806:2017 day types used in the Thermal subpackage. -

                                                                              - -

                                                                              -Each model compares simulated and measured electrical output and computes the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2026). -

                                                                              - -

                                                                              -The electrical model is based on the PVWatts V5 formulation and includes: -

                                                                              -
                                                                                -
                                                                              • Temperature-dependent efficiency losses
                                                                              • -
                                                                              • Constant system loss factor (9 %)
                                                                              • -
                                                                              - -

                                                                              -The PV cell temperature is derived from the thermal model using a two-node coupling via UAbsFluid. This coupling ensures accurate representation of the thermal-electrical interaction. -

                                                                              - -

                                                                              -Validation results show excellent agreement across all day types, with normalized MAE and RMSE values below 4.2% (Meertens et al., 2026). The model is robust to variations in UAbsFluid, confirming the reliability of the datasheet-based estimation. +This subpackage contains the electrical validation models for the +PVT_UI +collector.

                                                                              References

                                                                                @@ -37,9 +18,6 @@ Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. -
                                                                              • -Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 -
                                                                              ", revisions=" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index f5ef1c8781..d9452ef288 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -47,7 +47,7 @@ model PVT_UI_Thermal_DayType1 use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); - Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "[W]" + Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "Measured thermal power output [W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) "[W]" annotation (Placement(transformation(extent={{19,68},{45,84}}))); @@ -62,16 +62,16 @@ model PVT_UI_Thermal_DayType1 Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{57,36},{83,52}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow - *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "[W]" + *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "Thermal power output of pvt model [W]" annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); PVTCollectorValidation pvtColVal( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start(displayUnit="K") = T_start, + T_start = T_start, show_T=true, azi=0, - til(displayUnit="deg") = 0.78539816339745, + til = 0.78539816339745, rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, @@ -79,15 +79,15 @@ model PVT_UI_Thermal_DayType1 eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-36},{10,-16}}))); Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel1 - annotation (Placement(transformation(extent={{-87,-27}, + annotation (Placement(transformation(extent={{-87,-27}, {-77,-17}}))); - Sources.Boundary_pT sou1( + Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, p(displayUnit="Pa") = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-36},{42,-16}}))); - Sources.MassFlowSource_T bou1( + Sources.MassFlowSource_T bou1( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, @@ -96,10 +96,9 @@ model PVT_UI_Thermal_DayType1 annotation (Placement(transformation(extent={{-58,-36},{-38,-16}}))); Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow - *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "[W]" + *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); - - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" annotation (Placement(transformation(extent={{-40,18},{-20,38}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index e929ff0411..0000ded4ea 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -4,63 +4,9 @@ package Thermal "Thermal behavior of an unglazed rear‑insulated PVT collector" annotation (preferredView="info", Documentation(info= "

                                                                              -This subpackage contains four validation models for the thermal performance of the -PVT_UI collector, -an uncovered PVT collector with rear insulation. The models correspond to the four ISO 9806:2017 day types: -

                                                                              -
                                                                                -
                                                                              • -Day Type 1: Clear sky, low temperature difference (η0 conditions) -
                                                                              • -
                                                                              • -Day Type 2: Partly cloudy, low temperature difference -
                                                                              • -
                                                                              • -Day Type 3: Clear sky, medium temperature difference -
                                                                              • -
                                                                              • -Day Type 4: Clear sky, high temperature difference -
                                                                              • -
                                                                              -

                                                                              -Each model compares the simulated thermal output with measured data and provides -a detailed breakdown of thermal losses using the quasi-dynamic ISO 9806 formulation. -The following loss mechanisms are included: -

                                                                              -
                                                                                -
                                                                              • -Linear and quadratic heat loss (a1, a2) -
                                                                              • -
                                                                              • -Wind‑dependent convective heat loss (a3) -
                                                                              • -
                                                                              • -Sky‑temperature‑dependent radiative loss (a4) -
                                                                              • -
                                                                              • -Effective thermal capacity (a5) -
                                                                              • -
                                                                              • -Wind dependence of the zero‑loss efficiency (a6) -
                                                                              • -
                                                                              • -Wind dependence of long‑wave radiative exchange (a7) -
                                                                              • -
                                                                              • -Higher‑order temperature‑dependent radiation losses (a8) -
                                                                              • -
                                                                              -

                                                                              -The model is discretized into nSeg segments to capture temperature gradients along the flow path. -All parameters are derived from manufacturer datasheets, without calibration. -

                                                                              -

                                                                              -Validation results show strong agreement for day types 1–3, with thermal energy deviations below 4.2 % - and normalized MAE values ranging from 3.3 % to 20.0 %. -For day type 4, larger deviations (ΔE = 36.7 %) are observed due to high temperature differences and wind speeds, -highlighting limitations in the datasheet-based coefficients under extreme conditions. -As the absolute thermal output is low in this case, model limitations have a stronger effect, -leading to disproportionately large relative deviations (Meertens et al., 2026). +This subpackage contains the thermal validation models for the +PVT_UI +collector.

                                                                              References

                                                                                @@ -72,9 +18,6 @@ Datasheet Parameters. Submitted to Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards. -
                                                                              • -ISO 9806:2017. Solar thermal collectors — Test methods. ISO. -
                                                                              ", revisions=" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index ac1b9387f5..e4502be066 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -1,7 +1,7 @@ within IDEAS.Fluid.PVTCollectors.Validation; package PVT_UI annotation (preferredView="info", Documentation(info= -" + "

                                                                              This package contains validation models for the PVT_UI collector (referred to as PVT1 in Meertens et al., 2026), @@ -9,79 +9,72 @@ an

                                                                              -The validation is structured according to the ISO 9806:2017 standard and includes four representative day types: +The validation includes four representative day types:

                                                                              • Day Type 1: Clear sky, low temperature difference (η0 conditions)
                                                                              • -Day Type 2: Partly cloudy, low temperature difference +Day Type 2: Partly cloudy, low temperature difference
                                                                              • -Day Type 3: Clear sky, medium temperature difference +Day Type 3: Clear sky, medium temperature difference
                                                                              • -Day Type 4: Clear sky, high temperature difference +Day Type 4: Clear sky, high temperature difference
                                                                              +With the temperature difference refering to the difference between the fluid +temperature and the ambient temperature.

                                                                              The package is divided into two main subpackages:

                                                                              -
                                                                              Subpackage: Thermal

                                                                              -Contains four models corresponding to the four day types. Each model compares the simulated thermal output with measured data and provides a detailed breakdown of thermal losses, including: +Contains four models corresponding to the four day types. Each model compares +the simulated thermal output with measured data and provides a detailed +breakdown of thermal losses.

                                                                              -
                                                                                -
                                                                              • -Linear and quadratic heat loss (a1, a2) -
                                                                              • -
                                                                              • -Wind‑dependent convective heat loss (a3) -
                                                                              • -
                                                                              • -Sky‑temperature‑dependent radiative loss (a4) -
                                                                              • -
                                                                              • -Effective thermal capacity (a5) -
                                                                              • -
                                                                              • -Wind dependence of the zero‑loss efficiency (a6) -
                                                                              • -
                                                                              • -Wind dependence of long‑wave radiative exchange (a7) -
                                                                              • -
                                                                              • -Higher‑order temperature‑dependent radiation losses (a8) -
                                                                              • -

                                                                              -The thermal model is based on the quasi-dynamic ISO 9806:2017 formulation and uses only datasheet parameters. The model is discretized into nSeg segments to capture temperature gradients along the flow path. +The thermal model is based on the quasi-dynamic ISO 9806:2017 formulation. The +heat losses are however modified to output the detailed breakdown of thermal losses +for validation purposes as given in +IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation. The model +is discretized into nSeg segments to capture temperature gradients +along the flow path.

                                                                              Subpackage: Electrical

                                                                              -Also includes four models for the same day types. These models validate the electrical output by comparing simulated and measured power, and compute the absorber-to-fluid heat transfer coefficient UAbsFluid using a datasheet-based method (Meertens et al., 2026). -

                                                                              -

                                                                              -The electrical model uses the PVWatts V5 formulation and includes temperature-dependent efficiency losses. The PV cell temperature is derived from the thermal model using a two-node coupling heat transfer coefficient UAbsFluid. -

                                                                              +Also includes four models for the same day types. These models validate +the electrical output by comparing simulated and measured power output. +A more detailed description of the electrical model can be found in + +IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT.

                                                                              Model limitations

                                                                              -Overall, the PVT_UI validation -demonstrates strong agreement between the model and measurements for both thermal and electrical outputs under a range of operating conditions. +Overall, the PVT_UI +validation demonstrates strong agreement between the model and measurements for +both thermal and electrical outputs under a range of operating conditions. While electrical outputs are accurate and consistent across all day types, -limitations in thermal output are observed under high wind speeds and rapid irradiance changes, -primarily due to datasheet parameter constraints. This is particularly evident in Day Type 4, -where a large temperature difference between the fluid and ambient air amplifies these limitations. -The wind speed over the collector plane during most of the test periods is generated using an artificial blower, -producing wind speeds around 3.5 m/s. -This lies near the upper boundary of the test range for the datasheet thermal parameters, -potentially leading to additional discrepancies between the modeled and measured results. +limitations in thermal output are observed under high wind speeds and rapid irradiance +changes, primarily due to datasheet parameter constraints. This is particularly +evident in Day Type 4, where a large temperature difference between the fluid +and ambient air amplifies these limitations. The wind speed over the collector +plane during most of the test periods is generated using an artificial blower, +producing wind speeds around 3.5 m/s. This lies near the upper +boundary of the test range for the datasheet thermal parameters, potentially +leading to additional discrepancies between the modeled and measured results. +

                                                                              +

                                                                              Validation results

                                                                              +

                                                                              +The complete validation methodology, covering the model formulation, +datasheet-based thermal–electrical coupling, and performance metrics, is documented in +Meertens et al. (2026). The same paper reports the detailed results, including +MAE and RMSE values and the energy deviations for each day type.

                                                                              -

                                                                              References

                                                                              • diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 0255b5a4a7..944bae4617 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -30,11 +30,10 @@ model PVT_UN_Thermal use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); - Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "[W]" + Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "Measured thermal power output [W]" annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow - *(pvtCol.sta_a.T -pvtCol.sta_b.T)) - "[W]" + *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "Thermal power output of pvt model [W]" annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, @@ -52,15 +51,15 @@ model PVT_UN_Thermal parameter Data.Uncovered.UN_Validation datPVTCol annotation (Placement(transformation(extent={{70,-8},{90,12}}))); Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel1 - annotation (Placement(transformation(extent={{-87,-33}, + annotation (Placement(transformation(extent={{-87,-33}, {-77,-23}}))); - Sources.Boundary_pT sou1( + Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, p(displayUnit="Pa") = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-42},{42,-22}}))); - Sources.MassFlowSource_T bou1( + Sources.MassFlowSource_T bou1( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, @@ -83,7 +82,7 @@ model PVT_UN_Thermal parameter BaseClasses.UN_Validation datPVTColVal annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow - *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "[W]" + *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" annotation (Placement(transformation(extent={{-81,-94},{-55,-78}}))); Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); @@ -97,7 +96,7 @@ model PVT_UN_Thermal "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource( "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" From 1baaff9960a80970681579b092403acd17043231 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 14:16:45 +0100 Subject: [PATCH 58/86] docs: move docs to PVT_UI top level package and refer to paper for results --- .../PVT_UI/PVTCollectorValidation.mo | 3 +- .../Validation/PVT_UI/package.mo | 39 ++++++-------- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 32 +++-------- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 53 +++---------------- .../Validation/PVT_UN/package.mo | 42 ++++++++------- 5 files changed, 51 insertions(+), 118 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 8427fa6db3..96bf71652c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -174,7 +174,8 @@ equation defaultComponentName="pvtCol", Documentation(info="

                                                                                -Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling. +Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 +quasi-dynamic thermal method with integrated electrical coupling. Discretizes the collector into segments, computes heat loss and gain per ISO 9806, and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters.

                                                                                diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index e4502be066..9447aa12aa 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -28,31 +28,22 @@ The validation includes four representative day types: With the temperature difference refering to the difference between the fluid temperature and the ambient temperature.

                                                                                -The package is divided into two main subpackages: +The validation of +PVT_UI is organized into two subpackages:

                                                                                -
                                                                                Subpackage: Thermal
                                                                                -

                                                                                -Contains four models corresponding to the four day types. Each model compares -the simulated thermal output with measured data and provides a detailed -breakdown of thermal losses. -

                                                                                -

                                                                                -The thermal model is based on the quasi-dynamic ISO 9806:2017 formulation. The -heat losses are however modified to output the detailed breakdown of thermal losses -for validation purposes as given in -IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation. The model -is discretized into nSeg segments to capture temperature gradients -along the flow path. -

                                                                                - -
                                                                                Subpackage: Electrical
                                                                                -

                                                                                -Also includes four models for the same day types. These models validate -the electrical output by comparing simulated and measured power output. -A more detailed description of the electrical model can be found in - -IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT. - +

                                                                                  +
                                                                                • +Thermal: +Includes four models for the four ISO 9806:2017 day types. Each model +compares simulated and measured thermal output and evaluates the thermal +loss components. +
                                                                                • +
                                                                                • +Electrical: +Contains four corresponding day‑type models that validate the electrical performance +by comparing simulated and measured power output. +
                                                                                • +

                                                                                Model limitations

                                                                                Overall, the PVT_UI diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index eb8d8ea20b..c40d07b698 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -96,34 +96,14 @@ equation

                                                                                This model validates the electrical performance of the PVT_UN collector, -an uncovered and uninsulated PVT collector, using the same 58-day outdoor dataset as the thermal model (Veynandt et al., 2023). +an uncovered and uninsulated PVT collector.

                                                                                -The model uses the PVWatts V5 formulation and includes: -

                                                                                -
                                                                                  -
                                                                                • -Temperature-dependent efficiency losses -
                                                                                • -
                                                                                • -Datasheet-based estimation of UAbsFluid -
                                                                                • -
                                                                                • -Constant system loss factor (7 %) -
                                                                                • -
                                                                                -

                                                                                -The PV cell temperature is derived from the thermal model using a two-node coupling via UAbsFluid, -ensuring accurate representation of the thermal-electrical interaction. -

                                                                                -

                                                                                -Despite the presence of extreme weather conditions, including wind speeds up to 10–12 m/s and continuous pump operation, -the electrical model remains robust. Validation shows excellent agreement with measurements, -with a normalized MAE of 5.3 % and nRMSE of 10.1 % (Meertens et al., 2026). -

                                                                                -

                                                                                -The model's accuracy confirms the reliability of the datasheet-based estimation method for UAbsFluid, -even under challenging real-world conditions. +See the documentation of + +PVT_UN + +for details on the validation model and usage.

                                                                                ", revisions=" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 944bae4617..4e48d901eb 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -135,56 +135,15 @@ equation

                                                                                This model validates the thermal performance of the PVT_UN collector, -an uncovered and uninsulated PVT collector, using a long-term dataset from a test bench in Austria (Veynandt et al., 2023). +an uncovered and uninsulated PVT collector.

                                                                                -The model uses the quasi-dynamic ISO 9806:2017 formulation and includes: +See the documentation of + +PVT_UN + +for details on the validation model and usage.

                                                                                -
                                                                                  -
                                                                                • -Linear and quadratic heat loss (a1, a2) -
                                                                                • -
                                                                                • -Wind‑dependent convective heat loss (a3) -
                                                                                • -
                                                                                • -Sky‑temperature‑dependent radiative loss (a4) -
                                                                                • -
                                                                                • -Effective thermal capacity (a5) -
                                                                                • -
                                                                                • -Wind dependence of the zero‑loss efficiency (a6) -
                                                                                • -
                                                                                • -Wind dependence of long‑wave radiative exchange (a7) -
                                                                                • -
                                                                                • -Higher‑order temperature‑dependent radiation losses (a8) -
                                                                                • -
                                                                                -

                                                                                -The dataset includes days with several hours of high wind speeds up to 10–12 m/s, -which significantly increase convective losses. -Additionally, the circulation pump remains active throughout the test period, -even when thermal output is negative—unlike real-world systems, which would deactivate the pump under such conditions. -

                                                                                - -

                                                                                -Moreover, the experimental setup forces the collector to operate at unusually high -temperature differences between the HTF and the ambient air. This operating regime is -not representative of practical unglazed PVT use, where collectors typically run at -much lower temperatures due to their inherently high thermal losses. -

                                                                                - -

                                                                                -As a result, the raw energy deviation of +54.9% is not a meaningful indicator of -model performance. When filtered to periods with positive simulated thermal output, -the deviation improves to +8.09% (Meertens et al., 2026). This filtered metric -provides a more realistic assessment of the model's accuracy under these high operating -temperatueres. -

                                                                                - ", revisions="
                                                                                  diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo index 12f1411ec0..8f66901855 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo @@ -33,30 +33,32 @@ Validates thermal output using the quasi-dynamic ISO 9806:2017 formulation. Validates electrical output using the PVWatts V5 formulation.
                                                                                +

                                                                                Model limitations

                                                                                -Due to the absence of rear insulation and the continuous operation of the circulation pump, -also during periods of negative thermal output, the raw energy deviation of +54.9 % -is not representative of real-world operation. In practice, the pump would only be activated when thermal gains exceed losses. -When filtered to periods with positive thermal output, -the deviation improves to +8.09%. This filtered metric provides a more meaningful assessment of the model performance. +Overall, the validation of the PVT_UN +model shows good agreement under operating conditions that are representative +for unglazed, non-insulated PVT collectors. However, several limitations arise +from characteristics of the experimental setup rather than the model itself. +Because the collector has no rear insulation, heat losses remain high, and the +circulation pump was operated continuously, even during periods with negative +thermal output. This operating mode is not representative of real-world +installations, where flow would typically be stopped when thermal gains fall +below losses. In addition, the imposed temperature differences between the heat +transfer fluid and the ambient air were significantly higher than what would +normally occur in practical PVT operation, further amplifying thermal losses and +exposing the collector to an extreme regime outside the datasheet parameter +range. These conditions can lead to discrepancies between simulated and +measured performance, but they do not reflect typical system behavior. +When the analysis is restricted to periods with positive thermal output, the +model exhibits good thermal performance.

                                                                                +

                                                                                Validation results

                                                                                -Due to the absence of rear insulation, the continuous operation of the circulation -pump—even during periods of negative thermal output—and the exceptionally high -HTF–ambient temperature differences imposed by the experimental setup -(an operating regime not representative for unglazed PVT collectors, which -normally run at much lower temperatures), the raw energy deviation of +54.9% is -not representative of real-world operation. In practice, the pump would only be -activated when thermal gains exceed losses. When filtered to periods with -positive thermal output, the deviation improves to +8.09%. This filtered metric -therefore provides a more meaningful assessment of the model performance under -such extreme conditions. +The complete validation methodology, covering the model formulation, +datasheet-based thermal–electrical coupling, and performance metrics, is documented in +Meertens et al. (2026). The same paper reports the detailed results, including +MAE and RMSE values and the energy deviations for each day type.

                                                                                -

                                                                                -The electrical model shows excellent agreement with measurements, with a nMAE of 5.3% and nRMSE of 10.1%. -The model is robust to variations in UAbsFluid, confirming the reliability of the datasheet-based estimation method. -

                                                                                -

                                                                                References

                                                                                • From a95c38c958765280a3728791efac190631a6a092 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 14:20:34 +0100 Subject: [PATCH 59/86] docs: update docs --- .../PVT_UI/PVTCollectorValidation.mo | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 96bf71652c..7794e0ddd0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -179,7 +179,6 @@ quasi-dynamic thermal method with integrated electrical coupling. Discretizes the collector into segments, computes heat loss and gain per ISO 9806, and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters.

                                                                                  -

                                                                                  Extends

                                                                                  • @@ -188,7 +187,6 @@ IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector
                                                                                  -

                                                                                  Submodel References

                                                                                  • @@ -216,20 +214,26 @@ IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.LongWaveRadiation
                                                                                  -

                                                                                  Implementation Notes

                                                                                  -

                                                                                  This validation model exclusively relies on measurement data provided by the CombiTimeTable meaDat. However, because it extends -IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector -and to limit the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 remains instantiated -and connected to the inherited weaBus. The reader is retained only to satisfy the parent class connector and is not used -during simulation: all weather inputs (irradiance, ambient temperature, wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                                                  +

                                                                                  +This validation model exclusively relies on measurement data provided by the +CombiTimeTable meaDat. However, because it extends +IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector and to limit +the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 +remains instantiated and connected to the inherited weaBus. The +reader is retained only to satisfy the parent class connector and is not +used during simulation: all weather inputs (irradiance, ambient temperature, +wind speed, etc.) are taken from meaDat, so the reader does not +affect the model results. +

                                                                                  -This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. -It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. -Because direct measurements of long-wave sky irradiance were found to be faulty, the model instead computes long-wave radiation +This model is designed for (unglazed) PVT collectors and discretizes the flow +path into nSeg segments to capture temperature gradients. It is +compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, +and wind speed vary over time. Because direct measurements of long-wave sky +irradiance were found to be faulty, the model instead computes long-wave radiation using the dedicated LongWaveRadiation model.

                                                                                  -

                                                                                  References

                                                                                  • From 7bd56090b50f8de9078546964fc925504edbaf6f Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 15:02:24 +0100 Subject: [PATCH 60/86] refactor: correct paths --- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 7 +++--- .../Electrical/PVT_UI_Electrical_DayType1.mo | 10 ++++---- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 6 ++--- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 13 +++++----- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 24 ++++++++++--------- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index f18354854b..f53f1d0aab 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -3,7 +3,7 @@ model PVTCollector "Model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated thermal-electrical coupling" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); + redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); // ===== Parameters ===== parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.10 @@ -13,9 +13,8 @@ model PVTCollector parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff(min=0, max=1) = (if collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84) "Effective transmittance–absorptance product"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid( - min=0) = ((tauAlpEff - per.etaEl) * (per.a1)) / - ((tauAlpEff - per.etaEl) - per.eta0) + parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid(min=0) = + ((tauAlpEff - per.etaEl) * (per.a1)) / ((tauAlpEff - per.etaEl) - per.eta0) "Internal heat transfer coefficient between the fluid and PV cells; computed from datasheet parameters by default." annotation(Dialog(tab="Advanced", group="Electrical parameters")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 291a0feb36..7f45285f8c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -7,17 +7,17 @@ model PVT_UI_Electrical_DayType1 parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09; - parameter Data.Uncovered.UI_Validation datPVTCol + parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start(displayUnit="K") = T_start, + T_start = T_start, show_T=true, azi=0, - til(displayUnit="deg") = 0.78539816339745, + til = 0.78539816339745, rho=0.2, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, @@ -34,7 +34,7 @@ model PVT_UI_Electrical_DayType1 IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, - p(displayUnit="Pa") = 101325, + p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-30},{42,-10}}))); IDEAS.Fluid.Sources.MassFlowSource_T bou( @@ -66,7 +66,7 @@ model PVT_UI_Electrical_DayType1 Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - 273.15) "[°C]" annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" annotation (Placement(transformation(extent={{-52,8},{-32,28}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index d9452ef288..014024d5ad 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -6,7 +6,7 @@ model PVT_UI_Thermal_DayType1 parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter String pvtTyp = "Typ1"; parameter Real eleLosFac = 0.09; - parameter Data.Uncovered.UI_Validation datPVTCol + parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol annotation (Placement(transformation(extent={{72,-6},{92,14}}))); parameter IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.UI_Validation @@ -84,7 +84,7 @@ model PVT_UI_Thermal_DayType1 Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, - p(displayUnit="Pa") = 101325, + p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-36},{42,-16}}))); Sources.MassFlowSource_T bou1( @@ -98,7 +98,7 @@ model PVT_UI_Thermal_DayType1 Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" annotation (Placement(transformation(extent={{-40,18},{-20,38}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index c40d07b698..6cab65cde8 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -8,6 +8,8 @@ model PVT_UN_Electrical parameter String week = "week1"; parameter Modelica.Units.SI.Temperature T_start = 17.086651 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.07; + parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol + annotation (Placement(transformation(extent={{72,-16},{92,4}}))); inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, @@ -20,7 +22,7 @@ model PVT_UN_Electrical IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, - p(displayUnit="Pa") = 101325, + p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-20},{42,0}}))); IDEAS.Fluid.Sources.MassFlowSource_T bou( @@ -43,15 +45,14 @@ model PVT_UN_Electrical per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-20},{12,0}}))); - parameter Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{72,-16},{92,4}}))); + Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" annotation (Placement(transformation(extent={{-83,58},{-57,74}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) "[W/m2K]" annotation (Placement(transformation(extent={{9,56},{35,72}}))); Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); - .IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV ElectricalPV( P_STC=datPVTCol.P_nominal, beta=datPVTCol.beta, @@ -68,7 +69,7 @@ model PVT_UN_Electrical Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - 273.15) "[°C]" annotation (Placement(transformation(extent={{-53,-82},{-27,-66}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource( "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" @@ -92,7 +93,7 @@ equation points={{-18,26},{-14,26},{-14,-2},{-8,-2}}, color={255,204,51}, thickness=0.5)); - annotation (Documentation(info = " + annotation (Documentation(info = "

                                                                                    This model validates the electrical performance of the PVT_UN collector, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 4e48d901eb..41d802a0bb 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -8,6 +8,10 @@ model PVT_UN_Thermal parameter String week = "week1"; parameter Modelica.Units.SI.Temperature T_start = 17.086651 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.07; + parameter IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.UN_Validation datPVTColVal + annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); + parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol + annotation (Placement(transformation(extent={{70,-8},{90,12}}))); inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, @@ -20,7 +24,7 @@ model PVT_UN_Thermal IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, - p(displayUnit="Pa") = 101325, + p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-10},{42,10}}))); IDEAS.Fluid.Sources.MassFlowSource_T bou( @@ -48,25 +52,24 @@ model PVT_UN_Thermal per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); - parameter Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{70,-8},{90,12}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel1 annotation (Placement(transformation(extent={{-87,-33}, {-77,-23}}))); - Sources.Boundary_pT sou1( + IDEAS.Fluid.Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, - p(displayUnit="Pa") = 101325, + p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-42},{42,-22}}))); - Sources.MassFlowSource_T bou1( + IDEAS.Fluid.Sources.MassFlowSource_T bou1( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-42},{-38,-22}}))); - PVTCollectorValidation pvtColVal( + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtColVal( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, @@ -79,8 +82,7 @@ model PVT_UN_Thermal per=datPVTColVal, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-8,-42},{12,-22}}))); - parameter BaseClasses.UN_Validation datPVTColVal - annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); + Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" annotation (Placement(transformation(extent={{-81,-94},{-55,-78}}))); @@ -96,7 +98,7 @@ model PVT_UN_Thermal "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource( "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" @@ -131,7 +133,7 @@ equation points={{-8,-24},{-14,-24},{-14,34},{-20,34}}, color={255,204,51}, thickness=0.5)); - annotation ( Documentation(info = " + annotation ( Documentation(info = "

                                                                                    This model validates the thermal performance of the PVT_UN collector, From 707a24300498ec91e3601acc9b925cb56dc4fc8d Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 15:03:21 +0100 Subject: [PATCH 61/86] docs: updated docs and figure in user guide --- IDEAS/Fluid/PVTCollectors/UsersGuide.mo | 57 +++++++----------- .../Fluid/PVTCollectors/RCnetwork_dotted.png | Bin 52285 -> 0 bytes .../Fluid/PVTCollectors/Tcell_coupling.png | Bin 0 -> 15153 bytes 3 files changed, 23 insertions(+), 34 deletions(-) delete mode 100644 IDEAS/Resources/Images/Fluid/PVTCollectors/RCnetwork_dotted.png create mode 100644 IDEAS/Resources/Images/Fluid/PVTCollectors/Tcell_coupling.png diff --git a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo index 413e956ddf..ebf6c5cfde 100644 --- a/IDEAS/Fluid/PVTCollectors/UsersGuide.mo +++ b/IDEAS/Fluid/PVTCollectors/UsersGuide.mo @@ -4,16 +4,13 @@ package UsersGuide "User’s Guide" annotation(preferredView="info", Documentation(info="

                                                                                    -This package contains a physics‑based, datasheet‑driven model for -photovoltaic–thermal (PVT) collectors. The thermal formulation follows the -ISO 9806:2017 quasi‑dynamic test standard, which is currently the most -widely used test method for both glazed and unglazed (WISC) collectors. -The electrical submodel is internally coupled via a datasheet‑derived -absorber–fluid heat transfer coefficient. +This package contains a physics-based PVT collector model relying solely on +datasheet parameters. The thermal formulation follows the ISO 9806:2017 +quasi‑dynamic test standard, which is currently the most widely used test method +for both glazed and unglazed (WISC) collectors. The electrical submodel is +internally coupled via a datasheet‑derived absorber–fluid heat transfer coefficient.

                                                                                    -

                                                                                    Model description

                                                                                    -
                                                                                    Thermal part

                                                                                    The equations related to the heat losses and heat gains can be found in the following models: @@ -34,25 +31,19 @@ IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain

                                                                                  -The thermal parameters used by this model are expressed in the -ISO 9806:2017 quasi‑dynamic format. +The thermal parameters used by this model are expressed in the ISO 9806:2017 quasi‑dynamic format.

                                                                                  -Because some commercial PVT collectors are still tested under -ISO 9806:2013 (steady‑state unglazed or quasi‑dynamic) or the -newly published ISO 9806:2025 quasi‑dynamic method, a -unified conversion procedure is provided to translate datasheet -parameters from these standards into their ISO 9806:2017 equivalents. -This guarantees that the model can be used for all commercially tested -PVT collectors. -The standard‑to‑standard conversion routines are provided in the easy‑to‑use Excel file located at -IDEAS.Resources.Data.Fluid.PVTCollectors. -The conversion procedure is based on (i) SKN‑N0474R0 for ISO 9806:2013 -to ISO 9806:2017, and (ii) a newly introduced conversion for -ISO 9806:2025 to ISO 9806:2017 as published in Meertens et al. (2026). +Because some commercial PVT collectors are still tested under ISO 9806:2013 (steady‑state +unglazed or quasi‑dynamic) or the newly published ISO 9806:2025 quasi‑dynamic method, a +unified conversion procedure is provided to translate datasheet parameters from +these standards into their ISO 9806:2017 equivalents. This guarantees that the +model can be used for all commercially tested PVT collectors. The standard‑to‑standard +conversion routines are provided in the easy‑to‑use Excel file located at +IDEAS.Resources.Data.Fluid.PVTCollectors. The conversion procedure +is based on (i) SKN‑N0474R0 for ISO 9806:2013 to ISO 9806:2017, and (ii) a newly +introduced conversion for ISO 9806:2025 to ISO 9806:2017 as published in Meertens et al. (2026).

                                                                                  - -
                                                                                  Electrical part

                                                                                  The equations and assumptions related to electrical part can be found in the following model: @@ -65,14 +56,12 @@ IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT

                                                                                - -
                                                                                Electrical–thermal coupling

                                                                                -The internal absorber–fluid heat transfer coefficient -UAbsFluid couples the thermal and electrical models by -linking the PV cell temperature to the fluid temperature. This coupling is -critical for accurately predicting electrical output. +The internal absorber–fluid heat transfer coefficient UAbsFluid +couples the thermal and electrical models by linking the PV cell temperature to +the fluid temperature (see Figure 1). This coupling is critical for accurately +predicting electrical output.

                                                                                The coefficient UAbsFluid is computed solely from @@ -85,12 +74,12 @@ the approximate formula is:

                                                              • -(τ·α)eff – η0,el · (a1 + a3·ur + b1,el) +(τ·α)eff – η0,el · (a1 + a3·ur)
                                                                -(τ·α)eff – η0,el · (a1 + a3·ur) +(τ·α)eff – η0,el · (a1 + a3·ur)
                                                                -(τ·α)eff – η0,el – (1 – a60,b · ur) · η0,b +((τ·α)eff – η0,el – (1 – a6η0,b · ur) · η0,b
                                                                @@ -113,10 +102,10 @@ datasheet values.

                                                                \"Two-node, + src=\"modelica://IDEAS/Resources/Images/Fluid/PVTCollectors/Tcell_coupling.png\" width=\"500\"/>

                                                                -Figure 1: Two-node, one-capacitance thermal network for PVT collectors (ISO 9806: dashed lines; extension: solid lines) (Meertens et al., 2026). +Figure 1: Equivalent thermal network between temperatuur node and cell node interlinked by UAbsFluid (Meertens et al., 2026).

                                                                References

                                                                diff --git a/IDEAS/Resources/Images/Fluid/PVTCollectors/RCnetwork_dotted.png b/IDEAS/Resources/Images/Fluid/PVTCollectors/RCnetwork_dotted.png deleted file mode 100644 index f60c1b2b31a5f8eb36d71d9868e4edc2e0c7f268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52285 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

                                                                ~dJ2l$ z9Z&8$=YF1a+Iqe#n*29FtuA0tsVF4=G|XAQyLz7OVD$u2om3D;rkH9Q;3T6zfQax*Iw5w&)9Y5=b)3+ch|qTo~OOR%g{ zP5K5IN}oBot3ZSu>lSG&Bb0vTMz-+yW#J-Mp|N$*<$~wtYTV4sE-Xedp8HAVD*GK@ zRQaOY9Q+=|PI$-HRgI(GtYLnx~wK{T_bOz$(aw|tI34v7zxTpNSv>MxwkcszlJR5G6K57eCUBjEE4 zauTndZ;XJ#qZ zfKX4C&BymJ=INA?A!S^``M<48mg`=bn51?lstDAL@7%NdCFYT;0jkH67y?XS8u|XL z!1iD^W_qFPo4sltWJJ>Nn@69z051aiJ@E9Ba%vUgOB}Q+?=&lm?NUGyp=kzrHV}%i zQBdXz^}bM8j%2}}gAu2Y`pF<$a0sCK7}6iP#7}nA%1Y%ytcFksi3`qGh*?O>%K90` zK^B<40Jhxr+@FSZ?=yGlucw7zpF9`YA-w{s8_$~?mHjgSDhdh(Y$O21mVw;B_P;A2 zs(5E-GbF1=#Ki@lq0deebW*i}Uu%a1A>bkkpq?OL@0ghM7}zr=iw5-gR<37dX4ZKh zH+wIHJ2*JlP1It*Wh1|S&EfW(g*xp10W3!nE2LEnf@D7*>>yugGeZH1d5thkNQ43! zDrswEIEi5+I&ra7-KEc%7 zM)0;F*~`8t7Qr$8ufn|xQnb_ajtHMXQw%^9?3h5x;JMNBLaIyI9spQw3PBG8q6winET#D zsNh&FfGLwc{n4}mtcf9H=7yh zmdt<`E{uF5QjzPN_*1H(#ee-iP!Ou)qoR!2$f0&(ahn=b5@1S6I?Nw&mOfu*Z=~uT z(+YsZ>;Gny77EBZ!LaFGv8mj|^(UtDH%;)QsyUwJo?Y@n;y=KFUszhI2PW_Tf*UP; zD3pe-BPF~99;o<7)#5RF_yApI8fIIC4kZdf%{6=pKyV%~r->b>qyR!*&A{gKmco+P z0T_0~=OjPUHDoK}>lA$hon(H;i_yjCdzCS~6+2w`<^oe~Mwh7YH}INLQ9gjoGlJO+ z6E8aZGVr13URQY@?HT^J$dP(ju-}kuwGWLfbaTnb!SB3bgE=yd+q9Mjh*_TKcBI?R z+t{*R>yifZq9slfFlYdR^l6`s%wB?0O@Ql!A=&6!gFpy_R9%lS9IOA=#)ml1q(}>@ z`Dd35-_KuN2?b7u+k41PP({cU;21@*C_Sz|J+uJ03_FSf)dpYfMl=I zGc-)<9vp;|(gG}%9yDI!?*wQzz&p{19?)nUfaQEU8Y;}$P&?ijY+y(Ed*9E_%&?)N zAuX*;Vcu3K8b~TQK7budt62lw0|n{<^dJ~;hkiSY(7^<-SQ(zyz z^0`(O07zP8gQhO76<&Qrw06g+maS(jD$gLdv{bVdC<>P3`ifrTK%TvD5C0XiN9>NC zB|@UdGBSX(upIl|kVEqz=uD%9k$5~@a}u|OoG{=?@7m7<@B$wM$0ss2HsiZ~jh2!i)=c?}xTeHySm66by6G|K)$C91_i~b}#PRkMwx&Q&;4Ldh2Lv27LZ}S^BFcg31PtoM*QiV1{A*5z@(v z0*tjx@k{kP<(s-Ar5fQizui;e6M4f*hg+=OqHFLMRec#xNIpaduJC0 zLU`hzEF7&>?Nflh`5x+_)O{=3VMCGsfNZO(P=Nz;j@xUK5b_;n@g(+rF(nTWrv=9c z8Lsm%Y!(A~Mf!QeDuzo#N3<VHl#w8;UcdnIvYd2AD-#H`n?_S4Au= zEu(`eWnW_Ke$bSAAK#!)4~N&#q}|(^WVG)Z3>6Bmvt~gXl7EdrnM`JT{Pd|G;!r>g zo*R|{Wa?}{9Vu!}T^1;nuqhy*F^KxYh8CUh`Vedj!jDE707=6>zwW#~`1^Mb>1P=L zu*%Hq{LJ63!U8R?5b!TFFFZ$5e8{FrNl5{Ckuf|X$_JV^Ld8TYh_P(H&P_G1R!o=R zxCgn!VORJDxQsN=A+WpRlh?BLIQ((CATLo58Ll@aaCU#5_ql;hj3>JFob2i*sEh)7 z3t?G%8o<4SxvTLJYU%*_AM8lj(!ilaAz^Txl_(lpFTiyn{EVP;Cnov#jToI|Q=At2q@$x*<}#qt`wpu$V(4f&ui5K_o<-=YOG#5FUdI z3c7i`4|W@^_B`6zr5AC+Cfb5(T;ftJQ53)v&zsQTa}{0f7%=q!3@DKDp}STfP+B`w zUX%<2WQb_^4xG4A5YRTgT%7(NM#kR?Web$U+OKzuDmddnagm*=PK7_{q53QuFawZ4 zqkp;;6U6kKr3yX@=}HDW%rh`7%QdIj_5cK5q)k=^D=oeUs;4SfzoV1WEy!u;UuL*# zFO%DyT?hq?Q{36*16|ffK^K`v!O&lp;%aDdo6s66CK}TlB zlt4B&TrotPg-T1q?8n10eW^S1K6y7NN1Vbq#h9K6F=UNX88ifFShvLCEn*R^LC{tiXIyW z`Wvl&HH#)u9D$`4PsoB;bglleUOH#X^&y>uV0kWu12{ zOz~vwU2~c%^wg@w74$W3XmV6-gP?w3UqRmcy`6Jroop4v8j)84i%<>{e-My2g#&y7 z&(@aIexl14owvU~a0-o_;-DmNCNNVU?VPpJ!Ehx1f#V1U`uSeUQu#g!N2WyRihgmc ztPIMBQ(ok@!>FAllnv^D#|FPO!^ej0)1{%GmX{}TX~^aa0P9p+0RFc+RP;Z_?(XV; zq;Lcb0Ny{*(cfCY1pF(tyN*msDBD^d{_|h+5O`XI$^L`HPuYSe#95d6%(r`$agq9n zcD$O1SmHrU_F_NOROB%n@?A_g!9@5a6KfyuwDMv@p<7GeO(H0-*Q~Cfe>Yt7xA`=r z(&G|u6y9{1*>wY20fn(teXF}ezR8>yzlftXo_ieea&#PAd=YY)MdO?JUnrf+@?Yw{$;3iwK%j(8(@d|- zjB@D(ay9>!r*6+r=@=JA?|UB^XelJTLxv&^B0=!@z_5@sGrLJ4D+RSZu-SqAAo9f{ z76s@R@R+AeC5~tzNh=tP5LEGi90&Hw2#%A0jIOMtbA+^^#9d|msb4V{zZtDR6T3=8 zK{58f8vA#hUcPs~<<)8p7ik*N`=TX|2-Vl_23vfjfBQ|k${=|o+WHK?M}x5murCOE z0a65wW{LR!=9(Q4(Q?!Of`Xte>l5=|8HW2Ci<@i-hEmH3)s4R$n^g;&u4#PJn}O#< zU^gYFm6ZRb!WwvRFcXo=Hr%Di5nx=cZA>Vc(pdL;{nq;wSH0th0gy#>91dzGR;Rg+ z4My$Y@(N=)8lE1LHpu1SBPRRdHz2imp|7Td)3gSAq|Ta6>KZibp%8))in7M4BAALDKX8OfU zB6mO(Jiab|xijhIBn(za%*E;Uyy{=ficEW==Ar|vXUW6>LO}U^;Nvhf*w|gnA%U!*CwjfxSgAepzww@jTs9CiK)v0W=ZY)dnQ6#`!viK4{`UtECoSf z0z2}KPx4Mk5sm|V=HKIg3qEx^cjBeHl5K;f*9Fc-c1Z1c`iDemMH2>{$~Ck%JwC_{&{Ds%XpXF0RPE#*_uqw(khPiX{-=EXon=%gm3%bE z-j~PPN{8K$^KbcHfIwJSF!Fw@{FcxpqgOR}0_Ggpy7`4Wm%TfoB*_zZ z{-fa=Tlvp!Uw4thTETY`QQ13z;}Wm1;Jcg1ms-a~Dkvk&1+O9rza05t_={&)z_Lze z+lWdy#tKCKKGOPQLD zW0;L@ukb|T?|j+8R(mGSCCrZ`?Jp0ZsR_V@`G?qK4-zqEs8;Yk?i8(Bz4OS+i!?^p zEij3{E#alaJEl)AUw$#W|8#2O^)qJoV)V4iS-q^|w0Hw~J)*1DyM#}b-`oSAILPB% z((1Klf(;Yy5c<5PmaM&a@d9_{-h*DcLTm!W6gxB@Sf7vsQz~;TbZLnFRF+Gibk1J+ zpqLz}c{6bW0t9PZWv4n0Wvp>Cdh*YU_KqRAg0;rg_N6V^6e`VCdyB%kSPy3!b{Ov!a+}Q1u+D)&OU<(R&qJ`M7VfL^ZbErN}HK7$;4n6Z62HITZhL8lIr%)6034-pkuti`X zEKYmJH-L{t0Mp!+8<>caDXR)60O)%w?op~EW{%MM4iBL(ixC^4AJzVWwwnkR`|fX; z&qh##cpHlQJ-_tww_lv<;BQu`Mspwq4Zx>aDhR%?x#rB4<7ewkNZeQQPA4nR`#`Yh z!~0{4^}`2aGXn}qMe-JPq0B=b{^^}3lziC?eRNW8g8hC<8}!m6VFy&%S$ZjESPJX zqjh7>YuT)}Tid}dmOnp-YB|BjNk6&@oL{zjvrz@kkG@}Df);xj1kyK6Mm)^5fFKfb z=CY;cgX1BhQ9)x@0Cv0i#Kp%$eXNoBmH2=5ZhcSVXXq)k!7D;;4S~=w>hE9Zd_;!< zq@n1o`=xxG1Yjg4^Eodf_5R#7hnLU1QqQ;)#gal}?qAs=R`^-L> z_4e~%8C!4R^|B0-{>$vFRSVg1c%%HSQ?A}!0$x_I-%r4HW(0l%FcK&qeF%B;Se&3! z`HTy3P!yMxr;)7@xeCGA_u}6>IGd$Pw3&Jfc;t%nDk)to`SSQV`6$~Dw#F;_>1P&f z%NA1yWD96PfaTbho)C__|2XrZis~NI^-UK2t6(shG|#0-=&;VVY=gwkP?9#+h?+rj z-9@2`hpnT6-I+BBwVkQ5`)<`dYymMOHxJK3mN*4EZnA44nWNL1~*7 zNI|Q9)e!+##SU4e+qffQg-_6EgeeA9otKxq$G>|1Pcc;+ao zEtGfuR_-#&dLMB#;JT(=w@Z-!sV{i;Y^>M#eDE`LNde3XUBSmuowN2y06t_)ChwtCQW(iw<0B}O z-xQADB5NhX^Sqvtsmvq`g-YP^5u!@3bGF(Tk@5)Pr-~RlpYK>XHMT7ri1@M1x6nml%0m)M~g%tCt;mGTiCUY^M#oiw0KR!GAkwZ)?c(F~wn&I~DSiJryo$(W2t0Ti zI_z|7%fYiEM|$wqu1iQTf@$g=Gj|?`u+NfIDb2?G+#J$AZuP@Q^$Yrlvu7DBtnP%s zIRGcatzVLVD zcUzM^(+$-a*BHXbrj|>Eg}Im<7o}=F3#Q*p+4smeI2W$(UkrIdOxD?$RdV3K= z!Pxj)XX0Nt3qtB1%11Vsina|Ld@61|A{3OO2}B3N|D8h}zsZG02EQ2sM)Jg(5$&?n zH5BaY5P-#6`}hwTKjT|AzyO7TMRYvzH}^^_ehCN&7Yc7B!FPQGGo<&}C-4%oIsIYk z+)u#qi_l^@BJ516Cg*tLpue2AjWn}Wh1NBOvuz(hz3wY;2R~>k=^aBo#Mh2-b+jy! zpfw0k86XU6JJm>F3A`a#Aqy)jL_-%ciVQF$A@bJU(=&Su!)#OsLQK=<4|PGM=>Pug z8(tqA3IPBcD`=xvQt&}tLt`3(9~dKoSpV$*)c~n8SG=zwGt$nhnffDQAF$E?X0kog zF0B&-$nb!O@Pc$@9LE?A$=+#wRRhC%qsTER2>-TUPSnI0Stv6X|MEhYVI6AruNBhx z-xF;vAD(iY|7`5m{YjFO9ofWp=a-Jlk~}2DNUhrwSo%AX6qw>Il6L0s)177Y7uN3f zk|XaG6KT8xh796AsjLcjUoBkP+S)qC^+Ul(6PC{3>(!zS4hjO$_{KP7A%K94@#Y@t zUkyNW8LUbS(4HV+- z;#%nk%sRYG4D{7y8`PJenv15G-wiPVBX1PjUk;nBF+Lj*(&2IMU3d(Qc6_W^;z`Me z8l|T`RkMs?gPZBkyQFROgDOLD7M!iik=Sp$pXLB77IBS0Frn{m3X-#|B4FhS5bD~* zOTc;b^6I1FQH>t!MzYPRg0My}wB$J!0buE`p;;0D-OmUaSy9J@Gr+ zG`dChQL%)22+Fcu)bT7@x8}EXRwI^KzHk>>jFquv0IPao845)tRPj{5yG)+NcMV|S zMA+iJhw@**z`jdry8dL!&uzFF+z~>V-;r6NC0p`DSGch@5ql-+CA2n``-E5dVMP&`pDm9QjXtKH_rPM)ue*-2i*`xN3zRyB4s^sOz21#$vdJJ%)Z0$dW-OZkzUOx5sW?*4J9c0Pa>Ry2 zM zt$$B)yIjxde(;?-I3B_PVOEE~Wb)!Rs%ILUbmAYLM-FMu55FjgzW}eg9?WNwN8XSd z<#!x*9U}uF73yE3lgpyF#@(qv_gKWx_+cG`oQtWspBpBJ=S~=Dbi$FtfQ>vbkMz4@ z#&^NaBq+X4OyEl$mgp`)Gzx?sS#}rYyns9n2dg$9?m{yt?2#UWfNA2)^}rm$1f6}lEA+pp zeBg{diEh?)F?#T`TImaxB3)j}CthAs(3hs*)a(OH17MA&8G=Uc3ldCXr^*Nx*9VMLLaCbiR17|!Z zJiAH=;U0qmP%fqsFEMn7GT`;*QzP~WkNlc*O~MJFXV-VE2*KoCn8>Rcqw>t=i!_|wN?#009WRY4?~H%?NRj>ONPfSreERSdwE?ISs^bm}z_mWq z_M||h*eccrq;NjLT0C_i^aW59`@PxW*l}<&W}(&lumoHjJbJRf8a2wBm79)H$=t}% z+Yo8BF~MMwp%j;>yo_5o;k@K>qpLCcnpDM4KO=wJ zx}P^%Txh$HVtD673oY^O%NElxzm`tSYlTdADD~F+y6i~NHGA?QWp20ORKuqe+u=Qp zwE}ABjegR@QVyl4?aJzL5s8jk*rnpF9Sn=JWU}C$?@ZgliB6pS!%L|RKq=zF-VGT=3N6sJ>=&QOaK4u$(#hWQ{9bYywmf{~ z;twAwH6pj@+tEB<^ZMH~6C%?g-_Y5&SP*>LsD5t~Js(W<19zG1)^ex=8~UjuTeA)0 zL%tmaP3H+UM7T!$p!5g7CciS8E|?&5H!Vl}LTQ05P(yZV+$Tf4!(L4hSGw+z5SiGX z{W<-=qMxXOO<47zr$A5-gI}4A^7-q51e#_@zu0xXG#Nja{QWx-RGJbAkJdqcg0FQk zl{sfLDgwdQUq3_o9m074ioj{-zC-5<9AH(08~Iz(-6tUD1NJza0%2BQv7 zXb@=DgiGjXKzN{H1w%-3aou}0JQkch1!yn4JaK*x#pI;SuHJImpBLwS=C>+QX`476(F@@+d0BfS& z5Ls&nqgcIT8Z3s`L_wqpL?Hpv?E_l#N}Jntr+r@Na1pTjObEQsJE$As(5({bQ-MgT4W&N}kZBJdHUir!-3#)r%NskvhLhcNs=pJWl`rV(p1iLZs2|PRSScj+ z&($!pnE603zH{`&_t$f|Z-}x8%6f)F*Vm!YakRklCU+cdUdO9o2HBhOKaYrVR*p&yk z!H8b`n}(k#j&Ws}fl=%(`Y2dn4Jf754dVS#-d$q}UwlYDbLP6gyMkf_Su?F85 z=9K>8{&*=T33X>jU6z6Wy}lq%IDuaTC;XY zA*+Zy5Ju$Z!(-3MF#QWDu*o2|kLdBBS*vrcIg*5(eH2$t^zf2-9gpo7QJxsHYAqPO zOPwRT(NV~pSG&V$Xx+@}m+ySpYCIqMQ(g(iIUj#={lJ<-GKjfuJ=WC?h48_1ILtr- zW>hd1aPM3G{DGF!pux~TAyeINGu7OoKo8bf60%F1DF;%2tmcXkw>4$i<)5tsjThzo zmrei2uL=nQK*I?Oe7Gkt=v~ux_I!0RC&{O=Z(`Pq{p6u2IxI-nxxkE zAcYK3IO~y^aU{P0nHM0B@V69SJelgc`M#qXmD-mIbJEE{+ zZs2UWrbYJfICyeQHQX77RuinBkNbB34k}G*J@&o~$7}`A{h~X6>@1h2DIn)0u?rXY zJC*2sL4ODY?M|zcYDmA4PO#d`l+(1YhP?XM{@P(8`9x^kkKGycr=u)k#x+>3jSfAc zv|o?F>tgB##RmwvU!axE3^qR?#1LLC;36Rcd>I9SO!>)_Y`en|eLJ{e)ftB2ftW&O zg6hXv!BIv>X>LPEIh;ZK*JpM$`1bIjat2iDbOOo80F4Fu1J$l>!I|K_jIJZ!e1P`XXg z?w2_yQ#K_qzwQx7!c(}yVOq7=8G@=z4Q~w% zr|T*fO>}4kzY&-pMjT*A)mxok5%{QCc6joGh1ZmwjjcUJt}9@QpVTZ=_KX%O$Gx$s zTkriIRL3PQ3##b#qZq4~Cp|GpxUnI;d+_mscn9J(AtBrTp~`}AYj6#Lsa^lM&|@yc z&}FxJ`8I^CU5-i-GhhFC_(w(I#Mc)!*t%uvSF|t~3DC@MNp{x~|Qs zINjHIgvSp1t>MhfxWPKr%%3$g=!#7b+$S@-#$Fw@oAhg z-xK8bk$)gc5;9GIqxEsrz{6yd=offX$~Gc7;nyp!a}rSUadQwt!$sRRkvHJC5=*=ihMrtS zFuRCiSQj4BiT@&`a94ku8#*N3zJEO(m>RP+hCwUKZW22$=k6<=N`&3h{AEBhy{~C?ZI|!+Xtj~1J8IN!9LXEin))+i<#TH92UBX-?@W=f+o)7 z(ppHahD1Sai|iq*LU;;}CvPGpsn5bCE&@R)cYVZ+NCirDtSgjsl@+nV=(nR)ZQ}$m z3SML`r=|kI!leyZrv&7^-q3vHs@2X*Wmo;S4)r&Uq}P3}%VQ=m%J3j*<1os(J?VYH zr|_@DAC)?}hP~aGzzN8mpTl&j&}r!TjE^FuIzC$+^?dSVw_0MOWH};WN&!0+67lLH0BTJ^yK+?3irr0tHD->oxNAe=A+YXqAy6s9F(bw!}>xU`Jc^8wKuQe?nf|O zyLN|wqKgRMkMu*C0zRhy=8lKU?h{d$$|nSGBf3b)t_BFtat< zn9r=opM`PE0dypD_vr7di+=}WPysSw>iOsNv`D+zs1h(o3M^mHRZ(~ z2NH%SWV>TOy=%5??g!eBUOJ# zte$%90xIP44f#+qvK>3?T$*e0joUM9i?}|J`?R?>YSeh7=OV>e(Np#@gT&AX(p6#ka(C zn*7W)^^Gu%S_TG(ZMb<<2U)F8+-AqGNmmNa+WomadvLg`_BpszOaEr|Bb(J{&J#Z3 zPU%|ssG_1Ru`pS=rD?^OM*P8^59ouv;oW?#x>cnqYJ#OF&zU4@&p%e9ua}KrvVnws zI)o^(K&?#dkZohL`N6y9a0zvBgR|rLEt>_}-2-aQ?(7%*{1325<%5EENsb5z#)k1! zP9z!0lJCUZy^E!J^o32%GBB^ABwMRmL9`?{D}RfMa_sP4!~3K4f#xY{A{oys=Od|~ z!eUZZcKBl1=-%Et2~=k0VQ2iK`rdhNHdL{tYB7U~cTK@9<@^L3b51F)F5m4C3nEEMWG*OovkMr8meQe;PoaD*3$dD zX9aTW8>RNCCn=Y@-`Q#Opv!OFdNAmrv%yf9Mmdi~$0y3W(j>PNNy)6?&#yC0jCCg&|~ zswM-o^_2gU3YilR}o6Mi6-kZs`TT<1PI*jOF7WYW9#5_%U4&O2StXgw( zTQ-yJ9O%dq%8AY(F-F$QjACPGJw5+d44<oe_p*(uJq?SLS6+C~K>J>3w5yMbV(RE`Ojg1elNaekmb95&zIe6zy!!Dy-~Ts| z)ka`nR@gA!>;y-MYj@homb-Z@o z+ZnstkkNI#N;RUP%?t->btCa`Rne-PzWveap{DN9QVV)~+1SRiVCo`^{|u}Nn47!& z?CJ}~rUcAy+hWTZuYLc}(wFVq%%JAg@w+#?ME(ntuzd=RDil0uQ)K8=rNxs;w8VT2 zBAsvS$jK#>=2`o*WU9~O^j&Y#+MHJ%$7HJPtAJ9-PJASp=g4SBv5dI?`TXJ*c95%< z&$msoyPP7@SJwOF=&5Y}>$%?=`isWyJwiP_p=f!T0M&1wFQ;lRM_g-*?gy)>X_wDi z_4MnSu(AKX!srQldD{C}Iz&j&>AP38x%n4X?j@~G_#`zq3-jp3vZX?u{OikyyN89N z*Q9-*bi=r*scpKq=4{OUYt2P{rfU7E%bL#&leY3&u|;>IuN2)#;Iq5D^M9KA>aeQ1 zuiJyINT;Nq0MUl&*!QJ(fMnrlVXSS_}-PEC6 z)O&T^-Zk<^1EgUkrSr=VvX2SULdacw0xRHo!engU9BEm#xwhWm>PWJgi^p&aN%P7N z@s?`SJ_M9@SxZ&Er_Q1xTR5Bk{yI_e2T|kmQ#itebmcI>ekQ7%p$c{BBcT(G{jxOa z)5AG9;#~S%ahi16`s!%L2$kbwr|5%29I8v9Yy~F<)J*cy#QinCfN;BeCDkDb#eJC= z4gMEfTE2mo2eb5N+->9Y0ZE&r3%M^a2tIM$5NGhwEbG#U zQ6cyOlN5Z{0Xjymk9i}sdB5WYD{Nn^)*NkZR!UCu%}L8u%t=jaCddpC*XX|s+mDY| z+hw4J!tN>w?Xf@qF|w9fu&_LM;Mj=GIXQxUTc^?MYidRfM6wkm^Vjbm2|VT;Uf={@uh zX@1%Dk3o4`qNRDlmoxcnUXrRa(6(^37jMHkf?Ed0WgY_sYxgJ1`3Qq3BmLds90=>I5e1neFIWEhb$7}9z3RjzZ=i(y(c8pE+l^ zw~Ww7x})5#Aw2vp6FsS6OsxxSEJLy3w$#Twr+jpQj&Jao9ignUz0^d-O%v$*m9A}N zJf}LAh;{moQe0n70c-(~O$*SV#A`Ns{jvPt_L1@IscA~dHrcv4neF!@zE!ur zuqCrpPKk(=ZHdfV&9u$T?kkaYoVYyI^LGrkern;9gPs(r`?2#YN(u^XcBloX*;;ci z2#DV)X=i4#dIsCtu2r^d9}XC{lxsN%uD|cfy~9toH%o4z`o#UyImw!d_wLd3Sn+n% z#Un~`?KnZnFhm%eD4!6Qb^4d2VTsMQt-Mgaw#0Lh{pa`3{h6FRLdX zHX(4!8cMo#W}=v7+g2@R!>stfi;OqOWRFiI{MjWcT+zv(0-kmana<6_D_zPS%b-Xn z`jvX;@cL)XUNS!AfO#KSe+n8S6O(T%@_M6JJ7btTPWQY|l73;b-x>DC-KROLuqRNP z(=L@4d?>G+{;gH-X|k-rHzatt%SwHakpTy1)pB?n7P%)ENiX@CNW-N$N1HP%&AQSY zS*^1B>zO}UQs9c}Px#BF+iY_Cd~_ZvQq4J>=vPgn)V;Bp|Js}!kIx_tb}eRf?MC%2 zm4ay{$p;+NCA_*6U+$Q_`m0~H$` z6&Wd4Rk#6AcA`2y-2Xx)+m@4WBu{kzqh8$=22S#1`FKRqMO4vUwrThfs!`_5(@Y$&|BjUCO$ zcW`{N9C!L$0UO?vgzs8JZY7V6ix>YnkXqe-N6tI|J3@?!BQ+?HuPL zg;x#V)%c!i$a+T+|BL(aH#Xv`gBu$8Vhh-dZTxHscmym8>NmwZJIBm9eyCl-IGj_E zb6+|3S5kV~1u0en8qTrx=nF>(0?%W$Me!FR$Q0f8m72s z*%xUqAgrj-{2YFS8-34}Xi(f4fj}eJ+*$mAM%w2)TVD9gJ>ahq`niE7_E(gepS}(~ z67#CpZ~j(f6W)}Qdq&j7+>OT5{@zLZ8@$Gd(mI<;WK)iY=3?&Q^!QAL&k@-fkwvj) z3G>jE9I-pHp9)Xo?)zl^;Ke{l2Qk|;#a|>E&f91jPE8eN@kSn8%07G9cy-5tA(ws3 z9yxZ*m`5LV6dnoOcr1Ss>`JPWawEgmYWj~*50BdS$^;?=?k#-p@F@H*JhR68R^B{B zM&DDNN!&voQjur+KwwH#zkh-IBA34WxsI#m3A zaJ%Q#N0HUxXVLN8KGM`Bq_&OsU=xa4;e0k!U5#v45Iww6K~C#L3qca0q5Nj7$B1N% z_;9Y-TYSsKhm&3Flizl6-->eB#~ek4(&O**p9?)BZf&8!ZQV*Qm|tsMZL-&aFOc8K zKhD%GM+(>nP0UF)o?zdywOJXfr@#N`VeR_E#VQt=TfXTI7>G&lF@H|HV5|-Jr^xQ( z_TSfLENvY1;!y!VJ(7#BBnG(tX!LOrle!xlbENye=%eHO7S%p3ZCu@%juM3x%zdN9 zLToN0u5TAWk!<={hk%%Wome*Tl!R~jSxC~K^-anNX|FhO7^sNeV_d}TyL)PUvZIB& zJ&i+-wd=-S;U+eJJcb53x5k%Icb{nn=!Td4-yTHFs+u&Fc5mqN7dyz%+F#hvpXABWpPwlKh=p!Hqk6Ha`WNbyq2FvoNiEy zuTO@11M$Yh^l=*BI4(Q)99@pV)mjfav-FyLw-g@3&f;hL7TygwalRcNO5k+F)pXuI zt~bs@Dj3D$faq&!+nZ3C$(2bVmp3s~H^mokWAU4=s$HbWI!w)2C^I;!-_OCyJ8Fq} zv-U>Zt>AgadSBdo^MAP;dgVGCy6*>S+c33#lro`u9D_rKAq z^z3=d7a@zhx&=qUAe~q=7C_9w1o`#^DLgzL4qKJ&evwjAY&T%NB?|X*!LzBckx6p9 zOE)&`g!uF$)Z27)UmK^@#dlXI4QqUmF(*+PH|uLl5d;hf=RJ9~Vr1R=<$7m#jQqvF z_u6Y?gUK;Wzs{}p5sVII*T(uwj`fjsyxn!CEAP`d!%ZcK^US|4*WsG|AmC)lH%iqu zkkvCJ53N@@gjlt_3Ffd903GmXtWi1hc-#BC(Id!%*Iar!Q`-xjvipj15M<#$ooSdo ziwv$Ip736BSQ0JYM&Wa# ztZscXsn~C5ptt-l`PH#Z|6bEP-ciy-;cCq^Milos+5M7~gdK5J_es)BcyZb8Hv#I- zNn^uU3A2GaD@F=T`iq28Y1eR(GwjgOs(+|)}hd$u=c@iLKVrxsr_%gjzX`v^(u+O zVD}m?Q8bS<$E9wmE_rJ?Yjy-WJxb*?!iN=>BuhB#W zZHF0uHo^-RKf+>jGD@^R9{8@WX)rG5E6Z8UIymk| z?ux-d85n-S;|=7he>eaqgd2QF1!N!$j{~tt#Yty9W6sjOw!#|M;tV zkp|`Hor!D19_G(5Ljbn16n$F~_{sT&J;v12F%0oV{zUJ$iyA!{TJ!_oRCZ=aj%fhAY>Fze)#j=?}dg>y?izU@$3IwgEGqZ(<$R%gvi8Z;2^>M z7;hino`Hdu*2ZI~vLjgAPO}hQR)=1g+K@;_45@N)+`jhCRdJzXfo*chX3HTYax*V} zUJmgX0_jm0D%2GziKLY7Ze&|PQF%=+UD7LX`%qq$Up43|R}tc?V-VY4XqvNg?NZrh;dWLg=~s3G^h?y6ypgKJlF~GZvs7(;D7Mjv*WFEZ zomoB6?7|dQwr=rBNo|Tgn`+8Pst3_Z5#+2zc?pX~>X}XMBeUA}C5JQHQfBy5cbPrk z9*<2M9H$Hnq#T<>(J)px?tkQ|QtN$_w}2Ncf)YQET+e~bI;9I&maJFZH5^ic?_{>m z&F@lhzf1F{v|IR-GY~HrRzm&>iDgtT@nAK#u;Ab@!zDwnY_Hscl!j z3P$~y9~o5Sq`1@T&dNT+aY+Af%Xs5lmb$t-NNN4~8m*gv-oMcGG&OMWorxch{kA@3 zp9IGa4@G-;uwP;mAv|squG@kGH`iqMHt=4RBs0im)Dll|FclVfN+l?+y<}Is;3E1b zWNlHVFi+sR1e9VeqMDlbw`(GoA4cI1hWQW~8L66u3`naV{ip+RNFnSRNz+IEImRl2 z^sA-8S#o$#aIZG;7q%!~e#?{9)}?$ELCW{`=csWSWM1?`2T~|G@~lRaJ+0qQidE+G zeaCw6=@1;3$KD|Q?y}hp0Hcw!2E^|&Pz}8gfG!;sP{y;yP-mz*`Fe_I+qrNMZg2sn6M zFu{#QiEoa~XpSq#5>wi~$5y6FKA)PSV{UVSN!qdl>(|iRDqva_g*nmT)BH;ZHkaD zBNLPI>Y*dAj`~VFgUb8|hGi^t-Rnl~eYjNDQOkm#^(~MmrcHb~!D|UR&0F zSUC%C>!ca36PCZL)qL(*R4|i+KWDm2qBf`3-s~UF;YxOYcG>_4SdDmyMNd|6;YMD; zC$DfiSh2c>9Vl4b^{Pp;uIS};S;6eDpN}njfAgb|ZlnyS@~sg^v3i^#WsC@Z8g?#X|SjTa0we*7kE zJO!8?Vkr#Y;CEzGm{r9M&^R~?{wplg{y)VRy(ZvFGEXLNMK#>l8FYRkH>7PYf^BT; zq6E|u_;W)zvY98UA)|g=*Q8BSOp2oR3KrK<3}C*LPt*#^4ypOhtf4hd@Fs#(*p&so z5QLLQ!<4>iWA~x}JFBa_o`0yNu0L%!!Skx*KOY3B8-SWaVo!7|j5ZbUP(AgPT~Jm| z#V06-+@cpx)^nV{rv1|uL%g@5qo?ovzd~Wgn=EzB@?Suw=quK?o^$X)>ypZ~=ZG3N zYvXW1=Xlp^K?-|=897x4>8?y5)$DYDDhBiuVIc6mMyG683>?HhjeMYa!aGr$q^VtH za~;M|x;b0%MaVv{@2#QU>910oB1#~|+Q(@ZAvL8a_b{37S4S^svAq!~ebJmD#pIlU+L}HPDdY<6! z*PMrAQf-uK{P4;S^-T>{j>X7)-H{yyDe_~>A#k%MjE=20P)_0RQbp=!FiTk%g;KPx z-5rhavXx7jsTloAvDq#^zO+0=ZnfXSfEJovD_k>HaaNL!_+FPrJ-tG0AG$i@2nknV z?1#inDi4d-dooN0CC+WsP~tS>*tXW3cyRLB6Km#Z*M?-6qoWxn=GTaZkACtSS<0Y* z!35$a9IiXubB1drQ3ynV#4)j`T-}UlZr0XCM2$|+?nJ;kJ>Rn8lis-@!a2#Wu?{YO z89KMUh|roDg2`9ka{g&ihgMHNE-9`j$?1Yy37Kyb*}b^NrLvZ#>d=sA@nK~QULg2_ zi`#@$6d%G;2GvS_pH{S|WZJv17z3HpIR0Jm<~VOZ@`a&TYz;TM-9~kv)7h)|uSX8! zr^%sO(-1-t4f0#UTdNifpK@23Qg|x)6!S(qG?Gh@rmN9eKJ;tK<1UghuN8FmuFN+a z)KW?ci!BBIy+-MXncR5lN5P0AY~k&qQJ>}O_;c?FlRmD7+GNV31>SB+>QIkPHg zYs#^goKuN?bsi;%PGRM(I@+V+a6y)XvNzl&Y2PuKQFO}&a#InaAR|Kw?5@s!>40a^ z&82!Yks)B!jHwGP=|Kbw1h}JhW)R4Uc+7i2IcJ3g9=fj_e{pC+gXnqSe)X-PW*isj zeS%d#8I?ZI6&GUo(jDqaqQxDOfMgCT{z`Jt+*F4GX{Km!49LUX87M6588q|9KoD(9 zZoD{Ivj)ixDu1I#@SUErl-rdv;UuDOhiyX63JaKM$6Kk^v;9dYqHhjDgJkkI^O`swAc1xkFvE}d}X!xs0TZ+FGE_!R(;fMyBiBWw%#kN$7v>&U7tY>-^Z!?;imMX zh3yn`to0PL_8YQ3F`o)K60B&$_9XbGiWe7&$*8an)O4-=L{Ncbcu zl%m1QzqWKZ`AxsNy%RBt#U9ZoUs^4@x6OV0?(ti;^JPXKM%xhGg#Dj9A#@uBe!x1~ zyoENCP|}C;<_#cL5eTS_GaPt!7_4V^JWSgHs0_HF)=;BjJ#uGpiENrP6FwOCl3Vae zH99w(f)oa!EDtr@kVVGc^G2pdl{TPn1^Af`k`#=ae<0I=_N!r={7B%nXh0J$!`QGw_u#os19ixZSDtZgy%u_c&Hw_*7=MAsUAZm_p{V<7Ue zvqYrLsn8OMFyiAxJe}1B>hiSe@?#fCRuDP4xA*<27zj^*KFA0JqQ94_#T38&l&dPe z4HQ0FYDs~CgN`Sh?Qn1c2%ouS>tGUiDJ-ewTY^H4!@2te$`Ubs^#>qkFhx%1U3F9` z+H=@#u0{hgT(x|La+EKZ;KDG_(nG`9G&;H! z5&}^JzE!da3C|l+NaKqL5UK`;ou@qYmHGx-Hy^zl9|qIxancMaB+&(6Ca&Q+!!p9? z4;aN1O3LJssppoYlN78K+7AIyekZdnsLnkehWgW&@_msAH&BIrT#w2Wp}q!~L$3N~ z!G=^l4QS$4-;@Wm&0J9btB06LOH3eK4Ix4i%m)^k2v=m|CoD3r%gvVPPto=jtDCM+ zy+j&36q({ccb^^`jHj=4V$&FBQQKsQE<1oY$eTU|X^MjhjI^+h*cp#G^?fu^T~Nf8 zZL3_b4bm_=wIw4ZJnK!S#`sJ0J-leZ>U+;UI1W~VE3%Cg%DZcInj&%(G-a&!Tf9F0L% zlOy^NXtcHBGpS7V+h$Xg4}yYpOe#|Sy}biC>R<9=|9noqYp>c$;v-#>VUqdtq$5iA z_CSJ=aDO1a&bfo_`k%JV{^9>)+spw1duvHJiU9HIz-;$0RqRFahP^WjT|=d(ei10N zRyLrtfa@l88Kyu_!8}25(wP4f$ zeKH#2z;K^ipEVJ{wD|)GK6`%WMaoxLA~kf&dL%dPVcnDtL4~r83L19fLb5I*(6kqD zV@C7=EIt}YAb<9zJOXxomYDPI4~CcoYxLT{4F+U>OQi;mmD)^`OIC9m2HSnTE)!Uj zMY(1NlJ+SQ1VIjYXR1?_<*sB=-aw(K+AHSnz6hrZ+MeOV8_tJo8xEB*ge_GW>_Ka= zSz!&j%Ms+g)j(E9G#F^wy%MdeR&VzXF!8KgfE&2*bVh+*sIAwOu-*Kn6h)})b5?4R z3wZ`09&fZK{bZmvxUF_GN1VI3q8}H}3Hz+935jWY%-mtVq&MGpXHA7EBmbMe3Os|g z5*rBouV{GqFm`j17%_R`yrMpQlQW`J-$k82?ts-=S4y4o>2EgL($L_hcjxsQ4;-PP zfx)*ePzUN5*8xV!Cx5{2kSmfA_CEX7BVU1fjCrF39eyU z^%C6K$qByKIfF_1Ev^T2HB1)iweQc8nY#+ok4~C0{TMs*-2ab95c*hCb8#IUP;`y} zWP=;om;MD#Y`9wbn*-~bIDp2E`(fUZm4Em@F^BO(xV93@-xgV%@CX_=>QZhQykup( ztK_1KmcAAg>{UkA`UzNhW3*ML*(@Vs)0Ag$>G~z1_yl6`Rx&n!27(f-4@y>f!DoQD z$!<~(#Z0l`q~($LEWRMv)8EONW61}TZ0{S^Nesq_m>Q>vzW!x%cPP|1Nuc{CQ5zIJ z)9#mGFW2pK;S_2BH;TC2ng?Wv$E|O0X`R8~qaCUiPgFM1f`uArIkSTht+zQLC{wgU z^lb{3oem7jotUA|@T;MUwbv1DSkF>!#c&L+Qv1KFU?3U*GBm2_9ndbcZh&gly^4AB z+WmTH0htP4-Nxx_$VOI6+E3L)73F0x$LE8)Vjitq)Qzk1D$K~(rw&L}lm0hwsI!QQFzOW6^G5eD5^T>!V>zCS@H2UyBqM&QVgVG)1_&>70# z16Q>l?cA(b!*w=*iG3^i#m;4@ibMOL)X7&u>|v1uY4?ZcR49yWj9=Ali+9Im_Rv05STRRef0B zBC{Uq+nY+8>k}SyoVllZz!}#|a>i@RlDk3Naz1K{^*vBV>vE{`rCg7i6~*5&xX(LA zKRV^Ur(5O;<<|=)H*AR98ahbDAyt78Gxac}&9&z=!h{zOaT>nY&^W&N!$msqjzd27 zlnkgnWZ9&4w{c>i*5~HDr!&i-Fqio^)DbmhGDf%rp~#fAV}+52>#uJv3zPolJ}mO> zPaHOS+CClim6mbp&u>e8VF{v;I>4Y@?!z8|A8lok%EWS!|84xIJf6)IeQ*x3wa`)G0u1{$l7`i zmTByp*UPVy-0Pi0g~$NP)W-0Rf7;6PD@wj=Q0uUrf(>dM&1AyyPCbv7(1P5+;;9&L zCDl`PucH=)yrp{Gvo-kX`YS6Dx348eQ-=coEy3zFg|9f)Z@_g3rx3u*QolFR(#wN3 z1sj)q^{=iPosk6v#VZf_YiKKKEIuP((|Dki^;m@h(R8dF}nMSD@ds@x_LE9 zOrbd2iUIux*XvUB;bqx2q`Iz$dG@Of;)C+LcCY91PM-kif%C=bFk*nNfu7_e@V;gz zDN8e}HDkB{bUzhh0_}4#HvW}>jtC_3)aDd9nq)y@%*tuJE?Mw<15^i%s*fICU{}y$ z@^<+R);5}>fK);EEpUe&Ot^$tRbGTu?n;hMAFKOpj+)d?vZDp8aZ_vZyO+ECitRC) zMfPEPv5ECj}u6_=RU5T#E+S zsqAd_qvRcgp1H*XK8s=s#vd>0&pNdVGwRD7WLcl9&C@B+1J~@nRWy~t1?0GktQnNc zJ@3lZ)O{IqGxjo-{=C6qrZs42VlXua3Rm>l<5_h@6d#Sy)R2`pSWq%&wsn4O1HLxr z#8lpJ-hX1YZhs<4J^%Y;$owGF6jTmyP-fOvF2YT3CFIXQTn+x`oEvjlROb zUJm$h@u>Jqsb~uOCIBXdz}FZ06~+yJ+DP?3BPZdJIcLf@N-7jG+GKFSnEu?k;CtQ27{TH2JA#8tnsIK@c0=Xw!w zhjY%b->3Qq7{joy3MM9FWx!%aAs}%=N&Nr z?RKD|M}T}0hK{A A6951J diff --git a/IDEAS/Resources/Images/Fluid/PVTCollectors/Tcell_coupling.png b/IDEAS/Resources/Images/Fluid/PVTCollectors/Tcell_coupling.png new file mode 100644 index 0000000000000000000000000000000000000000..acbb2f287f144e47dcb137e16de0ec80408f5195 GIT binary patch literal 15153 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 O43ql~Kyd$$3;tigP1Sh- literal 0 HcmV?d00001 From e65cee00e0be4cd7c076232e7e6e6192874e8e44 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Thu, 26 Mar 2026 21:49:32 +0100 Subject: [PATCH 62/86] refactor: merge two ElectricalPV models in one common PV model --- .../Validation/BaseClasses/ElectricalPV.mo | 189 ++++++++++++++++++ .../Validation/BaseClasses/package.order | 1 + .../PVT_UI/BaseClasses/ElectricalPV1.mo | 179 +++++++++++++++++ .../PVT_UI/BaseClasses/package.order | 1 + .../Electrical/PVT_UI_Electrical_DayType1.mo | 27 ++- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 17 +- 6 files changed, 398 insertions(+), 16 deletions(-) create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo new file mode 100644 index 0000000000..cb38c8e03d --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo @@ -0,0 +1,189 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +model ElectricalPV + "Model for PV panels using PV-oriented cell-temperature equations" + + parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; + parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + + Modelica.Units.SI.Temperature T_cell "Cell temperature"; + Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; + Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; + Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity v_wind "Wind speed"; + Modelica.Units.SI.Irradiance G "Total solar irradiance"; + + Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{10,-10}, + {-10,10}}, + rotation=180, + origin={110,0}))); + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, + {-11,-30}}))); + + + Modelica.Blocks.Interfaces.RealInput Gtil "Value of Real input" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,62}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-110,50}))); + Modelica.Blocks.Interfaces.RealInput winSpe "Value of Real input" annotation + (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,0}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-110,-1}))); + Modelica.Blocks.Interfaces.RealInput Tamb "Value of Real input" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,-60}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-110,-50}))); + +protected + final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; + +equation + assert(solarPower.y>=0, "Solar power must be positive"); + T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; + eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + v_wind =winSpe; + eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); + T_cell=Tamb + T_cell_init*eff_heat_loss*eff_wind_loss; + G =Gtil; + T_diff=T_cell-Tref; + + connect(solarPower.y, P) annotation (Line(points={{-12,-40},{-16,-40},{-16,0}, + {110,0}}, color={0,0,127})); + annotation (Dialog(group="Characteristics of the photovoltaic installation"), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Line(points={{49,0},{100,0}}, color={0,0,0}), + Polygon( + points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, + smooth=Smooth.None, + fillColor={205,203,203}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Polygon( + points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{28,27},{40,53},{63,53},{52,27},{28,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{101,36},{123,10}}, + textColor={0,0,127}, + textString="P")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                                                                +This model is an adapted PV-oriented electrical submodel based on the +PVOrientedDCPower model from the MoPED library +(Verleyen et al., 2022). It is included for verification only. +

                                                                +

                                                                +Purpose / verification note: +This submodel is used to demonstrate the bias introduced when applying +PV-only cell‑temperature equations to PVT collectors. Because unglazed +PVT collectors actively extract heat, their cell temperatures are typically +lower than those predicted by PV-based formulations, which leads PV models +to overpredict Tcell and underpredict electrical output. +

                                                                +

                                                                References

                                                                +
                                                                  +
                                                                • +Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). +Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). +Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. +(Source of the MoPED library electrical model). +
                                                                • +
                                                                +", +revisions=" +
                                                                  +
                                                                • +March 11, 2026, by Lone Meertens:
                                                                  +Adapted PV-oriented electrical model from the MoPED library for verification purposes only. +This model is included to demonstrate the impact of using PV-based cell-temperature +equations for PVT collectors. This is for #1473. +
                                                                • +
                                                                +")); +end ElectricalPV; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 691691dfee..ec391afde4 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,3 +1,4 @@ ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation +ElectricalPV diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo new file mode 100644 index 0000000000..2f889fa117 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo @@ -0,0 +1,179 @@ +within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; +model ElectricalPV1 + "Model for PV panels using PV-oriented cell-temperature equations" + + parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" + annotation (Dialog(group="Characteristics of the photovoltaic panel")); + parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; + parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" + annotation (Dialog(group="Characteristics of the photovoltaic installation")); + + Modelica.Units.SI.Temperature T_cell "Cell temperature"; + Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; + Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; + Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; + Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; + Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; + Modelica.Units.SI.Velocity v_wind "Wind speed"; + Modelica.Units.SI.Irradiance G "Total solar irradiance"; + + Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{10,-10}, + {-10,10}}, + rotation=180, + origin={110,0}))); + Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) + "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, + {-11,-30}}))); + +protected + final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; + final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; + final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; + +public + Modelica.Blocks.Interfaces.RealInput Gtil "Value of Real input" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,62}))); + Modelica.Blocks.Interfaces.RealInput winSpe "Value of Real input" annotation + (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,0}))); + Modelica.Blocks.Interfaces.RealInput Tamb "Value of Real input" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-100,-60}))); +equation + assert(solarPower.y>=0, "Solar power must be positive"); + T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; + T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; + eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; + v_wind =winSpe; + eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); + T_cell=Tamb + T_cell_init*eff_heat_loss*eff_wind_loss; + G =Gtil; + T_diff=T_cell-Tref; + + connect(solarPower.y, P) annotation (Line(points={{-12,-40},{-16,-40},{-16,0}, + {110,0}}, color={0,0,127})); + annotation (Dialog(group="Characteristics of the photovoltaic installation"), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Line(points={{-100,0},{-59,0}},color={0,0,0}), + Polygon( + points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, + smooth=Smooth.None, + fillColor={205,203,203}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Polygon( + points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Polygon( + points={{28,27},{40,53},{63,53},{52,27},{28,27}}, + smooth=Smooth.None, + fillColor={6,13,150}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-122,35},{-100,9}}, + textColor={0,0,127}, + textString="P")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                                                                +This model is an adapted PV-oriented electrical submodel based on the +PVOrientedDCPower model from the MoPED library +(Verleyen et al., 2022). It is included for verification only. +

                                                                +

                                                                +Purpose / verification note: +This submodel is used to demonstrate the bias introduced when applying +PV-only cell‑temperature equations to PVT collectors. Because unglazed +PVT collectors actively extract heat, their cell temperatures are typically +lower than those predicted by PV-based formulations, which leads PV models +to overpredict Tcell and underpredict electrical output. +

                                                                +

                                                                References

                                                                +
                                                                  +
                                                                • +Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). +Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). +Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. +(Source of the MoPED library electrical model). +
                                                                • +
                                                                +", +revisions=" +
                                                                  +
                                                                • +March 11, 2026, by Lone Meertens:
                                                                  +Adapted PV-oriented electrical model from the MoPED library for verification purposes only. +This model is included to demonstrate the impact of using PV-based cell-temperature +equations for PVT collectors. This is for #1473. +
                                                                • +
                                                                +")); +end ElectricalPV1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order index 87403ddb12..6059e09b4a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order @@ -1,2 +1,3 @@ ElectricalPV UI_Validation +ElectricalPV1 diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 7f45285f8c..11170ed29f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -31,6 +31,8 @@ model PVT_UI_Electrical_DayType1 columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, {-77,-11}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; + IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, @@ -50,17 +52,9 @@ model PVT_UI_Electrical_DayType1 "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.ElectricalPV ElectricalPV( - P_STC=datPVTCol.P_nominal, - beta=datPVTCol.beta, - eleLosFac=eleLosFac, - n=1, - module_efficiency=datPVTCol.etaEl, - til=0.78539816339745, - azi=0) annotation (Placement(transformation(extent={{-60,-82},{-80,-62}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); - Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - + Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - 273.15) "[°C]" annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - @@ -70,6 +64,15 @@ model PVT_UI_Electrical_DayType1 Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" annotation (Placement(transformation(extent={{-52,8},{-32,28}}))); + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ElectricalPV electricalPV( + P_STC=datPVTCol.P_nominal, + beta=datPVTCol.beta, + eleLosFac=eleLosFac, + n=1, + module_efficiency=datPVTCol.etaEl, + til=0.78539816339745, + azi=0) + annotation (Placement(transformation(extent={{-80,-84},{-60,-64}}))); equation connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, @@ -89,6 +92,10 @@ equation points={{-32,18},{-14,18},{-14,-12},{-10,-12}}, color={255,204,51}, thickness=0.5)); + connect(meaDat.y[2], electricalPV.Gtil); + connect(meaDat.y[10], electricalPV.winSpe); + connect(meaDat.y[12], TAmbKel.Celsius); + connect(TAmbKel.Kelvin, electricalPV.Tamb); annotation ( Documentation(info="

                                                                diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 6cab65cde8..408abdd23a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -19,6 +19,8 @@ model PVT_UN_Electrical Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-11}, {-77,-1}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; + IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, @@ -52,8 +54,8 @@ model PVT_UN_Electrical "[W/m2K]" annotation (Placement(transformation(extent={{9,56},{35,72}}))); Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ElectricalPV - ElectricalPV( + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ElectricalPV + electricalPV( P_STC=datPVTCol.P_nominal, beta=datPVTCol.beta, eleLosFac=eleLosFac, @@ -61,12 +63,12 @@ model PVT_UN_Electrical module_efficiency=datPVTCol.etaEl, til=0.34906585039887, azi=0) annotation (Placement(transformation(extent={{-64,-72},{-84,-54}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=ElectricalPV.P) "[W]" + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" annotation (Placement(transformation(extent={{-53,-68},{-27,-52}}))); Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - 273.15) "[°C]" annotation (Placement(transformation(extent={{-47,44},{-21,60}}))); - Modelica.Blocks.Sources.RealExpression simTcellPV(y=ElectricalPV.T_cell - + Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - 273.15) "[°C]" annotation (Placement(transformation(extent={{-53,-82},{-27,-66}}))); IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= @@ -87,12 +89,15 @@ equation connect(bou.m_flow_in, meaDat.y[3]) annotation (Line(points={{-60,-2},{-60,24},{-71,24}},color={0,0,127})); connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,24},{-60, - 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, - color={0,0,127})); + 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, color={0,0,127})); connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( points={{-18,26},{-14,26},{-14,-2},{-8,-2}}, color={255,204,51}, thickness=0.5)); + connect(meaDat.y[4], electricalPV.Gtil); + connect(meaDat.y[10], electricalPV.winSpe); + connect(meaDat.y[5], TAmbKel.Celsius); + connect(TAmbKel.Kelvin, electricalPV.Tamb); annotation (Documentation(info = "

                                                                This model validates the electrical performance of the From f305f776592b55e645d37e61437c3da69ccf56db Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 09:37:37 +0100 Subject: [PATCH 63/86] refactor: restructure ElectricalPV validation --- .../Validation/BaseClasses/package.order | 3 +- .../PVT_UI/BaseClasses/ElectricalPV.mo | 186 ------------------ .../PVT_UI/BaseClasses/ElectricalPV1.mo | 179 ----------------- .../PVT_UI/BaseClasses/package.order | 2 - .../PVT_UN/BaseClasses/ElectricalPV.mo | 174 ---------------- .../PVT_UN/BaseClasses/package.order | 1 - .../Validation/PVT_UN/package.mo | 4 +- 7 files changed, 4 insertions(+), 545 deletions(-) delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index ec391afde4..27681370a9 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,4 +1,5 @@ +ElectricalPV ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation -ElectricalPV + diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo deleted file mode 100644 index 834096abe7..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV.mo +++ /dev/null @@ -1,186 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; -model ElectricalPV - "Model for PV panels using PV-oriented cell-temperature equations" - - parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at standard conditions (usualy 1000 W/m2)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; - parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - - Modelica.Units.SI.Temperature T_cell "Cell temperature"; - Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; - Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; - Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; - Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; - Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; - Modelica.Units.SI.Velocity v_wind "Wind speed"; - Modelica.Units.SI.Irradiance G "Total solar irradiance"; - - Modelica.Blocks.Math.Add Gtil "Total irradiation on tilted surface" - annotation (Placement(transformation( - extent={{10,-10},{-10,10}}, - rotation=90, - origin={0,10}))); - - Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, - -10},{-120,10}}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) - "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{11,-52}, - {-9,-32}}))); - -protected - final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; - final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; - final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; - -public - outer Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_Typ1_measurements.txt"), - columns=1:25) annotation (Placement(transformation(extent={{92,72},{72,92}}))); - Modelica.Blocks.Sources.RealExpression Gdir(y=meaDat.y[2] - meaDat.y[3]) "[W/m2]" - annotation (Placement(transformation(extent={{-31.5, - 44},{-12.5,60}}))); - Modelica.Blocks.Sources.RealExpression Gdif(y=meaDat.y[3]) "[W/m2]" - annotation (Placement(transformation(extent={{-31.5,58},{-12.5,74}}))); - Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" - annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); - Modelica.Blocks.Sources.RealExpression TAmb(y=meaDat.y[12] + 273.15) "[K]" - annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); -equation - assert(solarPower.y>=0, "Solar power must be positive"); - T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; - T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; - eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - v_wind = winSpe.y; - eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); - T_cell=TAmb.y+T_cell_init*eff_heat_loss*eff_wind_loss; - G =Gtil.y; - T_diff=T_cell-Tref; - - connect(Gdir.y, Gtil.u1) - annotation (Line(points={{-11.55,52},{-6,52},{-6,22}}, color={0,0,127})); - connect(Gdif.y, Gtil.u2) - annotation (Line(points={{-11.55,66},{6,66},{6,22}}, color={0,0,127})); - connect(solarPower.y, P) annotation (Line(points={{-10,-42},{-96,-42},{-96,0}, - {-110,0}}, color={0,0,127})); - annotation (Dialog(group="Characteristics of the photovoltaic installation"), - Icon(coordinateSystem( - preserveAspectRatio=false, - extent={{-100,-100},{100,100}}, - grid={1,1}), graphics={ - Line(points={{-100,0},{-59,0}},color={0,0,0}), - Polygon( - points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, - smooth=Smooth.None, - fillColor={205,203,203}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None, - lineColor={0,0,0}), - Polygon( - points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{28,27},{40,53},{63,53},{52,27},{28,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Text( - extent={{-122,35},{-100,9}}, - textColor={0,0,127}, - textString="P")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

                                                                -This model is an adapted PV-oriented electrical submodel based on the -PVOrientedDCPower model from the MoPED library -(Verleyen et al., 2022). It is included for verification only. -

                                                                -

                                                                -Purpose / verification note: -This submodel is used to demonstrate the bias introduced when applying -PV-only cell‑temperature equations to PVT collectors. Because unglazed -PVT collectors actively extract heat, their cell temperatures are typically -lower than those predicted by PV-based formulations, which leads PV models -to overpredict Tcell and underpredict electrical output. -

                                                                -

                                                                References

                                                                -
                                                                  -
                                                                • -Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). -Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). -Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. -(Source of the MoPED library electrical model). -
                                                                • -
                                                                -", -revisions=" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Adapted PV-oriented electrical model from the MoPED library for verification purposes only. -This model is included to demonstrate the impact of using PV-based cell-temperature -equations for PVT collectors. This is for #1473. -
                                                                • -
                                                                -")); -end ElectricalPV; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo deleted file mode 100644 index 2f889fa117..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/ElectricalPV1.mo +++ /dev/null @@ -1,179 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses; -model ElectricalPV1 - "Model for PV panels using PV-oriented cell-temperature equations" - - parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; - parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - - Modelica.Units.SI.Temperature T_cell "Cell temperature"; - Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; - Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; - Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; - Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; - Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; - Modelica.Units.SI.Velocity v_wind "Wind speed"; - Modelica.Units.SI.Irradiance G "Total solar irradiance"; - - Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{10,-10}, - {-10,10}}, - rotation=180, - origin={110,0}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) - "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, - {-11,-30}}))); - -protected - final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; - final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; - final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; - -public - Modelica.Blocks.Interfaces.RealInput Gtil "Value of Real input" annotation ( - Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=180, - origin={-100,62}))); - Modelica.Blocks.Interfaces.RealInput winSpe "Value of Real input" annotation - (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=180, - origin={-100,0}))); - Modelica.Blocks.Interfaces.RealInput Tamb "Value of Real input" annotation ( - Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=180, - origin={-100,-60}))); -equation - assert(solarPower.y>=0, "Solar power must be positive"); - T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; - T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; - eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - v_wind =winSpe; - eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); - T_cell=Tamb + T_cell_init*eff_heat_loss*eff_wind_loss; - G =Gtil; - T_diff=T_cell-Tref; - - connect(solarPower.y, P) annotation (Line(points={{-12,-40},{-16,-40},{-16,0}, - {110,0}}, color={0,0,127})); - annotation (Dialog(group="Characteristics of the photovoltaic installation"), - Icon(coordinateSystem( - preserveAspectRatio=false, - extent={{-100,-100},{100,100}}, - grid={1,1}), graphics={ - Line(points={{-100,0},{-59,0}},color={0,0,0}), - Polygon( - points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, - smooth=Smooth.None, - fillColor={205,203,203}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None, - lineColor={0,0,0}), - Polygon( - points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{28,27},{40,53},{63,53},{52,27},{28,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Text( - extent={{-122,35},{-100,9}}, - textColor={0,0,127}, - textString="P")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

                                                                -This model is an adapted PV-oriented electrical submodel based on the -PVOrientedDCPower model from the MoPED library -(Verleyen et al., 2022). It is included for verification only. -

                                                                -

                                                                -Purpose / verification note: -This submodel is used to demonstrate the bias introduced when applying -PV-only cell‑temperature equations to PVT collectors. Because unglazed -PVT collectors actively extract heat, their cell temperatures are typically -lower than those predicted by PV-based formulations, which leads PV models -to overpredict Tcell and underpredict electrical output. -

                                                                -

                                                                References

                                                                -
                                                                  -
                                                                • -Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). -Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). -Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. -(Source of the MoPED library electrical model). -
                                                                • -
                                                                -", -revisions=" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Adapted PV-oriented electrical model from the MoPED library for verification purposes only. -This model is included to demonstrate the impact of using PV-based cell-temperature -equations for PVT collectors. This is for #1473. -
                                                                • -
                                                                -")); -end ElectricalPV1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order index 6059e09b4a..6d217287cf 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/package.order @@ -1,3 +1 @@ -ElectricalPV UI_Validation -ElectricalPV1 diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo deleted file mode 100644 index 4f44111a15..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/ElectricalPV.mo +++ /dev/null @@ -1,174 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses; -model ElectricalPV - "Model for PV panels using PV-oriented cell-temperature equations" - - parameter Modelica.Units.SI.Irradiance G_STC=1000 "Irradiance at Standard Conditions (usualy 1000 W/m2)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Power P_STC=370 "Power of one photovoltaic panel at Standard Conditions, usualy equal to power at Maximum Power Point (MPP)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.LinearTemperatureCoefficient beta=-0.0037 "Temperature coefficient of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Modelica.Units.SI.Efficiency eleLosFac=0.14 "Loss factor of the photovoltaic panel(s)" - annotation (Dialog(group="Characteristics of the photovoltaic panel")); - parameter Real n(min=Modelica.Constants.small)=5 "Number of photovoltaic panels in the photovoltaic installation" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Efficiency module_efficiency=0.3 "Module efficiency of the photovoltaic installation"; - parameter Modelica.Units.SI.Angle til=0.785 "Surface tilt of the photovoltaic installation (0°=horizontal, 90°=vertical)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - parameter Modelica.Units.SI.Angle azi=0 "Surface azimuth (0°=south, 90°=west, 180°=north, 270°=east)" - annotation (Dialog(group="Characteristics of the photovoltaic installation")); - - Modelica.Units.SI.Temperature T_cell "Cell temperature"; - Modelica.Units.SI.Temperature T_cell_init "Initial cell temperature"; - Modelica.Units.SI.TemperatureDifference T_diff "Temperature difference between the cell temperature and the reference temperature"; - Modelica.Units.SI.Temperature T_noct_cell_adj "Adjusted nominal operating cell temperature"; - Modelica.Units.SI.Efficiency eff_heat_loss "Heat loss coefficient of the PV panel"; - Modelica.Units.SI.Efficiency eff_wind_loss "Wind loss coefficient of the PV panel"; - Modelica.Units.SI.Velocity v_wind "Wind speed"; - Modelica.Units.SI.Irradiance G "Total solar irradiance"; - - Modelica.Blocks.Interfaces.RealOutput P(quantity="Power", unit="W") "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{-100, - -10},{-120,10}}))); - Modelica.Blocks.Sources.RealExpression solarPower(y=n*P_STC*G/G_STC*(1+beta*T_diff)*(1-eleLosFac)) - "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, - {-11,-30}}))); - -protected - final parameter Modelica.Units.SI.Temperature Tref=25+273 "Reference temperature of the cell"; - final parameter Modelica.Units.SI.Temperature Tnoct=49+273 "Nominal operating cell temperature"; - final parameter Modelica.Units.SI.Velocity wind_init=9.5 "Reference wind speed"; - -public - Modelica.Blocks.Sources.RealExpression winSpe(y=meaDat.y[10]) "[m/s]" - annotation (Placement(transformation(extent={{-79.5,26},{-60.5,42}}))); - Modelica.Blocks.Sources.RealExpression TAmb(y=meaDat.y[12] + 273.15) "[K]" - annotation (Placement(transformation(extent={{-79.5,12},{-60.5,28}}))); - Modelica.Blocks.Sources.RealExpression Gtil(y=meaDat.y[4]) "[W/m2]" - annotation (Placement(transformation(extent={{-79.5,40},{-60.5,56}}))); - outer Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource( - "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements_week1.txt"), - columns=1:25) annotation (Placement(transformation(extent={{80,60},{60,80}}))); -equation - assert(solarPower.y>=0, "Solar power must be positive"); - T_noct_cell_adj=Tnoct+6 "We assume an average distance between the panel and roof of 1.5-2.5 in."; - T_cell_init=G/800*(T_noct_cell_adj-293) "in Kelvin"; - eff_heat_loss = 1-module_efficiency/0.9 "We assume a fixed tau alpha of 0.9"; - v_wind = winSpe.y; - eff_wind_loss = wind_init/(5.7+3.8*0.51*v_wind); - T_cell=TAmb.y+T_cell_init*eff_heat_loss*eff_wind_loss; - G =Gtil.y; - T_diff=T_cell-Tref; - - connect(solarPower.y, P) annotation (Line(points={{-12,-40},{-96,-40},{-96,0}, - {-110,0}}, color={0,0,127})); - annotation (Dialog(group="Characteristics of the photovoltaic installation"), - Icon(coordinateSystem( - preserveAspectRatio=false, - extent={{-100,-100},{100,100}}, - grid={1,1}), graphics={ - Line(points={{-100,0},{-59,0}},color={0,0,0}), - Polygon( - points={{-80,-52},{-32,63},{78,63},{29,-52},{-80,-52}}, - smooth=Smooth.None, - fillColor={205,203,203}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None, - lineColor={0,0,0}), - Polygon( - points={{-69,-45},{-57,-19},{-34,-19},{-45,-45},{-69,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-53,-9},{-41,17},{-18,17},{-29,-9},{-53,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-38,27},{-26,53},{-3,53},{-14,27},{-38,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-36,-45},{-24,-19},{-1,-19},{-12,-45},{-36,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-20,-9},{-8,17},{15,17},{4,-9},{-20,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-5,27},{7,53},{30,53},{19,27},{-5,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{-3,-45},{9,-19},{32,-19},{21,-45},{-3,-45}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{13,-9},{25,17},{48,17},{37,-9},{13,-9}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Polygon( - points={{28,27},{40,53},{63,53},{52,27},{28,27}}, - smooth=Smooth.None, - fillColor={6,13,150}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Text( - extent={{-122,35},{-100,9}}, - textColor={0,0,127}, - textString="P")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

                                                                -This model is an adapted PV-oriented electrical submodel based on the -PVOrientedDCPower model from the MoPED library -(Verleyen et al., 2022). It is included for verification only. -

                                                                -

                                                                -Purpose / verification note: -This submodel is used to demonstrate the bias introduced when applying -PV-only cell‑temperature equations to PVT collectors. Because unglazed -PVT collectors actively extract heat, their cell temperatures are typically -lower than those predicted by PV-based formulations, which leads PV models -to overpredict Tcell and underpredict electrical output. -

                                                                -

                                                                References

                                                                -
                                                                  -
                                                                • -Verleyen, L., Hermans, L., Arroyo, J., & Helsen, L. (2022). -Identifying technically feasible and effective solutions towards Positive Energy Districts (PEDs). -Proceedings of the Urban Energy in a Net Zero World Conference, Glasgow, Scotland. -(Source of the MoPED library electrical model). -
                                                                • -
                                                                -", -revisions=" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Adapted PV-oriented electrical model from the MoPED library for verification purposes only. -This model is included to demonstrate the impact of using PV-based cell-temperature -equations for PVT collectors. This is for #1473. -
                                                                • -
                                                                -")); -end ElectricalPV; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order index 1733918309..f77576e879 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/package.order @@ -1,2 +1 @@ -ElectricalPV UN_Validation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo index 8f66901855..a35bcc28fd 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/package.mo @@ -25,11 +25,11 @@ The package includes two models:

                                                                • -Thermal: +Thermal: Validates thermal output using the quasi-dynamic ISO 9806:2017 formulation.
                                                                • -Electrical: +Electrical: Validates electrical output using the PVWatts V5 formulation.
                                                                From 78f56b9469d2e80884ed5f683b79e34aa69b9edd Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 11:33:16 +0100 Subject: [PATCH 64/86] refactor: PVTCollectorValidation UI and UN extend from partial type --- .../BaseClasses/PVTCollectorValidationUI.mo | 325 ++++++++++++++++++ .../PVTCollectors/BaseClasses/package.order | 1 + .../BaseClasses/PVTCollectorValidation.mo | 268 +++++++++++++++ .../BaseClasses/PVT_UI_Electrical_DayType1.mo | 161 +++++++++ .../BaseClasses/PVT_UN_Electrical.mo | 36 ++ .../PartialPVTCollectorValidation.mo | 28 ++ .../Validation/BaseClasses/package.order | 7 +- .../Electrical/PVT_UI_Electrical_DayType1.mo | 42 ++- .../PVT_UI/PVTCollectorValidation.mo | 33 +- .../PVT_UN/PVTCollectorValidation.mo | 31 +- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 3 +- 11 files changed, 864 insertions(+), 71 deletions(-) create mode 100644 IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo create mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo new file mode 100644 index 0000000000..a2ccab51bd --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo @@ -0,0 +1,325 @@ +within IDEAS.Fluid.PVTCollectors.BaseClasses; +model PVTCollectorValidationUI + extends Validation.BaseClasses.PartialPVTCollectorValidation + ( + eleLosFac = 0.09); + + // Parameters + Modelica.Units.SI.Velocity winSpeTil "Effective wind speed normal to collector plane"; + + // Ouput connectors + outer Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource("modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), + columns=1:25) annotation (Placement(transformation(extent={{26,68}, + {6,88}}))); + + replaceable IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain solGaiStc( + redeclare final package Medium = Medium, + final nSeg=nSeg, + final incAngDat=per.incAngDat, + final incAngModDat=per.incAngModDat, + final iamDiff=per.IAMDiff, + final eta0=per.eta0, + final use_shaCoe_in=use_shaCoe_in, + final shaCoe=shaCoe, + final A_c=ATot_internal) + "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation + heaLosStc( + redeclare final package Medium = Medium, + final nSeg=nSeg, + final a1=per.a1, + final a2=per.a2, + final a3=per.a3, + final a4=per.a4, + final a6=per.a6, + final a7=per.a7, + final a8=per.a8, + final A_c=ATot_internal) + "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( + final nSeg = nSeg, + final A_c = ATot_internal, + final eleLosFac = eleLosFac, + final beta = per.beta, + final P_nominal = per.P_nominal, + final A = per.A, + final eta0 = per.eta0, + final tauAlpEff = tauAlpEff, + final a1 = per.a1, + final etaEl = per.etaEl) + "Calculates the electrical power output of the PVT model" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + + Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) + "[W/m2]" annotation (Placement(transformation(extent={{-49.5, + 82},{-30.5,98}}))); + Modelica.Blocks.Math.Gain degToRad(k=Modelica.Constants.pi/180) annotation (Placement(transformation( + extent={{-5,-5},{5,5}}, + rotation=270, + origin={-40,60}))); + Modelica.Blocks.Sources.RealExpression winSpe(y=(meaDat.y[10])) "[W/m2]" + annotation (Placement(transformation(extent={{-55.5,12},{-36.5,28}}))); + Modelica.Blocks.Sources.RealExpression I_tot(y=(meaDat.y[2])) "[W/m2]" + annotation (Placement(transformation(extent={{-55.5,2},{-36.5,18}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel annotation (Placement(transformation(extent={{-45,23}, + {-35,33}}))); + Modelica.Blocks.Sources.RealExpression rH(y=(meaDat.y[8])) + "Relative humidity [%]" + annotation (Placement(transformation(extent={{-93.5,-82},{-74.5,-66}}))); + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.LongWaveRadiation + longWaveRad(final til=til) + annotation (Placement(transformation(extent={{-58,-66},{-38,-46}}))); + Modelica.Blocks.Sources.RealExpression Tamb(y=(meaDat.y[12] + 273.15)) "[K]" + annotation (Placement(transformation(extent={{-93.5,-94},{-74.5,-78}}))); + Modelica.Blocks.Sources.RealExpression patm(y=(meaDat.y[9])) "[bar]" + annotation (Placement(transformation(extent={{-93.5,-70},{-74.5,-54}}))); + Modelica.Blocks.Sources.RealExpression Ediff(y=(meaDat.y[3])) "[W/m2]" + annotation (Placement(transformation(extent={{-93.5,-58},{-74.5,-42}}))); + Modelica.Blocks.Sources.RealExpression Eglob(y=(meaDat.y[2])) "[W/m2]" + annotation (Placement(transformation(extent={{-93.5,-46},{-74.5,-30}}))); + Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + +equation + // Compute plane wind speed (using inherited azi/til and connected weaBus): + winSpeTil = winSpe.y; + // Assign electrical and thermal outputs + Pel = eleGen.Pel; + Qth = sum(QGai.Q_flow + QLos.Q_flow); + + // Compute thermal power per segment + for i in 1:nSeg loop + qThSeg[i] = (QGai[i].Q_flow + QLos[i].Q_flow) / (ATot_internal / nSeg); + end for; + + heaLosStc.winSpePla = winSpeTil; + + connect(shaCoe_internal, solGaiStc.shaCoe_in); + connect(shaCoe_in, solGaiStc.shaCoe_in) annotation (Line( + points={{-120,40},{-40,40},{-40,45},{-22,45}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heaLosStc.TFlu, temSen.T) annotation (Line( + points={{-22,14},{-30,14},{-30,-20},{-11,-20}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heaLosStc.QLos_flow, QLos.Q_flow) annotation (Line( + points={{1,20},{26,20},{26,20},{50,20}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(solGaiStc.QSol_flow, QGai.Q_flow) annotation (Line( + points={{1,50},{50,50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(temSen.T, solGaiStc.TFlu) annotation (Line( + points={{-11,-20},{-30,-20},{-30,42},{-22,42}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(solGaiStc.HDirTil, Qdir.y) annotation (Line(points={{-22,52},{-26,52}, + {-26,90},{-29.55,90}}, color={0,0,127})); + connect(solGaiStc.incAng, degToRad.y) annotation (Line(points={{-22,48},{-40,48},{-40,54.5}}, color={0,0,127})); + connect(heaLosStc.TEnv, TAmbKel.Kelvin) annotation (Line(points={{-22,26},{-34,26},{-34,28},{-34.5,28}}, + color={0,0,127})); + connect(longWaveRad.rH, rH.y) annotation (Line(points={{-60,-60.4},{-70,-60.4}, + {-70,-74},{-73.55,-74}}, color={0,0,127})); + connect(Tamb.y, longWaveRad.Tamb) annotation (Line(points={{-73.55,-86},{-68, + -86},{-68,-64.8},{-60,-64.8}}, color={0,0,127})); + connect(patm.y, longWaveRad.patm) annotation (Line(points={{-73.55,-62},{-72, + -62},{-72,-56},{-60,-56}}, color={0,0,127})); + connect(Ediff.y, longWaveRad.Edif_h) annotation (Line(points={{-73.55,-50},{ + -73.55,-51.6},{-60,-51.6}}, color={0,0,127})); + connect(Eglob.y, longWaveRad.Eglobh_h) annotation (Line(points={{-73.55,-38}, + {-68,-38},{-68,-47.2},{-60,-47.2}}, color={0,0,127})); + connect(heaLosStc.HGloTil, I_tot.y) annotation (Line(points={{-22,18},{-32,18}, + {-32,10},{-35.55,10}}, color={0,0,127})); + connect(heaLosStc.HHorIR, longWaveRad.lonRad) annotation (Line(points={{-22, + 20},{-26,20},{-26,-55.9},{-36.3,-55.9}}, color={0,0,127})); + connect(meaDat.y[5], degToRad.u) annotation (Line(points={{5,78},{-40,78},{-40,66}}, color={0,0,127})); + connect(TAmbKel.Celsius, meaDat.y[12]) annotation (Line(points={{-46,28},{-68, + 28},{-68,78},{5,78}}, color={0,0,127})); + connect(solGaiStc.HSkyDifTil, meaDat.y[3]) annotation (Line(points={{-22,58},{ + -24,58},{-24,78},{5,78}}, color={0,0,127})); + connect(temSen.T, eleGen.Tflu) annotation (Line(points={{-11,-20},{-30,-20},{-30, + -64},{-22,-64}}, color={0,0,127})); + connect(Eglob.y, eleGen.HGloTil) annotation (Line(points={{-73.55,-38},{-32,-38}, + {-32,-76},{-22,-76}}, color={0,0,127})); + connect(qThSegExp.y,eleGen.Qth) annotation (Line( + points={{-39,-90},{-30,-90},{-30,-70},{-22,-70}}, + color={0,0,127})); + annotation ( + defaultComponentName="pvtCol", + Documentation(info=" +

                                                                +Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 +quasi-dynamic thermal method with integrated electrical coupling. +Discretizes the collector into segments, computes heat loss and gain per ISO 9806, +and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters. +

                                                                +

                                                                Extends

                                                                + +

                                                                Submodel References

                                                                + +

                                                                Implementation Notes

                                                                +

                                                                +This validation model exclusively relies on measurement data provided by the +CombiTimeTable meaDat. However, because it extends +IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector and to limit +the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 +remains instantiated and connected to the inherited weaBus. The +reader is retained only to satisfy the parent class connector and is not +used during simulation: all weather inputs (irradiance, ambient temperature, +wind speed, etc.) are taken from meaDat, so the reader does not +affect the model results. +

                                                                +

                                                                +This model is designed for (unglazed) PVT collectors and discretizes the flow +path into nSeg segments to capture temperature gradients. It is +compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, +and wind speed vary over time. Because direct measurements of long-wave sky +irradiance were found to be faulty, the model instead computes long-wave radiation +using the dedicated LongWaveRadiation model. +

                                                                +

                                                                References

                                                                +
                                                                  +
                                                                • +Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 +
                                                                • +
                                                                • +ISO 9806:2017. Solar thermal collectors — Test methods. ISO. +
                                                                • +
                                                                • +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards. +
                                                                • +
                                                                +", +revisions=" +
                                                                  +
                                                                • +March 11, 2026, by Lone Meertens:
                                                                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                                • +
                                                                • +July 7, 2025, by Lone Meertens:
                                                                  +First implementation PVT model. +This is for #1436. +
                                                                • +
                                                                +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics={ + Rectangle( + extent={{-84,100},{84,-100}}, + lineColor={27,0,55}, + fillColor={26,0,55}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-76,0},{-76,-90},{66,-90},{66,-60},{-64,-60},{-64, + -30},{66,-30},{66,0},{-64,0},{-64,28},{66,28},{66,60},{-64,60},{ + -64,86},{78,86},{78,0},{98,0},{100,0}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Ellipse( + extent={{-24,26},{28,-26}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-6,-6},{8,8}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={-24,30}, + rotation=90), + Line( + points={{-50,0},{-30,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-36,-40},{-20,-24}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-10,0},{10,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={2,-40}, + rotation=90), + Line( + points={{-8,-8},{6,6}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={30,-30}, + rotation=90), + Line( + points={{32,0},{52,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-8,-8},{6,6}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={28,32}, + rotation=180), + Line( + points={{-10,0},{10,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={0,40}, + rotation=90), + Polygon( + points={{72,96},{36,26},{60,34},{48,-24},{88,58},{64,48},{72,96}}, + lineColor={0,0,0}, + fillColor={0,255,0}, + fillPattern=FillPattern.Solid)})); +end PVTCollectorValidationUI; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order index 45a8703789..d5c0e468af 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order @@ -1,3 +1,4 @@ ElectricalPVT ISO9806HeatLoss Examples +PVTCollectorValidationUI diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo new file mode 100644 index 0000000000..d36d8a01cc --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo @@ -0,0 +1,268 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" + extends PartialPVTCollectorValidation( + eleLosFac = 0.07); + + outer Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource( + "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements.txt"), + columns=1:25) annotation (Placement(transformation(extent={{78,70}, + {58,90}}))); + + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation + heaLosStc( + redeclare final package Medium = Medium, + final nSeg=nSeg, + final a1=per.a1, + final a2=per.a2, + final a3=per.a3, + final a4=per.a4, + final a6=per.a6, + final a7=per.a7, + final a8=per.a8, + final A_c=ATot_internal) + "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + + replaceable IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTil + solGaiStc( + redeclare final package Medium = Medium, + final nSeg=nSeg, + final eta0=per.eta0, + final use_shaCoe_in=use_shaCoe_in, + final shaCoe=shaCoe, + final A_c=ATot_internal) + "Calculates the heat from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( + final nSeg = nSeg, + final A_c = ATot_internal, + final eleLosFac = eleLosFac, + final beta = per.beta, + final P_nominal = per.P_nominal, + final A = per.A, + final eta0 = per.eta0, + final tauAlpEff = tauAlpEff, + final a1 = per.a1, + final etaEl = per.etaEl) + "Calculates the electrical power output of the PVT model" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + + Modelica.Blocks.Sources.RealExpression Gglob(y=meaDat.y[4]) "[W/m2]" + annotation (Placement(transformation(extent={{-51.5,66},{-32.5,82}}))); + Modelica.Blocks.Sources.RealExpression globIrrTil(y=(meaDat.y[4])) "[W/m2]" + annotation (Placement(transformation(extent={{-67.5,6},{-48.5,22}}))); + Modelica.Blocks.Sources.RealExpression winSpe(y=(meaDat.y[10])) "[W/m2]" + annotation (Placement(transformation(extent={{-67.5,28},{-48.5,44}}))); + Modelica.Blocks.Sources.RealExpression HHorIr(y=Modelica.Constants.sigma*( + meaDat.y[23] + 273.15)^4) "[W/m2]" + annotation (Placement(transformation(extent={{-67.5,18},{-48.5,34}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{21,77}, + {11,87}}))); + Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + +equation + // Assign electrical and thermal outputs + Pel = eleGen.Pel; + Qth = sum(QGai.Q_flow + QLos.Q_flow); + + // Compute thermal power per segment + for i in 1:nSeg loop + qThSeg[i] = (QGai[i].Q_flow + QLos[i].Q_flow) / (ATot_internal / nSeg); + end for; + + connect(heaLosStc.TFlu, temSen.T) annotation (Line( + points={{-22,14},{-30,14},{-30,-20},{-11,-20}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heaLosStc.QLos_flow, QLos.Q_flow) annotation (Line( + points={{1,20},{26,20},{26,20},{50,20}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(globIrrTil.y, heaLosStc.HGloTil) annotation (Line(points={{-47.55,14}, + {-32,14},{-32,18},{-22,18}}, color={0,0,127})); + connect(winSpe.y, heaLosStc.winSpePla) annotation (Line(points={{-47.55,36},{ + -32,36},{-32,22},{-22,22}}, + color={0,0,127})); + connect(solGaiStc.QSol_flow, QGai.Q_flow) + annotation (Line(points={{1,50},{50,50}}, color={0,0,127})); + connect(temSen.T, solGaiStc.TFlu) annotation (Line(points={{-11,-20},{-30,-20}, + {-30,42},{-22,42}}, color={0,0,127})); + connect(Gglob.y, solGaiStc.HGlob) annotation (Line(points={{-31.55,74},{-30,74}, + {-30,58},{-22,58}}, color={0,0,127})); + connect(eleGen.HGloTil, Gglob.y) annotation (Line(points={{-22,-76},{-30,-76}, + {-30,74},{-31.55,74}}, color={0,0,127})); + connect(eleGen.Tflu, temSen.T) annotation (Line(points={{-22,-64},{-26,-64},{ + -26,-20},{-11,-20}}, color={0,0,127})); + connect(HHorIr.y, heaLosStc.HHorIR) annotation (Line(points={{-47.55,26},{-36, + 26},{-36,20},{-22,20}}, color={0,0,127})); + connect(heaLosStc.TEnv, TFluKel.Kelvin) annotation (Line(points={{-22,26},{-22, + 30},{-36,30},{-36,82},{10.5,82}}, color={0,0,127})); + connect(TFluKel.Celsius, meaDat.y[5]) annotation (Line(points={{22,82},{54,82}, + {54,80},{57,80}}, color={0,0,127})); + connect(qThSegExp.y,eleGen.Qth) annotation (Line( + points={{-39,-70},{-22,-70}}, + color={0,0,127})); + annotation ( + defaultComponentName="pvtCol", + Documentation(info=" +

                                                                +Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling. +Discretizes the collector into segments, computes heat loss and gain per ISO 9806:2017, +and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters. +

                                                                + +

                                                                Extends

                                                                + + +

                                                                Submodel References

                                                                + + +

                                                                Implementation Notes

                                                                +

                                                                This validation model exclusively relies on measurement data provided by the CombiTimeTable meaDat. However, because it extends +IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector +and to limit the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 remains instantiated +and connected to the inherited weaBus. The reader is retained only to satisfy the parent class connector and is not used +during simulation: all weather inputs (irradiance, ambient temperature, wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                                +

                                                                +

                                                                +This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. +It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. +

                                                                + +

                                                                References

                                                                +
                                                                  +
                                                                • +Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 +
                                                                • +
                                                                • +ISO 9806:2017. Solar thermal collectors — Test methods. ISO. +
                                                                • +
                                                                • +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards. +
                                                                • +
                                                                +", +revisions=" +
                                                                  +
                                                                • +March 11, 2026, by Lone Meertens:
                                                                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                                • +
                                                                • +July 7, 2025, by Lone Meertens:
                                                                  +First implementation PVT model. +This is for #1436. +
                                                                • +
                                                                +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics={ + Rectangle( + extent={{-84,100},{84,-100}}, + lineColor={27,0,55}, + fillColor={26,0,55}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-76,0},{-76,-90},{66,-90},{66,-60},{-64,-60},{-64, + -30},{66,-30},{66,0},{-64,0},{-64,28},{66,28},{66,60},{-64,60},{ + -64,86},{78,86},{78,0},{98,0},{100,0}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Ellipse( + extent={{-24,26},{28,-26}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-6,-6},{8,8}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={-24,30}, + rotation=90), + Line( + points={{-50,0},{-30,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-36,-40},{-20,-24}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-10,0},{10,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={2,-40}, + rotation=90), + Line( + points={{-8,-8},{6,6}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={30,-30}, + rotation=90), + Line( + points={{32,0},{52,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-8,-8},{6,6}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={28,32}, + rotation=180), + Line( + points={{-10,0},{10,0}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=1, + origin={0,40}, + rotation=90), + Polygon( + points={{72,96},{36,26},{60,34},{48,-24},{88,58},{64,48},{72,96}}, + lineColor={0,0,0}, + fillColor={0,255,0}, + fillPattern=FillPattern.Solid)})); +end PVTCollectorValidation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo new file mode 100644 index 0000000000..b076ded0b7 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo @@ -0,0 +1,161 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +model PVT_UI_Electrical_DayType1 + "Test model for Unglazed Rear-Insulated PVT Collector" + extends Modelica.Icons.Example; + replaceable package Medium = IDEAS.Media.Water "Medium model"; + replaceable record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation + "Collector parameter record"; + parameter String pvtTyp = "Typ1"; + parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; + parameter Real eleLosFac = 0.09; + parameter Real til = 0.78539816339745; + parameter Real azi = 0; + parameter Real rho = 0.2; + parameter Integer nPanels = 1; + parameter Integer idxTFlu = 13 "Column index for fluid inlet temperature"; + parameter Integer idxMFlow = 17 "Column index for mass flow rate"; + parameter Integer idxGtil = 2 "Column index for global irradiance in collector plane"; + parameter Integer idxWinSpe = 10 "Column index for wind speed"; + parameter Integer idxTAmb = 12 "Column index for ambient temperature"; + parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; + parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; + parameter PVTData datPVTCol + annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); + + replaceable IDEAS.Fluid.PVTCollectors.BaseClasses.PVTCollectorValidationUI pvtCol( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_start, + show_T=true, + azi=0, + til=til, + rho=rho, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTCol, + eleLosFac=eleLosFac) + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + inner Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource(meaFile), + columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, + {-77,-11}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; + + IDEAS.Fluid.Sources.Boundary_pT sou( + redeclare package Medium = Medium, + use_p_in=false, + p = 101325, + nPorts=1) "Outlet for water flow" + annotation (Placement(transformation(extent={{62,-30},{42,-10}}))); + IDEAS.Fluid.Sources.MassFlowSource_T bou( + redeclare package Medium = Medium, + use_m_flow_in=true, + m_flow=0.03, + use_T_in=true, + nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" + annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); + Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[idxMeaPel]) "[W]" + annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); + Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) + "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); + Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" + annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" + annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); + Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); + Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - + 273.15) "[°C]" + annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); + IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Weather data input file" + annotation (Placement(transformation(extent={{-52,8},{-32,28}}))); + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ElectricalPV electricalPV( + P_STC=datPVTCol.P_nominal, + beta=datPVTCol.beta, + eleLosFac=eleLosFac, + n=1, + module_efficiency=datPVTCol.etaEl, + til=til, + azi=azi) + annotation (Placement(transformation(extent={{-80,-84},{-60,-64}}))); +equation + + connect(meaDat.y[idxTFlu],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, + 14},{-60,-4},{-92,-4},{-92,-16},{-88,-16}}, color={0,0,127})); + connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-16},{-76.5, + -16}}, color={0,0,127})); + connect(bou.m_flow_in, meaDat.y[idxMFlow]) + annotation (Line(points={{-60,-12},{-60,14},{-71,14}}, + color={0,0,127})); + connect(bou.ports[1],pvtCol. port_a) + annotation (Line(points={{-38,-20},{-10,-20}}, + color={0,127,255})); + connect(pvtCol.port_b, sou.ports[1]) + annotation (Line(points={{10,-20},{42,-20}}, + color={0,127,255})); + connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( + points={{-32,18},{-14,18},{-14,-12},{-10,-12}}, + color={255,204,51}, + thickness=0.5)); + connect(meaDat.y[idxGtil], electricalPV.Gtil); + connect(meaDat.y[idxWinSpe], electricalPV.winSpe); + connect(meaDat.y[idxTAmb], TAmbKel.Celsius); + connect(TAmbKel.Kelvin, electricalPV.Tamb); + annotation ( + Documentation(info=" +

                                                                +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                +", revisions= +" +
                                                                  +
                                                                • +March 11, 2026, by Lone Meertens:
                                                                  +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added +conversion support.This is for #1473. +
                                                                • +
                                                                • +July 7, 2025, by Lone Meertens:
                                                                  +First implementation PVT model. +This is for #1436. +
                                                                • +
                                                                +"), +__Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos" + "Simulate and plot"), + experiment( + StartTime=18872521.2, + StopTime=18908900.2, + Interval=60, + Tolerance=1e-06, + __Dymola_Algorithm="Cvode"), + Diagram(graphics={ + Rectangle(extent={{8,86},{42,46}}, lineColor={28,108,200}), + Text( + extent={{4,84},{44,66}}, + textColor={28,108,200}, + textStyle={TextStyle.Bold}, + textString="Calculated +UAbsFluid +[W/m2K]"), + Rectangle(extent={{-92,88},{-18,42}}, lineColor={28,108,200}), + Text( + extent={{-90,94},{-24,66}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Left, + textStyle={TextStyle.Bold}, + textString="Measured and simulated +electrical power"), + Rectangle(extent={{-88,-56},{-16,-92}}, lineColor={28,108,200})})); +end PVT_UI_Electrical_DayType1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo new file mode 100644 index 0000000000..2bbdaab1b6 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo @@ -0,0 +1,36 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +model PVT_UN_Electrical + extends PVT_UI_Electrical_DayType1( + replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( + property_T = 293.15, + X_a = 0.43), + redeclare record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, + T_start = 17.086651 + 273.15, + eleLosFac = 0.07, + til = 0.34906585039887, + azi = 0, + idxTFlu = 2, + idxMFlow = 3, + idxGtil = 4, + idxWinSpe = 10, + idxTAmb = 5, + idxMeaPel = 19, + meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_" + week + ".txt", + datPVTCol = datPVTCol); + + parameter String week = "week1"; + + // Redeclare the collector to the UN version + redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_start, + show_T=true, + azi=0, + til=0.34906585039887, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTCol, + eleLosFac=eleLosFac); +end PVT_UN_Electrical; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo new file mode 100644 index 0000000000..c439a34c71 --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo @@ -0,0 +1,28 @@ +within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; +partial model PartialPVTCollectorValidation + "Common base for UI and UN PVT collector validation models" + + extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( + redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); + + parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.07 + "Loss factor of the PV panel(s)" + annotation(Dialog(group="Electrical parameters")); + + parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType collectorType = per.colTyp + "Collector type used to select a default tauAlpEff"; + + parameter Real tauAlpEff(min=0, max=1) = + if collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84 + "Effective transmittance-absorptance product"; + + Modelica.Units.SI.HeatFlux qThSeg[nSeg] + "Thermal power per segment"; + + Modelica.Blocks.Interfaces.RealOutput Pel + "Total electrical power output [W]"; + + Modelica.Blocks.Interfaces.RealOutput Qth + "Total thermal power output [W]"; + +end PartialPVTCollectorValidation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 27681370a9..59ca762813 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,5 +1,8 @@ -ElectricalPV ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation - +ElectricalPV +PVT_UI_Electrical_DayType1 +PVT_UN_Electrical +PartialPVTCollectorValidation +PVTCollectorValidation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 11170ed29f..50c6603b2e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -3,22 +3,34 @@ model PVT_UI_Electrical_DayType1 "Test model for Unglazed Rear-Insulated PVT Collector" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium model"; + replaceable record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation + "Collector parameter record"; parameter String pvtTyp = "Typ1"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09; - - parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol + parameter Real til = 0.78539816339745; + parameter Real azi = 0; + parameter Real rho = 0.2; + parameter Integer nPanels = 1; + parameter Integer idxTFlu = 13 "Column index for fluid inlet temperature"; + parameter Integer idxMFlow = 17 "Column index for mass flow rate"; + parameter Integer idxGtil = 2 "Column index for global irradiance in collector plane"; + parameter Integer idxWinSpe = 10 "Column index for wind speed"; + parameter Integer idxTAmb = 12 "Column index for ambient temperature"; + parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; + parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; + parameter PVTData datPVTCol annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( + replaceable IDEAS.Fluid.PVTCollectors.BaseClasses.PVTCollectorValidationUI pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start = T_start, + T_start=T_start, show_T=true, azi=0, - til = 0.78539816339745, - rho=0.2, + til=til, + rho=rho, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, nPanels=1, per=datPVTCol, @@ -27,7 +39,7 @@ model PVT_UI_Electrical_DayType1 inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt"), + fileName=Modelica.Utilities.Files.loadResource(meaFile), columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, {-77,-11}}))); @@ -46,7 +58,7 @@ model PVT_UI_Electrical_DayType1 use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); - Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[21]) "[W]" + Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[idxMeaPel]) "[W]" annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); @@ -70,16 +82,16 @@ model PVT_UI_Electrical_DayType1 eleLosFac=eleLosFac, n=1, module_efficiency=datPVTCol.etaEl, - til=0.78539816339745, - azi=0) + til=til, + azi=azi) annotation (Placement(transformation(extent={{-80,-84},{-60,-64}}))); equation - connect(meaDat.y[13],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, + connect(meaDat.y[idxTFlu],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, 14},{-60,-4},{-92,-4},{-92,-16},{-88,-16}}, color={0,0,127})); connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-16},{-76.5, -16}}, color={0,0,127})); - connect(bou.m_flow_in, meaDat.y[17]) + connect(bou.m_flow_in, meaDat.y[idxMFlow]) annotation (Line(points={{-60,-12},{-60,14},{-71,14}}, color={0,0,127})); connect(bou.ports[1],pvtCol. port_a) @@ -92,9 +104,9 @@ equation points={{-32,18},{-14,18},{-14,-12},{-10,-12}}, color={255,204,51}, thickness=0.5)); - connect(meaDat.y[2], electricalPV.Gtil); - connect(meaDat.y[10], electricalPV.winSpe); - connect(meaDat.y[12], TAmbKel.Celsius); + connect(meaDat.y[idxGtil], electricalPV.Gtil); + connect(meaDat.y[idxWinSpe], electricalPV.winSpe); + connect(meaDat.y[idxTAmb], TAmbKel.Celsius); connect(TAmbKel.Kelvin, electricalPV.Tamb); annotation ( Documentation(info=" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 7794e0ddd0..81ea5f3e4d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -1,40 +1,21 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; -model PVTCollectorValidation - "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling" - - extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); - - // ===== Parameters ===== - parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.09 - "Loss factor of the PV panel(s)" annotation(Dialog(group="Electrical parameters")); - parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType collectorType = per.colTyp - "Type of collector used to select a proper default value for the effective transmittance-absorptance product (tauAlpEff)"; - - parameter Real tauAlpEff(min=0, max=1) = - if collectorType ==IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84 - "Effective transmittance–absorptance product"; +model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" + extends Validation.BaseClasses.PartialPVTCollectorValidation + ( + eleLosFac = 0.09); + // Parameters Modelica.Units.SI.Velocity winSpeTil "Effective wind speed normal to collector plane"; - Modelica.Units.SI.HeatFlux qThSeg[nSeg] "Thermal power per segment"; // Ouput connectors - // ===== Real Output Connectors ===== outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", fileName=Modelica.Utilities.Files.loadResource("modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), columns=1:25) annotation (Placement(transformation(extent={{26,68}, {6,88}}))); - Modelica.Blocks.Interfaces.RealOutput Pel - "Total electrical power output [W]" - annotation (Placement(transformation(extent={{100,-60},{120,-40}}), - iconTransformation(extent={{100,-60},{120,-40}}))); - Modelica.Blocks.Interfaces.RealOutput Qth "Total thermal power output [W]" - annotation (Placement(transformation(extent={{100,-100},{120,-80}}), - iconTransformation(extent={{100,-100},{120,-80}}))); - IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain solGaiStc( + replaceable IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain solGaiStc( redeclare final package Medium = Medium, final nSeg=nSeg, final incAngDat=per.incAngDat, @@ -170,7 +151,7 @@ equation connect(qThSegExp.y,eleGen.Qth) annotation (Line( points={{-39,-90},{-30,-90},{-30,-70},{-22,-70}}, color={0,0,127})); - annotation ( + annotation ( defaultComponentName="pvtCol", Documentation(info="

                                                                diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index d855b2113c..2a0c980313 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -1,23 +1,8 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVTCollectorValidation - "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" +model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" + extends IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation( + eleLosFac = 0.07); - extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( - redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); - - // ===== Parameters ===== - parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.07 - "Loss factor of the PV panel(s)" annotation(Dialog(group="Electrical parameters")); - parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType collectorType = per.colTyp - "Type of collector used to select a proper default value for the effective transmittance-absorptance product (tauAlpEff)"; - parameter Real tauAlpEff(min=0, max=1) = - if collectorType ==IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84 - "Effective transmittance–absorptance product"; - - Modelica.Units.SI.HeatFlux qThSeg[nSeg] "Thermal power per segment"; - - // Ouput connectors - // ===== Real Output Connectors ===== outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", @@ -25,15 +10,7 @@ model PVTCollectorValidation "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements.txt"), columns=1:25) annotation (Placement(transformation(extent={{78,70}, {58,90}}))); - Modelica.Blocks.Interfaces.RealOutput Pel - "Total electrical power output [W]" - annotation (Placement(transformation(extent={{100,-60},{120,-40}}), - iconTransformation(extent={{100,-60},{120,-40}}))); - Modelica.Blocks.Interfaces.RealOutput Qth "Total thermal power output [W]" - annotation (Placement(transformation(extent={{100,-100},{120,-80}}), - iconTransformation(extent={{100,-100},{120,-80}}))); - // IDEAS components IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation heaLosStc( redeclare final package Medium = Medium, @@ -49,7 +26,7 @@ model PVTCollectorValidation "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTil + replaceable IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTil solGaiStc( redeclare final package Medium = Medium, final nSeg=nSeg, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 408abdd23a..5c4b7d7464 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -11,6 +11,7 @@ model PVT_UN_Electrical parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol annotation (Placement(transformation(extent={{72,-16},{92,4}}))); + inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", @@ -34,7 +35,7 @@ model PVT_UN_Electrical use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-20},{-38,0}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, From e77732d5fa848fe0cec74dc98c98f607e1d8ea42 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 14:34:00 +0100 Subject: [PATCH 65/86] feat: extend all electrical validation from base model --- .../BaseClasses/PVTCollectorValidation.mo | 268 ------------------ .../BaseClasses/PVT_UI_Electrical_DayType1.mo | 161 ----------- .../BaseClasses/PVT_UN_Electrical.mo | 36 --- .../Validation/BaseClasses/package.order | 3 - .../Electrical/PVT_UI_Electrical_DayType1.mo | 55 ++-- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 141 ++------- 6 files changed, 54 insertions(+), 610 deletions(-) delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo delete mode 100644 IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo deleted file mode 100644 index d36d8a01cc..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVTCollectorValidation.mo +++ /dev/null @@ -1,268 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; -model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" - extends PartialPVTCollectorValidation( - eleLosFac = 0.07); - - outer Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource( - "modelica://IDEAS/Resources/Data/Fluid/PvtCollectors/Validation/PVT_UN/PVT_UN_measurements.txt"), - columns=1:25) annotation (Placement(transformation(extent={{78,70}, - {58,90}}))); - - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation - heaLosStc( - redeclare final package Medium = Medium, - final nSeg=nSeg, - final a1=per.a1, - final a2=per.a2, - final a3=per.a3, - final a4=per.a4, - final a6=per.a6, - final a7=per.a7, - final a8=per.a8, - final A_c=ATot_internal) - "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" - annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - - replaceable IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTil - solGaiStc( - redeclare final package Medium = Medium, - final nSeg=nSeg, - final eta0=per.eta0, - final use_shaCoe_in=use_shaCoe_in, - final shaCoe=shaCoe, - final A_c=ATot_internal) - "Calculates the heat from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" - annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( - final nSeg = nSeg, - final A_c = ATot_internal, - final eleLosFac = eleLosFac, - final beta = per.beta, - final P_nominal = per.P_nominal, - final A = per.A, - final eta0 = per.eta0, - final tauAlpEff = tauAlpEff, - final a1 = per.a1, - final etaEl = per.etaEl) - "Calculates the electrical power output of the PVT model" - annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - - Modelica.Blocks.Sources.RealExpression Gglob(y=meaDat.y[4]) "[W/m2]" - annotation (Placement(transformation(extent={{-51.5,66},{-32.5,82}}))); - Modelica.Blocks.Sources.RealExpression globIrrTil(y=(meaDat.y[4])) "[W/m2]" - annotation (Placement(transformation(extent={{-67.5,6},{-48.5,22}}))); - Modelica.Blocks.Sources.RealExpression winSpe(y=(meaDat.y[10])) "[W/m2]" - annotation (Placement(transformation(extent={{-67.5,28},{-48.5,44}}))); - Modelica.Blocks.Sources.RealExpression HHorIr(y=Modelica.Constants.sigma*( - meaDat.y[23] + 273.15)^4) "[W/m2]" - annotation (Placement(transformation(extent={{-67.5,18},{-48.5,34}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{21,77}, - {11,87}}))); - Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) - annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - -equation - // Assign electrical and thermal outputs - Pel = eleGen.Pel; - Qth = sum(QGai.Q_flow + QLos.Q_flow); - - // Compute thermal power per segment - for i in 1:nSeg loop - qThSeg[i] = (QGai[i].Q_flow + QLos[i].Q_flow) / (ATot_internal / nSeg); - end for; - - connect(heaLosStc.TFlu, temSen.T) annotation (Line( - points={{-22,14},{-30,14},{-30,-20},{-11,-20}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(heaLosStc.QLos_flow, QLos.Q_flow) annotation (Line( - points={{1,20},{26,20},{26,20},{50,20}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(globIrrTil.y, heaLosStc.HGloTil) annotation (Line(points={{-47.55,14}, - {-32,14},{-32,18},{-22,18}}, color={0,0,127})); - connect(winSpe.y, heaLosStc.winSpePla) annotation (Line(points={{-47.55,36},{ - -32,36},{-32,22},{-22,22}}, - color={0,0,127})); - connect(solGaiStc.QSol_flow, QGai.Q_flow) - annotation (Line(points={{1,50},{50,50}}, color={0,0,127})); - connect(temSen.T, solGaiStc.TFlu) annotation (Line(points={{-11,-20},{-30,-20}, - {-30,42},{-22,42}}, color={0,0,127})); - connect(Gglob.y, solGaiStc.HGlob) annotation (Line(points={{-31.55,74},{-30,74}, - {-30,58},{-22,58}}, color={0,0,127})); - connect(eleGen.HGloTil, Gglob.y) annotation (Line(points={{-22,-76},{-30,-76}, - {-30,74},{-31.55,74}}, color={0,0,127})); - connect(eleGen.Tflu, temSen.T) annotation (Line(points={{-22,-64},{-26,-64},{ - -26,-20},{-11,-20}}, color={0,0,127})); - connect(HHorIr.y, heaLosStc.HHorIR) annotation (Line(points={{-47.55,26},{-36, - 26},{-36,20},{-22,20}}, color={0,0,127})); - connect(heaLosStc.TEnv, TFluKel.Kelvin) annotation (Line(points={{-22,26},{-22, - 30},{-36,30},{-36,82},{10.5,82}}, color={0,0,127})); - connect(TFluKel.Celsius, meaDat.y[5]) annotation (Line(points={{22,82},{54,82}, - {54,80},{57,80}}, color={0,0,127})); - connect(qThSegExp.y,eleGen.Qth) annotation (Line( - points={{-39,-70},{-22,-70}}, - color={0,0,127})); - annotation ( - defaultComponentName="pvtCol", - Documentation(info=" -

                                                                -Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 quasi-dynamic thermal method with integrated electrical coupling. -Discretizes the collector into segments, computes heat loss and gain per ISO 9806:2017, -and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters. -

                                                                - -

                                                                Extends

                                                                - - -

                                                                Submodel References

                                                                - - -

                                                                Implementation Notes

                                                                -

                                                                This validation model exclusively relies on measurement data provided by the CombiTimeTable meaDat. However, because it extends -IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector -and to limit the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 remains instantiated -and connected to the inherited weaBus. The reader is retained only to satisfy the parent class connector and is not used -during simulation: all weather inputs (irradiance, ambient temperature, wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                                -

                                                                -

                                                                -This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. -It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. -

                                                                - -

                                                                References

                                                                -
                                                                  -
                                                                • -Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 -
                                                                • -
                                                                • -ISO 9806:2017. Solar thermal collectors — Test methods. ISO. -
                                                                • -
                                                                • -Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source -Photovoltaic‑Thermal Collector Modelica Model that Only Needs -Datasheet Parameters. Submitted to -Mathematical and Computer Modelling of Dynamical Systems, -Special Issue on Modelica, FMI, and Open Standards. -
                                                                • -
                                                                -", -revisions=" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                • -
                                                                • -July 7, 2025, by Lone Meertens:
                                                                  -First implementation PVT model. -This is for #1436. -
                                                                • -
                                                                -"), - Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, - 100}}), - graphics={ - Rectangle( - extent={{-84,100},{84,-100}}, - lineColor={27,0,55}, - fillColor={26,0,55}, - fillPattern=FillPattern.Solid), - Line( - points={{-100,0},{-76,0},{-76,-90},{66,-90},{66,-60},{-64,-60},{-64, - -30},{66,-30},{66,0},{-64,0},{-64,28},{66,28},{66,60},{-64,60},{ - -64,86},{78,86},{78,0},{98,0},{100,0}}, - color={0,128,255}, - thickness=1, - smooth=Smooth.None), - Ellipse( - extent={{-24,26},{28,-26}}, - lineColor={255,255,0}, - fillColor={255,255,0}, - fillPattern=FillPattern.Solid), - Line( - points={{-6,-6},{8,8}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={-24,30}, - rotation=90), - Line( - points={{-50,0},{-30,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-36,-40},{-20,-24}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-10,0},{10,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={2,-40}, - rotation=90), - Line( - points={{-8,-8},{6,6}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={30,-30}, - rotation=90), - Line( - points={{32,0},{52,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-8,-8},{6,6}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={28,32}, - rotation=180), - Line( - points={{-10,0},{10,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={0,40}, - rotation=90), - Polygon( - points={{72,96},{36,26},{60,34},{48,-24},{88,58},{64,48},{72,96}}, - lineColor={0,0,0}, - fillColor={0,255,0}, - fillPattern=FillPattern.Solid)})); -end PVTCollectorValidation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo deleted file mode 100644 index b076ded0b7..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UI_Electrical_DayType1.mo +++ /dev/null @@ -1,161 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; -model PVT_UI_Electrical_DayType1 - "Test model for Unglazed Rear-Insulated PVT Collector" - extends Modelica.Icons.Example; - replaceable package Medium = IDEAS.Media.Water "Medium model"; - replaceable record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation - "Collector parameter record"; - parameter String pvtTyp = "Typ1"; - parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; - parameter Real eleLosFac = 0.09; - parameter Real til = 0.78539816339745; - parameter Real azi = 0; - parameter Real rho = 0.2; - parameter Integer nPanels = 1; - parameter Integer idxTFlu = 13 "Column index for fluid inlet temperature"; - parameter Integer idxMFlow = 17 "Column index for mass flow rate"; - parameter Integer idxGtil = 2 "Column index for global irradiance in collector plane"; - parameter Integer idxWinSpe = 10 "Column index for wind speed"; - parameter Integer idxTAmb = 12 "Column index for ambient temperature"; - parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; - parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; - parameter PVTData datPVTCol - annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); - - replaceable IDEAS.Fluid.PVTCollectors.BaseClasses.PVTCollectorValidationUI pvtCol( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=T_start, - show_T=true, - azi=0, - til=til, - rho=rho, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTCol, - eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - inner Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource(meaFile), - columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, - {-77,-11}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; - - IDEAS.Fluid.Sources.Boundary_pT sou( - redeclare package Medium = Medium, - use_p_in=false, - p = 101325, - nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-30},{42,-10}}))); - IDEAS.Fluid.Sources.MassFlowSource_T bou( - redeclare package Medium = Medium, - use_m_flow_in=true, - m_flow=0.03, - use_T_in=true, - nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); - Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[idxMeaPel]) "[W]" - annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); - Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); - Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" - annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); - Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); - Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); - IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= - Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) - "Weather data input file" - annotation (Placement(transformation(extent={{-52,8},{-32,28}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ElectricalPV electricalPV( - P_STC=datPVTCol.P_nominal, - beta=datPVTCol.beta, - eleLosFac=eleLosFac, - n=1, - module_efficiency=datPVTCol.etaEl, - til=til, - azi=azi) - annotation (Placement(transformation(extent={{-80,-84},{-60,-64}}))); -equation - - connect(meaDat.y[idxTFlu],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, - 14},{-60,-4},{-92,-4},{-92,-16},{-88,-16}}, color={0,0,127})); - connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-16},{-76.5, - -16}}, color={0,0,127})); - connect(bou.m_flow_in, meaDat.y[idxMFlow]) - annotation (Line(points={{-60,-12},{-60,14},{-71,14}}, - color={0,0,127})); - connect(bou.ports[1],pvtCol. port_a) - annotation (Line(points={{-38,-20},{-10,-20}}, - color={0,127,255})); - connect(pvtCol.port_b, sou.ports[1]) - annotation (Line(points={{10,-20},{42,-20}}, - color={0,127,255})); - connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( - points={{-32,18},{-14,18},{-14,-12},{-10,-12}}, - color={255,204,51}, - thickness=0.5)); - connect(meaDat.y[idxGtil], electricalPV.Gtil); - connect(meaDat.y[idxWinSpe], electricalPV.winSpe); - connect(meaDat.y[idxTAmb], TAmbKel.Celsius); - connect(TAmbKel.Kelvin, electricalPV.Tamb); - annotation ( - Documentation(info=" -

                                                                -See the documentation of - -IDEAS.Fluid.PVTCollectors.Validation.PVT_UI - -for details on the validation examples and usage. -

                                                                -", revisions= -" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                • -
                                                                • -July 7, 2025, by Lone Meertens:
                                                                  -First implementation PVT model. -This is for #1436. -
                                                                • -
                                                                -"), -__Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos" - "Simulate and plot"), - experiment( - StartTime=18872521.2, - StopTime=18908900.2, - Interval=60, - Tolerance=1e-06, - __Dymola_Algorithm="Cvode"), - Diagram(graphics={ - Rectangle(extent={{8,86},{42,46}}, lineColor={28,108,200}), - Text( - extent={{4,84},{44,66}}, - textColor={28,108,200}, - textStyle={TextStyle.Bold}, - textString="Calculated -UAbsFluid -[W/m2K]"), - Rectangle(extent={{-92,88},{-18,42}}, lineColor={28,108,200}), - Text( - extent={{-90,94},{-24,66}}, - textColor={28,108,200}, - horizontalAlignment=TextAlignment.Left, - textStyle={TextStyle.Bold}, - textString="Measured and simulated -electrical power"), - Rectangle(extent={{-88,-56},{-16,-92}}, lineColor={28,108,200})})); -end PVT_UI_Electrical_DayType1; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo deleted file mode 100644 index 2bbdaab1b6..0000000000 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PVT_UN_Electrical.mo +++ /dev/null @@ -1,36 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; -model PVT_UN_Electrical - extends PVT_UI_Electrical_DayType1( - replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( - property_T = 293.15, - X_a = 0.43), - redeclare record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, - T_start = 17.086651 + 273.15, - eleLosFac = 0.07, - til = 0.34906585039887, - azi = 0, - idxTFlu = 2, - idxMFlow = 3, - idxGtil = 4, - idxWinSpe = 10, - idxTAmb = 5, - idxMeaPel = 19, - meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_" + week + ".txt", - datPVTCol = datPVTCol); - - parameter String week = "week1"; - - // Redeclare the collector to the UN version - redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=T_start, - show_T=true, - azi=0, - til=0.34906585039887, - rho=0.2, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTCol, - eleLosFac=eleLosFac); -end PVT_UN_Electrical; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index 59ca762813..a82b6e720e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -2,7 +2,4 @@ ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation ElectricalPV -PVT_UI_Electrical_DayType1 -PVT_UN_Electrical PartialPVTCollectorValidation -PVTCollectorValidation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 50c6603b2e..ad5f137783 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -2,9 +2,15 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType1 "Test model for Unglazed Rear-Insulated PVT Collector" extends Modelica.Icons.Example; + replaceable package Medium = IDEAS.Media.Water "Medium model"; - replaceable record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation - "Collector parameter record"; + replaceable record PVTData = + IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation + constrainedby IDEAS.Fluid.PVTCollectors.Data.Generic "Collector parameter record"; + replaceable model PVTCol = + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation + constrainedby IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation; + parameter String pvtTyp = "Typ1"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09; @@ -21,26 +27,27 @@ model PVT_UI_Electrical_DayType1 parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; parameter PVTData datPVTCol annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); + inner Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource(meaFile), + columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); - replaceable IDEAS.Fluid.PVTCollectors.BaseClasses.PVTCollectorValidationUI pvtCol( + PVTCol pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=T_start, show_T=true, - azi=0, + azi=azi, til=til, rho=rho, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, + nPanels=nPanels, per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - inner Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource(meaFile), - columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-21}, {-77,-11}}))); Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; @@ -58,20 +65,6 @@ model PVT_UI_Electrical_DayType1 use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-30},{-38,-10}}))); - Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[idxMeaPel]) "[W]" - annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); - Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); - Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" - annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); - Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); - Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) "Weather data input file" @@ -85,8 +78,20 @@ model PVT_UI_Electrical_DayType1 til=til, azi=azi) annotation (Placement(transformation(extent={{-80,-84},{-60,-64}}))); -equation + Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[idxMeaPel]) + "Measured electrical power [W]" annotation (Placement(transformation(extent={{-87,52},{-61,68}}))); + Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) + "Absorber-fluid heat transfer coefficient [W/m2K]" annotation (Placement(transformation(extent={{11,46},{37,62}}))); + Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) + "Electrical power simulated by PVT model [W]" annotation (Placement(transformation(extent={{-51,52},{-25,68}}))); + Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) + "Electrical power from standalone PV model [W]" annotation (Placement(transformation(extent={{-49,-74},{-23,-58}}))); + Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - + 273.15) "PV-only cell temperature [°C]" annotation (Placement(transformation(extent={{-49,-92},{-23,-76}}))); + Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - + 273.15) "PVT cell temperature [°C]" annotation (Placement(transformation(extent={{-51,40},{-25,56}}))); +equation connect(meaDat.y[idxTFlu],TFluKel. Celsius) annotation (Line(points={{-71,14},{-60, 14},{-60,-4},{-92,-4},{-92,-16},{-88,-16}}, color={0,0,127})); connect(bou.T_in,TFluKel. Kelvin) annotation (Line(points={{-60,-16},{-76.5, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 5c4b7d7464..0b49578365 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -1,105 +1,29 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; model PVT_UN_Electrical - "Electrical behavior of an unglazed rear‑non‑insulated PVT collector" - extends Modelica.Icons.Example; - replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater ( - property_T = 293.15, - X_a = 0.43); - parameter String week = "week1"; - parameter Modelica.Units.SI.Temperature T_start = 17.086651 + 273.15 "Initial temperature (from measurement data)"; - parameter Real eleLosFac = 0.07; - parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{72,-16},{92,4}}))); - - - inner Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_"+week+".txt"), - columns=1:26) annotation (Placement(transformation(extent={{-92,14},{-72,34}}))); + extends IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical.PVT_UI_Electrical_DayType1( + redeclare package Medium = + IDEAS.Media.Antifreeze.PropyleneGlycolWater( + property_T=293.15, X_a=0.43), + redeclare record PVTData = + IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, + datPVTCol = PVTData(), + redeclare model PVTCol = + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation, + T_start = 17.086651 + 273.15, + eleLosFac = 0.07, + til = 0.34906585039887, + azi = 0, + idxTFlu = 2, + idxMFlow = 3, + idxGtil = 4, + idxWinSpe = 10, + idxTAmb = 5, + idxMeaPel = 19, + meaFile = + "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_" + week + ".txt"); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-11}, - {-77,-1}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel; - - IDEAS.Fluid.Sources.Boundary_pT sou( - redeclare package Medium = Medium, - use_p_in=false, - p = 101325, - nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-20},{42,0}}))); - IDEAS.Fluid.Sources.MassFlowSource_T bou( - redeclare package Medium = Medium, - use_m_flow_in=true, - m_flow=0.03, - use_T_in=true, - nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-20},{-38,0}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PVTCollectorValidation pvtCol( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=T_start, - show_T=true, - azi=0, - til=0.34906585039887, - rho=0.2, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTCol, - eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-8,-20},{12,0}}))); - - Modelica.Blocks.Sources.RealExpression meaPel(y=meaDat.y[19]) "[W]" - annotation (Placement(transformation(extent={{-83,58},{-57,74}}))); - Modelica.Blocks.Sources.RealExpression UAbsFluid(y=pvtCol.eleGen.UAbsFluid) - "[W/m2K]" annotation (Placement(transformation(extent={{9,56},{35,72}}))); - Modelica.Blocks.Sources.RealExpression simPel(y=pvtCol.Pel) "[W]" - annotation (Placement(transformation(extent={{-47,58},{-21,74}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ElectricalPV - electricalPV( - P_STC=datPVTCol.P_nominal, - beta=datPVTCol.beta, - eleLosFac=eleLosFac, - n=1, - module_efficiency=datPVTCol.etaEl, - til=0.34906585039887, - azi=0) annotation (Placement(transformation(extent={{-64,-72},{-84,-54}}))); - Modelica.Blocks.Sources.RealExpression simPelPV(y=electricalPV.P) "[W]" - annotation (Placement(transformation(extent={{-53,-68},{-27,-52}}))); - Modelica.Blocks.Sources.RealExpression simTcell(y=pvtCol.eleGen.TavgCel - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-47,44},{-21,60}}))); - Modelica.Blocks.Sources.RealExpression simTcellPV(y=electricalPV.T_cell - - 273.15) "[°C]" - annotation (Placement(transformation(extent={{-53,-82},{-27,-66}}))); - IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= - Modelica.Utilities.Files.loadResource( - "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) - "Weather data input file" - annotation (Placement(transformation(extent={{-38,16},{-18,36}}))); -equation - connect(bou.T_in,TFluKel. Kelvin) - annotation (Line(points={{-60,-6},{-76.5,-6}}, - color={0,0,127})); - connect(pvtCol.port_a, bou.ports[1]) - annotation (Line(points={{-8,-10},{-38,-10}}, - color={0,127,255})); - connect(pvtCol.port_b, sou.ports[1]) - annotation (Line(points={{12,-10},{42,-10}}, - color={0,127,255})); - connect(bou.m_flow_in, meaDat.y[3]) - annotation (Line(points={{-60,-2},{-60,24},{-71,24}},color={0,0,127})); - connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,24},{-60, - 24},{-60,6},{-92,6},{-92,-6},{-88,-6}}, color={0,0,127})); - connect(weaDat.weaBus,pvtCol. weaBus) annotation (Line( - points={{-18,26},{-14,26},{-14,-2},{-8,-2}}, - color={255,204,51}, - thickness=0.5)); - connect(meaDat.y[4], electricalPV.Gtil); - connect(meaDat.y[10], electricalPV.winSpe); - connect(meaDat.y[5], TAmbKel.Celsius); - connect(TAmbKel.Kelvin, electricalPV.Tamb); - annotation (Documentation(info = " + parameter String week = "week1"; + annotation (Documentation(info = "

                                                                This model validates the electrical performance of the PVT_UN collector, @@ -133,24 +57,7 @@ This is for #1436 "), Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle(extent={{6,96},{40,56}}, lineColor={28,108,200}), - Text( - extent={{2,94},{42,76}}, - textColor={28,108,200}, - textStyle={TextStyle.Bold}, - textString="Calculated -UAbsFluid -[W/m2K]"), - Rectangle(extent={{-88,94},{-14,46}}, lineColor={28,108,200}), - Text( - extent={{-86,100},{-20,72}}, - textColor={28,108,200}, - horizontalAlignment=TextAlignment.Left, - textStyle={TextStyle.Bold}, - textString="Measured and simulated -electrical power"), - Rectangle(extent={{-90,-48},{-18,-84}}, lineColor={28,108,200})}), + coordinateSystem(preserveAspectRatio=false)), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mos" "Simulate and plot"), experiment( From acc97a313b3987fb397340ed6ac40839932b91e6 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 15:34:19 +0100 Subject: [PATCH 66/86] feat: extend all thermal validation model form one base model --- .../Validation/BaseClasses/ElectricalPV.mo | 1 - .../Electrical/PVT_UI_Electrical_DayType1.mo | 15 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 153 +++++++++------ .../PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo | 3 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo | 3 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo | 3 +- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 4 +- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 182 +++--------------- 8 files changed, 129 insertions(+), 235 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo index cb38c8e03d..f5fef89435 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo @@ -35,7 +35,6 @@ model ElectricalPV "Power generated by the photovoltaic installation" annotation (Placement(transformation(extent={{9,-50}, {-11,-30}}))); - Modelica.Blocks.Interfaces.RealInput Gtil "Value of Real input" annotation ( Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index ad5f137783..bbcdcd7e3a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -10,14 +10,13 @@ model PVT_UI_Electrical_DayType1 replaceable model PVTCol = IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation constrainedby IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation; - - parameter String pvtTyp = "Typ1"; + parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; - parameter Real eleLosFac = 0.09; - parameter Real til = 0.78539816339745; - parameter Real azi = 0; - parameter Real rho = 0.2; - parameter Integer nPanels = 1; + parameter Real eleLosFac = 0.09 "Electrical system loss factor of the PV module"; + parameter Real til = 0.78539816339745 "Collector tilt angle [rad]"; + parameter Real azi = 0 "Collector azimuth angle [rad]"; + parameter Real rho = 0.2 "Ground reflectance (albedo)"; + parameter Integer nPanels = 1 "Number of PVT panels connected in the model"; parameter Integer idxTFlu = 13 "Column index for fluid inlet temperature"; parameter Integer idxMFlow = 17 "Column index for mass flow rate"; parameter Integer idxGtil = 2 "Column index for global irradiance in collector plane"; @@ -73,7 +72,7 @@ model PVT_UI_Electrical_DayType1 P_STC=datPVTCol.P_nominal, beta=datPVTCol.beta, eleLosFac=eleLosFac, - n=1, + n=nPanels, module_efficiency=datPVTCol.etaEl, til=til, azi=azi) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 014024d5ad..195ef6743c 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -2,38 +2,76 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType1 "Test model for Unglazed Rear-Insulated PVT Collector" extends Modelica.Icons.Example; + replaceable package Medium = IDEAS.Media.Water "Medium model"; + replaceable record PVTData = + IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation + constrainedby IDEAS.Fluid.PVTCollectors.Data.Generic "Collector parameter record"; + replaceable model PVTCol = + IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation + constrainedby IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation; + parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; - parameter String pvtTyp = "Typ1"; - parameter Real eleLosFac = 0.09; - parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol + parameter Real eleLosFac = 0.09 "Electrical system loss factor of the PV module"; + parameter Real til = 0.78539816339745 "Collector tilt angle [rad]"; + parameter Real azi = 0 "Collector azimuth angle [rad]"; + parameter Real rho = 0.2 "Ground reflectance (albedo)"; + parameter Integer nPanels = 1 "Number of PVT panels connected in the model"; + parameter Integer idxTFlu = 13 "Column index for fluid inlet temperature"; + parameter Integer idxMFlow = 17 "Column index for mass flow rate"; + parameter Integer idxGtil = 2 "Column index for global irradiance in collector plane"; + parameter Integer idxWinSpe = 10 "Column index for wind speed"; + parameter Integer idxTAmb = 12 "Column index for ambient temperature"; + parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; + parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; + parameter PVTData datPVTCol annotation (Placement(transformation(extent={{72,-6},{92,14}}))); - parameter - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.UI_Validation - datPVTColVal - annotation (Placement(transformation(extent={{72,-36},{92,-16}}))); + parameter PVTData datPVTColVal + annotation (Placement(transformation(extent={{72,-32},{92,-12}}))); + + inner Modelica.Blocks.Sources.CombiTimeTable meaDat( + tableOnFile=true, + tableName="data", + fileName=Modelica.Utilities.Files.loadResource(meaFile), + columns=1:25) annotation (Placement(transformation(extent={{-92,20},{-72,40}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( + PVTCol pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start(displayUnit="K") = T_start, + T_start=T_start, show_T=true, - azi=0, - til(displayUnit="deg") = 0.78539816339745, - rho=0.2, + azi=azi, + til=til, + rho=rho, nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, + nPanels=nPanels, per=datPVTCol, eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - inner Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt"), - columns=1:25) annotation (Placement(transformation(extent={{-92,24},{-72,44}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel annotation (Placement(transformation(extent={{-87,-1}, + + PVTCol pvtColVal( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_start, + show_T=true, + azi=azi, + til=til, + rho=rho, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=nPanels, + per=datPVTCol, + eleLosFac=eleLosFac) + annotation (Placement(transformation(extent={{-10,-36},{10,-16}}))); + + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel + annotation (Placement(transformation(extent={{-87,-1}, {-77,9}}))); + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel1 + annotation (Placement(transformation(extent={{-87,-27}, + {-77,-17}}))); + IDEAS.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, use_p_in=false, @@ -47,40 +85,7 @@ model PVT_UI_Thermal_DayType1 use_T_in=true, nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); - Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "Measured thermal power output [W]" - annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) - "[W]" annotation (Placement(transformation(extent={{19,68},{45,84}}))); - Modelica.Blocks.Sources.RealExpression a3_term(y=pvtCol.heaLosStc.a3_term) - "[W]" annotation (Placement(transformation(extent={{19,52},{45,68}}))); - Modelica.Blocks.Sources.RealExpression a4_term(y=pvtCol.heaLosStc.a4_term) - "[W]" annotation (Placement(transformation(extent={{57,68},{83,84}}))); - Modelica.Blocks.Sources.RealExpression a6_term(y=pvtCol.heaLosStc.a6_term) - "[W]" annotation (Placement(transformation(extent={{57,52},{83,68}}))); - Modelica.Blocks.Sources.RealExpression a7_term(y=pvtCol.heaLosStc.a7_term) - "[W]" annotation (Placement(transformation(extent={{19,36},{45,52}}))); - Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) - "[W]" annotation (Placement(transformation(extent={{57,36},{83,52}}))); - Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow - *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "Thermal power output of pvt model [W]" - annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); - PVTCollectorValidation pvtColVal( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start = T_start, - show_T=true, - azi=0, - til = 0.78539816339745, - rho=0.2, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTColVal, - eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-10,-36},{10,-16}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel1 - annotation (Placement(transformation(extent={{-87,-27}, - {-77,-17}}))); + Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, @@ -95,8 +100,33 @@ model PVT_UI_Thermal_DayType1 nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-36},{-38,-16}}))); - Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow - *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" + Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[19]) "Measured thermal power output [W]" + annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); + Modelica.Blocks.Sources.RealExpression a1_a2_term(y = pvtCol.heaLosStc.a1_a2_term) + "Heat loss contribution associated with the a1 and a2 coefficients [W]" + annotation(Placement(transformation(extent={{19,68},{45,84}}))); + Modelica.Blocks.Sources.RealExpression a3_term(y = pvtCol.heaLosStc.a3_term) + "Heat loss contribution associated with the a3 coefficien [W]" + annotation(Placement(transformation(extent={{19,52},{45,68}}))); + Modelica.Blocks.Sources.RealExpression a4_term(y = pvtCol.heaLosStc.a4_term) + "Heat loss contribution associated with the a4 coefficient [W]" + annotation(Placement(transformation(extent={{57,68},{83,84}}))); + Modelica.Blocks.Sources.RealExpression a6_term(y = pvtCol.heaLosStc.a6_term) + "Heat loss contribution associated with the a6 coefficient [W]" + annotation(Placement(transformation(extent={{57,52},{83,68}}))); + Modelica.Blocks.Sources.RealExpression a7_term(y = pvtCol.heaLosStc.a7_term) + "Heat loss contribution associated with the a7 coefficient [W]" + annotation(Placement(transformation(extent={{19,36},{45,52}}))); + Modelica.Blocks.Sources.RealExpression a8_term(y = pvtCol.heaLosStc.a8_term) + "Heat loss contribution associated with the a8 coefficient [W]" + annotation(Placement(transformation(extent={{57,36},{83,52}}))); + Modelica.Blocks.Sources.RealExpression simQ( + y=Medium.cp_const*pvtCol.port_b.m_flow*(pvtCol.sta_a.T -pvtCol.sta_b.T)) + "Thermal power output of pvt model [W]" + annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); + Modelica.Blocks.Sources.RealExpression simQVal( + y=Medium.cp_const*pvtColVal.port_b.m_flow*(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) + "Thermal power output of simplified pvt model [W]" annotation (Placement(transformation(extent={{-81,-86},{-55,-70}}))); IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) @@ -104,22 +134,23 @@ model PVT_UI_Thermal_DayType1 annotation (Placement(transformation(extent={{-40,18},{-20,38}}))); equation - connect(meaDat.y[13],TAmbKel. Celsius) annotation (Line(points={{-71,34},{-60, - 34},{-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); + connect(meaDat.y[13],TAmbKel. Celsius) annotation (Line(points={{-71,30},{-66, + 30},{-66,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); connect(bou.T_in, TAmbKel.Kelvin) annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); connect(bou.m_flow_in, meaDat.y[17]) - annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); + annotation (Line(points={{-60,8},{-66,8},{-66,30},{-71,30}}, + color={0,0,127})); connect(bou.ports[1],pvtCol. port_a) annotation (Line(points={{-38,0},{-10,0}}, color={0,127,255})); connect(pvtCol.port_b, sou.ports[1]) annotation (Line(points={{10,0},{42,0}}, color={0,127,255})); - connect(meaDat.y[13], TAmbKel1.Celsius) annotation (Line(points={{-71,34},{-60, - 34},{-60,16},{-92,16},{-92,-22},{-88,-22}}, color={0,0,127})); + connect(meaDat.y[13], TAmbKel1.Celsius) annotation (Line(points={{-71,30},{-66, + 30},{-66,16},{-92,16},{-92,-22},{-88,-22}}, color={0,0,127})); connect(bou1.T_in, TAmbKel1.Kelvin) annotation (Line(points={{-60,-22},{-76.5,-22}}, color={0,0,127})); connect(bou1.m_flow_in, meaDat.y[17]) annotation (Line(points={{-60,-18},{-72, - -18},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, + -18},{-72,-6},{-92,-6},{-92,16},{-66,16},{-66,30},{-71,30}}, color={0, 0,127})); connect(bou1.ports[1],pvtColVal. port_a) annotation (Line(points={{-38,-26},{-10,-26}}, color={0,127,255})); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo index 6f213fcb35..80e5cb0f7f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo @@ -1,8 +1,7 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType2 "Test model for Unglazed Rear-Insulated PVT Collector" - extends PVT_UI_Thermal_DayType1 - (pvtTyp="Typ2", T_start=24.79173678 + 273.15); + extends PVT_UI_Thermal_DayType1(pvtTyp="Typ2", T_start=24.79173678 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos" "Simulate and plot"), diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo index 01a348a58f..f922644bb6 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo @@ -1,8 +1,7 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType3 "Test model for Unglazed Rear-Insulated PVT Collector" - extends PVT_UI_Thermal_DayType1 - (pvtTyp="Typ3", T_start=36.70783953 + 273.15); + extends PVT_UI_Thermal_DayType1(pvtTyp="Typ3", T_start=36.70783953 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos" "Simulate and plot"), diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo index fe50bead63..d915550cfa 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo @@ -1,8 +1,7 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType4 "Test model for Unglazed Rear-Insulated PVT Collector" - extends PVT_UI_Thermal_DayType1 - (pvtTyp="Typ4", T_start=48.60870229 + 273.15); + extends PVT_UI_Thermal_DayType1(pvtTyp="Typ4", T_start=48.60870229 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos" "Simulate and plot"), diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 0b49578365..18b57f538a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -1,14 +1,14 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVT_UN_Electrical +model PVT_UN_Electrical "Electrical behavior of an unglazed rear‑non‑insulated PVT collector" extends IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical.PVT_UI_Electrical_DayType1( redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( property_T=293.15, X_a=0.43), redeclare record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, - datPVTCol = PVTData(), redeclare model PVTCol = IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation, + datPVTCol = PVTData(), T_start = 17.086651 + 273.15, eleLosFac = 0.07, til = 0.34906585039887, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 41d802a0bb..7cd578a51d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -1,138 +1,29 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVT_UN_Thermal - "Thermal behavior of an unglazed rear‑non‑insulated PVT collector" - extends Modelica.Icons.Example; - replaceable package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater ( - property_T = 293.15, - X_a = 0.43); - parameter String week = "week1"; - parameter Modelica.Units.SI.Temperature T_start = 17.086651 + 273.15 "Initial temperature (from measurement data)"; - parameter Real eleLosFac = 0.07; - parameter IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.UN_Validation datPVTColVal - annotation (Placement(transformation(extent={{70,-42},{90,-22}}))); - parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol - annotation (Placement(transformation(extent={{70,-8},{90,12}}))); - - inner Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_"+week+".txt"), - columns=1:26) annotation (Placement(transformation(extent={{-92,24},{-72,44}}))); - - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel annotation (Placement(transformation(extent={{-87,-1}, - {-77,9}}))); - IDEAS.Fluid.Sources.Boundary_pT sou( - redeclare package Medium = Medium, - use_p_in=false, - p = 101325, - nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-10},{42,10}}))); - IDEAS.Fluid.Sources.MassFlowSource_T bou( - redeclare package Medium = Medium, - use_m_flow_in=true, - m_flow=0.03, - use_T_in=true, - nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); - Modelica.Blocks.Sources.RealExpression meaQ(y=meaDat.y[24]) "Measured thermal power output [W]" - annotation (Placement(transformation(extent={{-81,60},{-55,76}}))); - Modelica.Blocks.Sources.RealExpression simQ(y=Medium.cp_const*pvtCol.port_b.m_flow - *(pvtCol.sta_a.T -pvtCol.sta_b.T)) "Thermal power output of pvt model [W]" - annotation (Placement(transformation(extent={{-45,60},{-19,76}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=T_start, - show_T=true, - azi=0, - til=0.34906585039887, - rho=0.2, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTCol, - eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); +model PVT_UN_Thermal "Thermal behavior of an unglazed rear‑non‑insulated PVT collector" + extends IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal.PVT_UI_Thermal_DayType1( + redeclare package Medium = + IDEAS.Media.Antifreeze.PropyleneGlycolWater( + property_T=293.15, X_a=0.43), + redeclare record PVTData = + IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, + redeclare model PVTCol = + IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation, + datPVTCol = PVTData(), + datPVTColVal = PVTData(), + T_start = 17.086651 + 273.15, + eleLosFac = 0.07, + til = 0.34906585039887, + azi = 0, + idxTFlu = 2, + idxMFlow = 3, + idxGtil = 4, + idxWinSpe = 10, + idxTAmb = 5, + idxMeaPel = 19, + meaFile = + "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_measurements_" + week + ".txt"); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TFluKel1 - annotation (Placement(transformation(extent={{-87,-33}, - {-77,-23}}))); - IDEAS.Fluid.Sources.Boundary_pT sou1( - redeclare package Medium = Medium, - use_p_in=false, - p = 101325, - nPorts=1) "Outlet for water flow" - annotation (Placement(transformation(extent={{62,-42},{42,-22}}))); - IDEAS.Fluid.Sources.MassFlowSource_T bou1( - redeclare package Medium = Medium, - use_m_flow_in=true, - m_flow=0.03, - use_T_in=true, - nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" - annotation (Placement(transformation(extent={{-58,-42},{-38,-22}}))); - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtColVal( - redeclare package Medium = Medium, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=T_start, - show_T=true, - azi=0, - til=0.34906585039887, - rho=0.2, - nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, - nPanels=1, - per=datPVTColVal, - eleLosFac=eleLosFac) - annotation (Placement(transformation(extent={{-8,-42},{12,-22}}))); - - Modelica.Blocks.Sources.RealExpression simQVal(y=Medium.cp_const*pvtColVal.port_b.m_flow - *(pvtColVal.sta_a.T -pvtColVal.sta_b.T)) "Thermal power output of simplified pvt model [W]" - annotation (Placement(transformation(extent={{-81,-94},{-55,-78}}))); - Modelica.Blocks.Sources.RealExpression a1_a2_term(y=pvtCol.heaLosStc.a1_a2_term) - "[W]" annotation (Placement(transformation(extent={{21,68},{47,84}}))); - Modelica.Blocks.Sources.RealExpression a3_term(y=pvtCol.heaLosStc.a3_term) - "[W]" annotation (Placement(transformation(extent={{21,52},{47,68}}))); - Modelica.Blocks.Sources.RealExpression a4_term(y=pvtCol.heaLosStc.a4_term) - "[W]" annotation (Placement(transformation(extent={{59,68},{85,84}}))); - Modelica.Blocks.Sources.RealExpression a6_term(y=pvtCol.heaLosStc.a6_term) - "[W]" annotation (Placement(transformation(extent={{59,52},{85,68}}))); - Modelica.Blocks.Sources.RealExpression a7_term(y=pvtCol.heaLosStc.a7_term) - "[W]" annotation (Placement(transformation(extent={{21,36},{47,52}}))); - Modelica.Blocks.Sources.RealExpression a8_term(y=pvtCol.heaLosStc.a8_term) - "[W]" annotation (Placement(transformation(extent={{59,36},{85,52}}))); - IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= - Modelica.Utilities.Files.loadResource( - "modelica://IDEAS/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) - "Weather data input file" - annotation (Placement(transformation(extent={{-40,24},{-20,44}}))); -equation - connect(bou.T_in,TFluKel. Kelvin) - annotation (Line(points={{-60,4},{-76.5,4}}, color={0,0,127})); - connect(pvtCol.port_a, bou.ports[1]) - annotation (Line(points={{-8,0},{-38,0}}, color={0,127,255})); - connect(pvtCol.port_b, sou.ports[1]) - annotation (Line(points={{12,0},{42,0}}, color={0,127,255})); - connect(bou.m_flow_in, meaDat.y[3]) - annotation (Line(points={{-60,8},{-60,34},{-71,34}}, color={0,0,127})); - connect(meaDat.y[2],TFluKel. Celsius) annotation (Line(points={{-71,34},{-60,34}, - {-60,16},{-92,16},{-92,4},{-88,4}}, color={0,0,127})); - connect(bou1.T_in, TFluKel1.Kelvin) - annotation (Line(points={{-60,-28},{-76.5,-28}}, color={0,0,127})); - connect(pvtColVal.port_a, bou1.ports[1]) - annotation (Line(points={{-8,-32},{-38,-32}}, color={0,127,255})); - connect(pvtColVal.port_b, sou1.ports[1]) - annotation (Line(points={{12,-32},{42,-32}}, color={0,127,255})); - connect(bou1.m_flow_in, meaDat.y[3]) annotation (Line(points={{-60,-24},{-72, - -24},{-72,-6},{-92,-6},{-92,16},{-60,16},{-60,34},{-71,34}}, color={0, - 0,127})); - connect(meaDat.y[2], TFluKel1.Celsius) annotation (Line(points={{-71,34},{-60, - 34},{-60,16},{-92,16},{-92,-28},{-88,-28}}, color={0,0,127})); - connect(pvtCol.weaBus, weaDat.weaBus) annotation (Line( - points={{-8,8},{-14,8},{-14,34},{-20,34}}, - color={255,204,51}, - thickness=0.5)); - connect(pvtColVal.weaBus, weaDat.weaBus) annotation (Line( - points={{-8,-24},{-14,-24},{-14,34},{-20,34}}, - color={255,204,51}, - thickness=0.5)); + parameter String week = "week1"; annotation ( Documentation(info = "

                                                                This model validates the thermal performance of the @@ -167,30 +58,7 @@ This is for #1436 "), Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle(extent={{-86,96},{-14,60}}, lineColor={28,108,200}), - Text( - extent={{-84,96},{-14,80}}, - textColor={28,108,200}, - horizontalAlignment=TextAlignment.Left, - textStyle={TextStyle.Bold}, - textString="Measured and simulated -thermal power"), - Rectangle(extent={{-88,-56},{20,-94}}, lineColor={28,108,200}), - Rectangle(extent={{8,96},{94,34}}, lineColor={28,108,200}), - Text( - extent={{10,98},{92,82}}, - textColor={28,108,200}, - textString="Distribution of heat losses ", - textStyle={TextStyle.Bold}), - Text( - extent={{-82,-62},{4,-70}}, - textColor={28,108,200}, - horizontalAlignment=TextAlignment.Left, - textStyle={TextStyle.Bold}, - textString="Simulated thermal power, -neglecting c3-, c4-, c6-, c7- and c8-term -loss contributions")}), + coordinateSystem(preserveAspectRatio=false)), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos" "Simulate and plot"), experiment( From 730298d45c4608b2ecb9a33d800ddea8087eb5db Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 21:48:43 +0100 Subject: [PATCH 67/86] refactor: update conventions and documetation strings --- .../BaseClasses/ElectricalPVT.mo | 10 +- .../BaseClasses/Examples/ISO9806HeatLoss.mo | 4 +- .../BaseClasses/ISO9806HeatLoss.mo | 2 +- .../BaseClasses/PVTCollectorValidationUI.mo | 325 ------------------ .../PVTCollectors/BaseClasses/package.order | 1 - .../Data/Covered/CI_Jonas2018.mo | 2 +- .../Data/Covered/CN_Jonas2018.mo | 2 +- .../Data/Uncovered/UI_Validation.mo | 2 +- .../Data/Uncovered/UN_Jonas2018.mo | 2 +- .../Data/Uncovered/UN_Validation.mo | 2 +- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 25 +- .../BaseClasses/ISO9806HeatLossValidation.mo | 4 +- .../BaseClasses/ISO9806SolarGainHGloTil.mo | 1 - .../BaseClasses/LongWaveRadiation.mo | 31 +- .../Electrical/PVT_UI_Electrical_DayType1.mo | 2 +- .../Electrical/PVT_UI_Electrical_DayType2.mo | 2 +- .../Electrical/PVT_UI_Electrical_DayType3.mo | 2 +- .../Electrical/PVT_UI_Electrical_DayType4.mo | 2 +- .../PVT_UI/PVTCollectorValidation.mo | 73 ++-- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 2 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo | 2 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo | 2 +- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo | 2 +- .../PVT_UN/PVTCollectorValidation.mo | 7 +- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 3 +- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 3 +- 26 files changed, 92 insertions(+), 423 deletions(-) delete mode 100644 IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 507f69f74b..197c7583c4 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -1,12 +1,12 @@ within IDEAS.Fluid.PVTCollectors.BaseClasses; model ElectricalPVT - "Calculate the electrical power output of a PVT using the PVWatts v5 approach" + "Calculate the electrical power output of a PVT collector" extends Modelica.Blocks.Icons.Block; extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialParameters; // Parameters parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; - parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; + parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "Electrical system loss factor"; parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; parameter Real beta "Temperature coefficient [1/K]"; parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; @@ -25,7 +25,7 @@ model ElectricalPVT "Fluid temperatures per segment [K]" annotation (Placement(transformation(extent={{-140,40},{-100,80}}), iconTransformation(extent={{-140,40},{-100,80}}))); - Modelica.Blocks.Interfaces.RealInput Qth[nSeg] + Modelica.Blocks.Interfaces.RealInput qth[nSeg] "Thermal power density per segment [W/m2]" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), iconTransformation(extent={{-140,-20},{-100,20}}))); @@ -34,7 +34,7 @@ model ElectricalPVT annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), iconTransformation(extent={{-140,-80},{-100,-40}}))); - // Outputs (user-facing) + // Outputs Modelica.Blocks.Interfaces.RealOutput Pel "Total electrical power output [W]" annotation (Placement(transformation(extent={{100,40},{140,80}}), @@ -58,7 +58,7 @@ protected equation for i in 1:nSeg loop - TCel[i] = Tflu[i] +Qth[i] / UAbsFluid; + TCel[i] = Tflu[i] + qth[i] / UAbsFluid; TDif[i] = TCel[i] - TpvtRef; Pel_int[i] = (A_c/nSeg) * (P_nominal/A) * (HGloTil/HGloHorNom) * (1 + beta * TDif[i]) * (1 - eleLosFac); diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 79db72b0c4..26909934de 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -53,14 +53,14 @@ model ISO9806HeatLoss "Example showing the use of ISO9806HeatLoss" annotation (Placement(transformation(extent={{60,58},{80,78}}))); Modelica.Blocks.Sources.RealExpression HHorIR(y=400) "long wave irradiance" annotation (Placement(transformation(extent={{-1.5,58},{17.5,74}}))); + Modelica.Blocks.Sources.RealExpression HGloTil(y=800) "Global irradiance on the tilted surface" + annotation (Placement(transformation(extent={{26.5,58},{45.5,74}}))); Modelica.Blocks.Interfaces.RealOutput QLos_flow_QuaDyn[3] "Heat loss rate at current conditions" annotation (Placement(transformation(extent={{60,-2},{80,18}}))); Modelica.Blocks.Interfaces.RealOutput QLos_flow_SteSta[3] "Heat loss rate at current conditions" annotation (Placement(transformation(extent={{62,-68},{82,-48}}))); - Modelica.Blocks.Sources.RealExpression HGloTil(y=800) "Global irradiance on the tilted surface" - annotation (Placement(transformation(extent={{26.5,58},{45.5,74}}))); equation connect(winSpePla.y, heaLosQuaDyn.winSpePla); connect(HHorIR.y, heaLosQuaDyn.HHorIR); diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo index 9c9db9a677..51438c0327 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo @@ -3,7 +3,7 @@ model ISO9806HeatLoss "Calculate the heat loss of a PVT collector using ISO9806:2017" extends IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss( - // Override the internal heat-loss expression to include c3, c4 and c6 terms + // Override the internal heat-loss expression to include a3-a7 terms final QLos_internal=A_c/nSeg*{dT[i]*(a1 - a2*dT[i] + a3*(winSpePla-3)) + a4*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a6*(winSpePla-3)*HGloTil - a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a8*(dT[i])^4 for i in 1:nSeg}); diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo deleted file mode 100644 index a2ccab51bd..0000000000 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/PVTCollectorValidationUI.mo +++ /dev/null @@ -1,325 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.BaseClasses; -model PVTCollectorValidationUI - extends Validation.BaseClasses.PartialPVTCollectorValidation - ( - eleLosFac = 0.09); - - // Parameters - Modelica.Units.SI.Velocity winSpeTil "Effective wind speed normal to collector plane"; - - // Ouput connectors - outer Modelica.Blocks.Sources.CombiTimeTable meaDat( - tableOnFile=true, - tableName="data", - fileName=Modelica.Utilities.Files.loadResource("modelica://PvTfluod/Resources/Validation/MeasurementData/Typ1_modelica.txt"), - columns=1:25) annotation (Placement(transformation(extent={{26,68}, - {6,88}}))); - - replaceable IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain solGaiStc( - redeclare final package Medium = Medium, - final nSeg=nSeg, - final incAngDat=per.incAngDat, - final incAngModDat=per.incAngModDat, - final iamDiff=per.IAMDiff, - final eta0=per.eta0, - final use_shaCoe_in=use_shaCoe_in, - final shaCoe=shaCoe, - final A_c=ATot_internal) - "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" - annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation - heaLosStc( - redeclare final package Medium = Medium, - final nSeg=nSeg, - final a1=per.a1, - final a2=per.a2, - final a3=per.a3, - final a4=per.a4, - final a6=per.a6, - final a7=per.a7, - final a8=per.a8, - final A_c=ATot_internal) - "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" - annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( - final nSeg = nSeg, - final A_c = ATot_internal, - final eleLosFac = eleLosFac, - final beta = per.beta, - final P_nominal = per.P_nominal, - final A = per.A, - final eta0 = per.eta0, - final tauAlpEff = tauAlpEff, - final a1 = per.a1, - final etaEl = per.etaEl) - "Calculates the electrical power output of the PVT model" - annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - - Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) - "[W/m2]" annotation (Placement(transformation(extent={{-49.5, - 82},{-30.5,98}}))); - Modelica.Blocks.Math.Gain degToRad(k=Modelica.Constants.pi/180) annotation (Placement(transformation( - extent={{-5,-5},{5,5}}, - rotation=270, - origin={-40,60}))); - Modelica.Blocks.Sources.RealExpression winSpe(y=(meaDat.y[10])) "[W/m2]" - annotation (Placement(transformation(extent={{-55.5,12},{-36.5,28}}))); - Modelica.Blocks.Sources.RealExpression I_tot(y=(meaDat.y[2])) "[W/m2]" - annotation (Placement(transformation(extent={{-55.5,2},{-36.5,18}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel annotation (Placement(transformation(extent={{-45,23}, - {-35,33}}))); - Modelica.Blocks.Sources.RealExpression rH(y=(meaDat.y[8])) - "Relative humidity [%]" - annotation (Placement(transformation(extent={{-93.5,-82},{-74.5,-66}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.LongWaveRadiation - longWaveRad(final til=til) - annotation (Placement(transformation(extent={{-58,-66},{-38,-46}}))); - Modelica.Blocks.Sources.RealExpression Tamb(y=(meaDat.y[12] + 273.15)) "[K]" - annotation (Placement(transformation(extent={{-93.5,-94},{-74.5,-78}}))); - Modelica.Blocks.Sources.RealExpression patm(y=(meaDat.y[9])) "[bar]" - annotation (Placement(transformation(extent={{-93.5,-70},{-74.5,-54}}))); - Modelica.Blocks.Sources.RealExpression Ediff(y=(meaDat.y[3])) "[W/m2]" - annotation (Placement(transformation(extent={{-93.5,-58},{-74.5,-42}}))); - Modelica.Blocks.Sources.RealExpression Eglob(y=(meaDat.y[2])) "[W/m2]" - annotation (Placement(transformation(extent={{-93.5,-46},{-74.5,-30}}))); - Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) - annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); - -equation - // Compute plane wind speed (using inherited azi/til and connected weaBus): - winSpeTil = winSpe.y; - // Assign electrical and thermal outputs - Pel = eleGen.Pel; - Qth = sum(QGai.Q_flow + QLos.Q_flow); - - // Compute thermal power per segment - for i in 1:nSeg loop - qThSeg[i] = (QGai[i].Q_flow + QLos[i].Q_flow) / (ATot_internal / nSeg); - end for; - - heaLosStc.winSpePla = winSpeTil; - - connect(shaCoe_internal, solGaiStc.shaCoe_in); - connect(shaCoe_in, solGaiStc.shaCoe_in) annotation (Line( - points={{-120,40},{-40,40},{-40,45},{-22,45}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(heaLosStc.TFlu, temSen.T) annotation (Line( - points={{-22,14},{-30,14},{-30,-20},{-11,-20}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(heaLosStc.QLos_flow, QLos.Q_flow) annotation (Line( - points={{1,20},{26,20},{26,20},{50,20}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(solGaiStc.QSol_flow, QGai.Q_flow) annotation (Line( - points={{1,50},{50,50}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(temSen.T, solGaiStc.TFlu) annotation (Line( - points={{-11,-20},{-30,-20},{-30,42},{-22,42}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(solGaiStc.HDirTil, Qdir.y) annotation (Line(points={{-22,52},{-26,52}, - {-26,90},{-29.55,90}}, color={0,0,127})); - connect(solGaiStc.incAng, degToRad.y) annotation (Line(points={{-22,48},{-40,48},{-40,54.5}}, color={0,0,127})); - connect(heaLosStc.TEnv, TAmbKel.Kelvin) annotation (Line(points={{-22,26},{-34,26},{-34,28},{-34.5,28}}, - color={0,0,127})); - connect(longWaveRad.rH, rH.y) annotation (Line(points={{-60,-60.4},{-70,-60.4}, - {-70,-74},{-73.55,-74}}, color={0,0,127})); - connect(Tamb.y, longWaveRad.Tamb) annotation (Line(points={{-73.55,-86},{-68, - -86},{-68,-64.8},{-60,-64.8}}, color={0,0,127})); - connect(patm.y, longWaveRad.patm) annotation (Line(points={{-73.55,-62},{-72, - -62},{-72,-56},{-60,-56}}, color={0,0,127})); - connect(Ediff.y, longWaveRad.Edif_h) annotation (Line(points={{-73.55,-50},{ - -73.55,-51.6},{-60,-51.6}}, color={0,0,127})); - connect(Eglob.y, longWaveRad.Eglobh_h) annotation (Line(points={{-73.55,-38}, - {-68,-38},{-68,-47.2},{-60,-47.2}}, color={0,0,127})); - connect(heaLosStc.HGloTil, I_tot.y) annotation (Line(points={{-22,18},{-32,18}, - {-32,10},{-35.55,10}}, color={0,0,127})); - connect(heaLosStc.HHorIR, longWaveRad.lonRad) annotation (Line(points={{-22, - 20},{-26,20},{-26,-55.9},{-36.3,-55.9}}, color={0,0,127})); - connect(meaDat.y[5], degToRad.u) annotation (Line(points={{5,78},{-40,78},{-40,66}}, color={0,0,127})); - connect(TAmbKel.Celsius, meaDat.y[12]) annotation (Line(points={{-46,28},{-68, - 28},{-68,78},{5,78}}, color={0,0,127})); - connect(solGaiStc.HSkyDifTil, meaDat.y[3]) annotation (Line(points={{-22,58},{ - -24,58},{-24,78},{5,78}}, color={0,0,127})); - connect(temSen.T, eleGen.Tflu) annotation (Line(points={{-11,-20},{-30,-20},{-30, - -64},{-22,-64}}, color={0,0,127})); - connect(Eglob.y, eleGen.HGloTil) annotation (Line(points={{-73.55,-38},{-32,-38}, - {-32,-76},{-22,-76}}, color={0,0,127})); - connect(qThSegExp.y,eleGen.Qth) annotation (Line( - points={{-39,-90},{-30,-90},{-30,-70},{-22,-70}}, - color={0,0,127})); - annotation ( - defaultComponentName="pvtCol", - Documentation(info=" -

                                                                -Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 -quasi-dynamic thermal method with integrated electrical coupling. -Discretizes the collector into segments, computes heat loss and gain per ISO 9806, -and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters. -

                                                                -

                                                                Extends

                                                                - -

                                                                Submodel References

                                                                - -

                                                                Implementation Notes

                                                                -

                                                                -This validation model exclusively relies on measurement data provided by the -CombiTimeTable meaDat. However, because it extends -IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector and to limit -the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 -remains instantiated and connected to the inherited weaBus. The -reader is retained only to satisfy the parent class connector and is not -used during simulation: all weather inputs (irradiance, ambient temperature, -wind speed, etc.) are taken from meaDat, so the reader does not -affect the model results. -

                                                                -

                                                                -This model is designed for (unglazed) PVT collectors and discretizes the flow -path into nSeg segments to capture temperature gradients. It is -compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, -and wind speed vary over time. Because direct measurements of long-wave sky -irradiance were found to be faulty, the model instead computes long-wave radiation -using the dedicated LongWaveRadiation model. -

                                                                -

                                                                References

                                                                -
                                                                  -
                                                                • -Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641 -
                                                                • -
                                                                • -ISO 9806:2017. Solar thermal collectors — Test methods. ISO. -
                                                                • -
                                                                • -Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source -Photovoltaic‑Thermal Collector Modelica Model that Only Needs -Datasheet Parameters. Submitted to -Mathematical and Computer Modelling of Dynamical Systems, -Special Issue on Modelica, FMI, and Open Standards. -
                                                                • -
                                                                -", -revisions=" -
                                                                  -
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                • -
                                                                • -July 7, 2025, by Lone Meertens:
                                                                  -First implementation PVT model. -This is for #1436. -
                                                                • -
                                                                -"), - Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, - 100}}), - graphics={ - Rectangle( - extent={{-84,100},{84,-100}}, - lineColor={27,0,55}, - fillColor={26,0,55}, - fillPattern=FillPattern.Solid), - Line( - points={{-100,0},{-76,0},{-76,-90},{66,-90},{66,-60},{-64,-60},{-64, - -30},{66,-30},{66,0},{-64,0},{-64,28},{66,28},{66,60},{-64,60},{ - -64,86},{78,86},{78,0},{98,0},{100,0}}, - color={0,128,255}, - thickness=1, - smooth=Smooth.None), - Ellipse( - extent={{-24,26},{28,-26}}, - lineColor={255,255,0}, - fillColor={255,255,0}, - fillPattern=FillPattern.Solid), - Line( - points={{-6,-6},{8,8}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={-24,30}, - rotation=90), - Line( - points={{-50,0},{-30,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-36,-40},{-20,-24}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-10,0},{10,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={2,-40}, - rotation=90), - Line( - points={{-8,-8},{6,6}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={30,-30}, - rotation=90), - Line( - points={{32,0},{52,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1), - Line( - points={{-8,-8},{6,6}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={28,32}, - rotation=180), - Line( - points={{-10,0},{10,0}}, - color={255,255,0}, - smooth=Smooth.None, - thickness=1, - origin={0,40}, - rotation=90), - Polygon( - points={{72,96},{36,26},{60,34},{48,-24},{88,58},{64,48},{72,96}}, - lineColor={0,0,0}, - fillColor={0,255,0}, - fillPattern=FillPattern.Solid)})); -end PVTCollectorValidationUI; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order index d5c0e468af..45a8703789 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order @@ -1,4 +1,3 @@ ElectricalPVT ISO9806HeatLoss Examples -PVTCollectorValidationUI diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index cbb70ce9de..01f8de6957 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Covered; record CI_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.79, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=16631*1.79, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index 892f40f2e2..badde60161 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Covered; record CN_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.79, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=16075*1.79, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index dabb636151..b12eb0857a 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UI_Validation = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=42200*1.66, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index 7f64d2d25d..257f24d81a 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UN_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.66, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=35800*1.66, diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index d5e9749e74..f7b5c1255b 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Uncovered; record UN_Validation = - IDEAS.Fluid.PVTCollectors.Data.Generic ( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.64, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=22100*1.64, diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index f53f1d0aab..0aab62f720 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -5,32 +5,28 @@ model PVTCollector extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); - // ===== Parameters ===== parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.10 - "Loss factor of the PV panel(s)" annotation(Dialog(group="Electrical parameters")); + "Electrical system loss factor" annotation(Dialog(group="Electrical parameters")); parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType collectorType = per.colTyp - "Type of collector used to select a proper default value for the effective transmittance-absorptance product (tauAlpEff)"; + "Collector type used to select a default tauAlpEff"; parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff(min=0, max=1) = (if collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84) - "Effective transmittance–absorptance product"; + "Effective transmittance-absorptance product"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid(min=0) = ((tauAlpEff - per.etaEl) * (per.a1)) / ((tauAlpEff - per.etaEl) - per.eta0) "Internal heat transfer coefficient between the fluid and PV cells; computed from datasheet parameters by default." annotation(Dialog(tab="Advanced", group="Electrical parameters")); - Modelica.Units.SI.Velocity winSpeTil "Effective wind speed normal to collector plane"; + Modelica.Units.SI.Velocity winSpeTil "Effective wind speed in collector plane"; Modelica.Units.SI.HeatFlux qThSeg[nSeg] "Thermal power per segment"; - // ===== Output Connectors ===== - Modelica.Blocks.Interfaces.RealOutput Pel - "Total electrical power output [W]" + Modelica.Blocks.Interfaces.RealOutput Pel "Total electrical power output [W]" annotation (Placement(transformation(extent={{100,-60},{120,-40}}), iconTransformation(extent={{100,-60},{120,-40}}))); Modelica.Blocks.Interfaces.RealOutput Qth "Total thermal power output[W]" annotation (Placement(transformation(extent={{100,-100},{120,-80}}), iconTransformation(extent={{100,-100},{120,-80}}))); - // ===== Subcomponents ===== IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain solGaiStc( redeclare final package Medium = Medium, final nSeg=nSeg, @@ -41,7 +37,7 @@ model PVTCollector final use_shaCoe_in=use_shaCoe_in, final shaCoe=shaCoe, final A_c=ATot_internal) - "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat gained from the sun using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss heaLosStc( @@ -52,10 +48,10 @@ model PVTCollector final a3=per.a3, final a4=per.a4, final a6=per.a6, - final a7=per.a4, - final a8=per.a6, + final a7=per.a7, + final a8=per.a8, final A_c=ATot_internal) - "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat lost to the surroundings using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( @@ -73,9 +69,10 @@ model PVTCollector "Calculates the electrical power output of the PVT model" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - Modelica.Blocks.Math.Add HGloTil + Modelica.Blocks.Math.Add HGloTil "Total global irradiance on collector plane" annotation (Placement(transformation(extent={{-55,-95},{-45,-85}}))); Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) + "Thermal heat flux of each segment (for diagnostics)" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); equation diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index c1033c44a6..066a868d3f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -4,7 +4,7 @@ model ISO9806HeatLossValidation extends IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss; - // —— Diagnostic internal variables —— + // Diagnostic variables Modelica.Units.SI.Power a1_a2_term "Contribution from a1_a2 term"; Modelica.Units.SI.Power a3_term "Contribution from wind-speed dependence (a3)"; Modelica.Units.SI.Power a4_term "Contribution from sky long-wave (a4)"; @@ -13,7 +13,7 @@ model ISO9806HeatLossValidation Modelica.Units.SI.Power a8_term "Contribution from radiation losses (a8)"; Modelica.Units.SI.Irradiance EL_term "Sky long-wave irradiance difference (HHorIR – σ·TEnv⁴)"; - // —— Cumulative sums —— + // Cumulative sums Modelica.Units.SI.Power pvt_st_st "a1_a2"; Modelica.Units.SI.Power pvt_a3 "a1_a2 + a3"; Modelica.Units.SI.Power pvt_a4 "a1_a2 + a3 + a4"; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo index cd66ce4766..b5074c9e41 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo @@ -19,7 +19,6 @@ model ISO9806SolarGainHGloTil Modelica.Blocks.Interfaces.RealInput shaCoe_in if use_shaCoe_in "Time varying input for the shading coefficient" annotation(Placement(transformation(extent={{-140,-70},{-100,-30}}))); - Modelica.Blocks.Interfaces.RealInput HGlob(unit="W/m2", quantity="RadiantEnergyFluenceRate") "global tilted irradiance" annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index 1db81d8e90..6c26655a44 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -2,34 +2,40 @@ within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; model LongWaveRadiation extends Modelica.Blocks.Icons.Block; + // Parameters + parameter Modelica.Units.SI.Angle til "Surface tilt (0 for horizontally mounted collector)"; + constant Real pi = Modelica.Constants.pi "Pi constant"; + constant Modelica.Units.SI.DimensionlessRatio epsGro = 0.95 "ground emissivity [-]"; + // Constants for dew point calculation using Buck's equation [Buck, 1981] + constant Real aBuck = 243.5 "Buck constant for dew point [°C]"; + constant Real bBuck = 17.67 "Buck constant for dew point [°C]"; + Real Tdew "Dew point temperature [°C]"; + Real epsSky "Clear sky emissivity [-]"; + // Real Inputs Modelica.Blocks.Interfaces.RealInput Tamb( quantity="AmbientTemperature", unit="degC", displayUnit="degC") "Ambient temperature [°C]" annotation (Placement(transformation(extent={{-140,-108},{-100,-68}}))); - Modelica.Blocks.Interfaces.RealInput rH( quantity="RelativeHumidity", unit="percentage", displayUnit="frac") "Relative Humidity [%]" annotation (Placement(transformation(extent={{-140,-64},{-100,-24}}), iconTransformation(extent={{-140,-64},{-100,-24}}))); - Modelica.Blocks.Interfaces.RealInput patm( quantity="AtmosphericPressure", unit="bar", displayUnit="bar") "Atmospheric pressure [atm]" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), iconTransformation(extent={{-140,-20},{-100,20}}))); - Modelica.Blocks.Interfaces.RealInput Edif_h( quantity="DiffuseRadiationCollector", unit="W/m2", displayUnit="kJ/hr.m²") "Diffuse horizontal irradiation [W/m2]" annotation (Placement(transformation(extent={{-140,24},{-100,64}}), iconTransformation(extent={{-140,24},{-100,64}}))); - Modelica.Blocks.Interfaces.RealInput Eglobh_h( quantity="TotalRadiationCollector", unit="W/m2", @@ -37,21 +43,6 @@ model LongWaveRadiation annotation (Placement(transformation(extent={{-140,68},{-100,108}}), iconTransformation(extent={{-140,68},{-100,108}}))); - // Parameter: tilt angle (radians) — can be overridden by the parent/collector - parameter Modelica.Units.SI.Angle til "Surface tilt (0 for horizontally mounted collector)"; - - // Constants - constant Real pi = Modelica.Constants.pi "Pi constant"; - constant Modelica.Units.SI.DimensionlessRatio epsGro = 0.95 "ground emissivity [-]"; - - // Constants for dew point calculation using Buck's equation [Buck, 1981] - constant Real aBuck = 243.5 "Buck constant for dew point [°C]"; - constant Real bBuck = 17.67 "Buck constant for dew point [°C]"; - - // Intermediate Variables - Real Tdew "Dew point temperature [°C]"; - Real epsSky "Clear sky emissivity [-]"; - // Outputs Modelica.Blocks.Interfaces.RealOutput lonRad( quantity="LongwaveRadiation", @@ -70,7 +61,6 @@ equation // Calculate Longwave Radiation (lonRad) using Tview and the Stefan-Boltzmann Law lonRad = Modelica.Constants.sigma*Tamb^4*((epsSky*(1 + cos(til)) / 2) + (epsGro*(1 - cos(til)) / 2)); - annotation ( defaultComponentName="LongWaveRad", Documentation(info=" @@ -121,5 +111,4 @@ This is for #1436
                                                              ")); - end LongWaveRadiation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index bbcdcd7e3a..8dfd68d7e4 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType1 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium model"; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo index cd48b86aa7..00ee300cee 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType2 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ2", T_start=24.79173678 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo index c1eb9cadb0..8c8099f97a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType3 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ3", T_start=36.70783953 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo index 32953c9908..7fc2ab8bcd 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType4 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ4", T_start=48.60870229 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 81ea5f3e4d..37f848d952 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -1,13 +1,11 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI; -model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" - extends Validation.BaseClasses.PartialPVTCollectorValidation - ( +model PVTCollectorValidation + "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" + extends Validation.BaseClasses.PartialPVTCollectorValidation( eleLosFac = 0.09); - // Parameters - Modelica.Units.SI.Velocity winSpeTil "Effective wind speed normal to collector plane"; + Modelica.Units.SI.Velocity winSpeTil "Effective wind speed in collector plane"; - // Ouput connectors outer Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", @@ -25,7 +23,7 @@ model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT final use_shaCoe_in=use_shaCoe_in, final shaCoe=shaCoe, final A_c=ATot_internal) - "Calculates the heat gained from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat gained from the sun using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806HeatLossValidation heaLosStc( @@ -39,7 +37,7 @@ model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT final a7=per.a7, final a8=per.a8, final A_c=ATot_internal) - "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat lost to the surroundings using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( final nSeg = nSeg, @@ -54,45 +52,54 @@ model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT final etaEl = per.etaEl) "Calculates the electrical power output of the PVT model" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - - Modelica.Blocks.Sources.RealExpression Qdir(y=meaDat.y[2] - meaDat.y[3]) - "[W/m2]" annotation (Placement(transformation(extent={{-49.5, - 82},{-30.5,98}}))); - Modelica.Blocks.Math.Gain degToRad(k=Modelica.Constants.pi/180) annotation (Placement(transformation( - extent={{-5,-5},{5,5}}, - rotation=270, - origin={-40,60}))); - Modelica.Blocks.Sources.RealExpression winSpe(y=(meaDat.y[10])) "[W/m2]" + IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.LongWaveRadiation longWaveRad( + final til = til) + "Long‑wave radiation exchange model for tilted PVT surface" + annotation (Placement(transformation(extent={{-58,-66},{-38,-46}}))); + Modelica.Blocks.Sources.RealExpression Qdir(y = meaDat.y[2] - meaDat.y[3]) + "Direct irradiance in the collector plane (global minus diffuse) [W/m2]" + annotation (Placement(transformation(extent={{-49.5,82},{-30.5,98}}))); + Modelica.Blocks.Math.Gain degToRad(k = Modelica.Constants.pi/180) + "Gain converting degrees to radians" + annotation (Placement(transformation( + extent={{-5,-5},{5,5}}, + rotation=270, + origin={-40,60}))); + Modelica.Blocks.Sources.RealExpression winSpe(y = meaDat.y[10]) + "Measured wind speed at collector location [m/s]" annotation (Placement(transformation(extent={{-55.5,12},{-36.5,28}}))); - Modelica.Blocks.Sources.RealExpression I_tot(y=(meaDat.y[2])) "[W/m2]" + Modelica.Blocks.Sources.RealExpression I_tot(y = meaDat.y[2]) + "Total global irradiance in the collector plane [W/m2]" annotation (Placement(transformation(extent={{-55.5,2},{-36.5,18}}))); - Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel annotation (Placement(transformation(extent={{-45,23}, - {-35,33}}))); - Modelica.Blocks.Sources.RealExpression rH(y=(meaDat.y[8])) - "Relative humidity [%]" + Modelica.Thermal.HeatTransfer.Celsius.ToKelvin TAmbKel + "Converter from ambient air temperature in °C to Kelvin" + annotation (Placement(transformation(extent={{-45,23},{-35,33}}))); + Modelica.Blocks.Sources.RealExpression rH(y = meaDat.y[8]) + "Relative humidity from measurements [%]" annotation (Placement(transformation(extent={{-93.5,-82},{-74.5,-66}}))); - IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.LongWaveRadiation - longWaveRad(final til=til) - annotation (Placement(transformation(extent={{-58,-66},{-38,-46}}))); - Modelica.Blocks.Sources.RealExpression Tamb(y=(meaDat.y[12] + 273.15)) "[K]" + Modelica.Blocks.Sources.RealExpression Tamb(y = meaDat.y[12] + 273.15) + "Ambient air temperature converted to Kelvin [K]" annotation (Placement(transformation(extent={{-93.5,-94},{-74.5,-78}}))); - Modelica.Blocks.Sources.RealExpression patm(y=(meaDat.y[9])) "[bar]" + Modelica.Blocks.Sources.RealExpression patm(y = meaDat.y[9]) + "Measured atmospheric pressure [bar]" annotation (Placement(transformation(extent={{-93.5,-70},{-74.5,-54}}))); - Modelica.Blocks.Sources.RealExpression Ediff(y=(meaDat.y[3])) "[W/m2]" + Modelica.Blocks.Sources.RealExpression Ediff(y = meaDat.y[3]) + "Diffuse irradiance component in the collector plane [W/m2]" annotation (Placement(transformation(extent={{-93.5,-58},{-74.5,-42}}))); - Modelica.Blocks.Sources.RealExpression Eglob(y=(meaDat.y[2])) "[W/m2]" + Modelica.Blocks.Sources.RealExpression Eglob(y = meaDat.y[2]) + "Global irradiance in the collector plane [W/m2]" annotation (Placement(transformation(extent={{-93.5,-46},{-74.5,-30}}))); - Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y=qThSeg) + Modelica.Blocks.Sources.RealExpression[nSeg] qThSegExp(final y = qThSeg) + "Thermal heat‑flux per collector segment (diagnostic output)" annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); equation - // Compute plane wind speed (using inherited azi/til and connected weaBus): + // Wind speed in collector plane winSpeTil = winSpe.y; - // Assign electrical and thermal outputs + Pel = eleGen.Pel; Qth = sum(QGai.Q_flow + QLos.Q_flow); - // Compute thermal power per segment for i in 1:nSeg loop qThSeg[i] = (QGai[i].Q_flow + QLos[i].Q_flow) / (ATot_internal / nSeg); end for; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 195ef6743c..7b58c7c42b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType1 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium model"; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo index 80e5cb0f7f..5d09692a09 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType2 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ2", T_start=24.79173678 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo index f922644bb6..080f4cfc9a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType3 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ3", T_start=36.70783953 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo index d915550cfa..e2405f5ea0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal; model PVT_UI_Thermal_DayType4 - "Test model for Unglazed Rear-Insulated PVT Collector" + "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ4", T_start=48.60870229 + 273.15); annotation ( __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos" diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 2a0c980313..cff3bef177 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -1,5 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" +model PVTCollectorValidation + "Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2017 thermal method with integrated electrical coupling" extends IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation( eleLosFac = 0.07); @@ -23,7 +24,7 @@ model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT final a7=per.a7, final a8=per.a8, final A_c=ATot_internal) - "Calculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat lost to the surroundings using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); replaceable IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTil @@ -34,7 +35,7 @@ model PVTCollectorValidation "Validation model of a photovoltaic–thermal (PVT final use_shaCoe_in=use_shaCoe_in, final shaCoe=shaCoe, final A_c=ATot_internal) - "Calculates the heat from the sun using the ISO 9806:2013 quasi-dynamic standard calculations" + "Calculates the heat from the sun using the ISO 9806:2017 quasi-dynamic standard calculations" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVT eleGen( final nSeg = nSeg, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 18b57f538a..6cdd0ce11f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -1,5 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVT_UN_Electrical "Electrical behavior of an unglazed rear‑non‑insulated PVT collector" +model PVT_UN_Electrical + "Validation model for an unglazed rear-non-insulated PVT Collector" extends IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical.PVT_UI_Electrical_DayType1( redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 7cd578a51d..a4aec65e71 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -1,5 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UN; -model PVT_UN_Thermal "Thermal behavior of an unglazed rear‑non‑insulated PVT collector" +model PVT_UN_Thermal + "Validation model for an unglazed rear-non-insulated PVT Collector" extends IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal.PVT_UI_Thermal_DayType1( redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( From aab9ccc403ce0004d461db00b86fee167e012e65 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Fri, 27 Mar 2026 22:18:45 +0100 Subject: [PATCH 68/86] docs: update revisions --- .../BaseClasses/ElectricalPVT.mo | 8 +++++-- .../BaseClasses/Examples/ISO9806HeatLoss.mo | 5 ---- .../BaseClasses/ISO9806HeatLoss.mo | 11 ++------- .../Data/Covered/CI_Jonas2018.mo | 4 ++-- .../Data/Covered/CN_Jonas2018.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Data/Generic.mo | 4 ++-- .../Data/Uncovered/UI_Validation.mo | 4 ++-- .../Data/Uncovered/UN_Jonas2018.mo | 4 ++-- .../Data/Uncovered/UN_Validation.mo | 4 ++-- IDEAS/Fluid/PVTCollectors/Examples/WISC.mo | 5 ---- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 4 ++-- .../BaseClasses/ISO9806HeatLossValidation.mo | 4 ++-- .../BaseClasses/ISO9806SolarGainHGloTil.mo | 5 ---- .../BaseClasses/LongWaveRadiation.mo | 9 ++------ .../PartialPVTCollectorValidation.mo | 18 ++++++++++++++- .../PVT_UI/BaseClasses/UI_Validation.mo | 6 +++-- .../Electrical/PVT_UI_Electrical_DayType1.mo | 4 ++-- .../PVT_UI/PVTCollectorValidation.mo | 4 ++-- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 4 ++-- .../PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo | 23 +++++++++++++++++++ .../PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo | 23 +++++++++++++++++++ .../PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo | 23 +++++++++++++++++++ .../PVT_UN/BaseClasses/UN_Validation.mo | 9 ++++---- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 4 ++-- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 4 ++-- 25 files changed, 131 insertions(+), 66 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 197c7583c4..09595e25e7 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -204,8 +204,12 @@ revisions="
                                                              • March 11, 2026, by Lone Meertens:
                                                                -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Revised the internal thermal–electrical coupling by introducing a new +formulation for the heat-transfer coefficient between the fluid and the PV cells. +The approach was updated to assume that the electrical power output is independent +of ambient temperature and therefore does not contribute to the linear thermal +loss slope. Details of the derivation can be found in Meertens et al., 2026. +This is for #1473.
                                                              • July 7, 2025, by Lone Meertens:
                                                                diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 26909934de..14f715d117 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -113,11 +113,6 @@ and long-wave irradiance. revisions="
                                                                • -March 11, 2026, by Lone Meertens:
                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. -This is for #1473. -
                                                                • -
                                                                • July 2, 2025, by Lone Meertens:
                                                                  First implementation of ISO 9806 quasi-dynamic heat loss example. This is for 1436. diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo index 51438c0327..4a2506b2da 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo @@ -40,7 +40,6 @@ model ISO9806HeatLoss annotation ( defaultComponentName="heaLosStc", Documentation(info=" -

                                                                  This component computes the heat loss from a solar thermal or PVT collector according to ISO 9806:2017. It builds on the structure of the @@ -49,7 +48,6 @@ IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss model, but extends it with the wind‑ and long‑wave irradiance‑dependent loss mechanisms defined in ISO 9806:2017.

                                                                  -

                                                                  The base EN12975HeatLoss model includes only the linear (a1) and quadratic (a2) temperature‑difference heat‑loss terms from @@ -57,18 +55,15 @@ EN 12975. These describe the main convective and radiative losses of glazed collectors, but they do not account for wind‑driven or long‑wave radiation effects.

                                                                  -

                                                                  The ISO 9806:2017 quasi‑dynamic formulation adds the additional coefficients used here to represent wind‑dependent heat loss and long‑wave irradiance exchange. These effects are essential for accurately modeling unglazed collectors, where wind and sky radiation strongly influence thermal losses.

                                                                  -

                                                                  The thermal losses in the extended model are calculated for each segment i ∈ {1, ..., nseg} as:

                                                                  -

                                                                  Qlos,i = Ac / nseg · [ @@ -144,7 +139,6 @@ mechanisms defined in ISO 9806:2017, allowing the collector performance to be represented more realistically under varying outdoor conditions than when using only the EN 12975 a1 and a2 terms.

                                                                  -

                                                                  Implementation Notes

                                                                  The heat-loss block inherits from @@ -154,7 +148,6 @@ and segment-wise structure. Only the heat‑loss equations and parameters are re to match the ISO 9806:2017 formulation.

                                                                  -

                                                                  References

                                                                • @@ -166,8 +159,8 @@ revisions="
                                                                  • March 11, 2026, by Lone Meertens:
                                                                    -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                  • July 7, 2025, by Lone Meertens:
                                                                    diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index 01f8de6957..17fe80a505 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -56,8 +56,8 @@ revisions="
                                                                    • March 11, 2026, by Lone Meertens:
                                                                      -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                    • July 7, 2025, by Lone Meertens:
                                                                      diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo index badde60161..2a794b1c88 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CN_Jonas2018.mo @@ -56,8 +56,8 @@ revisions="
                                                                      • March 11, 2026, by Lone Meertens:
                                                                        -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                      • July 7, 2025, by Lone Meertens:
                                                                        diff --git a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo index 119199c9d9..8638ade341 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Generic.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Generic.mo @@ -63,8 +63,8 @@ revisions="
                                                                        • March 11, 2026, by Lone Meertens:
                                                                          -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                        • July 7, 2025, by Lone Meertens:
                                                                          diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo index b12eb0857a..9714a3b0ac 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UI_Validation.mo @@ -68,8 +68,8 @@ revisions="
                                                                          • March 11, 2026, by Lone Meertens:
                                                                            -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                          • July 7, 2025, by Lone Meertens:
                                                                            diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo index 257f24d81a..19a9f5cfb0 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Jonas2018.mo @@ -56,8 +56,8 @@ revisions="
                                                                            • March 11, 2026, by Lone Meertens:
                                                                              -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                            • July 7, 2025, by Lone Meertens:
                                                                              diff --git a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo index f7b5c1255b..c54254c9cb 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Uncovered/UN_Validation.mo @@ -81,8 +81,8 @@ revisions="
                                                                              • March 11, 2026, by Lone Meertens:
                                                                                -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                              • July 7, 2025, by Lone Meertens:
                                                                                diff --git a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo index 4eb738b6b0..78b3dd7848 100644 --- a/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo +++ b/IDEAS/Fluid/PVTCollectors/Examples/WISC.mo @@ -95,11 +95,6 @@ IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record. revisions="
                                                                                • -March 11, 2026, by Lone Meertens:
                                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                                • -
                                                                                • July 7, 2025, by Lone Meertens:
                                                                                  First implementation PVT model. This is for 1436. diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 0aab62f720..2a7d99903d 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -192,8 +192,8 @@ revisions="
                                                                                  • March 11, 2026, by Lone Meertens:
                                                                                    -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                  • July 7, 2025, by Lone Meertens:
                                                                                    diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo index 066a868d3f..442e582164 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806HeatLossValidation.mo @@ -62,8 +62,8 @@ revisions="
                                                                                    • March 11, 2026, by Lone Meertens:
                                                                                      -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                    • July 7, 2025, by Lone Meertens:
                                                                                      diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo index b5074c9e41..6ecd71c954 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ISO9806SolarGainHGloTil.mo @@ -78,11 +78,6 @@ and can be directly provided as an input to this block. revisions = "
                                                                                      • -March 11, 2026, by Lone Meertens:
                                                                                        -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                                      • -
                                                                                      • July 7, 2025, by Lone Meertens:
                                                                                        First implementation PVT model. This is for #1436. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index 6c26655a44..95c212d9b3 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -97,13 +97,8 @@ Special Issue on Modelica, FMI, and Open Standards.
                                                                                      ", revisions= - " -
                                                                                        -
                                                                                      • -March 11, 2026, by Lone Meertens:
                                                                                        -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. -
                                                                                      • +" +
                                                                                        • July 7, 2025, by Lone Meertens:
                                                                                          First implementation PVT model. diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo index c439a34c71..26459abc5b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo @@ -24,5 +24,21 @@ partial model PartialPVTCollectorValidation Modelica.Blocks.Interfaces.RealOutput Qth "Total thermal power output [W]"; - +annotation ( + defaultComponentName="pvtCol", + Documentation(info=" +

                                                                                          +This component is a partial model of a PVT collector for model validation. +

                                                                                          + +", revisions=" +
                                                                                            +
                                                                                          • +March 11, 2026, by Lone Meertens:
                                                                                            +Added new partial model to provide a common base class for PVT collector +validation models and improve consistency between validation cases. +This is for #1473. +
                                                                                          • +
                                                                                          +")); end PartialPVTCollectorValidation; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo index 461bb0b2f0..94984469da 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/BaseClasses/UI_Validation.mo @@ -35,6 +35,7 @@ record is adapted to use the thermal coefficients a1 and which are provided directly in the collector datasheet.

                                                                                          References

                                                                                          +
                                                                                          • Meertens, L.; Jansen, J.; Helsen, L. (2026). Development and Experimental Validation of an Open-Source @@ -49,8 +50,9 @@ revisions="
                                                                                            • March 11, 2026, by Lone Meertens:
                                                                                              -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Added new record for comparing the full ISO 9806:2017 PVT model +with the simplified EU Ecodesign Regulation CDR 812/2013 datasheet parameters. +This is for #1473.
                                                                                            ")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 8dfd68d7e4..0ba3ae7466 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -126,8 +126,8 @@ for details on the validation examples and usage.
                                                                                            • March 11, 2026, by Lone Meertens:
                                                                                              -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                            • July 7, 2025, by Lone Meertens:
                                                                                              diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 37f848d952..0d7ef28d0b 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -244,8 +244,8 @@ revisions="
                                                                                              • March 11, 2026, by Lone Meertens:
                                                                                                -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                              • July 7, 2025, by Lone Meertens:
                                                                                                diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 7b58c7c42b..070de122a7 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -178,8 +178,8 @@ for details on the validation examples and usage.
                                                                                                • March 11, 2026, by Lone Meertens:
                                                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                                • July 7, 2025, by Lone Meertens:
                                                                                                  diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo index 5d09692a09..a428a4a17e 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mo @@ -3,6 +3,29 @@ model PVT_UI_Thermal_DayType2 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ2", T_start=24.79173678 + 273.15); annotation ( + Documentation(info=" +

                                                                                                  +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                  +", revisions= +" +
                                                                                                    +
                                                                                                  • +March 11, 2026, by Lone Meertens:
                                                                                                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                  • +
                                                                                                  • +July 7, 2025, by Lone Meertens:
                                                                                                    +First implementation PVT model. +This is for #1436. +
                                                                                                  • +
                                                                                                  +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo index 080f4cfc9a..b0ab3ae14a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mo @@ -3,6 +3,29 @@ model PVT_UI_Thermal_DayType3 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ3", T_start=36.70783953 + 273.15); annotation ( + Documentation(info=" +

                                                                                                  +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                  +", revisions= +" +
                                                                                                    +
                                                                                                  • +March 11, 2026, by Lone Meertens:
                                                                                                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                  • +
                                                                                                  • +July 7, 2025, by Lone Meertens:
                                                                                                    +First implementation PVT model. +This is for #1436. +
                                                                                                  • +
                                                                                                  +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo index e2405f5ea0..fc02038d12 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mo @@ -3,6 +3,29 @@ model PVT_UI_Thermal_DayType4 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Thermal_DayType1(pvtTyp="Typ4", T_start=48.60870229 + 273.15); annotation ( + Documentation(info=" +

                                                                                                  +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                  +", revisions= +" +
                                                                                                    +
                                                                                                  • +March 11, 2026, by Lone Meertens:
                                                                                                    +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                  • +
                                                                                                  • +July 7, 2025, by Lone Meertens:
                                                                                                    +First implementation PVT model. +This is for #1436. +
                                                                                                  • +
                                                                                                  +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo index 15e78635dd..6e124a4d11 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/BaseClasses/UN_Validation.mo @@ -71,13 +71,14 @@ Mathematical and Computer Modelling of Dynamical Systems, Special Issue on Modelica, FMI, and Open Standards.
                                                                                                -"), +", revisions="
                                                                                                • March 11, 2026, by Lone Meertens:
                                                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Added new record for comparing the full ISO 9806:2017 PVT model +with the simplified EU Ecodesign Regulation CDR 812/2013 datasheet parameters. +This is for #1473.
                                                                                                -"); +")); diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 6cdd0ce11f..f4c402d800 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -42,8 +42,8 @@ revisions="
                                                                                                • March 11, 2026, by Lone Meertens:
                                                                                                  -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                                • September 3, 2025, by Jelger Jansen:
                                                                                                  diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index a4aec65e71..868a13ed39 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -43,8 +43,8 @@ revisions="
                                                                                                  • March 11, 2026, by Lone Meertens:
                                                                                                    -Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473.
                                                                                                  • September 3, 2025, by Jelger Jansen:
                                                                                                    From c9ba05bc9e8b2e8803937490ac737a51a1a3e9f6 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Sat, 28 Mar 2026 14:31:11 +0100 Subject: [PATCH 69/86] refactor: update package order --- IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order index a82b6e720e..e3f6408c42 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/package.order @@ -1,5 +1,5 @@ +ElectricalPV ISO9806HeatLossValidation ISO9806SolarGainHGloTil LongWaveRadiation -ElectricalPV PartialPVTCollectorValidation From 89e9963b4ae88ba533ae9e51a3ca5093e7ff2fd3 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Tue, 31 Mar 2026 14:36:00 +0200 Subject: [PATCH 70/86] test: update reference results unit test --- ...ectors_BaseClasses_Examples_ISO9806HeatLoss.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_BaseClasses_Examples_ISO9806HeatLoss.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_BaseClasses_Examples_ISO9806HeatLoss.txt index 8da1766a58..479fef05db 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_BaseClasses_Examples_ISO9806HeatLoss.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_BaseClasses_Examples_ISO9806HeatLoss.txt @@ -1,4 +1,4 @@ -last-generated=2025-08-20 +last-generated=2026-03-30 statistics-simulation= { "linear": " ", @@ -6,9 +6,9 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 8.64e+04] -QLos_flow_SteSta[2]=[-2.05037670135498e+01, -1.040544738769531e+02, 9.654362487792969e+01, -1.086377868652344e+02, -6.992151260375977e+00, 3.799695587158203e+01, -1.085949096679688e+02, 4.483555984496486e+01, -3.68971061706543e+01, -4.573825454711914e+01, 1.565166854858398e+01, -4.136196517944336e+01, -1.732366752624512e+01, -2.33474006652832e+01, 3.544300795228644e-01, -5.665920257568359e+01, 4.730720043182373e+00, -4.032113552113649e+00, -8.671389770507812e+01, 6.758737945556641e+01, -7.900448608398438e+01, -3.4015380859375e+01, 6.634174346923828e+01, -1.394262542724609e+02, 6.304693984985352e+01, -2.05037670135498e+01, -1.040544738769531e+02, 9.654362487792969e+01, -1.086377868651351e+02, -6.992151260375977e+00, 3.799695587158203e+01, -1.085949096679688e+02, 4.48355598449707e+01, -3.68971061706543e+01, -4.57382545470016e+01, 1.565166854858278e+01, -4.136196517944336e+01, -1.732366752624512e+01, -2.33474006652832e+01, 3.54430079460144e-01, -5.665920257568359e+01, 4.730720043182373e+00, -4.032113552093506e+00, -8.671389770507812e+01, 6.758737945556641e+01, -7.900448608398438e+01, -3.4015380859375e+01, 6.634174346923828e+01, -1.394262542724609e+02, 6.304693984985352e+01, -2.05037670135498e+01, -1.040544738769531e+02, 9.654362487792969e+01, -1.086377868652344e+02, -6.992151260375977e+00, 3.799695587157589e+01, -1.085949096679638e+02, 4.483555984499695e+01, -3.68971061706543e+01, -4.573825454711914e+01, 1.565166854858398e+01, -4.136196517944336e+01, -1.732366752624512e+01, -2.33474006652832e+01, 3.54430079460144e-01, -5.665920257568359e+01, 4.730720043182373e+00, -4.032113552093506e+00, -8.671389770493275e+01, 6.758737945556143e+01, -7.900448608397892e+01, -3.4015380859375e+01, 6.634174346923828e+01, -1.394262542724609e+02, 6.304693984985352e+01, -2.05037670135498e+01, -1.040544738769531e+02, 9.654362487792969e+01, -1.086377868652344e+02, -6.992151260375977e+00, 3.799695587158203e+01, -1.085949096679688e+02, 4.48355598449707e+01, -3.68971061706543e+01, -4.573825454711914e+01, 1.565166854858398e+01, -4.136196517944336e+01, -1.732366752624512e+01, -2.33474006652832e+01, 3.54430079460144e-01, -5.665920257568359e+01, 4.730720043182373e+00, -4.032113552093506e+00, -8.671389770507812e+01, 6.758737945556641e+01, -7.900448608398438e+01, -3.4015380859375e+01, 6.634174346923828e+01, -1.394262542724609e+02, 6.304693984985352e+01, -2.05037670135498e+01] -QLos_flow_QuaDyn[2]=[-3.000966644287109e+01, -1.654351043701172e+02, 1.611103057861328e+02, -1.947281646728516e+02, -4.168970108032227e+00, 6.101468276977539e+01, -2.122754516601562e+02, 9.700908660887495e+01, -9.476739501953125e+01, -8.706436920166016e+01, 2.617464447021484e+01, -1.044306564331055e+02, -2.736683654785156e+01, -7.732371520996094e+01, 4.952973365943034e+00, -1.385165863037109e+02, -8.604788780212402e+00, -1.757830530916655e-01, -2.354643707275391e+02, 1.677459564208984e+02, -2.047983856201172e+02, -1.041177368164062e+02, 1.756872253417969e+02, -3.790491638183594e+02, 1.612842254638672e+02, -6.016633224487305e+01, -2.83260498046875e+02, 2.514433288574219e+02, -2.990527648923023e+02, -1.472232055664062e+01, 8.473185729980469e+01, -2.859598388671875e+02, 1.185233001708984e+02, -1.140842742919922e+02, -1.052965393063286e+02, 2.867712593078357e+01, -1.116280975341797e+02, -2.853879928588867e+01, -7.583922576904297e+01, 5.782583713531494e+00, -1.226708831787109e+02, -8.230228424072266e+00, 4.218788146972656e+00, -1.846393432617188e+02, 1.279366760253906e+02, -1.423576507568359e+02, -7.125192260742188e+01, 1.20380256652832e+02, -2.346831970214844e+02, 9.986605834960938e+01, -3.000966644287109e+01, -1.496138305664062e+02, 1.349866943359375e+02, -1.455437774658203e+02, 3.1224205493927e+00, 3.818428039550083e+01, -1.156852722167909e+02, 5.87652740478751e+01, -4.759512710571289e+01, -2.373049545288086e+01, 1.287708187103271e+01, -3.54870719909668e+01, 8.753655433654785e+00, -2.860214042663574e+01, 1.455894470214844e+01, -2.262503623962402e+01, -6.554540157318115e+00, 1.934500122070312e+01, -4.346738052357917e+01, 3.594285202026093e+01, -1.981084251403596e+01, -1.567887210845947e+01, 3.899851226806641e+01, -4.856768798828125e+01, 3.02008171081543e+01, 1.470005661249161e-01, -3.178844833374023e+01, 4.465365982055664e+01, -4.121919250488281e+01, 1.367577075958252e+01, 1.446710109710693e+01, -4.200089263916016e+01, 3.725106048583984e+01, -2.827824592590332e+01, -5.498324394226074e+00, 1.037460041046143e+01, -2.828962707519531e+01, 9.925618171691895e+00, -3.008662605285645e+01, 1.372933387756348e+01, -3.847074127197266e+01, -6.92910099029541e+00, 1.495042991638184e+01, -9.429241180419922e+01, 7.575213623046875e+01, -8.225156402587891e+01, -4.854468536376953e+01, 9.430548858642578e+01, -1.929336700439453e+02, 9.161898803710938e+01, -3.000966644287109e+01] -TEnv.y=[2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.85029998779296e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167985e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199231e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546907e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.850299987792969e+02, 2.93418212890625e+02, 2.681795959472659e+02, 2.919667663574214e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195304e+02, 2.704850769042972e+02, 2.850299987793036e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136652e+02, 2.958149108886716e+02, 2.688841552734385e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.850299987792969e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02] -T1.y=[2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734403e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355332e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734432e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195102e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355185e+02, 2.831499938964842e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.83149993896485e+02, 2.919667663574209e+02, 2.688841552734393e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325194892e+02, 2.743332214355478e+02, 2.83149993896484e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02] -T2.y=[2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734403e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355332e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734432e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195102e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355185e+02, 2.881499938964842e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.88149993896485e+02, 2.969667663574209e+02, 2.738841552734393e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325194892e+02, 2.793332214355478e+02, 2.88149993896484e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02] -T3.y=[2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734403e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355332e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734432e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195102e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355185e+02, 2.931499938964842e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.93149993896485e+02, 3.019667663574209e+02, 2.788841552734393e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325194892e+02, 2.843332214355478e+02, 2.93149993896484e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02] +QLos_flow_SteSta[2]=[-3.461376571655273e+01, -1.756612548828125e+02, 1.62981689453125e+02, -1.833986358642578e+02, -1.180391407012939e+01, 6.414517974853516e+01, -1.833262634277344e+02, 7.568988037108387e+01, -6.22884521484375e+01, -7.721377563476562e+01, 2.64226188659668e+01, -6.982586669921875e+01, -2.924523162841797e+01, -3.94142951965332e+01, 5.983368755445726e-01, -9.565015411376953e+01, 7.986241340637207e+00, -6.80687808993879e+00, -1.463874816894531e+02, 1.140987243652344e+02, -1.333727111816406e+02, -5.742361831665039e+01, 1.119958953857422e+02, -2.353746948242188e+02, 1.064337158203125e+02, -3.461376571655273e+01, -1.756612548828125e+02, 1.62981689453125e+02, -1.833986358640902e+02, -1.180391407012939e+01, 6.414517974853516e+01, -1.833262634277344e+02, 7.568988037109375e+01, -6.22884521484375e+01, -7.721377563456718e+01, 2.642261886596437e+01, -6.982586669921875e+01, -2.924523162841797e+01, -3.94142951965332e+01, 5.983368754386902e-01, -9.565015411376953e+01, 7.986241340637207e+00, -6.806878089904785e+00, -1.463874816894531e+02, 1.140987243652344e+02, -1.333727111816406e+02, -5.742361831665039e+01, 1.119958953857422e+02, -2.353746948242188e+02, 1.064337158203125e+02, -3.461376571655273e+01, -1.756612548828125e+02, 1.62981689453125e+02, -1.833986358642578e+02, -1.180391407012939e+01, 6.41451797485248e+01, -1.833262634277271e+02, 7.568988037113806e+01, -6.22884521484375e+01, -7.721377563476562e+01, 2.64226188659668e+01, -6.982586669921875e+01, -2.924523162841797e+01, -3.94142951965332e+01, 5.983368754386902e-01, -9.565015411376953e+01, 7.986241340637207e+00, -6.806878089904785e+00, -1.463874816892077e+02, 1.14098724365226e+02, -1.333727111816268e+02, -5.742361831665039e+01, 1.119958953857422e+02, -2.353746948242188e+02, 1.064337158203125e+02, -3.461376571655273e+01, -1.756612548828125e+02, 1.62981689453125e+02, -1.833986358642578e+02, -1.180391407012939e+01, 6.414517974853516e+01, -1.833262634277344e+02, 7.568988037109375e+01, -6.22884521484375e+01, -7.721377563476562e+01, 2.64226188659668e+01, -6.982586669921875e+01, -2.924523162841797e+01, -3.94142951965332e+01, 5.983368754386902e-01, -9.565015411376953e+01, 7.986241340637207e+00, -6.806878089904785e+00, -1.463874816894531e+02, 1.140987243652344e+02, -1.333727111816406e+02, -5.742361831665039e+01, 1.119958953857422e+02, -2.353746948242188e+02, 1.064337158203125e+02, -3.461376571655273e+01] +QLos_flow_QuaDyn[2]=[-2.602566528320312e+01, -1.567047271728516e+02, 1.571813201904297e+02, -1.759888458251953e+02, 2.002447128295898e+00, 5.814956283569336e+01, -1.793143920898438e+02, 8.944403839110439e+01, -7.66317138671875e+01, -6.408020782470703e+01, 2.616937637329102e+01, -7.976358032226562e+01, -1.262259292602539e+01, -5.872324371337891e+01, 1.181876468671056e+01, -9.976512145996094e+01, -4.005714416503906e+00, 9.588548660242392e+00, -1.738812713623047e+02, 1.321890258789062e+02, -1.45318115234375e+02, -7.360208129882812e+01, 1.385887145996094e+02, -2.759207153320312e+02, 1.259432067871094e+02, -3.808833312988281e+01, -2.038348846435547e+02, 1.933145294189453e+02, -2.177186889646351e+02, -2.218893051147461e+00, 6.763643646240234e+01, -2.087881469726562e+02, 9.804972076416016e+01, -8.435846710205078e+01, -7.137307739233439e+01, 2.717036819457805e+01, -8.264255523681641e+01, -1.30913782119751e+01, -5.812944793701172e+01, 1.215060901641846e+01, -9.342684173583984e+01, -3.855890035629272e+00, 1.134637641906738e+01, -1.5355126953125e+02, 1.162653121948242e+02, -1.203418273925781e+02, -6.045575332641602e+01, 1.164659194946289e+02, -2.181743316650391e+02, 1.013759384155273e+02, -2.602566528320312e+01, -1.50376220703125e+02, 1.467318725585938e+02, -1.563150939941406e+02, 4.919003486633301e+00, 4.901739883422019e+01, -1.406783294677672e+02, 7.414651489260963e+01, -5.776280975341797e+01, -3.874665832519531e+01, 2.085035133361816e+01, -5.21861457824707e+01, 1.825603604316711e+00, -3.923461151123047e+01, 1.566115283966064e+01, -5.340850067138672e+01, -3.185614824295044e+00, 1.73968620300293e+01, -9.708248138408435e+01, 7.946778106688862e+01, -7.132310485838953e+01, -3.822653198242188e+01, 8.391322326660156e+01, -1.437281341552734e+02, 7.350984191894531e+01, -1.396299934387207e+01, -1.032460632324219e+02, 1.105986557006836e+02, -1.145852584838867e+02, 9.14034366607666e+00, 3.95305290222168e+01, -1.112045745849609e+02, 6.554082489013672e+01, -5.003605651855469e+01, -3.145378875732422e+01, 1.984935760498047e+01, -4.930716705322266e+01, 2.294388771057129e+00, -3.982840728759766e+01, 1.532930946350098e+01, -5.974678421020508e+01, -3.335438966751099e+00, 1.563903331756592e+01, -1.174124908447266e+02, 9.539149475097656e+01, -9.629939270019531e+01, -5.137285614013672e+01, 1.06036018371582e+02, -2.014745330810547e+02, 9.807711029052734e+01, -2.602566528320312e+01] +TEnv.y=[2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.85029998779296e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167985e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199231e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546907e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.850299987792969e+02, 2.93418212890625e+02, 2.681795959472659e+02, 2.919667663574211e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195304e+02, 2.704850769042972e+02, 2.850299987793036e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136652e+02, 2.958149108886716e+02, 2.688841552734387e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02, 2.715923156738281e+02, 2.978843078613281e+02, 2.759237060546875e+02, 2.776281433105469e+02, 2.974158325195312e+02, 2.704850769042969e+02, 2.850299987792969e+02, 2.93418212890625e+02, 2.681795959472656e+02, 2.919667663574219e+02, 2.868803405761719e+02, 2.695776062011719e+02, 2.96722412109375e+02, 2.794196472167969e+02, 2.743332214355469e+02, 2.981203918457031e+02, 2.728818054199219e+02, 2.812699890136719e+02, 2.958149108886719e+02, 2.688841552734375e+02, 2.88671875e+02, 2.903763122558594e+02, 2.684156799316406e+02, 2.947077026367188e+02, 2.831499938964844e+02] +T1.y=[2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734403e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355332e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734432e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195102e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355185e+02, 2.83149993896484e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.83149993896485e+02, 2.919667663574211e+02, 2.688841552734393e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325194892e+02, 2.743332214355478e+02, 2.831499938964836e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02, 2.919667663574219e+02, 2.688841552734375e+02, 2.974158325195312e+02, 2.743332214355469e+02, 2.831499938964844e+02] +T2.y=[2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734403e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355332e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734432e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195102e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355185e+02, 2.88149993896484e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.88149993896485e+02, 2.969667663574211e+02, 2.738841552734393e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325194892e+02, 2.793332214355478e+02, 2.881499938964836e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02, 2.969667663574219e+02, 2.738841552734375e+02, 3.024158325195312e+02, 2.793332214355469e+02, 2.881499938964844e+02] +T3.y=[2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734403e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355332e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734432e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195102e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355185e+02, 2.93149993896484e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.93149993896485e+02, 3.019667663574211e+02, 2.788841552734393e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325194892e+02, 2.843332214355478e+02, 2.931499938964836e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02, 3.019667663574219e+02, 2.788841552734375e+02, 3.074158325195312e+02, 2.843332214355469e+02, 2.931499938964844e+02] From aa5a8878937f019aaf5f7a6a74546adabb5ad374 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Wed, 1 Apr 2026 10:30:49 +0200 Subject: [PATCH 71/86] test: test Baseclasses Example only for PVTCollecters package unit test --- .github/workflows/github-actions.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 906367a962..086f7ddfa7 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -80,7 +80,6 @@ jobs: run: make test-dymola PACKAGE=\"IDEAS.Fluid.Movers\" INTERACTIVE=false - name: Test IDEAS.Fluid.PVTCollectors run: make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors.BaseClasses.Examples\" INTERACTIVE=false - && make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors.Examples\" INTERACTIVE=false - name: Test IDEAS.Fluid.Sensors run: make test-dymola PACKAGE=\"IDEAS.Fluid.Sensors\" INTERACTIVE=false - name: Test IDEAS.Fluid.SolarCollectors From 72ce34477e5e49ec603a6b740d1d8840a1e0e257 Mon Sep 17 00:00:00 2001 From: u0169319 Date: Sun, 5 Apr 2026 14:29:56 +0200 Subject: [PATCH 72/86] test: generate new reference results --- .github/workflows/github-actions.yml | 2 +- IDEAS/Fluid/PVTCollectors/PVTCollector.mo | 2 +- .../PVT_UI/PVTCollectorValidation.mo | 2 +- .../PVT_UN/PVTCollectorValidation.mo | 2 +- ..._Electrical_PVT_UI_Electrical_DayType1.txt | 12 +++++----- ..._Electrical_PVT_UI_Electrical_DayType2.txt | 8 +++---- ..._Electrical_PVT_UI_Electrical_DayType3.txt | 8 +++---- ..._Electrical_PVT_UI_Electrical_DayType4.txt | 8 +++---- ...PVT_UI_Thermal_PVT_UI_Thermal_DayType1.txt | 22 ++++++++++--------- ...PVT_UI_Thermal_PVT_UI_Thermal_DayType2.txt | 18 ++++++++------- ...PVT_UI_Thermal_PVT_UI_Thermal_DayType3.txt | 20 +++++++++-------- ...PVT_UI_Thermal_PVT_UI_Thermal_DayType4.txt | 18 ++++++++------- ...rs_Validation_PVT_UN_PVT_UN_Electrical.txt | 12 +++++----- ...ctors_Validation_PVT_UN_PVT_UN_Thermal.txt | 22 ++++++++++--------- .../Electrical/PVT_UI_Electrical_DayType1.mos | 4 ++-- .../Thermal/PVT_UI_Thermal_DayType1.mos | 6 ++--- .../Thermal/PVT_UI_Thermal_DayType2.mos | 2 +- .../Thermal/PVT_UI_Thermal_DayType3.mos | 2 +- .../Thermal/PVT_UI_Thermal_DayType4.mos | 2 +- .../Validation/PVT_UN/PVT_UN_Thermal.mos | 2 +- 20 files changed, 92 insertions(+), 82 deletions(-) diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 086f7ddfa7..88780a8a88 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -79,7 +79,7 @@ jobs: - name: Test IDEAS.Fluid.Movers run: make test-dymola PACKAGE=\"IDEAS.Fluid.Movers\" INTERACTIVE=false - name: Test IDEAS.Fluid.PVTCollectors - run: make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors.BaseClasses.Examples\" INTERACTIVE=false + run: make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors\" INTERACTIVE=false - name: Test IDEAS.Fluid.Sensors run: make test-dymola PACKAGE=\"IDEAS.Fluid.Sensors\" INTERACTIVE=false - name: Test IDEAS.Fluid.SolarCollectors diff --git a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo index 2a7d99903d..31fe3fb306 100644 --- a/IDEAS/Fluid/PVTCollectors/PVTCollector.mo +++ b/IDEAS/Fluid/PVTCollectors/PVTCollector.mo @@ -145,7 +145,7 @@ equation connect(HGloTil.y, eleGen.HGloTil) annotation (Line( points={{-44.5,-90},{-30,-90},{-30,-76},{-22,-76}}, color={0,0,127})); - connect(qThSegExp.y,eleGen.Qth) annotation (Line( + connect(qThSegExp.y,eleGen.qth) annotation (Line( points={{-39,-70},{-22,-70}}, color={0,0,127})); annotation ( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 0d7ef28d0b..9f644c9f28 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -155,7 +155,7 @@ equation -64},{-22,-64}}, color={0,0,127})); connect(Eglob.y, eleGen.HGloTil) annotation (Line(points={{-73.55,-38},{-32,-38}, {-32,-76},{-22,-76}}, color={0,0,127})); - connect(qThSegExp.y,eleGen.Qth) annotation (Line( + connect(qThSegExp.y,eleGen.qth) annotation (Line( points={{-39,-90},{-30,-90},{-30,-70},{-22,-70}}, color={0,0,127})); annotation ( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index cff3bef177..6ec427a6cb 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -104,7 +104,7 @@ equation 30},{-36,30},{-36,82},{10.5,82}}, color={0,0,127})); connect(TFluKel.Celsius, meaDat.y[5]) annotation (Line(points={{22,82},{54,82}, {54,80},{57,80}}, color={0,0,127})); - connect(qThSegExp.y,eleGen.Qth) annotation (Line( + connect(qThSegExp.y,eleGen.qth) annotation (Line( points={{-39,-70},{-22,-70}}, color={0,0,127})); annotation ( diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType1.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType1.txt index 6eb6651872..dbb7128749 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType1.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType1.txt @@ -1,12 +1,12 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", + "nonlinear": "1", "number of continuous time states": "3", "numerical Jacobians": "0" } -time=[1.8872522e+07, 1.8909242e+07] -meaPel.y=[1.765123596191406e+02, 1.799439620559191e+02, 1.839430376207318e+02, 1.874777527680392e+02, 1.901459523793858e+02, 1.931168518066406e+02, 1.962967651367113e+02, 1.993142948695493e+02, 2.014782970428531e+02, 2.042045227050817e+02, 2.064756011962891e+02, 2.086874686104856e+02, 2.11419957778021e+02, 2.137787453787739e+02, 2.152265136718803e+02, 2.169821929931641e+02, 2.182629730224597e+02, 2.206163632779401e+02, 2.220235975935739e+02, 2.232854817158503e+02, 2.244706573486328e+02, 2.251597432729301e+02, 2.262585284258844e+02, 2.263719363650734e+02, 2.266717324649595e+02, 2.264625549316406e+02, 2.258985507541269e+02, 2.25396892116369e+02, 2.240041772460997e+02, 2.253122222900412e+02, 2.239204559326172e+02, 2.249016448974589e+02, 2.242426214599636e+02, 2.209366210937395e+02, 2.201668658282327e+02, 2.202799682617188e+02, 2.172892913819607e+02, 2.161475599134366e+02, 2.148929665230388e+02, 2.122201172699674e+02, 2.094797515869141e+02, 2.078739194003131e+02, 2.064990732127316e+02, 2.017051933875236e+02, 2.006964674516068e+02, 1.965315246582031e+02, 1.930226196289206e+02, 1.906460807106844e+02, 1.875954208373885e+02, 1.848103775024305e+02, 1.806873931884766e+02, 1.751953078811298e+02, 1.718404519571263e+02, 1.672533742543779e+02, 1.650064350024987e+02, 1.597934265136719e+02, 1.54164068521047e+02, 1.505821160016947e+02, 1.458999206542827e+02, 1.373511838640562e+02, 1.375582427978516e+02, 1.313458993094173e+02, 1.257859668507521e+02, 1.199203831263728e+02, 1.12320443420396e+02, 1.067176666259766e+02, 1.003102020263733e+02, 9.550542544805027e+01, 8.950856430463226e+01, 8.298225188382955e+01, 7.699978637695312e+01, 7.102145055823419e+01, 6.433014367595966e+01, 5.840119531990057e+01, 5.204547747442325e+01, 4.592605972290039e+01, 3.937860887316442e+01, 3.475461060899622e+01, 2.936285705564346e+01, 2.418584094046558e+01, 1.952142143249512e+01, 1.56470623016423e+01, 1.262941112519365e+01, 1.021830368041417e+01, 7.779169523391936e+00, 7.056164264678955e+00, 6.584227659896283e+00, 6.171749550591865e+00, 5.832991308778051e+00, 4.952797778880329e+00, 5.041140079498291e+00, 4.695257368954957e+00, 4.316301125495469e+00, 3.875019168851948e+00, 2.998671106858764e+00, 2.688587188720703e+00, 2.307376222611462e+00, 2.043585415144949e+00, 1.863150822149016e+00, 1.683688634150375e+00, 1.504226326942444e+00] -simPel.y=[1.789854888916016e+02, 1.829847356847734e+02, 1.867112315409711e+02, 1.897636189228893e+02, 1.926478573361008e+02, 1.957843627929688e+02, 1.985897018020135e+02, 2.01391641845691e+02, 2.036933990478591e+02, 2.063339854649167e+02, 2.081860198974609e+02, 2.104874446323892e+02, 2.132234114702915e+02, 2.153377811976865e+02, 2.168563067626998e+02, 2.189143676757812e+02, 2.19492132568358e+02, 2.212112773998231e+02, 2.227150154732453e+02, 2.240603726773701e+02, 2.248250579833984e+02, 2.252415928196225e+02, 2.26254009597362e+02, 2.265385340510103e+02, 2.26588731833068e+02, 2.260678100585938e+02, 2.253150719536706e+02, 2.246502185323869e+02, 2.234983599853581e+02, 2.249773666381874e+02, 2.240055236816406e+02, 2.251367065429666e+02, 2.245750317382831e+02, 2.212138946533093e+02, 2.204367891878702e+02, 2.201819763183594e+02, 2.210738932016848e+02, 2.167935661522186e+02, 2.156758062414193e+02, 2.128153332684365e+02, 2.100774230957031e+02, 2.085926544189568e+02, 2.072093377475162e+02, 2.023755213810614e+02, 2.019389670632056e+02, 1.968471832275391e+02, 1.934088665771638e+02, 1.909014004794127e+02, 1.88021203613271e+02, 1.854972991943264e+02, 1.808010559082031e+02, 1.750696947252498e+02, 1.717504414326849e+02, 1.67220050626185e+02, 1.653159920357279e+02, 1.603447265625e+02, 1.551036028063093e+02, 1.517688500976749e+02, 1.473468856811402e+02, 1.387953445434565e+02, 1.397925109863281e+02, 1.332179957798306e+02, 1.287445115033539e+02, 1.230153313772786e+02, 1.160320144653203e+02, 1.105615997314453e+02, 1.042025527954145e+02, 9.992991180421402e+01, 9.479539015483684e+01, 8.893341658307759e+01, 8.418517303466797e+01, 7.870949410104235e+01, 7.422561237230643e+01, 7.047155085379471e+01, 6.290788623584187e+01, 5.744361114501953e+01, 5.120913323297349e+01, 4.734000290582856e+01, 4.223411163328129e+01, 3.695977897642992e+01, 3.190852737426758e+01, 2.73865830739418e+01, 2.313112152101261e+01, 1.914504775999927e+01, 1.469786825952437e+01, 1.103186511993408e+01, 7.614921134228294e+00, 7.10037512135061e+00, 6.604049930055123e+00, 6.085355732890974e+00, 5.52373218536377e+00, 5.001929447869287e+00, 4.189578437807938e+00, 3.55548076262582e+00, 2.940664638171239e+00, 2.311501026153564e+00, 1.697601346970691e+00, 1.168922940462574e+00, 6.298345037387113e-01, 9.266995271005557e-02, -4.454710781574249e-01] -UAbsFluid.y=[3.276138687133789e+01, 3.276138687133789e+01] +time=[1.8872522e+07, 1.89089e+07] +meaPel.y=[1.765123596191406e+02, 1.799095701475543e+02, 1.838707514582286e+02, 1.87389872659218e+02, 1.900652023727891e+02, 1.92957366180405e+02, 1.960867630683021e+02, 1.991557453960903e+02, 2.013528099059986e+02, 2.040501632605636e+02, 2.062824768066448e+02, 2.084047015958085e+02, 2.110922595049836e+02, 2.135522124989857e+02, 2.148729677626797e+02, 2.168102908134435e+02, 2.181471932373056e+02, 2.201846429606967e+02, 2.217327326847918e+02, 2.230988224411017e+02, 2.243545458819426e+02, 2.24992649688723e+02, 2.26113084877416e+02, 2.264394132098036e+02, 2.264744194335884e+02, 2.265545469430777e+02, 2.262673842551477e+02, 2.248118618265797e+02, 2.237306785459784e+02, 2.250721392533559e+02, 2.24396670913705e+02, 2.245918726348865e+02, 2.244457937869494e+02, 2.222585148620794e+02, 2.203000101810038e+02, 2.205858991622914e+02, 2.201765042622787e+02, 1.967537669829144e+02, 2.14957452545166e+02, 2.136944522094579e+02, 2.100680079279723e+02, 2.088070654461831e+02, 2.070531940769473e+02, 2.036250523758036e+02, 2.010766304524763e+02, 1.972584971618504e+02, 1.951454809231273e+02, 1.921951565288659e+02, 1.891896780100064e+02, 1.867280829511386e+02, 1.824910149207482e+02, 1.775604287910337e+02, 1.73347234386112e+02, 1.675384514389061e+02, 1.664651331583591e+02, 1.627500587051177e+02, 1.575445540144678e+02, 1.525487599429527e+02, 1.480511533335348e+02, 1.439802245076549e+02, 1.401562168666433e+02, 1.289197066346338e+02, 1.298422277832128e+02, 1.231901161193783e+02, 1.169295190429181e+02, 1.035773010253643e+02, 1.011598393249526e+02, 9.903782670154662e+01, 9.368513566302062e+01, 8.70029055043763e+01, 8.085806340395641e+01, 7.512476721482177e+01, 6.926466415405011e+01, 6.233877660113588e+01, 5.652388791277315e+01, 5.003229726444591e+01, 4.425237144468107e+01, 3.82066513208382e+01, 3.319379688609938e+01, 2.795133691786224e+01, 2.290866254611188e+01, 1.844895132700944e+01, 1.487161753353952e+01, 1.204986465852606e+01, 9.532567969661097e+00, 7.589430684654878e+00, 6.942496474758513e+00, 6.520753062665973e+00, 5.969477953227938e+00, 5.778928713797061e+00, 5.217344055172661e+00, 4.990674310524858e+00, 4.680158384640531e+00, 4.252228123949525e+00, 3.819269626075789e+00, 3.003060809341791e+00, 2.6838907051094e+00, 2.261007044121881e+00, 2.027395072562629e+00, 1.849319966484334e+00, 1.671244978904724e+00] +simPel.y=[1.792727661132812e+02, 1.832585159673047e+02, 1.86967389666567e+02, 1.900233749595837e+02, 1.929214933488245e+02, 1.960112863540508e+02, 1.987461902703146e+02, 2.015919060346889e+02, 2.039548282368891e+02, 2.066311009470602e+02, 2.084828883924013e+02, 2.106985859968739e+02, 2.13437929967928e+02, 2.157423513793955e+02, 2.170618351386686e+02, 2.191180386304809e+02, 2.199009212646495e+02, 2.214963963699411e+02, 2.231110402385991e+02, 2.242519631195085e+02, 2.253901000151741e+02, 2.2578123504639e+02, 2.267071225136206e+02, 2.273231341193733e+02, 2.268523151855411e+02, 2.267383924630972e+02, 2.262674277010793e+02, 2.247341584777819e+02, 2.237999563021283e+02, 2.251167324911576e+02, 2.251924266815264e+02, 2.25388093795775e+02, 2.253047656249989e+02, 2.231932414245805e+02, 2.21277445195517e+02, 2.211442158381132e+02, 2.208489184231032e+02, 2.183721489257866e+02, 2.162049935913092e+02, 2.151406148855822e+02, 2.111370311840162e+02, 2.099679710346946e+02, 2.081334096300267e+02, 2.048261331558323e+02, 2.020716883002423e+02, 1.983265025329362e+02, 1.959794556003169e+02, 1.92704906226847e+02, 1.898024125622045e+02, 1.874968268966664e+02, 1.833721803518442e+02, 1.778506775283703e+02, 1.735159408569481e+02, 1.67729622398379e+02, 1.671084261067674e+02, 1.634105048927289e+02, 1.586111244985252e+02, 1.537155356907156e+02, 1.49661622042294e+02, 1.45894216105148e+02, 1.420994162423463e+02, 1.329956862793877e+02, 1.327065530395597e+02, 1.264451464080749e+02, 1.203865991210448e+02, 1.083208679199079e+02, 1.051280827026369e+02, 1.031791444178768e+02, 9.862061134133418e+01, 9.252177539928067e+01, 8.74429292214719e+01, 8.270364658048481e+01, 7.746813398572948e+01, 7.509123168945263e+01, 6.771288513186505e+01, 6.114431979439475e+01, 5.6003579788189e+01, 5.025274750637098e+01, 4.584857362227207e+01, 4.086918312071241e+01, 3.559807513008968e+01, 3.068315090179848e+01, 2.636567088425767e+01, 2.228867418184884e+01, 1.824404728657994e+01, 1.381289401440148e+01, 9.518184996461009e+00, 7.497069180906783e+00, 7.01106794629702e+00, 6.525361781118139e+00, 6.002589311600719e+00, 5.457857906950315e+00, 4.886074832276775e+00, 4.097872307624396e+00, 3.475884575456661e+00, 2.869176384562475e+00, 2.241961498262216e+00, 1.643920365990615e+00, 1.120437949861712e+00, 5.883769774776308e-01, 5.537696182727814e-02] +UAbsFluid.y=[3.440407562255859e+01, 3.440407562255859e+01] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType2.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType2.txt index a29d8c046f..e9ec95a24a 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType2.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType2.txt @@ -1,12 +1,12 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", + "nonlinear": "1", "number of continuous time states": "3", "numerical Jacobians": "0" } time=[1.722828e+07, 1.727004e+07] meaPel.y=[1.175168991088867e+02, 1.175168991088867e+02, 1.120599432809052e+02, 8.577137944817734e+01, 1.452559545888224e+02, 7.793425750732422e+01, 7.981423270822724e+01, 9.187001675699085e+01, 1.072860006713834e+02, 1.283070265609914e+02, 9.289588928222656e+01, 1.688641249704914e+02, 1.288950809293334e+02, 1.984867703391889e+02, 1.142789945704764e+02, 1.838657989501953e+02, 1.987464394174056e+02, 1.977998876953091e+02, 2.021651544744441e+02, 2.062079570951946e+02, 2.055653686523438e+02, 2.095333038330231e+02, 2.138759790757056e+02, 2.182033083961125e+02, 2.163832904683582e+02, 2.364036254882812e+02, 2.458786233836413e+02, 8.179550199960127e+01, 7.043716367841128e+01, 2.494073632809988e+02, 2.227923278808594e+02, 2.563225946334884e+02, 2.561341219815889e+02, 2.557727423095358e+02, 2.553968150068838e+02, 1.976119537353516e+02, 2.197782770499531e+02, 1.88092612712204e+02, 2.145817997518483e+02, 9.354223210967497e+01, 2.191650848388672e+02, 2.583183101002867e+02, 1.195419601440399e+02, 2.242249547784426e+02, 5.106261574881248e+01, 5.269314193725586e+01, 1.968655181891759e+02, 2.173701426790324e+02, 2.180688687276818e+02, 2.237861656452071e+02, 2.163819427490234e+02, 2.101629233524598e+02, 6.09456500832504e+01, 2.062199247472859e+02, 2.079680065918108e+02, 1.841834411621094e+02, 1.944572109404189e+02, 1.892278123335458e+02, 1.822004425048672e+02, 1.770306121828335e+02, 6.102216720581055e+01, 1.46709959681418e+02, 1.765424951462412e+02, 1.611944872174576e+02, 1.519572919060506e+02, 1.440639953613281e+02, 1.369855947354722e+02, 1.322413531494165e+02, 1.198535319934985e+02, 1.279085811796676e+02, 1.164482192993164e+02, 1.081191195678437e+02, 9.622525248810507e+01, 8.737222050256447e+01, 7.948509968727507e+01, 7.268970489501953e+01, 6.586621009561341e+01, 5.915455242339883e+01, 5.203622081979799e+01, 4.531739669801985e+01, 3.876614761352539e+01, 3.29042142777017e+01, 2.726266011325729e+01, 2.250515136718029e+01, 1.832305918438917e+01, 1.498011493682861e+01, 1.215090089684609e+01, 1.060869052523795e+01, 9.99508635202973e+00, 9.166799646270961e+00, 8.489965438842773e+00, 8.190782872641808e+00, 8.000074844360707e+00, 7.45481853485046e+00, 7.071148920058854e+00, 7.005298614501953e+00, 6.472799262998234e+00, 5.421510842265478e+00, 4.900332827791698e+00, 4.660652739659668e+00, 5.058420181274414e+00] -simPel.y=[1.23446044921875e+02, 1.235603834481079e+02, 1.167844730922086e+02, 9.203665170085425e+01, 1.443269781484768e+02, 8.078895568847656e+01, 8.49940305075054e+01, 9.857328505094414e+01, 1.147364651489127e+02, 1.36661976996123e+02, 9.380638885498047e+01, 1.723663757319241e+02, 1.352745914999561e+02, 2.024588515508446e+02, 1.148408714734185e+02, 1.821391448974609e+02, 2.012677827416512e+02, 2.013592590332013e+02, 2.050416229248148e+02, 2.087668303716759e+02, 2.086360931396484e+02, 2.125875366211075e+02, 2.163849454991901e+02, 2.207657499767487e+02, 2.191766970930028e+02, 2.394189147949219e+02, 2.490106351655303e+02, 8.259459904265843e+01, 7.279705666940973e+01, 2.482963476560287e+02, 2.307792510986328e+02, 2.608773957751143e+02, 2.602518543591002e+02, 2.652417553710817e+02, 2.6043788318167e+02, 2.050722351074219e+02, 2.218674323593984e+02, 2.03048152524412e+02, 2.21125614565474e+02, 9.652644366116833e+01, 2.236799621582031e+02, 2.616241023366065e+02, 1.290678955078977e+02, 2.284250690807486e+02, 5.303099892025691e+01, 5.444174194335938e+01, 1.837552435311582e+02, 2.287565210681797e+02, 2.098750043595465e+02, 2.252705106537372e+02, 2.191225128173828e+02, 2.127353924981352e+02, 6.86111934124242e+01, 2.079275440889652e+02, 2.102998010254053e+02, 1.8804833984375e+02, 1.967654785883029e+02, 1.922185347123602e+02, 1.858409655761578e+02, 1.816455575339724e+02, 6.227620697021484e+01, 1.422404393819224e+02, 1.787861338297428e+02, 1.648938145228441e+02, 1.552710757985101e+02, 1.475614776611328e+02, 1.403231584502128e+02, 1.361607080078157e+02, 1.243558767145183e+02, 1.316466412498821e+02, 1.211866760253906e+02, 1.131292022704828e+02, 1.021650124942797e+02, 9.37729154314209e+01, 8.766409112341742e+01, 8.076983642578125e+01, 7.467255675215375e+01, 6.876835414342661e+01, 6.239318071252146e+01, 5.666370559694273e+01, 5.056187057495117e+01, 4.473583125157954e+01, 3.911036661322481e+01, 3.39794874572673e+01, 2.921394624479051e+01, 2.469016265869141e+01, 2.010113336898059e+01, 1.579959418887706e+01, 1.336100535618383e+01, 1.054027736888936e+01, 9.706753730773926e+00, 9.299452590941584e+00, 9.000661392212873e+00, 8.156238139758473e+00, 7.659313013439787e+00, 7.455888271331787e+00, 6.639830436704263e+00, 5.816154536080916e+00, 4.659960578734761e+00, 3.56725861004801e+00, 2.495930910110474e+00] -UAbsFluid.y=[3.276138687133789e+01, 3.276138687133789e+01] +simPel.y=[1.235562362670898e+02, 1.236743857548159e+02, 1.168843163626467e+02, 9.20968600102519e+01, 1.44508560179724e+02, 8.083425140380859e+01, 8.504877108629319e+01, 9.865108115468195e+01, 1.148473733520377e+02, 1.368334156691901e+02, 9.387785339355469e+01, 1.726559367455365e+02, 1.35443016560409e+02, 2.028752063569271e+02, 1.149568043419249e+02, 1.824600372314453e+02, 2.016895730367638e+02, 2.017736779785138e+02, 2.054711497913808e+02, 2.092231618245452e+02, 2.090843505859375e+02, 2.130590380859514e+02, 2.168861547133444e+02, 2.212851842971077e+02, 2.196865953116178e+02, 2.400438995361328e+02, 2.497027148016767e+02, 8.265726173041425e+01, 7.28462952558356e+01, 2.490114025876679e+02, 2.313899993896484e+02, 2.616966664631254e+02, 2.610267650258267e+02, 2.660746264648318e+02, 2.61230824689149e+02, 2.055438232421875e+02, 2.224305820247859e+02, 2.035194488530048e+02, 2.216958281013257e+02, 9.662154837236474e+01, 2.242501831054688e+02, 2.624318334067764e+02, 1.292385217286011e+02, 2.290325089888632e+02, 5.305854633876042e+01, 5.447487258911133e+01, 1.841460113534277e+02, 2.293644367894015e+02, 2.103760480607178e+02, 2.258524490882062e+02, 2.196649932861328e+02, 2.132577375740713e+02, 6.866042030044684e+01, 2.084287841797283e+02, 2.108150598144679e+02, 1.884457397460938e+02, 1.972087756929114e+02, 1.926453421852828e+02, 1.862333538818218e+02, 1.820170441419665e+02, 6.23127326965332e+01, 1.424627712480203e+02, 1.791478220621646e+02, 1.651925999232346e+02, 1.555375208237859e+02, 1.478070220947266e+02, 1.405438608308816e+02, 1.36367190551761e+02, 1.245286589188862e+02, 1.318416595458968e+02, 1.213522415161133e+02, 1.132718481445061e+02, 1.022781684426943e+02, 9.386776268367628e+01, 8.774810049126165e+01, 8.084046173095703e+01, 7.473340580379369e+01, 6.881918022520212e+01, 6.243613590912645e+01, 5.669840805055605e+01, 5.059011077880859e+01, 4.475817030041928e+01, 3.912807728161526e+01, 3.399281967162276e+01, 2.922371676376799e+01, 2.469760513305664e+01, 2.010568116130308e+01, 1.580202240717366e+01, 1.336263279686347e+01, 1.054136391808728e+01, 9.707500457763672e+00, 9.299988560559473e+00, 9.001060447693831e+00, 8.156429585542609e+00, 7.659474747521237e+00, 7.455968379974365e+00, 6.639754657743081e+00, 5.815981601268258e+00, 4.659757773079418e+00, 3.567024016384113e+00, 2.495723724365234e+00] +UAbsFluid.y=[3.440407562255859e+01, 3.440407562255859e+01] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType3.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType3.txt index ce38737b2c..bcac292a0c 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType3.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType3.txt @@ -1,12 +1,12 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", + "nonlinear": "1", "number of continuous time states": "3", "numerical Jacobians": "0" } time=[1.774704e+07, 1.778856e+07] meaPel.y=[1.123362503051758e+02, 1.123362503051758e+02, 1.157099313354367e+02, 1.210894559114069e+02, 1.267025854492287e+02, 1.320232391357422e+02, 1.370686649867346e+02, 1.432557895478597e+02, 1.480644936166321e+02, 1.531831121535619e+02, 1.572573394775391e+02, 1.622271743774352e+02, 1.666415724129308e+02, 1.711994732084935e+02, 1.740819526223607e+02, 1.778966827392578e+02, 1.810148554021548e+02, 1.859256663929315e+02, 1.832939043831377e+02, 1.934194339752279e+02, 1.968295593261719e+02, 1.998832415771534e+02, 1.946218524751086e+02, 2.050909207589102e+02, 1.989849357963589e+02, 2.142467956542969e+02, 2.158966070266241e+02, 2.171612908063642e+02, 2.184030848185265e+02, 1.945693582149723e+02, 2.020834655761719e+02, 2.266633285522469e+02, 2.192190420712388e+02, 2.229906896418025e+02, 2.119190979004647e+02, 1.769372406005859e+02, 2.237478093764669e+02, 2.187019570487285e+02, 2.222662693418669e+02, 7.347647857585416e+01, 2.277636108398438e+02, 2.244311623709367e+02, 2.17461466124055e+02, 2.083487843834565e+02, 2.112557554699114e+02, 1.998090972900391e+02, 2.071223797607391e+02, 2.066383008873777e+02, 1.46459192504635e+02, 2.123102696010086e+02, 2.094998626708984e+02, 1.920973833357264e+02, 1.353274957283505e+02, 1.920875337019718e+02, 1.228747036738612e+02, 1.840113983154297e+02, 1.760508466448412e+02, 3.632256084627673e+01, 9.457968606818915e+01, 1.648879773821051e+02, 8.427262878417969e+01, 1.209876747129113e+02, 1.537057198360714e+02, 1.394645265124921e+02, 7.876714544807488e+01, 3.100265693664551e+01, 9.826035960779522e+01, 9.633266435139576e+01, 1.173069287468028e+02, 1.053434715270748e+02, 9.787892913818359e+01, 8.657481513980471e+01, 7.841688661126712e+01, 7.798757572719349e+01, 7.132809658957092e+01, 6.31436882019043e+01, 5.787607254755982e+01, 5.379350585938873e+01, 4.74536436716449e+01, 4.055648395537472e+01, 3.566317749023438e+01, 2.986091499329591e+01, 2.467898436155312e+01, 2.073699361626432e+01, 1.716440225080469e+01, 1.447585964202881e+01, 1.179947932748623e+01, 1.052195243381681e+01, 9.538919146303378e+00, 8.600894069670284e+00, 7.987228393554688e+00, 7.336223570506723e+00, 6.474116127665597e+00, 5.915830462316754e+00, 4.914713791439131e+00, 4.285565853118896e+00, 3.953606405259018e+00, 2.998517183644778e+00, 2.58451066017181e+00, 2.441573774246542e+00, 2.216153144836426e+00] -simPel.y=[1.179157562255859e+02, 1.178759307861328e+02, 1.212043753051551e+02, 1.258380797013175e+02, 1.309384729004003e+02, 1.362268371582031e+02, 1.411758630661616e+02, 1.469145121982937e+02, 1.513870854819873e+02, 1.561179542178288e+02, 1.602070770263672e+02, 1.649214767456001e+02, 1.68931890658656e+02, 1.73603168305917e+02, 1.763264497644767e+02, 1.802049865722656e+02, 1.831376770019404e+02, 1.886373160622351e+02, 1.855257360122652e+02, 1.954157287597717e+02, 1.98907958984375e+02, 2.027337306213376e+02, 1.962814900715911e+02, 2.069612572370127e+02, 2.013887763609958e+02, 2.13574462890625e+02, 2.180282152448606e+02, 2.191176882498676e+02, 2.203243944440636e+02, 1.986077770992404e+02, 2.051690979003906e+02, 2.277262832641581e+02, 2.209792756922769e+02, 2.241817113703202e+02, 2.142119961825697e+02, 1.829156036376953e+02, 2.242157021915412e+02, 2.203482658749997e+02, 2.237330496952823e+02, 9.077754440230669e+01, 2.26383056640625e+02, 2.260667932419346e+02, 2.194610386546465e+02, 2.09936429487249e+02, 2.131124747140059e+02, 2.005435028076172e+02, 2.08630579223634e+02, 2.081262610393886e+02, 1.571641040034325e+02, 2.127916329520132e+02, 2.102095489501953e+02, 1.945276515416368e+02, 1.481220062262564e+02, 1.93251695185078e+02, 1.345233862300632e+02, 1.843326110839844e+02, 1.779321932838328e+02, 3.904953553340629e+01, 9.053686609128897e+01, 1.661385079519982e+02, 9.121119689941406e+01, 1.194002815244279e+02, 1.552619467900319e+02, 1.419082558767962e+02, 8.55388257638383e+01, 3.304010391235352e+01, 9.706566619845341e+01, 1.026432934850995e+02, 1.203875111299067e+02, 1.092106208801028e+02, 1.018038177490234e+02, 9.134442085269288e+01, 8.389709381835019e+01, 8.713953543529183e+01, 7.830711960563586e+01, 7.040114593505859e+01, 6.585938284738502e+01, 6.23990683637438e+01, 5.713916260853244e+01, 5.043565353392753e+01, 4.615166473388672e+01, 4.017961082459522e+01, 3.469926560347599e+01, 3.051962023646739e+01, 2.615537528991018e+01, 2.254637908935547e+01, 1.803336421742951e+01, 1.459176214309507e+01, 1.109206833673783e+01, 9.683508682249487e+00, 8.98418140411377e+00, 8.075231543043044e+00, 7.215176840529521e+00, 6.348877999892572e+00, 5.283701646893742e+00, 4.360016822814941e+00, 3.671461954118088e+00, 3.045943525565123e+00, 2.43908375739819e+00, 1.761505925086501e+00, 1.085396766662598e+00] -UAbsFluid.y=[3.276138687133789e+01, 3.276138687133789e+01] +simPel.y=[1.179318923950195e+02, 1.178905043465751e+02, 1.212259997558386e+02, 1.258723796015383e+02, 1.309844628906347e+02, 1.362866516113281e+02, 1.412512352352929e+02, 1.469959870837801e+02, 1.514854936553391e+02, 1.562392986479348e+02, 1.603360900878906e+02, 1.650679489135689e+02, 1.690955188619491e+02, 1.73783285813125e+02, 1.765157919491045e+02, 1.804142150878906e+02, 1.833551508123097e+02, 1.888724032315355e+02, 1.85770374073789e+02, 1.957022586822571e+02, 1.991987457275391e+02, 2.030356793212888e+02, 1.965593707129832e+02, 2.07298284650517e+02, 2.017015241346644e+02, 2.139415588378906e+02, 2.184173418317748e+02, 2.195071323939804e+02, 2.207259942917663e+02, 1.989111698909871e+02, 2.055135192871094e+02, 2.28175256729124e+02, 2.21396587775802e+02, 2.246268765536477e+02, 2.145951984752724e+02, 1.831636505126953e+02, 2.246543132109003e+02, 2.207790903727678e+02, 2.241709910426022e+02, 9.079153823775499e+01, 2.268418273925781e+02, 2.265275177001749e+02, 2.198808021359729e+02, 2.103199669250526e+02, 2.135087175641733e+02, 2.008821868896484e+02, 2.090107263183606e+02, 2.084922813083679e+02, 1.573308374018685e+02, 2.131958095005623e+02, 2.106051025390625e+02, 1.948356532506214e+02, 1.482648992926646e+02, 1.93556688789655e+02, 1.346312329097498e+02, 1.846183929443359e+02, 1.78181720987981e+02, 3.903653166639318e+01, 9.056915078605441e+01, 1.663564807710086e+02, 9.123851013183594e+01, 1.194805564878063e+02, 1.55440732863914e+02, 1.420479370843622e+02, 8.556194404099497e+01, 3.302907180786133e+01, 9.711048708801268e+01, 1.02694838090702e+02, 1.204738033518735e+02, 1.092751346587893e+02, 1.018538131713867e+02, 9.13771720886548e+01, 8.392168956943145e+01, 8.716693119596434e+01, 7.832436196461558e+01, 7.040945434570312e+01, 6.586495891753476e+01, 6.240276702881773e+01, 5.713927930193829e+01, 5.042974315642508e+01, 4.614731979370117e+01, 4.017277078629566e+01, 3.46916318108232e+01, 3.051081688619218e+01, 2.614709493463008e+01, 2.253817939758301e+01, 1.802584464130072e+01, 1.458489925748367e+01, 1.1086417803259e+01, 9.678508758543433e+00, 8.97916316986084e+00, 8.070469928924739e+00, 7.210627814040262e+00, 6.345214189798384e+00, 5.281006308962428e+00, 4.357627391815186e+00, 3.669340400697067e+00, 3.044106070893677e+00, 2.437554445264402e+00, 1.760345198993391e+00, 1.084637999534607e+00] +UAbsFluid.y=[3.440407562255859e+01, 3.440407562255859e+01] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType4.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType4.txt index cd7003e7e2..97982a4a1e 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType4.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Electrical_PVT_UI_Electrical_DayType4.txt @@ -1,12 +1,12 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", + "nonlinear": "1", "number of continuous time states": "3", "numerical Jacobians": "0" } time=[1.783704e+07, 1.787256e+07] meaPel.y=[1.743230590820312e+02, 1.743230590820312e+02, 1.751243444824115e+02, 1.79361203850654e+02, 1.812003430175822e+02, 1.8409765625e+02, 1.877954547458172e+02, 1.898984990736921e+02, 1.922039464314917e+02, 1.947262847900487e+02, 1.977896118164062e+02, 1.994518653420798e+02, 1.318441713019713e+02, 2.043518713589858e+02, 2.033318765079102e+02, 2.097532501220703e+02, 2.128199734774457e+02, 2.133178176880214e+02, 1.23834755931399e+02, 2.11595739576556e+02, 2.151192016601562e+02, 2.14264899291984e+02, 2.184343726264102e+02, 2.155103430175661e+02, 2.176479029337585e+02, 2.163306274414062e+02, 2.153138171725831e+02, 1.389145800791228e+02, 2.08670443386408e+02, 2.176783508300931e+02, 6.649474334716797e+01, 3.799854058159602e+01, 2.144084102854996e+02, 2.134495546977474e+02, 1.607271320684858e+02, 3.944167709350586e+01, 1.10678921911921e+02, 2.065642598119545e+02, 8.763468596249541e+01, 6.102824814760289e+01, 1.240101699829102e+02, 1.89079934969809e+02, 1.891056360880785e+02, 1.886887955609464e+02, 1.877568783230245e+02, 1.893406829833984e+02, 1.030929098510814e+02, 7.00164880962094e+01, 1.703617572018344e+02, 6.179697859044674e+01, 2.72524242401123e+01, 2.634849096933982e+01, 2.362213806153573e+01, 2.692944201365935e+01, 2.877078323364377e+01, 5.271060562133789e+01, 1.357842793782255e+02, 1.332062598733353e+02, 7.363078888781475e+01, 1.231112684770391e+02, 1.040590591430664e+02, 1.080573674819258e+02, 1.015678112161523e+02, 9.763443950780831e+01, 8.839268565457581e+01, 8.455252075195312e+01, 8.284138100364201e+01, 7.951369688248127e+01, 7.44288368673722e+01, 7.107414271036443e+01, 6.601805877685547e+01, 5.929323745728465e+01, 5.493886426292095e+01, 4.977243881223571e+01, 4.47685654957987e+01, 4.059397125244141e+01, 3.575055287680039e+01, 3.066672348024334e+01, 2.616856585606762e+01, 2.263088569640529e+01, 1.968924140930176e+01, 1.678409843445378e+01, 1.416143563215519e+01, 1.195191617540974e+01, 1.018754449323944e+01, 9.260532379150391e+00, 8.495136283426712e+00, 7.910172735413639e+00, 7.400563430783343e+00, 6.882175198722311e+00, 6.397281646728516e+00, 5.953343426098535e+00, 5.031357855269004e+00, 4.773553248010451e+00, 4.525826316408715e+00, 3.730815649032593e+00, 3.264430894855681e+00, 3.009930515291024e+00, 2.516867618556969e+00, 1.564786117604729e+00, 6.179479360580444e-01] -simPel.y=[1.775028686523438e+02, 1.774660810682508e+02, 1.779590795898376e+02, 1.823354206509226e+02, 1.839110192871137e+02, 1.868402862548828e+02, 1.906639383951742e+02, 1.923327688778048e+02, 1.950982616000858e+02, 1.977620097767354e+02, 2.005089111328125e+02, 2.023621036305105e+02, 1.415878540579552e+02, 2.046385210761384e+02, 2.058366444307024e+02, 2.122948150634766e+02, 2.161320190429616e+02, 2.168079539829115e+02, 1.356531036376704e+02, 2.132019031100839e+02, 2.183214874267578e+02, 2.170301599121055e+02, 2.212490322536829e+02, 2.182099597167882e+02, 2.208761959499875e+02, 2.205283355712891e+02, 2.193567552354606e+02, 2.228783691405818e+02, 2.128834187824623e+02, 2.208872021484536e+02, 7.289686584472656e+01, 4.087922257317441e+01, 2.136699026668028e+02, 2.158312555101943e+02, 1.72837746082235e+02, 4.269602584838867e+01, 1.075544434035402e+02, 2.089285938131555e+02, 9.863237104622937e+01, 6.016482265710681e+01, 1.275534896850586e+02, 1.915929487748492e+02, 1.923737639533456e+02, 1.91179481237072e+02, 1.899893764919711e+02, 1.913999633789062e+02, 1.136106860352151e+02, 6.920488662692703e+01, 1.678142486570484e+02, 5.672610104909796e+01, 2.936053276062012e+01, 2.837590647803216e+01, 2.612517837525733e+01, 2.961968911491315e+01, 3.172957710266272e+01, 5.090336608886719e+01, 1.382586330837325e+02, 1.37000439453126e+02, 7.714601974473943e+01, 1.25179623690571e+02, 1.079992141723633e+02, 1.121609670302659e+02, 1.057538367961996e+02, 1.019640677616147e+02, 9.314958119111132e+01, 8.948590850830078e+01, 8.758086631081532e+01, 8.455072445341575e+01, 8.329163881190325e+01, 8.118941523231663e+01, 7.235621643066406e+01, 6.602766601563346e+01, 6.228421120115661e+01, 5.761637008665216e+01, 5.303216014437301e+01, 4.933272933959961e+01, 4.486081975302083e+01, 3.968008331300673e+01, 3.490910157095701e+01, 3.143278167724149e+01, 2.842558670043945e+01, 2.516504749722607e+01, 2.170905005512617e+01, 1.815268866219913e+01, 1.459997832557672e+01, 1.291318416595459e+01, 9.659218934005089e+00, 8.855770170280422e+00, 8.057665640729002e+00, 7.303352428883557e+00, 6.665311813354492e+00, 6.029184454138971e+00, 5.451889257963238e+00, 4.880962214748148e+00, 4.362372901703389e+00, 3.802489519119263e+00, 3.235810747147601e+00, 2.637896675536252e+00, 2.012650060650992e+00, 1.340703573490451e+00, 6.713544130325317e-01] -UAbsFluid.y=[3.276138687133789e+01, 3.276138687133789e+01] +simPel.y=[1.776046905517578e+02, 1.775665445963542e+02, 1.780715155029234e+02, 1.824437088012861e+02, 1.840227392578168e+02, 1.869841461181641e+02, 1.908084593031062e+02, 1.924931012321821e+02, 1.952682089911721e+02, 1.979377821488944e+02, 2.007044525146484e+02, 2.025669422822799e+02, 1.41607014729849e+02, 2.048631733862142e+02, 2.060728567684206e+02, 2.125445404052734e+02, 2.164031996293429e+02, 2.170851191203087e+02, 1.356576468074773e+02, 2.134692528618743e+02, 2.186070098876953e+02, 2.173099047851522e+02, 2.215430235120918e+02, 2.18486543579093e+02, 2.211685446845252e+02, 2.208072967529297e+02, 2.196421205308707e+02, 2.231878948974176e+02, 2.131565622964593e+02, 2.211937548828287e+02, 7.285009765625e+01, 4.083818232218428e+01, 2.139527022417106e+02, 2.161118486193255e+02, 1.729560652295172e+02, 4.265104293823242e+01, 1.075402921781694e+02, 2.091827765103201e+02, 9.859878255787879e+01, 6.011306915297079e+01, 1.27571418762207e+02, 1.917741937810637e+02, 1.925541735331526e+02, 1.913587192310976e+02, 1.901626641167541e+02, 1.915911102294922e+02, 1.136013247681253e+02, 6.916007690402654e+01, 1.679390344236494e+02, 5.668343967892658e+01, 2.93254337310791e+01, 2.834387308756314e+01, 2.610231559754725e+01, 2.960005442303895e+01, 3.170851333618322e+01, 5.088097381591797e+01, 1.383611967298371e+02, 1.370978370217727e+02, 7.713240814195606e+01, 1.252569208319064e+02, 1.080380630493164e+02, 1.122088965023477e+02, 1.05787101587754e+02, 1.019899570333179e+02, 9.316424156636984e+01, 8.949466705322266e+01, 8.759185721657703e+01, 8.455788158842552e+01, 8.329647405288442e+01, 8.118848927813367e+01, 7.234626007080078e+01, 6.601547790528193e+01, 6.227018614876812e+01, 5.760037139890801e+01, 5.301375584071632e+01, 4.931430053710938e+01, 4.484176228842122e+01, 3.966099502565321e+01, 3.489012641904728e+01, 3.141173561095729e+01, 2.840700149536133e+01, 2.514679660797775e+01, 2.169247111153701e+01, 1.813747148512598e+01, 1.458732981247636e+01, 1.290197658538818e+01, 9.650901895412916e+00, 8.848049768911128e+00, 8.050260958174956e+00, 7.296395593529482e+00, 6.658705234527588e+00, 6.023104927757911e+00, 5.446404888897209e+00, 4.87600065679886e+00, 4.357802862590027e+00, 3.798380613327026e+00, 3.232223329545061e+00, 2.634924557476455e+00, 2.010350465771844e+00, 1.339131198987634e+00, 6.705465316772461e-01] +UAbsFluid.y=[3.440407562255859e+01, 3.440407562255859e+01] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType1.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType1.txt index 3ed162f452..7ff0e01bba 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType1.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType1.txt @@ -1,15 +1,17 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", - "number of continuous time states": "3", + "nonlinear": "1", + "number of continuous time states": "6", "numerical Jacobians": "0" } -time=[8.872521e+06, 1.8909242e+07] -meaQ.y=[3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, -7.194518089294434e+00] -simQ.y=[3.879157104492188e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, 4.379944763183594e+02, -3.683384323120117e+01] -c1_c2_term.y=[-4.480326080322266e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, -3.673421859741211e+01, 1.375066518783569e+00] -c3_term.y=[-3.410868453979492e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, -2.796573066711426e+01, 6.035452485084534e-01] -c4_term.y=[-6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.080769348144531e+01] -c6_term.y=[-1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, -1.228726482391357e+01, 1.675237901508808e-02] +time=[8.872521e+06, 1.89089e+07] +meaQ.y=[3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, 3.875236511230469e+02, -1.159744262695312e+01] +simQ.y=[3.879157104492188e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, 4.381065063476562e+02, -3.14811840057373e+01] +a1_a2_term.y=[-7.563535308837891e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, -6.202484130859375e+01, 6.105546951293945e+00] +a3_term.y=[-3.276592016220093e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -2.686972379684448e+00, -5.139563679695129e-01] +a4_term.y=[-6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.467708587646484e+01, -6.099008178710938e+01] +a6_term.y=[-1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, -1.180354952812195e+00, 6.749252788722515e-04] +a7_term.y=[0e+00, 0e+00] +a8_term.y=[0e+00, 0e+00] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType2.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType2.txt index 54a6e5e059..4f56fe2a13 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType2.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType2.txt @@ -1,15 +1,17 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", - "number of continuous time states": "3", + "nonlinear": "1", + "number of continuous time states": "6", "numerical Jacobians": "0" } time=[1.722828e+07, 1.727004e+07] meaQ.y=[2.667841796875e+02, 2.667841796875e+02, 2.428351534889531e+02, 2.676155811980968e+02, 1.590621020508464e+02, 2.085433044433594e+02, 1.887224507648145e+02, 2.426241668702181e+02, 2.713576098633695e+02, 3.480466875775398e+02, 2.554566802978516e+02, 3.044554500812271e+02, 3.101334048318918e+02, 3.768173700246572e+02, 3.314721396068005e+02, 4.051854553222656e+02, 4.179467462311635e+02, 5.043102441406406e+02, 5.054640697133077e+02, 5.428391735257784e+02, 5.492905883789062e+02, 5.50034282226714e+02, 5.646744887407842e+02, 5.829006667364323e+02, 5.987315720129986e+02, 6.185326538085938e+02, 6.782098026672138e+02, 4.642353992290232e+02, 3.04451539880861e+02, 4.607345776354533e+02, 4.856857299804688e+02, 6.646414597291878e+02, 7.155715365323456e+02, 7.29452194824292e+02, 7.174870608444905e+02, 7.359357299804688e+02, 4.987311207499087e+02, 6.814420880996121e+02, 5.735788696291727e+02, 3.861057753624671e+02, 4.214986267089844e+02, 6.54552815954115e+02, 6.391819165045888e+02, 5.443721424454543e+02, 3.402056559253967e+02, 2.187771606445312e+02, 2.287309838884e+02, 6.252991591506018e+02, 3.973651396257191e+02, 5.706494397387758e+02, 5.921923828125e+02, 6.08147494612042e+02, 5.468032848543686e+02, 5.505708381205865e+02, 5.981337036132957e+02, 5.7204248046875e+02, 5.598989600774431e+02, 6.23225850053204e+02, 6.212556469726713e+02, 6.300614376905453e+02, 3.680970153808594e+02, 3.471402911023497e+02, 5.223202392576191e+02, 5.603495820544763e+02, 5.355102955538273e+02, 5.173870849609375e+02, 4.839865152497632e+02, 4.585659704590172e+02, 4.416224836869027e+02, 4.281328082855885e+02, 4.203658142089844e+02, 3.882348034667464e+02, 3.626524819767563e+02, 3.202255577450305e+02, 2.874771629598613e+02, 2.649407043457031e+02, 2.439177117708952e+02, 2.29487557983436e+02, 1.984836607091513e+02, 1.796533776856126e+02, 1.630814666748047e+02, 1.37403597150495e+02, 1.240650317105477e+02, 1.052225131225149e+02, 8.671272553236184e+01, 6.808573150634766e+01, 5.734149178882796e+01, 5.275091494608476e+01, 3.684624840867963e+01, 3.263558980161247e+01, 2.807159423828125e+01, 2.601615248878151e+01, 1.462922004699051e+01, 1.654035374035081e+01, 5.130183183569535e+00, 4.095844745635986e+00, -4.819923419905038e+00, -3.873783913770388e+00, -1.780510827929271e+01, -1.387724347344992e+01, -4.404863834381104e+00] -simQ.y=[2.668989562988281e+02, 3.17963125294488e+02, 2.659664989653893e+02, 2.666189205392346e+02, 1.952373132320723e+02, 2.04021728515625e+02, 1.87330899992345e+02, 2.29052784035411e+02, 2.629400256348036e+02, 3.407962314513232e+02, 2.782537231445312e+02, 3.209506336890914e+02, 3.22584559558802e+02, 3.825415137884145e+02, 3.639153747561217e+02, 4.114889831542969e+02, 4.382878029431659e+02, 5.172448461913807e+02, 5.37261891867919e+02, 5.606925246464809e+02, 5.717400512695312e+02, 5.724605395508314e+02, 5.951694005629271e+02, 6.038023524693164e+02, 6.158004912277163e+02, 6.33088623046875e+02, 6.850577758790846e+02, 5.209591488799173e+02, 3.484024676152831e+02, 4.636723449698289e+02, 5.15394775390625e+02, 6.689363941018369e+02, 7.595796952681013e+02, 7.67480437011783e+02, 7.682944127524511e+02, 7.730834350585938e+02, 5.808394509708777e+02, 6.991324137367831e+02, 6.235391124905964e+02, 4.35029185935237e+02, 4.297521362304688e+02, 6.403151262986677e+02, 6.26177985840322e+02, 5.653650545990171e+02, 4.150705399295631e+02, 2.318058776855469e+02, 2.34508073731364e+02, 5.628476864081292e+02, 4.692767191570502e+02, 5.82711554164938e+02, 6.327681884765625e+02, 6.416839372306406e+02, 5.756818841847861e+02, 5.69888837747171e+02, 6.268217846680253e+02, 5.983441772460938e+02, 5.79115580822224e+02, 5.904627119584483e+02, 5.649535058593475e+02, 5.561418930426548e+02, 3.527979736328125e+02, 3.098925634050747e+02, 4.360673206146308e+02, 4.746936729794492e+02, 4.751452209472786e+02, 4.638195190429688e+02, 4.494387594082648e+02, 4.202293054199339e+02, 3.996101312810177e+02, 3.87097321428492e+02, 3.861107482910156e+02, 3.64528742675705e+02, 3.388341175753176e+02, 2.992895240420117e+02, 2.744029292666552e+02, 2.605248413085938e+02, 2.320427345012055e+02, 2.272472949800184e+02, 2.001655158547734e+02, 1.877900274658726e+02, 1.706808624267578e+02, 1.492114507038845e+02, 1.358518679532225e+02, 1.19870734558063e+02, 1.032097717285524e+02, 8.504735565185547e+01, 7.653617661401691e+01, 5.847082021805839e+01, 4.508921970180096e+01, 3.345906107289648e+01, 3.169034767150879e+01, 2.672312608108578e+01, 1.122720405577199e+01, 1.921589941545969e+01, 1.104287924088903e+01, 3.948850154876709e+00, -4.327881641336182e+00, -1.420082811029998e-01, -9.921339452869434e+00, -1.069924955369824e+01, -8.871637344360352e+00] -c1_c2_term.y=[-3.215010452270508e+01, -2.740572372960988e+01, -2.634838872637321e+01, -1.824494830860487e+01, -1.549221679680639e+01, -1.513906764984131e+01, -9.821587301497907e+00, -1.097563370790857e+01, -1.166706008912492e+01, -9.544865189510229e+00, -7.213423252105713e+00, -8.374465976050674e+00, -7.046011298064455e+00, -9.95561003912262e+00, -5.564637672204319e+00, -1.466934776306152e+01, -3.487714883714169e+00, -9.096483459493045e+00, -1.014429629935041e+01, -4.758809250845914e+00, -9.657734870910645e+00, -8.029635276783477e+00, -1.623828698607592e+00, -5.771508966166948e+00, -7.108986801962967e+00, -6.629339218139648e+00, -3.845278085554356e+00, 1.035257309047979e+01, 1.564955155989911e+01, 1.215342529298797e+01, 1.219228935241699e+01, 1.750814216257908e+01, -1.67264550487147e+00, 7.356890716618274e+00, 4.49451901801462e+00, 8.184904098510742e+00, 1.31369342130628e+01, 1.587566105072469e+01, 1.867299661181052e+01, 2.113437605460639e+01, 1.407119655609131e+01, 1.073445571118286e+01, 1.09834621429018e+01, 1.682171582308645e+01, 2.807203111186662e+01, 3.789254379272461e+01, 3.116183540341932e+01, 1.719601027546465e+01, 1.79974691481805e+01, 1.602737382035112e+01, 1.317846870422363e+01, 2.138665641254562e+01, 2.710424755639481e+01, 2.509488305488033e+01, 2.612895774847087e+01, 2.051866722106934e+01, 2.710415591283703e+01, 3.37728576660359e+01, 3.022411407472693e+01, 2.859344942975482e+01, 3.32313346862793e+01, 3.757306505088695e+01, 3.3528206888824e+01, 2.600131134761819e+01, 3.143963093474538e+01, 4.183478164672852e+01, 4.022600797334396e+01, 3.974533187869246e+01, 4.234845955587885e+01, 4.183963621233865e+01, 4.424991989135742e+01, 4.363815048220396e+01, 4.052269233254304e+01, 4.246122541883164e+01, 4.549160240437662e+01, 4.720357894897461e+01, 4.92370833035493e+01, 4.62270689828192e+01, 4.93863394793385e+01, 4.800694259643585e+01, 5.080314254760742e+01, 5.090905051459977e+01, 5.388317059604011e+01, 5.052527435301209e+01, 5.123883224115183e+01, 5.472467041015625e+01, 5.147111488790257e+01, 5.216846516927068e+01, 5.223829265776503e+01, 5.010717243870062e+01, 4.988389587402344e+01, 4.871550227839688e+01, 4.682478500366804e+01, 4.305955983941669e+01, 4.045733902340898e+01, 3.661929321289062e+01, 3.284119674683506e+01, 3.084858829274276e+01, 2.665909954251358e+01, 2.202032035647099e+01, 1.910504722595215e+01] -c3_term.y=[-2.820569801330566e+01, -2.404339119482193e+01, -2.30045340038482e+01, -1.541667285245807e+01, -1.321204540247072e+01, -1.269285297393799e+01, -8.202190104037824e+00, -9.149631604273896e+00, -9.888755760208404e+00, -7.558995767897881e+00, -6.051338195800781e+00, -7.100618311950858e+00, -5.861675389627667e+00, -8.023608970643973e+00, -4.520251549001881e+00, -1.209079742431641e+01, -2.913080899270742e+00, -7.463767490403867e+00, -8.508539720038591e+00, -4.041539271647079e+00, -8.149564743041992e+00, -6.474850502001329e+00, -1.372089547270526e+00, -4.861553805207904e+00, -5.954129288139187e+00, -5.51431941986084e+00, -2.991790641620847e+00, 9.095292799787819e+00, 1.333823510338468e+01, 1.029055850984299e+01, 1.014881706237793e+01, 1.519816148856158e+01, -1.429438640281466e+00, 5.814016056109167e+00, 3.45144130954886e+00, 6.275702476501465e+00, 1.160908620495569e+01, 1.303169469380731e+01, 1.405619251614274e+01, 1.729939887099986e+01, 1.177087688446045e+01, 8.51342380810334e+00, 9.037252769433527e+00, 1.437132811112468e+01, 2.185917849759462e+01, 3.18111629486084e+01, 2.594727699278327e+01, 1.459204220492895e+01, 1.39080158051966e+01, 1.341958920051817e+01, 1.152558708190918e+01, 1.759588282351413e+01, 2.316515056062866e+01, 2.14970495336452e+01, 2.098498779302732e+01, 1.771854209899902e+01, 5.984554115717803e+00, 5.283641052241786e+00, 4.236969909661585e+00, 3.968052722189851e+00, 5.836833477020264e+00, 6.214155567375472e+00, 5.411295136941606e+00, 4.484226712722976e+00, 4.547238591125113e+00, 6.044893741607666e+00, 5.9231733345507e+00, 5.013833541873947e+00, 7.18390470852649e+00, 6.802506294722203e+00, 7.864575862884521e+00, 6.762544059754521e+00, 5.560551564830419e+00, 5.478160394946267e+00, 9.431591244420538e+00, 7.077288150787354e+00, 7.972339715640388e+00, 8.893738819300999e+00, 7.687312502015143e+00, 6.271459712990356e+00, 6.689447402954102e+00, 7.070623261590019e+00, 7.359134309946819e+00, 7.855003738404855e+00, 6.628207236964846e+00, 8.082763671875e+00, 7.636839647853423e+00, 6.713062876746504e+00, 6.803341175265001e+00, 6.718417335957997e+00, 6.294613361358643e+00, 6.248326776087259e+00, 5.913024559021806e+00, 5.431472422859219e+00, 5.133115141729886e+00, 4.619806289672852e+00, 4.250258102416711e+00, 3.891715030109658e+00, 3.363003882905995e+00, 2.778539899418734e+00, 2.411829233169556e+00] -c4_term.y=[-6.138256454467773e+01, -6.138256454467773e+01, -6.155409440540153e+01, -6.203683031867789e+01, -6.171681091308327e+01, -6.179239654541016e+01, -6.122569901603226e+01, -6.141242356733437e+01, -6.233031295776402e+01, -6.192219316435084e+01, -6.37142219543457e+01, -6.427941077736256e+01, -6.444888334728353e+01, -6.542977970668757e+01, -6.644576236501361e+01, -6.688070678710938e+01, -6.550606086543765e+01, -6.712341125487943e+01, -6.795736819180155e+01, -6.768979070754479e+01, -6.728458404541016e+01, -6.695458648682069e+01, -6.695468022963671e+01, -6.564243672688671e+01, -6.582097830936354e+01, -6.645355987548828e+01, -6.79649797636929e+01, -6.642804587228174e+01, -6.625965423584265e+01, -6.538160186767878e+01, -6.636528015136719e+01, -6.630926150367026e+01, -6.907637065540034e+01, -6.74004077148374e+01, -6.858266221953031e+01, -6.879750061035156e+01, -6.823958174761444e+01, -6.761676330566308e+01, -6.787226969401202e+01, -6.899994587616929e+01, -6.848420715332031e+01, -6.835886703118362e+01, -6.927618225097616e+01, -6.877512428976601e+01, -6.950051814488798e+01, -6.823843383789062e+01, -6.775919281005572e+01, -6.78838532391685e+01, -6.87736971900553e+01, -6.929927904851652e+01, -6.937371826171875e+01, -6.866104173331689e+01, -6.811919548398383e+01, -6.807884126550775e+01, -6.914381195068246e+01, -6.953601837158203e+01, -6.906732319423088e+01, -6.963449734773708e+01, -7.092312713622782e+01, -7.142204325606347e+01, -7.136074829101562e+01, -7.048944890638701e+01, -7.007942584810347e+01, -7.053443385533139e+01, -6.998195387897076e+01, -7.123176574707031e+01, -7.039953252280277e+01, -7.118733123779131e+01, -7.098652149547446e+01, -7.09624924069407e+01, -7.0578857421875e+01, -7.012223541259451e+01, -7.08138718548965e+01, -7.058834228515343e+01, -7.097572868609933e+01, -7.083797454833984e+01, -7.064340930806875e+01, -7.146127232142715e+01, -7.01398196949711e+01, -7.171256744384212e+01, -7.222025299072266e+01, -7.343912204561403e+01, -7.286722328879837e+01, -7.325875946045174e+01, -7.279584157059809e+01, -7.272982788085938e+01, -7.300222751392648e+01, -7.222464897518911e+01, -7.249484623500187e+01, -7.205149419448368e+01, -7.007817840576172e+01, -6.965775838712342e+01, -6.929269378662158e+01, -6.893124375776684e+01, -6.841019149053717e+01, -6.661798858642578e+01, -6.624459350586616e+01, -6.587546772676518e+01, -6.17539717174666e+01, -5.997347615560408e+01, -5.856975173950195e+01] -c6_term.y=[-9.394861221313477e+00, -9.394861221313477e+00, -8.815112104868703e+00, -6.696960499690502e+00, -1.07142467116608e+01, -5.811862468719482e+00, -6.099898381468635e+00, -7.089690095733988e+00, -8.428203964235703e+00, -9.454466256886972e+00, -6.793151378631592e+00, -1.287214224195465e+01, -9.818772879068597e+00, -1.450664119720293e+01, -8.110888705482909e+00, -1.327386474609375e+01, -1.497133948163049e+01, -1.472955093383801e+01, -1.535317159133286e+01, -1.586676294690365e+01, -1.574645805358887e+01, -1.535489948271877e+01, -1.641660688064308e+01, -1.67143286568714e+01, -1.649549314565269e+01, -1.800698280334473e+01, -1.759785803433265e+01, -6.300063687281225e+00, -5.355656292863932e+00, -1.902863143919049e+01, -1.732932472229004e+01, -2.071591376351036e+01, -2.031398277282991e+01, -1.922449806212384e+01, -1.830506348958265e+01, -1.417934417724609e+01, -1.768265650136876e+01, -1.499478069490643e+01, -1.502960402168386e+01, -6.878759950768012e+00, -1.681993675231934e+01, -1.894968031905773e+01, -9.36398708343954e+00, -1.765906965082337e+01, -3.556502611293205e+00, -3.929371356964111e+00, -1.35820912171121e+01, -1.755880871943584e+01, -1.455762783231266e+01, -1.703613372012227e+01, -1.728907585144043e+01, -1.578993340195927e+01, -5.094075738869168e+00, -1.602220066295007e+01, -1.52212263870341e+01, -1.453347873687744e+01, -3.896387874381239e+00, -2.696552181240241e+00, -2.330693044657338e+00, -2.251865491639093e+00, -9.434274435043335e-01, -2.068100595479103e+00, -2.569233955651733e+00, -2.525433213366136e+00, -1.989702151799829e+00, -1.886242151260376e+00, -1.823380968628542e+00, -1.513303532600445e+00, -1.852836292443165e+00, -1.883141158879396e+00, -1.890424728393555e+00, -1.534542903899122e+00, -1.222402149087958e+00, -1.0519254888812e+00, -1.577960177128954e+00, -1.049099087715149e+00, -1.045699910460462e+00, -1.14203267665085e+00, -8.369854401132872e-01, -6.36617405415623e-01, -5.716625452041626e-01, -5.32557594208257e-01, -4.572291872721951e-01, -4.514007282258238e-01, -3.224035029006133e-01, -3.107999861240387e-01, -2.536945076547851e-01, -1.72648369272601e-01, -1.475982921463175e-01, -1.197986346833941e-01, -1.037591099739075e-01, -1.009890661007182e-01, -9.620684683324038e-02, -8.702984506432668e-02, -8.216966081938437e-02, -7.951247692108154e-02, -7.26047173141938e-02, -6.196267149029747e-02, -4.961367526222497e-02, -3.79673567201815e-02, -2.655887417495251e-02] +simQ.y=[2.668989562988281e+02, 3.180901503988795e+02, 2.661269868397382e+02, 2.667752965588805e+02, 1.95309627685197e+02, 2.040841369628906e+02, 1.873687299454932e+02, 2.291065318714372e+02, 2.630053259277723e+02, 3.408792733541911e+02, 2.782960205078125e+02, 3.210010322127588e+02, 3.226377586729204e+02, 3.826067379908885e+02, 3.639768464932541e+02, 4.115548706054688e+02, 4.383566641462433e+02, 5.173266235351307e+02, 5.373481412020809e+02, 5.60783289446053e+02, 5.718358764648438e+02, 5.725599609375502e+02, 5.952719381893057e+02, 6.039033528645916e+02, 6.15893255825642e+02, 6.331712036132812e+02, 6.851268209524951e+02, 5.209958583293221e+02, 3.484141892375258e+02, 4.636819628897508e+02, 5.154020385742188e+02, 6.68939328148991e+02, 7.595782381924621e+02, 7.674759130860018e+02, 7.682882467130074e+02, 7.730762939453125e+02, 5.808348122990027e+02, 6.99126738048539e+02, 6.235348365419356e+02, 4.350263499546533e+02, 4.297494201660156e+02, 6.40309879061625e+02, 6.261734033207908e+02, 5.653628595528523e+02, 4.150698999323532e+02, 2.318057098388672e+02, 2.345103051766766e+02, 5.62869198787495e+02, 4.6929677094974e+02, 5.827504600781922e+02, 6.328308715820312e+02, 6.417624776906353e+02, 5.757560616633948e+02, 5.699630299289265e+02, 6.269087670899003e+02, 5.984287109375e+02, 5.791944367908811e+02, 5.90543889825991e+02, 5.650322363280975e+02, 5.562200159585275e+02, 3.528376770019531e+02, 3.099228170959066e+02, 4.361332461401144e+02, 4.747703909737759e+02, 4.752158917595489e+02, 4.638775634765625e+02, 4.494764082744995e+02, 4.202474963379026e+02, 3.996099159933756e+02, 3.870818673269295e+02, 3.860851135253906e+02, 3.644988366698456e+02, 3.388004653033737e+02, 2.992529372442067e+02, 2.743709491599068e+02, 2.604950256347656e+02, 2.320114575615503e+02, 2.272053170340549e+02, 2.00099939323868e+02, 1.876869189453649e+02, 1.705556182861328e+02, 1.49060559663264e+02, 1.356720026189718e+02, 1.196701464843325e+02, 1.029954372127249e+02, 8.483464813232422e+01, 7.632778616494187e+01, 5.831285847256905e+01, 4.500930764328857e+01, 3.333691944799712e+01, 3.158019256591797e+01, 2.666797111319639e+01, 1.119540550230516e+01, 1.91941022352839e+01, 1.100366440277036e+01, 3.886189937591553e+00, -4.394186725564709e+00, -2.066222221518813e-01, -9.983241081272876e+00, -1.076710803624071e+01, -8.94438648223877e+00] +a1_a2_term.y=[-5.427472305297852e+01, -4.627970554743563e+01, -4.449695125761914e+01, -3.081595521814133e+01, -2.616048538196421e+01, -2.556294441223145e+01, -1.65841156279384e+01, -1.85345014745456e+01, -1.970274047853857e+01, -1.612192640533994e+01, -1.218122673034668e+01, -1.414313756158852e+01, -1.190007852830357e+01, -1.681378624326044e+01, -9.399899359317804e+00, -2.47712516784668e+01, -5.895098648928056e+00, -1.536491027835473e+01, -1.713419369788135e+01, -8.043101233475266e+00, -1.631382751464844e+01, -1.356570484159528e+01, -2.751872651718153e+00, -9.753623026882284e+00, -1.20105939799785e+01, -1.119978332519531e+01, -6.498387205262341e+00, 1.747364572792761e+01, 2.641809537551334e+01, 2.051595344546701e+01, 2.058192253112793e+01, 2.955641162521575e+01, -2.823502577373002e+00, 1.242016235362627e+01, 7.58815845986536e+00, 1.381822299957275e+01, 2.217779280716184e+01, 2.680137020295945e+01, 3.152359955195314e+01, 3.567860268977892e+01, 2.375482177734375e+01, 1.812211019020678e+01, 1.854235069267721e+01, 2.839806019176072e+01, 4.739030721742143e+01, 6.396892547607422e+01, 5.260605133052747e+01, 2.90272636862642e+01, 3.038062277294132e+01, 2.70525448898015e+01, 2.224066352844238e+01, 3.609593145429601e+01, 4.574916676109356e+01, 4.235644787064994e+01, 4.410092483530262e+01, 3.463028335571289e+01, 4.574813530328799e+01, 5.700580971461165e+01, 5.101520004275821e+01, 4.826243159594308e+01, 5.609661102294922e+01, 6.342637643249125e+01, 5.659400177000158e+01, 4.388658185689772e+01, 5.306814669436387e+01, 7.061827087402344e+01, 6.790460324182666e+01, 6.70951062012231e+01, 7.149150043833133e+01, 7.063403385713239e+01, 7.470395660400391e+01, 7.367156280522006e+01, 6.841256184296569e+01, 7.168539283391536e+01, 7.68006181388275e+01, 7.969053649902344e+01, 8.312364102073019e+01, 7.804346662251191e+01, 8.337946822223265e+01, 8.105474426269581e+01, 8.577732849121094e+01, 8.595885692780668e+01, 9.098256017512227e+01, 8.531599273679066e+01, 8.652176055908276e+01, 9.240615844726562e+01, 8.691300093705539e+01, 8.808432573590936e+01, 8.819428514753692e+01, 8.46023349537957e+01, 8.422309112548828e+01, 8.224481871069787e+01, 7.905103027344751e+01, 7.269388289017206e+01, 6.830305542718887e+01, 6.182603454589844e+01, 5.544816696168493e+01, 5.20840690612857e+01, 4.501127017790941e+01, 3.718086758570055e+01, 3.225975799560547e+01] +a3_term.y=[-6.081080913543701e+00, -5.1852988867892e+00, -4.874268622623768e+00, -2.862550045462438e+00, -2.551512765875481e+00, -2.275163650512695e+00, -1.443622756865983e+00, -1.597071567444639e+00, -1.860521440512159e+00, -9.910710474257926e-01, -1.087640404701233e+00, -1.338127795394427e+00, -1.01329413596196e+00, -1.172986580077185e+00, -6.912869102888388e-01, -1.996408343315125e+00, -5.135851647719698e-01, -1.2045440816908e+00, -1.528373835311305e+00, -7.675881343187647e-01, -1.504356384277344e+00, -9.498512339539028e-01, -2.556081386180195e-01, -8.907418937883713e-01, -1.062800076918959e+00, -9.529432654380798e-01, -3.459683474834225e-01, 1.970639335535236e+00, 2.568649129307037e+00, 1.926883702281239e+00, 1.758435964584351e+00, 3.14962261122754e+00, -2.783606218960531e-01, 7.512832164797142e-01, 3.584963126917675e-01, 6.431620121002197e-01, 2.568744872586172e+00, 2.10664859045299e+00, 1.206085285691852e+00, 2.755455667834162e+00, 2.087581157684326e+00, 1.126369073922687e+00, 1.478840436928011e+00, 2.795212104100348e+00, 2.540956683356249e+00, 5.734795570373535e+00, 4.502727413178778e+00, 2.758095584200779e+00, 1.522659914832572e+00, 2.389709512114497e+00, 2.45586085319519e+00, 2.877645280435172e+00, 4.512202499016658e+00, 4.226811571683815e+00, 3.003301658649174e+00, 3.597390174865723e+00, -1.266534394897505e+01, -1.795505593041599e+01, -1.655960563661676e+01, -1.570637017225574e+01, -1.703081512451172e+01, -1.964136693618067e+01, -1.765944219316989e+01, -1.340656758264722e+01, -1.70861429775413e+01, -2.274252510070801e+01, -2.175785666678781e+01, -2.233702087404049e+01, -2.195895496713609e+01, -2.199067039490404e+01, -2.258755302429199e+01, -2.326873970033433e+01, -2.232694744783258e+01, -2.37434761774018e+01, -2.18751149670727e+01, -2.54075927734375e+01, -2.591197441365198e+01, -2.291948948815993e+01, -2.630094416001999e+01, -2.676894454955257e+01, -2.827590370178223e+01, -2.796844652267575e+01, -2.972759063026927e+01, -2.692138793944109e+01, -2.863994155511622e+01, -2.958389282226562e+01, -2.779062383314646e+01, -2.919257897876575e+01, -2.914772184462628e+01, -2.776794579451509e+01, -2.803738975524902e+01, -2.727768098784454e+01, -2.631121353149742e+01, -2.420139226046173e+01, -2.270970273699363e+01, -2.058254432678223e+01, -1.835218559265777e+01, -1.733941286872628e+01, -1.498497822170414e+01, -1.237740055720638e+01, -1.073803615570068e+01] +a4_term.y=[-6.138256454467773e+01, -6.138256454467773e+01, -6.155409440540153e+01, -6.203683031867789e+01, -6.171681091308327e+01, -6.179239654541016e+01, -6.122569901603226e+01, -6.141242356733437e+01, -6.233031295776402e+01, -6.192219316435084e+01, -6.37142219543457e+01, -6.427941077736256e+01, -6.444888334728353e+01, -6.542977970668757e+01, -6.644576236501361e+01, -6.688070678710938e+01, -6.550606086543765e+01, -6.712341125487943e+01, -6.795736819180155e+01, -6.768979070754479e+01, -6.728458404541016e+01, -6.695458648682069e+01, -6.695468022963671e+01, -6.564243672688671e+01, -6.582097830936354e+01, -6.645355987548828e+01, -6.79649797636929e+01, -6.642804587228174e+01, -6.625965423584265e+01, -6.538160186767878e+01, -6.636528015136719e+01, -6.630926150367026e+01, -6.907637065540034e+01, -6.74004077148374e+01, -6.858266221953031e+01, -6.879750061035156e+01, -6.823958174761444e+01, -6.761676330566308e+01, -6.787226969401202e+01, -6.899994587616929e+01, -6.848420715332031e+01, -6.835886703118362e+01, -6.927618225097616e+01, -6.877512428976601e+01, -6.950051814488798e+01, -6.823843383789062e+01, -6.775919281005572e+01, -6.78838532391685e+01, -6.87736971900553e+01, -6.929927904851652e+01, -6.937371826171875e+01, -6.866104173331689e+01, -6.811919548398383e+01, -6.807884126550775e+01, -6.914381195068246e+01, -6.953601837158203e+01, -6.906732319423088e+01, -6.963449734773708e+01, -7.092312713622782e+01, -7.142204325606347e+01, -7.136074829101562e+01, -7.048944890638701e+01, -7.007942584810347e+01, -7.053443385533139e+01, -6.998195387897076e+01, -7.123176574707031e+01, -7.039953252280277e+01, -7.118733123779131e+01, -7.098652149547446e+01, -7.09624924069407e+01, -7.0578857421875e+01, -7.012223541259451e+01, -7.08138718548965e+01, -7.058834228515343e+01, -7.097572868609933e+01, -7.083797454833984e+01, -7.064340930806875e+01, -7.146127232142715e+01, -7.01398196949711e+01, -7.171256744384212e+01, -7.222025299072266e+01, -7.343912204561403e+01, -7.286722328879837e+01, -7.325875946045174e+01, -7.279584157059809e+01, -7.272982788085938e+01, -7.300222751392648e+01, -7.222464897518911e+01, -7.249484623500187e+01, -7.205149419448368e+01, -7.007817840576172e+01, -6.965775838712342e+01, -6.929269378662158e+01, -6.893124375776684e+01, -6.841019149053717e+01, -6.661798858642578e+01, -6.624459350586616e+01, -6.587546772676518e+01, -6.17539717174666e+01, -5.997347615560408e+01, -5.856975173950195e+01] +a6_term.y=[-2.025509595870972e+00, -2.025509595870972e+00, -1.867091483160647e+00, -1.242799866897794e+00, -2.068574018466429e+00, -1.041530966758728e+00, -1.073297448103893e+00, -1.236890337682614e+00, -1.585082283023142e+00, -1.238463105804598e+00, -1.220592737197876e+00, -2.424620005666919e+00, -1.694664072986358e+00, -2.119845120112271e+00, -1.239062849217749e+00, -2.191138744354248e+00, -2.635693507074825e+00, -2.375798854828174e+00, -2.755651183568856e+00, -3.010166177298192e+00, -2.90491771697998e+00, -2.250803852072066e+00, -3.046317173459634e+00, -3.058462415416271e+00, -2.94179278571897e+00, -3.109509229660034e+00, -2.032839854010352e+00, -1.364987701461139e+00, -1.031420960146784e+00, -3.563249387737709e+00, -3.002668142318726e+00, -4.292222648590788e+00, -3.951623552493019e+00, -2.486075153341469e+00, -1.901810618140181e+00, -1.453084349632263e+00, -3.912277286193754e+00, -2.42384437834012e+00, -1.288505252205421e+00, -1.095708833727721e+00, -2.983000993728638e+00, -2.50799000320569e+00, -1.532066164015813e+00, -3.434596460512407e+00, -4.132986129717262e-01, -7.083719968795776e-01, -2.356984424605328e+00, -3.319192485255031e+00, -1.593967494508147e+00, -3.034290377838158e+00, -3.685062885284424e+00, -2.582855176923034e+00, -9.906337897058486e-01, -3.151175942138266e+00, -2.178832502374228e+00, -2.95146369934082e+00, 8.251831353694456e+00, 9.164275412129848e+00, 9.110142936710787e+00, 8.914565565532961e+00, 2.75291633605957e+00, 6.537659415109641e+00, 8.386113357547286e+00, 7.549996712096076e+00, 7.477384432629615e+00, 7.097135543823242e+00, 6.698270904725554e+00, 6.742048797607608e+00, 5.663484842123169e+00, 6.087722437718829e+00, 5.429218769073486e+00, 5.279868106841516e+00, 4.908088353102724e+00, 4.559200068881398e+00, 3.659668457095751e+00, 3.766140937805176e+00, 3.398670550048698e+00, 2.942852939879403e+00, 2.863312000386922e+00, 2.716949567794902e+00, 2.416012763977051e+00, 2.106185850642078e+00, 1.84660310095029e+00, 1.546700711249707e+00, 1.392722906136675e+00, 1.137297034263611e+00, 9.229749125585054e-01, 7.50653770991991e-01, 6.323615199036133e-01, 4.950645720261628e-01, 4.62103396654129e-01, 4.408511768026417e-01, 4.280757808685752e-01, 3.877733122218288e-01, 3.635081034331359e-01, 3.542128801345825e-01, 3.134614324568869e-01, 2.760381467203063e-01, 2.210393342232868e-01, 1.690995504460552e-01, 1.182198002934456e-01] +a7_term.y=[0e+00, 0e+00] +a8_term.y=[0e+00, 0e+00] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType3.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType3.txt index 5cbbb495c8..e6b5122278 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType3.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType3.txt @@ -1,15 +1,17 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", - "number of continuous time states": "3", + "nonlinear": "1", + "number of continuous time states": "6", "numerical Jacobians": "0" } time=[1.774704e+07, 1.778856e+07] -meaQ.y=[2.101109743118286e+00, 2.101109743118286e+00, 1.25453211211127e+01, 3.146247095856774e+01, 5.273587326055301e+01, 6.871063995361328e+01, 8.526295144207148e+01, 1.156765441529876e+02, 1.416583650915591e+02, 1.433871550061376e+02, 1.881181488037109e+02, 1.928336212157499e+02, 2.092820976517264e+02, 2.34462405976923e+02, 2.610348061954878e+02, 2.777237548828125e+02, 2.930591696998794e+02, 3.14033441717025e+02, 2.96893201760839e+02, 3.169640586852499e+02, 3.359873657226562e+02, 3.618541711424763e+02, 3.615975455147679e+02, 3.645561097937344e+02, 3.765069641113098e+02, 2.544804992675781e+02, 4.133433712912588e+02, 4.34886293073292e+02, 4.389020590646907e+02, 4.212137966917152e+02, 3.542667846679688e+02, 4.234690338133416e+02, 4.670579072839082e+02, 4.590115972343593e+02, 4.545045731976942e+02, 3.97646484375e+02, 3.953071407539388e+02, 4.598286276680512e+02, 4.456027188005069e+02, 4.425384948729039e+02, 2.151824645996094e+02, 4.368453029086409e+02, 4.679855102537466e+02, 4.193338192891031e+02, 4.321889276413474e+02, 3.848772277832031e+02, 4.356833276367221e+02, 4.369700840160563e+02, 4.215854431141793e+02, 3.66747455706173e+02, 4.258389282226562e+02, 4.444428375245111e+02, 3.932597021485201e+02, 3.183911557410627e+02, 3.773899792479767e+02, 2.89527099609375e+02, 3.429736325218978e+02, 1.676337303900297e+02, -5.85296462444512e+00, 2.490722336542461e+02, 2.557272338867188e+02, 6.385840110748209e+01, 2.369622252363727e+02, 2.56407578168607e+02, 2.150146446674939e+02, 2.444031238555908e+00, -1.13811939935182e+01, 1.366368363811638e+02, 1.434357682172228e+02, 1.632888156890531e+02, 1.411640167236328e+02, 1.036047351075128e+02, 9.582564399378521e+01, 6.176758082790208e+01, 6.211337102242028e+01, 4.155986785888672e+01, 2.31271116711385e+01, 1.287022453851297e+01, -1.264518892898175e+01, -2.955789810183533e+01, -3.036321067810059e+01, -5.057746553415754e+01, -6.959297853350293e+01, -8.013152895849392e+01, -9.23001849087732e+01, -1.076918334960938e+02, -1.092547202615465e+02, -1.220461313883169e+02, -1.343997791159007e+02, -1.464721115112912e+02, -1.448525543212891e+02, -1.646831134614065e+02, -1.676740775503167e+02, -1.737489921933868e+02, -1.411961784725613e+02, -1.497800140380859e+02, -1.570551025390167e+02, -1.594280419390483e+02, -1.735755853270635e+02, -1.941487303234937e+02, -2.309700164794922e+02] -simQ.y=[2.107338666915894e+00, 2.746116916108646e+01, 3.546956298822105e+01, 5.275184011047911e+01, 6.728122100837396e+01, 1.026840438842773e+02, 1.230608175367537e+02, 1.341704740251496e+02, 1.485361194890758e+02, 1.72049194771991e+02, 2.055414733886719e+02, 2.099394546508338e+02, 2.222443484599252e+02, 2.575757356916936e+02, 2.732593505860077e+02, 2.86315185546875e+02, 2.943198353160125e+02, 3.155118818803556e+02, 3.07664558680069e+02, 3.516202262878219e+02, 3.639682922363281e+02, 3.710202078246972e+02, 3.684926821753512e+02, 3.79923007114995e+02, 3.938379868279217e+02, 3.120172424316406e+02, 4.095929559616183e+02, 4.298812705775186e+02, 4.471140672956723e+02, 4.42773291015448e+02, 3.820315551757812e+02, 4.281836936949528e+02, 4.596472950654386e+02, 4.774921031603486e+02, 4.663576188521264e+02, 4.259544067382812e+02, 4.070359626319593e+02, 4.477387461342476e+02, 4.727257298962852e+02, 4.220232879632758e+02, 2.733800659179688e+02, 4.232969979420373e+02, 4.671334188320398e+02, 4.440588912236165e+02, 4.602588410877106e+02, 4.172915344238281e+02, 4.458962902831737e+02, 4.466831081224465e+02, 4.27090067138143e+02, 3.919329642160737e+02, 4.439689636230469e+02, 4.408429539272499e+02, 3.94449155274007e+02, 3.382786706014475e+02, 3.539333056637471e+02, 2.972580871582031e+02, 3.592336704799306e+02, 1.994618251991486e+02, 3.066928271778099e+01, 2.084199708486037e+02, 2.460920715332031e+02, 9.937144851678258e+01, 2.18337120950402e+02, 2.531322232201294e+02, 2.293097415696485e+02, 3.652467346191406e+01, -2.667402336913226e+00, 1.097230044277883e+02, 1.473863417682774e+02, 1.624284076690457e+02, 1.510697784423828e+02, 1.133302976990817e+02, 1.034170709883996e+02, 7.993630746018277e+01, 8.000205412354525e+01, 4.972983169555664e+01, 3.752867329918573e+01, 2.366087510242764e+01, 9.179563395003989e+00, -5.504657611912059e+00, -2.179538726806641e+01, -3.275379128450052e+01, -4.877028323895802e+01, -5.936254210043221e+01, -7.632707436302287e+01, -9.018824005126953e+01, -1.011528734992696e+02, -1.18322820536264e+02, -1.246266603667756e+02, -1.370301742554062e+02, -1.363676300048828e+02, -1.557806380498378e+02, -1.614041584293516e+02, -1.656334504627274e+02, -1.439044028145408e+02, -1.427245483398438e+02, -1.423324053954697e+02, -1.476855370562645e+02, -1.674772100829265e+02, -1.807206726074659e+02, -2.010634002685547e+02] -c1_c2_term.y=[-1.45878662109375e+02, -1.475064982822949e+02, -1.4425139343263e+02, -1.398756317138809e+02, -1.373845550536942e+02, -1.375013885498047e+02, -1.314167573474668e+02, -1.377167710077424e+02, -1.343455349061541e+02, -1.286642206827678e+02, -1.303959503173828e+02, -1.326542907714843e+02, -1.259120267145206e+02, -1.267429661705675e+02, -1.268438119327174e+02, -1.20430046081543e+02, -1.229052006114617e+02, -1.247355113636305e+02, -1.164799366670612e+02, -1.148467929839879e+02, -1.169954071044922e+02, -1.190525423431444e+02, -1.164799100603787e+02, -1.118491467721411e+02, -1.093555183773991e+02, -1.12886848449707e+02, -1.11366695367693e+02, -1.182315507289445e+02, -1.148172921317309e+02, -1.142732324218611e+02, -1.057419509887695e+02, -1.123041046142255e+02, -1.115353889016742e+02, -1.066920734752219e+02, -1.092441422895603e+02, -1.077158660888672e+02, -1.043534113266736e+02, -1.030646224248671e+02, -1.05548396248596e+02, -1.022558067321411e+02, -9.793889617919922e+01, -1.015338169642807e+02, -1.027024017706269e+02, -9.391391496204258e+01, -9.97592955816507e+01, -9.585305023193359e+01, -9.643215728759516e+01, -9.996047993532966e+01, -9.740444244382748e+01, -8.841341400147886e+01, -8.912553405761719e+01, -9.467639759609611e+01, -9.304418670659715e+01, -8.991525971785637e+01, -8.6973387145944e+01, -8.118130493164062e+01, -8.672371862499901e+01, -7.950586969287234e+01, -7.103525282696737e+01, -7.890598624092623e+01, -7.912770080566406e+01, -7.591751708983122e+01, -7.714562983022805e+01, -7.852345977060543e+01, -7.645322579771459e+01, -7.100001525878906e+01, -6.800890211624113e+01, -7.35869476318432e+01, -7.414480869070054e+01, -7.25010354995627e+01, -7.256012725830078e+01, -7.404436592104395e+01, -7.068133494060265e+01, -7.134088854103632e+01, -6.74234789167044e+01, -6.838284301757812e+01, -6.586549886067986e+01, -6.484804138185196e+01, -6.658186965217745e+01, -6.862796676635594e+01, -6.270513153076172e+01, -6.173920917512795e+01, -6.066423043643082e+01, -6.265868315260689e+01, -6.066715871636764e+01, -6.005201721191406e+01, -6.007736273372367e+01, -6.075016450426625e+01, -6.162426560499529e+01, -6.322016906738796e+01, -6.425028991699219e+01, -6.669425971620973e+01, -7.199011971075923e+01, -7.508264748709583e+01, -8.669675416494547e+01, -9.703620910644531e+01, -1.032149496459877e+02, -1.073117461494699e+02, -1.113529098510847e+02, -1.148699123564298e+02, -1.195291900634766e+02] -c3_term.y=[-1.180367050170898e+02, -1.193538643973203e+02, -1.189716201782178e+02, -1.1470709082565e+02, -1.154968774414102e+02, -1.105332565307617e+02, -1.095242006573556e+02, -1.159709503173359e+02, -1.126698522055344e+02, -1.045297664096931e+02, -1.095293579101562e+02, -1.036839279174322e+02, -1.042599083737953e+02, -1.021218154544714e+02, -1.043266485775291e+02, -1.011743392944336e+02, -1.032931883378028e+02, -1.05722535983049e+02, -8.839767958692011e+01, -8.69720705031893e+01, -9.540720367431641e+01, -9.919894279479931e+01, -1.00119877006942e+02, -9.146269596649317e+01, -9.453423854283575e+01, -9.255656433105469e+01, -9.495163639610598e+01, -9.772596409383591e+01, -9.662788511005776e+01, -9.502079917905402e+01, -8.862046051025391e+01, -9.11767246246004e+01, -9.0484169634729e+01, -8.45597690929805e+01, -9.118026608551479e+01, -8.719502258300781e+01, -8.781653182082673e+01, -8.017424530756784e+01, -8.719710019854912e+01, -8.360424423215761e+01, -8.196050262451172e+01, -8.080519874209769e+01, -8.524312025861553e+01, -8.010466610137803e+01, -7.770641217920044e+01, -7.644281005859375e+01, -7.305610839841532e+01, -8.118549280580139e+01, -7.81625665283227e+01, -7.323850827896686e+01, -6.888019561767578e+01, -7.809133551461697e+01, -7.346643554690351e+01, -7.59273957625057e+01, -7.378136352537302e+01, -6.288782501220703e+01, -7.00908046903776e+01, -6.367486470542303e+01, -5.709256580634307e+01, -6.025770641509737e+01, -6.659720611572266e+01, -6.415860366818343e+01, -6.547327983467902e+01, -6.239024605523115e+01, -6.113879197062548e+01, -5.423201751708984e+01, -5.483763628870124e+01, -5.92129635897607e+01, -6.267821884154132e+01, -6.078534431457354e+01, -6.114549255371094e+01, -6.030269317632e+01, -5.677673674083512e+01, -5.979922637935967e+01, -5.902770872568665e+01, -5.915774917602539e+01, -5.527658913022302e+01, -5.297701636182588e+01, -5.083131483169345e+01, -5.956934886931552e+01, -4.898547744750977e+01, -5.239271249773847e+01, -5.002572972916344e+01, -5.412051800807968e+01, -4.897925553754933e+01, -5.218621826171875e+01, -4.886277586991171e+01, -4.878881835936981e+01, -5.06996459171523e+01, -5.039352149964071e+01, -5.404187393188477e+01, -5.712976670038294e+01, -6.038114436081973e+01, -4.298089970147428e+01, -1.093444425492337e+01, -1.265418243408203e+01, -1.303410991668612e+01, -1.393658699366986e+01, -1.426903678894179e+01, -1.619629988897881e+01, -1.89344654083252e+01] -c4_term.y=[-5.956212997436523e+01, -5.956212997436523e+01, -5.918592163086083e+01, -6.008718746020851e+01, -5.946918563842338e+01, -6.096059036254883e+01, -6.127721637544001e+01, -6.271573400951771e+01, -6.151467862012574e+01, -6.122196404593805e+01, -6.194795608520508e+01, -6.253624420166132e+01, -6.280443488811736e+01, -6.427994704473419e+01, -6.285096933700967e+01, -6.473382568359375e+01, -6.393170436512254e+01, -6.362617596713313e+01, -6.368881427541731e+01, -6.476625232696537e+01, -6.568496704101562e+01, -6.605112144470415e+01, -6.375856503078421e+01, -6.466506428311486e+01, -6.410604749407526e+01, -6.436249542236328e+01, -6.630404750278716e+01, -6.462274187360772e+01, -6.394182639349189e+01, -6.248627029418781e+01, -6.294235610961914e+01, -6.411417331695168e+01, -6.305646829044593e+01, -6.328396564832474e+01, -6.463598161176682e+01, -6.543541717529297e+01, -6.622648530847681e+01, -6.535358116512811e+01, -6.599379593421091e+01, -6.709101486205867e+01, -6.595877075195312e+01, -6.555750231061567e+01, -6.679300391964456e+01, -6.690393509638473e+01, -6.823886914934586e+01, -6.849933624267578e+01, -6.853121826171903e+01, -6.771642555568502e+01, -6.753847839355717e+01, -6.670523561750302e+01, -6.728685760498047e+01, -6.724515686034968e+01, -6.750390808105513e+01, -6.758734933603819e+01, -6.762590240478356e+01, -6.724923706054688e+01, -6.913875674292804e+01, -6.88338888985797e+01, -6.762729525682661e+01, -6.777624235607406e+01, -6.802482604980469e+01, -6.908034133911244e+01, -6.768742328513289e+01, -6.835791982015485e+01, -6.776808121625172e+01, -6.816492462158203e+01, -6.86851611050717e+01, -6.824325575395231e+01, -6.932125441606544e+01, -6.868386669158821e+01, -6.933609008789062e+01, -6.856440917969027e+01, -6.810803149995833e+01, -6.822702645437644e+01, -6.842531861804618e+01, -6.821066284179688e+01, -6.928663250150841e+01, -6.952927110944155e+01, -7.028829581851979e+01, -7.096625038146908e+01, -7.03006591796875e+01, -7.071865844726449e+01, -7.090288489846134e+01, -7.166919472432863e+01, -7.140816026167343e+01, -7.047000885009766e+01, -7.036118208941207e+01, -6.901544138589645e+01, -7.039638645566225e+01, -6.718685760497351e+01, -6.684095764160156e+01, -6.589742373512223e+01, -6.501097590748988e+01, -6.366349954150532e+01, -6.170521014984429e+01, -5.796826934814453e+01, -5.646343322754052e+01, -5.553059572966516e+01, -5.511933822631704e+01, -5.531626706804619e+01, -5.571382141113281e+01] -c6_term.y=[-8.566757202148438e+00, -8.566757202148438e+00, -8.991439170834633e+00, -9.304649328151786e+00, -9.947493324282128e+00, -9.919970512390137e+00, -1.068662266503358e+01, -1.124469348815848e+01, -1.156823282008687e+01, -1.159538653237162e+01, -1.231715869903564e+01, -1.182074985503565e+01, -1.285600674729451e+01, -1.288181030637595e+01, -1.337015935112705e+01, -1.39870662689209e+01, -1.423256300145229e+01, -1.480587161671806e+01, -1.306280062058162e+01, -1.37808298587757e+01, -1.510769748687744e+01, -1.574759071350023e+01, -1.570026872271575e+01, -1.582569727216713e+01, -1.625774509790074e+01, -1.63790397644043e+01, -1.74495136260997e+01, -1.701113296507768e+01, -1.743789331345218e+01, -1.54333735847158e+01, -1.609839630126953e+01, -1.742767014503329e+01, -1.688548756769402e+01, -1.677212070120091e+01, -1.681219926314386e+01, -1.378414154052734e+01, -1.777373567468764e+01, -1.61667248816817e+01, -1.74379973049693e+01, -6.741076421679922e+00, -1.781438636779785e+01, -1.698646430969218e+01, -1.717524635501258e+01, -1.684267312007175e+01, -1.562961749123413e+01, -1.499208927154541e+01, -1.486792098998622e+01, -1.588183664239061e+01, -1.167429996487068e+01, -1.65901799610625e+01, -1.530477619171143e+01, -1.502253490175953e+01, -1.080009159093021e+01, -1.524194186665167e+01, -1.049330688473645e+01, -1.332067203521729e+01, -1.339054884229408e+01, -2.796871208012651e+00, -6.57624531148115e+00, -1.174929947626265e+01, -6.970410346984863e+00, -9.199559688547154e+00, -1.217022743883946e+01, -1.03860553196416e+01, -6.202562175039155e+00, -2.248457670211792e+00, -7.083748982146913e+00, -7.505994120535495e+00, -9.29925205005728e+00, -8.347615861891729e+00, -7.800656795501709e+00, -6.741739873891992e+00, -6.096476116636939e+00, -6.606792913166974e+00, -6.188937718525328e+00, -5.48377799987793e+00, -4.970991357168229e+00, -4.580672680994415e+00, -3.913837458971438e+00, -3.915232205389851e+00, -3.2248694896698e+00, -3.043523776532689e+00, -2.550577839685474e+00, -2.345182158727114e+00, -1.876884800737144e+00, -1.739074230194092e+00, -1.30015420773467e+00, -1.037284293061693e+00, -8.067221768961035e-01, -6.820725619792261e-01, -6.671092510223389e-01, -6.100918571156245e-01, -5.332137395701819e-01, -3.205259097447261e-01, -5.888265048461978e-02, -5.019200593233109e-02, -4.089372679592651e-02, -3.486111481554188e-02, -2.75272615253663e-02, -2.185711190103436e-02, -1.512187160551548e-02] +meaQ.y=[2.101109743118286e+00, 2.101109743118286e+00, 1.25453211211127e+01, 3.146247095856774e+01, 5.273587326055301e+01, 6.871063995361328e+01, 8.526295144207148e+01, 1.156765441529876e+02, 1.416583650915591e+02, 1.433871550061376e+02, 1.881181488037109e+02, 1.928336212157499e+02, 2.092820976517264e+02, 2.34462405976923e+02, 2.610348061954878e+02, 2.777237548828125e+02, 2.930591696998794e+02, 3.14033441717025e+02, 2.96893201760839e+02, 3.169640586852499e+02, 3.359873657226562e+02, 3.618541711424763e+02, 3.615975455147679e+02, 3.645561097937344e+02, 3.765069641113098e+02, 2.544804992675781e+02, 4.133433712912588e+02, 4.34886293073292e+02, 4.389020590646907e+02, 4.212137966917152e+02, 3.542667846679688e+02, 4.234690338133416e+02, 4.670579072839082e+02, 4.590115972343593e+02, 4.545045731976942e+02, 3.97646484375e+02, 3.953071407539388e+02, 4.598286276680512e+02, 4.456027188005069e+02, 4.425384948729039e+02, 2.151824645996094e+02, 4.368453029086409e+02, 4.679855102537466e+02, 4.193338192891031e+02, 4.321889276413474e+02, 3.848772277832031e+02, 4.356833276367221e+02, 4.369700840160563e+02, 4.215854431141793e+02, 3.66747455706173e+02, 4.258389282226562e+02, 4.444428375245111e+02, 3.932597021485201e+02, 3.183911557410627e+02, 3.773899792479767e+02, 2.89527099609375e+02, 3.429736325218978e+02, 1.676337303900297e+02, -5.85296462444512e+00, 2.490722336542461e+02, 2.557272338867188e+02, 6.385840110748209e+01, 2.369622252363727e+02, 2.56407578168607e+02, 2.150146446674939e+02, 2.444031476974487e+00, -1.13811939935182e+01, 1.366368363811638e+02, 1.434357682172228e+02, 1.632888156890531e+02, 1.411640167236328e+02, 1.036047351075128e+02, 9.582564399378521e+01, 6.176758082790208e+01, 6.211337102242028e+01, 4.155986785888672e+01, 2.312711168930372e+01, 1.287022453851297e+01, -1.264518892841409e+01, -2.955789810183533e+01, -3.036321067810059e+01, -5.057746553415754e+01, -6.959297853350293e+01, -8.013152895849392e+01, -9.23001849087732e+01, -1.076918334960938e+02, -1.092547202615465e+02, -1.220461313883169e+02, -1.343997791159007e+02, -1.464721115112912e+02, -1.448525543212891e+02, -1.646831134614065e+02, -1.676740775503167e+02, -1.737489921933868e+02, -1.411961786178831e+02, -1.497800140380859e+02, -1.570551025390167e+02, -1.594280419390483e+02, -1.735755853270635e+02, -1.941487303234937e+02, -2.309700164794922e+02] +simQ.y=[2.107338666915894e+00, 2.760717397414432e+01, 3.566507095330887e+01, 5.295416253134568e+01, 6.747364929206535e+01, 1.028648529052734e+02, 1.232305929273787e+02, 1.343299685523307e+02, 1.486864285353791e+02, 1.721890530541711e+02, 2.056708374023438e+02, 2.10057942199662e+02, 2.223528757026515e+02, 2.576761157082022e+02, 2.73352231732607e+02, 2.864015197753906e+02, 2.944013538707e+02, 3.155936706543258e+02, 3.077480533376977e+02, 3.517091651916305e+02, 3.640623168945312e+02, 3.711171920776269e+02, 3.68585387311605e+02, 3.800094984654414e+02, 3.939138732909053e+02, 3.120680847167969e+02, 4.096391139438542e+02, 4.299151616559226e+02, 4.471345871698817e+02, 4.427826425169129e+02, 3.82033447265625e+02, 4.28181168365363e+02, 4.596418302647723e+02, 4.774852378150005e+02, 4.663504472212671e+02, 4.259478759765625e+02, 4.070299840588894e+02, 4.477317875451479e+02, 4.727185279583138e+02, 4.220166748040962e+02, 2.733758239746094e+02, 4.232903782433766e+02, 4.671267058580497e+02, 4.440537623813081e+02, 4.602562845865945e+02, 4.172932739257812e+02, 4.4590582397458e+02, 4.46703199834403e+02, 4.271208276361899e+02, 3.919728602819219e+02, 4.44027099609375e+02, 4.409130719866807e+02, 3.945233886724445e+02, 3.383463116191955e+02, 3.540073815914815e+02, 2.973209533691406e+02, 3.593057759603063e+02, 1.995046863383555e+02, 3.068112798547222e+01, 2.084618493944557e+02, 2.46140625e+02, 9.939363174432164e+01, 2.183716413824467e+02, 2.531653265817133e+02, 2.29331935029552e+02, 3.653034591674805e+01, -2.666189852726873e+00, 1.097191404862489e+02, 1.47375273581237e+02, 1.624084064483426e+02, 1.510443878173828e+02, 1.133006018830416e+02, 1.033851493110373e+02, 7.990757686064318e+01, 7.997919493165072e+01, 4.970630264282227e+01, 3.750209452314407e+01, 2.362531621658087e+01, 9.125395034430008e+00, -5.586400208538381e+00, -2.190039253234863e+01, -3.288420338624609e+01, -4.891926000251492e+01, -5.953031248617447e+01, -7.649942904386448e+01, -9.035984039306641e+01, -1.0131469843249e+02, -1.184428806122966e+02, -1.247183795271846e+02, -1.371665069580429e+02, -1.364852905273438e+02, -1.558656566800927e+02, -1.61475423598821e+02, -1.657053710937728e+02, -1.439779481433169e+02, -1.428036956787109e+02, -1.424111535644151e+02, -1.477545278797615e+02, -1.675372912596843e+02, -1.80771922374951e+02, -2.011036682128906e+02] +a1_a2_term.y=[-2.462674255371094e+02, -2.490319447108653e+02, -2.435407073974825e+02, -2.361539944856295e+02, -2.319474584960656e+02, -2.321435546875e+02, -2.218705902099552e+02, -2.325050678798517e+02, -2.26812840010479e+02, -2.172207762218452e+02, -2.201431121826172e+02, -2.239544784545897e+02, -2.125714191306308e+02, -2.139733830043745e+02, -2.141428615794214e+02, -2.03314697265625e+02, -2.074927024147735e+02, -2.105826496470958e+02, -1.966460521025011e+02, -1.938896923064833e+02, -1.975173797607422e+02, -2.009904537963947e+02, -1.966468513852768e+02, -1.888287363979283e+02, -1.846178969610376e+02, -1.905767822265625e+02, -1.880101328531407e+02, -1.995978013393032e+02, -1.938326028733609e+02, -1.929130404662852e+02, -1.785101165771484e+02, -1.895876838683536e+02, -1.882896846995967e+02, -1.801132396351056e+02, -1.844215423583395e+02, -1.818416442871094e+02, -1.761652911017665e+02, -1.739894926524781e+02, -1.781825036409665e+02, -1.726241592406607e+02, -1.653367004394531e+02, -1.714052574520934e+02, -1.733780466219475e+02, -1.585417958577485e+02, -1.68410051908972e+02, -1.618161163330078e+02, -1.627946069335895e+02, -1.687521157969158e+02, -1.644381463622706e+02, -1.492609093802552e+02, -1.504649047851562e+02, -1.598368076869577e+02, -1.570816760254821e+02, -1.517990398904518e+02, -1.468331329344824e+02, -1.370541534423828e+02, -1.464115173339434e+02, -1.342228909447493e+02, -1.199203156261868e+02, -1.332111123221165e+02, -1.335856323242188e+02, -1.281635047912386e+02, -1.30238355860271e+02, -1.325639886039311e+02, -1.290678640925728e+02, -1.19860237121582e+02, -1.148104135686461e+02, -1.242265505704136e+02, -1.251674987793177e+02, -1.223916572570631e+02, -1.224908828735352e+02, -1.249961079407134e+02, -1.193185412815811e+02, -1.204324004254194e+02, -1.138197283790077e+02, -1.154391784667969e+02, -1.111891222999256e+02, -1.094704627337045e+02, -1.12395416913747e+02, -1.158466521453832e+02, -1.058455429077148e+02, -1.042122066498108e+02, -1.023956838271088e+02, -1.057607308127235e+02, -1.023984863281123e+02, -1.01359977722168e+02, -1.01404226415289e+02, -1.025446235656535e+02, -1.040225120281175e+02, -1.067117050170985e+02, -1.084535751342773e+02, -1.125826451619367e+02, -1.215241682470903e+02, -1.267445612952829e+02, -1.463511420840692e+02, -1.638051605224609e+02, -1.742361120605326e+02, -1.81153244681967e+02, -1.879762725830255e+02, -1.939144736153869e+02, -2.0178125e+02] +a3_term.y=[-1.76479377746582e+01, -1.784604748317156e+01, -1.970433410643166e+01, -1.845101381386876e+01, -2.095523277284256e+01, -1.591070461273193e+01, -1.908910121001678e+01, -2.120040922612781e+01, -2.021914529561088e+01, -1.598843075884868e+01, -1.979644393920898e+01, -1.239638595576236e+01, -1.761240736877578e+01, -1.490229154774338e+01, -1.703776983375041e+01, -1.829923820495605e+01, -1.871472604920604e+01, -1.988455637156953e+01, -8.240478739959594e+00, -7.938760530917441e+00, -1.489564323425293e+01, -1.727186462401966e+01, -1.996329151337186e+01, -1.449256328040323e+01, -1.928025848752337e+01, -1.487203693389893e+01, -1.831328386578294e+01, -1.636327706467143e+01, -1.761467576707747e+01, -1.638188748358321e+01, -1.585243034362793e+01, -1.389280679224808e+01, -1.37292386336132e+01, -1.113784294136424e+01, -1.600207429365759e+01, -1.306855487823486e+01, -1.600398106292421e+01, -9.248609297645981e+00, -1.456219258792531e+01, -1.323519573212181e+01, -1.456221866607666e+01, -1.093300991059015e+01, -1.456673736571955e+01, -1.54762319110816e+01, -9.055424817464001e+00, -1.04799976348877e+01, -6.694797992685835e+00, -1.239622244628251e+01, -1.113234031678874e+01, -1.239574196676675e+01, -7.547325611114502e+00, -1.293882529394667e+01, -9.437023544302754e+00, -1.40514093315511e+01, -1.392993289949335e+01, -7.021927833557129e+00, -1.04110010782756e+01, -8.961858990081417e+00, -8.208573941512308e+00, -5.957482337967385e+00, -1.214464569091797e+01, -1.191492490766349e+01, -1.238461747009186e+01, -8.353261339061048e+00, -8.526401878820481e+00, -5.372225284576416e+00, -8.036212461626377e+00, -8.572876670144547e+00, -1.165414796715035e+01, -1.089238834381629e+01, -1.121181678771973e+01, -9.347629270587928e+00, -8.136002731312427e+00, -1.070458001272908e+01, -1.262888690402579e+01, -1.209873390197754e+01, -9.949928338188238e+00, -8.350495785337808e+00, -5.011660039984157e+00, -1.234096537589308e+01, -5.833306312561035e+00, -9.904558753982133e+00, -8.277391057876297e+00, -1.099910536674529e+01, -7.228913367879554e+00, -1.085853862762451e+01, -7.518350982650722e+00, -6.981804291410353e+00, -8.291148580344334e+00, -6.886601161960167e+00, -9.825940132141113e+00, -1.123219453721384e+01, -1.083933622317478e+01, 8.687931147401482e+00, 4.872487309775046e+01, 5.412018585205078e+01, 5.799230865478025e+01, 5.990947985441617e+01, 6.235830581665623e+01, 6.285166466122646e+01, 6.332026672363281e+01] +a4_term.y=[-5.956212997436523e+01, -5.956212997436523e+01, -5.918592163086083e+01, -6.008718746020851e+01, -5.946918563842338e+01, -6.096059036254883e+01, -6.127721637544001e+01, -6.271573400951771e+01, -6.151467862012574e+01, -6.122196404593805e+01, -6.194795608520508e+01, -6.253624420166132e+01, -6.280443488811736e+01, -6.427994704473419e+01, -6.285096933700967e+01, -6.473382568359375e+01, -6.393170436512254e+01, -6.362617596713313e+01, -6.368881427541731e+01, -6.476625232696537e+01, -6.568496704101562e+01, -6.605112144470415e+01, -6.375856503078421e+01, -6.466506428311486e+01, -6.410604749407526e+01, -6.436249542236328e+01, -6.630404750278716e+01, -6.462274187360772e+01, -6.394182639349189e+01, -6.248627029418781e+01, -6.294235610961914e+01, -6.411417331695168e+01, -6.305646829044593e+01, -6.328396564832474e+01, -6.463598161176682e+01, -6.543541717529297e+01, -6.622648530847681e+01, -6.535358116512811e+01, -6.599379593421091e+01, -6.709101486205867e+01, -6.595877075195312e+01, -6.555750231061567e+01, -6.679300391964456e+01, -6.690393509638473e+01, -6.823886914934586e+01, -6.849933624267578e+01, -6.853121826171903e+01, -6.771642555568502e+01, -6.753847839355717e+01, -6.670523561750302e+01, -6.728685760498047e+01, -6.724515686034968e+01, -6.750390808105513e+01, -6.758734933603819e+01, -6.762590240478356e+01, -6.724923706054688e+01, -6.913875674292804e+01, -6.88338888985797e+01, -6.762729525682661e+01, -6.777624235607406e+01, -6.802482604980469e+01, -6.908034133911244e+01, -6.768742328513289e+01, -6.835791982015485e+01, -6.776808121625172e+01, -6.816492462158203e+01, -6.86851611050717e+01, -6.824325575395231e+01, -6.932125441606544e+01, -6.868386669158821e+01, -6.933609008789062e+01, -6.856440917969027e+01, -6.810803149995833e+01, -6.822702645437644e+01, -6.842531861804618e+01, -6.821066284179688e+01, -6.928663250150841e+01, -6.952927110944155e+01, -7.028829581851979e+01, -7.096625038146908e+01, -7.03006591796875e+01, -7.071865844726449e+01, -7.090288489846134e+01, -7.166919472432863e+01, -7.140816026167343e+01, -7.047000885009766e+01, -7.036118208941207e+01, -6.901544138589645e+01, -7.039638645566225e+01, -6.718685760497351e+01, -6.684095764160156e+01, -6.589742373512223e+01, -6.501097590748988e+01, -6.366349954150532e+01, -6.170521014984429e+01, -5.796826934814453e+01, -5.646343322754052e+01, -5.553059572966516e+01, -5.511933822631704e+01, -5.531626706804619e+01, -5.571382141113281e+01] +a6_term.y=[-1.280835390090942e+00, -1.280835390090942e+00, -1.489057269094943e+00, -1.496553143212783e+00, -1.804683504106312e+00, -1.42781674861908e+00, -1.862481948299928e+00, -2.055498466030782e+00, -2.075824076948346e+00, -1.773402505825409e+00, -2.226083278656006e+00, -1.413207495207021e+00, -2.171527405460222e+00, -1.879698896415341e+00, -2.183432694044945e+00, -2.529708862304688e+00, -2.578584150828322e+00, -2.784615499330772e+00, -1.217648699696132e+00, -1.257803419227661e+00, -2.358604431152344e+00, -2.74173313140798e+00, -3.130376120977657e+00, -2.507503828324769e+00, -3.315536835073957e+00, -2.631723403930664e+00, -3.365365995679068e+00, -2.848309736241094e+00, -3.178795656702221e+00, -2.661079958670602e+00, -2.879679679870605e+00, -2.655483651159796e+00, -2.562065026351738e+00, -2.209169834326631e+00, -2.95057140697307e+00, -2.065937280654907e+00, -3.239083536929904e+00, -1.864986912983925e+00, -2.912108595602179e+00, -1.06711037158114e+00, -3.165154933929443e+00, -2.298283853986288e+00, -2.934996043181603e+00, -3.254064121707695e+00, -1.821181637911954e+00, -2.055351257324219e+00, -1.362470641132047e+00, -2.424970585368731e+00, -1.662672467229318e+00, -2.807888524866768e+00, -1.676902532577515e+00, -2.488932153156844e+00, -1.387229638104166e+00, -2.820615362071556e+00, -1.980818638798941e+00, -1.487287640571594e+00, -1.988795225959319e+00, -3.936318765088632e-01, -9.458942499213933e-01, -1.161577230411159e+00, -1.271074891090393e+00, -1.708468413346905e+00, -2.301995699988761e+00, -1.390582292981115e+00, -8.639511167957771e-01, -2.227315008640289e-01, -1.038408978414001e+00, -1.086724606430793e+00, -1.729091989289053e+00, -1.495868420601477e+00, -1.430382490158081e+00, -1.045086163286281e+00, -8.736305685263076e-01, -1.182708210946131e+00, -1.324149685813129e+00, -1.121546387672424e+00, -8.948142063051793e-01, -7.220500891577457e-01, -3.859082112700178e-01, -8.111846965545588e-01, -3.840655088424683e-01, -5.754371657975966e-01, -4.220932101515005e-01, -4.766994682203795e-01, -2.770593410188592e-01, -3.619178235530853e-01, -2.000655749261688e-01, -1.484557325642793e-01, -1.319400889089709e-01, -9.322218522431829e-02, -1.213073581457138e-01, -1.199601204623334e-01, -9.572894013548704e-02, 6.476970258459855e-02, 2.623994884035897e-01, 2.146748900413513e-01, 1.819555491209655e-01, 1.498640130396532e-01, 1.203029873966022e-01, 8.482341695393275e-02, 5.057124048471451e-02] +a7_term.y=[0e+00, 0e+00] +a8_term.y=[0e+00, 0e+00] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType4.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType4.txt index 32ff71ab4d..409e41e7da 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType4.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UI_Thermal_PVT_UI_Thermal_DayType4.txt @@ -1,15 +1,17 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", - "number of continuous time states": "3", + "nonlinear": "1", + "number of continuous time states": "6", "numerical Jacobians": "0" } time=[1.783704e+07, 1.787256e+07] meaQ.y=[9.229684448242188e+01, 9.229684448242188e+01, 9.935557495108073e+01, 1.027564456517951e+02, 1.132240060424035e+02, 1.309958038330078e+02, 1.357357143825837e+02, 1.550333286061454e+02, 1.771667509292283e+02, 1.79700713278963e+02, 1.721745300292969e+02, 2.154858174043941e+02, 1.993730454019679e+02, 3.726684187637314e+01, 1.768175594555159e+02, 1.945549468994141e+02, 2.481396842261553e+02, 2.852618709988498e+02, 2.247699717788138e+02, 1.550171076459396e+02, 2.313222503662109e+02, 2.614244970703609e+02, 2.66996662902692e+02, 2.938227722169166e+02, 3.113892415364812e+02, 3.173507080078125e+02, 2.898825486925914e+02, 2.856591577149243e+02, 2.838452031451066e+02, 2.881261877442091e+02, 2.255586395263672e+02, -1.467443823068732e+02, -3.734550905816653e+01, 1.899843273591213e+02, 2.666240411932445e+02, -6.615338134765625e+01, -2.125111001406215e+02, 8.9353357721881e+01, 1.646120530742692e+02, -1.360492560894271e+02, -7.106525421142578e+01, 1.009347398234766e+02, 1.88208887057773e+02, 1.787402690214915e+02, 1.896871665107823e+02, 2.180093688964844e+02, 1.954712866215978e+02, -6.8939805687404e+01, -7.535119384687486e+01, -9.270952326484111e+01, -1.825294494628906e+02, -2.453134733411769e+02, -2.851494567870984e+02, -2.191063142561418e+02, -1.938641381835903e+02, -1.774093017578125e+02, 8.463860839834133e+00, 1.166020471010222e+02, 7.616151733373414e+01, 1.719436573373657e+02, 1.441028442382812e+02, 1.041772607242889e+02, 8.635653481331931e+01, 7.137837577014128e+01, 4.78363081539202e+01, 4.380398941040039e+01, 3.055205542827304e+01, 2.674871666151177e+01, 2.677571579408538e+01, 1.911624003089626e+00, -1.008483695983887e+01, -3.087293067932053e+01, -5.746534760774747e+01, -7.096532562257644e+01, -9.113725450308451e+01, -9.689994049072266e+01, -1.131530849032137e+02, -1.248536160278658e+02, -1.475137697858639e+02, -1.927992138672029e+02, -2.036250152587891e+02, -2.06538195122586e+02, -2.244789735680985e+02, -2.267950564913243e+02, -1.284468100812394e+02, -2.196900787353516e+02, -2.310457013298706e+02, -2.369048868113172e+02, -2.390788658405085e+02, -2.438431505989226e+02, -2.539358520507812e+02, -2.535212116587998e+02, -1.722828317420344e+02, -2.901292053222993e+02, -2.877794647216764e+02, -2.875278015136719e+02, -2.832154919433314e+02, -2.879037865532301e+02, -2.87112519531296e+02, -2.985812493218552e+02, -3.099868469238281e+02] -simQ.y=[9.239443969726562e+01, 1.463702584160333e+02, 1.44728279418963e+02, 1.319274464078331e+02, 1.446149212646118e+02, 1.585025482177734e+02, 1.791584491305659e+02, 1.896357043097688e+02, 2.003959008959132e+02, 2.156764676180379e+02, 2.156837310791016e+02, 2.406131857479483e+02, 2.350819251759398e+02, 1.080911686869711e+02, 2.060580017091164e+02, 2.490257263183594e+02, 2.682097634054833e+02, 3.091020312839289e+02, 2.39773400519083e+02, 2.096869734023689e+02, 2.781199035644531e+02, 2.984845117187431e+02, 3.175528572929474e+02, 3.192592102050268e+02, 3.219870958116738e+02, 3.138860473632812e+02, 3.074422122532132e+02, 3.258462524413127e+02, 3.241253850299895e+02, 3.153113208007973e+02, 2.392404479980469e+02, -4.770361671933114e+01, 3.094891625714324e+00, 1.873866583087822e+02, 2.584702439740044e+02, 1.433476257324219e+01, -1.446960494096297e+02, 7.242448672521948e+01, 1.50323240082346e+02, -6.907391671599702e+01, -5.329121398925781e+01, 1.082902254969101e+02, 1.848225646971432e+02, 2.081317761591212e+02, 2.265556608412169e+02, 2.32585205078125e+02, 1.877427844241276e+02, -1.462958324166858e+01, -3.994049697817184e+01, -6.407320094653318e+01, -1.551132659912109e+02, -2.341892079670363e+02, -2.76798629150559e+02, -2.230699749414906e+02, -2.199116430664314e+02, -2.161452789306641e+02, -4.710958209602774e+01, 4.759908747947019e+01, 6.441739643910689e+00, 2.60771618652399e+02, 1.834832000732422e+02, 1.194737219418394e+02, 9.788422788438859e+01, 8.175743539727117e+01, 5.167452971510172e+01, 3.810221481323242e+01, 2.887731597208512e+01, 2.321802932946429e+01, 3.022930131796058e+01, 9.053213175072706e+00, -1.007763767242432e+01, -3.120715995790005e+01, -4.048268544922383e+01, -6.260499954227198e+01, -7.544887652929498e+01, -8.19041748046875e+01, -9.143039728795011e+01, -1.179713003539517e+02, -1.384556206175791e+02, -2.060897570801799e+02, -2.168466491699219e+02, -2.154110922919258e+02, -2.252860215130541e+02, -2.232371618481364e+02, -2.110156811825684e+01, -1.686839447021484e+02, -2.229301127714218e+02, -2.400740666881943e+02, -2.563190713817203e+02, -2.637198795094322e+02, -2.675313415527344e+02, -2.676575899991234e+02, -9.815395172909304e+01, -2.60928942332989e+02, -3.011727718777001e+02, -2.921625061035156e+02, -2.688764074706904e+02, -2.86676701524482e+02, -2.898739697265963e+02, -2.993258860270381e+02, -3.085114440917969e+02] -c1_c2_term.y=[-2.131192474365234e+02, -2.140604295518667e+02, -2.080203051758538e+02, -2.156876860724735e+02, -2.165052807617224e+02, -2.068700256347656e+02, -2.090341479831113e+02, -2.081242180319311e+02, -2.043056382920779e+02, -2.069895837957686e+02, -2.001670074462891e+02, -2.030617970186173e+02, -2.034413501608465e+02, -1.977330501161736e+02, -1.984750601375999e+02, -2.046878204345703e+02, -2.028557117808824e+02, -2.043186876932523e+02, -2.036431575999066e+02, -1.968543584187763e+02, -1.98455322265625e+02, -2.000274389648558e+02, -2.000423506843776e+02, -1.961359619140779e+02, -1.980752200656527e+02, -2.012674560546875e+02, -1.942997143215691e+02, -1.924611279297015e+02, -1.890222639295719e+02, -1.96521162719762e+02, -1.880234985351562e+02, -1.788173229641444e+02, -1.819545304241892e+02, -1.912026232401881e+02, -1.922944746537458e+02, -1.814909820556641e+02, -1.765865579044126e+02, -1.874136246253027e+02, -1.89792192235457e+02, -1.821510047463738e+02, -1.788571319580078e+02, -1.865281582918588e+02, -1.869919793023328e+02, -1.857067964442247e+02, -1.866791824340672e+02, -1.798953552246094e+02, -1.764966326904311e+02, -1.747327893575105e+02, -1.743821777343873e+02, -1.74027338494189e+02, -1.749006500244141e+02, -1.699049835205093e+02, -1.732800207519224e+02, -1.730654568990344e+02, -1.790549853515754e+02, -1.834669036865234e+02, -1.914558502197173e+02, -1.959676554960448e+02, -2.00753912184006e+02, -1.871877580122192e+02, -1.827691040039062e+02, -1.806820382510983e+02, -1.787222662563952e+02, -1.796856427422765e+02, -1.798066005931146e+02, -1.799650115966797e+02, -1.752212205366897e+02, -1.760661882189192e+02, -1.764387120863971e+02, -1.784275463528046e+02, -1.743211669921875e+02, -1.729575860595642e+02, -1.722619655184938e+02, -1.737906610107574e+02, -1.744423704359167e+02, -1.715931854248047e+02, -1.697458351983039e+02, -1.70664748535162e+02, -1.706294047037644e+02, -1.717945141601648e+02, -1.773910675048828e+02, -1.791956471761121e+02, -1.788852185417637e+02, -1.813623843722895e+02, -1.733691766912179e+02, -1.670287933349609e+02, -1.654181344424996e+02, -1.680272311506193e+02, -1.779541149271448e+02, -1.857832821116948e+02, -1.9424462890625e+02, -2.011514168479063e+02, -2.023056148105337e+02, -2.030059322581718e+02, -2.078334206475268e+02, -2.133948364257812e+02, -2.181014935302674e+02, -2.211263030158071e+02, -2.236118579101742e+02, -2.28116201782236e+02, -2.326849060058594e+02] -c3_term.y=[-1.736679534912109e+02, -1.744349210951066e+02, -1.672449157715719e+02, -1.802132233514647e+02, -1.806181433105826e+02, -1.634092102050781e+02, -1.754888663397109e+02, -1.651764190673177e+02, -1.705762813143716e+02, -1.711467149215929e+02, -1.685811004638672e+02, -1.65427717680049e+02, -1.649660004713429e+02, -1.584736047152239e+02, -1.537914803897473e+02, -1.640604858398438e+02, -1.627597989169299e+02, -1.60748478444266e+02, -1.662053894043096e+02, -1.55240864223898e+02, -1.632703399658203e+02, -1.614560546875744e+02, -1.646067582026257e+02, -1.723146136473485e+02, -1.698954672920061e+02, -1.769271545410156e+02, -1.727973139445087e+02, -1.671662548827189e+02, -1.597266936407886e+02, -1.575179272460264e+02, -1.411755065917969e+02, -1.376390826755117e+02, -1.537142991009725e+02, -1.635210221184049e+02, -1.530615126175863e+02, -1.524742279052734e+02, -1.408786640840473e+02, -1.572044201029955e+02, -1.495515083049128e+02, -1.572174083036396e+02, -1.354500732421875e+02, -1.559059248490285e+02, -1.605896685282376e+02, -1.580629225787306e+02, -1.584195361667726e+02, -1.510425415039062e+02, -1.467006536865481e+02, -1.415170357597909e+02, -1.306026129150487e+02, -1.296484968398661e+02, -1.544698944091797e+02, -1.40167738172767e+02, -6.522895202753188e+01, -2.230747159323116e+01, -2.330661949158387e+01, -2.612430381774902e+01, -3.073513664666748e+01, -3.139946859012137e+01, -3.507331550393484e+01, -2.438450646832965e+01, -2.890953063964844e+01, -2.907892240638459e+01, -3.597344823365422e+01, -3.578272933943899e+01, -2.87972336936879e+01, -3.046331024169922e+01, -2.246034993259024e+01, -2.258622911242323e+01, -2.382027049345256e+01, -2.916930238933766e+01, -3.520300674438477e+01, -2.730308456414714e+01, -2.639553381601413e+01, -2.268845115662558e+01, -2.556410107083414e+01, -2.455678176879883e+01, -2.529248286354925e+01, -2.152953376770094e+01, -2.26313139279742e+01, -4.294385772715597e+01, -2.236423301696777e+01, -2.772843488053361e+01, -2.534958009157893e+01, -2.842187032695497e+01, -2.857222296978095e+01, -2.495986175537109e+01, -2.162777166928634e+01, -2.120748181835831e+01, -2.24469852447575e+01, -2.343623953426859e+01, -2.450602722167969e+01, -2.53807453155497e+01, -2.559650157292566e+01, -2.633642210118128e+01, -2.716860184140348e+01, -2.820861625671387e+01, -2.889233802795906e+01, -2.869446733262885e+01, -2.820644439697503e+01, -2.880260223812652e+01, -2.940784454345703e+01] -c4_term.y=[-6.632921600341797e+01, -6.632921600341797e+01, -6.604804412842165e+01, -6.845690439013173e+01, -6.938775268554572e+01, -6.940821838378906e+01, -7.027548895940964e+01, -7.085982271082435e+01, -6.974482646517804e+01, -7.252736164440915e+01, -7.240821838378906e+01, -7.251629441204931e+01, -7.251819647427686e+01, -7.290053979282393e+01, -7.396868752872477e+01, -7.457066345214844e+01, -7.51930057872448e+01, -7.434161020913831e+01, -7.825333736645133e+01, -7.847360407510345e+01, -7.578180694580078e+01, -7.681919342040894e+01, -7.945454385546843e+01, -7.762274017330643e+01, -7.529563674928166e+01, -7.612051391601562e+01, -7.488310860528088e+01, -7.591138610839729e+01, -7.614683753119208e+01, -7.654212982178232e+01, -7.570016479492188e+01, -7.553387730916488e+01, -7.488470611571432e+01, -7.332446344162685e+01, -7.692328616056673e+01, -7.638463592529297e+01, -7.445638364904508e+01, -7.390282240242141e+01, -7.518705907362252e+01, -7.782167537913618e+01, -7.585801696777344e+01, -7.478853884610136e+01, -7.435753729078158e+01, -7.422879872041652e+01, -7.451177580091765e+01, -7.391780090332031e+01, -7.476642608642071e+01, -7.581890415615879e+01, -7.560232177733614e+01, -7.495844658745551e+01, -7.517406463623047e+01, -7.440330632527657e+01, -7.335853424073102e+01, -7.35922206454903e+01, -7.383262054443249e+01, -7.320320129394531e+01, -7.084636111789173e+01, -7.151372519101619e+01, -7.100844751993709e+01, -6.928634865501013e+01, -7.023934936523438e+01, -7.088454769358835e+01, -7.11403746506158e+01, -7.240853182035491e+01, -7.286804594152049e+01, -7.30413818359375e+01, -7.308756006414691e+01, -7.180100886027996e+01, -7.151703751507463e+01, -7.319749849107612e+01, -7.259236907958984e+01, -7.22105639648436e+01, -7.195210384791817e+01, -7.263364746094203e+01, -7.271369993421872e+01, -7.265825653076172e+01, -7.354328469169987e+01, -7.376569519043207e+01, -7.396523823208442e+01, -7.538995269776089e+01, -7.604924011230469e+01, -7.617618637085181e+01, -7.752094161090315e+01, -7.849599210950927e+01, -7.796807986172779e+01, -7.8151611328125e+01, -7.841149785659168e+01, -7.410855833913419e+01, -6.997020247884583e+01, -6.614775202133384e+01, -6.387918472290039e+01, -6.086268470071044e+01, -5.881918549008491e+01, -5.752016700295539e+01, -5.705750791761525e+01, -5.650017547607422e+01, -5.612227081298865e+01, -5.573703778584819e+01, -5.557798004150617e+01, -5.613374277750764e+01, -5.667268753051758e+01] -c6_term.y=[-1.381098651885986e+01, -1.381098651885986e+01, -1.368196880340744e+01, -1.456216075686039e+01, -1.467353462219535e+01, -1.41679048538208e+01, -1.537282174427675e+01, -1.468670063018204e+01, -1.568779263496222e+01, -1.576073906639598e+01, -1.63096752166748e+01, -1.593921042049172e+01, -1.089636635626655e+01, -1.583399422744278e+01, -1.545565077837321e+01, -1.651287460327148e+01, -1.687070607272373e+01, -1.661164808272243e+01, -1.048994759952422e+01, -1.632922763824492e+01, -1.749271965026855e+01, -1.706562759400048e+01, -1.775480337143857e+01, -1.867526260374553e+01, -1.847572174073017e+01, -1.887918090820312e+01, -1.901030231052e+01, -1.890332138059947e+01, -1.753028586704513e+01, -1.729248413085032e+01, -5.11331033706665e+00, -2.894769236776536e+00, -1.74717555775314e+01, -1.79451556205725e+01, -1.32297724463366e+01, -3.302054643630981e+00, -8.025482553540481e+00, -1.696390478201889e+01, -7.295929270679235e+00, -4.793141690433472e+00, -9.112274169921875e+00, -1.542849041331717e+01, -1.594407656457658e+01, -1.571523992874799e+01, -1.556572419273164e+01, -1.554421424865723e+01, -8.920384559637634e+00, -5.204634417405678e+00, -1.201122596739413e+01, -3.913627100018925e+00, -2.371999502182007e+00, -2.139566455947226e+00, -9.031432128118539e-01, -3.52709147665633e-01, -3.819768226147719e-01, -6.745434999465942e-01, -2.129775049949025e+00, -2.113349171238296e+00, -1.275585210323718e+00, -1.564481533657732e+00, -1.626301288604736e+00, -1.71952223357177e+00, -2.022134797320031e+00, -1.925588650529707e+00, -1.411317225060926e+00, -1.430822849273682e+00, -1.06086256070588e+00, -1.024173297485054e+00, -1.060934185981889e+00, -1.250061972934859e+00, -1.371887922286987e+00, -9.772105884531463e-01, -8.935151388250446e-01, -7.032160544395514e-01, -7.252222928736846e-01, -6.582083106040955e-01, -6.22179220782922e-01, -4.652441668512628e-01, -4.296306868393157e-01, -7.274198150650998e-01, -3.322510421276093e-01, -3.607466916238635e-01, -2.849415530177606e-01, -2.631891987384312e-01, -2.218025711451189e-01, -1.773968189954758e-01, -1.160471983693042e-01, -1.026960924268094e-01, -9.333182583591335e-02, -8.457665864157304e-02, -7.715500891208649e-02, -6.978438171474974e-02, -6.315357138715338e-02, -5.785402090229068e-02, -5.20933499352754e-02, -4.590627178549767e-02, -3.912177965046969e-02, -3.121959105551124e-02, -2.314324848350765e-02, -1.541904045474259e-02, -7.722451817244291e-03] +simQ.y=[9.239443969726562e+01, 1.464214860703844e+02, 1.448010900879083e+02, 1.320071372562896e+02, 1.446984545898071e+02, 1.585902252197266e+02, 1.792506802028858e+02, 1.897312119427536e+02, 2.004922763401135e+02, 2.157705596923454e+02, 2.157720642089844e+02, 2.406925393497406e+02, 2.351476824538561e+02, 1.081312513685612e+02, 2.060938277301986e+02, 2.490525207519531e+02, 2.682266607110586e+02, 3.091101101345691e+02, 2.397751296091565e+02, 2.096846764459887e+02, 2.781145324707031e+02, 2.984774328613212e+02, 3.175449832491648e+02, 3.192511218261205e+02, 3.219791917589395e+02, 3.138782958984375e+02, 3.074346432156698e+02, 3.258388061522502e+02, 3.241180301241193e+02, 3.153040258789222e+02, 2.392342224121094e+02, -4.770571017750681e+01, 3.092069692192394e+00, 1.873817762592217e+02, 2.58466221479775e+02, 1.43333101272583e+01, -1.446961300119389e+02, 7.243302086070906e+01, 1.503395366795308e+02, -6.906578288385089e+01, -5.327550888061523e+01, 1.083330602469988e+02, 1.84885630289591e+02, 2.082075080424508e+02, 2.266394422743224e+02, 2.326728973388672e+02, 1.878228015139714e+02, -1.459044648752655e+01, -3.991029128969515e+01, -6.404216605307346e+01, -1.550957183837891e+02, -2.341849017672207e+02, -2.76798326416184e+02, -2.230708593578589e+02, -2.199125592041267e+02, -2.161454162597656e+02, -4.708505422839271e+01, 4.763742146205001e+01, 6.474225338266056e+00, 2.607914450906092e+02, 1.834969329833984e+02, 1.194779953901104e+02, 9.787709013856428e+01, 8.174026384007487e+01, 5.165116644462262e+01, 3.807543563842773e+01, 2.884752672370534e+01, 2.318559762102245e+01, 3.019841716986777e+01, 9.029950862395545e+00, -1.010071468353271e+01, -3.123092391969205e+01, -4.051005598687571e+01, -6.264129165652984e+01, -7.55000067817093e+01, -8.198004150390625e+01, -9.152601665915232e+01, -1.18083898925729e+02, -1.385799494004025e+02, -2.06234650879008e+02, -2.170101318359375e+02, -2.155739805433364e+02, -2.254553468591594e+02, -2.234075305513427e+02, -2.12438961378324e+01, -1.687781829833984e+02, -2.230227960923086e+02, -2.40189897208298e+02, -2.564211146914252e+02, -2.638026625689451e+02, -2.675971984863281e+02, -2.67724021772916e+02, -9.824548199913963e+01, -2.610259011665713e+02, -3.012604197184119e+02, -2.922376708984375e+02, -2.689430749511592e+02, -2.867362343681777e+02, -2.899285400390963e+02, -2.993760793050329e+02, -3.085583190917969e+02] +a1_a2_term.y=[-3.597807006835938e+02, -3.61375561523438e+02, -3.511805957032475e+02, -3.641249821981097e+02, -3.655055993652405e+02, -3.492401123046875e+02, -3.528939999050297e+02, -3.513581905589245e+02, -3.449117964002436e+02, -3.494424610485536e+02, -3.379241943359375e+02, -3.428100927016402e+02, -3.434493277715022e+02, -3.338101806640562e+02, -3.350625125660944e+02, -3.455496826171875e+02, -3.424557672673795e+02, -3.449246242946616e+02, -3.437835937499199e+02, -3.323225782606231e+02, -3.350249938964844e+02, -3.376788171386921e+02, -3.377038960776523e+02, -3.311092700195572e+02, -3.343830881754658e+02, -3.397721252441406e+02, -3.280094401041814e+02, -3.249056018066642e+02, -3.191002680460492e+02, -3.317596411133411e+02, -3.17414306640625e+02, -3.018732099745108e+02, -3.071691485235981e+02, -3.227812896729108e+02, -3.246246337890313e+02, -3.063868408203125e+02, -2.98107488654643e+02, -3.163864011566071e+02, -3.20402495285511e+02, -3.075019093232874e+02, -3.019423522949219e+02, -3.148953813031917e+02, -3.156803398980582e+02, -3.13511939912787e+02, -3.151542575412076e+02, -3.03702392578125e+02, -2.979636572265649e+02, -2.949814132690552e+02, -2.943893420410365e+02, -2.937900394015743e+02, -2.952629089355469e+02, -2.86828159586591e+02, -2.9252545776362e+02, -2.921631622314913e+02, -3.022744665527562e+02, -3.0972265625e+02, -3.232122392442336e+02, -3.308300310920409e+02, -3.389091061062832e+02, -3.160059575860607e+02, -3.085459289550781e+02, -3.050215963924749e+02, -3.017119820430311e+02, -3.033373221561624e+02, -3.035409391515337e+02, -3.038080749511719e+02, -2.957994512384997e+02, -2.972256505331428e+02, -2.978547560747933e+02, -3.012131171332369e+02, -2.942807006835938e+02, -2.919786987304583e+02, -2.908039398192789e+02, -2.933836560058851e+02, -2.944821919758946e+02, -2.896696166992188e+02, -2.865490363227122e+02, -2.880986535644628e+02, -2.880378055148458e+02, -2.900024499511863e+02, -2.994486389160156e+02, -3.02495324367956e+02, -3.019704991957743e+02, -3.061523513793983e+02, -2.926619406960046e+02, -2.819635620117188e+02, -2.79243347167972e+02, -2.836458456104513e+02, -3.004060256432691e+02, -3.136249016257265e+02, -3.279107360839844e+02, -3.395701360528844e+02, -3.415158679538538e+02, -3.426979370117435e+02, -3.508487077501281e+02, -3.602385559082031e+02, -3.681849804687398e+02, -3.73292088317858e+02, -3.77488581542999e+02, -3.85093083360476e+02, -3.9280615234375e+02] +a3_term.y=[-2.700649070739746e+01, -2.71262079238892e+01, -2.409289489749856e+01, -3.178496128726033e+01, -3.162727325442777e+01, -2.104878807067871e+01, -3.163947893771714e+01, -2.195297382573183e+01, -2.998090775803833e+01, -2.870426628819267e+01, -3.083374404907227e+01, -2.568805625013534e+01, -2.496500875525209e+01, -2.240066242870214e+01, -1.720783067588111e+01, -2.320141410827637e+01, -2.316144703955251e+01, -2.014328872879225e+01, -2.606505091054629e+01, -1.977233070797216e+01, -2.670003890991211e+01, -2.380387763983661e+01, -2.694429737737463e+01, -3.734037399279687e+01, -3.358670620394855e+01, -3.842160034179688e+01, -3.908671849569083e+01, -3.472092269887141e+01, -2.964787503346316e+01, -2.227863716116318e+01, -1.178405666351318e+01, -1.458302257325677e+01, -2.849931050470161e+01, -3.194178345989964e+01, -2.073092914924854e+01, -2.757825088500977e+01, -1.935776338016778e+01, -2.823277572122297e+01, -1.894303306047662e+01, -3.1867310333243e+01, -1.23667049407959e+01, -2.754395765823001e+01, -3.190878843728979e+01, -3.026655744663714e+01, -2.995406523816681e+01, -2.724544715881348e+01, -2.524229743959885e+01, -2.127208484010479e+01, -1.05987994384777e+01, -9.888867039285543e+00, -3.410934448242188e+01, -2.324488203262928e+01, 5.401649993777902e+01, 9.679029672411615e+01, 9.991294158935764e+01, 1.001314239501953e+02, 1.010192311605025e+02, 1.034601295023563e+02, 1.030797064038939e+02, 1.044324229847177e+02, 9.686640930175781e+01, 9.526044132006776e+01, 8.701692078700307e+01, 8.787031144782208e+01, 9.493882338584928e+01, 9.338167572021484e+01, 9.811995169900712e+01, 9.857546293473766e+01, 9.759787418140964e+01, 9.361781285605363e+01, 8.475823974609375e+01, 9.17197183228115e+01, 9.21484133826185e+01, 9.690713104248159e+01, 9.44794792175162e+01, 9.352519989013672e+01, 9.151763144597869e+01, 9.591225494385087e+01, 9.478581178451847e+01, 7.527536956777179e+01, 9.970466613769531e+01, 9.558268381759015e+01, 9.774753193575854e+01, 9.638009300236172e+01, 9.073023737123174e+01, 8.998090362548828e+01, 9.220411493637044e+01, 9.441916966929301e+01, 1.000116694483544e+02, 1.044108282650342e+02, 1.091644134521484e+02, 1.130425747958005e+02, 1.136201784345946e+02, 1.133621599982946e+02, 1.158524834526923e+02, 1.186400680541992e+02, 1.211955792236237e+02, 1.234752447340162e+02, 1.256738848877053e+02, 1.2817761450874e+02, 1.307165069580078e+02] +a4_term.y=[-6.632921600341797e+01, -6.632921600341797e+01, -6.604804412842165e+01, -6.845690439013173e+01, -6.938775268554572e+01, -6.940821838378906e+01, -7.027548895940964e+01, -7.085982271082435e+01, -6.974482646517804e+01, -7.252736164440915e+01, -7.240821838378906e+01, -7.251629441204931e+01, -7.251819647427686e+01, -7.290053979282393e+01, -7.396868752872477e+01, -7.457066345214844e+01, -7.51930057872448e+01, -7.434161020913831e+01, -7.825333736645133e+01, -7.847360407510345e+01, -7.578180694580078e+01, -7.681919342040894e+01, -7.945454385546843e+01, -7.762274017330643e+01, -7.529563674928166e+01, -7.612051391601562e+01, -7.488310860528088e+01, -7.591138610839729e+01, -7.614683753119208e+01, -7.654212982178232e+01, -7.570016479492188e+01, -7.553387730916488e+01, -7.488470611571432e+01, -7.332446344162685e+01, -7.692328616056673e+01, -7.638463592529297e+01, -7.445638364904508e+01, -7.390282240242141e+01, -7.518705907362252e+01, -7.782167537913618e+01, -7.585801696777344e+01, -7.478853884610136e+01, -7.435753729078158e+01, -7.422879872041652e+01, -7.451177580091765e+01, -7.391780090332031e+01, -7.476642608642071e+01, -7.581890415615879e+01, -7.560232177733614e+01, -7.495844658745551e+01, -7.517406463623047e+01, -7.440330632527657e+01, -7.335853424073102e+01, -7.35922206454903e+01, -7.383262054443249e+01, -7.320320129394531e+01, -7.084636111789173e+01, -7.151372519101619e+01, -7.100844751993709e+01, -6.928634865501013e+01, -7.023934936523438e+01, -7.088454769358835e+01, -7.11403746506158e+01, -7.240853182035491e+01, -7.286804594152049e+01, -7.30413818359375e+01, -7.308756006414691e+01, -7.180100886027996e+01, -7.151703751507463e+01, -7.319749849107612e+01, -7.259236907958984e+01, -7.22105639648436e+01, -7.195210384791817e+01, -7.263364746094203e+01, -7.271369993421872e+01, -7.265825653076172e+01, -7.354328469169987e+01, -7.376569519043207e+01, -7.396523823208442e+01, -7.538995269776089e+01, -7.604924011230469e+01, -7.617618637085181e+01, -7.752094161090315e+01, -7.849599210950927e+01, -7.796807986172779e+01, -7.8151611328125e+01, -7.841149785659168e+01, -7.410855833913419e+01, -6.997020247884583e+01, -6.614775202133384e+01, -6.387918472290039e+01, -6.086268470071044e+01, -5.881918549008491e+01, -5.752016700295539e+01, -5.705750791761525e+01, -5.650017547607422e+01, -5.612227081298865e+01, -5.573703778584819e+01, -5.557798004150617e+01, -5.613374277750764e+01, -5.667268753051758e+01] +a6_term.y=[-2.147697687149048e+00, -2.147697687149048e+00, -1.970946302416233e+00, -2.56833111578209e+00, -2.56935937881741e+00, -1.824924349784851e+00, -2.771523072978643e+00, -1.951899253615512e+00, -2.757238599986187e+00, -2.643171323440733e+00, -2.982985258102417e+00, -2.475040559203344e+00, -1.648116669172996e+00, -2.238131511617917e+00, -1.72937581819323e+00, -2.335231065750122e+00, -2.400770304423465e+00, -2.081547339744246e+00, -1.64507909803119e+00, -2.079781572023961e+00, -2.860636711120605e+00, -2.516020183569982e+00, -2.906206577364033e+00, -4.046919364915412e+00, -3.652485508395927e+00, -4.099822998046875e+00, -4.300135596593466e+00, -3.926289138781183e+00, -3.253923971119437e+00, -2.445802230824679e+00, -4.268138110637665e-01, -3.067044993241064e-01, -3.239341943405139e+00, -3.505345841240703e+00, -1.792211885878971e+00, -5.972479581832886e-01, -1.102605947669534e+00, -3.046650981921979e+00, -9.244444189241774e-01, -9.715041104504966e-01, -8.319533467292786e-01, -2.725704492220959e+00, -3.167982444495884e+00, -3.009147377572983e+00, -2.943136623177e+00, -2.803821802139282e+00, -1.534877490999593e+00, -7.823802825430985e-01, -9.747367691983416e-01, -3.006846169709841e-01, -5.237715244293213e-01, -3.548149079087599e-01, 7.478682851632172e-01, 1.530371814305112e+00, 1.637493782043458e+00, 2.585446834564209e+00, 6.999835787878941e+00, 6.963316457419357e+00, 3.749125913769571e+00, 6.700294104492695e+00, 5.449182033538818e+00, 5.632954294541276e+00, 4.89140117580131e+00, 4.728537332607482e+00, 4.652809816250413e+00, 4.386058807373047e+00, 4.634522828188758e+00, 4.469959243139555e+00, 4.346969699859899e+00, 4.011968069605919e+00, 3.303120136260986e+00, 3.282833280565993e+00, 3.119347114034149e+00, 3.003623943327678e+00, 2.68033000892995e+00, 2.506876230239868e+00, 2.251323326428826e+00, 2.072708320618649e+00, 1.799490529297592e+00, 1.275173120496722e+00, 1.481332182884216e+00, 1.243656420708586e+00, 1.0987954518383e+00, 8.925251798495355e-01, 7.04390778324217e-01, 6.395398378372192e-01, 4.947475580608619e-01, 4.572391933409758e-01, 4.158503546795256e-01, 3.76807423198846e-01, 3.43701034784317e-01, 3.108169474385695e-01, 2.803402074510533e-01, 2.490328907965675e-01, 2.221439691052794e-01, 1.930770128965378e-01, 1.641078943014573e-01, 1.3434309032241e-01, 1.031162902711437e-01, 6.861885856415999e-02, 3.432634472846985e-02] +a7_term.y=[0e+00, 0e+00] +a8_term.y=[0e+00, 0e+00] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Electrical.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Electrical.txt index e6acf0cc5d..27e00a609f 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Electrical.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Electrical.txt @@ -1,12 +1,12 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", + "nonlinear": "1", "number of continuous time states": "3", "numerical Jacobians": "0" } -time=[1.65024e+07, 2.1513596e+07] -meaPel.y=[0e+00, 1.164386724852536e+02, 3.861972045897991e+00, 2.643428001405225e+01, 1.318872497558638e+02, 0e+00, 1.84271569852873e+02, 0e+00, 1.7359094177249e+02, 3.391603546144779e+01, 0e+00, 1.271009408952092e+01, 0e+00, 2.542058681234522e+02, 0e+00, 8.63539951323833e+01, 1.114431347660731e+02, 0e+00, 2.332552490234375e+02, 0e+00, 2.295513000487637e+02, 1.056088818867971e+01, 3.66508897793226e+00, 1.620476547241202e+02, 0e+00, 1.245562019348145e+02, 0e+00, 3.742693603520991e+01, 3.195967361450156e+01, 0e+00, 2.151676452636694e+02, 0e+00, 5.412929305981976e+01, 0e+00, 8.00780254363821e+00, 7.262553863525505e+01, 0e+00, 9.005399963383718e+01, 0e+00, 5.481612945571221e+01, 1.359377956384364e+01, 0e+00, 1.029176940918418e+02, 0e+00, 5.754613243108616e+01, 0e+00, 1.147980356852234e+02, 4.440735015868393e+01, 0e+00, 1.071677970121559e+02, 0e+00, 2.264944971719687e+02, 0e+00, 1.229849470140307e+01, 1.454560089111328e+02, 0e+00, 5.920328414934654e+01, 0e+00, 5.551706409451162e+00, 1.368718633651728e+01, 0e+00, 1.308608911075718e+02, 0e+00, 7.47825891876362e+01, 0e+00, 7.322509193410299e+01, 5.20880157470763e+01, 0e+00, 1.414790423584143e+02, 0e+00, 2.450395141600433e+02, 3.09758718013809e+00, 0e+00, 1.415729830931333e+02, 0e+00, 5.28752269744873e+01, 0e+00, 5.510723815888127e+01, 1.595041379929433e+01, 0e+00, 9.781993103024547e+01, 0e+00, 3.964970382693946e+01, 0e+00, 2.874461072286709e+00, 5.380760231015292e+01, 0e+00, 1.683720367431812e+02, 0e+00, 5.692282264732599e+01, 4.897000217419391e+00, 0e+00, 1.803223077392334e+02, 0e+00, 2.451970758057313e+02, 0e+00, 2.755897369381031e+01, 1.995480659486832e+01, 0e+00, 2.16978847554561e+02, 0e+00] -simPel.y=[0e+00, 1.054238681031098e+02, 4.073792772293093e+00, 3.184048782348556e+01, 1.247840942382857e+02, 0e+00, 1.584821740938631e+02, 0e+00, 1.718580448404878e+02, 3.496108482360833e+01, 0e+00, 1.360080074310299e+01, 0e+00, 2.511283265177603e+02, 0e+00, 8.862474136343675e+01, 1.08897116699768e+02, 0e+00, 2.227511352539035e+02, 0e+00, 2.266739410400198e+02, 1.251006013234456e+01, 8.938023948669516e+00, 1.522291787719774e+02, 0e+00, 1.294404449462891e+02, 0e+00, 3.559690681457946e+01, 3.930289718627935e+01, 0e+00, 2.041516845703112e+02, 0e+00, 5.370548355011624e+01, 0e+00, 7.237145233154308e+00, 6.815407028198186e+01, 0e+00, 8.010181823730639e+01, 0e+00, 5.070521022796711e+01, 1.617576255798375e+01, 0e+00, 9.439812408451849e+01, 0e+00, 5.064206947313631e+01, 0e+00, 1.151398070271769e+02, 5.202149513244479e+01, 0e+00, 9.959617782571607e+01, 0e+00, 2.203698297119126e+02, 2.89853130578994e-01, 1.965149148941022e+01, 1.372914068603517e+02, 0e+00, 5.92969889833318e+01, 0e+00, 5.659493789672851e+00, 1.539789867401123e+01, 0e+00, 1.218205853218489e+02, 0e+00, 6.667288162230052e+01, 0e+00, 7.834826316833549e+01, 5.097628372194663e+01, 0e+00, 1.325961199951118e+02, 0e+00, 2.36711764526247e+02, 2.607552943229677e+00, 0e+00, 1.321833547972982e+02, 0e+00, 4.667620944976807e+01, 0e+00, 5.387466178869701e+01, 2.135674415588387e+01, 0e+00, 8.775228881835976e+01, 0e+00, 3.495953651419998e+01, 0e+00, 2.90581887245178e+00, 5.264993190765748e+01, 0e+00, 1.579906277465885e+02, 0e+00, 5.412917040535342e+01, 5.27908754348759e+00, 0e+00, 1.674039807129294e+02, 0e+00, 2.385141894532066e+02, 0e+00, 2.522681922908144e+01, 3.681670196533182e+01, 0e+00, 2.044671563720868e+02, 0e+00] -UAbsFluid.y=[5.685147476196289e+01, 5.685147476196289e+01] +time=[1.65024e+07, 1.7107196e+07] +meaPel.y=[0e+00, 0e+00, 1.635842370986727e+00, 2.028313890455691e+01, 3.090472793579102e+01, 4.139707031253964e+01, 1.418920245361213e+02, 2.648749096681981e+02, 2.447339276125186e+02, 5.119655876162207e+01, 1.037376739501741e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.048443565368654e+01, 6.136826057435131e+01, 1.609192208862274e+02, 1.361248535116875e+02, 2.54866696166983e+02, 2.405102023902605e+02, 2.103671984863268e+02, 8.477566680899571e+01, 1.656829643249512e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.035419378283885e+00, 4.15108457947321e+01, 1.193729930623194e+02, 1.86359793579107e+02, 2.253917541504213e+02, 2.336069296266876e+02, 1.910662304687301e+02, 4.899175354004022e+01, 2.083355438231253e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.337123215196804e+00, 2.056193664549943e+01, 1.085990364085509e+01, 2.142040405273438e+02, 8.724875061020128e+01, 6.941937255859375e+01, 2.867364709472147e+02, 5.034464958206915e+01, 7.709912948611198e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.472432517993939e+00, 7.304354660035382e+01, 2.060847515868217e+02, 1.304233366399946e+02, 7.809851684562749e+01, 1.213373260498047e+02, 1.997672316487016e+02, 1.137077473449624e+02, 4.81608829497635e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.94984401702062e+00, 4.941645526885986e+01, 6.775638641361098e+01, 1.031521719361684e+02, 2.780286334206513e+02, 8.96974249267756e+01, 2.077975708007042e+02, 1.346212966918643e+02, 3.892577278139018e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.524533653274702e+00, 4.774382858288008e+01, 8.080706291195446e+00, 5.816967201227798e+00, 9.641653480529925e+01, 9.427835357702139e+01, 1.652528305054661e+02, 2.140334526061647e+01, 0e+00, 0e+00, 0e+00, 0e+00] +simPel.y=[0e+00, 0e+00, 1.446250810623166e+00, 2.218745174407955e+01, 3.024506874084473e+01, 3.712379776004565e+01, 1.323906835937701e+02, 2.649746423339222e+02, 2.39873782348657e+02, 4.496748733520559e+01, 1.046168341064344e+02, 2.84446414311727e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.163629691316424e+01, 6.502036804195724e+01, 1.506005700683572e+02, 1.344756256064907e+02, 2.548802278645825e+02, 2.5406941113281e+02, 2.074051019286937e+02, 5.515524627645968e+01, 2.158631324768066e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.80103976249695e+00, 4.198991043095275e+01, 1.126000956217316e+02, 1.75732682495116e+02, 2.185715744018551e+02, 2.302967391969013e+02, 1.855197406005686e+02, 4.675149871826449e+01, 1.997136512756342e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.142137300968167e+00, 2.049568153380459e+01, 1.069385614403163e+01, 1.950030676269732e+02, 8.389956212345804e+01, 6.35736083984375e+01, 2.72836324462811e+02, 5.0812380523884e+01, 8.208673599243129e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.189622974395754e+01, 7.534831008910741e+01, 1.924718026732429e+02, 1.219061866002403e+02, 7.487818542475144e+01, 1.113162151336659e+02, 1.973009226481503e+02, 1.150976169586182e+02, 3.291402044212331e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.484349060058619e+00, 4.760838890075684e+01, 6.30104373169064e+01, 9.571274673454076e+01, 2.777938909841828e+02, 8.602246948244644e+01, 2.021652435302731e+02, 1.326132601929492e+02, 4.500039291386821e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.566976871490493e+00, 4.445591735850188e+01, 8.499106941223166e+00, 6.259693756103519e+00, 8.933832084671582e+01, 9.050389862097641e+01, 1.629345962526976e+02, 2.115143816630047e+01, 0e+00, 0e+00, 0e+00, 0e+00] +UAbsFluid.y=[3.52370719909668e+01, 3.52370719909668e+01] diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Thermal.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Thermal.txt index 2f1646493b..dc6e641937 100644 --- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Thermal.txt +++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_PVTCollectors_Validation_PVT_UN_PVT_UN_Thermal.txt @@ -1,15 +1,17 @@ -last-generated=2025-08-20 +last-generated=2026-04-04 statistics-simulation= { "linear": " ", - "nonlinear": " ", - "number of continuous time states": "1", + "nonlinear": "1", + "number of continuous time states": "6", "numerical Jacobians": "0" } -time=[1.65024e+07, 2.1513596e+07] -meaQ.y=[0e+00, -2.721506774900199e+02, 0e+00, 0e+00, 0e+00, 0e+00, 2.38039627685214e+02, 0e+00, 5.63344894918393e+01, 0e+00, 0e+00, 0e+00, 0e+00, -1.145724469504083e+02, 0e+00, 0e+00, 0e+00, 0e+00, 1.033027114868164e+02, 0e+00, 7.705743103084895e+01, 0e+00, 0e+00, 0e+00, 0e+00, 1.749536590576172e+02, 0e+00, 0e+00, 0e+00, 0e+00, 7.026055450476184e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.076961618041236e+02, 0e+00, 0e+00, 0e+00, 0e+00, 1.125957250467636e+02, 0e+00, 0e+00, 0e+00, 0e+00, 1.042042840570654e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.936831054661803e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.614984969571159e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.048088072964151e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.416995983886874e+02, 0e+00, -2.238560577392975e+02, 0e+00, 0e+00, 7.399656107570614e+01, 0e+00] -simQ.y=[-0e+00, -8.152623214717821e+01, 0e+00, 0e+00, 0e+00, 0e+00, 8.837705688444233e+01, 0e+00, 5.649069702151594e+01, 0e+00, 0e+00, 0e+00, 0e+00, -1.542308544171013e+01, 0e+00, 0e+00, 0e+00, 0e+00, 9.6006861572456e+01, 0e+00, 1.021098785402352e+02, 0e+00, 0e+00, 0e+00, 0e+00, 1.641395492553711e+02, 0e+00, 0e+00, 0e+00, 0e+00, 6.374573822044077e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.872940673823202e+01, 0e+00, 0e+00, 0e+00, -0e+00, 1.170407889301214e+02, 0e+00, 0e+00, 0e+00, 0e+00, 8.269635894721424e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.955946884161396e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.75774031314528e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -5.575297977433274e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.278038595584195e+02, 0e+00, -1.2459423797609e+02, 0e+00, 0e+00, 3.083547349278326e+01, -0e+00] -c1_c2_term.y=[1.996501564979553e+00, -3.508751403807894e+02, 2.666490589141589e+01, -8.902568756101614e+01, -1.152383865356385e+02, 1.090730792997225e+01, -3.285020727537545e+02, 3.545007766727326e+01, -3.973118387857195e+02, -8.608153238308002e+00, 1.340890941622197e+01, -5.201402198788997e+01, 1.947893165588473e+01, -3.362024965413426e+02, 1.555492748260767e+01, -1.627640785218759e+02, -8.325483734128795e+01, 3.842510372161883e+01, -4.40168228759829e+02, 3.943380847930813e+01, -4.280854187009846e+02, 2.203155857086476e+01, -6.230990097045123e+01, -2.011403469848598e+02, 4.470645713778664e+00, -4.062265319824219e+02, 2.906568168637747e+01, -1.106290689087565e+02, 1.314817500110827e-01, 6.979220032689806e+00, -3.179097412109722e+02, 1.445541475932694e+01, -3.313092578128162e+02, 1.217225622177046e+01, -1.536179252625958e+01, -1.126949829101488e+02, 1.247372226714878e+01, -2.15812428894125e+02, 6.322277431495567e+00, -1.756359989929969e+02, 5.82024061741429e-01, -6.379034233077803e+00, -1.427152746581494e+02, 7.662449865293304e+00, -1.17448417358342e+02, 1.759250984185594e+01, -2.937277876790357e+02, 9.525531902585955e+00, 2.003307945241944e+01, -1.477565202329301e+02, -1.065554428100586e+01, -4.014184686278496e+02, 3.194046501168746e+01, -9.960710723874803e+01, -1.521024102783216e+02, 3.256074218758975e+01, -3.679500769040278e+02, 2.483486679074491e+01, -1.484589584350649e+01, 1.59954835319512e+01, 1.892246818537004e+01, -3.009639147949331e+02, 2.615920692443547e+01, -1.757191085815347e+02, 2.352687778589295e+00, -1.530525009157287e+02, -6.154643463132047e+01, 2.832659746168975e+01, -2.371272717284379e+02, 1.031986543018765e+01, -3.800104370115965e+02, 2.259100879669628e+01, -6.719205093306798e+00, -1.600508976744557e+02, 6.443049240101022e+00, -1.190918636322021e+02, 1.789195022580203e+01, -1.073705097194554e+02, 2.602260925291242e+01, 2.987675807951598e+01, -1.757427795411491e+02, 1.360362453461193e+01, -2.307782104493908e+02, 2.314554704666274e+01, -1.596954706823914e+01, -1.073161827088705e+02, 2.555609962462319e+01, -3.900245941162712e+02, 3.166893730163706e+01, -1.60225952657018e+02, 1.710322399120468e+01, 1.508021039964292e+01, -2.197345281982383e+02, 3.359174877163096e+01, -4.426088647461327e+02, 3.549271335608366e+01, -2.778920776367157e+02, 5.035510955780269e+01, 3.826093803405358e+01, -4.217771689859015e+02, 2.971110725402832e+01] -c3_term.y=[3.884125053882599e-01, -6.581601796887134e+01, 8.349021112760168e-01, -1.326430511436217e+01, -3.477321568810064e+01, 6.700986886011924e-01, -2.690903091429421e+01, 2.787255089206687e+00, -7.686353942829143e+01, -9.695553863061499e-01, 3.707038974768387e+00, -5.858454790112533e+00, 3.789558811187928e+00, -2.065485304768889e+02, 3.79274931900353e+00, -5.453451938581227e+01, -1.108211826324188e+01, 1.022959272384648e+01, -2.253505599975911e+01, 1.615097187757453e+00, -1.562218383781857e+02, 3.697006603888485e+00, -4.466065120696466e+00, -4.545187347439651e+01, 1.831049954879946e-01, -5.823261070251465e+01, 5.214824848038218e+00, -2.972238617087916e+01, 9.423960708055819e-03, 0e+00, -5.533790359497675e+01, 7.212808147665613e-01, -1.096647009478075e+02, 6.231764650344451e-01, -2.359408235552148e+00, -5.76958460807762e+00, 1.788109165827132e+00, -3.628875778227751e+01, 3.236782336238901e-01, -3.776615589143502e+01, 1.011600077356438e-01, -7.221632492528743e-01, -9.590579490253692e+00, 5.647482013560357e-01, -8.608820340907762e+00, 7.205394506428664e-01, -5.365500584875421e+01, 4.87673556222573e-01, 1.175621623935731e+00, -2.251385639217555e+01, -6.546314358711243e-01, -6.57638619994986e+01, 2.943429727562688e+00, -3.059718914031322e+00, -2.327534706116438e+01, 4.667585849774829e+00, -2.637284019468286e+01, 1.271457262037824e+00, -2.280172100067235e+00, 3.603213558196863e+00, 3.175376558727035e+00, -1.540828683853207e+01, 2.410665898322782e+00, -4.644345191929411e+01, 5.355243039377046e-01, -2.037294082644281e+01, -1.571373559507889e-01, 0e+00, -4.692507797204954e+01, 1.224237104313779e+00, -3.540421142794565e+01, 1.76957095858799e+00, 0e+00, -1.083785128553881e+01, 5.277781319608983e-01, -2.956739711761475e+01, 1.099205446241563e+00, -7.915666076631169e+01, 1.264377223971703e+01, 2.447334890364549e+00, -3.598963623049607e+01, 5.925678348075336e-01, -1.654103954316419e+01, 2.493880934726536e+00, -2.435692504225174e+00, -1.131898341262324e+01, 7.000966641054722e-01, -1.255036231997008e+02, 2.206074085284988e+00, -4.662687276028367e+01, 7.004996418875382e-01, 1.633903629758048e+00, -3.134340034813973e+01, 6.288785419755655e+00, -6.245488495489981e+01, 7.631825447096622e+00, -4.268127548217727e+01, 1.802046109360023e+00, 5.092943868636548e+00, -2.661263762230944e+01, 5.78019380569458e+00] -c4_term.y=[-3.692821884155273e+01, -2.68188600540285e+01, -3.945359680175734e+01, -4.541236114501953e+01, -4.873049621581981e+01, -2.473220161437493e+01, -4.383093124392705e+01, -4.079036823273404e+01, -6.474288808188832e+01, -2.899440765380859e+01, -4.560591125488281e+01, -5.80888627774056e-01, -1.816270637512207e+01, -4.654948613484429e+01, -2.661070442199707e+01, -5.586792278287505e+01, -2.971597213744874e+01, -5.02303466796875e+01, -6.267192840576172e+01, -4.33816032409668e+01, -4.818606643681593e+01, -3.556669970194579e+01, -4.703975753783418e+01, -5.168819648742581e+01, -1.128729238509632e+01, -4.329317855834961e+01, -4.040995346068839e+01, -3.623260261532525e+01, -4.745623535156107e+01, -4.141637802124023e+01, -6.393471908569336e+01, -2.766226441766373e+01, -5.449983016966644e+01, -2.928316879272461e+01, -2.128794975280367e+01, -3.029237461090984e+01, -1.813409614562988e+01, -2.783951038359257e+01, -1.118955085754525e+01, -2.381809785840165e+01, -3.189468536377922e+01, -1.204648978713369e+00, -1.473054412843359e+01, -9.436258354177994e+00, -8.562964897170239e+00, -2.806481590269939e+01, -6.712554036458323e+01, -5.250717193610711e+01, -3.28075514221016e+01, -1.879825418475717e+01, 1.50443160533905e+00, -5.822948674521788e+01, -3.993609298707699e+01, -5.358528087617233e+01, -5.469449432372983e+01, -4.000623588563698e+01, -5.095565246583728e+01, -3.337664268493194e+01, -4.256791114807129e+00, -3.5413002090454e+01, -3.419258270262355e+01, -3.859415008544399e+01, -3.964631271362305e+01, -3.079250526428223e+01, -5.54917242052267e+00, -5.827333126064371e+01, -2.305693313598884e+01, -4.173654445647954e+01, -2.817223365785676e+01, -1.719120718636557e+01, -3.660428619384766e+01, -3.744426589965896e+01, -4.237087615967698e+01, -6.291558837890625e+01, -7.650221214292364e+00, -1.896746921539307e+01, -1.976323410033666e+01, -3.908613079066497e+01, -5.688635612487313e+01, -3.996151802062769e+01, -2.47662353515376e+01, -2.030734062194824e+01, -2.137395381926503e+01, -1.364866161346436e+01, -1.658193677266994e+01, -3.276693630216096e+01, -4.050702285766602e+01, -4.02214601135184e+01, -4.119301223754883e+01, -3.176407188415211e+01, -2.508440132137602e+01, -4.797671852112305e+01, -5.980269546509417e+01, -4.36637036514214e+01, -6.629426879880836e+01, -4.302762336732113e+01, -5.242857177734084e+01, -6.287390628810324e+01, -4.812363052368164e+01, -7.124512608846673e+01, -4.233333969116211e+01] -c6_term.y=[-0e+00, -4.357365140126389e+01, -2.516408353996132e-01, -9.922686004353647e+00, -7.981821156827441e+01, 0e+00, -2.913202278542139e+01, 0e+00, -7.496953369101206e+01, -8.018383026123047e+00, 0e+00, -3.103890180587769e+00, 0e+00, -3.431609285482033e+02, 0e+00, -6.342656707696315e+01, -2.999013519302414e+01, 0e+00, -2.607150268554688e+01, 0e+00, -1.873042541496075e+02, -4.14220428150161e+00, -1.316801905632019e+00, -7.368912567183452e+01, 0e+00, -4.19936351776123e+01, 0e+00, -2.03604337702043e+01, -5.719858169555664e+00, 0e+00, -8.084811401367188e+01, 0e+00, -3.887068993259825e+01, 0e+00, -2.292646169662476e+00, -7.260046482086182e+00, 0e+00, -2.867144893668484e+01, 0e+00, -2.283828353881836e+01, -5.570072174660922e+00, 0e+00, -1.322868778173456e+01, 0e+00, -7.608783939395699e+00, 0e+00, -4.624937667808049e+01, -5.408293724060059e+00, 0e+00, -3.1884045334223e+01, -0e+00, -8.220606231689453e+01, -5.290722101926804e-02, -1.269773244857788e+00, -4.498135101319705e+01, 0e+00, -9.481763458280282e+00, 0e+00, -1.763574004173279e+00, -6.983753204345703e+00, 0e+00, -1.393565025267919e+01, 0e+00, -3.797737178780559e+01, 0e+00, -2.162729644775391e+01, -2.630270388191818e-01, 0e+00, -5.623783493000366e+01, 0e+00, -5.033475342102591e+01, -4.047931379018719e-01, 0e+00, -1.93064758103034e+01, 0e+00, -2.380677938461304e+01, 0e+00, -8.149405174217529e+01, -2.036354888922506e+01, 0e+00, -3.738776779174805e+01, 0e+00, -5.23346454619135e+00, 0e+00, -8.755165171564832e-01, -1.126218319020675e+01, 0e+00, -1.106830167390873e+02, 0e+00, -3.267591370792925e+01, -4.232577681541443e-01, 0e+00, -5.084216568525952e+01, 0e+00, -7.663902787010016e+01, 0e+00, -8.294158744797295e+00, -2.629615926642482e+00, 0e+00, -2.926978792909146e+01, -0e+00] +time=[1.65024e+07, 1.7107196e+07] +meaQ.y=[0e+00, 0e+00, 1.635842370986727e+00, 2.028313890455691e+01, 3.090472793579102e+01, 4.139707031253964e+01, 1.418920245361213e+02, 2.648749096681981e+02, 2.447339276125186e+02, 5.119655876162207e+01, 1.037376739501741e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.048443565368654e+01, 6.136826057435131e+01, 1.609192208862274e+02, 1.361248535116875e+02, 2.54866696166983e+02, 2.405102023902605e+02, 2.103671984863268e+02, 8.477566680899571e+01, 1.656829643249512e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.035419378283885e+00, 4.15108457947321e+01, 1.193729930623194e+02, 1.86359793579107e+02, 2.253917541504213e+02, 2.336069296266876e+02, 1.910662304687301e+02, 4.899175354004022e+01, 2.083355438231253e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.337123215196804e+00, 2.056193664549943e+01, 1.085990364085509e+01, 2.142040405273438e+02, 8.724875061020128e+01, 6.941937255859375e+01, 2.867364709472147e+02, 5.034464958206915e+01, 7.709912948611198e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.472432517993939e+00, 7.304354660035382e+01, 2.060847515868217e+02, 1.304233366399946e+02, 7.809851684562749e+01, 1.213373260498047e+02, 1.997672316487016e+02, 1.137077473449624e+02, 4.81608829497635e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.94984401702062e+00, 4.941645526885986e+01, 6.775638641361098e+01, 1.031521719361684e+02, 2.780286334206513e+02, 8.96974249267756e+01, 2.077975708007042e+02, 1.346212966918643e+02, 3.892577278139018e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.524533653274702e+00, 4.774382858288008e+01, 8.080706291195446e+00, 5.816967201227798e+00, 9.641653480529925e+01, 9.427835357702139e+01, 1.652528305054661e+02, 2.140334526061647e+01, 0e+00, 0e+00, 0e+00, 0e+00] +simQ.y=[1.9634194e+07, 3.283906160481957e+02, 2.87527961426254e+02, 4.120413168325586e+02, 0e+00, 4.873709741139742e+02, 6.1289664307492e+02, 4.125092672587388e+02, 1.530362008538995e+03, 4.975714385972017e+02, 5.94963720703843e+02, 3.591489265944161e+02, 0e+00, 3.3224462890625e+02, 3.048400692748735e+02, 2.913538146978073e+02, 2.372528942871567e+02, 0e+00, 0e+00, 7.040980944824095e+02, -5.530189160164269e+03, 4.808068123370567e+02, -2.719938125131468e+03, 7.994219873047929e+02, 5.908725537098476e+02, 5.512236328125e+02, 3.527898413086145e+02, 3.340056184081533e+02, 0e+00, 3.000206079100578e+02, 0e+00, 2.825120974731743e+02, 0e+00, 5.617795760090512e+02, 1.084620633725321e+03, 1.076564025878872e+03, -1.884245294192702e+02, 4.991546508789853e+02, 7.876228759780879e+02, 5.39237887204661e+02, 4.371609130859263e+02, 4.423442755116878e+02, 4.334596252441406e+02, 3.960856880666484e+02, 3.504078710940119e+02, 3.50177569580107e+02, 4.720353735355655e+02, 1.846853979492809e+02, 8.732843017577907e+02, 6.557676615508902e+02, 7.408106079101562e+02, 7.466208848170097e+02, -1.074901696289497e+03, 6.335074463533606e+02, 3.648779862469527e+02, 3.070649780279041e+02, 3.086847460932392e+02, 2.583270080552838e+02, 2.230779821776449e+02, 2.499058761614933e+02, 2.696188415526822e+02, 4.979957141246144e+02, 3.073068035887526e+02, -1.753230730976582e+03, 8.152954125963489e+02, 7.103857269099716e+02, 9.233591064543421e+02, 6.759789971923725e+02, 3.93636026602228e+02, 3.043047717285832e+02, 3.142893707275927e+02, 3.000438828530983e+02, 2.6541192871136e+02, 3.009907391358868e+02, 3.341601269531021e+02, 2.576377754211426e+02, 5.619573852723261e+02, 8.254846447685709e+02, 9.958524718326707e+02, 8.607594177249338e+02, 9.978449340874261e+02, 6.376244853789525e+02, 6.83879167480618e+02, 4.622152328498387e+02, 5.82012880859405e+02, 5.869275604249716e+02, 6.147918180243515e+02, 5.319725854428336e+02, 3.739694567871917e+02, 0e+00, 4.803648132259772e+02, 3.913256799315582e+02, 3.976376867675806e+02, 6.842630147558923e+02, 0e+00, 8.528345367314607e+02, 4.705244181314389e+02, 4.084423681706755e+02, 4.185609197984655e+02, 3.914788592541887e+02, 4.853400268554688e+02] +a1_a2_term.y=[2.609784364700317e+00, 4.042029313151447e+02, 3.881787670898501e+02, 4.199090084839029e+02, 4.063250439453462e+02, 4.53649315185504e+02, 4.01226402587923e+02, 3.462761047359924e+02, 3.815015075682501e+02, 4.432073425292106e+02, 3.80883320312455e+02, 4.388353710937309e+02, 3.939845673828942e+02, 3.909454956054688e+02, 3.862512896728072e+02, 3.78009924316432e+02, 3.511940612793737e+02, 3.148028505858907e+02, 2.871993908692903e+02, 3.545808038329882e+02, 3.887536376982996e+02, 4.826924434406504e+02, 4.014620256353668e+02, 4.410693457031058e+02, 5.391198541259552e+02, 5.541182250976562e+02, 5.001401879883163e+02, 4.632795266113345e+02, 2.976601062010557e+02, 4.174020935058631e+02, 3.949443237303192e+02, 3.907028369140637e+02, 3.906327746581445e+02, 4.705397135416274e+02, 4.890669038085356e+02, 4.85926602172824e+02, 5.142833337397418e+02, 6.202049975586835e+02, 6.371128515625339e+02, 6.263791049805122e+02, 5.666190917968579e+02, 5.351686352539618e+02, 5.226275024414062e+02, 5.193054785156575e+02, 4.874190424804585e+02, 4.429408264160567e+02, 4.606154956054836e+02, 3.972235339353996e+02, 3.417424011230469e+02, 4.941251338702282e+02, 5.110972595214844e+02, 3.147256982421543e+02, 5.474981848128498e+02, 5.177397326660558e+02, 5.058146468098983e+02, 4.374045898436342e+02, 3.969315148925782e+02, 3.626347131347629e+02, 3.308254577636794e+02, 3.29782383422833e+02, 3.598696289061642e+02, 4.139472253418902e+02, 4.580570318604647e+02, 4.582277758785197e+02, 4.749177905272875e+02, 4.805940124511726e+02, 4.41542074788206e+02, 5.221695806884678e+02, 4.954461047363925e+02, 4.425706750489376e+02, 4.179754943848514e+02, 4.063480291747983e+02, 3.795199060058281e+02, 4.007217926027449e+02, 4.362997839355119e+02, 4.652748413085938e+02, 4.661491564941531e+02, 4.836908212282405e+02, 4.135202960205669e+02, 5.497875402832391e+02, 4.879882751464558e+02, 5.357351171875441e+02, 5.658137145996438e+02, 5.50413137207066e+02, 5.421256030273739e+02, 5.30948239135828e+02, 5.253124129232153e+02, 5.108988345336915e+02, 4.139206604003392e+02, 4.261691784661361e+02, 4.163338531494673e+02, 4.122195208740487e+02, 4.109508044433617e+02, 3.313651071165898e+02, 4.230276037608256e+02, 4.425107864379899e+02, 5.048026790364684e+02, 5.090978506469263e+02, 5.010400640869326e+02, 4.894607208254989e+02, 5.003072814941406e+02] +a3_term.y=[-2.248703986406326e-01, -6.332342763265608e+01, -5.624230911242739e+01, -7.565157379150682e+01, -7.638705932617822e+01, -1.881862961217915e+01, 1.899982986627536e+01, 6.238573959344538e+01, -1.109083545860265e+01, -5.901885978697581e+01, -5.113885696310632e+01, -7.277208770812581e+01, -9.258389428712857e+01, -5.818416213989258e+01, -6.958773933409844e+01, -6.298037567089461e+01, -7.42755526733561e+01, -5.178367987059777e+01, -4.724302993776875e+01, -9.047225513580257e+00, -2.898686141854762e+01, 1.672104270946107e+01, 6.320101986708909e+01, 9.381482190587846e+00, -8.445983638763092e+00, -2.821309661865234e+01, -1.018591476440501e+02, -8.74022861938992e+01, -6.994824920651567e+01, -7.786527740489305e+01, -8.043483886715704e+01, -9.181270721435574e+01, -9.179623870848231e+01, -7.371590901692093e+01, -1.149276406097276e+01, 1.141896919250424e+02, 9.668267044058122e+01, -4.858142375946748e+00, 2.02184085863215e+01, -1.079431101684645e+02, -9.320633544921593e+01, -7.32529692850766e+01, -6.140708541870117e+01, -8.890579000124134e+01, -1.145403967285132e+02, -6.939220275879549e+01, -1.057243395991501e+02, -4.978401283262314e+01, -8.030730438232422e+01, -4.962502156562956e+01, -5.6048828125e+01, -1.363104887068048e+01, -5.719678885084956e+01, -4.866622543335339e+01, -8.652081370027385e+01, -7.398983383119283e+01, -3.474856781056823e+01, -5.397068542480429e+01, -5.91232391358285e+01, -4.109656028580955e+01, -6.765367736814794e+01, -5.668015030053385e+01, -5.756067482063381e+01, -4.666161140437958e+01, 1.191033447085865e+01, -3.76455210447312e+00, -5.958391031863823e+01, -3.681196681976257e+01, -5.402420578697698e+01, -9.013447341921174e+01, -8.185134124757539e+01, -5.79085996247119e+01, -7.246095336873159e+01, -5.336135387423396e+01, -7.51869802856385e+01, -8.656196022033691e+01, -4.586083724485957e+01, 8.12020436842317e+00, -3.886986656189521e+01, 7.230057955164038e+00, -2.675730552673183e+01, -2.329121125467094e+01, 4.432088279724391e+01, -4.384697265593172e+01, 6.794458374023816e+01, 8.733864402772407e+01, 1.159100089428755e+02, 4.939185485240529e+01, -4.630523315417526e+01, -3.434619355131805e+00, -6.848508300782126e+01, -3.540871910060167e+01, -4.184736831665063e+01, -6.403759817560291e+01, -4.655398132043266e+01, 3.604894899904632e+01, -6.860659952796077e+01, -7.965787383392106e+01, -5.771520172245667e+01, -7.446324233912421e+01, 3.918968677520752e+00] +a4_term.y=[-3.692821884155273e+01, -1.069495403290379e+01, -3.840900436401456e+01, -2.54883975982666e+01, -2.151277542114258e+01, -2.005855102538575e+01, -3.617300918579381e+01, -4.809545242306795e+01, -4.355304718017578e+01, -1.56082999420039e+01, -3.112238845824512e+01, -1.051398161569932e+01, -1.068578624725342e+01, -4.456903040409088e-01, -9.906509799950918e+00, -2.005002670288453e+01, -3.234507995606551e+01, -4.164666366577148e+01, -5.417778015136719e+01, -4.913883110046085e+01, -3.512110290527858e+01, -5.217166651407235e+01, -5.52243010864498e+01, -5.523171340942208e+01, -5.168644191741264e+01, -4.410173797607422e+01, -3.73478021240287e+01, -3.482233798217868e+01, -3.426620208739757e+01, -3.286552078247125e+01, -3.131187782286857e+01, -3.010810279846191e+01, -4.551812622070874e+01, -4.617936233519572e+01, -4.866507995606344e+01, -4.733981971740481e+01, -4.62135138702243e+01, -4.615181579588982e+01, -4.204405944824542e+01, -2.799080290222938e+01, -3.082434921264382e+01, -1.703610054016963e+01, -2.465912437438965e+01, -2.892190485636885e+01, -1.587192839050139e+01, -1.890232582092852e+01, -1.664710189819446e+01, -7.482382946005043e+00, -3.139272308349609e+01, -3.40468555450049e+01, -1.785276031494141e+01, -3.987525939941406e+01, -4.167196655273438e+01, -5.350819007874039e+01, -4.610988800048865e+01, -4.76988590240309e+01, -4.897908401489258e+01, -4.706518173217773e+01, -4.080623809814558e+01, -3.413618522643785e+01, -4.780256958006596e+01, -5.726626121521759e+01, -5.640126899719567e+01, -5.034335208893617e+01, -4.871851928708671e+01, -3.770110321044922e+01, -6.269938023881409e+01, -6.250451278686523e+01, -4.975784652710993e+01, -3.951693984986957e+01, -1.805064601899438e+01, -4.199247772216705e+01, -3.456740356444867e+01, -4.058543064120396e+01, -4.609294601439916e+01, -2.89932975769043e+01, -2.789162353515542e+01, -3.153624437333966e+01, -4.262187919617649e+01, -4.502261444092539e+01, -5.912065963744429e+01, -5.208687324523343e+01, -5.115669921875667e+01, -4.440289619446337e+01, -3.240368164062963e+01, -3.784514751435635e+01, -3.460263641358002e+01, -3.122176742553711e+01, 5.712559413917367e+00, -1.220505428310896e+01, -9.242034721387146e+00, 1.376008701291246e-01, -2.309442758560181e+00, -1.649085508345827e+01, -3.35607719421697e+01, -3.852249679566094e+01, -3.171937441508118e+01, -1.785896043776767e+01, -2.198694530487339e+01, -2.024817710881013e+01, -1.889722061157227e+01] +a6_term.y=[0e+00, 0e+00, 5.436745762813187e-01, 1.054617214202881e+01, 1.523727893829346e+01, 4.139573808599809e+00, -1.730546695870484e+01, -1.3733269348141e+02, 2.067488022181696e+01, 1.668928909301758e+01, 3.817202896042973e+01, 1.244518866152061e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.945908142097202e+00, 2.872354755400038e+01, 1.062763210311034e+01, 2.837623481529882e+01, -2.614311045346598e+01, -1.170797336426732e+02, -1.297671646049262e+01, 2.437814197522624e+00, 2.980440139770508e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.996151447296143e+00, 2.644175819399811e+01, 4.933188476561881e+01, 1.202757453918457e+01, -1.495510711669922e+02, -1.27503860015939e+02, 4.279126605987102e+00, -4.167678060887263e+00, 9.440999031066895e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.702863991260529e-01, 1.25453510283826e+01, 3.526433210399414e+00, 1.297990417480469e+02, 2.418247809082385e+01, 1.983432960510254e+01, 3.431256973415933e+01, 1.499880233429838e+01, 2.158614540100098e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.784522533416748e+00, 2.774376274179817e+01, 6.866160385209187e+01, 3.589214225784416e+01, -5.34659435191261e+00, 2.50427508354187e+00, 7.926912506058841e+01, 2.338499069213867e+01, 9.480973769180308e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.267848968505859e+00, 2.387438344955444e+01, 1.690820686159793e+01, -4.46294966908998e+00, 7.862153777862784e+01, -3.255157582929564e+00, 3.283774948120117e+01, 1.667627131729091e+01, -9.670758018504515e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.701068217995046e-02, 1.961623325352499e+01, 1.933935282211106e+00, 1.681273937225342e+00, 4.626571809661719e+01, 2.83630178816299e+01, -3.796681074719791e+01, 7.751674308772861e+00, 0e+00, 0e+00, 0e+00, -0e+00] +a7_term.y=[-3.406270027160645e+00, -1.793646876018232e+00, -5.957408542620232e+00, -4.915847301483154e+00, -4.329479694366455e+00, -8.907104625223266e-01, 1.833732667140443e+00, 9.275981101984392e+00, -1.356256103731132e+00, -2.225013065336324e+00, -4.473386993319939e+00, -1.866461766575959e+00, -2.688163995742798e+00, -7.100923359394073e-02, -1.910629699228968e+00, -3.576097822161798e+00, -7.323185291292734e+00, -7.333774089813232e+00, -9.54044246673584e+00, -1.342200474757165e+00, -2.803704738485714e+00, 1.934756689084643e+00, 9.306847717296774e+00, 1.257588378124236e+00, -8.66831449866181e-01, -2.403793096542358e+00, -8.142662181855396e+00, -7.03284305954404e+00, -8.620158576964132e+00, -6.56330911637267e+00, -6.826694774626072e+00, -7.5741286277771e+00, -1.145074249267719e+01, -7.744724082945208e+00, -1.224240477562171e+00, 1.190901660919129e+01, 9.300542335507242e+00, -3.870052099227183e-01, 1.42834661019131e+00, -5.163760246278275e+00, -5.428017520904072e+00, -2.496356215512625e+00, -3.101679563522339e+00, -5.300656083596438e+00, -3.99281296348533e+00, -3.170102167130467e+00, -4.090405969602103e+00, -1.003894188402827e+00, -7.897293567657471e+00, -3.660446297315764e+00, -2.095855951309204e+00, -1.848816609463347e+00, -4.660125531088029e+00, -5.384303283691914e+00, -8.443378143302354e+00, -8.637538623739642e+00, -4.590130901403991e+00, -7.498620510101318e+00, -7.80690637589643e+00, -4.553947572523395e+00, -9.62034206390136e+00, -8.394096889711575e+00, -7.587001648038449e+00, -5.487992577553662e+00, 1.307985157768709e+00, -3.161419034004211e-01, -9.057714716535706e+00, -4.717174053192139e+00, -5.808408833297531e+00, -8.615583438876792e+00, -3.784084272387253e+00, -6.406318499255834e+00, -7.065284328420486e+00, -5.785582919125014e+00, -8.50325435638333e+00, -5.774165749549866e+00, -2.937648601218274e+00, 5.666515376667589e-01, -4.288859729767802e+00, 6.339706749054017e-01, -3.470286607741905e+00, -2.424193015023151e+00, 4.289735565186106e+00, -3.786609420749112e+00, 4.347527694702769e+00, 6.664345788957993e+00, 8.173350905742129e+00, 3.231253575886609e+00, 6.841063737860907e-01, -1.051060973741345e-01, -1.627477180960019e+00, 1.26705109137182e-02, -2.517552673816681e-01, -3.41171496134129e+00, -3.953847999327527e+00, 3.359679511911466e+00, -4.614893843330751e+00, -2.991446270701297e+00, -2.711288890898294e+00, -3.297631750069652e+00, 1.584623008966446e-01] +a8_term.y=[-0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00] diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos index eb0fd49984..93621d8954 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mos @@ -1,9 +1,9 @@ removePlots(); -simulateModel("IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical.PVT_UI_Electrical_DayType1", tolerance=1e-6, startTime = 18872521.2, stopTime = 18909241.2, method = "Cvode", resultFile = "PVT_UI_Electrical_DayType1"); +simulateModel("IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical.PVT_UI_Electrical_DayType1", tolerance=1e-6, startTime = 18872521.2, stopTime = 18908900.2, method = "Cvode", resultFile = "PVT_UI_Electrical_DayType1"); createPlot(id = 11, position = {0, 0, 1000, 500}, y = {"meaPel.y", "simPel.y"}, - range = {18872521.2, 18909241.2, 0, 300}, + range = {18872521.2, 18908900.2, 0, 300}, autoscale = true, autoerase = true, autoreplot = true, diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mos index 2fa3b34ef9..0c22f2d3b8 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mos @@ -1,9 +1,9 @@ removePlots(); -simulateModel("IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal.PVT_UI_Thermal_DayType1", tolerance=1e-6, startTime = 8872521.2, stopTime = 18909241.2, method = "Cvode", resultFile = "PVT_UI_Thermal_DayType1"); +simulateModel("IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Thermal.PVT_UI_Thermal_DayType1", tolerance=1e-6, startTime = 8872521.2, stopTime = 18908900.2, method = "Cvode", resultFile = "PVT_UI_Thermal_DayType1"); createPlot(id = 11, position = {0, 0, 1000, 500}, y = {"meaQ.y", "simQ.y"}, - range = {18872521.2, 18909241.2, 0, 800}, + range = {18872521.2, 18908900.2, 0, 800}, autoscale = true, autoerase = true, autoreplot = true, @@ -17,7 +17,7 @@ createPlot(id = 11, colors = {{0,0,255}, {255,0,0}}); createPlot(id = 11, position = {0, 0, 1000, 500}, - y = {"c1_c2_term.y","c3_term.y","c4_term.y","c6_term.y"}, + y = {"a1_a2_term.y","a3_term.y","a4_term.y","a6_term.y", "a7_term.y", "a8_term.y"}, range = {18872521.2, 18909241.2, -150, 150}, autoscale = true, autoerase = true, diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos index 3e6f81dca6..6350520629 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType2.mos @@ -17,7 +17,7 @@ createPlot(id = 11, colors = {{0,0,255}, {255,0,0}}); createPlot(id = 11, position = {0, 0, 1000, 500}, - y = {"c1_c2_term.y","c3_term.y","c4_term.y","c6_term.y"}, + y = {"a1_a2_term.y","a3_term.y","a4_term.y","a6_term.y", "a7_term.y", "a8_term.y"}, range = {17228280, 17270040, -150, 150}, autoscale = true, autoerase = true, diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos index 4287ecb1aa..feeac9deec 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType3.mos @@ -17,7 +17,7 @@ createPlot(id = 11, colors = {{0,0,255}, {255,0,0}}); createPlot(id = 11, position = {0, 0, 1000, 500}, - y = {"c1_c2_term.y","c3_term.y","c4_term.y","c6_term.y"}, + y = {"a1_a2_term.y","a3_term.y","a4_term.y","a6_term.y", "a7_term.y", "a8_term.y"}, range = {17747040, 17788560, 0, -150, 150}, autoscale = true, autoerase = true, diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos index 7a5cb93e14..ffa6875caf 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType4.mos @@ -17,7 +17,7 @@ createPlot(id = 11, colors = {{0,0,255}, {255,0,0}}); createPlot(id = 11, position = {0, 0, 1000, 500}, - y = {"c1_c2_term.y","c3_term.y","c4_term.y","c6_term.y"}, + y = {"a1_a2_term.y","a3_term.y","a4_term.y","a6_term.y", "a7_term.y", "a8_term.y"}, range = {17837040, 17872560, 0, -150, 150}, autoscale = true, autoerase = true, diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos index 59d994a401..1b2fa814a4 100644 --- a/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos +++ b/IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mos @@ -17,7 +17,7 @@ createPlot(id = 11, colors = {{0,0,255}, {255,0,0}}); createPlot(id = 11, position = {0, 0, 1000, 500}, - y = {"c1_c2_term.y","c3_term.y","c4_term.y","c6_term.y"}, + y = {"a1_a2_term.y","a3_term.y","a4_term.y","a6_term.y", "a7_term.y", "a8_term.y"}, range = {16502400, 17107195, -150, 150}, autoscale = true, autoerase = true, From a8d197e5b004edc25dc49a3d9f513e34a27d940f Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:19:52 +0200 Subject: [PATCH 73/86] refactor: remove obsolete parameter --- .../PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo | 1 - 1 file changed, 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo index 95c212d9b3..ab8143c6a0 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/LongWaveRadiation.mo @@ -4,7 +4,6 @@ model LongWaveRadiation // Parameters parameter Modelica.Units.SI.Angle til "Surface tilt (0 for horizontally mounted collector)"; - constant Real pi = Modelica.Constants.pi "Pi constant"; constant Modelica.Units.SI.DimensionlessRatio epsGro = 0.95 "ground emissivity [-]"; // Constants for dew point calculation using Buck's equation [Buck, 1981] constant Real aBuck = 243.5 "Buck constant for dew point [°C]"; From 86141f9a523f45b8fa35c2161ff790b67575a2dd Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:20:54 +0200 Subject: [PATCH 74/86] refactor: remove obsolete whitespace --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 09595e25e7..eb4931701f 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -61,7 +61,7 @@ equation TCel[i] = Tflu[i] + qth[i] / UAbsFluid; TDif[i] = TCel[i] - TpvtRef; Pel_int[i] = (A_c/nSeg) * (P_nominal/A) * (HGloTil/HGloHorNom) * - (1 + beta * TDif[i]) * (1 - eleLosFac); + (1 + beta * TDif[i]) * (1 - eleLosFac); end for; Pel = sum(Pel_int); From 08581c21cf80842e2e24c80e03731de326dd9519 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:21:33 +0200 Subject: [PATCH 75/86] docs: update documentation --- IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo | 4 ---- .../PVTCollectors/Validation/BaseClasses/ElectricalPV.mo | 8 ++++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index eb4931701f..e2bc4f1faa 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -206,9 +206,6 @@ revisions=" March 11, 2026, by Lone Meertens:
                                                                                                    Revised the internal thermal–electrical coupling by introducing a new formulation for the heat-transfer coefficient between the fluid and the PV cells. -The approach was updated to assume that the electrical power output is independent -of ambient temperature and therefore does not contribute to the linear thermal -loss slope. Details of the derivation can be found in Meertens et al., 2026. This is for #1473.
                                                                                                  • @@ -218,5 +215,4 @@ This is for #1436
                                                                                                  ")); - end ElectricalPVT; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo index f5fef89435..899768575a 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/ElectricalPV.mo @@ -155,15 +155,15 @@ equation

                                                                                                  This model is an adapted PV-oriented electrical submodel based on the PVOrientedDCPower model from the MoPED library -(Verleyen et al., 2022). It is included for verification only. +(Verleyen et al., 2022). It is included for verification purposes.

                                                                                                  -Purpose / verification note: +Purpose / verification note: This submodel is used to demonstrate the bias introduced when applying PV-only cell‑temperature equations to PVT collectors. Because unglazed PVT collectors actively extract heat, their cell temperatures are typically -lower than those predicted by PV-based formulations, which leads PV models -to overpredict Tcell and underpredict electrical output. +lower than those predicted by PV-based formulations, which results in overpredicting +the PV cell temperature and underpedicting the electrical ouput of the PVT collector.

                                                                                                  References

                                                                                                    From cb82d5813b8dee4ae4f665eeba1d1a7935e2be4c Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:23:10 +0200 Subject: [PATCH 76/86] refactor: remove absolete white space --- .../BaseClasses/PartialPVTCollectorValidation.mo | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo index 26459abc5b..493c530453 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/BaseClasses/PartialPVTCollectorValidation.mo @@ -1,27 +1,21 @@ within IDEAS.Fluid.PVTCollectors.Validation.BaseClasses; partial model PartialPVTCollectorValidation - "Common base for UI and UN PVT collector validation models" + "Base model for UI and UN PVT collector validation models" extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector( redeclare IDEAS.Fluid.PVTCollectors.Data.Generic per); - parameter Modelica.Units.SI.Efficiency eleLosFac(min=0, max=1) = 0.07 "Loss factor of the PV panel(s)" annotation(Dialog(group="Electrical parameters")); - parameter IDEAS.Fluid.PVTCollectors.Types.CollectorType collectorType = per.colTyp "Collector type used to select a default tauAlpEff"; - - parameter Real tauAlpEff(min=0, max=1) = + parameter Real tauAlpEff(min=0, max=1)= if collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84 "Effective transmittance-absorptance product"; - Modelica.Units.SI.HeatFlux qThSeg[nSeg] "Thermal power per segment"; - Modelica.Blocks.Interfaces.RealOutput Pel "Total electrical power output [W]"; - Modelica.Blocks.Interfaces.RealOutput Qth "Total thermal power output [W]"; annotation ( From f1dcab8963a7d381d9ee240b0aea5a77417dddb7 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:25:51 +0200 Subject: [PATCH 77/86] docs: update documentation reference section --- .../Validation/PVT_UI/Electrical/package.mo | 11 ----------- .../Validation/PVT_UI/Thermal/package.mo | 11 ----------- 2 files changed, 22 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo index bf0134ecad..28c18d2484 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/package.mo @@ -8,17 +8,6 @@ This subpackage contains the electrical validation models for the PVT_UI collector.

                                                                                                    -

                                                                                                    References

                                                                                                    -
                                                                                                      -
                                                                                                    • -Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source -Photovoltaic‑Thermal Collector Modelica Model that Only Needs -Datasheet Parameters. Submitted to -Mathematical and Computer Modelling of Dynamical Systems, -Special Issue on Modelica, FMI, and Open Standards. -
                                                                                                    • -
                                                                                                    ", revisions="
                                                                                                      diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo index 0000ded4ea..12f39550fa 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/package.mo @@ -8,17 +8,6 @@ This subpackage contains the thermal validation models for the PVT_UI collector.

                                                                                                      -

                                                                                                      References

                                                                                                      -
                                                                                                        -
                                                                                                      • -Meertens, L.; Jansen, J.; Helsen, L. (2026). -Development and Experimental Validation of an Open-Source -Photovoltaic‑Thermal Collector Modelica Model that Only Needs -Datasheet Parameters. Submitted to -Mathematical and Computer Modelling of Dynamical Systems, -Special Issue on Modelica, FMI, and Open Standards. -
                                                                                                      • -
                                                                                                      ", revisions="
                                                                                                        From 10c78af56fcb4f94eaeb06d69423c73b6e7d60aa Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:28:30 +0200 Subject: [PATCH 78/86] refactor: update paths to full path --- .../Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 070de122a7..4d37e424d8 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -86,13 +86,13 @@ model PVT_UI_Thermal_DayType1 nPorts=1) "Inlet for water flow, at a prescribed flow rate and temperature" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); - Sources.Boundary_pT sou1( + IDEAS.Fluid.Sources.Boundary_pT sou1( redeclare package Medium = Medium, use_p_in=false, p = 101325, nPorts=1) "Outlet for water flow" annotation (Placement(transformation(extent={{62,-36},{42,-16}}))); - Sources.MassFlowSource_T bou1( + IDEAS.Fluid.Sources.MassFlowSource_T bou1( redeclare package Medium = Medium, use_m_flow_in=true, m_flow=0.03, From 4474fd98ce3d3ec10a85625a82c33f3a1505a552 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:30:16 +0200 Subject: [PATCH 79/86] docs: update documentation --- IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo index 9447aa12aa..b5dc741bd6 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/package.mo @@ -52,7 +52,7 @@ both thermal and electrical outputs under a range of operating conditions. While electrical outputs are accurate and consistent across all day types, limitations in thermal output are observed under high wind speeds and rapid irradiance changes, primarily due to datasheet parameter constraints. This is particularly -evident in Day Type 4, where a large temperature difference between the fluid +observed in Day Type 4, where a large temperature difference between the fluid and ambient air amplifies these limitations. The wind speed over the collector plane during most of the test periods is generated using an artificial blower, producing wind speeds around 3.5 m/s. This lies near the upper From 7180b079ee5622ed36c93b85fbdeb340c4fd2e06 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:31:56 +0200 Subject: [PATCH 80/86] docs: update docs --- .../PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo index 9f644c9f28..435c953bb4 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/PVTCollectorValidation.mo @@ -215,7 +215,7 @@ wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                                                                        -This model is designed for (unglazed) PVT collectors and discretizes the flow +This model is designed for PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. Because direct measurements of long-wave sky From feaa0ea97f77dbebc805d5cd532394487830c6ea Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:34:48 +0200 Subject: [PATCH 81/86] docs: update docs --- .../PVT_UN/PVTCollectorValidation.mo | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 6ec427a6cb..56b309c400 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -148,15 +148,23 @@ IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.ISO9806SolarGainHGloTil

                                                                                                      Implementation Notes

                                                                                                      -

                                                                                                      This validation model exclusively relies on measurement data provided by the CombiTimeTable meaDat. However, because it extends -IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector -and to limit the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 remains instantiated -and connected to the inherited weaBus. The reader is retained only to satisfy the parent class connector and is not used -during simulation: all weather inputs (irradiance, ambient temperature, wind speed, etc.) are taken from meaDat, so the reader does not affect the model results.

                                                                                                      -

                                                                                                      +

                                                                                                      +This validation model exclusively relies on measurement data provided by the +CombiTimeTable meaDat. However, because it extends + +IDEAS.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector and to limit +the number of extra components, the weather reader IDEAS.BoundaryConditions.WeatherData.ReaderTMY3 +remains instantiated and connected to the inherited weaBus. The +reader is retained only to satisfy the parent class connector and is not +used during simulation: all weather inputs (irradiance, ambient temperature, +wind speed, etc.) are taken from meaDat, so the reader does not affect +the model results. +

                                                                                                      -This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. -It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time. +This model is designed for (unglazed) PVT collectors and discretizes the flow path +into nSeg segments to capture temperature gradients. It is compatible +with dynamic simulations in which irradiance, ambient and fluid temperatures, +and wind speed vary over time.

                                                                                                      References

                                                                                                      From 3750b4c791c2a7beffb70d3ea5989ed01410deac Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:35:50 +0200 Subject: [PATCH 82/86] docs: udpate docs --- .../PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo index 56b309c400..674448eef1 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVTCollectorValidation.mo @@ -190,7 +190,7 @@ revisions="
                                                                                                    • March 11, 2026, by Lone Meertens:
                                                                                                      Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017 and added -conversion support.This is for #1473. +conversion support. This is for #1473.
                                                                                                    • July 7, 2025, by Lone Meertens:
                                                                                                      From bf8b257256d278a14b9080ad1735ca7dbac3b966 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:38:35 +0200 Subject: [PATCH 83/86] docs: add description and revision history analog to thermal model --- .../Electrical/PVT_UI_Electrical_DayType2.mo | 24 ++++++++++++++++++- .../Electrical/PVT_UI_Electrical_DayType3.mo | 24 ++++++++++++++++++- .../Electrical/PVT_UI_Electrical_DayType4.mo | 24 ++++++++++++++++++- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo index 00ee300cee..a8da431a58 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mo @@ -2,7 +2,29 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType2 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ2", T_start=24.79173678 + 273.15); - annotation ( + annotation (Documentation(info=" +

                                                                                                      +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                      +", revisions= +" +
                                                                                                        +
                                                                                                      • +March 11, 2026, by Lone Meertens:
                                                                                                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                      • +
                                                                                                      • +July 7, 2025, by Lone Meertens:
                                                                                                        +First implementation PVT model. +This is for #1436. +
                                                                                                      • +
                                                                                                      +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType2.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo index 8c8099f97a..d16a9ee354 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mo @@ -2,7 +2,29 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType3 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ3", T_start=36.70783953 + 273.15); - annotation ( + annotation (Documentation(info=" +

                                                                                                      +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                      +", revisions= +" +
                                                                                                        +
                                                                                                      • +March 11, 2026, by Lone Meertens:
                                                                                                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                      • +
                                                                                                      • +July 7, 2025, by Lone Meertens:
                                                                                                        +First implementation PVT model. +This is for #1436. +
                                                                                                      • +
                                                                                                      +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType3.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo index 7fc2ab8bcd..0485cef91f 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mo @@ -2,7 +2,29 @@ within IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.Electrical; model PVT_UI_Electrical_DayType4 "Validation model for an unglazed rear-insulated PVT Collector" extends PVT_UI_Electrical_DayType1(pvtTyp="Typ4", T_start=48.60870229 + 273.15); - annotation ( + annotation (Documentation(info=" +

                                                                                                      +See the documentation of + +IDEAS.Fluid.PVTCollectors.Validation.PVT_UI + +for details on the validation examples and usage. +

                                                                                                      +", revisions= +" +
                                                                                                        +
                                                                                                      • +March 11, 2026, by Lone Meertens:
                                                                                                        +Updated thermal formulation from ISO 9806:2013 to ISO 9806:2017. +This is for #1473. +
                                                                                                      • +
                                                                                                      • +July 7, 2025, by Lone Meertens:
                                                                                                        +First implementation PVT model. +This is for #1436. +
                                                                                                      • +
                                                                                                      +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType4.mos" "Simulate and plot"), experiment( From 99b37885b9fcd75bf8fdbac41e264de1be616d81 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 14:50:56 +0200 Subject: [PATCH 84/86] refactor: make PVT collector itself replaceable --- .../Electrical/PVT_UI_Electrical_DayType1.mo | 6 ++---- .../Validation/PVT_UN/PVT_UN_Electrical.mo | 20 +++++++++++++------ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 0ba3ae7466..c636e92062 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -7,9 +7,7 @@ model PVT_UI_Electrical_DayType1 replaceable record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation constrainedby IDEAS.Fluid.PVTCollectors.Data.Generic "Collector parameter record"; - replaceable model PVTCol = - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation - constrainedby IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation; + parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09 "Electrical system loss factor of the PV module"; @@ -32,7 +30,7 @@ model PVT_UI_Electrical_DayType1 fileName=Modelica.Utilities.Files.loadResource(meaFile), columns=1:25) annotation (Placement(transformation(extent={{-92,4},{-72,24}}))); - PVTCol pvtCol( + replaceable IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index f4c402d800..962dc24e7d 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -7,13 +7,21 @@ model PVT_UN_Electrical property_T=293.15, X_a=0.43), redeclare record PVTData = IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, - redeclare model PVTCol = - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation, + redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( + redeclare package Medium = + IDEAS.Media.Antifreeze.PropyleneGlycolWater(property_T=293.15, X_a=0.43), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=17.086651 + 273.15, + show_T=true, + azi=0, + til=0.34906585039887, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTCol, + eleLosFac=0.07), datPVTCol = PVTData(), - T_start = 17.086651 + 273.15, - eleLosFac = 0.07, - til = 0.34906585039887, - azi = 0, idxTFlu = 2, idxMFlow = 3, idxGtil = 4, From b8ef68213f72b19e906f83b14cd1a9c5da69f101 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 15:10:06 +0200 Subject: [PATCH 85/86] refactor: make data record replaceable --- .../PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo | 8 +++----- .../PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo | 4 +--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index c636e92062..1a8bfa4ef6 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -4,9 +4,8 @@ model PVT_UI_Electrical_DayType1 extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium model"; - replaceable record PVTData = - IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation - constrainedby IDEAS.Fluid.PVTCollectors.Data.Generic "Collector parameter record"; + replaceable parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol "Collector parameter record" + annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; @@ -22,8 +21,7 @@ model PVT_UI_Electrical_DayType1 parameter Integer idxTAmb = 12 "Column index for ambient temperature"; parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; - parameter PVTData datPVTCol - annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); + inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, tableName="data", diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo index 962dc24e7d..5695284499 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Electrical.mo @@ -5,8 +5,7 @@ model PVT_UN_Electrical redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( property_T=293.15, X_a=0.43), - redeclare record PVTData = - IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, + redeclare parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol, redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater(property_T=293.15, X_a=0.43), @@ -21,7 +20,6 @@ model PVT_UN_Electrical nPanels=1, per=datPVTCol, eleLosFac=0.07), - datPVTCol = PVTData(), idxTFlu = 2, idxMFlow = 3, idxGtil = 4, From 9557e7b2c765a59c17662c620449fcef3db0c785 Mon Sep 17 00:00:00 2001 From: LoneMeertens Date: Wed, 22 Apr 2026 15:22:45 +0200 Subject: [PATCH 86/86] refactor: make data record and pvt model replaceable --- .../Electrical/PVT_UI_Electrical_DayType1.mo | 1 - .../PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo | 19 ++++----- .../Validation/PVT_UN/PVT_UN_Thermal.mo | 40 ++++++++++++++----- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo index 1a8bfa4ef6..f71b8e82a2 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Electrical/PVT_UI_Electrical_DayType1.mo @@ -6,7 +6,6 @@ model PVT_UI_Electrical_DayType1 replaceable package Medium = IDEAS.Media.Water "Medium model"; replaceable parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol "Collector parameter record" annotation (Placement(transformation(extent={{74,-26},{94,-6}}))); - parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09 "Electrical system loss factor of the PV module"; diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo index 4d37e424d8..4f66a3eb82 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UI/Thermal/PVT_UI_Thermal_DayType1.mo @@ -4,12 +4,11 @@ model PVT_UI_Thermal_DayType1 extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium model"; - replaceable record PVTData = - IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation - constrainedby IDEAS.Fluid.PVTCollectors.Data.Generic "Collector parameter record"; - replaceable model PVTCol = - IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation - constrainedby IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.PartialPVTCollectorValidation; + replaceable parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation datPVTCol "Collector parameter record" + annotation (Placement(transformation(extent={{72,-6},{92,14}}))); + replaceable parameter IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.BaseClasses.UI_Validation datPVTColVal "Collector parameter record" + annotation (Placement(transformation(extent={{72,-32},{92,-12}}))); + parameter String pvtTyp = "Typ1" "Type identifier for selecting the UI measurement dataset"; parameter Modelica.Units.SI.Temperature T_start = 30.65195319 + 273.15 "Initial temperature (from measurement data)"; parameter Real eleLosFac = 0.09 "Electrical system loss factor of the PV module"; @@ -24,10 +23,6 @@ model PVT_UI_Thermal_DayType1 parameter Integer idxTAmb = 12 "Column index for ambient temperature"; parameter Integer idxMeaPel = 21 "Column index for measured electrical power"; parameter String meaFile = "modelica://IDEAS/Resources/Data/Fluid/PVTCollectors/Validation/PVT_UI/PVT_UI_" + pvtTyp + "_measurements.txt" "Full path to measurement file"; - parameter PVTData datPVTCol - annotation (Placement(transformation(extent={{72,-6},{92,14}}))); - parameter PVTData datPVTColVal - annotation (Placement(transformation(extent={{72,-32},{92,-12}}))); inner Modelica.Blocks.Sources.CombiTimeTable meaDat( tableOnFile=true, @@ -35,7 +30,7 @@ model PVT_UI_Thermal_DayType1 fileName=Modelica.Utilities.Files.loadResource(meaFile), columns=1:25) annotation (Placement(transformation(extent={{-92,20},{-72,40}}))); - PVTCol pvtCol( + replaceable IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtCol( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, @@ -50,7 +45,7 @@ model PVT_UI_Thermal_DayType1 eleLosFac=eleLosFac) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - PVTCol pvtColVal( + replaceable IDEAS.Fluid.PVTCollectors.Validation.PVT_UI.PVTCollectorValidation pvtColVal( redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, diff --git a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo index 868a13ed39..e2e31069b9 100644 --- a/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo +++ b/IDEAS/Fluid/PVTCollectors/Validation/PVT_UN/PVT_UN_Thermal.mo @@ -5,16 +5,36 @@ model PVT_UN_Thermal redeclare package Medium = IDEAS.Media.Antifreeze.PropyleneGlycolWater( property_T=293.15, X_a=0.43), - redeclare record PVTData = - IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation, - redeclare model PVTCol = - IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation, - datPVTCol = PVTData(), - datPVTColVal = PVTData(), - T_start = 17.086651 + 273.15, - eleLosFac = 0.07, - til = 0.34906585039887, - azi = 0, + redeclare parameter IDEAS.Fluid.PVTCollectors.Data.Uncovered.UN_Validation datPVTCol, + redeclare parameter IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.BaseClasses.UN_Validation datPVTColVal, + redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtCol( + redeclare package Medium = + IDEAS.Media.Antifreeze.PropyleneGlycolWater(property_T=293.15, X_a=0.43), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=17.086651 + 273.15, + show_T=true, + azi=0, + til=0.34906585039887, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTCol, + eleLosFac=0.07), + redeclare IDEAS.Fluid.PVTCollectors.Validation.PVT_UN.PVTCollectorValidation pvtColVal( + redeclare package Medium = + IDEAS.Media.Antifreeze.PropyleneGlycolWater(property_T=293.15, X_a=0.43), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + massDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=17.086651 + 273.15, + show_T=true, + azi=0, + til=0.34906585039887, + rho=0.2, + nColType=IDEAS.Fluid.SolarCollectors.Types.NumberSelection.Number, + nPanels=1, + per=datPVTCol, + eleLosFac=0.07), idxTFlu = 2, idxMFlow = 3, idxGtil = 4,