diff --git a/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo b/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo index 754b67d33ec..f18b7e4788b 100644 --- a/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo +++ b/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo @@ -99,8 +99,10 @@ model VariableSpeedPumpStage "Staging control for variable speed pumps" final integerFalse=0, final integerTrue=2) annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); Buildings.Controls.OBC.CDL.Integers.Add addInt + "Outputs how many pumps are to be commanded on" annotation (Placement(transformation(extent={{60,-56},{80,-36}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Comparison from integer to real signal for number of pumps" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); Modelica.Blocks.Interfaces.BooleanInput on @@ -115,12 +117,12 @@ equation pattern=LinePattern.Dash)); connect(con1.outPort, oneOn.inPort[1]) annotation (Line( - points={{-50,38.5},{-50,26},{-50.5,26},{-50.5,21}}, + points={{-50,38.5},{-50,26},{-49.75,26},{-49.75,21}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con2.inPort, oneOn.outPort[1]) annotation (Line( - points={{-50,-26},{-50,-10},{-50.25,-10},{-50.25,-0.5}}, + points={{-50,-26},{-50,-10},{-49.875,-10},{-49.875,-0.5}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con2.outPort, twoOn.inPort[1]) @@ -140,12 +142,12 @@ equation pattern=LinePattern.Dash)); connect(con3.outPort, oneOn.inPort[2]) annotation (Line( - points={{-10,-38.5},{-10,26},{-49.5,26},{-49.5,21}}, + points={{-10,-38.5},{-10,26},{-50.25,26},{-50.25,21}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con4.inPort, oneOn.outPort[2]) annotation (Line( - points={{-22,48},{-22,-10},{-49.75,-10},{-49.75,-0.5}}, + points={{-22,48},{-22,-10},{-50.125,-10},{-50.125,-0.5}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(combiTable1Ds.y, y) diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo new file mode 100644 index 00000000000..96e1e39cfec --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo @@ -0,0 +1,194 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model IdealUser "Ideal user model" + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate"; + + parameter Modelica.Units.SI.Temperature T_CHWR_nominal + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa") + "Nominal pressure drop when valve is fully open"; + + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( + redeclare final package Medium = Medium, + final use_inputFilter=true, + final dpValve_nominal=dp_nominal/2, + final init=Modelica.Blocks.Types.Init.InitialState, + final dpFixed_nominal=dp_nominal/2, + final m_flow_nominal=m_flow_nominal, + y_start=0) "User control valve" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.Continuous.LimPID conPI( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.5, + Ti=20, + final reverseActing=true) "PI controller" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,80}))); + Modelica.Blocks.Interfaces.RealInput mPre_flow( + final quantity = "MassFlowRate", + final unit = "kg/s") + "Load in terms of flow rate prescription" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}))); + Modelica.Blocks.Interfaces.RealOutput yVal_actual( + final unit = "1") + "Consumer control valve actuator position" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,80}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,80}))); + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare final package Medium = Medium) + "Differential pressure sensor" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-72,20}))); + Modelica.Blocks.Interfaces.RealOutput dp( + final quantity="PressureDifference", + final unit="Pa", + displayUnit="Pa") + "Differential pressure from the sensor" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,20}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,40}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a( + p(start=Medium.p_default), + redeclare final package Medium = Medium, + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-110,50},{-90,70}}), + iconTransformation(extent={{-110,50},{-90,70}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + p(start=Medium.p_default), + redeclare final package Medium = Medium, + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-90,-70},{-110,-50}}), + iconTransformation(extent={{-90,-70},{-110,-50}}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare final package Medium = Medium) + "Mass flow rate sensor" + annotation (Placement(transformation(extent={{-20,-70},{-40,-50}}))); + Buildings.Fluid.Sources.PropertySource_T proSou( + redeclare final package Medium = Medium, + final use_T_in=true) "Ideal temperature source" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={10,-60}))); + Modelica.Blocks.Sources.Constant TRet(final k=T_CHWR_nominal) + "Constant CHW return temperature" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); +equation + connect(senRelPre.p_rel, dp) annotation (Line(points={{-63,20},{110,20}}, + color={0,0,127})); + connect(val.y_actual, yVal_actual) + annotation (Line(points={{15,67},{40,67},{40,80},{110,80}}, + color={0,0,127})); + connect(senRelPre.port_a, port_a) annotation (Line( + points={{-72,30},{-72,60},{-100,60}}, + color={0,127,255}, + pattern=LinePattern.Dash)); + connect(senRelPre.port_b, port_b) annotation (Line( + points={{-72,10},{-72,-60},{-100,-60}}, + color={0,127,255}, + pattern=LinePattern.Dash)); + connect(conPI.y, val.y) + annotation (Line(points={{-19,80},{10,80},{10,72}}, color={0,0,127})); + connect(senMasFlo.port_b, port_b) + annotation (Line(points={{-40,-60},{-100,-60}}, color={0,127,255})); + connect(senMasFlo.m_flow, conPI.u_m) + annotation (Line(points={{-30,-49},{-30,68}}, color={0,0,127})); + connect(port_a, val.port_a) + annotation (Line(points={{-100,60},{0,60}}, color={0,127,255})); + connect(conPI.u_s, mPre_flow) + annotation (Line(points={{-42,80},{-110,80}}, color={0,0,127})); + connect(senMasFlo.port_a, proSou.port_b) + annotation (Line(points={{-20,-60},{0,-60}}, color={0,127,255})); + connect(proSou.port_a, val.port_b) annotation (Line(points={{20,-60},{40,-60}, + {40,60},{20,60}}, color={0,127,255})); + connect(TRet.y, proSou.T_in) + annotation (Line(points={{1,-30},{14,-30},{14,-48}}, color={0,0,127})); + annotation ( + defaultComponentName = "ideUse", + Documentation(info=" +

+This is a simple ideal user model used by + +Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource. +The load of the user is described by a varying mass flow rate setpoint. +The valve is controlled to maintain the requested mass flow rate. +The model sets its leaving water temperature to the user-specified temperature +T_CHWR_nominal. +

+", revisions=" + +"), + Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,40},{40,-40}}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-34,34},{-4,6}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{6,34},{34,6}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-34,-4},{-4,-34}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{6,-4},{34,-34}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Text( + extent={{-151,-100},{149,-140}}, + textColor={0,0,255}, + textString="%name")})); +end IdealUser; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo new file mode 100644 index 00000000000..5d102252b58 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo @@ -0,0 +1,152 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ParallelJunctions "A pair of junctions in parallel" + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Design mass flow rate (used to approximate dynamics" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Time tau=30 "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + parameter Modelica.Units.SI.Temperature T1_start=Medium.T_default + "Start temperature of the volume" + annotation(Dialog(tab = "Initialization")); + parameter Modelica.Units.SI.Temperature T2_start=Medium.T_default + "Start temperature of the volume" + annotation(Dialog(tab = "Initialization")); + + Modelica.Fluid.Interfaces.FluidPort_a port_a2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{90,-70},{110,-50}}), iconTransformation( + extent={{90,-70},{110,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{90,50},{110,70}}), iconTransformation( + extent={{90,50},{110,70}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-110,-70},{-90,-50}}), + iconTransformation(extent={{-110,-70},{-90,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-110,50},{-90,70}}), iconTransformation( + extent={{-110,50},{-90,70}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_c1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-70,90},{-50,110}}), iconTransformation( + extent={{-70,90},{-50,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_c2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{50,90},{70,110}}), iconTransformation( + extent={{50,90},{70,110}}))); + Buildings.Fluid.FixedResistances.Junction jun1( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final tau=tau, + final T_start=T1_start, + final m_flow_nominal={-m_flow_nominal,-m_flow_nominal,m_flow_nominal}, + final dp_nominal={0,0,0}) + "Junction" + annotation (Placement(transformation(extent={{-70,70},{-50,50}}))); + Buildings.Fluid.FixedResistances.Junction jun2( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final tau=tau, + final T_start=T2_start, + final m_flow_nominal={m_flow_nominal,m_flow_nominal,-m_flow_nominal}, + final dp_nominal={0,0,0}) + "Junction" + annotation (Placement(transformation(extent={{50,-50},{70,-70}}))); +equation + connect(port_a1, jun1.port_1) + annotation (Line(points={{-100,60},{-70,60}}, color={0,127,255})); + connect(jun1.port_3,port_c1) + annotation (Line(points={{-60,70},{-60,100}}, color={0,127,255})); + connect(jun1.port_2, port_b1) + annotation (Line(points={{-50,60},{100,60}}, color={0,127,255})); + connect(port_b2, jun2.port_1) + annotation (Line(points={{-100,-60},{50,-60}}, color={0,127,255})); + connect(jun2.port_2, port_a2) + annotation (Line(points={{70,-60},{100,-60}}, color={0,127,255})); + connect(jun2.port_3,port_c2) + annotation (Line(points={{60,-50},{60,100}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-1.5,-100.5},{1.5,100.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-0.5,59.5}, + rotation=90), + Rectangle( + extent={{-1.5,-100.5},{1.5,100.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-0.5,-60.5}, + rotation=90), + Rectangle( + extent={{-19.5,-1.5},{19.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-59.5,79.5}, + rotation=90), + Rectangle( + extent={{-17.5,-1.5},{17.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={60.5,81.5}, + rotation=90), + Rectangle( + extent={{-57.5,-1.5},{57.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={60.5,-2.5}, + rotation=90), + Text( + extent={{-141,-99},{159,-139}}, + textColor={0,0,255}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + defaultComponentName = "parJun", + Documentation(info=" +

+This model provides junction models in parallel on the distribution pipe lines. +This model is for breaking algebraic loops only and has no pressure drop. +

+", revisions=" + +")); +end ParallelJunctions; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo new file mode 100644 index 00000000000..845a11e557a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo @@ -0,0 +1,87 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ParallelPipes "CHW supply and return pipes in parallel" + extends Buildings.Fluid.Interfaces.PartialFourPortInterface( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium, + final m1_flow_nominal = m_flow_nominal, + final m2_flow_nominal = m_flow_nominal); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa") + "Nominal pressure drop" + annotation(Dialog(group="Nominal condition")); + + Buildings.Fluid.FixedResistances.PressureDrop preDro1( + redeclare package Medium = Medium1, + final allowFlowReversal=true, + final dp_nominal=dp_nominal, + final m_flow_nominal=m1_flow_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + Buildings.Fluid.FixedResistances.PressureDrop preDro2( + redeclare package Medium = Medium2, + final allowFlowReversal=true, + final dp_nominal=dp_nominal, + final m_flow_nominal=m2_flow_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{10,-70},{-10,-50}}))); +equation + connect(preDro1.port_a, port_a1) + annotation (Line(points={{-10,60},{-100,60}}, color={0,127,255})); + connect(preDro1.port_b, port_b1) + annotation (Line(points={{10,60},{100,60}}, color={0,127,255})); + connect(preDro2.port_a, port_a2) + annotation (Line(points={{10,-60},{100,-60}}, color={0,127,255})); + connect(preDro2.port_b, port_b2) + annotation (Line(points={{-10,-60},{-100,-60}}, color={0,127,255})); + annotation (Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-28,72},{28,48}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,62},{100,58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,-58},{100,-62}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-30,-48},{26,-72}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), +defaultComponentName="parPip", +Documentation(info=" +

+This model contains two pipes in parallel that represent the supply and return +pipes of a district CHW network. +Only pressure drop is considered. This model does not consider heat loss. +

+", revisions=" + +")); +end ParallelPipes; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo new file mode 100644 index 00000000000..65fca950256 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo @@ -0,0 +1,166 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ReversibleConnection + "A connection that supports reversible flow with a pump and a valve" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final allowFlowReversal=true); + + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch"; + parameter Modelica.Units.SI.PressureDifference dpPum_nominal + "Nominal pressure difference for supply pump sizing"; + parameter Modelica.Units.SI.PressureDifference dpVal_nominal + "Nominal pressure difference for return valve sizing"; + parameter Modelica.Units.SI.ThermodynamicTemperature T_start + "Start temperature" + annotation(Dialog(tab = "Initialization")); + + Modelica.Blocks.Interfaces.RealOutput PEle( + final quantity="Power", + final unit="W") + "Estimated power consumption" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,50}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,60}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for pump" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,70}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,60}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pum( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final addPowerToMedium=false, + final dp_nominal=dpPum_nominal) "Supply pump" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=0.1*dpPum_nominal, + final dpFixed_nominal=0) "Check valve" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Fluid.Actuators.Valves.TwoWayPressureIndependent val( + redeclare final package Medium = Medium, + final m_flow_nominal=mTan_flow_nominal, + final dpValve_nominal=dpVal_nominal, + y_start=0) + "Valve that throttles CHW from the supply line to the tank" + annotation (Placement(transformation(extent={{20,-40},{0,-20}}))); + Modelica.Blocks.Interfaces.RealInput yVal(final unit="1") + "Normalized flow signal for valve" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-70}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-60}))); + +protected + Buildings.Fluid.FixedResistances.Junction jun1( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=30, + T_start=T_start, + m_flow_nominal={-mTan_flow_nominal,m_flow_nominal,-m_flow_nominal}, + dp_nominal={0,0,0}) "Junction" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-70,0}))); + Buildings.Fluid.FixedResistances.Junction jun2( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=30, + T_start=T_start, + m_flow_nominal={-m_flow_nominal,-mTan_flow_nominal,m_flow_nominal}, + dp_nominal={0,0,0}) "Junction" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=270, + origin={70,0}))); + +equation + connect(pum.port_b, jun2.port_1) + annotation (Line(points={{20,50},{70,50},{70,10}}, color={0,127,255})); + connect(jun2.port_3, port_b) annotation (Line(points={{80,-1.77636e-15},{90,-1.77636e-15}, + {90,0},{100,0}}, color={0,127,255})); + connect(val.port_a, jun2.port_2) + annotation (Line(points={{20,-30},{70,-30},{70,-10}}, color={0,127,255})); + connect(jun1.port_3, port_a) annotation (Line(points={{-80,5.55112e-16},{-90,5.55112e-16}, + {-90,0},{-100,0}}, color={0,127,255})); + connect(jun1.port_1, val.port_b) + annotation (Line(points={{-70,-10},{-70,-30},{0,-30}}, color={0,127,255})); + connect(pum.y, yPum) + annotation (Line(points={{10,62},{10,70},{-110,70}}, color={0,0,127})); + connect(yVal, val.y) annotation (Line(points={{-110,-70},{-20,-70},{-20,-10},{ + 10,-10},{10,-18}}, color={0,0,127})); + connect(pum.P, PEle) annotation (Line(points={{21,59},{90,59},{90,50},{110,50}}, + color={0,0,127})); + connect(jun1.port_2, cheVal.port_a) + annotation (Line(points={{-70,10},{-70,50},{-40,50}}, color={0,127,255})); + connect(cheVal.port_b, pum.port_a) + annotation (Line(points={{-20,50},{0,50}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model implements a piping connection for reversible mass flow rate between the storage plant +and the district network. +

+", revisions=" + +"), defaultComponentName = "revCon", Icon(graphics={ Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,40},{80,-40}}, lineColor={28,108,200}), + Line(points={{-100,0},{-80,0}}, color={28,108,200}), + Ellipse( + extent={{20,60},{60,20}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,-40},{24,-30},{24,-50},{40,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,-40},{56,-30},{56,-50},{40,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,40},{40,60},{40,20},{60,40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{80,0},{100,0}}, color={28,108,200}), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={2,44}, + rotation=-90), + Line(points={{-14,50},{-54,50}}, color={0,127,255}), + Line(points={{4,-30},{-36,-30}}, color={0,127,255}), + Polygon( + points={{-2,6},{16,0},{16,12},{-2,6}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={-52,-36}, + rotation=360)})); +end ReversibleConnection; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo new file mode 100644 index 00000000000..ac3c611f23a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo @@ -0,0 +1,235 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model TankBranch "Model of the tank branch of a storage plant" + + extends Buildings.Fluid.Interfaces.PartialFourPort( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal(min=0) + "Nominal mass flow rate" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal(min=0) + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWS_nominal(displayUnit="degC")= + 7+273.15 "Nominal temperature of CHW supply" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWR_nominal(displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return" + annotation(Dialog(group="Nominal values")); + + // Storage tank parameters + parameter Modelica.Units.SI.Volume VTan "Tank volume" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.Length hTan + "Height of tank (without insulation)" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.Length dIns "Thickness of insulation" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.ThermalConductivity kIns=0.04 + "Specific heat conductivity of insulation" + annotation(Dialog(group="Tank")); + parameter Integer nSeg(min=2) = 5 "Number of volume segments" + annotation(Dialog(group="Tank")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Formulation of energy balance" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + parameter Medium.AbsolutePressure p_start = Medium.p_default + "Start value of pressure" + annotation(Dialog(tab = "Initialization")); + parameter Medium.Temperature T_start=T_CHWR_nominal + "Start value of temperature" + annotation(Dialog(tab = "Initialization")); + parameter Modelica.Units.SI.Temperature TFlu_start[nSeg]=T_start*ones(nSeg) + "Initial temperature of the tank segments, with TFlu_start[1] being the top segment" + annotation (Dialog(tab="Initialization")); + parameter Modelica.Units.SI.Time tau=1 "Time constant for mixing" + annotation(Dialog(group="Tank")); + + Buildings.Fluid.Storage.Stratified tan( + redeclare final package Medium = Medium, + final allowFlowReversal=true, + final VTan=VTan, + final hTan=hTan, + final dIns=dIns, + final kIns=kIns, + final nSeg=nSeg, + final energyDynamics=energyDynamics, + final p_start=p_start, + final T_start=T_start, + final TFlu_start=TFlu_start, + final tau=tau, + final m_flow_nominal=mTan_flow_nominal, + show_T=true) "Tank" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Fluid.Sensors.MassFlowRate senFlo( + redeclare final package Medium = Medium, + final allowFlowReversal=true) "Flow rate sensor for the tank," + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-30}))); + Modelica.Blocks.Interfaces.RealOutput mTan_flow( + final quantity="MassFlowRate", + final unit="kg/s") "Mass flow rate of the tank" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,90}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,100}))); + Modelica.Blocks.Interfaces.RealOutput Ql_flow( + final quantity="HeatFlowRate", + final unit="W") + "Heat loss of tank (positive if heat flows from tank to ambient)" + annotation (Placement(transformation(extent={{100,0},{120,20}}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,0}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorTop + "Heat port tank top (outside insulation)" + annotation (Placement(transformation(extent={{-16,34},{-4,46}}), + iconTransformation(extent={{14,34},{26,46}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorSid + "Heat port tank side (outside insulation)" + annotation (Placement(transformation(extent={{4,-26},{16,-14}}), + iconTransformation(extent={{26,-6},{38,6}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorBot + "Heat port tank bottom (outside insulation). Leave unconnected for adiabatic condition" + annotation (Placement(transformation(extent={{-16,-46},{-4,-34}}), + iconTransformation(extent={{14,-46},{26,-34}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[tan.nSeg] heaPorVol + "Heat port that connects to the control volumes of the tank" + annotation (Placement(transformation(extent={{-26,-26},{-14,-14}}), + iconTransformation(extent={{-6,-6},{6,6}}))); + Modelica.Blocks.Interfaces.RealOutput TTan[2]( + each final quantity="Temperature", + each displayUnit="C") "Temperatures at the tank 1: top and 2: bottom" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,-90}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,-100}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemTop + "Temperature sensor for tank top" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemBot + "Temperature sensor for tank bottom" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +protected + Buildings.Fluid.FixedResistances.Junction junSup( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_CHWS_nominal, + tau=30, + m_flow_nominal={-mChi_flow_nominal,mTan_flow_nominal,m_flow_nominal}, + dp_nominal={0,0,0}) "Junction on the supply side" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Buildings.Fluid.FixedResistances.Junction junRet( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_CHWR_nominal, + tau=30, + m_flow_nominal={-m_flow_nominal,mChi_flow_nominal,mTan_flow_nominal}, + dp_nominal={0,0,0}) "Junction on the return side" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-50,-60}))); + +equation + connect(senFlo.m_flow, mTan_flow) annotation (Line(points={{-61,-30},{-66,-30}, + {-66,90},{110,90}}, color={0,0,127})); + connect(tan.Ql_flow, Ql_flow) + annotation (Line(points={{11,7.2},{11,10},{110,10}}, + color={0,0,127})); + connect(tan.heaPorTop, heaPorTop) annotation (Line(points={{2,7.4},{2,30},{-10, + 30},{-10,40}},color={191,0,0})); + connect(tan.heaPorSid, heaPorSid) annotation (Line(points={{5.6,0},{5.6,-4},{10, + -4},{10,-20}}, color={191,0,0})); + connect(tan.heaPorBot, heaPorBot) + annotation (Line(points={{2,-7.4},{2,-30},{-10,-30},{-10,-40}}, + color={191,0,0})); + connect(heaPorVol, tan.heaPorVol) annotation (Line(points={{-20,-20},{-20,-4}, + {0,-4},{0,0}}, color={191,0,0})); + connect(junRet.port_3, senFlo.port_a) + annotation (Line(points={{-50,-50},{-50,-40}}, color={0,127,255})); + connect(senFlo.port_b, tan.port_a) + annotation (Line(points={{-50,-20},{-50,0},{-10,0}}, color={0,127,255})); + connect(tan.port_b, junSup.port_3) + annotation (Line(points={{10,0},{50,0},{50,50}}, color={0,127,255})); + connect(tan.heaPorTop, senTemTop.port) + annotation (Line(points={{2,7.4},{2,30},{20,30}}, color={191,0,0})); + connect(tan.heaPorBot, senTemBot.port) + annotation (Line(points={{2,-7.4},{2,-30},{20,-30}}, color={191,0,0})); + connect(senTemTop.T, TTan[1]) annotation (Line(points={{41,30},{70,30},{70,-90}, + {110,-90},{110,-92.5}}, color={0,0,127})); + connect(senTemBot.T, TTan[2]) annotation (Line(points={{41,-30},{70,-30},{70,-87.5}, + {110,-87.5}}, color={0,0,127})); + connect(port_b2, junRet.port_2) + annotation (Line(points={{-100,-60},{-60,-60}}, color={0,127,255})); + connect(junRet.port_1, port_a2) + annotation (Line(points={{-40,-60},{100,-60}}, color={0,127,255})); + connect(junSup.port_2, port_b1) + annotation (Line(points={{60,60},{100,60}}, color={0,127,255})); + connect(junSup.port_1, port_a1) + annotation (Line(points={{40,60},{-100,60}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{-100,-60},{100,-60}}, color={28,108,200}), + Line(points={{-100,60},{100,60}}, color={28,108,200}), + Line(points={{-42,-60}}, color={28,108,200}), + Line(points={{-60,-58},{-60,50},{0,50},{0,-52},{60,-52},{60,60}}, color + ={28,108,200}), + Rectangle( + extent={{-28,40},{32,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{38,0},{80,0},{100,0}}, + color={127,0,0}, + pattern=LinePattern.Dot), + Line( + points={{26,-44},{52,-44},{52,0}}, + color={127,0,0}, + pattern=LinePattern.Dot), + Line( + points={{26,44},{52,44},{52,-2}}, + color={127,0,0}, + pattern=LinePattern.Dot)}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}})), + defaultComponentName = "tanBra", + Documentation(info=" +

+This model is part of a storage plant. This branch has a stratified tank. +This tank can potentially be charged remotely by a chiller from the district +CHW network, or by a chiller that is local to the energy transfer station that contains this tank. +

+", revisions=" + +")); +end TankBranch; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo new file mode 100644 index 00000000000..156d6b8207c --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo @@ -0,0 +1,79 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation; +model IdealUser "Test model for the dummy user" + extends Modelica.Icons.Example; + + package Medium = Buildings.Media.Water "Medium model"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + "Nominal mass flow rate"; + parameter Modelica.Units.SI.PressureDifference dp_nominal=500000 + "Nominal pressure difference"; + parameter Modelica.Units.SI.AbsolutePressure p_Pressurisation=300000 + "Pressurisation point"; + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")=12+273.15 + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")=7+273.15 + "Nominal temperature of CHW supply"; + parameter Boolean allowFlowReversal=false + "Flow reversal setting"; + parameter Modelica.Units.SI.Power QCooLoa_flow_nominal=5*4200*0.9 + "Nominal cooling load of one consumer"; + + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + T_CHWR_nominal=T_CHWR_nominal, + final dp_nominal=dp_nominal) "Ideal user" annotation (Placement( + transformation(extent={{-10,-10},{10,10}}, rotation=0))); + Buildings.Fluid.Sources.Boundary_pT sin( + redeclare final package Medium = Medium, + final p=p_Pressurisation, + final T=T_CHWR_nominal, + nPorts=1) "Sink representing CHW return line" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,-30}))); + Buildings.Fluid.Sources.Boundary_pT sou( + redeclare final package Medium = Medium, + final p=p_Pressurisation+dp_nominal, + final T=T_CHWS_nominal, + nPorts=1) "Source representing CHW supply line" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={-70,30}))); + Modelica.Blocks.Sources.TimeTable mPre_flow(table=[0*3600,0; 0.5*3600,0; 0.5* + 3600,m_flow_nominal; 0.75*3600,m_flow_nominal; 0.75*3600,0; 1*3600,0]) + "Prescribed flow rate representing cooling load" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); +equation + connect(sou.ports[1],ideUse. port_a) annotation (Line(points={{-60,30},{-40, + 30},{-40,6},{-10,6}}, color={0,127,255})); + connect(ideUse.port_b, sin.ports[1]) + annotation (Line(points={{-10,-6},{-40,-6},{-40,-30},{-60,-30}}, + color={0,127,255})); + connect(mPre_flow.y, ideUse.mPre_flow) annotation (Line(points={{-59,70},{-20, + 70},{-20,8},{-11,8}}, color={0,0,127})); +annotation(__Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos" + "Simulate and plot"), +experiment(Tolerance=1e-06, StopTime=3600), Documentation(info=" +

+This is a simple test model for the ideal user. +

+", revisions=" + +")); +end IdealUser; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo new file mode 100644 index 00000000000..9da11f1ef99 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo @@ -0,0 +1,7 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +package Validation "Package containing validation models" + extends Modelica.Icons.ExamplesPackage; + annotation (Documentation(info=" +Package containing validation models for the base classes. +")); +end Validation; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order new file mode 100644 index 00000000000..52432234fee --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order @@ -0,0 +1 @@ +IdealUser diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo new file mode 100644 index 00000000000..1b2cf6c94c0 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo @@ -0,0 +1,7 @@ +within Buildings.Experimental.DHC.Plants.Cooling; +package BaseClasses "Package containing base classes" + extends Modelica.Icons.BasesPackage; + annotation (Documentation(info=" +Package containing base classes. +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order new file mode 100644 index 00000000000..01f48590eca --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order @@ -0,0 +1,6 @@ +IdealUser +ParallelJunctions +ParallelPipes +ReversibleConnection +TankBranch +Validation diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo new file mode 100644 index 00000000000..2aadc504143 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo @@ -0,0 +1,415 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block FlowControl + "This block controls the flow at the primary and secondary pumps" + extends Modelica.Blocks.Icons.Block; + + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal + "Nominal mass flow rate of the chiller loop" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal + "Nominal mass flow rate of the tank branch" + annotation(Dialog(group="Nominal values")); + + parameter Boolean use_outFil=true + "= true, if output is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filter")); + + Modelica.Blocks.Interfaces.IntegerInput com + "Command: 1 = charge tank, 2 = no command, 3 = discharge tank" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}), + iconTransformation(extent={{-120,30},{-100,50}}))); + Modelica.Blocks.Interfaces.BooleanInput chiEnaSta + "Chiller enable status, true if chiller is enabled" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}), + iconTransformation(extent={{-120,-10},{-100,10}}))); + Modelica.Blocks.Interfaces.BooleanInput hasLoa "Set to true if there is a load" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}), + iconTransformation(extent={{-120,-50},{-100,-30}}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for the secondary pump" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,130}),iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}))); + + Modelica.Blocks.Interfaces.RealOutput yVal "Valve normalized mass flow rate" + annotation (Placement(transformation(extent={{780,-80},{800,-60}}), + iconTransformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput mPriPum_flow(final unit="kg/s") + "Primary pump mass flow rate" + annotation (Placement(transformation(extent={{780,40},{800,60}}), + iconTransformation(extent={{100,70},{120,90}}))); + Modelica.Blocks.Interfaces.RealOutput ySecPum(final unit="1") + "Secondary pump normalized speed" annotation (Placement(transformation( + extent={{780,-20},{800,0}}), iconTransformation(extent={{100,30},{120, + 50}}))); + inner Modelica.StateGraph.StateGraphRoot stateGraphRoot "State graph root" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Modelica.StateGraph.InitialStep allOff(nOut=1, nIn=1) "Initial step, all off" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + + Modelica.StateGraph.Transition traChaLoc(condition=com == 1 and (not tanSta[2]) + and chiEnaSta) + "Transition: Charge tank command AND tank not charged AND chiller enabled" + annotation (Placement(transformation(extent={{260,60},{280,80}}))); + Modelica.StateGraph.Step steChaLoc(nIn=1, nOut=1) "Step: Local charging" + annotation (Placement(transformation(extent={{300,60},{320,80}}))); + Modelica.StateGraph.Transition traRes1(condition=not traChaLoc.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,60},{360,80}}))); + Modelica.StateGraph.Transition traChaRem(condition=com == 1 and (not tanSta[2]) + and not chiEnaSta) + "Transition: Charge tank command AND tank not charged AND chiller not enabled" + annotation (Placement(transformation(extent={{260,20},{280,40}}))); + Modelica.StateGraph.Step steChaRem(nIn=1, nOut=1) "Step: Remote charging" + annotation (Placement(transformation(extent={{300,20},{320,40}}))); + Modelica.StateGraph.Transition traRes2(condition=not traChaRem.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,20},{360,40}}))); + Modelica.StateGraph.Transition traProChi(condition=chiEnaSta) + "Transition: Chiller enabled" + annotation (Placement(transformation(extent={{260,-160},{280,-140}}))); + Modelica.StateGraph.Step steProChi(nIn=2, nOut=2) + "Step: Chiller produces CHW" + annotation (Placement(transformation(extent={{300,-160},{320,-140}}))); + Modelica.StateGraph.Transition traRes4(condition=not traPro.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,-160},{360,-140}}))); + Modelica.StateGraph.Transition traProTan(condition=com == 3 and (not tanSta[1])) + "Transition: Tank commanded to discharge AND is not empty" + annotation (Placement(transformation(extent={{260,-80},{280,-60}}))); + Modelica.StateGraph.Step steProTan(nIn=2, nOut=2) "Step: Tank produces CHW" + annotation (Placement(transformation(extent={{300,-80},{320,-60}}))); + Modelica.StateGraph.Transition traRes3(condition=not traPro.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,-80},{360,-60}}))); + Modelica.Blocks.Sources.BooleanExpression expPriPumFlo( + y=steChaLoc.active or steProChi.active) + "Expression for local charging OR chiller output" + annotation (Placement(transformation(extent={{700,40},{720,60}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal swiPriPum(realTrue= + mChi_flow_nominal, realFalse=0) "Switch for primary pump flow" + annotation (Placement(transformation(extent={{740,40},{760,60}}))); + Modelica.Blocks.Sources.BooleanExpression expSecPum(y=stePumSecOn.active) + "Expression for tank output or chiller output" + annotation (Placement(transformation(extent={{700,-20},{720,0}}))); + Modelica.Blocks.Sources.BooleanExpression expVal(y=steChaRem.active) + "Boolean expression for remotely charging the tank" + annotation (Placement(transformation(extent={{700,-80},{720,-60}}))); + Modelica.StateGraph.Alternative alt(nBranches=3) + "Alternative: Tank charging or plant outputting CHW" + annotation (Placement(transformation(extent={{-8,-200},{646,100}}))); + + Buildings.Controls.OBC.CDL.Continuous.Switch swiSecPum + "Switch for secondary pump flow" + annotation (Placement(transformation(extent={{740,-20},{760,0}}))); + Modelica.Blocks.Sources.Constant zer(final k=0) "Constant zero" + annotation (Placement(transformation(extent={{700,-50},{720,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal swiVal(realTrue= + mTan_flow_nominal, realFalse=0) "Switch for valve flow" + annotation (Placement(transformation(extent={{740,-80},{760,-60}}))); + Modelica.Blocks.Interfaces.BooleanInput tanSta[2] + "Tank status - 1: is empty; 2: is charged; can be both false" annotation ( + Placement(transformation(extent={{-120,-130},{-100,-110}}), + iconTransformation(extent={{-120,-90},{-100,-70}}))); + Modelica.StateGraph.Step stePumSecOn(nOut=1, nIn=1) "Step: Secondary pump on" + annotation (Placement(transformation(extent={{300,-40},{320,-20}}))); + Modelica.StateGraph.Transition traPro(condition=hasLoa and (traProTan.condition + or traProChi.condition)) + "Transition: Has load and the plant can produce CHW via either the chiller or the tank" + annotation (Placement(transformation(extent={{80,-100},{100,-80}}))); + Modelica.StateGraph.Parallel parallel(nBranches=2) + "Parallel states of the components in the primary and secondary loops" + annotation (Placement(transformation(extent={{116,-174},{510,-6}}))); + Modelica.StateGraph.Transition traTanToChi(condition=(not traProTan.condition) + and traProChi.condition) + "Transition: Tank no longer available (empty or commanded off) AND chiller available" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={280,-110}))); + Modelica.StateGraph.Alternative altTanCha1(nBranches=2) + "Alternative: Tank charging locally or remotely" + annotation (Placement(transformation(extent={{222,-170},{398,-50}}))); + Modelica.StateGraph.Step steRou1(nIn=1, nOut=1) "A step for routing only" + annotation (Placement(transformation(extent={{180,-120},{200,-100}}))); + Modelica.StateGraph.Step steRou2(nIn=1, nOut=1) "A step for routing only" + annotation (Placement(transformation(extent={{420,-120},{440,-100}}))); + Modelica.StateGraph.Transition traRou(final condition=true) + "A routing transition, always true" + annotation (Placement(transformation(extent={{540,-100},{560,-80}}))); + Modelica.StateGraph.Transition traChiToTan(condition=traProTan.condition) + "Transition: Production priority handed to tank whenever possible" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={340,-110}))); + Modelica.Blocks.Interfaces.BooleanOutput isChaRem + "Is operated for remote charging" annotation (Placement(transformation( + extent={{780,-140},{800,-120}}), iconTransformation(extent={{100,-50}, + {120,-30}}))); + Modelica.Blocks.Sources.BooleanExpression booleanExpression(y=steChaRem.active) + annotation (Placement(transformation(extent={{700,-140},{720,-120}}))); +equation + connect(traChaLoc.outPort,steChaLoc. inPort[1]) + annotation (Line(points={{271.5,70},{299,70}}, color={0,0,0})); + connect(steChaLoc.outPort[1], traRes1.inPort) + annotation (Line(points={{320.5,70},{346,70}}, color={0,0,0})); + connect(traChaRem.outPort,steChaRem. inPort[1]) + annotation (Line(points={{271.5,30},{299,30}}, color={0,0,0})); + connect(steChaRem.outPort[1], traRes2.inPort) + annotation (Line(points={{320.5,30},{346,30}}, color={0,0,0})); + connect(traProChi.outPort,steProChi. inPort[1]) + annotation (Line(points={{271.5,-150},{286,-150},{286,-150.25},{299,-150.25}}, + color={0,0,0})); + connect(traProTan.outPort,steProTan. inPort[1]) + annotation (Line(points={{271.5,-70},{286,-70},{286,-70.25},{299,-70.25}}, + color={0,0,0})); + connect(expPriPumFlo.y, swiPriPum.u) + annotation (Line(points={{721,50},{738,50}}, color={255,0,255})); + connect(alt.inPort, allOff.outPort[1]) + annotation (Line(points={{-17.81,-50},{-39.5,-50}}, + color={0,0,0})); + connect(alt.outPort, allOff.inPort[1]) annotation (Line(points={{652.54,-50},{ + 652.54,114},{-80,114},{-80,-50},{-61,-50}}, + color={0,0,0})); + connect(mPriPum_flow, swiPriPum.y) + annotation (Line(points={{790,50},{762,50}}, color={0,0,127})); + connect(expSecPum.y, swiSecPum.u2) + annotation (Line(points={{721,-10},{738,-10}}, color={255,0,255})); + connect(swiSecPum.u1, yPum) annotation (Line(points={{738,-2},{730,-2},{730, + 20},{680,20},{680,130},{-110,130}}, color={0,0, + 127})); + connect(ySecPum, swiSecPum.y) + annotation (Line(points={{790,-10},{762,-10}}, color={0,0,127})); + connect(zer.y, swiSecPum.u3) + annotation (Line(points={{721,-40},{738,-40},{738,-18}}, color={0,0,127})); + connect(swiVal.u, expVal.y) + annotation (Line(points={{738,-70},{721,-70}}, color={255,0,255})); + connect(swiVal.y, yVal) + annotation (Line(points={{762,-70},{790,-70}}, color={0,0,127})); + connect(traPro.outPort, parallel.inPort) + annotation (Line(points={{91.5,-90},{110.09,-90}},color={0,0,0})); + connect(parallel.split[1], stePumSecOn.inPort[1]) annotation (Line(points={{160.325, + -111},{160.325,-70},{160,-70},{160,-30},{299,-30}}, + color={0,0,0})); + connect(stePumSecOn.outPort[1], parallel.join[1]) annotation (Line(points={{320.5, + -30},{466,-30},{466,-111},{465.675,-111}}, color={0,0,0})); + connect(traTanToChi.outPort, steProChi.inPort[2]) annotation (Line(points={{280, + -111.5},{280,-149.75},{299,-149.75}}, color={0,0,0})); + connect(traProTan.inPort, altTanCha1.split[1]) annotation (Line(points={{266,-70}, + {240,-70},{240,-98},{240.48,-98},{240.48,-125}}, + color={0,0,0})); + connect(traRes3.outPort, altTanCha1.join[1]) annotation (Line(points={{351.5,-70}, + {379.52,-70},{379.52,-125}}, color={0,0,0})); + connect(traProChi.inPort, altTanCha1.split[2]) annotation (Line(points={{266,-150}, + {240,-150},{240,-106},{240.48,-106},{240.48,-95}}, + color={0,0,0})); + connect(traRes4.outPort, altTanCha1.join[2]) annotation (Line(points={{351.5,-150}, + {379.52,-150},{379.52,-95}}, color={0,0, + 0})); + connect(steRou1.outPort[1], altTanCha1.inPort) + annotation (Line(points={{200.5,-110},{219.36,-110}}, color={0,0,0})); + connect(altTanCha1.outPort,steRou2. inPort[1]) + annotation (Line(points={{399.76,-110},{419,-110}}, color={0,0,0})); + connect(steRou1.inPort[1], parallel.split[2]) annotation (Line(points={{179,-110}, + {160,-110},{160,-70},{160.325,-70},{160.325,-69}}, color={0,0,0})); + connect(steRou2.outPort[1], parallel.join[2]) annotation (Line(points={{440.5, + -110},{465.675,-110},{465.675,-69}}, color={0,0,0})); + connect(parallel.outPort, traRou.inPort) + annotation (Line(points={{513.94,-90},{546,-90}}, color={0,0,0})); + connect(traChaLoc.inPort, alt.split[1]) annotation (Line(points={{266,70},{60, + 70},{60,-100},{60.67,-100}}, color={0,0,0})); + connect(traChaRem.inPort, alt.split[2]) annotation (Line(points={{266,30},{60.67, + 30},{60.67,-50}}, color={0,0,0})); + connect(traRes1.outPort, alt.join[1]) annotation (Line(points={{351.5,70},{578, + 70},{578,-100},{577.33,-100}}, color={0,0,0})); + connect(traRes2.outPort, alt.join[2]) annotation (Line(points={{351.5,30},{577.33, + 30},{577.33,-50}}, color={0,0,0})); + connect(traPro.inPort, alt.split[3]) annotation (Line(points={{86,-90},{60.67, + -90},{60.67,1.42109e-14}}, + color={0,0,0})); + connect(traRou.outPort, alt.join[3]) annotation (Line(points={{551.5,-90},{576, + -90},{576,1.42109e-14},{577.33,1.42109e-14}}, + color={0,0,0})); + connect(booleanExpression.y, isChaRem) + annotation (Line(points={{721,-130},{790,-130}}, color={255,0,255})); + connect(traChiToTan.outPort, steProTan.inPort[2]) annotation (Line(points={{ + 340,-108.5},{340,-90},{290,-90},{290,-69.75},{299,-69.75}}, color={0, + 0,0})); + connect(steProChi.outPort[1], traChiToTan.inPort) annotation (Line(points={{ + 320.5,-150.125},{320.5,-150},{340,-150},{340,-114}}, color={0,0,0})); + connect(steProChi.outPort[2], traRes4.inPort) annotation (Line(points={{320.5, + -149.875},{334,-149.875},{334,-150},{346,-150}}, color={0,0,0})); + connect(steProTan.outPort[1], traTanToChi.inPort) annotation (Line(points={{ + 320.5,-70.125},{320.5,-70},{330,-70},{330,-96},{280,-96},{280,-106}}, + color={0,0,0})); + connect(steProTan.outPort[2], traRes3.inPort) annotation (Line(points={{320.5, + -69.875},{334,-69.875},{334,-70},{346,-70}}, color={0,0,0})); + annotation (Diagram(coordinateSystem(extent={{-100,-220},{780,140}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ + Rectangle(extent={{-20,80},{20,40}}, lineColor={28,108,200}), + Line(points={{-40,-20},{-40,20},{40,20},{40,-20}}, color={28,108,200}), + Line(points={{0,40},{0,20}}, color={28,108,200}), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={34,-16}, + rotation=180), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={-46,-16}, + rotation=180), + Rectangle( + extent={{-80,-38},{80,-42}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{20,-20},{60,-60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{58,-40},{40,-20},{40,-60},{58,-40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,-20},{-20,-60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{-22,-40},{-40,-20},{-40,-60},{-22,-40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,-42},{2,-80}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), +Documentation(info=" +

+This block implements a state graph to control the flows of the storage plant. +It receives two tank status Boolean signals indicating that the tank +is charged or empty. These two signals can be both false indicating an +in-between state. The block can receive one of the following commands: +

+
    +
  1. +Charge tank, +
  2. +
  3. +No command, and +
  4. +
  5. +Discharge tank. +
  6. +
+

+The command to tank may be disregarded. For example, if the +tank is receiving a discharge command but it is already empty, it will not +discharge which would let warm return water directly into the supply side. +

+

+The system transitions among the following states: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionTransition inTransition out
All Off
(Initial Step)
All off. This is the initial step.--
Local ChargingCharge the tank with the local chiller.\"Charge tank\" command
AND tank is not charged yet
AND chiller is enabled.
This transition takes priority
over the one below.1
The in-transition condition becomes false.
Remote ChargingCharge the tank with the remote chiller.Same as above except that
the chiller is not enabled.
The in-transition condition becomes false.
Secondary Pump OnTurn on the secondary pump.
This step is in parallel with the two below.2
The district has load AND
the additional conditions of
either step below become true.
Both steps below are no longer active (implicit).
Tank ProducingThe tank produces CHW to the district.
This step is in parallel with \"secondary pump on\".
The district has load AND
\"Discharge tank\" command AND
tank not empty.
This transition takes priority
over the one below.
To \"chiller producing\": The in-transition condition becomes false AND
The chiller is enabled.
This transition takes priority over the one below.
To initial step: No load OR the in-transition conditions
of \"tank producing\" and \"chiller producing\" are both false
(i.e. neither tank or chiller is available).
Chiller ProducingThe chiller produces CHW to the district.
This step is in parallel with \"secondary pump on\".
The district has load AND
the chiller is enabled.
To \"tank producing\": The condition for in-transition of
\"tank producing\" becomes true.
This transition takes priority over the one below.
To initial step: No load OR the in-transition conditions
of \"tank producing\" and \"chiller producing\" are both false.
+

+Notes: +

+
    +
  1. +Out-transitions from the same step have priorities. When the conditions of +more than one of them become true, the transition connected by a connector +with the lowest index in the array fires. +For example, even when the in-transition condition of \"chiller producing\" +becomes true, as long as the in-transition condition of \"tank producing\" +is also true, the latter fires because of priority. +
  2. +
  3. +Steps that are in parallel are and must be active at the same time. +When \"secondary pump on\" is active, either \"tank producing\" +or \"chiller producing\" is also active. +
  4. +
+", revisions=" + +")); +end FlowControl; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo new file mode 100644 index 00000000000..25f67a144d9 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo @@ -0,0 +1,51 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block SelectMin + "Block that includes or excludes storage plant pressure signal for min" + extends Modelica.Blocks.Icons.Block; + parameter Integer nin + "Number of input connections" + annotation (Dialog(connectorSizing=true),HideResult=true); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpUse[nin] + "Connector of Real input signals" annotation (Placement(transformation( + extent={{-120,60},{-100,40}}), iconTransformation(extent={{-140,80},{-100, + 40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpStoPla + "Connector of Real input signals" annotation (Placement(transformation( + extent={{-120,10},{-100,-10}}), iconTransformation(extent={{-140,20},{ + -100,-20}}))); + Modelica.Blocks.Interfaces.BooleanInput isChaRem + "The storage plant is in remote charging mode" annotation (Placement( + transformation(extent={{-120,-60},{-100,-40}}), iconTransformation( + extent={{-120,-70},{-100,-50}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation (Placement(transformation( + extent={{100,-10},{120,10}}), iconTransformation(extent={{100,-10},{120, + 10}}))); +equation + y = if isChaRem then + min(min(dpUse),dpStoPla) + else + min(dpUse); +annotation(defaultComponentName="selMin", + Icon(graphics={Line( + points={{-80,60},{-60,40},{-20,80}}, + color={0,140,72}, + thickness=5), Text( + extent={{-78,2},{-20,-78}}, + textColor={28,108,200}, + textString="?")}), + Documentation(info=" +

+This block finds the minimum value from pressure head signals. +The signal from the storage plant is included +only when the plant is in remote charging mode. +

+", revisions=" + +")); +end SelectMin; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo new file mode 100644 index 00000000000..9a1521c2b8d --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo @@ -0,0 +1,120 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block TankStatus "Returns the tank status from its temperature sensors" + + parameter Modelica.Units.SI.Temperature THig + "Higher threshold to consider the tank empty"; + parameter Modelica.Units.SI.Temperature TLow + "Lower threshold to consider the tank full"; + + parameter Modelica.Units.SI.TemperatureDifference dTHys(min=0.1) = 0.5 + "Deadband for hysteresis"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTan[2]( + each final quantity="Temperature", + each final unit="K", + each displayUnit="degC") "Temperatures at the tank 1: top; and 2: bottom" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,0}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,0}))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysCha( + final uLow=TLow, + final uHigh=TLow + dTHys) "Hysteresis, tank charged" + annotation (Placement(visible = true, transformation(origin = {0, 50}, extent = {{-40, -60}, {-20, -40}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysEmp( + final uHigh=THig, + final uLow=THig - dTHys) "Hysteresis, tank empty" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Not block" + annotation (Placement(visible = true, transformation(origin = {0, 50}, extent = {{20, -60}, {40, -40}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y[2] + "Tank status - y[1]=true is empty; y[2] = true is charged; both false means partially charged" + annotation (Placement(transformation(extent={{100,-10},{120,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanTopChe( + final k(final unit="K", displayUnit="degC") = THig) "Set point for top temperatuer of tank" + annotation( + Placement(visible = true, transformation(origin = {-70, -30}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanBotChe( + final k(final unit="K", displayUnit="degC") = TLow) "Set point for bottom temperature of tank" + annotation( + Placement(visible = true, transformation(origin = {-70, -70}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Greater gre + "Test for temperature set points" + annotation( + Placement(visible = true, transformation(origin = {-30, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Utilities.Assert assMes( + message = "THig must be greater than TLow.") + "Assertion if temperature set points are not correct" + annotation( + Placement(visible = true, transformation(origin = {10, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); +equation + connect(hysCha.y, not1.u) + annotation (Line(points={{-18,0},{18,0}}, + color={255,0,255})); + connect(TTan[1],hysCha. u) annotation (Line(points={{-110,-2.5},{-52,-2.5},{-52, + 0},{-42,0}}, color={0,0,127})); + connect(TTan[2],hysEmp. u) annotation (Line(points={{-110,2.5},{-52,2.5},{-52, + 50},{-42,50}}, + color={0,0,127})); + connect(hysEmp.y, y[1]) annotation (Line(points={{-18,50},{60,50},{60,0},{110, + 0},{110,-2.5}}, color={255,0,255})); + connect(not1.y, y[2]) annotation (Line(points={{42,0},{60,0},{60,2.5},{110, + 2.5}}, color={255,0,255})); + connect(TTanTopChe.y, gre.u1) annotation( + Line(points = {{-58, -30}, {-50, -30}, {-50, -50}, {-42, -50}}, color = {0, 0, 127})); + connect(TTanBotChe.y, gre.u2) annotation( + Line(points = {{-58, -70}, {-52, -70}, {-52, -58}, {-42, -58}}, color = {0, 0, 127})); + connect(gre.y, assMes.u) annotation( + Line(points = {{-18, -50}, {-2, -50}}, color = {255, 0, 255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-42,72},{40,-72}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-30,-64},{28,-28}}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-30,-20},{28,16}}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-24,54},{22,30}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + defaultComponentName="tanSta", + Documentation(info=" +

+This model outputs tank status signals using the temperatures +at the CHW tank top and the tank bottom as input. +The status has two separate boolean signals indicating whether the tank is +charged or empty (of cooling). The two output signals can be both false, +indicating an in-between state, but they can never both be true. +

+", +revisions=" + +")); +end TankStatus; \ No newline at end of file diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo new file mode 100644 index 00000000000..0b6d1af89ab --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo @@ -0,0 +1,47 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation; +model TankStatus "Validation model for tank status controller" + extends Modelica.Icons.Example; + Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus tanSta( + TLow=280.15, + THig=286.15, + dTHys=1) "Tank status" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanBot( + table=[0,273.15 + 11; 0.25,273.15 + 13.5; 0.5,273.15 + 12.5; 0.75,273.15 + 13.5; 1,273.15 + 11]) + "Temperature at tank bottom" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanTop( + table=[0,273.15 + 9; 0.25,273.15 + 6.5; + 0.5,273.15 + 7.5; 0.75,273.15 + 6.5; 1,273.15 + 9]) + "Temperature at tank top" + annotation (Placement(visible = true, transformation(origin = {0, 0}, extent = {{-60, 20}, {-40, 40}}, rotation = 0))); +equation + connect(TTanTop.y[1], tanSta.TTan[1]) annotation (Line(points={{-38,30},{-6,30},{ + -6,9.75},{-1,9.75}}, color={0,0,127})); + connect(TTanBot.y[1], tanSta.TTan[2]) annotation (Line(points={{-39,-10},{-6,-10}, + {-6,10.25},{-1,10.25}}, color={0,0,127})); + annotation(experiment(Tolerance=1e-6, StopTime=1), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos" + "Simulate and Plot"), + Documentation( + revisions=" + +", + info=" +

+This model validates + +Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus. +Note that the output signals turn true as soon as their respective temperature +input crosses the threshold, but there is a delay for it to turn back to +false due to the hysteresis. +

+")); +end TankStatus; \ No newline at end of file diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order index 2eb6ae6fd99..ee4df749a4e 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order @@ -1,3 +1,4 @@ ChilledWaterBypass ChilledWaterPumpSpeed ChillerStage +TankStatus diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order index 25b544f937e..a72639ce742 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order @@ -1,4 +1,7 @@ ChilledWaterBypass ChilledWaterPumpSpeed ChillerStage +FlowControl +SelectMin +TankStatus Validation diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo new file mode 100644 index 00000000000..7c11ce6196f --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo @@ -0,0 +1,437 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Examples; +model StoragePlantDualSource + "Idealised district system model with two sources and three users" + extends Modelica.Icons.Example; + + package Medium = Buildings.Media.Water "Medium model for CHW"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + "Nominal mass flow rate, slightly larger than needed by one user load"; + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal=1 + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal=1 + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa")= + 300000 + "Nominal pressure difference"; + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")= + 7+273.15 + "Nominal temperature of CHW supply"; + +// First plant: chiller only + Buildings.Fluid.Sources.PropertySource_T chi1( + redeclare final package Medium = Medium, + final use_T_in=true) "Chiller 1 represented by an ideal temperature source" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-128,70}))); + Modelica.Blocks.Sources.Constant TSet1(k=T_CHWS_nominal) + "Constant CHW leaving temperature" + annotation (Placement(transformation(extent={{-178,56},{-158,76}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumSup1( + redeclare final package Medium = Medium, + final addPowerToMedium=false, + final m_flow_nominal=m_flow_nominal, + final dp_nominal=dp_nominal) "CHW supply pump for chi1" + annotation (Placement(transformation(extent={{-110,82},{-90,102}}))); + Buildings.Controls.Continuous.LimPID conPI_pumChi1( + final controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.2, + Ti=10, + final reverseActing=true) "PI controller" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={-130,150}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.SelectMin selMin_dp(nin=3) + "Min of pressure heads with the signal from storage plant optionally used" + annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); + +// Second plant: chiller and tank + Buildings.Experimental.DHC.Plants.Cooling.StoragePlant stoPla(redeclare + final package Medium = Medium, + mTan_flow_nominal=mTan_flow_nominal, + mChi_flow_nominal=mChi_flow_nominal, + dpPum_nominal=dp_nominal, + dpVal_nominal=0.5*dp_nominal, + T_CHWS_nominal=T_CHWS_nominal, + T_CHWR_nominal=T_CHWR_nominal) "Storage plant" annotation ( + Placement(transformation(rotation=0, extent={{-98,-100},{-78,-80}}))); + Buildings.Fluid.Sources.Boundary_pT bou( + p(final displayUnit="Pa") = 101325 + dp_nominal, + redeclare final package Medium = Medium, + nPorts=1) "Pressure boundary" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-88,-130}))); + Buildings.Fluid.Sources.PropertySource_T chi2( + redeclare final package Medium = Medium, + final use_T_in=true) "Chiller represented by an ideal temperature source" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-128,-90}))); + Modelica.Blocks.Sources.Constant TSet2(final k=T_CHWS_nominal) + "Constant CHW leaving temperature" + annotation (Placement(transformation(extent={{-180,-104},{-160,-84}}))); + Modelica.Blocks.Math.Gain gaiStoPla(final k=1/stoPla.dpVal_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-222,110}))); + +// Users + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse1( + redeclare final package Medium = Medium, + final m_flow_nominal=0.6*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,150}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse2( + redeclare final package Medium = Medium, + final m_flow_nominal=0.65*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse3( + redeclare final package Medium = Medium, + final m_flow_nominal=0.65*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-170}))); + Modelica.Blocks.Sources.Constant set_dpUse(final k=1) + "Normalized consumer differential pressure setpoint" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={-170,150}))); + Modelica.Blocks.Sources.TimeTable mLoa1_flow(table=[0,0; 1800,0; 1800,ideUse1.m_flow_nominal; + 7000,ideUse1.m_flow_nominal; 7000,0; 9000,0]) + "Cooling load of user 1 represented by flow rate" + annotation (Placement(transformation(extent={{80,180},{100,200}}))); + Modelica.Blocks.Sources.TimeTable mLoa2_flow(table=[0,0; 3500,0; 3500,ideUse2.m_flow_nominal; + 6500,ideUse2.m_flow_nominal; 6500,0; 9000,0]) + "Cooling load of user 2 represented by flow rate" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Modelica.Blocks.Sources.TimeTable mLoa3_flow(table=[0,0; 4500,0; 4500,ideUse3.m_flow_nominal; + 6000,ideUse3.m_flow_nominal; 6000,0; 9000,0]) + "Cooling load of user 3 represented by flow rate" + annotation (Placement(transformation(extent={{80,-140},{100,-120}}))); + Modelica.Blocks.Math.Gain gaiUse1(final k=1/ideUse1.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,154}))); + Modelica.Blocks.Math.Gain gaiUse2(final k=1/ideUse2.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,-6}))); + Modelica.Blocks.Math.Gain gaiUse3(final k=1/ideUse3.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,-166}))); + +// District pipe network + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunPla1( + redeclare final package Medium = Medium, + T1_start=T_CHWS_nominal, + T2_start=T_CHWR_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={10,70}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunUse2( + redeclare final package Medium = Medium, + T1_start=T_CHWR_nominal, + T2_start=T_CHWS_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={10,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunPla2( + redeclare final package Medium = Medium, + T1_start=T_CHWS_nominal, + T2_start=T_CHWR_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={10,-90}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS1U1( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,110}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS1U2( + redeclare package Medium = Medium, + m_flow_nominal=2*m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,30}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS2U2( + redeclare package Medium = Medium, + m_flow_nominal=2*m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,-50}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS2U3( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,-130}))); + + Modelica.Blocks.Routing.Multiplex muxDp(n=3) "Multiplexer block for routing" + annotation (Placement(transformation(extent={{238,140},{258,160}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMax mulMax_yVal_actual(nin=3) + "Position of the most open user control valve" + annotation (Placement(transformation(extent={{200,-220},{220,-200}}))); + Modelica.Blocks.Sources.IntegerTable com(table=[0,2; 200,1; 3000,2; 4000,3; + 6000,2; 7500,1]) + "Command: 1 = charge tank, 2 = no command, 3 = discharge from tank" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Modelica.Blocks.Sources.BooleanTable chiEnaSta(table={0,6000}, startValue= + false) "Chiller enable status, true if chiller is enabled" + annotation (Placement(transformation(extent={{-138,-60},{-118,-40}}))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys_yVal_actual(uLow=0.05, + uHigh=0.5) "Hysteresis for user control valve position" + annotation (Placement(transformation(extent={{240,-220},{260,-200}}))); + +equation + connect(set_dpUse.y,conPI_pumChi1.u_s) + annotation (Line(points={{-159,150},{-142,150}}, + color={0,0,127})); + connect(mLoa1_flow.y, ideUse1.mPre_flow) annotation (Line(points={{101,190},{110, + 190},{110,158},{119,158}}, + color={0,0,127})); + connect(mLoa2_flow.y, ideUse2.mPre_flow) annotation (Line(points={{101,30},{110, + 30},{110,-2},{119,-2}}, + color={0,0,127})); + connect(mLoa3_flow.y, ideUse3.mPre_flow) annotation (Line(points={{101,-130},{ + 110,-130},{110,-162},{119,-162}}, + color={0,0,127})); + connect(ideUse1.dp, gaiUse1.u) annotation (Line(points={{141,154},{190,154}}, + color={0,0,127})); + connect(ideUse2.dp, gaiUse2.u) annotation (Line(points={{141,-6},{190,-6}}, + color={0,0,127})); + connect(ideUse3.dp, gaiUse3.u) annotation (Line(points={{141,-166},{190,-166}}, + color={0,0,127})); + connect(parJunUse2.port_c2, ideUse2.port_a) annotation (Line(points={{20,-4},{ + 120,-4}}, color={0,127,255})); + connect(ideUse2.port_b,parJunUse2.port_c1) annotation (Line(points={{120,-16}, + {20,-16}}, color={0,127,255})); + connect(parPipS1U1.port_b2, parJunPla1.port_a1) + annotation (Line(points={{4,100},{4,80}}, color={0,127,255})); + connect(parJunPla1.port_b2, parPipS1U1.port_a1) + annotation (Line(points={{16,80},{16,100}}, color={0,127,255})); + connect(parJunPla1.port_b1, parPipS1U2.port_a2) + annotation (Line(points={{4,60},{4,40}}, color={0,127,255})); + connect(parPipS1U2.port_b2, parJunUse2.port_a2) + annotation (Line(points={{4,20},{4,0}}, color={0,127,255})); + connect(parJunUse2.port_b1, parPipS1U2.port_a1) + annotation (Line(points={{16,0},{16,20}}, color={0,127,255})); + connect(parPipS1U2.port_b1, parJunPla1.port_a2) + annotation (Line(points={{16,40},{16,60}}, color={0,127,255})); + connect(parJunUse2.port_b2, parPipS2U2.port_a2) + annotation (Line(points={{4,-20},{4,-40}}, color={0,127,255})); + connect(parPipS2U2.port_b1, parJunUse2.port_a1) + annotation (Line(points={{16,-40},{16,-20}}, color={0,127,255})); + connect(parPipS2U2.port_a1, parJunPla2.port_b2) + annotation (Line(points={{16,-60},{16,-80}}, color={0,127,255})); + connect(parJunPla2.port_a1, parPipS2U2.port_b2) + annotation (Line(points={{4,-80},{4,-60}}, color={0,127,255})); + connect(parPipS2U3.port_a2, parJunPla2.port_b1) + annotation (Line(points={{4,-120},{4,-100}}, color={0,127,255})); + connect(parJunPla2.port_a2, parPipS2U3.port_b1) + annotation (Line(points={{16,-100},{16,-120}}, color={0,127,255})); + connect(gaiUse1.y, muxDp.u[1]) annotation (Line(points={{213,154},{220,154},{ + 220,147.667},{238,147.667}}, + color={0,0,127})); + connect(gaiUse2.y, muxDp.u[2]) annotation (Line(points={{213,-6},{220,-6},{220, + 150},{238,150}}, color={0,0,127})); + connect(gaiUse3.y, muxDp.u[3]) annotation (Line(points={{213,-166},{220,-166}, + {220,152.333},{238,152.333}}, color={0,0,127})); + connect(ideUse1.yVal_actual, mulMax_yVal_actual.u[1]) annotation (Line(points={{141,158}, + {160,158},{160,-210},{180,-210},{180,-210.667},{198,-210.667}}, + color={0,0,127})); + connect(ideUse2.yVal_actual, mulMax_yVal_actual.u[2]) annotation (Line(points + ={{141,-2},{160,-2},{160,-210},{198,-210}}, color={0,0,127})); + connect(ideUse3.yVal_actual, mulMax_yVal_actual.u[3]) annotation (Line(points={{141, + -162},{160,-162},{160,-210},{180,-210},{180,-209.333},{198,-209.333}}, + color={0,0,127})); + connect(com.y, stoPla.com) annotation (Line(points={{-119,-20},{-86,-20},{-86, + -79}}, color={255,127,0})); + connect(chiEnaSta.y, stoPla.chiEnaSta) annotation (Line(points={{-117,-50},{-90, + -50},{-90,-79}}, color={255,0,255})); + connect(hys_yVal_actual.y, stoPla.hasLoa) annotation (Line(points={{262,-210}, + {262,-228},{-186,-228},{-186,-68},{-94,-68},{-94,-79}}, + color={255,0,255})); + connect(pumSup1.port_b, parJunPla1.port_c1) annotation (Line(points={{-90,92}, + {-80,92},{-80,76},{1.77636e-15,76}}, + color={0,127,255})); + connect(conPI_pumChi1.y, pumSup1.y) + annotation (Line(points={{-119,150},{-100,150},{-100,104}}, + color={0,0,127})); + connect(conPI_pumChi1.y, stoPla.yPum) annotation (Line(points={{-119,150},{-70, + 150},{-70,-70},{-82,-70},{-82,-79}}, + color={0,0,127})); + connect(pumSup1.port_a, chi1.port_b) + annotation (Line(points={{-110,92},{-128,92},{-128,80}}, + color={0,127,255})); + connect(chi1.port_a, parJunPla1.port_c2) annotation (Line(points={{-128,60},{-128, + 54},{-80,54},{-80,64},{-1.77636e-15,64}}, + color={0,127,255})); + connect(TSet1.y, chi1.T_in) annotation (Line(points={{-157,66},{-140,66}}, + color={0,0,127})); + connect(TSet2.y, chi2.T_in) annotation (Line(points={{-159,-94},{-140,-94}}, + color={0,0,127})); + connect(stoPla.port_b1, parJunPla2.port_c1) + annotation (Line(points={{-78,-84},{1.77636e-15,-84}}, + color={0,127,255})); + connect(parJunPla2.port_c2, stoPla.port_a2) + annotation (Line(points={{-1.77636e-15,-96},{-78,-96}}, + color={0,127,255})); + connect(stoPla.port_b2, chi2.port_a) annotation (Line(points={{-98,-96},{-112, + -96},{-112,-106},{-128,-106},{-128,-100}}, + color={0,127,255})); + connect(chi2.port_b, stoPla.port_a1) annotation (Line(points={{-128,-80},{-128, + -74},{-112,-74},{-112,-84},{-98,-84}}, + color={0,127,255})); + connect(bou.ports[1], stoPla.port_a2) annotation (Line(points={{-78,-130},{6,-130}, + {6,-96},{-78,-96}}, color={0,127,255})); + connect(parPipS1U1.port_a2, ideUse1.port_a) + annotation (Line(points={{4,120},{4,156},{120,156}}, color={0,127,255})); + connect(ideUse1.port_b, parPipS1U1.port_b1) + annotation (Line(points={{120,144},{16,144},{16,120}},color={0,127,255})); + connect(parPipS2U3.port_b2, ideUse3.port_a) annotation (Line(points={{4,-140}, + {4,-164},{120,-164}}, color={0,127,255})); + connect(parPipS2U3.port_a1, ideUse3.port_b) annotation (Line(points={{16,-140}, + {16,-176},{120,-176}},color={0,127,255})); + connect(stoPla.dp, gaiStoPla.u) annotation (Line(points={{-76,-88},{-64,-88},{ + -64,0},{-240,0},{-240,110},{-234,110}}, + color={0,0,127})); + connect(selMin_dp.y, conPI_pumChi1.u_m) + annotation (Line(points={{-159,110},{-130,110},{-130,138}}, + color={0,0,127})); + connect(gaiStoPla.y, selMin_dp.dpStoPla) annotation (Line(points={{-211,110},{ + -182,110}}, color={0,0,127})); + connect(stoPla.isChaRem, selMin_dp.isChaRem) annotation (Line(points={{-77,-92}, + {-58,-92},{-58,46},{-184,46},{-184,104},{-181,104}}, + color={255,0,255})); + connect(muxDp.y, selMin_dp.dpUse[1:3]) annotation (Line(points={{259,150},{ + 270,150},{270,208},{-200,208},{-200,116},{-182,116},{-182,116.667}}, + color={0,0,127})); + connect(mulMax_yVal_actual.y, hys_yVal_actual.u) + annotation (Line(points={{222,-210},{238,-210}}, color={0,0,127})); + annotation (experiment(Tolerance=1e-06, StopTime=9000), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos" + "Simulate and plot"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}})), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-300,-240},{300,220}})), + Documentation(info=" +

+The modelled system is described in the documentation of + +Buildings.Experimental.DHC.Plants.Cooling.StoragePlant. +

+

+The source blocks give the system the following operation schedule during +simulation: +

+ +

Implementation

+

+The chiller is implemented as an ideal temperature source using + +Buildings.Fluid.Sources.PropertySource_T. +Its outlet temperature is always at the prescribed value. +

+", revisions=" + +")); +end StoragePlantDualSource; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order index 88dc8cbedc7..e8ea19701cf 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order @@ -1 +1,2 @@ ElectricChillerParallel +StoragePlantDualSource diff --git a/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo b/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo new file mode 100644 index 00000000000..ea0c897470b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo @@ -0,0 +1,347 @@ +within Buildings.Experimental.DHC.Plants.Cooling; +model StoragePlant "Model of a storage plant with a chiller and a CHW tank" + + extends Buildings.Fluid.Interfaces.PartialFourPort( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= + mTan_flow_nominal+mChi_flow_nominal + "Nominal mass flow rate" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal(min=0) + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dpPum_nominal + "Nominal pressure difference for secondary pump sizing" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dpVal_nominal + "Nominal pressure difference for return valve sizing" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")= + 7+273.15 "Nominal temperature of CHW supply" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return" + annotation(Dialog(group="Nominal values")); + + Buildings.Fluid.Movers.Preconfigured.FlowControlled_m_flow pumPri( + redeclare final package Medium = Medium, + final addPowerToMedium=false, + final m_flow_nominal=mChi_flow_nominal, + final dp_nominal=chi2PreDro.dp_nominal) "Primary CHW pump" + annotation (Placement(transformation(extent={{-40,-14},{-20,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop chi2PreDro( + redeclare final package Medium = Medium, + final m_flow_nominal=mChi_flow_nominal, + dp_nominal=0.1*dpPum_nominal) "Pressure drop of the chiller loop" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-30,-60}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.TankBranch tanBra( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal, + final mChi_flow_nominal=mChi_flow_nominal, + final T_CHWS_nominal=T_CHWS_nominal, + final T_CHWR_nominal=T_CHWR_nominal, + VTan=0.8, + hTan=3, + dIns=0.3) "Tank branch, tank can be charged remotely" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ReversibleConnection + revCon(redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal, + final dpPum_nominal=dpPum_nominal, + final dpVal_nominal=dpVal_nominal, + final T_start=T_CHWS_nominal) + "Reversible connection" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl floCon( + final mChi_flow_nominal=mChi_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal) + "Control block for storage plant flows" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus tanSta( + TLow=T_CHWS_nominal + 0.5, + THig=T_CHWR_nominal - 0.5) "Tank status" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + Modelica.Blocks.Interfaces.BooleanInput chiEnaSta + "Chiller enable status, true if chiller is enabled" annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-60,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,110}))); + Modelica.Blocks.Interfaces.IntegerInput com + "Command: 1 = charge tank, 2 = no command, 3 = discharge from tank" + annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-40,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,110}))); + Modelica.Blocks.Interfaces.BooleanInput hasLoa + "Set to true if the district has a load" annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-80,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-60,110}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for the secondary pump" annotation ( + Placement(transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-20,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={60,110}))); + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare final package Medium = Medium) + "Relative pressure sensor" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={80,10}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput dp( + final quantity="PressureDifference", + final unit="Pa", + final displayUnit="Pa") + "Pressure drop accross the connection (measured)" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}), + iconTransformation(extent={{100,0},{140,40}}))); + Modelica.Blocks.Interfaces.BooleanOutput isChaRem + "Is operated for remote charging" annotation (Placement(transformation( + extent={{100,30},{120,50}}), iconTransformation(extent={{100,-30},{ + 120,-10}}))); +equation + connect(tanSta.y, floCon.tanSta) annotation (Line(points={{61,-70},{70,-70},{70, + -90},{-70,-90},{-70,42},{-61,42}}, color={255,0,255})); + connect(floCon.mPriPum_flow, pumPri.m_flow_in) + annotation (Line(points={{-39,58},{-30,58},{-30,8}}, color={0,0,127})); + connect(floCon.ySecPum,revCon. yPum) annotation (Line(points={{-39,54},{34,54}, + {34,36},{39,36}}, color={0,0,127})); + connect(floCon.yVal,revCon. yVal) annotation (Line(points={{-39,50},{30,50},{ + 30,24},{39,24}}, color={0,0,127})); + connect(tanBra.TTan,tanSta. TTan) annotation (Line(points={{21,-20},{30,-20},{ + 30,-70},{39,-70}}, color={0,0,127})); + connect(chiEnaSta, floCon.chiEnaSta) annotation (Line(points={{-60,110},{-60,80}, + {-76,80},{-76,50},{-61,50}}, + color={255,0,255})); + connect(com, floCon.com) annotation (Line(points={{-40,110},{-40,76},{-72,76}, + {-72,54},{-61,54}}, color={255,127,0})); + connect(hasLoa, floCon.hasLoa) annotation (Line(points={{-80,110},{-80,46},{-61, + 46}}, color={255, + 0,255})); + connect(yPum, floCon.yPum) annotation (Line(points={{-20,110},{-20,72},{-68,72}, + {-68,58},{-61,58}}, + color={0,0,127})); + connect(port_b2, chi2PreDro.port_b) annotation (Line(points={{-100,-60},{-40, + -60}}, color={0,127,255})); + connect(tanBra.port_a2, port_a2) annotation (Line(points={{20,-16},{80,-16},{80, + -60},{100,-60}}, color={0,127,255})); + connect(revCon.port_b, port_b1) annotation (Line(points={{60,30},{80,30},{80,60}, + {100,60}}, color={0,127,255})); + connect(port_a1, pumPri.port_a) annotation (Line(points={{-100,60},{-84,60},{ + -84,-4},{-40,-4}}, + color={0,127,255})); + connect(pumPri.port_b, tanBra.port_a1) annotation (Line(points={{-20,-4},{0, + -4}}, color={0,127,255})); + connect(tanBra.port_b2, chi2PreDro.port_a) annotation (Line(points={{0,-16},{ + -6,-16},{-6,-60},{-20,-60}}, + color={0,127,255})); + connect(tanBra.port_b1, revCon.port_a) annotation (Line(points={{20,-4},{34,-4}, + {34,30},{40,30}}, color={0,127,255})); + connect(port_b1, senRelPre.port_a) + annotation (Line(points={{100,60},{80,60},{80,20}}, color={0,127,255})); + connect(port_a2, senRelPre.port_b) annotation (Line(points={{100,-60},{80,-60}, + {80,-3.55271e-15}}, color={0,127,255})); + connect(senRelPre.p_rel, dp) annotation (Line(points={{89,10},{92,10},{92,-30}, + {110,-30}},color={0,0,127})); + connect(floCon.isChaRem, isChaRem) annotation (Line(points={{-39,46},{94,46}, + {94,40},{110,40}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(extent={{-100,-100},{100,100}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-100,62},{100,58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,-58},{100,-62}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{20,80},{60,40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{60,60},{40,80},{40,40},{60,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,80},{-20,40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{-20,60},{-40,80},{-40,40},{-20,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,58},{2,-58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-20,22},{20,-18}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-14,16},{14,16}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-14,-12},{14,-12}}, + color={0,0,0}, + thickness=0.5)}), + defaultComponentName="stoPla", + Documentation(info=" +

+This model encompasses the components of a chilled water storage plant. +It includes a flow-controlled primary pump, a stratefied +storage tank, a reversible connection with the district network, and related controls +to coordinate charging and discharging of the tank. +The chiller is intentionally excluded in this component so that it can be +otherwise chosen and configured. +The tank in this plant can be charged by its local chiller or by a remote +chiller on the same CHW district network. +

+

System Concept Example

+

+An example usage of this model within a district network is implemented in + +Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource. +Shown in the schematic below, it has two CHW plants and three users. +

+ +

+\"SystemConcept\" +

+

Control Signals

+

+The plants are controlled as follows: +

+ +

+\"ControlSignals\" +

+

Implementation

+

+The flow control of the storage plant is implemented as a state graph in + +Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl. +

+", revisions=" + +")); +end StoragePlant; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/package.order b/Buildings/Experimental/DHC/Plants/Cooling/package.order index 0d2af631a4f..4c109382837 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/package.order @@ -1,4 +1,6 @@ ElectricChillerParallel +StoragePlant Controls Subsystems Examples +BaseClasses diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio new file mode 100644 index 00000000000..21c1b64d440 --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png new file mode 100644 index 00000000000..41f065d4a23 Binary files /dev/null and b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png differ diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.svg b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.svg new file mode 100644 index 00000000000..beeac6354c3 --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.svg @@ -0,0 +1,3 @@ + + +
P1
P1
Reversible connection
Reversible connection
PI
PI
Min of
user pressure heads
Min of...
y
y
Command for tank:
- Charge
- No Command
- Discharge
Command for tank:...
Command for chiller
- Enable
- Disable
Command for chiller...
Max of
user valve position
Max of...
Tank status
Tank status
chi
ṁchi
y
y
Control Signals
Control Signals
val
ṁval
Chiller 1
Chille...
Chiller 2
Chille...
Ppri
Ppri
Psec
Psec
If plant 2 is producing CHW,
Psec uses the same y signal with P1;
Otherwise, y = 0.
If plant 2 is producing CHW,...
Check valve
Check valve
Flow Control
Flow Co...
Switch
Switch
Implemented as
ideal component
Implemented as...
Tank
Tank
Supply
Supply
Return
Return
Δp
Δp
Δp
Δp
Δp
Δp
To user
To user
To user
To user
To user
To user
Δp
Δp
The pressure head signal from the storage plant is only used when it is in remote charging mode.
The pressure...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio new file mode 100644 index 00000000000..36952c44e4a --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png new file mode 100644 index 00000000000..4b643363772 Binary files /dev/null and b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png differ diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.svg b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.svg new file mode 100644 index 00000000000..a8d5aa83f89 --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.svg @@ -0,0 +1,3 @@ + + +
System Concept
System Concept
discharge
discharge
Chiller 2
Chiller 2
Tank
Tank
charge
charge
Chiller 1
Chiller 1
User 1
User 1
Supply
Supply
Return
Return
User 2
User 2
User 3
User 3
P1
P1
Plant 1: chiller only
Plant 1: chiller only
Plant 2: chiller + storage tank
Plant 2: chiller + storage tank
Reversible connection
Reversible connection
Psec
Psec
Ppri
Ppri
Implemented as an ideal component with
a prescribed outlet temperature
Implemented as an ideal component with...
Check valve
Check valve
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt new file mode 100644 index 00000000000..28ee3f83e1d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt @@ -0,0 +1,17 @@ +last-generated=2023-04-29 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "0", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +ideUse.yVal_actual=[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, 5.709109902381897e-01, 9.223337769508362e-01, 9.889528155326843e-01, 9.985849857330322e-01, 9.997462630271912e-01, 9.999254941940308e-01, 9.999862909317017e-01, 9.999980330467224e-01, 9.99999463558197e-01, 9.999995231628418e-01, 9.999997615814209e-01, 9.999999403953552e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.595453381538391e-01, 3.418028950691223e-01, 2.484315037727356e-01, 1.845314353704453e-01, 1.341767460107803e-01, 9.249084442853928e-02, 5.690332874655724e-02, 2.583528868854046e-02, 5.550052039325237e-03, 9.339367388747633e-04, 5.348158883862197e-04, 4.273340164218098e-04, 3.285217098891735e-04, 2.587400667835027e-04, 2.109650813508779e-04, 1.76261950400658e-04, 1.499654026702046e-04, 1.294650719501078e-04, 1.12931702460628e-04, 9.922994649969041e-05, 8.766644896240905e-05, 7.782740431139246e-05, 6.937987927813083e-05, 6.203436350915581e-05, 5.557800977840088e-05] +mPre_flow.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +ideUse.senMasFlo.m_flow=[1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 2.594601511955261e-01, 8.397526741027832e-01, 9.781666398048401e-01, 9.972283840179443e-01, 9.995035529136658e-01, 9.998542070388794e-01, 9.999731183052063e-01, 9.999961853027344e-01, 9.99998927116394e-01, 9.999991059303284e-01, 9.999995827674866e-01, 9.999998211860657e-01, 9.999998807907104e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000011920929e+00, 1.00000011920929e+00, 1.00000011920929e+00, 1e+00, 1e+00, 1e+00, 2.485327124595642e-01, 1.073994040489197e-01, 7.464776188135147e-02, 5.816887691617012e-02, 4.778144136071205e-02, 4.059804603457451e-02, 3.532535210251808e-02, 3.128470480442047e-02, 1.584611088037491e-02, 5.811447626911104e-04, 2.048502065008506e-04, 1.362958137178794e-04, 8.554958185413852e-05, 5.679949754267e-05, 4.049954804941081e-05, 3.03837896353798e-05, 2.36848572967574e-05, 1.904043710965198e-05, 1.566361606819555e-05, 1.311470714426832e-05, 1.11395784188062e-05, 9.585862244421151e-06, 8.344948582816869e-06, 7.335804184549488e-06, 6.50249876343878e-06] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt new file mode 100644 index 00000000000..50ae8cbfbaf --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt @@ -0,0 +1,14 @@ +last-generated=2023-08-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +tanSta.TTan[1]=[2.821499938964844e+02, 2.820499877907348e+02, 2.819500122025565e+02, 2.818500060968036e+02, 2.817499999910642e+02, 2.816499939039422e+02, 2.815499877795651e+02, 2.814500122100098e+02, 2.813500060856168e+02, 2.812500000357431e+02, 2.811499939114e+02, 2.810499877870116e+02, 2.80950012180183e+02, 2.808500060557855e+02, 2.807500000059572e+02, 2.806499939561471e+02, 2.805499877572257e+02, 2.804500122249028e+02, 2.803500061750017e+02, 2.802499999761713e+02, 2.801499939263157e+02, 2.800499877274398e+02, 2.799500121950987e+02, 2.798500061452159e+02, 2.797499999463854e+02, 2.796499938964844e+02, 2.796900024795322e+02, 2.797300109432728e+02, 2.797699890089061e+02, 2.79809997591954e+02, 2.798500060558582e+02, 2.798900146388696e+02, 2.799299927043757e+02, 2.7997000116828e+02, 2.800100097513278e+02, 2.800499878168884e+02, 2.800899962807017e+02, 2.801300048637495e+02, 2.801700134467973e+02, 2.80209991512267e+02, 2.802499999761713e+02, 2.802900085592191e+02, 2.803299866248889e+02, 2.80369995088593e+02, 2.804100036716409e+02, 2.804500122546887e+02, 2.804899902010148e+02, 2.805299987840626e+02, 2.805700073671104e+02, 2.806099853134365e+02, 2.806499938964844e+02, 2.806099853134371e+02, 2.80570007247968e+02, 2.805299986649208e+02, 2.804899903201571e+02, 2.80450012254688e+02, 2.80410003671641e+02, 2.803699950885935e+02, 2.803299865055462e+02, 2.802900084400771e+02, 2.802500000953135e+02, 2.802099915122662e+02, 2.80170013446797e+02, 2.801300048637498e+02, 2.800899962807026e+02, 2.800499876976553e+02, 2.800100098704698e+02, 2.799700012874225e+02, 2.799299927043753e+02, 2.798900146388695e+02, 2.798500060558589e+02, 2.798099974728117e+02, 2.797699891284846e+02, 2.797300110625789e+02, 2.796900024795316e+02, 2.796499938964844e+02, 2.797500000953135e+02, 2.798500062941425e+02, 2.799500124929716e+02, 2.800499875785135e+02, 2.801499937773426e+02, 2.80249999976171e+02, 2.803500061750007e+02, 2.804500123738297e+02, 2.805499880554809e+02, 2.806499936582008e+02, 2.807499998570299e+02, 2.808500060557861e+02, 2.80950012254688e+02, 2.810499879361572e+02, 2.811499941351317e+02, 2.812499997378881e+02, 2.813500059364625e+02, 2.81450012135437e+02, 2.815499878168342e+02, 2.81649994015808e+02, 2.817500002144552e+02, 2.818500058171388e+02, 2.819500120161134e+02, 2.820499876976553e+02, 2.821499938964844e+02] +tanSta.TTan[2]=[2.841499938964844e+02, 2.842500000022339e+02, 2.843500061079835e+02, 2.844500122137331e+02, 2.845499878019182e+02, 2.846499938890379e+02, 2.847500000134037e+02, 2.848500061005325e+02, 2.849500122249028e+02, 2.850499877572257e+02, 2.851499938815915e+02, 2.852500000059572e+02, 2.853500061303229e+02, 2.854500122546887e+02, 2.855499877870116e+02, 2.856499938369126e+02, 2.857500000357431e+02, 2.858500060856168e+02, 2.85950012135436e+02, 2.860499878168338e+02, 2.861499938666985e+02, 2.86250000065529e+02, 2.8635000611543e+02, 2.864500121652673e+02, 2.865499878466652e+02, 2.866499938964844e+02, 2.866099853134365e+02, 2.865700073671104e+02, 2.865299987840626e+02, 2.864899902010148e+02, 2.864500122546887e+02, 2.864100036716409e+02, 2.86369995088593e+02, 2.863299866248889e+02, 2.862900085592191e+02, 2.862499999761713e+02, 2.86209991512267e+02, 2.861700134467973e+02, 2.861300048637495e+02, 2.860899962807017e+02, 2.860499878168884e+02, 2.860100097513278e+02, 2.8597000116828e+02, 2.859299927043757e+02, 2.858900146388696e+02, 2.858500060558582e+02, 2.85809997591954e+02, 2.857699890089061e+02, 2.857300109432728e+02, 2.856900024795322e+02, 2.856499938964844e+02, 2.856900024795316e+02, 2.857300110625789e+02, 2.857699891284846e+02, 2.858099974728117e+02, 2.858500060558589e+02, 2.858900146388695e+02, 2.859299927043753e+02, 2.859700012874225e+02, 2.860100098704698e+02, 2.860499876976553e+02, 2.860899962807026e+02, 2.861300048637498e+02, 2.86170013446797e+02, 2.862099915122662e+02, 2.862500000953135e+02, 2.862900084400771e+02, 2.863299865055462e+02, 2.863699950885935e+02, 2.86410003671641e+02, 2.86450012254688e+02, 2.864899903201571e+02, 2.865299986649208e+02, 2.86570007247968e+02, 2.866099853134371e+02, 2.866499938964844e+02, 2.865499876976553e+02, 2.864500120161134e+02, 2.863500058171388e+02, 2.862500002144552e+02, 2.86149994015808e+02, 2.860499878168342e+02, 2.85950012135437e+02, 2.858500059364625e+02, 2.857499997378881e+02, 2.856499941351317e+02, 2.855499879361572e+02, 2.85450012254688e+02, 2.853500060557861e+02, 2.852499998570299e+02, 2.851499936582008e+02, 2.850499880554809e+02, 2.849500123738297e+02, 2.848500061750007e+02, 2.84749999976171e+02, 2.846499937773426e+02, 2.845499875785135e+02, 2.844500124929716e+02, 2.843500062941425e+02, 2.842500000953135e+02, 2.841499938964844e+02] +tanSta.THig=[2.861499938964844e+02, 2.861499938964844e+02] +tanSta.TLow=[2.801499938964844e+02, 2.801499938964844e+02] +tanSta.y[1]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +tanSta.y[2]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt new file mode 100644 index 00000000000..b2df3f00db3 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt @@ -0,0 +1,30 @@ +last-generated=2023-08-11 +statistics-initialization= +{ + "nonlinear": "4, 0, 0, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "5, 1", + "number of continuous time states": "36", + "numerical Jacobians": "0" +} +time=[0e+00, 9e+03] +pumSup1.m_flow=[1.251948894997101e-15, 4.36188792809844e-03, 4.386177752166986e-03, 4.38630860298872e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 3.800089657306671e-01, 4.489592313766479e-01, 4.499262869358063e-01, 4.499348402023315e-01, 4.499349594116211e-01, 4.499349892139435e-01, 4.499349892139435e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.595985114574432e-01, 6.60559356212616e-01, 6.584604978561401e-01, 6.591629385948181e-01, 6.591498255729675e-01, 6.591503024101257e-01, 6.591507196426392e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 7.451934218406677e-01, 7.68254816532135e-01, 7.674015164375305e-01, 7.67163097858429e-01, 7.671414017677307e-01, 7.671383023262024e-01, 7.67137885093689e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 1.590657353401184e+00, 1.330097436904907e+00, 1.303154468536377e+00, 1.288426280021667e+00, 1.281209945678711e+00, 1.260521411895752e+00, 7.029785513877869e-01, 6.587290167808533e-01, 6.423019766807556e-01, 6.335538029670715e-01, 6.096128821372986e-01, 4.530153870582581e-01, 7.905996590852737e-02, 4.825764149427414e-02, 3.567066788673393e-02, 2.875611186027527e-02, 2.436433359980583e-02, 9.086788296699524e-01, 9.974852204322815e-01, 9.988704919815063e-01, 9.988836646080017e-01, 9.988803267478943e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 7.193219065666199e-01, 1.424694620072842e-02, 4.443939309567213e-03] +stoPla.revCon.m_flow=[-1.251948471480628e-15, -4.356848541647196e-03, -4.381109029054642e-03, -4.381240345537663e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, 8.396399021148682e-02, 1.491357684135437e-01, 1.50062307715416e-01, 1.500702351331711e-01, 1.500703543424606e-01, 1.500703543424606e-01, 1.50070384144783e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.677525639533997e-01, 5.973073840141296e-01, 5.894901752471924e-01, 5.908799171447754e-01, 5.908508896827698e-01, 5.908516645431519e-01, 5.908519625663757e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 1.063051819801331e+00, 1.134200930595398e+00, 1.133249759674072e+00, 1.132898807525635e+00, 1.132867455482483e+00, 1.13286280632019e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, -4.866096191108227e-03, -5.854859948158264e-03, -5.88260544463992e-03, -5.924627650529146e-03, -5.93998609110713e-03, -6.020710803568363e-03, -6.739288102835417e-03, -6.66219973936677e-03, -6.680774502456188e-03, -6.681025493890047e-03, -6.705125328153372e-03, -6.369280628859997e-03, -4.459924530237913e-03, -4.415147006511688e-03, -4.403089638799429e-03, -4.397067241370678e-03, -4.393402952700853e-03, -9.005817174911499e-01, -9.973908662796021e-01, -9.988396167755127e-01, -9.988653659820557e-01, -9.988656640052795e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -7.193144559860229e-01, -1.424183044582605e-02, -4.438870586454868e-03] +stoPla.pumPri.m_flow=[0e+00, -7.655137285662842e-25, -5.562328056903466e-24, 9.999949932098389e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.404836312867701e-06, -8.566903630935485e-08, -5.760281585054372e-09, 1.332990162694614e-09, 9.998356103897095e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4.278268534108065e-05, -1.734497523386835e-08, 1.707441132925425e-10, -1.202411521045166e-11, 2.378950985856831e-12, -6.524704957095243e-14, 1.647896808618953e-19, -5.531267494952948e-22, 1.780610776813116e-22, -4.872776393501403e-22, -2.091037388001681e-22, 1.268337505389848e-22, -2.495585126872053e-21, 1.925133305629034e-20, -2.782137777842754e-21, 7.456368811956731e-23, 9.999979138374329e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3.696833970025182e-03, 7.78049402683223e-10, 1.118538161398672e-11, 6.607734514716898e-14, 1.244646204677513e-13, 1.080051341397622e-20, -6.679751698516519e-25, 1.8746875737661e-26, 1.407539861282563e-26, -2.35375972001891e-26, -2.0706267559274e-25, 3.461840277959799e-26, 4.373672642131672e-25, 1.670195413758975e-26, -2.43541737780537e-27, 6.614289000743127e-27, 2.078340529059259e-27, 1.006630296842251e-24, 1.947853075252315e-22, -1.665514203692942e-22, 1.928398528395666e-21, 2.564062191438876e-21, 8.589318853349389e-23, 3.553316031396213e-23, -1.951239087138577e-23, 4.060974292974078e-24, -7.548916080091088e-24, 2.493852800945962e-24, -5.39516172576944e-25, -3.909332411654107e-26, -9.069614562309241e-26, -9.57704543335067e-21, -1.399234520679952e-22, -5.66206680256196e-20] +stoPla.tanBra.mTan_flow=[-1.251948471480628e-15, -4.356848541647196e-03, -4.381109029054642e-03, -1.004376173019409e+00, -1.00438117980957e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -4.387645982205868e-03, -4.381155129522085e-03, -4.381235223263502e-03, -4.381242208182812e-03, -9.158716201782227e-01, -8.508642315864563e-01, -8.499376773834229e-01, -8.499297499656677e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499295711517334e-01, -8.499295711517334e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.322474360466003e-01, -4.026926159858704e-01, -4.105098247528076e-01, -4.091200828552246e-01, -4.091490805149078e-01, -4.091483652591705e-01, 5.90809166431427e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 1.063051819801331e+00, 1.134200930595398e+00, 1.133249759674072e+00, 1.132898807525635e+00, 1.132867455482483e+00, 1.13286280632019e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.32864236831665e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, -8.562929928302765e-03, -5.854860879480839e-03, -5.88260544463992e-03, -5.924627650529146e-03, -5.93998609110713e-03, -6.020710803568363e-03, -6.739288102835417e-03, -6.66219973936677e-03, -6.680774502456188e-03, -6.681025493890047e-03, -6.705125328153372e-03, -6.369280628859997e-03, -4.459924530237913e-03, -4.415147006511688e-03, -4.403089638799429e-03, -4.397067241370678e-03, -4.393402952700853e-03, -9.005817174911499e-01, -9.973908662796021e-01, -9.988396167755127e-01, -9.988653659820557e-01, -9.988656640052795e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -7.193144559860229e-01, -1.424183044582605e-02, -4.438870586454868e-03] +stoPla.revCon.pum.m_flow=[-7.669491331325522e-20, -2.796448534354568e-04, -2.812386082950979e-04, -2.812471939250827e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, 8.906047791242599e-02, 1.554799377918243e-01, 1.564358323812485e-01, 1.564440578222275e-01, 1.56444177031517e-01, 1.564441919326782e-01, 1.564442068338394e-01, 1.564442366361618e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.741160601377487e-01, 6.03976309299469e-01, 5.962510108947754e-01, 5.976431965827942e-01, 5.976141691207886e-01, 5.976149439811707e-01, 5.976152420043945e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 1.069544196128845e+00, 1.140810370445251e+00, 1.13988471031189e+00, 1.139533758163452e+00, 1.1395024061203e+00, 1.139497756958008e+00, 1.13949728012085e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, -3.130906843580306e-04, -3.780505794566125e-04, -3.798731777351349e-04, -3.826336178462952e-04, -3.836425021290779e-04, -3.889453073497862e-04, -4.361482860986143e-04, -4.310844233259559e-04, -4.32304572314024e-04, -4.323210450820625e-04, -4.339041479397565e-04, -4.118427459616214e-04, -2.864160924218595e-04, -2.834745973814279e-04, -2.826825075317174e-04, -2.822869282681495e-04, -2.820461813826114e-04, -5.96010941080749e-04, -7.001044577918947e-04, -7.030200795270503e-04, -7.030804408714175e-04, -7.030811393633485e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -3.634325694292784e-04, -2.836755884345621e-04, -2.812723105307668e-04] +stoPla.revCon.val.m_flow=[1.251871709119783e-15, 4.077203571796417e-03, 4.099870566278696e-03, 4.099993035197258e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 5.096489563584328e-03, 6.34417962282896e-03, 6.373522337526083e-03, 6.373824086040258e-03, 6.373826414346695e-03, 6.373827811330557e-03, 6.373827811330557e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.36349618434906e-03, 6.668939720839262e-03, 6.760831922292709e-03, 6.76325149834156e-03, 6.763278972357512e-03, 6.763281300663948e-03, 6.763295270502567e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.492289714515209e-03, 6.609420757740736e-03, 6.634950172156096e-03, 6.634971126914024e-03, 6.634998135268688e-03, 6.634990219026804e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 4.55300509929657e-03, 5.476809106767178e-03, 5.502732470631599e-03, 5.541994236409664e-03, 5.556343588978052e-03, 5.631765350699425e-03, 6.303139962255955e-03, 6.231115665286779e-03, 6.248469930142164e-03, 6.248704623430967e-03, 6.271220743656158e-03, 5.957437679171562e-03, 4.173508379608393e-03, 4.131672438234091e-03, 4.120406694710255e-03, 4.114780575037003e-03, 4.111356567591429e-03, 8.99985671043396e-01, 9.966908097267151e-01, 9.98136579990387e-01, 9.981622695922852e-01, 9.98162567615509e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 7.189509868621826e-01, 1.395815424621105e-02, 4.157598130404949e-03] +ideUse1.yVal_actual=[0e+00, 4.225701525366099e-16, 3.248267334758213e-18, 2.12277809635835e-20, 1.187043937603218e-22, 7.125864964978258e-24, -3.136313497413405e-25, 4.38600500327048e-27, 5.382060148210718e-27, 7.610204009104029e-22, 2.013213217853978e-21, 2.102508536279749e-21, -8.14542035963299e-21, 4.081129105345405e-22, -8.875944836829761e-22, 5.533854201415604e-23, 2.185539769003537e-23, -2.268197087969138e-23, -2.831629161540048e-26, -1.196320736128484e-26, -1.192742897552197e-24, 9.083338975906372e-01, 9.993342757225037e-01, 9.999970197677612e-01, 9.999998211860657e-01, 1e+00, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999999403953552e-01, 1e+00, 9.998401999473572e-01, 9.999956488609314e-01, 9.999973773956299e-01, 9.999991655349731e-01, 9.999998807907104e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.993391036987305e-01, 9.953336119651794e-01, 9.945324659347534e-01, 9.944605827331543e-01, 9.944503903388977e-01, 9.944490790367126e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.975914359092712e-01, 9.906269311904907e-01, 9.992164373397827e-01, 9.994162917137146e-01, 9.997254014015198e-01, 9.990863800048828e-01, 9.756444096565247e-01, 9.989365935325623e-01, 9.995733499526978e-01, 9.997709393501282e-01, 9.992998838424683e-01, 8.508997559547424e-01, 3.787515163421631e-01, 2.427490651607513e-01, 1.562414169311516e-01, 9.237556904554367e-02, 4.158150777220726e-02, 2.772929146885872e-03, 1.471120485803112e-04, 5.013482223148458e-05, 1.523511036793934e-05, 6.769570290998672e-07, 6.590424206365242e-09, -1.610775748894788e-11, 8.592419831199294e-11, -7.301870046105829e-12, 3.461150420089321e-12, 1.579410295040815e-13, -8.477918210124044e-14, 6.83267258418975e-14, -1.726615676605689e-14, 7.618812332865939e-15, 7.858076852910854e-17, 4.472415645588195e-19] +ideUse2.yVal_actual=[0e+00, 4.576128320068064e-16, 3.524225333658713e-18, 2.305016325061438e-20, -2.442706909492649e-22, -1.177138798128871e-21, -1.948471668419753e-22, 4.245879613066054e-22, 9.70434218844308e-22, 1.63959516259906e-21, 6.183114090419577e-21, -8.527780760766184e-22, -3.941001155287228e-22, 1.850555476073335e-22, -1.962884851355733e-21, 3.341025862518804e-22, 1.338701247563381e-22, 4.88541321945101e-24, 9.901265933109044e-27, 8.187338351065671e-25, -2.066939225625944e-24, 1.134760533968125e-20, -2.460669905917611e-20, -3.343737272113357e-21, -4.662120302657504e-23, 7.138317765455896e-22, 1.710929115333133e-22, 8.2481287267308e-20, 1.007149910685273e-19, 8.044404158499219e-21, -2.370425308881642e-20, -1.461914424421326e-20, 6.743694149208694e-21, 1.182822635614297e-20, -3.947313557141934e-22, 3.912370805572988e-23, -1.861344758228479e-23, -2.069187331294404e-25, -1.246234127696995e-22, 5.194651335477829e-02, 9.179385304450989e-01, 9.059048891067505e-01, 9.070526957511902e-01, 9.070228934288025e-01, 9.070227146148682e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.102416634559631e-01, 9.078453779220581e-01, 9.056963324546814e-01, 9.056738615036011e-01, 9.056681394577026e-01, 9.056686162948608e-01, 9.056682586669922e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.538668394088745e-01, 9.307358860969543e-01, 9.324745535850525e-01, 9.302374720573425e-01, 9.298267960548401e-01, 9.281343817710876e-01, 4.057694375514984e-01, 2.169910073280334e-01, 1.146358475089073e-01, 4.258608818054199e-02, 1.526029082015157e-03, 2.200460294261575e-04, 1.260622520931065e-04, 8.423053805017844e-05, 5.899481038795764e-05, 4.201261617708951e-05, 2.974243579956237e-05, 1.678318039921578e-05, 1.811347488001047e-06, 2.356344097620422e-08, 3.374529822242067e-10, 4.814118288037905e-12, 6.514342017205355e-14, 1.16113171645839e-15, -1.164604789770149e-16, 5.681805027697731e-17, -2.999767182701105e-17, 4.822474965303033e-18, -1.119741367118386e-18, 6.044529914647191e-20, 1.103207164046793e-19, -1.565959528313718e-20, 6.006683796488637e-22, -9.874772116028097e-23] +ideUse3.yVal_actual=[0e+00, 4.574473958842958e-16, 3.522951475515382e-18, 2.304150531916385e-20, 1.28752954458125e-22, 7.573564827935623e-24, -3.268718623455061e-25, 4.773036803406577e-27, 1.280203151149512e-26, -1.710497731924013e-27, 7.775052852311644e-28, -9.521214449389209e-29, 4.612950388830189e-29, -5.264373773490912e-30, 2.685206572024026e-30, -2.896991486570448e-31, -1.314784083725234e-31, 7.492399718258339e-24, 1.196377050320058e-26, 1.056613361961766e-25, -3.110164730557591e-25, 2.068127024534988e-21, 5.023970105684786e-22, 2.143343914727628e-22, 8.931597553743553e-24, 1.449824422967265e-23, 2.233865867684807e-21, 1.040129698642995e-20, 3.185790405710212e-21, -4.128929847907347e-23, 1.217485890609079e-22, 7.509304534140682e-23, -3.463950712609156e-23, -6.083266791820727e-23, 9.092111026433398e-25, -2.282146199811799e-24, 4.601649992474084e-25, 9.608667402363884e-24, 1.41125559336138e-23, 1.063190629781857e-21, 8.76299146626052e-21, 1.052715162805697e-21, -3.599976055845656e-21, 4.274754052752687e-20, -1.227717479658668e-21, 5.209618800962199e-23, 1.91067411403736e-25, 8.667093478299079e-25, -1.430226021802522e-24, 2.686931240664236e-24, -2.279048934682675e-24, 9.123831391334534e-01, 9.990750551223755e-01, 9.999788403511047e-01, 9.999955296516418e-01, 9.999999403953552e-01, 9.999998211860657e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 7.875791788101196e-01, 3.42457503080368e-01, 1.97095885872842e-01, 1.066487282514572e-01, 4.046548530459404e-02, 1.517230411991477e-03, 2.144882746506482e-04, 1.04484184703324e-04, 5.865292041562498e-05, 3.437770646996796e-05, 1.926576260302681e-05, 8.897208317648619e-06, 2.954971250801464e-06, 5.90483004714315e-08, -4.052316537883625e-10, 3.796160955027439e-11, -1.537513714434946e-12, 7.766343449421009e-15, 6.309525924784622e-17, 7.927758444314744e-19, -2.108144366593492e-19, 5.283417041568212e-21, 1.596294751594547e-23, 2.196467859123564e-23, 3.65789942367807e-23, -2.340232394845938e-23, 9.645720987943021e-24, -4.480621473280879e-25, -8.02375226514999e-25, -5.637235133019633e-24, 3.486128590326359e-24, 9.444770347479365e-23, -3.857810976557368e-23, 6.111416504362634e-23] +ideUse1.dp=[0e+00, 5.970229296875e+04, 6.0042546875e+04, 6.00443828125e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 5.469014453125e+04, 5.977419921875e+04, 5.999734375e+04, 5.99999765625e+04, 5.9999984375e+04, 6.000000390625e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.986296875e+04, 5.89915390625e+04, 6.001069921875e+04, 5.99995078125e+04, 6.000006640625e+04, 5.99999296875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.915859375e+04, 6.06188828125e+04, 6.12488671875e+04, 6.1323640625e+04, 6.1330640625e+04, 6.133151171875e+04, 6.133165625e+04, 6.1331671875e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 5.99641015625e+04, 6.134151953125e+04, 6.009478125e+04, 6.01090234375e+04, 6.00526015625e+04, 6.0345890625e+04, 6.295864453125e+04, 6.0028890625e+04, 6.00856328125e+04, 6.00421015625e+04, 6.02199765625e+04, 6.99788515625e+04, 6.030060546875e+04, 6.005736328125e+04, 6.00275234375e+04, 6.001659375e+04, 6.001105859375e+04, 1.6357046875e+05, 1.94130140625e+05, 1.94883015625e+05, 1.9489834375e+05, 1.948985625e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.00817375e+05, 6.066244921875e+04, 6.005032421875e+04] +ideUse2.dp=[0e+00, 5.968023046875e+04, 6.002036328125e+04, 6.002219921875e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 7.45058046875e+04, 9.28154921875e+04, 9.32492265625e+04, 9.32536953125e+04, 9.3253734375e+04, 9.325375e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.29722890625e+04, 9.05068203125e+04, 9.20939296875e+04, 9.20933203125e+04, 9.20945e+04, 9.20945234375e+04, 9.209471875e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.02549765625e+04, 9.23014375e+04, 9.2746671875e+04, 9.2754734375e+04, 9.27558984375e+04, 9.27558671875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 6.982359375e+04, 8.1108453125e+04, 8.130774218749999e+04, 8.18259609375e+04, 8.20032890625e+04, 8.30190390625e+04, 9.30817421875e+04, 9.20007109375e+04, 9.22610546875e+04, 9.2264546875e+04, 9.260240625e+04, 8.78939453125e+04, 6.1125328125e+04, 6.04975625e+04, 6.032851953125e+04, 6.024408984375e+04, 6.019271484375e+04, 1.454034375e+05, 1.71747828125e+05, 1.72435e+05, 1.72449046875e+05, 1.72449203125e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 8.9175453125e+04, 6.059026953125e+04, 6.002784765625e+04] +ideUse3.dp=[0e+00, 5.96581484375e+04, 5.999815625e+04, 5.99999921875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 7.49474296875e+04, 9.366278125e+04, 9.4102921875e+04, 9.41074453125e+04, 9.4107484375e+04, 9.41075e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.395253125e+04, 9.85341796875e+04, 9.99125625e+04, 9.9948859375e+04, 9.9949265625e+04, 9.99493046875e+04, 9.9949515625e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 6.7303796875e+04, 5.984922265625e+04, 6.000153515625e+04, 6.00002109375e+04, 6.00000546875e+04, 5.99999921875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.556265234375e+04, 7.9718734375e+04, 8.055338281249999e+04, 8.1293640625e+04, 8.15874765625e+04, 8.29526796875e+04, 9.304640625e+04, 9.1966578125e+04, 9.222703125e+04, 9.22306015625e+04, 9.2568375e+04, 8.7861640625e+04, 6.110271484375e+04, 6.047518359375e+04, 6.030619921875e+04, 6.022180078125e+04, 6.017044140625e+04, 1.271546796875e+05, 1.4936484375e+05, 1.49986953125e+05, 1.49999828125e+05, 1.49999984375e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 7.75335546875e+04, 6.05180625e+04, 6.000534765625e+04] +stoPla.tanBra.heaPorTop.T=[2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851497192382812e+02, 2.851348266601562e+02, 2.850517883300781e+02, 2.848451843261719e+02, 2.844984741210938e+02, 2.840349426269531e+02, 2.83501953125e+02, 2.829503784179688e+02, 2.824227600097656e+02, 2.81947265625e+02, 2.815391235351562e+02, 2.81201904296875e+02, 2.80932373046875e+02, 2.807225646972656e+02, 2.806358337402344e+02, 2.806351318359375e+02, 2.806344299316406e+02, 2.806336975097656e+02, 2.805754699707031e+02, 2.804679565429688e+02, 2.803869018554688e+02, 2.803251647949219e+02, 2.802786254882812e+02, 2.80243896484375e+02, 2.802180786132812e+02, 2.801991577148438e+02, 2.801854553222656e+02, 2.801752624511719e+02, 2.801678771972656e+02, 2.801626586914062e+02, 2.801590270996094e+02, 2.801563720703125e+02, 2.801544799804688e+02, 2.801531372070312e+02, 2.801521911621094e+02, 2.801515197753906e+02, 2.801510620117188e+02, 2.801507873535156e+02, 2.801506652832031e+02, 2.801505737304688e+02, 2.801504821777344e+02, 2.80150390625e+02, 2.806386108398438e+02, 2.817638549804688e+02, 2.826837463378906e+02, 2.833726196289062e+02, 2.838743286132812e+02, 2.842354431152344e+02, 2.845621948242188e+02, 2.848371887207031e+02, 2.849850769042969e+02, 2.850630798339844e+02, 2.851040954589844e+02, 2.851257934570312e+02, 2.851372375488281e+02, 2.851432495117188e+02, 2.851464233398438e+02, 2.851481018066406e+02, 2.851484375e+02, 2.851485595703125e+02, 2.851486511230469e+02, 2.851487426757812e+02, 2.851488342285156e+02, 2.8514892578125e+02, 2.851487426757812e+02, 2.85148681640625e+02, 2.851486511230469e+02, 2.851486206054688e+02, 2.851485900878906e+02, 2.851485595703125e+02, 2.851484985351562e+02, 2.851484680175781e+02, 2.851484375e+02, 2.851483764648438e+02, 2.851483459472656e+02, 2.851482849121094e+02, 2.851482543945312e+02, 2.851482238769531e+02, 2.85148193359375e+02, 2.851481628417969e+02, 2.851481323242188e+02, 2.851453247070312e+02, 2.851226196289062e+02, 2.850417785644531e+02, 2.848554077148438e+02, 2.845430603027344e+02, 2.841187438964844e+02, 2.836195678710938e+02, 2.830903930664062e+02, 2.825717468261719e+02, 2.820937194824219e+02, 2.816739807128906e+02, 2.81320556640625e+02, 2.810322570800781e+02, 2.808040771484375e+02, 2.806311645507812e+02, 2.80599365234375e+02, 2.805984497070312e+02] +stoPla.tanBra.heaPorBot.T=[2.851499938964844e+02, 2.851404418945312e+02, 2.851281127929688e+02, 2.835596313476562e+02, 2.820942993164062e+02, 2.812534790039062e+02, 2.807756042480469e+02, 2.805050659179688e+02, 2.803514404296875e+02, 2.802642211914062e+02, 2.802149963378906e+02, 2.801869506835938e+02, 2.801711120605469e+02, 2.80162109375e+02, 2.801570434570312e+02, 2.801541442871094e+02, 2.801524963378906e+02, 2.801519775390625e+02, 2.801520080566406e+02, 2.801520080566406e+02, 2.801520080566406e+02, 2.801522216796875e+02, 2.801516418457031e+02, 2.801510620117188e+02, 2.801506652832031e+02, 2.801504211425781e+02, 2.801502380371094e+02, 2.80150146484375e+02, 2.801500854492188e+02, 2.801500549316406e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801505126953125e+02, 2.801559143066406e+02, 2.801762084960938e+02, 2.802247314453125e+02, 2.803127136230469e+02, 2.805022277832031e+02, 2.809158325195312e+02, 2.814676208496094e+02, 2.820817260742188e+02, 2.826908569335938e+02, 2.832454223632812e+02, 2.837185974121094e+02, 2.841022338867188e+02, 2.844004516601562e+02, 2.846244812011719e+02, 2.846815795898438e+02, 2.847015380859375e+02, 2.847207336425781e+02, 2.847392272949219e+02, 2.847569885253906e+02, 2.847740783691406e+02, 2.846775207519531e+02, 2.846641845703125e+02, 2.846508483886719e+02, 2.846374206542969e+02, 2.846239929199219e+02, 2.846105346679688e+02, 2.845953369140625e+02, 2.845805053710938e+02, 2.845656127929688e+02, 2.8455078125e+02, 2.845359802246094e+02, 2.845212707519531e+02, 2.845105895996094e+02, 2.845008850097656e+02, 2.844913024902344e+02, 2.844817199707031e+02, 2.844721984863281e+02, 2.837879028320312e+02, 2.824308471679688e+02, 2.815528259277344e+02, 2.809906311035156e+02, 2.806426696777344e+02, 2.804347229003906e+02, 2.803133239746094e+02, 2.80243408203125e+02, 2.802033386230469e+02, 2.801805114746094e+02, 2.801675720214844e+02, 2.801601257324219e+02, 2.801559143066406e+02, 2.801535034179688e+02, 2.801521606445312e+02, 2.801519470214844e+02, 2.801519470214844e+02] +stoPla.tanSta.y[1]=[1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +stoPla.tanSta.y[2]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt new file mode 100644 index 00000000000..6c2cb37fb8f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt @@ -0,0 +1,15 @@ +last-generated=2022-03-14 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +ideUsr.yVal_actual=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2.372759878635403e-01, 3.455205296631902e-04, 3.444691537879407e-04, 3.38253885274753e-04, 3.321156546007842e-04, 3.260757948737592e-04, 3.201467043254524e-04, 3.143229987472296e-04, 3.086034848820418e-04, 3.029869694728404e-04, 2.97472404781729e-04, 2.92060780338943e-04, 2.86752445390448e-04, 2.81542626908049e-04, 2.764197124633938e-04, 2.713825961109251e-04, 2.664401254151016e-04, 2.615947742015123e-04, 2.568438067100942e-04, 2.521721762605011e-04, 2.475813671480864e-04, 2.430696767987683e-04, 2.386392297921702e-04, 2.342864027014002e-04, 2.300100459251553e-04, 2.258091699331999e-04, 2.216824941569939e-04, 2.176290436182171e-04, 2.136479306500405e-04, 2.09738194826059e-04, 2.05898453714326e-04, 2.021282853092998e-04, 1.984270056709647e-04, 1.947939890669659e-04, 1.912260340759531e-04, 1.877176546258852e-04, 1.842694910010323e-04, 1.808793604141101e-04, 1.775449200067669e-04, 1.742706663208082e-04, 1.710602518869564e-04, 1.679099950706586e-04, 1.648203178774565e-04, 1.617918896954507e-04, 8.601984977722168e-01, 8.841497898101807e-01, 8.862190246582031e-01, 8.866633772850037e-01, 8.869857788085938e-01, 8.873108625411987e-01, 8.876166939735413e-01, 8.87906014919281e-01, 8.881837725639343e-01, 8.884551525115967e-01, 8.887191414833069e-01, 8.889741897583008e-01, 8.8922119140625e-01, 8.894597291946411e-01, 8.896902799606323e-01, 8.899130821228027e-01, 8.901284337043762e-01, 8.903366923332214e-01, 8.905380964279175e-01, 8.907328248023987e-01, 8.909211158752441e-01, 8.911030888557434e-01, 8.912789821624756e-01, 8.914490342140198e-01, 8.916133642196655e-01, 2.971347793936729e-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, 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/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt new file mode 100644 index 00000000000..78d63c98d16 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt @@ -0,0 +1,18 @@ +last-generated=2022-03-16 +statistics-initialization= +{ + "nonlinear": "2, 0, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "1, 1, 1", + "number of continuous time states": "18", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +chiBra.m_flow=[0e+00, 4.999552965164185e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01] +tanBra.mTan_flow=[0e+00, -4.999551773071289e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, 2.893969118595123e-01, 3.502776324748993e-01, 3.745020627975464e-01, 3.929356336593628e-01, 4.070073962211609e-01, 4.177742600440979e-01, 4.260265231132507e-01, 4.31829422712326e-01, 4.110587537288666e-01, 4.04619425535202e-01, 4.037974178791046e-01, 4.040806889533997e-01, 4.045733511447906e-01, 4.05122309923172e-01, 4.056960344314575e-01, 4.062855541706085e-01, 4.068860113620758e-01, 4.074938297271729e-01, 4.081068336963654e-01, 4.087235927581787e-01, 4.093431234359741e-01, 4.099647402763367e-01, 4.105879962444305e-01, 4.112125039100647e-01, 4.118382036685944e-01, 4.1246497631073e-01, 4.130928516387939e-01, 4.137217998504639e-01, 4.143518507480621e-01, 4.149830341339111e-01, 4.156154692173004e-01, 4.162492156028748e-01, 4.168843924999237e-01, -2.810051441192627e-01, -4.999998211860657e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01] +tanBra.pum.m_flow=[0e+00, 1.074193249905875e-07, 1.138746412721048e-07, 1.187569793614784e-07, 1.22431416116342e-07, 1.251885208830572e-07, 1.272531306995006e-07, 1.28796955323196e-07, 1.299502088158988e-07, 1.30811088183691e-07, 1.314534330276729e-07, 1.319324240967035e-07, 1.322895428756965e-07, 1.325555700759651e-07, 1.327538541318063e-07, 1.329015901774255e-07, 1.330116958797589e-07, 1.330937067223203e-07, 1.331548276084504e-07, 1.332003449761032e-07, 1.33234237864599e-07, 1.332594905534279e-07, 1.332782773033614e-07, 1.332922892061106e-07, 1.33302748395181e-07, 1.333105359435649e-07, 1.333163339722887e-07, 1.333206682829768e-07, 1.333238941469972e-07, 1.333262957814441e-07, 1.333280863491382e-07, 1.333294221694814e-07, 1.333304027184568e-07, 1.333311274720472e-07, 7.893968820571899e-01, 8.502776026725769e-01, 8.745020627975464e-01, 8.929356336593628e-01, 9.070073962211609e-01, 9.177742600440979e-01, 9.260265231132507e-01, 9.318294525146484e-01, 9.110587239265442e-01, 9.046193957328796e-01, 9.037973880767822e-01, 9.040806889533997e-01, 9.045733213424683e-01, 9.051223397254944e-01, 9.056960344314575e-01, 9.062855839729309e-01, 9.068859815597534e-01, 9.074938297271729e-01, 9.08106803894043e-01, 9.087235927581787e-01, 9.093431234359741e-01, 9.099647402763367e-01, 9.105879664421082e-01, 9.112125039100647e-01, 9.11838173866272e-01, 9.1246497631073e-01, 9.130928516387939e-01, 9.137217998504639e-01, 9.143518209457397e-01, 9.149830341339111e-01, 9.15615439414978e-01, 9.162492156028748e-01, 9.168843626976013e-01, 2.189948409795761e-01, 1.645938851879691e-07, 1.559465232503499e-07, 1.500948343391428e-07, 1.457721339193085e-07, 1.425725457693261e-07, 1.402011520212909e-07, 1.384413650384886e-07, 1.371335400790485e-07, 1.361614749839646e-07, 1.354385688046023e-07, 1.349009863815809e-07, 1.345005529174159e-07, 1.342024944506193e-07, 1.339805777433867e-07, 1.338153907681772e-07, 1.336923389771982e-07, 1.336007642294135e-07, 1.335325094942164e-07, 1.334817198994642e-07, 1.334438479716482e-07, 1.33415667846748e-07, 1.333946499926242e-07, 1.333790180524375e-07, 1.333673367298616e-07, 1.333586681084853e-07, 1.333522021695899e-07, 1.33347356268132e-07, 1.33343760921889e-07, 1.333410892812026e-07, 1.333390997615425e-07, 1.333376218326521e-07, 1.33336527596839e-07, 1.333357033672655e-07] +usr.yVal_actual=[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, 9.211111068725586e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.946646094322205e-01, 9.245695471763611e-01, 9.071856737136841e-01, 9.031168222427368e-01, 9.018986821174622e-01, 9.015378952026367e-01, 9.016034603118896e-01, 9.019418358802795e-01, 9.024717807769775e-01, 9.031393527984619e-01, 9.039061665534973e-01, 9.047455191612244e-01, 9.056385159492493e-01, 9.065719246864319e-01, 9.075362086296082e-01, 9.08524751663208e-01, 9.095327258110046e-01, 9.105567336082458e-01, 9.115946888923645e-01, 9.126449227333069e-01, 9.137066006660461e-01, 9.147792458534241e-01, 9.158623814582825e-01, 9.169560670852661e-01, 9.180601239204407e-01, 9.191747307777405e-01, 2.95667439699173e-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, 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/Buildings/Resources/Scripts/BuildingsPy/conf.yml b/Buildings/Resources/Scripts/BuildingsPy/conf.yml index 282db9a2ac9..64ac3368396 100644 --- a/Buildings/Resources/Scripts/BuildingsPy/conf.yml +++ b/Buildings/Resources/Scripts/BuildingsPy/conf.yml @@ -132,6 +132,10 @@ openmodelica: comment: simulation terminated by an assertion at initialization simulate: false +- model_name: Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource + openmodelica: + comment: 'Could not evaluate structural parameter (or constant): mChi_flow_nominal' + translate: false - model_name: Buildings.Experimental.DHC.Plants.Steam.BaseClasses.Examples.ControlVolumeEvaporation openmodelica: comment: simulation terminated by an assertion at initialization diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos new file mode 100644 index 00000000000..48650223020 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos @@ -0,0 +1,25 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser", + stopTime=3600, + tolerance=1e-06, + method="dassl", + resultFile="IdealUser"); +// Plot commands +createPlot(id=1, + position={75, 75, 843, 498}, + y={"ideUse.yVal_actual"}, + range={0.0, 3600.0, -0.5, 1.5}, + grid=true, + subPlot=101, + colors={{28,108,200}}, + timeUnit="s", + displayUnits={"1"}); +createPlot(id=1, + position={75, 75, 843, 498}, + y={"mPre_flow.y", "ideUse.senMasFlo.m_flow"}, + range={0.0, 3600.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos new file mode 100644 index 00000000000..7341fe817fe --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos @@ -0,0 +1,22 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus", + stopTime=1, method="Dassl", tolerance=1e-06, resultFile="TankStatus"); +// Plot commands +removePlots(false); +createPlot(id=1, + position={49, 24, 661, 503}, + y={"tanSta.TTan[1]", "tanSta.TTan[2]", "tanSta.THig", "tanSta.TLow"}, + range={0.0, 10.0, 6.0, 14.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="s", + displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=1, + position={49, 24, 661, 503}, + y={"tanSta.y[1]", "tanSta.y[2]"}, + range={0.0, 10.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {28,108,200}}, + timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos new file mode 100644 index 00000000000..8642a3ada31 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos @@ -0,0 +1,60 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource", + stopTime=9000, + tolerance=1e-06, + method="radau", + resultFile="StoragePlantDualSource"); +// Plot commands +createPlot(id=1, + position={27, 28, 733, 459}, + y={"pumSup1.m_flow", "stoPla.revCon.m_flow", "stoPla.pumPri.m_flow", "stoPla.tanBra.mTan_flow"}, + range={0.0, 9000.0, -2.0, 2.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s", "kg/s", "kg/s"}); +createPlot(id=1, + position={27, 28, 733, 459}, + y={"stoPla.revCon.pum.m_flow", "stoPla.revCon.val.m_flow"}, + range={0.0, 9000.0, -0.5, 2.0}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s"}); +createPlot(id=2, + position={210, 39, 739, 483}, + y={"ideUse1.yVal_actual", "ideUse2.yVal_actual", "ideUse3.yVal_actual"}, + range={0.0, 9000.0, -0.5, 1.5}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="s", + displayUnits={"1", "1", "1"}); +createPlot(id=2, + position={210, 39, 739, 483}, + y={"ideUse1.dp", "ideUse2.dp", "ideUse3.dp"}, + range={0.0, 9000.0, -50000.0, 200000.0}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="s", + displayUnits={"Pa", "Pa", "Pa"}); +createPlot(id=3, + position={322, 75, 727, 418}, + y={"stoPla.tanBra.heaPorTop.T", "stoPla.tanBra.heaPorBot.T"}, + range={0.0, 9000.0, 6.0, 14.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"degC", "degC"}); +createPlot(id=3, + position={322, 75, 727, 418}, + y={"stoPla.tanSta.y[1]", "stoPla.tanSta.y[2]"}, + range={0.0, 9000.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {28,108,200}}, + timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos new file mode 100644 index 00000000000..47207224d50 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos @@ -0,0 +1,6 @@ +compareVars := + { + "ideUse.yVal_actual", + "mPre_flow.y", + "ideUse.senMasFlo.m_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos new file mode 100644 index 00000000000..79dfb59b667 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos @@ -0,0 +1,9 @@ +compareVars := + { + "tanSta.TTan[1]", + "tanSta.TTan[2]", + "tanSta.THig", + "tanSta.TLow", + "tanSta.y[1]", + "tanSta.y[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos new file mode 100644 index 00000000000..4a45ef01979 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos @@ -0,0 +1,19 @@ +compareVars := + { + "pumSup1.m_flow", + "stoPla.revCon.m_flow", + "stoPla.pumPri.m_flow", + "stoPla.tanBra.mTan_flow", + "stoPla.revCon.pum.m_flow", + "stoPla.revCon.val.m_flow", + "ideUse1.yVal_actual", + "ideUse2.yVal_actual", + "ideUse3.yVal_actual", + "ideUse1.dp", + "ideUse2.dp", + "ideUse3.dp", + "stoPla.tanBra.heaPorTop.T", + "stoPla.tanBra.heaPorBot.T", + "stoPla.tanSta.y[1]", + "stoPla.tanSta.y[2]" + }; diff --git a/Buildings/package.mo b/Buildings/package.mo index 9549c03423c..0e96a30e692 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -307,6 +307,26 @@ to existing libraries: issue 3103. +Buildings.Experimental.DHC.Plants.Cooling + + +Buildings.Experimental.DHC.Plants.Cooling.StoragePlant
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.SelectMin
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus
+ Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ReversibleConnection
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.TankBranch
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser + + Added models for a district CHW system with two plants, + where one of them has a storage tank that can be charged remotely by the other plant.
+ This is for + issue 2859. Buildings.Fluid.Movers