Skip to content

Commit

Permalink
merged master, #1829 [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
JayHuLBL committed Mar 19, 2020
2 parents 21ae903 + 948e297 commit 619f6bf
Show file tree
Hide file tree
Showing 37 changed files with 1,462 additions and 104 deletions.
12 changes: 12 additions & 0 deletions Buildings/.copiedFiles.txt
Expand Up @@ -1185,12 +1185,17 @@ Buildings/Media/Examples/AirDerivativeCheck.mo
Buildings/Media/Examples/AirProperties.mo
Buildings/Media/Examples/AirTemperatureEnthalpyInversion.mo
Buildings/Media/Examples/BaseClasses/FluidProperties.mo
Buildings/Media/Examples/BaseClasses/PartialProperties.mo
Buildings/Media/Examples/BaseClasses/TestTemperatureEnthalpyInversion.mo
Buildings/Media/Examples/BaseClasses/package.mo
Buildings/Media/Examples/BaseClasses/package.order
Buildings/Media/Examples/PropyleneGlycolWaterDerivativeCheck.mo
Buildings/Media/Examples/PropyleneGlycolWaterProperties.mo
Buildings/Media/Examples/PropyleneGlycolWaterTemperatureEnthalpyInversion.mo
Buildings/Media/Examples/SteamDerivativeCheck.mo
Buildings/Media/Examples/SteamProperties.mo
Buildings/Media/Examples/SteamSaturatedProperties.mo
Buildings/Media/Examples/SteamTemperatureEnthalpyInversion.mo
Buildings/Media/Examples/WaterDerivativeCheck.mo
Buildings/Media/Examples/WaterProperties.mo
Buildings/Media/Examples/WaterTemperatureEnthalpyInversion.mo
Expand Down Expand Up @@ -1234,6 +1239,7 @@ Buildings/Media/Specialized/Water/package.mo
Buildings/Media/Specialized/Water/package.order
Buildings/Media/Specialized/package.mo
Buildings/Media/Specialized/package.order
Buildings/Media/Steam.mo
Buildings/Media/Water.mo
Buildings/Media/package.mo
Buildings/Media/package.order
Expand Down Expand Up @@ -1370,6 +1376,8 @@ Buildings/Resources/Images/Media/Antifreeze/PropyleneGlycolWaterError20degC.png
Buildings/Resources/Images/Media/Antifreeze/PropyleneGlycolWaterProperties.pdf
Buildings/Resources/Images/Media/Antifreeze/PropyleneGlycolWaterProperties.png
Buildings/Resources/Images/Media/Antifreeze/propyleneGlycol.py
Buildings/Resources/Images/Media/Steam/numericalError.pdf
Buildings/Resources/Images/Media/Steam/numericalError.png
Buildings/Resources/Images/Media/Water/plotCp.pdf
Buildings/Resources/Images/Media/Water/plotCp.png
Buildings/Resources/Images/Media/Water/plotCp.py
Expand Down Expand Up @@ -1800,6 +1808,10 @@ Buildings/Resources/Scripts/Dymola/Media/Examples/AirTemperatureEnthalpyInversio
Buildings/Resources/Scripts/Dymola/Media/Examples/PropyleneGlycolWaterDerivativeCheck.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/PropyleneGlycolWaterProperties.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/PropyleneGlycolWaterTemperatureEnthalpyInversion.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/SteamDerivativeCheck.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/SteamProperties.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/SteamSaturatedProperties.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/SteamTemperatureEnthalpyInversion.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/WaterDerivativeCheck.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/WaterProperties.mos
Buildings/Resources/Scripts/Dymola/Media/Examples/WaterTemperatureEnthalpyInversion.mos
Expand Down
Expand Up @@ -329,7 +329,7 @@ protected
annotation (Placement(transformation(extent={{20,-56},{40,-36}})));
Buildings.Controls.OBC.CDL.Continuous.Add add3 "Active airflow setpoint"
annotation (Placement(transformation(extent={{200,220},{220,240}})));
Buildings.Controls.OBC.CDL.Continuous.Add add4
Buildings.Controls.OBC.CDL.Continuous.Add add4 "Active airflow set point"
annotation (Placement(transformation(extent={{180,40},{200,60}})));
Buildings.Controls.OBC.CDL.Continuous.Division VDis_flowNor
"Normalized discharge volume flow rate"
Expand Down
21 changes: 20 additions & 1 deletion Buildings/Controls/OBC/CDL/Continuous/Sources/TimeTable.mo
Expand Up @@ -19,6 +19,9 @@ protected
final parameter Integer nout=size(table, 2)-1
"Dimension of output vector";

parameter Modelica.SIunits.Time t0(fixed=false)
"First sample time instant";

// CDL uses different enumerations for smoothness and for extrapolation
// than the Modelica Standard Library. Hence, we cast the CDL
// enumeration to the MSL enumaration.
Expand All @@ -37,10 +40,13 @@ protected
else
Modelica.Blocks.Types.Extrapolation.Periodic,
final offset=offset,
final startTime=0,
final startTime=if (extrapolation == Types.Extrapolation.Periodic) then integer(t0/86400)*86400 else 0,
final timeScale=timeScale) "Time table"
annotation (Placement(transformation(extent={{-12,-10},{8,10}})));

initial equation
t0=time;

equation
connect(tab.y, y) annotation (Line(points={{9,0},{120,0}}, color={0,0,127}));

Expand Down Expand Up @@ -104,6 +110,12 @@ values are extrapolated. The following settings are allowed:
</tr>
</table>

<p>
If <code>extrapolation === CDL.Types.Periodic</code>, then the above example
would give a schedule with periodicity of one day. The simulation can start at any time,
whether it is a multiple of a day or not, and positive or negative.
</p>

<p>
The value of the parameter <code>offset</code> is added to the tabulated
values.
Expand Down Expand Up @@ -211,6 +223,13 @@ of <i>0.5</i> seconds outputs
revisions="<html>
<ul>
<li>
March 13, 2020, by Michael Wetter:<br/>
Corrected implementation so that the table also works if the simulation
starts at a negative time.<br/>
This is for
<a href=\"https://github.com/lbl-srg/modelica-buildings/issues/1834\">issue 1834</a>.
</li>
<li>
March 2, 2020, by Michael Wetter:<br/>
Changed icon to display dynamically the output value.
</li>
Expand Down
@@ -0,0 +1,64 @@
within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation;
model TimeTableNegativeStartTime
"Validation model for TimeTable block with negative start time"

Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin(
smoothness = Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments,
table = [0,0; 6*3600,1; 18*3600,0.5; 24*3600,0])
"Time table with smoothness method of linear segments"
annotation (Placement(transformation(extent={{-80,10},{-60,30}})));
Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinHol(
smoothness = Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments,
extrapolation = Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint,
table = [0,0; 6*3600,1; 18*3600,0.5; 24*3600,0])
"Time table with smoothness method of linear segments, hold first and last value"
annotation (Placement(transformation(extent={{-10,10},{10,30}})));
Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinDer(
smoothness = Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments,
extrapolation = Buildings.Controls.OBC.CDL.Types.Extrapolation.LastTwoPoints,
table=[0,0; 6*3600,1; 18*3600,0.5; 24*3600,0])
"Time table with smoothness method of linear segments, extrapolate with der"
annotation (Placement(transformation(extent={{50,10},{70,30}})));
Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabCon(
smoothness = Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
table=[0,0; 6*3600,1; 18*3600,0.5; 24*3600,0])
"Time table with smoothness method of constant segments"
annotation (Placement(transformation(extent={{-80,-30},{-60,-10}})));
Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinCon(
smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments,
table=[0,0; 6*3600,0; 6*3600,1; 18*3600,0.5; 24*3600,0])
"Time table with smoothness method of linear segments"
annotation (Placement(transformation(extent={{-10,-30},{10,-10}})));

annotation (experiment(Tolerance=1e-6, StartTime=-129600.0, StopTime=172800),
__Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mos"
"Simulate and plot"),
Documentation(info="<html>
<p>
This model validates the block
<a href=\"modelica://Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable\">
Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable</a>.
The model is identical to
<a href=\"modelica://Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable\">
Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable</a>
except that the start time is negative, and not a multiple of a full day.
</html>",
revisions="<html>
<ul>
<li>
March 13, 2020, by Michael Wetter:<br/>
First implementation in CDL.
</li>
</ul>
</html>"),
Icon(graphics={
Ellipse(lineColor = {75,138,73},
fillColor={255,255,255},
fillPattern = FillPattern.Solid,
extent = {{-100,-100},{100,100}}),
Polygon(lineColor = {0,0,255},
fillColor = {75,138,73},
pattern = LinePattern.None,
fillPattern = FillPattern.Solid,
points = {{-36,60},{64,0},{-36,-60},{-36,60}})}));
end TimeTableNegativeStartTime;
Expand Up @@ -7,3 +7,4 @@ Ramp
Sine
StandardTime
TimeTable
TimeTableNegativeStartTime
85 changes: 3 additions & 82 deletions Buildings/Media/Examples/BaseClasses/FluidProperties.mo
@@ -1,111 +1,32 @@
within Buildings.Media.Examples.BaseClasses;
partial model FluidProperties
"Model that tests the implementation of the fluid properties"
extends PartialProperties;

replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;

parameter Modelica.SIunits.Temperature TMin
"Minimum temperature for the simulation";
parameter Modelica.SIunits.Temperature TMax
"Maximum temperature for the simulation";
parameter Modelica.SIunits.Pressure p = Medium.p_default "Pressure";
parameter Modelica.SIunits.MassFraction X[Medium.nX]=
Medium.X_default "Mass fraction";
Medium.Temperature T "Temperature";
Modelica.SIunits.Conversions.NonSIunits.Temperature_degC T_degC
"Celsius temperature";

Medium.ThermodynamicState state_pTX "Medium state";
Medium.ThermodynamicState state_phX "Medium state";
Medium.ThermodynamicState state_psX "Medium state";

Modelica.SIunits.Density d "Density";
Modelica.SIunits.DynamicViscosity eta "Dynamic viscosity";
Modelica.SIunits.SpecificEnthalpy h "Specific enthalpy";
Modelica.SIunits.SpecificInternalEnergy u "Specific internal energy";
Modelica.SIunits.SpecificEntropy s "Specific entropy";
Modelica.SIunits.SpecificEnergy g "Specific Gibbs energy";
Modelica.SIunits.SpecificEnergy f "Specific Helmholtz energy";

Modelica.SIunits.SpecificEnthalpy hIse "Isentropic enthalpy";

Modelica.Media.Interfaces.Types.IsobaricExpansionCoefficient beta
"Isobaric expansion coefficient";
Modelica.SIunits.IsothermalCompressibility kappa "Isothermal compressibility";

Modelica.Media.Interfaces.Types.DerDensityByPressure ddpT
"Density derivative w.r.t. pressure";
Modelica.Media.Interfaces.Types.DerDensityByTemperature ddTp
"Density derivative w.r.t. temperature";
Modelica.SIunits.Density[Medium.nX] dddX
"Density derivative w.r.t. mass fraction";

Modelica.SIunits.SpecificHeatCapacity cp "Specific heat capacity";
Modelica.SIunits.SpecificHeatCapacity cv "Specific heat capacity";
Modelica.SIunits.ThermalConductivity lambda "Thermal conductivity";

Modelica.SIunits.AbsolutePressure pMed "Pressure";
Medium.Temperature TMed "Temperature";
Modelica.SIunits.MolarMass MM "Mixture molar mass";

Medium.BaseProperties basPro "Medium base properties";
protected
constant Real conv(unit="1/s") = 1 "Conversion factor to satisfy unit check";

function checkState
extends Modelica.Icons.Function;
input Medium.ThermodynamicState state1 "Medium state";
input Medium.ThermodynamicState state2 "Medium state";
input String message "Message for error reporting";
algorithm
assert(abs(Medium.temperature(state1)-Medium.temperature(state2))
< 1e-8, "Error in temperature of " + message);
assert(abs(Medium.pressure(state1)-Medium.pressure(state2))
< 1e-8, "Error in pressure of " + message);
end checkState;
equation
// Compute temperatures that are used as input to the functions
T = TMin + conv*time * (TMax-TMin);
T_degC = Modelica.SIunits.Conversions.to_degC(T);

// Check setting the states
// Check setting the states
state_pTX = Medium.setState_pTX(p=p, T=T, X=X);
state_phX = Medium.setState_phX(p=p, h=h, X=X);
state_psX = Medium.setState_psX(p=p, s=s, X=X);
checkState(state_pTX, state_phX, "state_phX");
checkState(state_pTX, state_psX, "state_psX");

// Check the implementation of the functions
d = Medium.density(state_pTX);
eta = Medium.dynamicViscosity(state_pTX);
h = Medium.specificEnthalpy(state_pTX);

u = Medium.specificInternalEnergy(state_pTX);
s = Medium.specificEntropy(state_pTX);
g = Medium.specificGibbsEnergy(state_pTX);
f = Medium.specificHelmholtzEnergy(state_pTX);
hIse = Medium.isentropicEnthalpy(p, state_pTX);
beta = Medium.isobaricExpansionCoefficient(state_pTX);
kappa = Medium.isothermalCompressibility(state_pTX);

ddpT = Medium.density_derp_T(state_pTX);
ddTp = Medium.density_derT_p(state_pTX);
dddX = Medium.density_derX(state_pTX);

cp = Medium.specificHeatCapacityCp(state_pTX);
cv = Medium.specificHeatCapacityCv(state_pTX);
lambda = Medium.thermalConductivity(state_pTX);
pMed = Medium.pressure(state_pTX);
assert(abs(p-pMed) < 1e-8, "Error in pressure computation.");
TMed = Medium.temperature(state_pTX);
assert(abs(T-TMed) < 1e-8, "Error in temperature computation.");
MM = Medium.molarMass(state_pTX);
// Check the implementation of the base properties
assert(abs(h-basPro.h) < 1e-8, "Error in enthalpy computation in BaseProperties.");
assert(abs(u-basPro.u) < 1e-8, "Error in internal energy computation in BaseProperties.");

annotation (
Documentation(info="<html>
annotation (Documentation(info="<html>
<p>
This example checks thermophysical properties of the medium.
</p>
Expand Down

0 comments on commit 619f6bf

Please sign in to comment.