diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/FixedEvaporating.mo b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/FixedEvaporating.mo new file mode 100644 index 0000000000..b7ffed5fa4 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/FixedEvaporating.mo @@ -0,0 +1,213 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses; +model FixedEvaporating + "Thermodynamic computations of the ORC with fixed evaporating temperature" + extends IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.InterpolateStates( + TEva=TWorEva, + TCon=TWorCon); + + parameter Modelica.Units.SI.TemperatureDifference dTPinEva_set( + final min = 0) + "Set evaporator pinch point temperature difference" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.SpecificHeatCapacity cpHot + "Constant specific heat capacity" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.ThermodynamicTemperature TWorEva + "Working fluid evaporator temperature" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.TemperatureDifference dTPinCon + "Pinch point temperature difference of condenser" + annotation(Dialog(group="Condenser")); + parameter Modelica.Units.SI.SpecificHeatCapacity cpCol + "Constant specific heat capacity" + annotation(Dialog(group="Condenser")); + parameter Boolean useLowCondenserPressureWarning = true + "If true, issues warning if pCon < 101325 Pa"; + parameter Modelica.Units.SI.MassFlowRate mWor_flow_max( + final min = 0) + "Upper bound of working fluid flow rate" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.MassFlowRate mWor_flow_min( + final min = 0) + "Lower bound of working fluid flow rate" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.MassFlowRate mWor_flow_hysteresis( + final min = 0) + "Hysteresis for turning off the cycle when flow too low" + annotation(Dialog(group="Cycle")); + + Modelica.Blocks.Interfaces.RealInput THotIn( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Incoming temperature of hot fluid in evaporator" + annotation (Placement( + transformation(extent={{-140,60},{-100,100}}), iconTransformation( + extent={{-120,70},{-100,90}}))); + Modelica.Blocks.Interfaces.RealInput mHot_flow( + final quantity="MassFlowRate", + final unit="kg/s") "Evaporator hot fluid flow rate" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-120,30},{-100,50}}))); + Modelica.Blocks.Interfaces.RealInput TColIn( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Incoming temperature of cold fluid in condenser" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-120,-50},{-100,-30}}))); + Modelica.Blocks.Interfaces.RealInput mCol_flow( + final quantity="MassFlowRate", + final unit="kg/s") "Condenser cold fluid flow rate" annotation (Placement( + transformation(extent={{-140,-100},{-100,-60}}), iconTransformation( + extent={{-120,-90},{-100,-70}}))); + Modelica.Blocks.Interfaces.BooleanInput ena + "Enable cycle; set false to force working fluid flow to zero" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-120,-10},{-100,10}}))); + + Modelica.Blocks.Interfaces.RealOutput QEva_flow( + final quantity="HeatFlowRate", + final unit="W") "Evaporator heat flow rate into the cycle" + annotation (Placement(transformation(extent={{100,60},{140,100}}), + iconTransformation(extent={{100,70},{120,90}}))); + Modelica.Blocks.Interfaces.RealOutput QCon_flow( + final quantity="HeatFlowRate", + final unit="W") "Condenser heat flow rate out of the cycle" + annotation (Placement( + transformation(extent={{100,-100},{140,-60}}),iconTransformation(extent={{100,-90}, + {120,-70}}))); + Modelica.Blocks.Interfaces.RealOutput PExp( + final quantity="Power", + final unit="W") "Expander power generation" annotation (Placement( + transformation(extent={{100,20},{140,60}}), iconTransformation(extent={{100,30}, + {120,50}}))); + Modelica.Blocks.Interfaces.RealOutput PPum( + final quantity="Power", + final unit="W") + "Electrical power consumption of the pump" annotation (Placement( + transformation(extent={{100,-60},{140,-20}}),iconTransformation(extent={ + {100,-50},{120,-30}}))); + Modelica.Blocks.Interfaces.BooleanOutput on_actual = ena and hys.y + "Actual on off status of the cycle" annotation (Placement(transformation( + extent={{100,-20},{140,20}}), iconTransformation(extent={{100,-10},{120, + 10}}))); + + Modelica.Units.SI.ThermodynamicTemperature THotOut( + start = TWorEva + dTPinEva_set) + "Outgoing temperature of the evaporator hot fluid"; + Modelica.Units.SI.ThermodynamicTemperature THotPin( + start = TWorEva + dTPinEva_set) + "Hot fluid temperature at pinch point"; + Modelica.Units.SI.TemperatureDifference dTPinEva(start = dTPinEva_set) + "Pinch point temperature difference of evaporator"; + Modelica.Units.SI.ThermodynamicTemperature TWorCon + "Working fluid condensing temperature"; + Modelica.Units.SI.ThermodynamicTemperature TColOut + "Fluid temperature out of the condenser"; + Modelica.Units.SI.ThermodynamicTemperature TColPin( + start = 300) + "Cold fluid temperature at pinch point"; + Modelica.Units.SI.MassFlowRate mWor_flow + "Mass flow rate of the working fluid" + annotation (Dialog(group="Cycle")); + Modelica.Blocks.Logical.Hysteresis hys( + uLow = mWor_flow_min, + uHigh = mWor_flow_min + mWor_flow_hysteresis, + u = mWor_flow_internal, + y(start = false)) + "Hysteresis for turning off cycle when working fluid flow too low"; + +protected + Modelica.Units.SI.MassFlowRate mWor_flow_internal( + start = (mWor_flow_max + mWor_flow_min) / 2) + "Working fluid flow rate, intermediate variable"; + Modelica.Units.SI.ThermodynamicTemperature THotPin_internal + "Hot fluid temperature at pinch point, intermedaite variable"; + Modelica.Units.SI.ThermodynamicTemperature THotOut_internal + "Hot fluid outgoing temperature, intermediate variable"; + Modelica.Units.SI.HeatFlowRate QEva_flow_internal + "Evaporator heat flow rate, intermediate variable"; + +equation + + assert(not (TWorCon > TWorEva - 1 and ena), +"*** In " + getInstanceName() + +": Working fluid condensing temperature is too high and close to evaporating temperature. +This is likely caused by the flow rate of cold fluid in the condenser being too low +when the ORC is on."); + + assert(not (pCon < 101325 - 1 and ena and useLowCondenserPressureWarning), +"*** In " + getInstanceName() + +": Working fluid condensing pressure is lower than 101325 Pa. +If this is intended, set useLowCondenserPressureWarning = false to turn off this warning.", +level=AssertionLevel.warning); + + if ena then + // Evaporator + QEva_flow = mHot_flow * cpHot * (THotOut - THotIn); + QEva_flow = mWor_flow * (hPumOut - hExpInl); + (THotPin - THotOut) * (hExpInl - hPumOut) + = (hPinEva - hPumOut) * (THotIn - THotOut); + // Condenser + QCon_flow = mCol_flow * cpCol * (TColOut - TColIn); + QCon_flow = mWor_flow * (hExpOut - hPumInl); + (TColPin - TColIn) * (hExpOut - hPumInl) + = (hPinCon - hPumInl) * (TColOut - TColIn); + else + // Evaporator + QEva_flow = 0; + THotOut = THotIn; + THotPin = THotOut; + // Condenser + QCon_flow = 0; + TColOut = TColIn; + TColPin = TColIn; + end if; + dTPinEva = THotPin - TWorEva; // Evaporator + dTPinCon = TWorCon - TColPin; // Condenser + + // Evaporator internal computation + QEva_flow_internal = mHot_flow * cpHot * (THotOut_internal - THotIn); + QEva_flow_internal = mWor_flow_internal * (hPumOut - hExpInl); + (THotPin_internal - THotOut_internal) * (hExpInl - hPumOut) + = (hPinEva - hPumOut) * (THotIn - THotOut_internal); + dTPinEva_set = THotPin_internal - TWorEva; + + // Other components + PExp = mWor_flow * (hExpOut - hExpInl); + PPum = mWor_flow * (hPumOut - hPumInl); + mWor_flow = + if on_actual + then + IBPSA.Utilities.Math.Functions.smoothMin( + x1=mWor_flow_internal, + x2=mWor_flow_max, + deltaX=mWor_flow_min*1E-2) + else 0; + + annotation(defaultComponentName="cyc", + Documentation(info=" +
+This model computes the pinch points and the energy exchange, +and interfaces with the input and output variables. +The evaporating temperature is fixed as a parameter. +See the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +for more details. +", revisions=" +
+This model performs the property interpolations of a given working fluid. +See the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +for more details. +", revisions=" +
+This model validates the basic use of + +IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.InterpolateStates. +
+",revisions=" ++This model is largely the same as + +IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.Validation.DryFluid, +except that it validates the handling of wet working fluids. +As a result, a superheating temperature is computed that ensures +the expansion does not land under the dome. +How this superheating temperature is found is explained in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation. +
+",revisions=" ++Package for validation models for the base classes. +
+")); +end Validation; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/package.order new file mode 100644 index 0000000000..bfd2d4d207 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/package.order @@ -0,0 +1,2 @@ +DryFluid +WetFluid diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.mo b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.mo new file mode 100644 index 0000000000..9395391a20 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.mo @@ -0,0 +1,9 @@ +within IBPSA.Fluid.CHPs.OrganicRankine; +package BaseClasses "Package with base classes" + extends Modelica.Icons.BasesPackage; + annotation (Documentation(info=" ++Package for base classes. +
+")); +end BaseClasses; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.order new file mode 100644 index 0000000000..52d5e32f17 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/BaseClasses/package.order @@ -0,0 +1,3 @@ +FixedEvaporating +InterpolateStates +Validation diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/ConstantEvaporation.mo b/IBPSA/Fluid/CHPs/OrganicRankine/ConstantEvaporation.mo new file mode 100644 index 0000000000..3e051e3624 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/ConstantEvaporation.mo @@ -0,0 +1,504 @@ +within IBPSA.Fluid.CHPs.OrganicRankine; +model ConstantEvaporation "Organic Rankine cycle as a bottoming cycle" + + extends IBPSA.Fluid.Interfaces.FourPortHeatMassExchanger( + final m1_flow_nominal = mHot_flow_nominal, + final dp1_nominal = dpHot_nominal, + final m2_flow_nominal = mCol_flow_nominal, + final dp2_nominal = dpCol_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T1_start = max(pro.T)*2/3 + min(pro.T)*1/3, + T2_start = max(pro.T)*1/10 + min(pro.T)*9/10, + redeclare final IBPSA.Fluid.MixingVolumes.MixingVolume vol2( + V=m2_flow_nominal*tau2/rho2_nominal, + nPorts=2, + final prescribedHeatFlowRate=true), + final vol1( + final prescribedHeatFlowRate=true)); + + replaceable parameter IBPSA.Fluid.CHPs.OrganicRankine.Data.Generic pro + constrainedby IBPSA.Fluid.CHPs.OrganicRankine.Data.Generic + "Property records of the working fluid" + annotation(choicesAllMatching = true,Dialog(group="Cycle")); + parameter Modelica.Units.SI.MassFlowRate mHot_flow_nominal + "Nominal mass flow rate of the evaporator fluid" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.PressureDifference dpHot_nominal( + displayUnit="Pa") + "Nominal pressure drop of the hot fluid in evaporator" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.TemperatureDifference dTPinEva_set( + final min = 0) = 5 + "Set evaporator pinch point temperature difference" + annotation(Dialog(group="Evaporator")); + parameter Boolean useEvaporatingPressure = false + "Set true to specify working fluid evaporating pressure instead of temperature" + annotation(Dialog(group="Evaporator")); + parameter Modelica.Units.SI.ThermodynamicTemperature TWorEva = + max(pro.T)*2/3 + min(pro.T)*1/3 + "Evaporating temperature of the working fluid" + annotation(Dialog(group="Evaporator", enable = not useEvaporatingPressure)); + parameter Modelica.Units.SI.Pressure pWorEva(displayUnit="kPa") = + max(pro.p)*2/3 + min(pro.p)*1/3 + "Evaporating pressure of the working fluid" + annotation(Dialog(group="Evaporator", enable = useEvaporatingPressure)); + parameter Modelica.Units.SI.MassFlowRate mCol_flow_nominal + "Nominal mass flow rate of the condenser fluid" + annotation(Dialog(group="Condenser")); + parameter Modelica.Units.SI.PressureDifference dpCol_nominal( + displayUnit="Pa") + "Nominal pressure drop of the cold fluid in condenser" + annotation(Dialog(group="Condenser")); + parameter Modelica.Units.SI.TemperatureDifference dTPinCon( + final min = 0) = 10 + "Condenser pinch point temperature difference" + annotation(Dialog(group="Condenser")); + parameter Boolean useLowCondenserPressureWarning = true + "If true, issues warning if pCon < 101325 Pa" + annotation(Dialog(group="Condenser")); + parameter Modelica.Units.SI.MassFlowRate mWor_flow_max( + final min = 0) + "Upper bound of working fluid flow rate" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.MassFlowRate mWor_flow_min( + final min = 0) + "Lower bound of working fluid flow rate" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.MassFlowRate mWor_flow_hysteresis + = mWor_flow_min + (mWor_flow_max - mWor_flow_min) * 0.1 + "Hysteresis for turning off the cycle when flow too low" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.Efficiency etaExp + "Expander efficiency" + annotation(Dialog(group="Cycle")); + parameter Modelica.Units.SI.Efficiency etaPum + "Pump efficiency" + annotation(Dialog(group="Cycle")); + + Modelica.Blocks.Interfaces.BooleanInput ena + "Enable cycle; set false to force working fluid flow to zero" annotation ( + Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-120,-10},{-100,10}}))); + + Modelica.Blocks.Interfaces.RealOutput PExp( + final quantity="Power", + final unit="W") "Expander power generation" + annotation (Placement( + transformation(extent={{100,10},{140,50}}), iconTransformation(extent={{100,20}, + {120,40}}))); + Modelica.Blocks.Interfaces.RealOutput QEva_flow( + final quantity="HeatFlowRate", + final unit="W") "Evaporator heat flow rate into the cycle" annotation ( + Placement(transformation(extent={{100,70},{140,110}}),iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,90}))); + Modelica.Blocks.Interfaces.RealOutput QCon_flow( + final quantity="HeatFlowRate", + final unit="W") "Condenser heat flow rate out of the cycle" annotation ( + Placement(transformation(extent={{100,-110},{140,-70}}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,-90}))); + Modelica.Blocks.Interfaces.BooleanOutput on_actual(start = false) + "Actual on off status of the cycle" annotation (Placement(transformation( + extent={{100,-20},{140,20}}), iconTransformation(extent={{100,-10},{ + 120,10}}))); + Modelica.Blocks.Interfaces.RealOutput PPum( + final quantity="Power", + final unit="W") + "Electrical power consumption of the pump" annotation (Placement( + transformation(extent={{100,-50},{140,-10}}),iconTransformation(extent={{100,-40}, + {120,-20}}))); + + IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.FixedEvaporating cyc( + final pro=pro, + final mWor_flow_max=mWor_flow_max, + final mWor_flow_min=mWor_flow_min, + final mWor_flow_hysteresis=mWor_flow_hysteresis, + final TWorEva = + if useEvaporatingPressure + then IBPSA.Utilities.Math.Functions.smoothInterpolation( + x = pWorEva, + xSup = pro.p, + ySup = pro.T) + else TWorEva, + final dTPinEva_set=dTPinEva_set, + final dTPinCon=dTPinCon, + final cpHot=Medium1.specificHeatCapacityCp(sta1_nominal), + final cpCol=Medium2.specificHeatCapacityCp(sta2_nominal), + final etaExp=etaExp, + final etaPum=etaPum, + final useLowCondenserPressureWarning=useLowCondenserPressureWarning) + "Thermodynamic computations of the organic Rankine cycle" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +protected + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHeaFloEva + "Prescribed heat flow rate" + annotation (Placement(transformation(extent={{39,30},{19,50}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHeaFloCon + "Prescribed heat flow rate" + annotation (Placement(transformation(extent={{41,-70},{21,-50}}))); + Modelica.Blocks.Sources.RealExpression expTHotIn(y=Medium1.temperature( + state=Medium1.setState_phX( + p=port_a1.p, + h=inStream(port_a1.h_outflow), + X=inStream(port_a1.Xi_outflow)))) + "Expression for evaporator hot fluid incoming temperature" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Sources.RealExpression expMHot_flow(y=m1_flow) + "Expression for evaporator hot fluid flow rate" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Modelica.Blocks.Sources.RealExpression expTColIn(y=Medium2.temperature( + state=Medium2.setState_phX( + p=port_a2.p, + h=inStream(port_a2.h_outflow), + X=inStream(port_a2.Xi_outflow)))) + "Expression for condenser cold fluid incoming temperature" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Modelica.Blocks.Sources.RealExpression expMCol_flow(y=m2_flow) + "Expression for condenser cold fluid flow rate" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); +equation + connect(preHeaFloEva.port, vol1.heatPort) annotation (Line(points={{19,40},{-16, + 40},{-16,60},{-10,60}}, color={191,0,0})); + connect(preHeaFloCon.port, vol2.heatPort) annotation (Line(points={{21,-60},{12, + -60}}, color={191,0,0})); + connect(expTHotIn.y, cyc.THotIn) annotation (Line(points={{-39,30},{-20,30},{-20, + 8},{-11,8}}, color={0,0,127})); + connect(expMHot_flow.y, cyc.mHot_flow) annotation (Line(points={{-39,10},{-30, + 10},{-30,4},{-11,4}}, color={0,0,127})); + connect(expTColIn.y, cyc.TColIn) annotation (Line(points={{-39,-10},{-30,-10}, + {-30,-4},{-11,-4}}, color={0,0,127})); + connect(expMCol_flow.y, cyc.mCol_flow) annotation (Line(points={{-39,-30},{-20, + -30},{-20,-8},{-11,-8}}, color={0,0,127})); + connect(cyc.PExp,PExp) annotation (Line(points={{11,4},{84,4},{84,30},{120,30}}, + color={0,0,127})); + connect(ena, cyc.ena) + annotation (Line(points={{-120,0},{-11,0}}, color={255,0,255})); + connect(cyc.QEva_flow, QEva_flow) annotation (Line(points={{11,8},{80,8},{80,90}, + {120,90}}, color={0,0,127})); + connect(cyc.QCon_flow, QCon_flow) annotation (Line(points={{11,-8},{80,-8},{ + 80,-70},{96,-70},{96,-90},{120,-90}}, + color={0,0,127})); + connect(cyc.on_actual, on_actual) annotation (Line(points={{11,0},{120,0}}, + color={255,0,255})); + connect(cyc.PPum, PPum) annotation (Line(points={{11,-4},{84,-4},{84,-30},{120, + -30}}, color={0,0,127})); + connect(cyc.QEva_flow, preHeaFloEva.Q_flow) + annotation (Line(points={{11,8},{80,8},{80,40},{39,40}}, color={0,0,127})); + connect(cyc.QCon_flow, preHeaFloCon.Q_flow) annotation (Line(points={{11,-8}, + {80,-8},{80,-60},{41,-60}}, color={0,0,127})); + annotation (defaultComponentName = "orc", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Line( + points={{-60,-60},{-28,-20},{16,32},{40,60},{52,60},{54,30},{48,2},{ + 52,-38},{58,-58}}, + color={255,255,255}, + smooth=Smooth.Bezier, + thickness=0.5), + Line( + points={{6,20},{52,20},{66,-6},{50,-18},{-26,-18}}, + color={255,255,255}, + thickness=0.5, + pattern=LinePattern.Dash)}), Diagram( + coordinateSystem(preserveAspectRatio=false)), +Documentation(info=" ++Model of an organic Rankine cycle (ORC) as a bottoming cycle. +
+
+The thermodynamic cycle is steady-state while the evaporator and the condenser
+can be configured to have first order dynamics.
+The fluid stream 1 (using Medium1
, port_a1
, etc.)
+is the evaporator hot fluid, e.g., waste heat,
+and the stream 2 is the condenser cold fluid.
+The working fluid of the cycle is not based on a typical Modelica medium model.
+See the Thermodynamic Properties section of this document for the rational.
+
+The implemented ORC is modeled based on the simplified cycle shown in the figure below. +The cycle has two variants depending on the shape of the saturation lines of +the working fluid and ηexp. +For any given working fluid, the cycle is fully determined by providing +the working fluid evaporating temperature Tw,eva, +the working fluid condensing temperature Tw,con, +the expander efficiency ηexp, and +the pump efficiency ηpum. +The superheating temperature difference ΔTsup +is minimized, meaning it is zero whenever possible; otherwise it assumes +the smallest value not to cause the expander outlet state to fall +under the two-phase region, i.e. the \"dome\". +Subcooling after the condenser is not considered. +The Thermodynamic Properties section of this document details how these +state points are found. +
++An important assumption is that all heat is dissipated, i.e., +the cycle is not controlled by thermal load. +
++
++The cycle processes the heat at a fixed +Tw,eva provided by the user. +The evaporator heat exchange is governed by +
+
+Q̇eva = ṁh cp,h (Th,out - Th,in),
+Q̇eva = ṁw (hpum,out - hexp,in),
+
+where the subscripts are +eva for evaporator, +exp for expander, +h for hot fluid of the evaporator, i.e. the fluid carrying heat, +pum for pump, and +w for working fluid. +
++The cycle accommodates the variable flow rate and temperature +of the waste heat stream by changing the working fluid mass flow rate ṁw +to maintain a constant pinch point (PP) temperature difference +at the evaporator ΔTpin,eva. +This difference is found from +
+
+(Tpin,eva - Th,out) (hexp,in - hpum,out)
+= (Th,in - Th,out) (heva,pin - hpum,out),
+ΔTpin,eva = Tpin,eva - Tw,eva.
+
+The condenser side uses the same equations with the evaporator variables +replaced by their condenser counterparts where appropriate. Hence, +
+
+Q̇con = ṁc cp,c (Tc,out - Tc,in),
+Q̇con = ṁw (hpum,in - hexp,out),
+(Tc,pin - Tc,in) (hexp,out - hpum,in)
+= (Tc,out - Tc,in) (hcon,pin - hpum,in),
+ΔTcon,pin = Tw,con - Tc,pin,
+
+where the subscripts are
+con for condenser, and
+c for cold fluid in the condenser.
+
+The electric power output of the expander is +
++Pexp = ṁw (hexp,in - hexp,out). +
++The electric power consumption of the pump is +
++Ppum = ṁw (hpum,out - hpum,in). +
++The pump work is +
++Ppum = ṁw +(peva - pcon) / (ρpum,in ηpum). +
++This takes advantage of the negligible density change of the liquid +to avoid a property search in the subcooled liquid region. +
++In summary, the model has the following information flow: +
+User-specified parameters | +Inputs | +Outputs | +
---|---|---|
+Tw,eva - Working fluid evaporating temperature, +ΔTpin,eva - Evaporator pinch point temperature difference, +ΔTpin,con - Condenser pinch point temperature difference, +ηexp - Expander efficiency, +ηpum - Pump efficiency. + |
+
+Th,in - Evaporator hot fluid incoming temperature, +ṁh - Evaporator hot fluid flow rate, +Tc,in - Condenser cold fluid incoming temperature, +ṁc - Condenser cold fluid flow rate. + |
+
+ṁw - Working fluid flow rate, +Tw,con - Working fluid condensing temperature, +Th,out - Evaporator hot fluid outgoing temperature, +Tc,out - Condenser cold fluid outgoing temperature, +Q̇eva - Evaporator heat flow rate, +Q̇con - Condenser heat flow rate, +Pexp - Expander power output, +Ppum - Pump power consumption. + |
+
+The ORC system controls ṁw to maintain the prescribed +evaporator PP temperature difference set point. +Although the model does not implement this as a control loop, +an upper limit and a lower limit are imposed on +ṁw to reflect the capacity constraints of a sized cycle. +
++How these constraints affect the cycle's behavior reacting to +a variable waste heat fluid stream is demonstrated in + +IBPSA.Fluid.CHPs.OrganicRankine.Validation.VariableSource. +
+
+The thermodynamic properties of the working fluid are not computed by a typical
+Modelica medium model, but by interpolating data records in
+
+IBPSA.Fluid.CHPs.OrganicRankine.Data.
+Specific enthalpy and specific entropy values are provided as support points
+on the saturated liquid line, the saturated vapor line, and
+a superheated vapor line (called the reference line).
+The values of these support points were obtained using CoolProp
+(https://www.coolprop.org;
+Bell et al., 2014) through its Python wrapper and stored as Modelica records.
+An example Python file is provided in
+IBPSA/Resources/Python-Sources/MakeORCFluidRecord.py
,
+but note that this file is not maintained.
+The records included in this library have ten data points for each line.
+It is recommended to have at least four points to take full advantage of
+the cubit Hermite spline interpolation that is set up in this model.
+
+Thermodynamic state points in the cycle are determined by various schemes +of interpolation and extrapolation. +
++
++yA = s(uA,d) +
+where s(·,·) is a cubic Hermite spline, +uA is the input property, and +d are the support points. +For the saturation curves, the user can configure the model +to use either the saturation pressure or the saturation +temperature for uA. +For the reference line uA is the pressure. ++(hB - h1) / (sB - s1) += (h2 - h1) / (s2 - s1) +
+where sB is known because it equals the expander inlet +entropy, and all other points are on the saturation +line and therefore can be found as point A. ++The cycle can be completely defined by providing the following quantities: +evaporating temperature Teva or pressure peva, +condensing temperature Tcon or pressure pcon, +expander efficiency ηexp, and +pump efficiency ηpum. +Most of the important state points can be found via the interpolation schemes +described above. The only exceptions are the expander inlet, expander outlet, +and the pump outlet. +
++
++hexp,out - hexp,in += (hexp,out,ise - hexp,in) ηexp +
+where hexp,out is solved and hexp,in is known. ++hexp,out - hexp,in += (hexp,out - hexp,inl,ise) ηexp +
+where hexp,out is known and hexp,in is solved. +For this fluid and this ηexp, +if the expansion started from the saturated vapor line, +the outlet point would end up under the dome. +TWorEva
or the evaporating pressure
+pWorEva
. To support this, a default parameter assignment is
+provided to both. Otherwise there would be unassigned parameters even though
+they are not needed.
++Bell IH, Wronski J, Quoilin S, Lemort V. +Pure and pseudo-pure fluid thermophysical property evaluation and the open-source thermophysical property library CoolProp. +Industrial & engineering chemistry research. + +2014 Feb 12;53(6):2498-508. +https://doi.org/10.1021/ie4033999 +
+", revisions=" ++Record containing parameters for working fluid properties. +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Generic; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Acetone.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Acetone.mo new file mode 100644 index 0000000000..fb4f3c0a26 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Acetone.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Acetone "Data record for acetone" + extends Generic( + T = { + 263.15 ,289.255555556,315.361111111,341.466666667, + 367.572222222,393.677777778,419.783333333,445.888888889, + 471.994444444,498.1 }, + p = { + 5344.990110825, 20650.833566074, 61555.897854858, + 151351.563616118, 321797.046994737, 612178.548912226, + 1068684.448400072,1745219.888869215,2707418.650799205, + 4046245.515470347}, + rhoLiq = { + 822.882971808,794.503127301,765.124111199,734.248636529, + 701.245557689,665.234774298,624.858127478,577.729019236, + 518.607501298,426.621585717}, + dTRef = 30, + sSatLiq = { + -479.028530758,-280.940806531, -94.928726727, 81.991049561, + 252.145020847, 417.505066333, 580.003385303, 742.022980174, + 907.767378748,1092.563132257}, + sSatVap = { + 1681.191059012,1596.661258221,1542.5487283 ,1510.043720587, + 1492.612391749,1484.868192175,1481.705802931,1477.167997198, + 1461.519799448,1404.254266854}, + sRef = { + 1817.036318829,1731.286422698,1677.739234558,1647.046003462, + 1632.468103167,1628.870285847,1632.074409953,1638.412725056, + 1644.396794592,1646.431943962}, + hSatLiq = { + -141608.840175549, -86907.602970965, -30644.702178538, + 27561.220566805, 88109.595870881, 151467.211307906, + 218265.291981649, 289522.609167944, 367363.173547648, + 459910.837559632}, + hSatVap = { + 426852.944874144,456199.225381078,485752.007459114, + 515193.605967011,544070.943987246,571664.354771464, + 596784.938528286,617315.603980879,628731.239715757, + 615164.191702174}, + hRef = { + 464617.330003106,497136.67139577 ,530386.531973482, + 563997.6626978 ,597536.243125905,630465.696202391, + 662097.963586358,691534.659141209,717607.015924844, + 738837.945805182}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of acetone. +Its name in CoolProp is \"Acetone\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Acetone; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Ethanol.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Ethanol.mo new file mode 100644 index 0000000000..61427d8ba1 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Ethanol.mo @@ -0,0 +1,56 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Ethanol "Data record for ethanol" + extends Generic( + T = { + 263.15,289.99,316.83,343.67,370.51,397.35,424.19,451.03,477.87, + 504.71}, + p = { + 7.689358061e+02,4.849943515e+03,2.156311297e+04,7.357097999e+04, + 2.046081847e+05,4.845344677e+05,1.008761409e+06,1.891911004e+06, + 3.263511383e+06,5.282165193e+06}, + rhoLiq = { + 814.799753232,792.036393251,768.756136609,744.093991385, + 716.886637425,685.51349857 ,647.811686098,601.669643931, + 543.369863156,438.527983321}, + dTRef = 30, + sSatLiq = { + -726.973851775,-505.583513991,-286.35608663 , -65.626950104, + 159.007283346, 389.527126652, 627.103332946, 869.931756177, + 1118.157181986,1411.006366334}, + sSatVap = { + 2902.952478464,2699.032398467,2551.227443872,2442.903267896, + 2361.504494341,2297.490986936,2243.294159242,2191.508999328, + 2129.791721023,2005.324094606}, + sRef = { + 3048.947765906,2841.665343912,2692.531793967,2585.157296558, + 2507.385719926,2450.24466807 ,2407.200424972,2373.310666428, + 2343.951307193,2312.828603679}, + hSatLiq = { + -223584.403049121,-162359.292050491, -95822.158648172, + -22850.994379185, 57554.398921637, 146473.200208431, + 244865.515469934, 352554.405086509, 470265.911621738, + 618471.162521627}, + hSatVap = { + 731630.710753397,766947.276403163,803209.431320732, + 839255.585640969,873601.64056746 ,904602.640092255, + 930437.502076461,948625.389064672,953695.708791375, + 918429.263157366}, + hRef = { + 772225.371527353, 810437.156029444, 850086.320725499, + 890262.545389702, 929818.501889787, 967557.529390266, + 1002370.800231913,1033259.201313757,1059056.681099724, + 1077479.396060467}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of ethanol. +Its name in CoolProp is \"Ethanol\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Ethanol; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Heptane.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Heptane.mo new file mode 100644 index 0000000000..3e56924888 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Heptane.mo @@ -0,0 +1,57 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Heptane "Data record for n-heptane" + extends Generic( + T = { + 263.15 ,292.814444444,322.478888889,352.143333333, + 381.807777778,411.472222222,441.136666667,470.801111111, + 500.465555556,530.13 }, + p = { + 7.989173434e+02,4.640431854e+03,1.836462559e+04,5.521023193e+04, + 1.357341530e+05,2.872627666e+05,5.428996069e+05,9.414295237e+05, + 1.530128640e+06,2.375428955e+06}, + rhoLiq = { + 708.744161335,684.005361466,658.664692095,632.281562559, + 604.301119943,573.933259524,539.893343103,499.714554172, + 447.233450033,353.248453405}, + dTRef = 30, + sSatLiq = { + -796.989852616,-565.365137693,-345.670277761,-134.519732505, + 70.367270161, 270.657778517, 467.830116908, 663.725205376, + 861.998498724,1078.641393707}, + sSatVap = { + 672.954567605, 692.831668803, 739.301918155, 803.885808983, + 880.494448383, 964.465721538,1051.759799165,1137.935524319, + 1215.655239687,1260.938470215}, + sRef = { + 841.855369762, 858.118161463, 902.502690963, 966.060882441, + 1042.44988716 ,1127.000908946,1216.047379616,1306.364617459, + 1394.627619853,1477.085968924}, + hSatLiq = { + -251949.774148952,-187591.55369971 ,-120007.324894362, + -48744.573432347, 26561.273589323, 106252.748227298, + 190762.393341302, 280852.494718802, 378399.475308805, + 492237.654496714}, + hSatVap = { + 134866.100032261,180826.645196058,229873.303319793, + 281708.681968285,335874.131225473,391735.444337536, + 448355.186941404,504111.239777487,555392.492651129, + 588878.803666001}, + hRef = { + 181833.569133815,231695.382441082,284942.600720626, + 341242.380998298,400129.988352552,461040.039711463, + 523275.529594887,585905.759075288,647581.728725064, + 706410.769546266}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of n-heptane. +Its name in CoolProp is \"n-Heptane\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Heptane; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Pentane.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Pentane.mo new file mode 100644 index 0000000000..487640a3b1 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Pentane.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Pentane "Data record for n-pentane (R601)" + extends Generic( + T = { + 263.15 ,284.988888889,306.827777778,328.666666667, + 350.505555556,372.344444444,394.183333333,416.022222222, + 437.861111111,459.7 }, + p = { + 15196.961880746, 40847.01461526 , 93347.760875795, + 188229.761547615, 344161.604577882, 582381.684493329, + 926479.361144566,1402869.463375476,2042636.912945348, + 2888164.842888385}, + rhoLiq = { + 654.994012423,634.140752869,612.406165595,589.474257693, + 564.920053506,538.129125681,508.125336463,473.116841092, + 428.954697374,359.39054261 }, + dTRef = 30, + sSatLiq = { + -364.770358607,-188.383459065, -18.245572622, 147.200487718, + 309.214016986, 468.928951023, 627.576629898, 786.91058507 , + 950.457609042,1131.212144756}, + sSatVap = { + 1124.757616955,1132.064676189,1153.78271919 ,1185.735649416, + 1224.628540081,1267.744136879,1312.410414419,1355.214297416, + 1390.117806445,1397.022012012}, + sRef = { + 1296.158077524,1301.28713228 ,1321.950521732,1353.859341364, + 1393.796088528,1439.208143314,1487.913190685,1537.898827489, + 1587.138246557,1633.295767519}, + hSatLiq = { + -104421.898943934, -56052.79734228 , -5633.016486273, + 47087.837000979, 102370.736056908, 160525.092863763, + 221987.014134065, 287509.248703003, 358766.967642045, + 442086.536306975}, + hSatVap = { + 287547.387825234,320260.24955903 ,353977.819783112, + 388419.726812333,423228.612037831,457959.489455307, + 491937.078095822,523936.222010323,551277.070188378, + 564279.332284564}, + hRef = { + 335209.266682762,371013.610228284,408087.525730008, + 446185.930365794,485045.348695265,524354.800753776, + 563719.721538978,602626.895309489,640395.197254024, + 676083.07721731 }); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of n-pentane (R601). +Its name in CoolProp is \"n-Pentane\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Pentane; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Propane.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Propane.mo new file mode 100644 index 0000000000..e092686f71 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Propane.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Propane "Data record for propane (R290)" + extends Generic( + T = { + 263.15 ,273.898888889,284.647777778,295.396666667, + 306.145555556,316.894444444,327.643333333,338.392222222, + 349.141111111,359.89 }, + p = { + 345279.941449901, 485400.605038304, 664016.115440719, + 887052.541165123,1160724.363224234,1491611.619687285, + 1886825.956981318,2354347.829390035,2903681.060029375, + 3547408.027345188}, + rhoLiq = { + 541.798297226,527.579836833,512.585365108,496.632038772, + 479.466931165,460.721062294,439.816371148,415.748472388, + 386.451358179,346.106437325}, + dTRef = 30, + sSatLiq = { + 908.965062614,1006.779440037,1103.648845716,1200.001618811, + 1296.323530695,1393.220337369,1491.541227233,1592.663453966, + 1699.311221116,1819.013862619}, + sSatVap = { + 2384.567612711,2371.574136657,2361.266030228,2352.732953327, + 2345.022612092,2337.032274329,2327.310860571,2313.560971451, + 2291.337848494,2249.306043938}, + sRef = { + 2566.79611772 ,2555.493081644,2547.750842968,2542.843699325, + 2540.115085679,2538.952119832,2538.763840737,2538.951963132, + 2538.886989404,2537.853328788}, + hSatLiq = { + 175348.350832337,201875.066749143,229271.052773913, + 257657.444992465,287189.506335636,318079.809438811, + 350645.399680575,385417.4820846 ,423455.88738496 , + 467665.980896495}, + hSatVap = { + 563653.161890421,575690.817715341,587248.989642776, + 598170.43877048 ,608244.069220794,617168.568861843, + 624479.74824603 ,629363.595020986,630156.721875167, + 622523.83403136 }, + hRef = { + 614311.232841951,628792.518193016,643090.993507643, + 657134.020145737,670838.112039704,684105.52633736 , + 696821.020909884,708845.675908959,720012.482475496, + 730115.169718242}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of propane (R290). +Its name in CoolProp is \"Propane\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Propane; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R123.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R123.mo new file mode 100644 index 0000000000..423a9d7632 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R123.mo @@ -0,0 +1,57 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record R123 "Data record for R123" + extends Generic( + T = { + 263.15 ,283.559,303.968,324.377,344.786,365.195,385.604,406.013, + 426.422,446.831}, + p = { + 20246.950661932, 51440.14631405 , 112811.739858567, + 220592.87790875 , 394048.867245572, 654989.103061425, + 1027610.766894902,1539001.458950504,2221087.046991277, + 3117580.036383462}, + rhoLiq = { + 1550.145747115,1500.60589786 ,1448.898149661,1394.435970728, + 1336.357791907,1273.304710472,1202.9813059 ,1121.108147556, + 1018.10852222 , 859.35313126 }, + dTRef = 30, + sSatLiq = { + 963.291211716,1037.235356603,1107.652872739,1175.077198776, + 1240.006769354,1302.97149577 ,1364.616830223,1425.874631908, + 1488.488045482,1558.197778977}, + sSatVap = { + 1667.453790836,1662.601605167,1663.373652146,1667.947333911, + 1674.895925087,1683.00895072 ,1691.101277177,1697.69913848 , + 1700.178917251,1689.912023319}, + sRef = { + 1737.810016884,1731.404036564,1730.991249439,1734.765535334, + 1741.355559816,1749.682490995,1758.849314222,1768.045202032, + 1776.452208741,1783.116337598}, + hSatLiq = { + 190149.271365683,210376.227418011,231098.48911094 , + 252352.625193384,274200.267099774,296749.550182631, + 320190.923599748,344878.267191074,371581.94622093 , + 402995.865537189}, + hSatVap = { + 375449.654061047,387704.455494463,400019.822985702, + 412228.361018181,424143.959548608,435537.32854304 , + 446084.632282771,455242.550578245,461851.591142172, + 461849.873050608}, + hRef = { + 395009.975047329,408236.58362893 ,421577.684105208, + 434894.002641602,448042.779209191,460871.335148106, + 473205.248708475,484829.998039268,495465.443515065, + 504727.638630622}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of R123. +Its name in CoolProp is \"R123\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end R123; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R134a.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R134a.mo new file mode 100644 index 0000000000..0265b1f00c --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R134a.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record R134a "Data record for R134a" + extends Generic( + T = { + 263.15 ,274.378888889,285.607777778,296.836666667, + 308.065555556,319.294444444,330.523333333,341.752222222, + 352.981111111,364.21 }, + p = { + 200603.307472702, 306065.144055732, 449719.915074148, + 639730.094514731, 884904.588817354,1194757.011967908, + 1579685.738808544,2051381.787343061,2623740.847778454, + 3315235.242079038}, + rhoLiq = { + 1327.126163441,1290.706177259,1252.384215745,1211.660788636, + 1167.846607299,1119.946901702,1066.43367865 ,1004.714189346, + 929.529223158, 825.767527903}, + dTRef = 30, + sSatLiq = { + 950.647690901,1006.000704972,1060.270839535,1113.712093542, + 1166.611338723,1219.319709948,1272.312300214,1326.324896806, + 1382.758644761,1445.49325885 }, + sSatVap = { + 1733.350797261,1726.412875563,1721.041565618,1716.692460392, + 1712.816408039,1708.79575006 ,1703.835616881,1696.731056518, + 1685.221329816,1663.254186971}, + sRef = { + 1825.651782765,1819.26336679 ,1814.857399221,1811.970391363, + 1810.194406344,1809.157628299,1808.50662669 ,1807.888965926, + 1806.93261727 ,1805.200478092}, + hSatLiq = { + 186696.59112921 ,201653.015599322,216960.445937552, + 232677.402848669,248882.679090854,265687.289291076, + 283257.907432927,301870.718852068,322069.176904733, + 345362.177321903}, + hSatVap = { + 392664.913567861,399318.906508085,405681.704634567, + 411664.085009797,417149.647216853,421974.269587487, + 425886.432468616,428457.847058395,428832.791544889, + 424672.884952779}, + hRef = { + 418317.035128306,426163.587402212,433855.473474184, + 441342.371701698,448569.586759484,455475.412466164, + 461988.043511396,468022.071596944,473474.189346821, + 478212.639980691}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of R134a. +Its name in CoolProp is \"R134a\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end R134a; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R245fa.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R245fa.mo new file mode 100644 index 0000000000..74dda59b71 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R245fa.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record R245fa "Data record for R245fa" + extends Generic( + T = { + 263.15 ,280.245555556,297.341111111,314.436666667, + 331.532222222,348.627777778,365.723333333,382.818888889, + 399.914444444,417.01 }, + p = { + 33074.455269577, 72887.366701788, 144193.124203996, + 261432.955364019, 441494.101343335, 703414.198474153, + 1068359.342462996,1560145.848431753,2206880.485192474, + 3045794.17123294 }, + rhoLiq = { + 1428.970464918,1385.766605559,1340.65562986 ,1293.01283556 , + 1241.96829885 ,1186.239888383,1123.767592805,1050.81390283 , + 959.216593671, 822.828460561}, + dTRef = 30, + sSatLiq = { + 956.193112483,1035.364417516,1111.944630847,1186.435838862, + 1259.293596381,1330.986299328,1402.082979051,1473.433817707, + 1546.692369155,1626.938235226}, + sSatVap = { + 1753.339480749,1752.701557681,1756.61081491 ,1763.705762957, + 1772.828904987,1782.876329527,1792.610957024,1800.320573857, + 1802.878905152,1791.348871671}, + sRef = { + 1843.301914471,1841.682942619,1845.068883248,1852.125571196, + 1861.778475563,1873.119878874,1885.336511854,1897.653409147, + 1909.296310246,1919.468376844}, + hSatLiq = { + 188217.135523087,209752.050428183,231916.973241534, + 254789.508127216,278461.658759156,303057.594061445, + 328767.54169158 ,355926.037457738,385245.530754186, + 418981.075267556}, + hSatVap = { + 397986.202332377,410782.595794416,423602.732706635, + 436304.338826503,448715.160811117,460599.011089822, + 471592.735555778,481064.462239284,487698.226971601, + 487541.954771701}, + hRef = { + 422999.193929367,437043.348637611,451220.086433009, + 465419.510903738,479522.71650364 ,493393.292575899, + 506866.898229809,519740.667011956,531767.47525367 , + 542662.050436945}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of R245fa. +Its name in CoolProp is \"R245fa\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end R245fa; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R32.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R32.mo new file mode 100644 index 0000000000..5d27e81c87 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/R32.mo @@ -0,0 +1,58 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record R32 "Data record for R32" + extends Generic( + T = { + 263.15 ,271.828333333,280.506666667,289.185 , + 297.863333333,306.541666667,315.22 ,323.898333333, + 332.576666667,341.255 }, + p = { + 582632.423455563, 779227.155447199,1022507.826631392, + 1319243.784536832,1676689.244070605,2102683.141551342, + 2605825.859299297,3195797.469126429,3883981.451679397, + 4684958.748097608}, + rhoLiq = { + 1088.762616995,1059.796758515,1029.295189956, 996.920197574, + 962.201981414, 924.453822345, 882.605293946, 834.832837403, + 777.582757731, 702.054968683}, + dTRef = 30, + sSatLiq = { + 936.52451307 , 991.659733916,1046.223239241,1100.490775854, + 1154.795359523,1209.572891273,1265.450416315,1323.441013333, + 1385.463021423,1456.23976066 }, + sSatVap = { + 2191.530923721,2159.130803487,2127.849016758,2097.105691514, + 2066.253567277,2034.508896214,2000.819981866,1963.579527028, + 1919.859591813,1862.561221543}, + sRef = { + 2304.157093291,2274.544797147,2246.748153968,2220.383262429, + 2195.095643776,2170.551795417,2146.430627551,2122.413280091, + 2098.166495379,2073.295617553}, + hSatLiq = { + 182764.696330276,197695.34939879 ,212996.704346489, + 228747.503919312,245052.432711042,262058.639462482, + 279988.045994578,299208.744263246,320424.342790452, + 345361.467556621}, + hSatVap = { + 513019.633293376,515047.064455002,516399.945778408, + 516953.588304626,516542.412668788,514935.89731114 , + 511791.24044753 ,506548.541951439,498152.172848862, + 484020.697690199}, + hRef = { + 544272.165701895,548069.095566735,551444.02060146 , + 554348.972337043,556731.55185084 ,558534.039175514, + 559692.26585121 ,560133.992100001,559775.669486533, + 558511.071672622}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of R32. +Its name in CoolProp is \"R32\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end R32; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Toluene.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Toluene.mo new file mode 100644 index 0000000000..97423305d3 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/Toluene.mo @@ -0,0 +1,56 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids; +record Toluene "Data record for toluene" + extends Generic( + T = { + 263.15,298.55,333.95,369.35,404.75,440.15,475.55,510.95,546.35, + 581.75}, + p = { + 4.658645382e+02,3.878506476e+03,1.913620075e+04,6.607278574e+04, + 1.775240880e+05,3.982149511e+05,7.826031771e+05,1.394511614e+06, + 2.312008822e+06,3.647284909e+06}, + rhoLiq = { + 894.591737923,861.787657162,828.382229573,793.747189122, + 757.123274828,717.4577212 ,673.073614045,620.835702655, + 553.321381336,437.838439728}, + dTRef = 30, + sSatLiq = { + -670.300584422,-462.345778557,-265.173474299, -75.486089983, + 108.735317728, 288.918011292, 466.37022759 , 642.81477669 , + 821.684991655,1017.475208721}, + sSatVap = { + 978.30668321 , 919.722310325, 907.690979281, 926.229656023, + 964.682067033,1015.530364113,1072.870878952,1130.921098435, + 1181.095766989,1195.352192032}, + sRef = { + 1091.412085347,1033.610736055,1022.489953315,1042.016294547, + 1081.594543273,1133.917046387,1193.599794878,1256.201212851, + 1317.428314692,1372.739080272}, + hSatLiq = { + -215928.299658583,-157558.83018377 , -95210.963812949, + -28467.959306084, 42965.246838653, 119373.480365183, + 201168.191553062, 289147.81263614 , 385288.937285889, + 498520.557921947}, + hSatVap = { + 217902.702818657,255057.597752471,296467.120460337, + 341515.751482012,389409.693620114,439191.907459599, + 489589.576308111,538545.73773166 ,581653.014389845, + 602000.492963232}, + hRef = { + 249364.004857819,290767.909737456,336525.499214213, + 386015.721699957,438478.677428664,493067.399188192, + 548799.919772023,604412.858652115,658123.631255034, + 707533.724749596}); + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "pro", + Documentation(info=" ++Record containing properties of toluene. +Its name in CoolProp is \"Toluene\". +A figure in the documentation of + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +shows which lines these arrays represent. +
+")); +end Toluene; \ No newline at end of file diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.mo new file mode 100644 index 0000000000..af0fe1a2ec --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.mo @@ -0,0 +1,9 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Data; +package WorkingFluids "Package with working fluid data" + extends Modelica.Icons.Package; + annotation (Documentation(info=" ++Package for data records of specific working fluids. +
+")); +end WorkingFluids; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.order new file mode 100644 index 0000000000..a579853c54 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/WorkingFluids/package.order @@ -0,0 +1,10 @@ +Acetone +Ethanol +Heptane +Pentane +Propane +R123 +R134a +R245fa +R32 +Toluene diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.mo new file mode 100644 index 0000000000..66dbc9604a --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.mo @@ -0,0 +1,9 @@ +within IBPSA.Fluid.CHPs.OrganicRankine; +package Data "Package with working fluid data" + extends Modelica.Icons.MaterialPropertiesPackage; + annotation (Documentation(info=" ++Package for data records of working fluids. +
+")); +end Data; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.order new file mode 100644 index 0000000000..954861e71c --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Data/package.order @@ -0,0 +1,2 @@ +Generic +WorkingFluids diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mo new file mode 100644 index 0000000000..2f9103521f --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mo @@ -0,0 +1,224 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Examples; +model ORCHotWater "ORC that outputs hot water at a fixed temperature" + extends Modelica.Icons.Example; + + package MediumHot = IBPSA.Media.Air "Evaporator hot fluid"; + package MediumCol = IBPSA.Media.Water "Condenser cold fluid"; + + parameter Modelica.Units.SI.MassFlowRate mHot_flow_nominal = 1 + "Nominal mass flow rate of evaporator hot fluid"; + parameter Modelica.Units.SI.MassFlowRate mCol_flow_nominal = 1.35 + "Nominal mass flow rate of condenser cold fluid"; + parameter Modelica.Units.SI.PressureDifference dpCon_nominal( + displayUnit = "Pa") = 10000 + "Nominal pressure drop across the ORC condenser"; + parameter Modelica.Units.SI.PressureDifference dpValCol_nominal( + displayUnit = "Pa") = 10000 + "Nominal pressure difference used for valves in the cold fluid loop"; + parameter Modelica.Units.SI.ThermodynamicTemperature TCol_start = 35 + 273.15 + "Start value for cold fluid temperature"; + + IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation orc( + redeclare final package Medium1 = MediumHot, + redeclare final package Medium2 = MediumCol, + T2_start=TCol_start, + redeclare IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids.R123 pro, + final mHot_flow_nominal=mHot_flow_nominal, + dTPinEva_set=5, + TWorEva=373.15, + pWorEva(displayUnit="bar"), + final mCol_flow_nominal=mCol_flow_nominal, + dpHot_nominal=0, + dpCol_nominal=0, + dTPinCon=5, + mWor_flow_max=0.5, + mWor_flow_min=0.1, + mWor_flow_hysteresis=0.05, + etaExp=0.8, + etaPum=0.6) "Organic Rankine cycle" + annotation (Placement(transformation(extent={{-40,-44},{-20,-24}}))); + + IBPSA.Fluid.Sources.MassFlowSource_T souHot( + redeclare final package Medium = MediumHot, + m_flow=mHot_flow_nominal, + T=423.15, + nPorts=1) "Evaporator hot fluid source" + annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); + IBPSA.Fluid.Sources.Boundary_pT sinHot( + redeclare final package Medium = MediumHot, + nPorts=1) "Evaporator hot fluid sink" + annotation (Placement(transformation(extent={{120,80},{100,100}}))); + IBPSA.Controls.Continuous.LimPID conPI( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.25, + Ti=30, + Ni=0.2, + initType=Modelica.Blocks.Types.Init.InitialOutput, + y_start=0, + reverseActing=false) "PI controller" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + Modelica.Blocks.Sources.Constant TWatOut_set(k=55 + 273.15) + "Set point of hot water output" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + IBPSA.Fluid.Sources.Boundary_pT colBou( + redeclare final package Medium = MediumCol, + use_T_in=true, + nPorts=2) "Cold fluid boundary conditions" + annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={110,-60}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort senTWatSup( + redeclare final package Medium = MediumCol, + m_flow_nominal=mCol_flow_nominal, + T_start=TCol_start) + "Water supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={70,-80}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort senTWatRet( + redeclare final package Medium = MediumCol, + m_flow_nominal=mCol_flow_nominal, + T_start=TCol_start) + "Water return temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={70,-40}))); + Modelica.Blocks.Sources.TimeTable TWatRet( + y(final unit="K", displayUnit="degC"), + table=[0,35; 3,35; 6,45; 9,45], + timeScale=100, + offset=273.15) "Water return temperature values" + annotation (Placement(transformation(extent={{170,-70},{150,-50}}))); + IBPSA.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear val( + redeclare final package Medium = MediumCol, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=TCol_start, + from_dp=false, + use_strokeTime=false, + final m_flow_nominal=mCol_flow_nominal, + final dpValve_nominal=dpValCol_nominal, + final dpFixed_nominal=fill(dpCon_nominal, 2)) "Control valve" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=180, + origin={40,-40}))); + IBPSA.Fluid.Movers.Preconfigured.FlowControlled_m_flow pum( + redeclare final package Medium = MediumCol, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + T_start=TCol_start, + addPowerToMedium=false, + m_flow_nominal=mCol_flow_nominal, + dp_nominal=dpCon_nominal + dpValCol_nominal, + m_flow_start=0) "Cooling water pump" + annotation (Placement(transformation(extent={{-100,-50},{-120,-30}}))); + IBPSA.Fluid.FixedResistances.Junction spl( + redeclare final package Medium = MediumCol, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + final dp_nominal=fill(0,3), + final m_flow_nominal=mCol_flow_nominal .* {1,-1,-1}, + final from_dp=false, + T_start=TCol_start) "Flow splitter" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={40,-80}))); + Modelica.Blocks.Math.BooleanToReal booToRea( + realTrue = mCol_flow_nominal) + "Constant speed primary pump control signal" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + Modelica.Blocks.Logical.Hysteresis hys( + uLow=mCol_flow_nominal/3, + uHigh=mCol_flow_nominal/2) "Hysteresis" + annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); + Modelica.Blocks.Logical.And and1 + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort senTColOut( + redeclare final package Medium = MediumCol, + m_flow_nominal=mCol_flow_nominal, + T_start=TCol_start) annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-70,-40}))); + IBPSA.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare final package Medium = MediumCol) + "Mass flow rate sensor for the ORC condenser cold fluid" + annotation (Placement(transformation(extent={{-140,-50},{-160,-30}}))); + Modelica.Blocks.Sources.BooleanTable booTab(table={100}, startValue=false) + "Boolean table with initial false" + annotation (Placement(transformation(extent={{-180,0},{-160,20}}))); +equation + connect(orc.port_b1, sinHot.ports[1]) annotation (Line(points={{-20,-28},{-14, + -28},{-14,90},{100,90}}, + color={0,127,255})); + connect(souHot.ports[1], orc.port_a1) annotation (Line(points={{-160,90},{-46, + 90},{-46,-28},{-40,-28}}, + color={0,127,255})); + connect(TWatOut_set.y, conPI.u_s) + annotation (Line(points={{21,10},{38,10}}, color={0,0,127})); + connect(colBou.ports[1], senTWatSup.port_b) annotation (Line(points={{100,-61}, + {100,-80},{80,-80}}, color={0,127,255})); + connect(senTWatRet.port_a, colBou.ports[2]) annotation (Line(points={{80,-40}, + {100,-40},{100,-59}}, color={0,127,255})); + connect(TWatRet.y, colBou.T_in) annotation (Line(points={{149,-60},{132,-60}, + {132,-56},{122,-56}},color={0,0,127})); + connect(senTWatRet.port_b, val.port_1) + annotation (Line(points={{60,-40},{50,-40}}, color={0,127,255})); + connect(spl.port_3, val.port_3) annotation (Line(points={{40,-70},{40,-50}}, + color={0,127,255})); + connect(spl.port_2, senTWatSup.port_a) annotation (Line(points={{50,-80},{60,-80}}, + color={0,127,255})); + connect(conPI.y, val.y) + annotation (Line(points={{61,10},{80,10},{80,-20},{40,-20},{40,-28}}, + color={0,0,127})); + connect(and1.y, orc.ena) annotation (Line(points={{-119,50},{-54,50},{-54,-34}, + {-41,-34}},color={255,0,255})); + connect(orc.port_b2,senTColOut. port_a) annotation (Line(points={{-40,-40},{-60, + -40}}, color={0,127,255})); + connect(senTColOut.port_b, pum.port_a) + annotation (Line(points={{-80,-40},{-100,-40}}, color={0,127,255})); + connect(senTColOut.T, conPI.u_m) annotation (Line(points={{-70,-29},{-70,-12}, + {50,-12},{50,-2}}, color={0,0,127})); + connect(val.port_2, orc.port_a2) annotation (Line(points={{30,-40},{-20,-40}}, + color={0,127,255})); + connect(pum.m_flow_in, booToRea.y) + annotation (Line(points={{-110,-28},{-110,10},{-118,10}}, + color={0,0,127})); + connect(spl.port_1, senMasFlo.port_b) annotation (Line(points={{30,-80},{-180, + -80},{-180,-40},{-160,-40}}, + color={0,127,255})); + connect(senMasFlo.port_a, pum.port_b) + annotation (Line(points={{-140,-40},{-120,-40}}, color={0,127,255})); + connect(booTab.y, booToRea.u) + annotation (Line(points={{-159,10},{-142,10}}, color={255,0,255})); + connect(booTab.y, and1.u2) annotation (Line(points={{-159,10},{-150,10},{-150, + 42},{-142,42}}, color={255,0,255})); + connect(hys.y, and1.u1) + annotation (Line(points={{-158,50},{-142,50}}, color={255,0,255})); + connect(senMasFlo.m_flow, hys.u) annotation (Line(points={{-150,-29},{-150,-20}, + {-190,-20},{-190,50},{-182,50}}, color={0,0,127})); +annotation(experiment(StopTime=900,Tolerance=1E-6), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mos" + "Simulate and plot"), + Documentation(info=" ++This example model demonstrates how + +IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation +can be integrated in a system. +The three-way valve is controlled to track the hot water +output temperature, which is the cold fluid of the ORC, +at a set point of 55°C. +In addition, a safety control sequence prevents the ORC from turning on +until a minimum flow rate is established in the condenser water loop. +
+",revisions=" ++This package contains examples. +
+")); +end Examples; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Examples/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/Examples/package.order new file mode 100644 index 0000000000..8ad1dded5c --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Examples/package.order @@ -0,0 +1 @@ +ORCHotWater diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mo b/IBPSA/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mo new file mode 100644 index 0000000000..9df9da0be9 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mo @@ -0,0 +1,155 @@ +within IBPSA.Fluid.CHPs.OrganicRankine.Validation; +model VariableSource + "ORC with waste heat stream with variable flow rate and temperature" + extends Modelica.Icons.Example; + + package MediumHot = IBPSA.Media.Air "Evaporator hot fluid"; + package MediumCol = IBPSA.Media.Water "Condenser cold fluid"; + + parameter IBPSA.Fluid.CHPs.OrganicRankine.Data.WorkingFluids.R245fa pro + "Property record of the working fluid" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + parameter Modelica.Units.SI.MassFlowRate mHot_flow_nominal = 1 + "Nominal mass flow rate of evaporator hot fluid"; + parameter Modelica.Units.SI.MassFlowRate mCol_flow_nominal = 1 + "Nominal mass flow rate of condenser cold fluid"; + + IBPSA.Fluid.CHPs.OrganicRankine.ConstantEvaporation orc( + redeclare package Medium1 = MediumHot, + redeclare package Medium2 = MediumCol, + pro=pro, + tau1=0, + tau2=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + T1_start(displayUnit="K") = 350, + T2_start(displayUnit="K") = 290, + dpHot_nominal = 0, + dpCol_nominal = 0, + mHot_flow_nominal=mHot_flow_nominal, + mCol_flow_nominal=mCol_flow_nominal, + mWor_flow_max = + 3E4 / ( + IBPSA.Utilities.Math.Functions.smoothInterpolation( + x = orc.TWorEva, + xSup = pro.T, + ySup = pro.hSatVap) - + IBPSA.Utilities.Math.Functions.smoothInterpolation( + x = 300, + xSup = pro.T, + ySup = pro.hSatLiq)), + mWor_flow_min = orc.mWor_flow_max * 0.2, + TWorEva=350, + etaExp=0.7, + etaPum=0.7) "Organic Rankine cycle" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Fluid.Sources.MassFlowSource_T souHot( + redeclare final package Medium = MediumHot, + m_flow=mHot_flow_nominal, + T=orc.TWorEva + 20, + nPorts=1, + use_m_flow_in=true, + use_T_in=true) "Evaporator hot fluid source" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Fluid.Sources.Boundary_pT sinHot( + redeclare final package Medium = MediumHot, + nPorts=1) "Evaporator hot fluid sink" + annotation (Placement(transformation(extent={{80,20},{60,40}}))); + IBPSA.Fluid.Sources.MassFlowSource_T souCol( + redeclare final package Medium = MediumCol, + m_flow=mCol_flow_nominal, + nPorts=1) "Condenser cold fluid source" + annotation (Placement(transformation(extent={{40,-40},{20,-20}}))); + IBPSA.Fluid.Sources.Boundary_pT sinCol( + redeclare final package Medium = MediumCol, + nPorts=1) "Condenser cold fluid sink" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort THotOut( + redeclare final package Medium = MediumHot, + final m_flow_nominal=mHot_flow_nominal, + tau=0) "Outgoing temperature of evaporator hot fluid" + annotation (Placement(transformation(extent={{30,20},{50,40}}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort TColOut( + redeclare final package Medium = MediumCol, + final m_flow_nominal=mCol_flow_nominal, + tau=0) "Outgoing temperature of condenser cold fluid" + annotation (Placement(transformation(extent={{-30,-40},{-50,-20}}))); + + Modelica.Blocks.Sources.BooleanConstant tru(k=true) "Constant true" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + + Modelica.Blocks.Sources.TimeTable mHot_flow_set(table=[ + 0,0; + 20,0; + 50,mHot_flow_nominal*1.5; + 250,mHot_flow_nominal*1.5; + 280,0; + 300,0]) + "Sets the hot fluid flow rate in the evaporator" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + Modelica.Blocks.Sources.TimeTable THotIn_set(table=[ + 0,orc.TWorEva + 20; + 100,orc.TWorEva + 20; + 150,orc.TWorEva - 5; + 200,orc.TWorEva + 20; + 300,orc.TWorEva + 20]) + "Sets the hot fluid incoming temperature in the evaporator" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); +equation + connect(souHot.ports[1],orc. port_a1) annotation (Line(points={{-20,30},{-16,30}, + {-16,6},{-10,6}}, color={0,127,255})); + connect(souCol.ports[1],orc. port_a2) annotation (Line(points={{20,-30},{16,-30}, + {16,-6},{10,-6}}, color={0,127,255})); + connect(sinHot.ports[1],THotOut. port_b) + annotation (Line(points={{60,30},{50,30}}, color={0,127,255})); + connect(THotOut.port_a,orc. port_b1) annotation (Line(points={{30,30},{16,30}, + {16,6},{10,6}}, color={0,127,255})); + connect(TColOut.port_a,orc. port_b2) annotation (Line(points={{-30,-30},{-16,-30}, + {-16,-6},{-10,-6}}, color={0,127,255})); + connect(sinCol.ports[1], TColOut.port_b) + annotation (Line(points={{-60,-30},{-50,-30}}, color={0,127,255})); + connect(tru.y, orc.ena) + annotation (Line(points={{-19,0},{-11,0}},color={255,0,255})); + connect(mHot_flow_set.y, souHot.m_flow_in) annotation (Line(points={{-59,50},{ + -50,50},{-50,38},{-42,38}}, color={0,0,127})); + connect(THotIn_set.y, souHot.T_in) annotation (Line(points={{-59,10},{-50,10}, + {-50,34},{-42,34}}, color={0,0,127})); + annotation(experiment(StopTime=300,Tolerance=1E-6), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mos" + "Simulate and plot"), + Documentation(info=" ++This model demonstrates how the ORC model reacts to variable flow rate +and temperature of the incoming hot fluid carrying waste heat. +Normally, the working fluid flow rate of the cycle +ṁw is found from +the set point for the evaporator pinch point temperature differential +ΔTpin,eva. +This constraint is relaxed under any of the following two conditions: +
++This package contains validation models for the classes in + +IBPSA.Fluid.CHPs.OrganicRankine. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/Validation/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/Validation/package.order new file mode 100644 index 0000000000..cd35ba383f --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/Validation/package.order @@ -0,0 +1 @@ +VariableSource diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/package.mo b/IBPSA/Fluid/CHPs/OrganicRankine/package.mo new file mode 100644 index 0000000000..9a4fcf0106 --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/package.mo @@ -0,0 +1,9 @@ +within IBPSA.Fluid.CHPs; +package OrganicRankine "Package for the rankine cycle" + extends Modelica.Icons.VariantsPackage; + annotation (Documentation(info=" ++Package with a model of an organic Rankine cycle. +
+")); +end OrganicRankine; diff --git a/IBPSA/Fluid/CHPs/OrganicRankine/package.order b/IBPSA/Fluid/CHPs/OrganicRankine/package.order new file mode 100644 index 0000000000..cdf4e1c5fa --- /dev/null +++ b/IBPSA/Fluid/CHPs/OrganicRankine/package.order @@ -0,0 +1,5 @@ +ConstantEvaporation +Data +Examples +Validation +BaseClasses diff --git a/IBPSA/Fluid/CHPs/package.mo b/IBPSA/Fluid/CHPs/package.mo new file mode 100644 index 0000000000..91192f873f --- /dev/null +++ b/IBPSA/Fluid/CHPs/package.mo @@ -0,0 +1,10 @@ +within IBPSA.Fluid; +package CHPs "Package with model for combined heat and power device" + extends Modelica.Icons.VariantsPackage; + +annotation (preferredView="info", Documentation(info=" ++This package contains models for combined heat and power plant. +
+")); +end CHPs; diff --git a/IBPSA/Fluid/CHPs/package.order b/IBPSA/Fluid/CHPs/package.order new file mode 100644 index 0000000000..7ec1bfe1a5 --- /dev/null +++ b/IBPSA/Fluid/CHPs/package.order @@ -0,0 +1 @@ +OrganicRankine diff --git a/IBPSA/Fluid/package.order b/IBPSA/Fluid/package.order index 43ef0cc687..74bde15564 100644 --- a/IBPSA/Fluid/package.order +++ b/IBPSA/Fluid/package.order @@ -1,5 +1,6 @@ UsersGuide Actuators +CHPs Chillers Delays FMI diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.pdf b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.pdf new file mode 100644 index 0000000000..0da76d1e29 Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.pdf differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.png b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.png new file mode 100644 index 0000000000..12b57fa05b Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.png differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.svg b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.svg new file mode 100644 index 0000000000..6e56f6ca1a --- /dev/null +++ b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/ComputationPaths.svg @@ -0,0 +1,684 @@ + + + + diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.pdf b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.pdf new file mode 100644 index 0000000000..9a6d2e3b28 Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.pdf differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.png b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.png new file mode 100644 index 0000000000..b1ff89d604 Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.png differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.svg b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.svg new file mode 100644 index 0000000000..f81e8d2928 --- /dev/null +++ b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/CycleArchitecture.svg @@ -0,0 +1,621 @@ + + + + diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.pdf b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.pdf new file mode 100644 index 0000000000..db0b5984bc Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.pdf differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.png b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.png new file mode 100644 index 0000000000..47e51ccbf2 Binary files /dev/null and b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.png differ diff --git a/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.svg b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.svg new file mode 100644 index 0000000000..9b556a6da6 --- /dev/null +++ b/IBPSA/Resources/Images/Fluid/CHPs/OrganicRankine/SupportCurves.svg @@ -0,0 +1,234 @@ + + + + diff --git a/IBPSA/Resources/Python-Sources/MakeORCFluidRecord.py b/IBPSA/Resources/Python-Sources/MakeORCFluidRecord.py new file mode 100644 index 0000000000..2c8ad580a7 --- /dev/null +++ b/IBPSA/Resources/Python-Sources/MakeORCFluidRecord.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Example python code used to generate working fluid records for +Fluid.CHPs.OrganicRankine.Data. +Note that this script is not maintained. + +This file was created at: + Python 3.11.9 + Ubuntu 20.04.3 + CoolProp 6.6.0 + Modelica IBPSA Library 6612f5a + Modelica Buildings Library c34c05a +""" + +import CoolProp.CoolProp as CP + +import numpy as np +import os + +WITHIN = "IBPSA." # e.g. "IBPSA." or "Buildings." +FLUIDNAME = {"coolprop" : "n-Pentane", + "modelica" : "Pentane", + "description" : "n-pentane (R601)"} +""" To find a fluid name in CoolProp, + ``` + import CoolProp + print(CoolProp.__fluids__) + ``` + The Modelica name will be used as the class name, so make sure it is legal. + The description name is whatever you want it to appear + in descriptions and documentations. +""" +dTRef = 30 + # Temperature difference from the reference line to the saturated vapour line +dirOutput = os.path.dirname(os.path.realpath(__file__)) + +def ModelicaArray(arr): + s = "{\n" + " "*9 \ + + np.array2string(arr, + max_line_width=75, + precision=9, + separator=",", + prefix=" "*8).replace("[","").replace("]","") \ + + "}" + return s + +def WriteOneFile(fluid, dTRef = 30): + nCP = fluid["coolprop"] + nMO = fluid["modelica"] + nDS = fluid["description"] + + TCri = CP.PropsSI(nCP, 'Tcrit') + + TMax = TCri -10 + TMin = 273.15 - 10 + + T = np.linspace(TMin,TMax,10) + p = CP.PropsSI('P','T',T,'Q',1,nCP) + rhoLiq = CP.PropsSI('D','T',T,'Q',0,nCP) + + sSatLiq = CP.PropsSI('S','T',T,'Q',0,nCP) # Entropy of saturated liquid + sSatVap = CP.PropsSI('S','T',T,'Q',1,nCP) # Entropy of saturated vapour + sSupVap = CP.PropsSI('S','T',T+dTRef,'P',p,nCP) # Entropy of superheated vapour + hSatLiq = CP.PropsSI('H','T',T,'Q',0,nCP) # Enthalpy of saturated liquid + hSatVap = CP.PropsSI('H','T',T,'Q',1,nCP) # Enthalpy of saturated vapour + hSupVap = CP.PropsSI('H','T',T+dTRef,'P',p,nCP) # Enthalpy of superheated vapour + + with open(os.path.join(dirOutput, nMO + '.mo'), 'w') as f: + # header + f.write(f'within {WITHIN}Fluid.CHPs.OrganicRankine.Data.WorkingFluids;\n') + f.write(f'record {nMO} "Data record for {nDS}"\n') + f.write(' extends Generic(\n') + + # data + f.write(' '*4 + f'T = {ModelicaArray(T)},\n') + f.write(' '*4 + f'p = {ModelicaArray(p)},\n') + f.write(' '*4 + f'rhoLiq = {ModelicaArray(rhoLiq)},\n') + f.write(' '*4 + f'dTRef = {str(dTRef)},\n') + f.write(' '*4 + f'sSatLiq = {ModelicaArray(sSatLiq)},\n') + f.write(' '*4 + f'sSatVap = {ModelicaArray(sSatVap)},\n') + f.write(' '*4 + f'sRef = {ModelicaArray(sSupVap)},\n') + f.write(' '*4 + f'hSatLiq = {ModelicaArray(hSatLiq)},\n') + f.write(' '*4 + f'hSatVap = {ModelicaArray(hSatVap)},\n') + f.write(' '*4 + f'hRef = {ModelicaArray(hSupVap)});\n') + + # annotation + f.write(' '*2 + 'annotation (\n') + f.write(' '*2 + 'defaultComponentPrefixes = "parameter",\n') + f.write(' '*2 + 'defaultComponentName = "pro",\n') + f.write(' '*2 + 'Documentation(info="\n') + f.write('\n') + f.write(f'Record containing properties of {nDS}.\n') + f.write(f'Its name in CoolProp is \\"{nCP}\\".\n') + f.write('A figure in the documentation of\n') + f.write(f'\n') + f.write(f'{WITHIN}Fluid.CHPs.OrganicRankine.ConstantEvaporation\n') + f.write('shows which lines these arrays represent.\n') + f.write('
\n') + f.write('"));\n') + + # end + f.write(f'end {nMO};') + print(f'File written: {nMO}.mo') + +####################################################################### + +WriteOneFile(FLUIDNAME,dTRef = dTRef) \ No newline at end of file diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_DryFluid.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_DryFluid.txt new file mode 100644 index 0000000000..3815da5c55 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_DryFluid.txt @@ -0,0 +1,9 @@ +last-generated=2024-08-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +cyc.etaThe=[1.980379521846771e-01, 1.980379521846771e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_WetFluid.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_WetFluid.txt new file mode 100644 index 0000000000..ddb05ccefa --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_BaseClasses_Validation_WetFluid.txt @@ -0,0 +1,10 @@ +last-generated=2024-08-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +cyc.etaThe=[8.098627626895905e-02, 8.098627626895905e-02] +cyc.dTSup=[3.80600905418396e+00, 3.80600905418396e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Examples_ORCHotWater.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Examples_ORCHotWater.txt new file mode 100644 index 0000000000..77a99cfb65 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Examples_ORCHotWater.txt @@ -0,0 +1,21 @@ +last-generated=2024-10-17 +statistics-initialization= +{ + "nonlinear": "1, 0, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "1, 4, 1", + "number of continuous time states": "9", + "numerical Jacobians": "0" +} +time=[0e+00, 9e+02] +pum.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.600000143051147e-01, 7.649999856948853e-01, 1.169999957084656e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00, 1.350000023841858e+00] +orc.PExp=[-0e+00, -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.047607421875e+03, -5.679322265625e+03, -5.591501953125e+03, -5.2858798828125e+03, -4.98615576171875e+03, -4.69414501953125e+03, -4.418654296875e+03, -4.21325390625e+03, -4.1798173828125e+03, -4.560865234375e+03, -4.90720751953125e+03, -4.82639501953125e+03, -4.6282041015625e+03, -4.5874912109375e+03, -4.679552734375e+03, -4.73887353515625e+03, -4.71108349609375e+03, -4.6709755859375e+03, -4.67110400390625e+03, -4.69270556640625e+03, -4.7004765625e+03, -4.68892431640625e+03, -4.67389501953125e+03, -4.673931640625e+03, -4.6816318359375e+03, -4.68426953125e+03, -4.6811083984375e+03, -4.678287109375e+03, -4.67847705078125e+03, -4.679673828125e+03, -4.67972412109375e+03, -4.67879443359375e+03, -4.67798388671875e+03, -4.67763232421875e+03, -4.67743115234375e+03, -4.6770263671875e+03, -4.676416015625e+03, -4.6757939453125e+03, -4.67519970703125e+03, -4.6745322265625e+03, -4.6737783203125e+03, -4.67298046875e+03, -4.67210205078125e+03, -4.67109228515625e+03, -4.669974609375e+03, -4.66876123046875e+03, -4.66739404296875e+03, -4.6658291015625e+03, -4.6640751953125e+03, -4.66210107421875e+03, -4.65984521484375e+03, -4.657267578125e+03, -4.6543369140625e+03, -4.651001953125e+03, -4.64889501953125e+03, -4.66262939453125e+03, -4.6811357421875e+03, -4.690380859375e+03, -4.69413720703125e+03, -4.6951064453125e+03, -4.69359130859375e+03, -4.69105859375e+03, -4.68932421875e+03, -4.688853515625e+03, -4.689189453125e+03, -4.68971728515625e+03, -4.69006201171875e+03, -4.6901416015625e+03, -4.6900625e+03, -4.6899580078125e+03, -4.68989892578125e+03, -4.6898857421875e+03, -4.6898916015625e+03, -4.68990185546875e+03, -4.6899140625e+03, -4.689923828125e+03, -4.68992578125e+03, -4.68992041015625e+03, -4.6899150390625e+03, -4.6899150390625e+03, -4.6899169921875e+03, -4.68991748046875e+03, -4.68991650390625e+03, -4.68991455078125e+03, -4.6899140625e+03, -4.689916015625e+03, -4.68991845703125e+03, -4.6899208984375e+03] +orc.PPum=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.16175048828125e+02, 2.278022003173828e+02, 2.262939300537109e+02, 2.207820129394531e+02, 2.149391479492188e+02, 2.087775573730469e+02, 2.024923248291016e+02, 1.974808654785156e+02, 1.966373596191406e+02, 2.057969207763672e+02, 2.133211822509766e+02, 2.116288604736328e+02, 2.073166198730469e+02, 2.064012145996094e+02, 2.0845654296875e+02, 2.097534942626953e+02, 2.091485443115234e+02, 2.082672576904297e+02, 2.082700958251953e+02, 2.087459411621094e+02, 2.089164276123047e+02, 2.08662841796875e+02, 2.083317260742188e+02, 2.083325500488281e+02, 2.085023498535156e+02, 2.085604400634766e+02, 2.084908142089844e+02, 2.084286346435547e+02, 2.084328308105469e+02, 2.084592132568359e+02, 2.084603118896484e+02, 2.084398193359375e+02, 2.084219512939453e+02, 2.084141998291016e+02, 2.084097595214844e+02, 2.084008331298828e+02, 2.083873748779297e+02, 2.083736419677734e+02, 2.083605346679688e+02, 2.083458099365234e+02, 2.083291625976562e+02, 2.083115386962891e+02, 2.082921447753906e+02, 2.082698364257812e+02, 2.082451324462891e+02, 2.082183074951172e+02, 2.081880798339844e+02, 2.081534576416016e+02, 2.081146392822266e+02, 2.080709381103516e+02, 2.080209503173828e+02, 2.079638061523438e+02, 2.078987884521484e+02, 2.078247222900391e+02, 2.077778930664062e+02, 2.080826263427734e+02, 2.084914245605469e+02, 2.086948699951172e+02, 2.087773742675781e+02, 2.087986450195312e+02, 2.08765380859375e+02, 2.087097473144531e+02, 2.08671630859375e+02, 2.086612854003906e+02, 2.086686706542969e+02, 2.086802825927734e+02, 2.086878509521484e+02, 2.086896057128906e+02, 2.086878662109375e+02, 2.086855621337891e+02, 2.086842803955078e+02, 2.086839752197266e+02, 2.086841125488281e+02, 2.086843414306641e+02, 2.086846008300781e+02, 2.086848297119141e+02, 2.086848602294922e+02, 2.086847381591797e+02, 2.086846313476562e+02, 2.086846160888672e+02, 2.086846618652344e+02, 2.086846771240234e+02, 2.086846466064453e+02, 2.086846160888672e+02, 2.086846008300781e+02, 2.086846466064453e+02, 2.086847076416016e+02, 2.086847534179688e+02] +orc.QEva_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -6.16321484375e+04, -6.3274328125e+04, -6.30512109375e+04, -6.226166796875e+04, -6.146783203125e+04, -6.067626953125e+04, -5.991373828125e+04, -5.93358359375e+04, -5.924104296875e+04, -6.030921875e+04, -6.125556640625e+04, -6.10369453125e+04, -6.049511328125e+04, -6.0382828125e+04, -6.06362578125e+04, -6.079865234375e+04, -6.07226640625e+04, -6.061271484375e+04, -6.06130703125e+04, -6.067232421875e+04, -6.06936171875e+04, -6.06619609375e+04, -6.062073046875e+04, -6.062083203125e+04, -6.06419609375e+04, -6.06491953125e+04, -6.06405234375e+04, -6.063278515625e+04, -6.06333046875e+04, -6.063658984375e+04, -6.06367265625e+04, -6.063417578125e+04, -6.0631953125e+04, -6.063098828125e+04, -6.063043359375e+04, -6.062932421875e+04, -6.06276484375e+04, -6.062594140625e+04, -6.06243125e+04, -6.062248046875e+04, -6.062041015625e+04, -6.061821875e+04, -6.061580859375e+04, -6.06130390625e+04, -6.060996875e+04, -6.060663671875e+04, -6.06028828125e+04, -6.05985859375e+04, -6.059376953125e+04, -6.058834765625e+04, -6.05821484375e+04, -6.057506640625e+04, -6.056701171875e+04, -6.055784375e+04, -6.055205078125e+04, -6.0589796875e+04, -6.064059765625e+04, -6.0665953125e+04, -6.067625e+04, -6.067890625e+04, -6.067475390625e+04, -6.066780859375e+04, -6.06630546875e+04, -6.0661765625e+04, -6.06626875e+04, -6.06641328125e+04, -6.0665078125e+04, -6.0665296875e+04, -6.0665078125e+04, -6.066479296875e+04, -6.06646328125e+04, -6.066459375e+04, -6.0664609375e+04, -6.0664640625e+04, -6.0664671875e+04, -6.066469921875e+04, -6.066470703125e+04, -6.066469140625e+04, -6.066467578125e+04, -6.066467578125e+04, -6.06646796875e+04, -6.066468359375e+04, -6.06646796875e+04, -6.066467578125e+04, -6.0664671875e+04, -6.06646796875e+04, -6.06646875e+04, -6.066469140625e+04] +orc.QCon_flow=[0e+00, 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.680071484375e+04, 5.782280859375e+04, 5.768600390625e+04, 5.71965703125e+04, 5.66966171875e+04, 5.619090234375e+04, 5.569757421875e+04, 5.53200625e+04, 5.525786328125e+04, 5.595415234375e+04, 5.65616796875e+04, 5.64221796875e+04, 5.60742265625e+04, 5.600173828125e+04, 5.616516015625e+04, 5.626953515625e+04, 5.622073046875e+04, 5.61500078125e+04, 5.6150234375e+04, 5.61883671875e+04, 5.620205859375e+04, 5.618169921875e+04, 5.615516796875e+04, 5.615523046875e+04, 5.616883203125e+04, 5.6173484375e+04, 5.616790625e+04, 5.616292578125e+04, 5.616326171875e+04, 5.6165375e+04, 5.61654609375e+04, 5.61638203125e+04, 5.6162390625e+04, 5.616176953125e+04, 5.61614140625e+04, 5.616069921875e+04, 5.615962109375e+04, 5.61585234375e+04, 5.615747265625e+04, 5.615629296875e+04, 5.61549609375e+04, 5.615355078125e+04, 5.6152e+04, 5.615021484375e+04, 5.614823828125e+04, 5.614609375e+04, 5.614367578125e+04, 5.614091015625e+04, 5.613780859375e+04, 5.613431640625e+04, 5.613032421875e+04, 5.612576171875e+04, 5.612057421875e+04, 5.61146640625e+04, 5.611093359375e+04, 5.613525e+04, 5.6167953125e+04, 5.6184265625e+04, 5.6190890625e+04, 5.619259765625e+04, 5.618992578125e+04, 5.61854609375e+04, 5.618240234375e+04, 5.618157421875e+04, 5.61821640625e+04, 5.618309765625e+04, 5.6183703125e+04, 5.618384375e+04, 5.618370703125e+04, 5.618351953125e+04, 5.618341796875e+04, 5.618339453125e+04, 5.618340234375e+04, 5.6183421875e+04, 5.61834453125e+04, 5.61834609375e+04, 5.618346484375e+04, 5.6183453125e+04, 5.61834453125e+04, 5.61834453125e+04, 5.618344921875e+04, 5.618344921875e+04, 5.618344921875e+04, 5.61834453125e+04, 5.61834453125e+04, 5.61834453125e+04, 5.6183453125e+04, 5.618345703125e+04] +senTWatSup.T=[3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081500244140625e+02, 3.081500244140625e+02, 3.081500244140625e+02, 3.08884521484375e+02, 3.15165283203125e+02, 3.242608642578125e+02, 3.277221984863281e+02, 3.278239440917969e+02, 3.275229797363281e+02, 3.275411376953125e+02, 3.278572998046875e+02, 3.280862426757812e+02, 3.28076904296875e+02, 3.280145874023438e+02, 3.280353088378906e+02, 3.281051635742188e+02, 3.281397094726562e+02, 3.281302185058594e+02, 3.2812060546875e+02, 3.28140380859375e+02, 3.281753845214844e+02, 3.28195068359375e+02, 3.281971435546875e+02, 3.281977233886719e+02, 3.282046203613281e+02, 3.282132263183594e+02, 3.282182922363281e+02, 3.282203369140625e+02, 3.282225646972656e+02, 3.282260437011719e+02, 3.282298278808594e+02, 3.282331848144531e+02, 3.282361755371094e+02, 3.282393493652344e+02, 3.282429504394531e+02, 3.282467956542969e+02, 3.282508239746094e+02, 3.282551879882812e+02, 3.282599487304688e+02, 3.282650756835938e+02, 3.282706909179688e+02, 3.282768859863281e+02, 3.282837829589844e+02, 3.282913513183594e+02, 3.282994079589844e+02, 3.283086242675781e+02, 3.283192749023438e+02, 3.283303527832031e+02, 3.28345947265625e+02, 3.283599548339844e+02, 3.283786926269531e+02, 3.283974304199219e+02, 3.284041137695312e+02, 3.283757019042969e+02, 3.283257141113281e+02, 3.282757568359375e+02, 3.282337951660156e+02, 3.282029113769531e+02, 3.281841125488281e+02, 3.281746215820312e+02, 3.28169921875e+02, 3.281665954589844e+02, 3.281632690429688e+02, 3.28159912109375e+02, 3.281569519042969e+02, 3.2815478515625e+02, 3.281533508300781e+02, 3.281524963378906e+02, 3.281518859863281e+02, 3.281514587402344e+02, 3.28151123046875e+02, 3.281508483886719e+02, 3.28150634765625e+02, 3.281504516601562e+02, 3.281502990722656e+02, 3.281502380371094e+02, 3.281501770019531e+02, 3.28150146484375e+02, 3.281500854492188e+02, 3.281500854492188e+02, 3.281500549316406e+02, 3.281500549316406e+02, 3.281500549316406e+02, 3.281500244140625e+02, 3.281500244140625e+02] +senTWatRet.T=[3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081500244140625e+02, 3.081500244140625e+02, 3.081500244140625e+02, 3.081500244140625e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.0828564453125e+02, 3.085830383300781e+02, 3.088848876953125e+02, 3.091864929199219e+02, 3.094873352050781e+02, 3.097879943847656e+02, 3.100889892578125e+02, 3.1039013671875e+02, 3.106912231445312e+02, 3.109921875e+02, 3.112931518554688e+02, 3.115941467285156e+02, 3.118951721191406e+02, 3.121961669921875e+02, 3.124971618652344e+02, 3.127981567382812e+02, 3.130991516113281e+02, 3.13400146484375e+02, 3.137011108398438e+02, 3.140021057128906e+02, 3.143031005859375e+02, 3.146040649414062e+02, 3.149050598144531e+02, 3.152060241699219e+02, 3.155070190429688e+02, 3.158079833984375e+02, 3.161089172363281e+02, 3.164098510742188e+02, 3.167108154296875e+02, 3.1701171875e+02, 3.173127746582031e+02, 3.176136169433594e+02, 3.179146118164062e+02, 3.181482543945312e+02, 3.181500854492188e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02, 3.181499938964844e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Validation_VariableSource.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Validation_VariableSource.txt new file mode 100644 index 0000000000..2eb4c2d937 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Fluid_CHPs_OrganicRankine_Validation_VariableSource.txt @@ -0,0 +1,18 @@ +last-generated=2024-08-20 +statistics-simulation= +{ + "linear": "0, 0, 0", + "nonlinear": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 3e+02] +mHot_flow_set.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000000074505824e-02, 2.000000029802322e-01, 3.499999940395355e-01, 5e-01, 6.499999761581421e-01, 8.00000011920929e-01, 9.49999988079071e-01, 1.100000023841858e+00, 1.25e+00, 1.399999976158142e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.399999976158142e+00, 1.25e+00, 1.100000023841858e+00, 9.49999988079071e-01, 8.00000011920929e-01, 6.499999761581421e-01, 5e-01, 3.499999940395355e-01, 2.000000029802322e-01, 5.000000074505806e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +souHot.T_in=[3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.69e+02, 3.675e+02, 3.66e+02, 3.645e+02, 3.63e+02, 3.615e+02, 3.6e+02, 3.585e+02, 3.57e+02, 3.555e+02, 3.54e+02, 3.525e+02, 3.51e+02, 3.495e+02, 3.48e+02, 3.465e+02, 3.45e+02, 3.465e+02, 3.48e+02, 3.495e+02, 3.51e+02, 3.525e+02, 3.54e+02, 3.555e+02, 3.57e+02, 3.585e+02, 3.6e+02, 3.615e+02, 3.63e+02, 3.645e+02, 3.66e+02, 3.675e+02, 3.69e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02, 3.7e+02] +orc.cyc.TWorEva=[3.5e+02, 3.5e+02] +orc.cyc.mWor_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.782351970672607e-02, 9.241543710231781e-02, 1.07007347047329e-01, 1.215992569923401e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.215992569923401e-01, 1.070073470473289e-01, 9.241543710231781e-02, 7.782351970672607e-02, 6.323160976171494e-02, 4.863970354199409e-02, 3.404778987169273e-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, 7.782351970672607e-02, 9.241543710231781e-02, 1.070073470473289e-01, 1.215992569923401e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.326909810304642e-01, 1.215992569923401e-01, 1.070073470473289e-01, 9.241543710231781e-02, 7.782351970672607e-02, 6.323160976171494e-02, 4.863970354199409e-02, 3.404778987169266e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +orc.cyc.mWor_flow_max=[1.326909810304642e-01, 1.326909810304642e-01] +orc.cyc.mWor_flow_min=[2.653819508850574e-02, 2.653819508850574e-02] +orc.cyc.dTPinEva=[9.397287368774414e+00, 9.397287368774414e+00, 9.397287368774414e+00, 9.397287368774414e+00, 9.397287368774414e+00, 9.397287368774414e+00, 9.397287368774414e+00, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 5e+00, 5e+00, 5e+00, 5e+00, 5.38550853729248e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 5.359807968139641e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 7e+00, 5.5e+00, 4e+00, 2.5e+00, 1e+00, -5e-01, -2e+00, -3.5e+00, -5e+00, -3.5e+00, -2e+00, -5e-01, 1e+00, 2.5e+00, 4.000000000000014e+00, 5.499999999999986e+00, 7e+00, 8.5e+00, 1e+01, 1.15e+01, 5e+00, 5e+00, 5e+00, 5e+00, 5.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 6.359807968139648e+00, 5.38550853729248e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01] +orc.cyc.dTPinEva_set=[5e+00, 5e+00] +orc.ena=[1e+00, 1e+00] +orc.on_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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/DryFluid.mos b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/DryFluid.mos new file mode 100644 index 0000000000..34c8bc07c1 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/DryFluid.mos @@ -0,0 +1,12 @@ +simulateModel("IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.Validation.DryFluid", + method="dassl", stopTime=1, tolerance=1e-06, resultFile="DryFluid"); +// Plot commands +createPlot(id=1, + position={95, 95, 592, 371}, + y={"cyc.etaThe"}, + range={0.0, 1.0, 0.13, 0.165}, + grid=true, + colors={{28,108,200}}, + timeUnit="s", + displayUnits={"1"}); + diff --git a/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/WetFluid.mos b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/WetFluid.mos new file mode 100644 index 0000000000..add3b5ad7c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/BaseClasses/Validation/WetFluid.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Fluid.CHPs.OrganicRankine.BaseClasses.Validation.WetFluid", + method="dassl", stopTime=1, tolerance=1e-06, resultFile="WetFluid"); +// Plot commands +createPlot(id=1, position={120, 7, 595, 507}, y={"cyc.etaThe"}, range={0.0, 1.0, 0.08, 0.10500000000000001}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={120, 7, 595, 507}, y={"cyc.dTSup"}, range={0.0, 1.0, 3.6, 4.800000000000001}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); + diff --git a/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mos b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mos new file mode 100644 index 0000000000..79ee91e226 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Examples/ORCHotWater.mos @@ -0,0 +1,8 @@ +simulateModel("IBPSA.Fluid.CHPs.OrganicRankine.Examples.ORCHotWater", + method="Cvode", stopTime=900, tolerance=1e-06, resultFile="ORCHotWater"); +// Plot commands +createPlot(id=1, position={147, 7, 573, 658}, y={"pum.m_flow"}, range={0.0, 900.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"kg/s"}); +createPlot(id=1, position={147, 7, 573, 658}, y={"orc.PExp", "orc.PPum"}, range={0.0, 900.0, -5000.0, 10000.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"W", "W"}); +createPlot(id=1, position={147, 7, 573, 658}, y={"orc.QEva_flow", "orc.QCon_flow"}, range={0.0, 900.0, -50000.0, 100000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"W", "W"}); +createPlot(id=1, position={147, 7, 573, 658}, y={"senTWatSup.T", "senTWatRet.T"}, range={0.0, 900.0, 30.0, 60.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC"}); + diff --git a/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mos b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mos new file mode 100644 index 0000000000..adb56e4d33 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Fluid/CHPs/OrganicRankine/Validation/VariableSource.mos @@ -0,0 +1,9 @@ +simulateModel("IBPSA.Fluid.CHPs.OrganicRankine.Validation.VariableSource", + method="dassl", stopTime=300, tolerance=1e-06, resultFile="VariableSource"); +// Plot commands +createPlot(id=3, position={11, 52, 624, 352}, y={"mHot_flow_set.y"}, range={0.0, 300.0, -1.0, 2.0}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={11, 52, 624, 352}, y={"souHot.T_in", "orc.cyc.TWorEva"}, range={0.0, 300.0, 70.0, 100.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=4, position={627, 10, 618, 464}, y={"orc.cyc.mWor_flow", "orc.cyc.mWor_flow_max", "orc.cyc.mWor_flow_min"}, range={0.0, 300.0, -0.1, 0.20000000000000004}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"kg/s", "kg/s", "kg/s"}); +createPlot(id=4, position={627, 10, 618, 464}, y={"orc.cyc.dTPinEva", "orc.cyc.dTPinEva_set"}, range={0.0, 300.0, -20.0, 40.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"K", "K"}); +createPlot(id=4, position={627, 10, 618, 464}, y={"orc.ena", "orc.on_actual"}, range={0.0, 300.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +