From d6671a2f6da0fc851b621ca255a6d02ea82f1d30 Mon Sep 17 00:00:00 2001 From: Hendrik van der Stok Date: Tue, 21 Apr 2026 15:35:45 +0200 Subject: [PATCH 1/4] add parameter resetTimeKPIs --- .../PartialBuildingEnergySystem.mo | 22 ++++++++---- .../BaseClasses/PartialFluidSubsystem.mo | 3 ++ .../Control/BaseClasses/PartialControl.mo | 3 ++ .../Building/BaseClasses/PartialDemand.mo | 3 ++ .../Demand/Building/BuildingsRoomCase600FF.mo | 6 ++-- .../Demand/Building/TEASERThermalZone.mo | 11 +++--- .../DHW/BaseClasses/PartialDHWWithBasics.mo | 3 +- .../BaseClasses/PartialElectricalSystem.mo | 11 ++++-- .../Control/BaseClasses/PartialControl.mo | 3 ++ .../BaseClasses/PartialDistribution.mo | 11 +++--- .../BaseClasses/PartialGeneration.mo | 3 ++ .../Electrical/Generation/PVSystemMultiSub.mo | 3 +- .../Transfer/BaseClasses/PartialTransfer.mo | 5 ++- .../Electrical/Transfer/IdealHeater.mo | 3 +- .../Electrical/Transfer/IdealHeaterFraRad.mo | 3 +- .../BaseClasses/PartialHydraulicSystem.mo | 10 ++++-- .../Control/BaseClasses/PartialControl.mo | 3 ++ .../BaseClasses/PartialTwoStorageParallel.mo | 12 ++++--- .../PartialTwoStorageParallelWithHeaters.mo | 9 +++-- .../Hydraulical/Distribution/CombiStorage.mo | 5 +-- .../Distribution/SimpleTwoStorageParallel.mo | 3 +- .../Distribution/TwoStoragesBoilerWithDHW.mo | 6 ++-- .../Generation/BaseClasses/PartialHeatPump.mo | 12 +++---- .../PartialHeatPumpAndGasBoiler.mo | 10 +++--- .../DetailedSolarThermalWithHeatPump.mo | 8 +++-- .../Generation/ElectricalHeater.mo | 4 ++- .../Hydraulical/Generation/GasBoiler.mo | 4 ++- .../Generation/HeatPumpAndElectricHeater.mo | 7 ++-- .../SimpleSolarThermalWithHeatPump.mo | 3 +- .../Transfer/IdealValveRadiator.mo | 1 + .../Hydraulical/Transfer/UFHTransferSystem.mo | 3 +- .../BaseClasses/PartialVentilationSystem.mo | 7 ++-- .../Control/BaseClasses/PartialControl.mo | 3 ++ .../KPIs/BaseClasses/SplitGainAndLoss.mo | 9 +++-- BESMod/Utilities/KPIs/ComfortCalculator.mo | 8 +++++ BESMod/Utilities/KPIs/CountTimeDiscomfort.mo | 8 +++++ BESMod/Utilities/KPIs/DeviceKPICalculator.mo | 9 +++++ BESMod/Utilities/KPIs/EnergyKPICalculator.mo | 8 +++++ .../Utilities/KPIs/RoomControlCalculator.mo | 8 +++++ BESMod/Utilities/KPIs/ZoneEnergyBalance.mo | 35 +++++++++++++------ BESMod/Utilities/KPIs/ZoneTemperature.mo | 10 ++++-- 41 files changed, 223 insertions(+), 75 deletions(-) diff --git a/BESMod/Systems/BaseClasses/PartialBuildingEnergySystem.mo b/BESMod/Systems/BaseClasses/PartialBuildingEnergySystem.mo index ec3a7166..09a46899 100644 --- a/BESMod/Systems/BaseClasses/PartialBuildingEnergySystem.mo +++ b/BESMod/Systems/BaseClasses/PartialBuildingEnergySystem.mo @@ -4,6 +4,9 @@ partial model PartialBuildingEnergySystem "Partial BES" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); // Replaceable packages replaceable package MediumHyd = IBPSA.Media.Water constrainedby @@ -45,7 +48,8 @@ partial model PartialBuildingEnergySystem "Partial BES" final TSetZone_nominal=systemParameters.TSetZone_nominal, final use_hydraulic=systemParameters.use_hydraulic, final use_ventilation=systemParameters.use_ventilation, - final use_openModelica=use_openModelica) annotation ( + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation ( choicesAllMatching=true, Placement(transformation(extent={{2,2},{76,78}}))); replaceable BESMod.Systems.UserProfiles.BaseClasses.PartialUserProfiles userProfiles constrainedby UserProfiles.BaseClasses.PartialUserProfiles( @@ -61,8 +65,8 @@ partial model PartialBuildingEnergySystem "Partial BES" final TDHW_nominal=systemParameters.TSetDHW, final dpDHW_nominal=hydraulic.distribution.dpDHW_nominal, final TDHWCold_nominal=systemParameters.TDHWWaterCold, - final subsystemDisabled=not systemParameters.use_dhw) - annotation (choicesAllMatching=true, Placement( + final subsystemDisabled=not systemParameters.use_dhw, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement( transformation(extent={{2,-118},{78,-42}}))); replaceable Electrical.BaseClasses.PartialElectricalSystem electrical constrainedby Electrical.BaseClasses.PartialElectricalSystem( @@ -82,7 +86,8 @@ partial model PartialBuildingEnergySystem "Partial BES" final ABui=building.ABui, final ARoo=building.ARoo, final hBui=building.hBui), - final use_openModelica=use_openModelica) annotation (Placement( + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (Placement( transformation(extent={{-198,40},{-42,136}})), choicesAllMatching=true); replaceable BESMod.Systems.Hydraulical.BaseClasses.PartialHydraulicSystem hydraulic if systemParameters.use_hydraulic constrainedby @@ -114,7 +119,8 @@ partial model PartialBuildingEnergySystem "Partial BES" final TDHWCold_nominal=DHW.TDHWCold_nominal, final QDHW_flow_nominal=DHW.QDHW_flow_nominal, final VDHWDayAt60=DHW.VDHWDayAt60), - final use_openModelica=use_openModelica) + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{-198, -98},{-42,-2}}))); @@ -138,7 +144,8 @@ partial model PartialBuildingEnergySystem "Partial BES" final ABui=building.ABui, final ARoo=building.ARoo, final hBui=building.hBui), - final use_openModelica=use_openModelica) annotation (choicesAllMatching=true, + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{122,2},{196,78}}))); // Outputs @@ -151,7 +158,8 @@ partial model PartialBuildingEnergySystem "Partial BES" replaceable Control.BaseClasses.PartialControl control constrainedby Control.BaseClasses.PartialControl( - final use_openModelica=use_openModelica) annotation (Placement(transformation( + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (Placement(transformation( extent={{2,124},{78,198}})), choicesAllMatching=true); Electrical.Interfaces.ExternalElectricalPin electricalGrid annotation ( diff --git a/BESMod/Systems/BaseClasses/PartialFluidSubsystem.mo b/BESMod/Systems/BaseClasses/PartialFluidSubsystem.mo index 1747ce10..c98aa684 100644 --- a/BESMod/Systems/BaseClasses/PartialFluidSubsystem.mo +++ b/BESMod/Systems/BaseClasses/PartialFluidSubsystem.mo @@ -5,6 +5,9 @@ model PartialFluidSubsystem parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Boolean allowFlowReversal=true "= false to simplify equations, assuming, but not enforcing, no flow reversal" diff --git a/BESMod/Systems/Control/BaseClasses/PartialControl.mo b/BESMod/Systems/Control/BaseClasses/PartialControl.mo index 22dd5687..15e873d1 100644 --- a/BESMod/Systems/Control/BaseClasses/PartialControl.mo +++ b/BESMod/Systems/Control/BaseClasses/PartialControl.mo @@ -4,6 +4,9 @@ partial model PartialControl "Model for a partial HEMS control" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); BESMod.Systems.Hydraulical.Interfaces.SystemControlBus sigBusHyd annotation (Placement( transformation(extent={{-94,-114},{-64,-88}}), iconTransformation( extent={{-94,-114},{-64,-88}}))); diff --git a/BESMod/Systems/Demand/Building/BaseClasses/PartialDemand.mo b/BESMod/Systems/Demand/Building/BaseClasses/PartialDemand.mo index 337370fd..a2d94099 100644 --- a/BESMod/Systems/Demand/Building/BaseClasses/PartialDemand.mo +++ b/BESMod/Systems/Demand/Building/BaseClasses/PartialDemand.mo @@ -4,6 +4,9 @@ partial model PartialDemand "Partial demand model for HPS" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer nZones(min=1) "Number of zones /rooms"; parameter Modelica.Units.SI.Temperature TSetZone_nominal[nZones]=fill(293.15, nZones) "Nominal room set temperature" diff --git a/BESMod/Systems/Demand/Building/BuildingsRoomCase600FF.mo b/BESMod/Systems/Demand/Building/BuildingsRoomCase600FF.mo index de78c9f3..3f935a48 100644 --- a/BESMod/Systems/Demand/Building/BuildingsRoomCase600FF.mo +++ b/BESMod/Systems/Demand/Building/BuildingsRoomCase600FF.mo @@ -207,10 +207,12 @@ model BuildingsRoomCase600FF extent={{-10,-10},{10,10}}, rotation=180, origin={108,-92}))); - BESMod.Utilities.KPIs.ComfortCalculator comfortCalculatorHea[nZones](TComBou= + BESMod.Utilities.KPIs.ComfortCalculator comfortCalculatorHea[nZones]( + final resetTimeKPIs=resetTimeKPIs, TComBou= TSetZone_nominal .- dTComfort, each for_heating=true) annotation (Placement(transformation(extent={{66,0},{80,14}}))); - BESMod.Utilities.KPIs.ComfortCalculator comfortCalculatorCool[nZones](TComBou= + BESMod.Utilities.KPIs.ComfortCalculator comfortCalculatorCool[nZones]( + final resetTimeKPIs=resetTimeKPIs, TComBou= TSetZone_nominal .+ dTComfort, each for_heating=false) annotation (Placement(transformation(extent={{66,-18},{80,-4}}))); Modelica.Blocks.Routing.RealPassThrough reaPasThrTMea[nZones] diff --git a/BESMod/Systems/Demand/Building/TEASERThermalZone.mo b/BESMod/Systems/Demand/Building/TEASERThermalZone.mo index 3997263e..f50b22b0 100644 --- a/BESMod/Systems/Demand/Building/TEASERThermalZone.mo +++ b/BESMod/Systems/Demand/Building/TEASERThermalZone.mo @@ -1,4 +1,4 @@ -within BESMod.Systems.Demand.Building; +within BESMod.Systems.Demand.Building; model TEASERThermalZone "Reduced order building model, coupled with TEASER" extends BaseClasses.PartialDemand( @@ -114,7 +114,8 @@ model TEASERThermalZone origin={30,-120}))); Utilities.KPIs.ZoneEnergyBalance zoneEneBal[nZones](each final with_ventilation=use_ventilation, each final with_floor=zoneParam[1].AFloor - > 0) + > 0, + each final resetTimeKPIs=resetTimeKPIs) if use_verboseEnergyBalance "Zone energy balance" annotation (Placement(transformation(extent={{-60,-200},{-22,-140}}))); Modelica.Blocks.Sources.RealExpression QExtWall_flow[nZones](y=thermalZone.ROM.extWall.Q_flow) @@ -124,11 +125,13 @@ model TEASERThermalZone rotation=0, origin={-90,-110}))); Utilities.KPIs.ZoneTemperature zonTem[nZones](each final dTComfort=dTComfort, - final TSetZone_nominal=TSetZone_nominal) + final TSetZone_nominal=TSetZone_nominal, + each final resetTimeKPIs=resetTimeKPIs) "Zone temperature KPIs for air temperature" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); Utilities.KPIs.ZoneTemperature zonTemOpe[nZones](each final dTComfort= - dTComfort, final TSetZone_nominal=TSetZone_nominal) + dTComfort, final TSetZone_nominal=TSetZone_nominal, + each final resetTimeKPIs=resetTimeKPIs) "Zone temperature KPIs for operative temperature" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); Modelica.Blocks.Sources.RealExpression QRoof_flow[nZones](y=thermalZone.ROM.roof.Q_flow) diff --git a/BESMod/Systems/Demand/DHW/BaseClasses/PartialDHWWithBasics.mo b/BESMod/Systems/Demand/DHW/BaseClasses/PartialDHWWithBasics.mo index e3f36d27..bd512554 100644 --- a/BESMod/Systems/Demand/DHW/BaseClasses/PartialDHWWithBasics.mo +++ b/BESMod/Systems/Demand/DHW/BaseClasses/PartialDHWWithBasics.mo @@ -17,7 +17,8 @@ Modelica.Blocks.Math.UnitConversions.From_degC fromDegC extent={{10,-10},{-10,10}}, rotation=0, origin={30,-10}))); - Utilities.KPIs.EnergyKPICalculator integralKPICalculator(use_inpCon=false, y= + Utilities.KPIs.EnergyKPICalculator integralKPICalculator(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y= -port_b.m_flow*cp*(TIs.y - TDHWCold_nominal)) annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); IBPSA.Fluid.Movers.Preconfigured.FlowControlled_m_flow pump( diff --git a/BESMod/Systems/Electrical/BaseClasses/PartialElectricalSystem.mo b/BESMod/Systems/Electrical/BaseClasses/PartialElectricalSystem.mo index 00d02321..e640c87b 100644 --- a/BESMod/Systems/Electrical/BaseClasses/PartialElectricalSystem.mo +++ b/BESMod/Systems/Electrical/BaseClasses/PartialElectricalSystem.mo @@ -3,6 +3,9 @@ partial model PartialElectricalSystem "Partial model for electrical system" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer nLoadsExtSubSys(min=1) = 4 "Number of external subsystems which result in electrical load / generation"; parameter Boolean use_elecHeating=true "=false to disable electric heating"; replaceable parameter RecordsCollection.ElectricalSystemBaseDataDefinition @@ -13,13 +16,15 @@ partial model PartialElectricalSystem "Partial model for electrical system" constrainedby BESMod.Systems.Electrical.Generation.BaseClasses.PartialGeneration( ARoo=electricalSystemParameters.ARoo, - final use_openModelica=use_openModelica) + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{-148, -102},{-62,36}}))); replaceable Distribution.BaseClasses.PartialDistribution distribution constrainedby Distribution.BaseClasses.PartialDistribution( final nSubSys=nLoadsExtSubSys + 2, - final use_openModelica=use_openModelica) + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{-40, -102},{52,36}}))); @@ -27,6 +32,7 @@ partial model PartialElectricalSystem "Partial model for electrical system" constrainedby Transfer.BaseClasses.PartialTransfer( final nParallelDem=electricalSystemParameters.nZones, final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs, final Q_flow_nominal=electricalSystemParameters.Q_flow_nominal) annotation (choicesAllMatching=true, Placement(transformation(extent={{68,-102}, {144,36}}))); @@ -34,6 +40,7 @@ partial model PartialElectricalSystem "Partial model for electrical system" BESMod.Systems.Electrical.Control.BaseClasses.PartialControl( final nParallelDem=electricalSystemParameters.nZones, final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs, final Q_flow_nominal=electricalSystemParameters.Q_flow_nominal) annotation (choicesAllMatching=true, Placement(transformation(extent={{-146, 56},{142,106}}))); diff --git a/BESMod/Systems/Electrical/Control/BaseClasses/PartialControl.mo b/BESMod/Systems/Electrical/Control/BaseClasses/PartialControl.mo index c1f37918..fe57997c 100644 --- a/BESMod/Systems/Electrical/Control/BaseClasses/PartialControl.mo +++ b/BESMod/Systems/Electrical/Control/BaseClasses/PartialControl.mo @@ -3,6 +3,9 @@ partial model PartialControl "Partial electrical control model" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer nParallelDem(min=1) "Number of parallel demand systems of this system" annotation (Dialog(group= "Design - Top Down: Parameters are given by the parent system")); diff --git a/BESMod/Systems/Electrical/Distribution/BaseClasses/PartialDistribution.mo b/BESMod/Systems/Electrical/Distribution/BaseClasses/PartialDistribution.mo index 2dd35aef..c3246f19 100644 --- a/BESMod/Systems/Electrical/Distribution/BaseClasses/PartialDistribution.mo +++ b/BESMod/Systems/Electrical/Distribution/BaseClasses/PartialDistribution.mo @@ -3,6 +3,9 @@ partial model PartialDistribution parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer nSubSys(min=2) "Number of subsystems with electrical load / generation"; Interfaces.DistributionOutputs OutputDistr if not use_openModelica @@ -16,14 +19,14 @@ partial model PartialDistribution annotation (Placement(transformation(extent={{40,90},{60,110}}))); Interfaces.ExternalElectricalPin externalElectricalPin annotation (Placement(transformation(extent={{40,-108},{60,-88}}))); - Utilities.KPIs.EnergyKPICalculator eneKPILoa(final use_inpCon=true) - "Load on grid" annotation (Placement( + Utilities.KPIs.EnergyKPICalculator eneKPILoa(final use_inpCon=true, final + resetTimeKPIs=resetTimeKPIs) "Load on grid" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-30,-50}))); - Utilities.KPIs.EnergyKPICalculator eneKPIGen(final use_inpCon=true) - "Load on grid" annotation (Placement( + Utilities.KPIs.EnergyKPICalculator eneKPIGen(final use_inpCon=true, final + resetTimeKPIs=resetTimeKPIs) "Load on grid" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, diff --git a/BESMod/Systems/Electrical/Generation/BaseClasses/PartialGeneration.mo b/BESMod/Systems/Electrical/Generation/BaseClasses/PartialGeneration.mo index b47d4f25..9021b69f 100644 --- a/BESMod/Systems/Electrical/Generation/BaseClasses/PartialGeneration.mo +++ b/BESMod/Systems/Electrical/Generation/BaseClasses/PartialGeneration.mo @@ -4,6 +4,9 @@ partial model PartialGeneration parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer numGenUnits(min=1) "Number of generation (e.g. PV module) units" annotation(Dialog(group="Design - Bottom Up: Parameters are defined by the subsystem")); parameter Real f_design[numGenUnits]= diff --git a/BESMod/Systems/Electrical/Generation/PVSystemMultiSub.mo b/BESMod/Systems/Electrical/Generation/PVSystemMultiSub.mo index b7eabba3..23fec5f8 100644 --- a/BESMod/Systems/Electrical/Generation/PVSystemMultiSub.mo +++ b/BESMod/Systems/Electrical/Generation/PVSystemMultiSub.mo @@ -64,7 +64,8 @@ model PVSystemMultiSub rotation=90, origin={50,58}))); - BESMod.Utilities.KPIs.EnergyKPICalculator intKPICalPElePV(use_inpCon=true) + BESMod.Utilities.KPIs.EnergyKPICalculator intKPICalPElePV(use_inpCon=true, final + resetTimeKPIs=resetTimeKPIs) annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); equation for i in 1:numGenUnits loop diff --git a/BESMod/Systems/Electrical/Transfer/BaseClasses/PartialTransfer.mo b/BESMod/Systems/Electrical/Transfer/BaseClasses/PartialTransfer.mo index cfdf460b..6718e30a 100644 --- a/BESMod/Systems/Electrical/Transfer/BaseClasses/PartialTransfer.mo +++ b/BESMod/Systems/Electrical/Transfer/BaseClasses/PartialTransfer.mo @@ -1,8 +1,11 @@ -within BESMod.Systems.Electrical.Transfer.BaseClasses; +within BESMod.Systems.Electrical.Transfer.BaseClasses; partial model PartialTransfer "Partial model for transfer subsystems" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Integer nParallelDem(min=1) "Number of parallel demand systems of this system" annotation (Dialog(group= "Design - Top Down: Parameters are given by the parent system")); diff --git a/BESMod/Systems/Electrical/Transfer/IdealHeater.mo b/BESMod/Systems/Electrical/Transfer/IdealHeater.mo index e6196059..a9d8d907 100644 --- a/BESMod/Systems/Electrical/Transfer/IdealHeater.mo +++ b/BESMod/Systems/Electrical/Transfer/IdealHeater.mo @@ -27,7 +27,8 @@ model IdealHeater "Ideal heater as in reduced order model" each final Q_flow=0) annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); Utilities.KPIs.EnergyKPICalculator heaKPI[nParallelDem](each final use_inpCon= - true) "Heating power KPI" annotation (Placement(transformation( + true, each final resetTimeKPIs=resetTimeKPIs) + "Heating power KPI" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=270, origin={0,-40}))); diff --git a/BESMod/Systems/Electrical/Transfer/IdealHeaterFraRad.mo b/BESMod/Systems/Electrical/Transfer/IdealHeaterFraRad.mo index 925df4eb..a408e808 100644 --- a/BESMod/Systems/Electrical/Transfer/IdealHeaterFraRad.mo +++ b/BESMod/Systems/Electrical/Transfer/IdealHeaterFraRad.mo @@ -27,7 +27,8 @@ model IdealHeaterFraRad true) "Heating active" annotation (Placement(transformation(extent={{-82,-80},{-62,-60}}))); BESMod.Utilities.KPIs.EnergyKPICalculator heaKPI[nParallelDem](each final - use_inpCon=true) "Heating power KPI" annotation (Placement(transformation( + use_inpCon=true, each final resetTimeKPIs=resetTimeKPIs) + "Heating power KPI" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=270, origin={0,-40}))); diff --git a/BESMod/Systems/Hydraulical/BaseClasses/PartialHydraulicSystem.mo b/BESMod/Systems/Hydraulical/BaseClasses/PartialHydraulicSystem.mo index 6892259f..8551cdb0 100644 --- a/BESMod/Systems/Hydraulical/BaseClasses/PartialHydraulicSystem.mo +++ b/BESMod/Systems/Hydraulical/BaseClasses/PartialHydraulicSystem.mo @@ -42,7 +42,8 @@ partial model PartialHydraulicSystem final show_T=show_T, final rho=rho, final cp=cp, - final use_openModelica=use_openModelica) annotation (choicesAllMatching=true, + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{-140,-104},{-24,28}}))); replaceable BESMod.Systems.Hydraulical.Control.BaseClasses.PartialControl control @@ -102,7 +103,8 @@ partial model PartialHydraulicSystem final dpSup_nominal=transfer.dpSup_nominal, final mSup_flow_nominal=transfer.mSup_flow_nominal, final nHeaTra=transfer.nHeaTra), - final use_openModelica=use_openModelica) + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{-132,54}, {154,122}}))); replaceable @@ -148,6 +150,7 @@ partial model PartialHydraulicSystem final tCrit=hydraulicSystemParameters.tCrit, final QCrit=hydraulicSystemParameters.QCrit, final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs, final dpSup_nominal=generation.dp_nominal, final dpSupOld_design=generation.dpOld_design, final dpDem_nominal=transfer.dpSup_nominal, @@ -187,7 +190,8 @@ partial model PartialHydraulicSystem final show_T=show_T, final rho=rho, final cp=cp, - final use_openModelica=use_openModelica) annotation (choicesAllMatching=true, Placement(transformation( + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation( extent={{112,-44},{180,28}}))); IBPSA.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" annotation (Placement(transformation(extent={{-200,56}, diff --git a/BESMod/Systems/Hydraulical/Control/BaseClasses/PartialControl.mo b/BESMod/Systems/Hydraulical/Control/BaseClasses/PartialControl.mo index b0c53ad5..7ac867e8 100644 --- a/BESMod/Systems/Hydraulical/Control/BaseClasses/PartialControl.mo +++ b/BESMod/Systems/Hydraulical/Control/BaseClasses/PartialControl.mo @@ -5,6 +5,9 @@ partial model PartialControl "Partial controller for HPS" parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); BESMod.Systems.Hydraulical.Interfaces.GenerationControlBus sigBusGen diff --git a/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallel.mo b/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallel.mo index a62ec1dc..ffd0a136 100644 --- a/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallel.mo +++ b/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallel.mo @@ -208,9 +208,11 @@ partial model PartialTwoStorageParallel final allowFlowReversal_HC2=allowFlowReversal) "DHW storage" annotation (Placement(transformation(extent={{-50,-70},{-18,-30}}))); - BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalBuf(use_inpCon=false, y=fixTemBuf.port.Q_flow) + BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalBuf(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=fixTemBuf.port.Q_flow) annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalDHW(final use_inpCon=false, y= + BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalDHW(final use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y= fixTemDHW.port.Q_flow) annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); IBPSA.Fluid.Sensors.TemperatureTwoPort senTBuiSup( @@ -228,13 +230,15 @@ partial model PartialTwoStorageParallel rotation=180, origin={76,80}))); - BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalDHWHeaRod(use_inpCon=false, y= + BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalDHWHeaRod(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y= QHRStoDHWPre_flow.Q_flow) if parStoDHW.use_hr annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-50,-170}))); - BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalBufHeaRod(use_inpCon=false, y= + BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICalBufHeaRod(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y= QHRStoBufPre_flow.Q_flow) if parStoBuf.use_hr annotation (Placement(transformation(extent={{-100,-180},{-80,-160}}))); diff --git a/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallelWithHeaters.mo b/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallelWithHeaters.mo index 52eb79d9..6abf8993 100644 --- a/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallelWithHeaters.mo +++ b/BESMod/Systems/Hydraulical/Distribution/BaseClasses/PartialTwoStorageParallelWithHeaters.mo @@ -73,7 +73,8 @@ partial model PartialTwoStorageParallelWithHeaters BESMod.Systems.Hydraulical.Distribution.Types.HeaterType.No annotation (Placement(transformation(extent={{40,54},{60,74}}))); - Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufEleHea(use_inpCon=false, y= + Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufEleHea(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y= hea.Pel) if heaAftBufTyp == BESMod.Systems.Hydraulical.Distribution.Types.HeaterType.ElectricHeater "Electric heater after buffer KPIs" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -107,13 +108,15 @@ partial model PartialTwoStorageParallelWithHeaters "Boiler with external control" annotation (Placement(transformation(extent={{40,110},{60,130}}))); - Utilities.KPIs.EnergyKPICalculator KPIBoi(use_inpCon=false, y=boi.thermalPower) + Utilities.KPIs.EnergyKPICalculator KPIBoi(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.thermalPower) if heaAftBufTyp == BESMod.Systems.Hydraulical.Distribution.Types.HeaterType.Boiler "Boiler heat flow KPI" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=180, origin={50,-150}))); - Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufBoi(use_inpCon=false, y=boi.fuelPower) + Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufBoi(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.fuelPower) if heaAftBufTyp == BESMod.Systems.Hydraulical.Distribution.Types.HeaterType.Boiler "Boiler after buffer KPIs" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/BESMod/Systems/Hydraulical/Distribution/CombiStorage.mo b/BESMod/Systems/Hydraulical/Distribution/CombiStorage.mo index b6b51498..63c08399 100644 --- a/BESMod/Systems/Hydraulical/Distribution/CombiStorage.mo +++ b/BESMod/Systems/Hydraulical/Distribution/CombiStorage.mo @@ -17,7 +17,7 @@ model CombiStorage final nParallelDem=1); replaceable parameter BESMod.Systems.RecordsCollection.Movers.DPVar parPumGen constrainedby - BESMod.Systems.RecordsCollection.Movers.MoverBaseDataDefinition (iconName="Pump Gen", + BESMod.Systems.RecordsCollection.Movers.MoverBaseDataDefinition( iconName="Pump Gen", externalCtrlTyp=BESMod.Systems.Hydraulical.Components.PreconfiguredControlledMovers.Types.ExternalControlType.onOff) "Parameters for pump feeding supply system (generation)" annotation ( choicesAllMatching=true, @@ -110,7 +110,8 @@ model CombiStorage "Temperatures of all layers" annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); - BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICal(use_inpCon=false, y=fixTempBuf.port.Q_flow) + BESMod.Utilities.KPIs.EnergyKPICalculator eneKPICal(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=fixTempBuf.port.Q_flow) "Energy KPI calculator" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); IBPSA.Fluid.Sources.Boundary_pT bouPumSec( diff --git a/BESMod/Systems/Hydraulical/Distribution/SimpleTwoStorageParallel.mo b/BESMod/Systems/Hydraulical/Distribution/SimpleTwoStorageParallel.mo index deac0f36..765c3dde 100644 --- a/BESMod/Systems/Hydraulical/Distribution/SimpleTwoStorageParallel.mo +++ b/BESMod/Systems/Hydraulical/Distribution/SimpleTwoStorageParallel.mo @@ -115,7 +115,8 @@ model SimpleTwoStorageParallel rotation=180, origin={50,-52}))); - Utilities.KPIs.EnergyKPICalculator eneKPICalBuf(use_inpCon=false, y=fixTemBuf.port.Q_flow) + Utilities.KPIs.EnergyKPICalculator eneKPICalBuf(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=fixTemBuf.port.Q_flow) annotation (Placement(transformation(extent={{-40,-170},{-20,-150}}))); Utilities.KPIs.EnergyKPICalculator eneKPICalDHW(use_inpCon=false, y=fixTemDHW.port.Q_flow) annotation (Placement(transformation(extent={{-10,-10},{10,10}}, diff --git a/BESMod/Systems/Hydraulical/Distribution/TwoStoragesBoilerWithDHW.mo b/BESMod/Systems/Hydraulical/Distribution/TwoStoragesBoilerWithDHW.mo index ddb2872e..15f36528 100644 --- a/BESMod/Systems/Hydraulical/Distribution/TwoStoragesBoilerWithDHW.mo +++ b/BESMod/Systems/Hydraulical/Distribution/TwoStoragesBoilerWithDHW.mo @@ -218,12 +218,14 @@ model TwoStoragesBoilerWithDHW rotation=180, origin={112,-4}))); - Utilities.KPIs.EnergyKPICalculator KPIBoi1(use_inpCon=false, y=boi.thermalPower) + Utilities.KPIs.EnergyKPICalculator KPIBoi1(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.thermalPower) "Boiler heat flow KPI" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=180, origin={30,-170}))); - Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufBoi(use_inpCon=false, y=boi.fuelPower) + Utilities.KPIs.EnergyKPICalculator eneKPICalAftBufBoi(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.fuelPower) "Boiler after buffer KPIs" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=180, diff --git a/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPump.mo b/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPump.mo index 094e4950..0edeba85 100644 --- a/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPump.mo +++ b/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPump.mo @@ -214,14 +214,16 @@ partial model PartialHeatPump "Generation with only the heat pump" extent={{-10,-10},{10,10}}, rotation=0, origin={-170,90}))); - Utilities.KPIs.EnergyKPICalculator KPIWel(use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator KPIWel(use_inpCon=true, final + resetTimeKPIs=resetTimeKPIs) annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); Modelica.Blocks.Sources.Constant TSoil(k=TSoilConst) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-170,50}))); - BESMod.Utilities.KPIs.EnergyKPICalculator KPIQHP(use_inpCon=true) + BESMod.Utilities.KPIs.EnergyKPICalculator KPIQHP(use_inpCon=true, final + resetTimeKPIs=resetTimeKPIs) annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); IBPSA.Fluid.Sensors.TemperatureTwoPort senTGenOut( redeclare final package Medium = Medium, @@ -248,6 +250,7 @@ partial model PartialHeatPump "Generation with only the heat pump" rotation=180, origin={130,-82}))); BESMod.Utilities.KPIs.DeviceKPICalculator KPIHeaPum( + final resetTimeKPIs=resetTimeKPIs, use_reaInp=false, calc_singleOnTime=true, calc_totalOnTime=true, @@ -414,7 +417,7 @@ equation extent={{-6,3},{-6,3}}, horizontalAlignment=TextAlignment.Right)); connect(defCtrl.sigBus, sigBus) annotation (Line( - points={{-98.8,12.96},{-98.8,6},{-66,6},{-66,0},{-72,0},{-72,-40}}, + points={{-98.16,20},{-98.16,6},{-66,6},{-66,0},{-72,0},{-72,-40}}, color={255,204,51}, thickness=0.5), Text( string="%second", @@ -449,7 +452,4 @@ equation color={255,204,51}, thickness=0.5), Diagram(coordinateSystem(extent={{-180,-140},{100,100}}))); - - - end PartialHeatPump; diff --git a/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPumpAndGasBoiler.mo b/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPumpAndGasBoiler.mo index d924f573..5f629394 100644 --- a/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPumpAndGasBoiler.mo +++ b/BESMod/Systems/Hydraulical/Generation/BaseClasses/PartialHeatPumpAndGasBoiler.mo @@ -1,7 +1,7 @@ within BESMod.Systems.Hydraulical.Generation.BaseClasses; partial model PartialHeatPumpAndGasBoiler "Partial heat pump and boiler" - extends BESMod.Systems.Hydraulical.Generation.BaseClasses.PartialHeatPump(genDesTyp - =BESMod.Systems.Hydraulical.Generation.Types.GenerationDesign.BivalentPartParallel); + extends BESMod.Systems.Hydraulical.Generation.BaseClasses.PartialHeatPump(genDesTyp= + BESMod.Systems.Hydraulical.Generation.Types.GenerationDesign.BivalentPartParallel); parameter Real etaTem[:,2]=[293.15,1.09; 303.15,1.08; 313.15,1.05; 323.15,1.; 373.15, 0.99] "Temperature based efficiency"; parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal= @@ -43,10 +43,12 @@ partial model PartialHeatPumpAndGasBoiler "Partial heat pump and boiler" "Boiler with external control" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Utilities.KPIs.EnergyKPICalculator KPIBoi(use_inpCon=false, y=boi.thermalPower) + Utilities.KPIs.EnergyKPICalculator KPIBoi(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.thermalPower) annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); - Utilities.KPIs.EnergyKPICalculator KPIBoiFue(use_inpCon=false, y=boi.fuelPower) + Utilities.KPIs.EnergyKPICalculator KPIBoiFue(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.fuelPower) "Fuel consumption" annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); diff --git a/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo b/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo index d1812a3d..f0baaf74 100644 --- a/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo +++ b/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo @@ -9,7 +9,10 @@ model DetailedSolarThermalWithHeatPump redeclare package Medium = IBPSA.Media.Water, dTTra_nominal={if TDem_nominal[1] > 273.15 + 55 then 10 elseif TDem_nominal[1] > 44.9 then 8 else 5,solarThermalParas.dTMax}, - final nParallelDem=2); + final nParallelDem=2, + KPIPEleEleHea(final resetTimeKPIs=resetTimeKPIs), + KPIEleHea(final resetTimeKPIs=resetTimeKPIs), + KPIQEleHea_flow(final resetTimeKPIs=resetTimeKPIs)); parameter Modelica.Units.SI.Length lengthPipSolThe=30 "Length of all pipes to and from solar thermal" annotation (Dialog(tab="Pressure losses", group="Solar Thermal")); parameter Real resCoeSolThe=8*facPerBend @@ -58,7 +61,8 @@ model DetailedSolarThermalWithHeatPump rotation=180, origin={-30,-170}))); - BESMod.Utilities.KPIs.EnergyKPICalculator KPIQSol(use_inpCon=false, y=sum(solCol.vol.heatPort.Q_flow)) + BESMod.Utilities.KPIs.EnergyKPICalculator KPIQSol(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=sum(solCol.vol.heatPort.Q_flow)) "Solar thermal KPI" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); diff --git a/BESMod/Systems/Hydraulical/Generation/ElectricalHeater.mo b/BESMod/Systems/Hydraulical/Generation/ElectricalHeater.mo index 1e73748c..d22a48b5 100644 --- a/BESMod/Systems/Hydraulical/Generation/ElectricalHeater.mo +++ b/BESMod/Systems/Hydraulical/Generation/ElectricalHeater.mo @@ -30,12 +30,14 @@ model ElectricalHeater "Only heat using an electric heater" parEleHea "Electric heater parameters" annotation (choicesAllMatching=true, Placement(transformation(extent={{-62,-42},{-50,-30}}))); - Utilities.KPIs.EnergyKPICalculator KPIQEleHea(use_inpCon=false, y=hea.vol.heatPort.Q_flow) + Utilities.KPIs.EnergyKPICalculator KPIQEleHea(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=hea.vol.heatPort.Q_flow) "Electric heater heat flow rate" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); BESMod.Utilities.Electrical.RealToElecCon realToElecCon(use_souGen=false) annotation (Placement(transformation(extent={{32,-108},{52,-88}}))); Utilities.KPIs.DeviceKPICalculator KPIEleHea( + final resetTimeKPIs=resetTimeKPIs, use_reaInp=true, calc_singleOnTime=true, calc_totalOnTime=true, diff --git a/BESMod/Systems/Hydraulical/Generation/GasBoiler.mo b/BESMod/Systems/Hydraulical/Generation/GasBoiler.mo index 63a66925..2fea35da 100644 --- a/BESMod/Systems/Hydraulical/Generation/GasBoiler.mo +++ b/BESMod/Systems/Hydraulical/Generation/GasBoiler.mo @@ -61,13 +61,15 @@ model GasBoiler "Just a gas boiler" annotation (Placement(transformation(extent={{-66,-6},{-34,26}}))); - Utilities.KPIs.EnergyKPICalculator KPIQBoi(use_inpCon=false, y=boi.QflowCalculation.y) + Utilities.KPIs.EnergyKPICalculator KPIQBoi(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=boi.QflowCalculation.y) "Boiler heat flow rate" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); BESMod.Utilities.Electrical.ZeroLoad zeroLoad annotation (Placement(transformation(extent={{26,-108},{46,-88}}))); Utilities.KPIs.DeviceKPICalculator KPIBoi( + final resetTimeKPIs=resetTimeKPIs, use_reaInp=true, calc_singleOnTime=true, calc_totalOnTime=true, diff --git a/BESMod/Systems/Hydraulical/Generation/HeatPumpAndElectricHeater.mo b/BESMod/Systems/Hydraulical/Generation/HeatPumpAndElectricHeater.mo index 97aad7bf..d30a1d6f 100644 --- a/BESMod/Systems/Hydraulical/Generation/HeatPumpAndElectricHeater.mo +++ b/BESMod/Systems/Hydraulical/Generation/HeatPumpAndElectricHeater.mo @@ -43,15 +43,18 @@ model HeatPumpAndElectricHeater "Heat pump with an electric heater in series" annotation (Placement(transformation(extent={{20,20},{40,40}}))); Utilities.KPIs.DeviceKPICalculator KPIEleHea( + final resetTimeKPIs=resetTimeKPIs, use_reaInp=true, calc_singleOnTime=true, calc_totalOnTime=true, calc_numSwi=true) if use_eleHea "Electric heater KPIs" annotation (Placement(transformation(extent={{-120,-120},{-100,-100}}))); - Utilities.KPIs.EnergyKPICalculator KPIQEleHea_flow(use_inpCon=false, y=eleHea.vol.heatPort.Q_flow) + Utilities.KPIs.EnergyKPICalculator KPIQEleHea_flow(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=eleHea.vol.heatPort.Q_flow) if use_eleHea "Electric heater heat flow rate" annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); - Utilities.KPIs.EnergyKPICalculator KPIPEleEleHea(use_inpCon=false, y=eleHea.Pel) + Utilities.KPIs.EnergyKPICalculator KPIPEleEleHea(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=eleHea.Pel) if use_eleHea "Electric heater heat flow rate" annotation (Placement(transformation(extent={{-140,-100},{-120,-80}}))); protected diff --git a/BESMod/Systems/Hydraulical/Generation/SimpleSolarThermalWithHeatPump.mo b/BESMod/Systems/Hydraulical/Generation/SimpleSolarThermalWithHeatPump.mo index bb4b9c0d..2d360dc7 100644 --- a/BESMod/Systems/Hydraulical/Generation/SimpleSolarThermalWithHeatPump.mo +++ b/BESMod/Systems/Hydraulical/Generation/SimpleSolarThermalWithHeatPump.mo @@ -54,7 +54,8 @@ model SimpleSolarThermalWithHeatPump rotation=180, origin={-30,-148}))); - Utilities.KPIs.EnergyKPICalculator KPIWel1(use_inpCon=false, y=-solThe.heater.port.Q_flow) + Utilities.KPIs.EnergyKPICalculator KPIWel1(use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, y=-solThe.heater.port.Q_flow) annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); Modelica.Blocks.Sources.RealExpression reaExpSolTheTCol(y=solThe.senTRet.T) diff --git a/BESMod/Systems/Hydraulical/Transfer/IdealValveRadiator.mo b/BESMod/Systems/Hydraulical/Transfer/IdealValveRadiator.mo index 153bb4be..338f2753 100644 --- a/BESMod/Systems/Hydraulical/Transfer/IdealValveRadiator.mo +++ b/BESMod/Systems/Hydraulical/Transfer/IdealValveRadiator.mo @@ -55,6 +55,7 @@ model IdealValveRadiator BESMod.Utilities.KPIs.EnergyKPICalculator intKPICalHeaFlo(final use_inpCon=false, + final resetTimeKPIs=resetTimeKPIs, final y=sum(-heatPortRad.Q_flow) + sum(-heatPortCon.Q_flow)) annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); IBPSA.Fluid.Movers.Preconfigured.FlowControlled_m_flow pumFixMFlo[nParallelDem]( diff --git a/BESMod/Systems/Hydraulical/Transfer/UFHTransferSystem.mo b/BESMod/Systems/Hydraulical/Transfer/UFHTransferSystem.mo index 6867e57f..dbd68025 100644 --- a/BESMod/Systems/Hydraulical/Transfer/UFHTransferSystem.mo +++ b/BESMod/Systems/Hydraulical/Transfer/UFHTransferSystem.mo @@ -63,7 +63,8 @@ model UFHTransferSystem origin={-64,4}))); - Utilities.KPIs.EnergyKPICalculator integralKPICalculator[nParallelDem] + Utilities.KPIs.EnergyKPICalculator integralKPICalculator[nParallelDem](each + final resetTimeKPIs=resetTimeKPIs) annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); IBPSA.Fluid.Movers.Preconfigured.FlowControlled_m_flow pumpFix_m_flow[nParallelDem]( redeclare package Medium = Medium, diff --git a/BESMod/Systems/Ventilation/BaseClasses/PartialVentilationSystem.mo b/BESMod/Systems/Ventilation/BaseClasses/PartialVentilationSystem.mo index cec02b0d..ce65fd21 100644 --- a/BESMod/Systems/Ventilation/BaseClasses/PartialVentilationSystem.mo +++ b/BESMod/Systems/Ventilation/BaseClasses/PartialVentilationSystem.mo @@ -32,7 +32,8 @@ partial model PartialVentilationSystem final show_T=show_T, final rho=rho, final cp=cp, - final use_openModelica=use_openModelica) + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching=true, Placement(transformation(extent={{26,-56}, {80,-2}}))); @@ -58,6 +59,7 @@ partial model PartialVentilationSystem final rho=rho, final cp=cp, final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs, mDem_flow_nominal=ventilationSystemParameters.AZone .* ventilationSystemParameters.hZone .* 0.5 ./ 3600 .* 1.225, mDemOld_flow_design=ventilationSystemParameters.AZone .* ventilationSystemParameters.hZone .* 0.5 ./ 3600 .* 1.225, dpDem_nominal=fill(0, ventilationSystemParameters.nZones), @@ -98,7 +100,8 @@ partial model PartialVentilationSystem final f_design=distribution.f_design, final TOda_nominal=ventilationSystemParameters.TOda_nominal, final QLoss_flow_nominal=distribution.QLoss_flow_nominal), - final use_openModelica=use_openModelica) annotation (choicesAllMatching= + final use_openModelica=use_openModelica, + final resetTimeKPIs=resetTimeKPIs) annotation (choicesAllMatching= true, Placement(transformation(extent={{-26,22},{28,68}}))); BESMod.Systems.Interfaces.VentilationOutputs outBusVen if not use_openModelica diff --git a/BESMod/Systems/Ventilation/Control/BaseClasses/PartialControl.mo b/BESMod/Systems/Ventilation/Control/BaseClasses/PartialControl.mo index 2f7bff5b..d99a29bf 100644 --- a/BESMod/Systems/Ventilation/Control/BaseClasses/PartialControl.mo +++ b/BESMod/Systems/Ventilation/Control/BaseClasses/PartialControl.mo @@ -4,6 +4,9 @@ partial model PartialControl parameter Boolean use_openModelica=false "=true to disable features which are not available in open modelica" annotation(Dialog(tab="Advanced")); + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); replaceable parameter BESMod.Systems.RecordsCollection.TwoSideSubsystemControlBaseDataDefinition parDis constrainedby diff --git a/BESMod/Utilities/KPIs/BaseClasses/SplitGainAndLoss.mo b/BESMod/Utilities/KPIs/BaseClasses/SplitGainAndLoss.mo index ab61e4e0..3df2f097 100644 --- a/BESMod/Utilities/KPIs/BaseClasses/SplitGainAndLoss.mo +++ b/BESMod/Utilities/KPIs/BaseClasses/SplitGainAndLoss.mo @@ -1,6 +1,9 @@ within BESMod.Utilities.KPIs.BaseClasses; model SplitGainAndLoss "Model to split an energy input value into gain and loss" + + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 "Simulation time where KPI integrals are reset to zero"; + Modelica.Blocks.Nonlinear.Limiter limLoss(final uMax=0, final uMin=-Modelica.Constants.inf, strict=noEvents) "Only use negative values (loss)" @@ -9,12 +12,14 @@ model SplitGainAndLoss final uMin=0, strict=noEvents) "Only use positive values (gain)" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Utilities.KPIs.EnergyKPICalculator gainKPI(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator gainKPI(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={30,30}))); - Utilities.KPIs.EnergyKPICalculator lossKPI(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator lossKPI(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, diff --git a/BESMod/Utilities/KPIs/ComfortCalculator.mo b/BESMod/Utilities/KPIs/ComfortCalculator.mo index d7265ba6..04acc880 100644 --- a/BESMod/Utilities/KPIs/ComfortCalculator.mo +++ b/BESMod/Utilities/KPIs/ComfortCalculator.mo @@ -2,6 +2,9 @@ within BESMod.Utilities.KPIs; model ComfortCalculator "Cacluate the discomort in K*s" extends BaseClasses.KPIIcon; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Modelica.Units.SI.Temperature TComBou "Comfort boundary temperature"; parameter Boolean for_heating = true "=false to calculate comfort during cooling period (summer). = true for heating"; @@ -27,6 +30,11 @@ model ComfortCalculator "Cacluate the discomort in K*s" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); equation + + when time >= resetTimeKPIs then + reinit(intDisCom.y, 0.0); + end when; + connect(add.u2, const.y) annotation (Line(points={{-28,-12},{-38,-12},{-38,-20}, {-45,-20}}, color={0,0,127})); connect(intDisCom.y, dTComSec) annotation (Line(points={{65,-4},{88,-4},{88,0}, diff --git a/BESMod/Utilities/KPIs/CountTimeDiscomfort.mo b/BESMod/Utilities/KPIs/CountTimeDiscomfort.mo index 8793e55a..9bc3a10a 100644 --- a/BESMod/Utilities/KPIs/CountTimeDiscomfort.mo +++ b/BESMod/Utilities/KPIs/CountTimeDiscomfort.mo @@ -1,6 +1,9 @@ within BESMod.Utilities.KPIs; model CountTimeDiscomfort "Count the time of discomfort" extends BaseClasses.KPIIcon; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Modelica.Media.Interfaces.Types.Temperature TRoomSet=293.15 "Room set temperature"; Modelica.Blocks.Logical.Switch switch1 @@ -23,6 +26,11 @@ model CountTimeDiscomfort "Count the time of discomfort" Modelica.Blocks.Logical.Not not1 annotation (Placement(transformation(extent={{8,-70},{28,-50}}))); equation + + when time >= resetTimeKPIs then + reinit(integrator3.y, 0.0); + end when; + connect(switch1.u1, const.y) annotation (Line(points={{38,8},{32,8},{32,24},{ 27,24}}, color={0,0,127})); connect(const1.y, switch1.u3) annotation (Line(points={{27,-18},{34,-18},{34, diff --git a/BESMod/Utilities/KPIs/DeviceKPICalculator.mo b/BESMod/Utilities/KPIs/DeviceKPICalculator.mo index 9540df25..7bab48c8 100644 --- a/BESMod/Utilities/KPIs/DeviceKPICalculator.mo +++ b/BESMod/Utilities/KPIs/DeviceKPICalculator.mo @@ -1,6 +1,9 @@ within BESMod.Utilities.KPIs; model DeviceKPICalculator "KPI useful for the analysis of a device" extends BaseClasses.KPIIcon; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Boolean use_reaInp=false "=true to use a real input"; parameter Real thrOn=Modelica.Constants.eps*100 "If uRea is greater or equal to this treshhold the device is on" @@ -52,6 +55,12 @@ model DeviceKPICalculator "KPI useful for the analysis of a device" annotation (Placement(transformation(extent={{-140,0},{-100,40}}), iconTransformation(extent={{-142,-20},{-102,20}}))); equation + + when time >= resetTimeKPIs then + reinit(integrator1.y, 0.0); + reinit(integrator3.y, 0.0); + end when; + connect(switch1.u1,const. y) annotation (Line(points={{-12,8},{-14,8},{-14,20}, {-21,20}}, color={0,0,127})); connect(const1.y,switch1. u3) annotation (Line(points={{-21,-20},{-10,-20},{-10, diff --git a/BESMod/Utilities/KPIs/EnergyKPICalculator.mo b/BESMod/Utilities/KPIs/EnergyKPICalculator.mo index 75cfd5ad..073aa294 100644 --- a/BESMod/Utilities/KPIs/EnergyKPICalculator.mo +++ b/BESMod/Utilities/KPIs/EnergyKPICalculator.mo @@ -3,6 +3,9 @@ model EnergyKPICalculator "Give integral and value as KPI" extends BaseClasses.KPIIcon; parameter Boolean use_inpCon=true "= false to use an internal variable as input"; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); Modelica.Blocks.Interfaces.RealInput y(final unit="W") if not use_inpCon "Value of Real input"; @@ -25,6 +28,11 @@ model EnergyKPICalculator "Give integral and value as KPI" annotation (Placement(transformation(extent={{102,-20},{142,20}}), iconTransformation(extent={{102,-20},{142,20}}))); equation + + when time >= resetTimeKPIs then + reinit(integrator2.y, 0.0); + end when; + connect(internalU.y, KPI.value) annotation (Line(points={{-19,0},{50,0},{50,0.1}, {122.1,0.1}}, color={0,0,127}), Text( string="%second", diff --git a/BESMod/Utilities/KPIs/RoomControlCalculator.mo b/BESMod/Utilities/KPIs/RoomControlCalculator.mo index b28f9e6d..5fd08e0e 100644 --- a/BESMod/Utilities/KPIs/RoomControlCalculator.mo +++ b/BESMod/Utilities/KPIs/RoomControlCalculator.mo @@ -2,6 +2,9 @@ within BESMod.Utilities.KPIs; model RoomControlCalculator "Cacluate the room control quality in K*s" extends BESMod.Utilities.KPIs.BaseClasses.KPIIcon; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); parameter Boolean for_heating = true "=false to calculate comfort during cooling period (summer). = true for heating"; Modelica.Blocks.Nonlinear.Limiter lim(final uMax=Modelica.Constants.inf, @@ -31,6 +34,11 @@ model RoomControlCalculator "Cacluate the room control quality in K*s" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); parameter Real dTComBou=0; equation + + when time >= resetTimeKPIs then + reinit(intDisCom.y, 0.0); + end when; + connect(intDisCom.y, dTComSec) annotation (Line(points={{63,0},{110,0}}, color={0,0,127})); connect(lim.y, intDisCom.u) diff --git a/BESMod/Utilities/KPIs/ZoneEnergyBalance.mo b/BESMod/Utilities/KPIs/ZoneEnergyBalance.mo index 3ca7f3dc..01fd6384 100644 --- a/BESMod/Utilities/KPIs/ZoneEnergyBalance.mo +++ b/BESMod/Utilities/KPIs/ZoneEnergyBalance.mo @@ -3,36 +3,48 @@ model ZoneEnergyBalance "Model for energy KPIs relevant for a single zone" parameter Boolean with_ventilation=true "=false to disable ventilation values"; parameter Boolean with_floor=true "=false to disable floor values"; - BaseClasses.SplitGainAndLoss tra + + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); + + BaseClasses.SplitGainAndLoss tra(final resetTimeKPIs=resetTimeKPIs) "KPIs for energy flow through transfer systems" annotation (Placement(transformation(extent={{-10,-170},{10,-150}}))); - BaseClasses.SplitGainAndLoss floor if with_floor + BaseClasses.SplitGainAndLoss floor(final resetTimeKPIs=resetTimeKPIs) + if with_floor "KPIs for energy flow through floor" annotation (Placement(transformation(extent={{-10,110},{10,130}}))); - BaseClasses.SplitGainAndLoss win "KPIs for energy flow through window" + BaseClasses.SplitGainAndLoss win(final resetTimeKPIs=resetTimeKPIs) + "KPIs for energy flow through window" annotation (Placement(transformation(extent={{-10,70},{10,90}}))); - BaseClasses.SplitGainAndLoss roof "KPIs for energy flow through roof" + BaseClasses.SplitGainAndLoss roof(final resetTimeKPIs=resetTimeKPIs) + "KPIs for energy flow through roof" annotation (Placement(transformation(extent={{-10,150},{10,170}}))); - BaseClasses.SplitGainAndLoss extWall + BaseClasses.SplitGainAndLoss extWall(final resetTimeKPIs=resetTimeKPIs) "KPIs for energy flow through external walls" annotation (Placement(transformation(extent={{-10,190},{10,210}}))); - BaseClasses.SplitGainAndLoss airExc + BaseClasses.SplitGainAndLoss airExc(final resetTimeKPIs=resetTimeKPIs) "KPIs for energy flow through air exchange" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - Utilities.KPIs.EnergyKPICalculator intGaiLight(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator intGaiLight(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) "Internal gains for light" annotation (Placement(transformation(extent={{-10,-50}, {10,-30}}, rotation=0))); - Utilities.KPIs.EnergyKPICalculator intGaiPer(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator intGaiPer(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) "Internal gains for persons" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={0,-80}))); - Utilities.KPIs.EnergyKPICalculator intGaiMac(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator intGaiMac(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) "Internal gains for machines" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={0,-120}))); - Utilities.KPIs.EnergyKPICalculator sol(final use_inpCon=true) + Utilities.KPIs.EnergyKPICalculator sol(final use_inpCon=true, final resetTimeKPIs= + resetTimeKPIs) "Internal gains through solar" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0))); @@ -73,7 +85,8 @@ model ZoneEnergyBalance if with_ventilation "Heat flow through ventilation system" annotation (Placement(transformation(extent={{-140,-220},{-100,-180}}))); - BaseClasses.SplitGainAndLoss ven if with_ventilation + BaseClasses.SplitGainAndLoss ven(final resetTimeKPIs=resetTimeKPIs) + if with_ventilation "KPIs for energy flow through ventilation system" annotation (Placement(transformation(extent={{-10,-210},{10,-190}}))); equation diff --git a/BESMod/Utilities/KPIs/ZoneTemperature.mo b/BESMod/Utilities/KPIs/ZoneTemperature.mo index 8e672043..7eb01fcb 100644 --- a/BESMod/Utilities/KPIs/ZoneTemperature.mo +++ b/BESMod/Utilities/KPIs/ZoneTemperature.mo @@ -6,16 +6,20 @@ model ZoneTemperature "Model for temperature KPIs relevant for a single zone" parameter Boolean with_heating=true "=false to disable heating comfort calculation"; parameter Boolean with_cooling=true "=false to disable cooling comfort calculation"; + parameter Modelica.Units.SI.Time resetTimeKPIs = 0 + "Simulation time where KPI integrals are reset to zero" + annotation(Dialog(tab="Advanced")); + Utilities.KPIs.ComfortCalculator comHea(TComBou=TSetZone_nominal - dTComfort, - for_heating=true) if with_heating + for_heating=true, final resetTimeKPIs=resetTimeKPIs) if with_heating "Comfort calculator room temperature for heating" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); Utilities.KPIs.ComfortCalculator comCool(TComBou=TSetZone_nominal + dTComfort, - for_heating=false) if with_cooling + for_heating=false, final resetTimeKPIs=resetTimeKPIs) if with_cooling "Comfort calculator room temperature for cooling" annotation (Placement(transformation(extent={{-60,-58},{-40,-38}}))); Utilities.KPIs.RoomControlCalculator calCtrl(final for_heating=true, final - dTComBou=0) "Calculate room control quality" + dTComBou=0, final resetTimeKPIs=resetTimeKPIs) "Calculate room control quality" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); Modelica.Blocks.Interfaces.RealOutput dTComHea "K*s discomfort" annotation (Placement(transformation(extent={{100,40},{120,60}}))); From 4ddae22386aa66984a0dd7fae00aa6e6718a398b Mon Sep 17 00:00:00 2001 From: Hendrik van der Stok Date: Tue, 21 Apr 2026 16:01:09 +0200 Subject: [PATCH 2/4] increas BESMod version --- .../Scripts/ConvertBESMod_from_0.7.0_to_0.8.0.mos | 13 +++++++++++++ BESMod/package.mo | 8 ++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 BESMod/Resources/Scripts/ConvertBESMod_from_0.7.0_to_0.8.0.mos diff --git a/BESMod/Resources/Scripts/ConvertBESMod_from_0.7.0_to_0.8.0.mos b/BESMod/Resources/Scripts/ConvertBESMod_from_0.7.0_to_0.8.0.mos new file mode 100644 index 00000000..056f574b --- /dev/null +++ b/BESMod/Resources/Scripts/ConvertBESMod_from_0.7.0_to_0.8.0.mos @@ -0,0 +1,13 @@ +// Conversion script for BESMod library +// Converts user models from BESMod 0.7.0 to 0.8.0 +// +// Changes in 0.8.0: +// - Added new parameter for resetting integral KPIs at a specific time. +// The default value is 0, which reproduces the previous behavior, +// so no modifications to existing user models are required. +// +// This script is intentionally a no-op with respect to model content; +// it exists so that the Modelica tool recognizes the version transition +// and does not warn the user about an unknown source version. + +clear diff --git a/BESMod/package.mo b/BESMod/package.mo index 9503d63d..e2b632c8 100644 --- a/BESMod/package.mo +++ b/BESMod/package.mo @@ -3,7 +3,7 @@ package BESMod extends Modelica.Icons.Package; annotation ( - version="0.7.0", + version="0.8.0", uses( Modelica(version="4.0.0"), SDF(version="0.4.2"), @@ -14,7 +14,11 @@ package BESMod from( version="0.6.0", script="modelica://BESMod/Resources/Scripts/ConvertBESMod_from_0.6.0_to_0.7.0.mos", - to="0.7.0")), + to="0.7.0"), + from( + version="0.7.0", + script="modelica://BESMod/Resources/Scripts/ConvertBESMod_from_0.6.0_to_0.7.0.mos", + to="0.8.0")), Icon(graphics={Bitmap(extent={{-100,-100},{100,100}}, fileName="modelica://BESMod/Resources/Images/BESMod_icon.png")})); end BESMod; From c6af2f747db59fd8b0851735b2a94efdcd6d66db Mon Sep 17 00:00:00 2001 From: Hendrik van der Stok Date: Tue, 21 Apr 2026 16:32:46 +0200 Subject: [PATCH 3/4] fix final overwrite --- .../Generation/DetailedSolarThermalWithHeatPump.mo | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo b/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo index f0baaf74..53bf0ce6 100644 --- a/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo +++ b/BESMod/Systems/Hydraulical/Generation/DetailedSolarThermalWithHeatPump.mo @@ -9,10 +9,7 @@ model DetailedSolarThermalWithHeatPump redeclare package Medium = IBPSA.Media.Water, dTTra_nominal={if TDem_nominal[1] > 273.15 + 55 then 10 elseif TDem_nominal[1] > 44.9 then 8 else 5,solarThermalParas.dTMax}, - final nParallelDem=2, - KPIPEleEleHea(final resetTimeKPIs=resetTimeKPIs), - KPIEleHea(final resetTimeKPIs=resetTimeKPIs), - KPIQEleHea_flow(final resetTimeKPIs=resetTimeKPIs)); + final nParallelDem=2); parameter Modelica.Units.SI.Length lengthPipSolThe=30 "Length of all pipes to and from solar thermal" annotation (Dialog(tab="Pressure losses", group="Solar Thermal")); parameter Real resCoeSolThe=8*facPerBend From bf8c638eea592bbcf56c40089fdecf4565ae6313 Mon Sep 17 00:00:00 2001 From: Hendrik van der Stok Date: Tue, 21 Apr 2026 17:01:32 +0200 Subject: [PATCH 4/4] remove reinit from sinTimeOn --- BESMod/Utilities/KPIs/DeviceKPICalculator.mo | 1 - 1 file changed, 1 deletion(-) diff --git a/BESMod/Utilities/KPIs/DeviceKPICalculator.mo b/BESMod/Utilities/KPIs/DeviceKPICalculator.mo index 7bab48c8..ed8d5eb4 100644 --- a/BESMod/Utilities/KPIs/DeviceKPICalculator.mo +++ b/BESMod/Utilities/KPIs/DeviceKPICalculator.mo @@ -58,7 +58,6 @@ equation when time >= resetTimeKPIs then reinit(integrator1.y, 0.0); - reinit(integrator3.y, 0.0); end when; connect(switch1.u1,const. y) annotation (Line(points={{-12,8},{-14,8},{-14,20},