From 44e6de2f308240f41966cd157a0c1d5c8ce1b46b Mon Sep 17 00:00:00 2001
From: Michael Wetter
Date: Mon, 6 Apr 2026 15:52:21 -0700
Subject: [PATCH 1/4] Corrected unit propagation error (maint_12.x)
This integrates changes from https://github.com/lbl-srg/modelica-buildings/pull/4526
---
.../Relay/BaseClasses/TuningMonitor.mo | 22 ++-
.../Validation/ChillerHeatRecoveryGroup.mo | 11 +-
.../BaseClasses/PartialTwoWayValve.mo | 7 +-
.../CHPs/BaseClasses/EnergyConversion.mo | 131 ++++++++++--------
.../Performance/BaseClasses/Example1.mo | 10 +-
.../Examples/ResistanceVolumeFlowReversal.mo | 11 +-
.../Fluid/FixedResistances/PressureDrop.mo | 18 ++-
.../Validation/FiniteLineSource_Integrand.mo | 10 +-
.../FiniteLineSource_Integrand_Equivalent.mo | 10 +-
.../FiniteLineSource_Integrand_Length.mo | 29 ++--
.../HeatExchangers/WetCoilEffectivenessNTU.mo | 83 ++++++-----
.../Frosting/Validation/WetterAfjei1997.mo | 36 +++--
.../Validation/MixingVolumeZeroFlow.mo | 10 +-
.../Validation/HydraulicEfficiencyMethods.mo | 12 +-
.../Examples/BaseClasses/CoolingCoilValve.mo | 8 +-
.../Validation/CoolingCoilValve.mo | 17 ++-
16 files changed, 281 insertions(+), 144 deletions(-)
diff --git a/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo b/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
index efaee3a1775..b4aedb32bb0 100644
--- a/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
+++ b/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
@@ -1,6 +1,6 @@
within Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Relay.BaseClasses;
block TuningMonitor "Monitor the tuning process"
- constant Modelica.Units.SI.Time minHorLen = 1E-5
+ constant Modelica.Units.SI.Time eps = 1E-5
"A small tolerance applied to determine whether a variable is greater than zero";
Buildings.Controls.OBC.CDL.Interfaces.RealInput tOn(
final quantity="Time",
@@ -33,19 +33,23 @@ protected
"Check if either the length for the on period or the length for the off period are larger than 0"
annotation (Placement(transformation(origin={-40,10}, extent = {{-40, 40}, {-20, 60}})));
Buildings.Controls.OBC.CDL.Reals.Sources.Constant minLen(
- final k=minHorLen)
+ final k=eps)
"Minimum value for the horizon length"
annotation (Placement(transformation(extent={{-140,90},{-120,110}})));
Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler samAddtOntOff
"Sample the minimum period when the minimum period is greater than 0"
annotation (Placement(transformation(extent={{-40,-20},{-20,0}})));
- Buildings.Controls.OBC.CDL.Reals.Greater tInc
+ Buildings.Controls.OBC.CDL.Reals.Greater tInc(
+ u1(unit="s"),
+ u2(unit="s"))
"Check if either the length for the on period or the length for the off period increases after they both become positive"
annotation (Placement(transformation(extent={{40,20},{60,40}})));
Buildings.Controls.OBC.CDL.Reals.Add addtOntOff
"Block that calculates the sum of the length for the on period and the length for the off period"
annotation (Placement(transformation(extent={{-130,-20},{-110,0}})));
- Buildings.Controls.OBC.CDL.Reals.Greater tDec
+ Buildings.Controls.OBC.CDL.Reals.Greater tDec(
+ u1(unit="s"),
+ u2(unit="s"))
"Check if either the length for the on period or the length for the off period decreases after they both become positive"
annotation (Placement(transformation(extent={{40,-70},{60,-50}})));
Buildings.Controls.OBC.CDL.Logical.Or tCha
@@ -146,6 +150,16 @@ annotation (defaultComponentName = "tunMon",
Documentation(revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
September 20, 2023, by Sen Huang:
First implementation.
diff --git a/Buildings/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo b/Buildings/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo
index c578c4b6b68..c3776776d0f 100644
--- a/Buildings/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo
+++ b/Buildings/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo
@@ -246,7 +246,7 @@ model ChillerHeatRecoveryGroup
origin={-30,-160})));
Fluid.HeatExchangers.SensibleCooler_T disHeaWat(
redeclare final package Medium = Medium,
- final m_flow_nominal=THeaWatRet.k,
+ final m_flow_nominal=chi.mConWat_flow_nominal,
final dp_nominal=0,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
tau=300,
@@ -264,7 +264,7 @@ model ChillerHeatRecoveryGroup
annotation (Placement(transformation(extent={{80,-70},{100,-50}})));
Fluid.HeatExchangers.SensibleCooler_T disConWatCon(
redeclare final package Medium = Medium,
- final m_flow_nominal=TConWatConSup.k,
+ final m_flow_nominal=chi.mConWat_flow_nominal,
final dp_nominal=0,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
tau=300,
@@ -286,7 +286,7 @@ model ChillerHeatRecoveryGroup
annotation (Placement(transformation(extent={{220,-30},{200,-10}})));
Fluid.HeatExchangers.Heater_T disChiWat(
redeclare final package Medium = Medium,
- final m_flow_nominal=TChiWatRet.k,
+ final m_flow_nominal=chi.mChiWat_flow_nominal,
final dp_nominal=0,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
tau=300,
@@ -468,6 +468,11 @@ in a configuration with two HRCs.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected assignment of nominal mass flow rate.
+See #2100.
+
+-
February 24, 2023, by Antoine Gautier:
First implementation.
diff --git a/Buildings/Fluid/Actuators/BaseClasses/PartialTwoWayValve.mo b/Buildings/Fluid/Actuators/BaseClasses/PartialTwoWayValve.mo
index fec40eaee67..4d3907a891e 100644
--- a/Buildings/Fluid/Actuators/BaseClasses/PartialTwoWayValve.mo
+++ b/Buildings/Fluid/Actuators/BaseClasses/PartialTwoWayValve.mo
@@ -22,7 +22,7 @@ partial model PartialTwoWayValve "Partial model for a two way valve"
parameter Real kFixed(unit="", min=0) = if dpFixed_nominal > Modelica.Constants.eps
then m_flow_nominal / sqrt(dpFixed_nominal) else 0
"Flow coefficient of fixed resistance that may be in series with valve, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2).";
- Real kVal(unit="1", min=Modelica.Constants.small)
+ Real kVal(unit="", min=Modelica.Constants.small)
"Flow coefficient of valve, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2).";
Real k(unit="", min=Modelica.Constants.small)
"Flow coefficient of valve and pipe in series, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2).";
@@ -97,6 +97,11 @@ each valve opening characteristics has different parameters.
revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
January 19, 2026, by Jelger Jansen:
Added unit 1 to parameter kVal to avoid FMU unit errors.
This is for #2074.
diff --git a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo
index 5f9dbfacd1c..5686cebb2c6 100644
--- a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo
+++ b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo
@@ -62,10 +62,10 @@ protected
annotation (Placement(transformation(extent={{110,30},{130,50}})));
Buildings.Fluid.CHPs.BaseClasses.EnergyConversionNormal opeModBas(final per=
per) "Typical energy conversion mode"
- annotation (Placement(transformation(extent={{-20,-10},{0,10}})));
+ annotation (Placement(transformation(extent={{-20,-40},{0,-20}})));
Buildings.Fluid.CHPs.BaseClasses.EnergyConversionWarmUp opeModWarUpEngTem(
final per=per) if not per.warmUpByTimeDelay "Warm-up by engine temperature"
- annotation (Placement(transformation(extent={{-20,-60},{0,-40}})));
+ annotation (Placement(transformation(extent={{-20,-80},{0,-60}})));
Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0)
"Zero constant"
annotation (Placement(transformation(extent={{-100,60},{-80,80}})));
@@ -79,7 +79,7 @@ protected
annotation (Placement(transformation(extent={{-100,90},{-80,110}})));
Buildings.Controls.OBC.CDL.Reals.Switch switch2
"Switch between warm-up and normal value"
- annotation (Placement(transformation(extent={{80,70},{100,90}})));
+ annotation (Placement(transformation(extent={{80,82},{100,102}})));
Buildings.Controls.OBC.CDL.Reals.Switch switch3
"Switch between warm-up and normal value"
annotation (Placement(transformation(extent={{80,10},{100,30}})));
@@ -92,34 +92,45 @@ protected
Buildings.Controls.OBC.CDL.Reals.Sources.Constant PEleTimeDel(final k=0)
if per.warmUpByTimeDelay
"Zero power output in case of warm-up by time delay"
- annotation (Placement(transformation(extent={{-20,90},{0,110}})));
+ annotation (Placement(transformation(extent={{-20,110},{0,130}})));
Buildings.Controls.OBC.CDL.Logical.Sources.Constant delWarUp(
final k=per.warmUpByTimeDelay) "Warm-up by time delay"
- annotation (Placement(transformation(extent={{-100,-120},{-80,-100}})));
+ annotation (Placement(transformation(extent={{-100,-130},{-80,-110}})));
Modelica.Blocks.Sources.BooleanExpression wamUpMod(
final y=opeMod == CHPs.BaseClasses.Types.Mode.WarmUp)
"Check whether warm-up mode is active"
annotation (Placement(transformation(extent={{-100,30},{-80,50}})));
Buildings.Controls.OBC.CDL.Logical.Not engTemWarUp
"Warm-up based on engine temperature"
- annotation (Placement(transformation(extent={{-60,-120},{-40,-100}})));
+ annotation (Placement(transformation(extent={{-60,-130},{-40,-110}})));
Buildings.Controls.OBC.CDL.Logical.And and1
"True if warm-up mode and warm-up based on engine temperature"
- annotation (Placement(transformation(extent={{-20,-90},{0,-70}})));
- Buildings.Controls.OBC.CDL.Reals.Sources.Constant dumTimDel(
- final k=0) if per.warmUpByTimeDelay
- "Set dummy value in case of warm-up by time delay"
- annotation (Placement(transformation(extent={{-20,30},{0,50}})));
+ annotation (Placement(transformation(extent={{-20,-122},{0,-102}})));
+ Buildings.Controls.OBC.CDL.Reals.Sources.Constant dumTimDelFue(
+ final k=0,
+ y(unit="kg/s"))
+ if per.warmUpByTimeDelay "Set dummy value in case of warm-up by time delay"
+ annotation (Placement(transformation(extent={{-20,52},{0,72}})));
+ Controls.OBC.CDL.Reals.Sources.Constant dumTimDelAir(
+ final k=0,
+ y(unit="kg/s"))
+ if per.warmUpByTimeDelay "Set dummy value in case of warm-up by time delay"
+ annotation (Placement(transformation(extent={{-20,20},{0,40}})));
+ Controls.OBC.CDL.Reals.Sources.Constant dumTimDelGen(
+ final k=0,
+ y(unit="W"))
+ if per.warmUpByTimeDelay "Set dummy value in case of warm-up by time delay"
+ annotation (Placement(transformation(extent={{-20,-10},{0,10}})));
equation
- connect(opeModBas.mWat_flow, mWat_flow) annotation (Line(points={{-22,0},{-120,
- 0},{-120,20},{-160,20}}, color={0,0,127}));
- connect(opeModBas.TWatIn, TWatIn) annotation (Line(points={{-22,-6},{-100,-6},
+ connect(opeModBas.mWat_flow, mWat_flow) annotation (Line(points={{-22,-30},{-110,
+ -30},{-110,20},{-160,20}}, color={0,0,127}));
+ connect(opeModBas.TWatIn, TWatIn) annotation (Line(points={{-22,-36},{-100,-36},
{-100,-20},{-160,-20}},color={0,0,127}));
- connect(opeModWarUpEngTem.TEng, TEng) annotation (Line(points={{-22,-58},{-110,
- -58},{-110,-90},{-160,-90}}, color={0,0,127}));
- connect(opeModWarUpEngTem.TWatIn, TWatIn) annotation (Line(points={{-22,-47},{
- -100,-47},{-100,-20},{-160,-20}},
+ connect(opeModWarUpEngTem.TEng, TEng) annotation (Line(points={{-22,-78},{-110,
+ -78},{-110,-90},{-160,-90}}, color={0,0,127}));
+ connect(opeModWarUpEngTem.TWatIn, TWatIn) annotation (Line(points={{-22,-67},{
+ -100,-67},{-100,-20},{-160,-20}},
color={0,0,127}));
connect(const.y, switch.u3) annotation (Line(points={{-78,70},{-70,70},{-70,
92},{-62,92}},
@@ -130,10 +141,13 @@ equation
connect(booExp.y, switch.u2) annotation (Line(points={{-79,100},{-62,100}},
color={255,0,255}));
connect(switch.y, opeModBas.PEle) annotation (Line(points={{-38,100},{-30,100},
- {-30,6},{-22,6}}, color={0,0,127}));
- connect(opeModWarUpEngTem.PEleNet, switch2.u1) annotation (Line(points={{2,-42},
- {20,-42},{20,88},{78,88}}, color={0,0,127}));
- connect(switch2.y, PEleNet) annotation (Line(points={{102,80},{160,80}},
+ {-30,-24},{-22,-24}},
+ color={0,0,127}));
+ connect(opeModWarUpEngTem.PEleNet, switch2.u1) annotation (Line(points={{2,-62},
+ {20,-62},{20,100},{78,100}},
+ color={0,0,127}));
+ connect(switch2.y, PEleNet) annotation (Line(points={{102,92},{120,92},{120,80},
+ {160,80}},
color={0,0,127}));
connect(switch3.y, mFue_flow) annotation (Line(points={{102,20},{160,20}},
color={0,0,127}));
@@ -141,51 +155,51 @@ equation
color={0,0,127}));
connect(switch5.y, QGen_flow)
annotation (Line(points={{102,-100},{160,-100}}, color={0,0,127}));
- connect(opeModBas.mFue_flow, switch3.u3) annotation (Line(points={{2,6},{60,6},
- {60,12},{78,12}}, color={0,0,127}));
- connect(opeModWarUpEngTem.mFue_flow, switch3.u1) annotation (Line(points={{2,-47},
- {26,-47},{26,28},{78,28}}, color={0,0,127}));
- connect(opeModBas.mAir_flow, switch4.u3) annotation (Line(points={{2,0},{60,0},
- {60,-48},{78,-48}}, color={0,0,127}));
- connect(opeModWarUpEngTem.mAir_flow, switch4.u1) annotation (Line(points={{2,-53},
- {40,-53},{40,-32},{78,-32}}, color={0,0,127}));
- connect(opeModWarUpEngTem.QGen_flow, switch5.u1) annotation (Line(points={{2,-58},
- {32,-58},{32,-92},{78,-92}}, color={0,0,127}));
- connect(opeModBas.QGen_flow, switch5.u3) annotation (Line(points={{2.2,-6},{54,
- -6},{54,-108},{78,-108}}, color={0,0,127}));
+ connect(opeModBas.mFue_flow, switch3.u3) annotation (Line(points={{2,-24},{60,
+ -24},{60,12},{78,12}},color={0,0,127}));
+ connect(opeModWarUpEngTem.mFue_flow, switch3.u1) annotation (Line(points={{2,-67},
+ {26,-67},{26,28},{78,28}}, color={0,0,127}));
+ connect(opeModBas.mAir_flow, switch4.u3) annotation (Line(points={{2,-30},{60,
+ -30},{60,-48},{78,-48}}, color={0,0,127}));
+ connect(opeModWarUpEngTem.mAir_flow, switch4.u1) annotation (Line(points={{2,-73},
+ {40,-73},{40,-32},{78,-32}}, color={0,0,127}));
+ connect(opeModWarUpEngTem.QGen_flow, switch5.u1) annotation (Line(points={{2,-78},
+ {32,-78},{32,-92},{78,-92}}, color={0,0,127}));
+ connect(opeModBas.QGen_flow, switch5.u3) annotation (Line(points={{2.2,-36},{54,
+ -36},{54,-108},{78,-108}}, color={0,0,127}));
connect(mWat_flow, opeModWarUpEngTem.mWat_flow) annotation (Line(points={{-160,20},
- {-120,20},{-120,-42},{-22,-42}}, color={0,0,127}));
+ {-110,20},{-110,-62},{-22,-62}}, color={0,0,127}));
connect(switch3.y, assFue.mFue_flow) annotation (Line(points={{102,20},{104,20},
{104,40},{108,40}}, color={0,0,127}));
- connect(PEleTimeDel.y, switch2.u1) annotation (Line(points={{2,100},{60,100},{
- 60,88},{78,88}}, color={0,0,127}));
+ connect(PEleTimeDel.y, switch2.u1) annotation (Line(points={{2,120},{60,120},{
+ 60,100},{78,100}},
+ color={0,0,127}));
connect(switch.y, switch2.u3) annotation (Line(points={{-38,100},{-30,100},{-30,
- 72},{78,72}}, color={0,0,127}));
+ 84},{78,84}}, color={0,0,127}));
connect(TRoo, opeModWarUpEngTem.TRoo) annotation (Line(points={{-160,-60},{-120,
- -60},{-120,-53},{-22,-53}}, color={0,0,127}));
+ -60},{-120,-73},{-22,-73}}, color={0,0,127}));
connect(delWarUp.y, engTemWarUp.u)
- annotation (Line(points={{-78,-110},{-62,-110}}, color={255,0,255}));
- connect(engTemWarUp.y, and1.u2) annotation (Line(points={{-38,-110},{-30,-110},
- {-30,-88},{-22,-88}}, color={255,0,255}));
- connect(wamUpMod.y, and1.u1) annotation (Line(points={{-79,40},{-60,40},{-60,
- -80},{-22,-80}},
+ annotation (Line(points={{-78,-120},{-62,-120}}, color={255,0,255}));
+ connect(engTemWarUp.y, and1.u2) annotation (Line(points={{-38,-120},{-22,-120}},
+ color={255,0,255}));
+ connect(wamUpMod.y, and1.u1) annotation (Line(points={{-79,40},{-60,40},{-60,-100},
+ {-30,-100},{-30,-112},{-22,-112}},
color={255,0,255}));
- connect(and1.y, switch3.u2) annotation (Line(points={{2,-80},{70,-80},{70,20},
+ connect(and1.y, switch3.u2) annotation (Line(points={{2,-112},{70,-112},{70,20},
{78,20}}, color={255,0,255}));
- connect(and1.y, switch4.u2) annotation (Line(points={{2,-80},{70,-80},{70,-40},
+ connect(and1.y, switch4.u2) annotation (Line(points={{2,-112},{70,-112},{70,-40},
{78,-40}}, color={255,0,255}));
- connect(and1.y, switch5.u2) annotation (Line(points={{2,-80},{70,-80},{70,-100},
+ connect(and1.y, switch5.u2) annotation (Line(points={{2,-112},{70,-112},{70,-100},
{78,-100}}, color={255,0,255}));
- connect(wamUpMod.y, switch2.u2) annotation (Line(points={{-79,40},{-60,40},{
- -60,80},{78,80}},
- color={255,0,255}));
- connect(dumTimDel.y, switch3.u1) annotation (Line(points={{2,40},{26,40},{26,28},
- {78,28}}, color={0,0,127}));
- connect(dumTimDel.y, switch4.u1) annotation (Line(points={{2,40},{40,40},{40,-32},
- {78,-32}}, color={0,0,127}));
- connect(dumTimDel.y, switch5.u1) annotation (Line(points={{2,40},{32,40},{32,-92},
- {78,-92}}, color={0,0,127}));
+ connect(wamUpMod.y, switch2.u2) annotation (Line(points={{-79,40},{-60,40},{-60,
+ 92},{78,92}}, color={255,0,255}));
+ connect(dumTimDelFue.y, switch3.u1) annotation (Line(points={{2,62},{26,62},{26,
+ 28},{78,28}}, color={0,0,127}));
+ connect(switch4.u1, dumTimDelAir.y) annotation (Line(points={{78,-32},{40,-32},
+ {40,30},{2,30}}, color={0,0,127}));
+ connect(switch5.u1, dumTimDelGen.y) annotation (Line(points={{78,-92},{32,-92},
+ {32,0},{2,0}}, color={0,0,127}));
annotation (
defaultComponentName="eneCon",
Diagram(coordinateSystem(extent={{-140,-140},{140,140}})),
@@ -208,6 +222,11 @@ combustion engines).
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
April 8, 2020, by Antoine Gautier:
Refactored implementation.
diff --git a/Buildings/Fluid/Examples/Performance/BaseClasses/Example1.mo b/Buildings/Fluid/Examples/Performance/BaseClasses/Example1.mo
index b34389ea4d9..9bd0f2d4a46 100644
--- a/Buildings/Fluid/Examples/Performance/BaseClasses/Example1.mo
+++ b/Buildings/Fluid/Examples/Performance/BaseClasses/Example1.mo
@@ -29,7 +29,10 @@ partial model Example1 "Example 1 partial model"
annotation (Placement(transformation(extent={{-20,20},{0,40}})));
Modelica.Blocks.Sources.Pulse pulse(period=1000) "Pulse input"
annotation (Placement(transformation(extent={{-60,70},{-40,90}})));
- Modelica.Blocks.Math.Gain gain(k=m_flow_nominal) "Gain for m_flow_nominal"
+ Modelica.Blocks.Math.Gain gain(
+ k=m_flow_nominal,
+ u(unit="1"),
+ y(unit="kg/s")) "Gain for m_flow_nominal"
annotation (Placement(transformation(extent={{0,70},{20,90}})));
Buildings.Fluid.Actuators.Valves.ThreeWayLinear val(
redeclare package Medium = Medium,
@@ -109,6 +112,11 @@ and is created to avoid errors in the implementation of the two depending exampl
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
May 8, 2017, by Michael Wetter:
Updated heater model.
This is for
diff --git a/Buildings/Fluid/Examples/ResistanceVolumeFlowReversal.mo b/Buildings/Fluid/Examples/ResistanceVolumeFlowReversal.mo
index 99f8f7c5f40..fc90bad349f 100644
--- a/Buildings/Fluid/Examples/ResistanceVolumeFlowReversal.mo
+++ b/Buildings/Fluid/Examples/ResistanceVolumeFlowReversal.mo
@@ -28,7 +28,10 @@ model ResistanceVolumeFlowReversal
annotation (Placement(transformation(extent={{-40,-30},{-20,-10}})));
Modelica.Blocks.Sources.Pulse pulse(period=1000) "Pulse input"
annotation (Placement(transformation(extent={{-80,40},{-60,60}})));
- Modelica.Blocks.Math.Gain gain(k=m_flow_nominal) "Gain for m_flow_nominal"
+ Modelica.Blocks.Math.Gain gain(
+ k=m_flow_nominal,
+ u(unit="1"),
+ y(unit="kg/s")) "Gain for m_flow_nominal"
annotation (Placement(transformation(extent={{-40,40},{-20,60}})));
Buildings.Fluid.Actuators.Valves.ThreeWayLinear val(
redeclare package Medium = Medium,
@@ -103,7 +106,6 @@ equation
color={0,127,255}));
connect(senTem[i].port_b, val.port_3) annotation (Line(
points={{10,-70},{0,-70},{0,-30}}, color={0,127,255}));
-
end for;
annotation (experiment(
@@ -164,6 +166,11 @@ Sizes after manipulation of the nonlinear systems: {1, 9, 1}
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
July 18, 2025, by Hongxiang Fu:
Added two-port temperature sensors to replace vol[:].T
from reference results.
diff --git a/Buildings/Fluid/FixedResistances/PressureDrop.mo b/Buildings/Fluid/FixedResistances/PressureDrop.mo
index c1385a6662e..14c5a73b623 100644
--- a/Buildings/Fluid/FixedResistances/PressureDrop.mo
+++ b/Buildings/Fluid/FixedResistances/PressureDrop.mo
@@ -21,10 +21,13 @@ protected
(dp_nominal_pos > Modelica.Constants.eps) and not disableComputeFlowResistance_internal
"Flag to enable/disable computation of flow resistance"
annotation(Evaluate=true);
- final parameter Real coeff=
+ final parameter Real coeM(final unit="kg/(s.Pa)")=
if linearized and computeFlowResistance
- then if from_dp then k^2/m_flow_nominal_pos else m_flow_nominal_pos/k^2
- else 0
+ then k^2/m_flow_nominal_pos else 0
+ "Precomputed coefficient to avoid division by parameter";
+ final parameter Real coeP(final unit="s.Pa/kg")=
+ if linearized and computeFlowResistance
+ then m_flow_nominal_pos/k^2 else 0
"Precomputed coefficient to avoid division by parameter";
initial equation
if computeFlowResistance then
@@ -37,9 +40,9 @@ equation
if computeFlowResistance then
if linearized then
if from_dp then
- m_flow = dp*coeff;
+ m_flow = dp*coeM;
else
- dp = m_flow*coeff;
+ dp = m_flow*coeP;
end if;
else
if homotopyInitialization then
@@ -184,6 +187,11 @@ This leads to simpler equations.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
April 25, 2025, by Fabian Wuelhorst and Michael Wetter:
Add option to disable computeFlowResistance for extending classes.
See #2001.
diff --git a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand.mo b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand.mo
index ffb075b231e..8388e10155b 100644
--- a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand.mo
+++ b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand.mo
@@ -11,11 +11,12 @@ model FiniteLineSource_Integrand
parameter Modelica.Units.SI.Height len2=150.0 "Length of receiving borehole";
parameter Modelica.Units.SI.Height burDep2=4.0
"Buried depth of receiving borehole";
- Real u "Integration variable";
+ Real u(unit="1/m") "Integration variable";
Real y "Finite line source integrand";
+ constant Real con(unit="1/(m.s)") = 1 "Unit conversion factor";
equation
- u = time;
+ u = con*time;
y = Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis,
@@ -37,6 +38,11 @@ finite line source integrand function.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
July 17, 2018, by Massimo Cimmino:
First implementation.
diff --git a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Equivalent.mo b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Equivalent.mo
index 4c8dba90c9d..adcd8aba6c9 100644
--- a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Equivalent.mo
+++ b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Equivalent.mo
@@ -18,13 +18,14 @@ model FiniteLineSource_Integrand_Equivalent
parameter Integer nBor2=3 "Number of receiving lines";
parameter Integer n_dis=2 "Number of unique distances";
- Real u "Integration variable";
+ Real u(unit="1/m") "Integration variable";
Real yRea "Finite line source integrand (Real part)";
Real yMir "Finite line source integrand (Mirror part)";
Real y "Finite line source integrand";
+ constant Real con(unit="1/(m.s)") = 1 "Unit conversion factor";
equation
- u = time;
+ u = con*time;
yRea =
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand_Equivalent(
u=u,
@@ -76,6 +77,11 @@ with coordinates (x,y) = {(0,0), (0,7), (7,0)}.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
June 9, 2022, by Massimo Cimmino:
First implementation.
diff --git a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Length.mo b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Length.mo
index 88cbb34fb9a..021a6e64e18 100644
--- a/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Length.mo
+++ b/Buildings/Fluid/Geothermal/Borefields/BaseClasses/HeatTransfer/ThermalResponseFactors/Validation/FiniteLineSource_Integrand_Length.mo
@@ -3,6 +3,7 @@ model FiniteLineSource_Integrand_Length
"Test case for finite line source integrand function"
extends Modelica.Icons.Example;
+ constant Real small = 1E-60 "Small number used to bound calculation of log10";
parameter Real dis_over_len = 0.0005 "Radial distance between borehole axes";
parameter Modelica.Units.SI.Height len150=150.0 "Length of emitting borehole";
parameter Modelica.Units.SI.Height len75=75.0 "Length of emitting borehole";
@@ -11,16 +12,17 @@ model FiniteLineSource_Integrand_Length
parameter Modelica.Units.SI.Height len1=1.0 "Length of emitting borehole";
parameter Modelica.Units.SI.Height burDep=4.
"Buried depth of emitting borehole";
- Real u "Integration variable";
+ Real u(unit="1/m") "Integration variable";
+ constant Real con(unit="1/(m.s)") = 1 "Unit conversion factor";
+
Real logy150 "Logarithm of finite line source integrand";
Real logy75 "Logarithm of finite line source integrand";
Real logy25 "Logarithm of finite line source integrand";
Real logy5 "Logarithm of finite line source integrand";
Real logy1 "Logarithm of finite line source integrand";
-
equation
- u = time;
- logy150 = log10(max(Modelica.Constants.small,
+ u = con*time;
+ logy150 = log10(max(small,
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis_over_len*len150,
@@ -28,7 +30,7 @@ equation
burDep1=burDep,
len2=len150,
burDep2=burDep)));
- logy75 = log10(max(Modelica.Constants.small,
+ logy75 = log10(max(small,
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis_over_len*len75,
@@ -36,7 +38,7 @@ equation
burDep1=burDep,
len2=len75,
burDep2=burDep)));
- logy25 = log10(max(Modelica.Constants.small,
+ logy25 = log10(max(small,
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis_over_len*len25,
@@ -44,7 +46,7 @@ equation
burDep1=burDep,
len2=len25,
burDep2=burDep)));
- logy5 = log10(max(Modelica.Constants.small,
+ logy5 = log10(max(small,
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis_over_len*len5,
@@ -52,7 +54,7 @@ equation
burDep1=burDep,
len2=len5,
burDep2=burDep)));
- logy1 = log10(max(Modelica.Constants.small,
+ logy1 = log10(max(small,
Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.ThermalResponseFactors.finiteLineSource_Integrand(
u=u,
dis=dis_over_len*len1,
@@ -74,6 +76,17 @@ finite line source integrand function.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
+September 15, 2025, by Michael Wetter:
+Changed value of small number that bounds log10.
+This is for
+IBPSA, #2051.
+
+-
March 15, 2019, by Massimo Cimmino:
First implementation.
diff --git a/Buildings/Fluid/HeatExchangers/WetCoilEffectivenessNTU.mo b/Buildings/Fluid/HeatExchangers/WetCoilEffectivenessNTU.mo
index a064a3d2c85..50a173b0ee2 100644
--- a/Buildings/Fluid/HeatExchangers/WetCoilEffectivenessNTU.mo
+++ b/Buildings/Fluid/HeatExchangers/WetCoilEffectivenessNTU.mo
@@ -78,6 +78,9 @@ model WetCoilEffectivenessNTU
"Dry fraction, 0.3 means condensation occurs at 30% heat exchange length from air inlet";
protected
+ constant Real kUniConHeaCoo(final unit="1/W") = 1 "Constant for unit conversion";
+ constant Real kUniConHum(final unit="s/kg") = 1 "Constant for unit conversion";
+
final parameter Modelica.Units.SI.MassFraction X_w_a2_nominal=w_a2_nominal/(1
+ w_a2_nominal)
"Water mass fraction of inlet air at a rated condition (in kg/kg total air)";
@@ -122,8 +125,7 @@ protected
final dp_nominal = dp1_nominal,
final m_flow_nominal = m1_flow_nominal,
final energyDynamics = energyDynamics,
- final Q_flow_nominal=-1,
- u(final unit="W"))
+ final Q_flow_nominal=-1)
"Heat exchange with water stream"
annotation (Placement(transformation(extent={{60,50},{80,70}})));
@@ -132,10 +134,9 @@ protected
final mWat_flow_nominal = 1,
final dp_nominal = dp2_nominal,
final m_flow_nominal = m2_flow_nominal,
- final energyDynamics = energyDynamics,
- u(final unit="kg/s"))
+ final energyDynamics = energyDynamics)
"Heat and moisture exchange with air stream"
- annotation (Placement(transformation(extent={{-60,-70},{-80,-50}})));
+ annotation (Placement(transformation(extent={{-62,-94},{-82,-74}})));
Buildings.Fluid.HeatExchangers.BaseClasses.HADryCoil hA(
final UA_nominal = UA_nominal,
final m_flow_nominal_a = m2_flow_nominal,
@@ -224,7 +225,7 @@ protected
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHea
"Prescribed heat flow"
- annotation (Placement(transformation(extent={{20,-90},{0,-70}})));
+ annotation (Placement(transformation(extent={{18,-100},{-2,-80}})));
Real fra_a1(min=0, max=1) = if allowFlowReversal1
then Modelica.Fluid.Utilities.regStep(
m1_flow,
@@ -281,6 +282,13 @@ protected
p=Medium2.p_default,
X=Medium2.X_default[1:Medium2.nXi]) "Default state for medium 2";
+ Modelica.Blocks.Math.Gain uniConHum(
+ final k=kUniConHum) "Unit conversion for input to humidifier"
+ annotation (Placement(transformation(extent={{-20,-70},{-40,-50}})));
+ Modelica.Blocks.Math.Gain uniConHeaCoo(
+ final k=kUniConHeaCoo)
+ "Unit conversion for input to heater and cooler model"
+ annotation (Placement(transformation(extent={{12,70},{32,90}})));
initial equation
assert(m1_flow_nominal > Modelica.Constants.eps,
"m1_flow_nominal must be positive, m1_flow_nominal = " + String(
@@ -368,36 +376,34 @@ equation
connect(heaCoo.port_b, port_b1) annotation (Line(points={{80,60},{80,60},{100,60}},color={0,127,255},
thickness=1));
connect(heaCooHum_u.port_b, port_b2) annotation (Line(
- points={{-80,-60},{-90,-60},{-100,-60}},
+ points={{-82,-84},{-90,-84},{-90,-60},{-100,-60}},
color={0,127,255},
thickness=1));
connect(hA.hA_1, dryWetCalcs.UAWat) annotation (Line(points={{-49.1,5.7},{-46,
5.7},{-46,36.6667},{-22.8571,36.6667}}, color={0,0,127}));
- connect(hA.hA_2, dryWetCalcs.UAAir) annotation (Line(points={{-49.1,-9.7},{
- -46,-9.7},{-46,-36},{-46,-36.6667},{-22.8571,-36.6667}},
+ connect(hA.hA_2, dryWetCalcs.UAAir) annotation (Line(points={{-49.1,-9.7},{-46,
+ -9.7},{-46,-36},{-46,-36.6667},{-22.8571,-36.6667}},
color={0,0,127}));
- connect(cp_a1Exp.y, dryWetCalcs.cpWat) annotation (Line(points={{-29.3,24},{
- -22.8571,24},{-22.8571,23.3333}},
- color={0,0,127}));
+ connect(cp_a1Exp.y, dryWetCalcs.cpWat) annotation (Line(points={{-29.3,24},{-22.8571,
+ 24},{-22.8571,23.3333}}, color={0,0,127}));
connect(XWat_a2Exp.y, dryWetCalcs.X_wAirIn) annotation (Line(points={{-29.3,4},
{-22.8571,4},{-22.8571,3.33333}}, color={0,0,127}));
- connect(p_a2Exp.y, dryWetCalcs.pAir) annotation (Line(points={{-29.3,-4},{
- -22.8571,-4},{-22.8571,-3.33333}},
+ connect(p_a2Exp.y, dryWetCalcs.pAir) annotation (Line(points={{-29.3,-4},{-22.8571,
+ -4},{-22.8571,-3.33333}},
color={0,0,127}));
- connect(h_a2Exp.y, dryWetCalcs.hAirIn) annotation (Line(points={{-29.3,-12},{
- -22,-12},{-22,-10},{-22.8571,-10}},
+ connect(h_a2Exp.y, dryWetCalcs.hAirIn) annotation (Line(points={{-29.3,-12},{-22,
+ -12},{-22,-10},{-22.8571,-10}},
color={0,0,127}));
- connect(cp_a2Exp.y, dryWetCalcs.cpAir) annotation (Line(points={{-29.3,-24},{
- -22.8571,-24},{-22.8571,-23.3333}},
- color={0,0,127}));
+ connect(cp_a2Exp.y, dryWetCalcs.cpAir) annotation (Line(points={{-29.3,-24},{-22.8571,
+ -24},{-22.8571,-23.3333}}, color={0,0,127}));
connect(TIn_a1Exp.y, hA.T_1) annotation (Line(points={{-83.3,22},{-80,22},{-80,
1.3},{-68.9,1.3}}, color={0,0,127}));
- connect(TIn_a1Exp.y, dryWetCalcs.TWatIn) annotation (Line(points={{-83.3,22},
- {-50,22},{-50,16.6667},{-22.8571,16.6667}}, color={0,0,127}));
+ connect(TIn_a1Exp.y, dryWetCalcs.TWatIn) annotation (Line(points={{-83.3,22},{
+ -50,22},{-50,16.6667},{-22.8571,16.6667}}, color={0,0,127}));
connect(TIn_a2Exp.y, hA.T_2) annotation (Line(points={{-83.3,-2},{-76,-2},{-76,
-5.3},{-68.9,-5.3}}, color={0,0,127}));
- connect(TIn_a2Exp.y, dryWetCalcs.TAirIn) annotation (Line(points={{-83.3,-2},
- {-76,-2},{-76,-16.6667},{-22.8571,-16.6667}}, color={0,0,127}));
+ connect(TIn_a2Exp.y, dryWetCalcs.TAirIn) annotation (Line(points={{-83.3,-2},{
+ -76,-2},{-76,-16.6667},{-22.8571,-16.6667}}, color={0,0,127}));
connect(m_flow_a1Exp.y, hA.m1_flow) annotation (Line(points={{-83.3,36},{-76,36},
{-76,5.7},{-68.9,5.7}}, color={0,0,127}));
connect(m_flow_a1Exp.y, dryWetCalcs.mWat_flow) annotation (Line(points={{-83.3,
@@ -412,19 +418,21 @@ equation
connect(m_flow_a2Exp.y, dryWetCalcs.mAir_flow) annotation (Line(points={{-83.3,
-30},{-22.8571,-30}}, color={0,0,127}));
connect(port_a2, heaCooHum_u.port_a) annotation (Line(
- points={{100,-60},{20,-60},{-60,-60}},
+ points={{100,-60},{72,-60},{72,-76},{-52,-76},{-52,-84},{-62,-84}},
color={0,127,255},
thickness=1));
- connect(preHea.port, heaCooHum_u.heatPort) annotation (Line(points={{0,-80},{-40,
- -80},{-40,-66},{-60,-66}}, color={191,0,0}));
- connect(dryWetCalcs.QTot_flow, heaCoo.u) annotation (Line(points={{62.8571,
- -6.66667},{80,-6.66667},{80,44},{40,44},{40,66},{58,66}},
- color={0,0,127}));
- connect(dryWetCalcs.mCon_flow, heaCooHum_u.u) annotation (Line(points={{62.8571,
- -33.3333},{70,-33.3333},{70,-54},{-59,-54}}, color={0,0,127}));
- connect(preHea.Q_flow, dryWetCalcs.QTot_flow) annotation (Line(points={{20,-80},
- {44,-80},{80,-80},{80,-6.66667},{62.8571,-6.66667}},
- color={0,0,127}));
+ connect(preHea.port, heaCooHum_u.heatPort) annotation (Line(points={{-2,-90},{
+ -62,-90}}, color={191,0,0}));
+ connect(preHea.Q_flow, dryWetCalcs.QTot_flow) annotation (Line(points={{18,-90},
+ {80,-90},{80,-6.66667},{62.8571,-6.66667}}, color={0,0,127}));
+ connect(dryWetCalcs.mCon_flow, uniConHum.u) annotation (Line(points={{62.8571,
+ -33.3333},{70,-33.3333},{70,-60},{-18,-60}}, color={0,0,127}));
+ connect(uniConHum.y, heaCooHum_u.u) annotation (Line(points={{-41,-60},{-56,-60},
+ {-56,-78},{-61,-78}}, color={0,0,127}));
+ connect(dryWetCalcs.QTot_flow, uniConHeaCoo.u) annotation (Line(points={{62.8571,
+ -6.66667},{80,-6.66667},{80,44},{4,44},{4,80},{10,80}}, color={0,0,127}));
+ connect(uniConHeaCoo.y, heaCoo.u) annotation (Line(points={{33,80},{48,80},{48,
+ 66},{58,66}}, color={0,0,127}));
annotation (
defaultComponentName="hexWetNtu",
Icon(graphics={
@@ -522,7 +530,7 @@ equation
fillPattern=FillPattern.Solid,
smooth=Smooth.Bezier)}),
Diagram(graphics={Text(
- extent={{44,84},{86,76}},
+ extent={{-80,70},{-38,62}},
textColor={28,108,200},
textString="Water Side",
textStyle={TextStyle.Italic},
@@ -650,6 +658,11 @@ Fuzzy identification of systems and its applications to modeling and control.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
February 7, 2025, by Jelger Jansen:
Removed import statement.
This is for
diff --git a/Buildings/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/Frosting/Validation/WetterAfjei1997.mo b/Buildings/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/Frosting/Validation/WetterAfjei1997.mo
index 3ae5b2725c5..b4b5afcc10d 100644
--- a/Buildings/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/Frosting/Validation/WetterAfjei1997.mo
+++ b/Buildings/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/Frosting/Validation/WetterAfjei1997.mo
@@ -14,7 +14,9 @@ model WetterAfjei1997
sigBus1
"Bus-connector used in a heat pump"
annotation (Placement(transformation(extent={{-48,-20},{-8,20}})));
- Modelica.Blocks.Sources.Constant const(final k=0)
+ Modelica.Blocks.Sources.Constant const(
+ final k=0,
+ y(unit="kg/s"))
"Values are irrelevant for the function"
annotation (Placement(transformation(extent={{-80,20},{-60,40}})));
Modelica.Blocks.Sources.Ramp ramp(
@@ -30,6 +32,11 @@ model WetterAfjei1997
Modelica.Blocks.Interfaces.RealOutput iceFacAir
"Icing factor from 0 to 1 to estimate influence of icing"
annotation (Placement(transformation(extent={{100,-30},{120,-10}})));
+ Modelica.Blocks.Sources.Constant const1(
+ final k=0,
+ y(unit="K"))
+ "Values are irrelevant for the function"
+ annotation (Placement(transformation(extent={{-80,60},{-60,80}})));
equation
connect(iceFacWatSou.iceFac, iceFacWat)
annotation (Line(points={{41,20},{110,20}}, color={0,0,127}));
@@ -43,12 +50,6 @@ equation
index=1,
extent={{6,3},{6,3}},
horizontalAlignment=TextAlignment.Left));
- connect(const.y, sigBus1.TEvaOutMea) annotation (Line(points={{-59,30},{-28,30},
- {-28,0}}, color={0,0,127}), Text(
- string="%second",
- index=1,
- extent={{-3,-6},{-3,-6}},
- horizontalAlignment=TextAlignment.Right));
connect(ramp.y, sigBus1.TEvaInMea) annotation (Line(points={{-59,-30},{-28,-30},
{-28,0}}, color={0,0,127}), Text(
string="%second",
@@ -65,6 +66,12 @@ equation
index=1,
extent={{-6,3},{-6,3}},
horizontalAlignment=TextAlignment.Right));
+ connect(const1.y, sigBus1.TEvaOutMea) annotation (Line(points={{-59,70},{-28,
+ 70},{-28,0}}, color={0,0,127}), Text(
+ string="%second",
+ index=1,
+ extent={{2,2},{2,5}},
+ horizontalAlignment=TextAlignment.Left));
annotation ( __Dymola_Commands(file=
"modelica://Buildings/Resources/Scripts/Dymola/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/Frosting/Validation/WetterAfjei1997.mos"
"Simulate and plot"),
@@ -86,11 +93,16 @@ https://simulationresearch.lbl.gov/wetter/download/type204_hp.pdf
", revisions="
- -
- April 17, 2025, by Fabian Wuellhorst:
- First implementation, see
- IBPSA #1975
-
+-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
+April 17, 2025, by Fabian Wuellhorst:
+First implementation, see
+IBPSA #1975
+
"));
end WetterAfjei1997;
diff --git a/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo b/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
index 6f761e6fa6f..3b81a8dfd67 100644
--- a/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
+++ b/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
@@ -102,7 +102,10 @@ model MixingVolumeZeroFlow
use_m_flow_in=true,
use_T_in=true) "Source"
annotation (Placement(transformation(extent={{-60,0},{-40,20}})));
- Modelica.Blocks.Routing.RealPassThrough reaPasThr
+ Modelica.Blocks.Math.Gain reaPasThr(
+ final k=1,
+ u(unit="kg/s"),
+ y(unit="W"))
"Real pass through for unit conversion"
annotation (Placement(transformation(extent={{-66,74},{-54,86}})));
equation
@@ -175,6 +178,11 @@ equation
Documentation(revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
January 27, 2016, by Filip Jorissen:
Changed heat flow rate at zero flow to avoid triggering of
conservation of energy check.
diff --git a/Buildings/Fluid/Movers/BaseClasses/Validation/HydraulicEfficiencyMethods.mo b/Buildings/Fluid/Movers/BaseClasses/Validation/HydraulicEfficiencyMethods.mo
index edb87395a58..46d13fafc62 100644
--- a/Buildings/Fluid/Movers/BaseClasses/Validation/HydraulicEfficiencyMethods.mo
+++ b/Buildings/Fluid/Movers/BaseClasses/Validation/HydraulicEfficiencyMethods.mo
@@ -67,9 +67,12 @@ model HydraulicEfficiencyMethods
Modelica.Blocks.Sources.Constant y(k=1) "Relative speed"
annotation (Placement(transformation(extent={{-60,70},{-40,90}})));
- Modelica.Blocks.Sources.Ramp m_flow(height=rho.k, duration=1) "Mass flow rate"
+ Modelica.Blocks.Sources.Ramp m_flow(
+ height=1.2,
+ duration=1,
+ y(unit="kg/s")) "Mass flow rate"
annotation (Placement(transformation(extent={{-60,20},{-40,40}})));
- Modelica.Blocks.Sources.Constant rho(k=rhoFlu) "Density"
+ Modelica.Blocks.Sources.Constant rho(k(unit="kg/m3")=rhoFlu) "Density"
annotation (Placement(transformation(extent={{-60,-40},{-40,-20}})));
equation
@@ -114,6 +117,11 @@ Buildings.Fluid.Movers.BaseClasses.Types.HydraulicEfficiencyMethod.
", revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
Aug 5, 2022, by Hongxiang Fu:
First implementation.
This is for
diff --git a/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo b/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo
index f1065976882..e3b02fa188e 100644
--- a/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo
+++ b/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo
@@ -29,13 +29,11 @@ block CoolingCoilValve "Cooling coil valve position control sequence"
"Recorded fan feedback threshold hysteresis delta"
annotation(Evaluate=true, Dialog(group="Enable"));
- parameter Modelica.Units.SI.Temperature TSupHighLim=50*(5/9) - 32*(5/9) +
- 273.15
+ parameter Modelica.Units.SI.Temperature TSupHighLim=50*(5/9) - 32*(5/9) + 273.15
"Recorded minimum supply air temperature for defining the upper limit of the valve position"
annotation (Evaluate=true, Dialog(group="Controller"));
- parameter Modelica.Units.SI.Temperature TSupHigLim=42*(5/9) - 32*(5/9) +
- 273.15
+ parameter Modelica.Units.SI.Temperature TSupHigLim=42*(5/9) - 32*(5/9) + 273.15
"Recorded maximum supply air temperature for defining the upper limit of the valve position"
annotation (Evaluate=true, Dialog(group="Controller"));
@@ -86,12 +84,14 @@ block CoolingCoilValve "Cooling coil valve position control sequence"
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupSet(
final unit="K",
+ displayUnit="degC",
final quantity = "ThermodynamicTemperature") "Supply air temperature setpoint"
annotation (Placement(transformation(extent={{-160,70},{-120,110}}),
iconTransformation(extent={{-120,30},{-100,50}})));
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(
final unit="K",
+ displayUnit="degC",
final quantity = "ThermodynamicTemperature")
"Measured outdoor air temperature"
annotation (Placement(transformation(extent={{-160,-40},{-120,0}}),
diff --git a/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo b/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo
index d97aca5c276..b1251de862f 100644
--- a/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo
+++ b/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo
@@ -4,32 +4,32 @@ model CoolingCoilValve
extends Modelica.Icons.Example;
parameter Real TOutCooCut(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 283.15
"Lower outdoor air temperature limit for enabling cooling";
parameter Real TSup(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 293.15
"Supply air temperature";
parameter Real TSupSet(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 289.15
"Supply air temperature setpoint";
parameter Real TSetMinLowLim(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 278.71
"Minimum supply air temperature for defining the upper limit of the valve position";
parameter Real TSetMaxLowLim(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 283.15
"Maximum supply air temperature for defining the upper limit of the valve position";
parameter Real LowTSupSet(
- final unit="F",
+ final unit="K",
final quantity = "ThermodynamicTemperature") = 280.37
"Supply air temeprature setpoint to check the limiter functionality";
@@ -271,6 +271,11 @@ in B33 on the main LBNL campus.
revisions="
-
+March 31, 2026, by Michael Wetter:
+Corrected unit propagation error that causes Dymola 2026x to not show certain units.
+See #2100.
+
+-
February 19, 2019, by Michael Wetter:
Revised example.
From 3fa46a2ca7a07335e86ad6213002220fe17a0aba Mon Sep 17 00:00:00 2001
From: Michael Wetter
Date: Mon, 6 Apr 2026 16:00:57 -0700
Subject: [PATCH 2/4] Replace eps with minHorLen for horizon length
---
.../PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo b/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
index b4aedb32bb0..fdc56579b1d 100644
--- a/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
+++ b/Buildings/Controls/OBC/Utilities/PIDWithAutotuning/Relay/BaseClasses/TuningMonitor.mo
@@ -1,6 +1,6 @@
within Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Relay.BaseClasses;
block TuningMonitor "Monitor the tuning process"
- constant Modelica.Units.SI.Time eps = 1E-5
+ constant Modelica.Units.SI.Time minHorLen = 1E-5
"A small tolerance applied to determine whether a variable is greater than zero";
Buildings.Controls.OBC.CDL.Interfaces.RealInput tOn(
final quantity="Time",
@@ -33,7 +33,7 @@ protected
"Check if either the length for the on period or the length for the off period are larger than 0"
annotation (Placement(transformation(origin={-40,10}, extent = {{-40, 40}, {-20, 60}})));
Buildings.Controls.OBC.CDL.Reals.Sources.Constant minLen(
- final k=eps)
+ final k=minHorLen)
"Minimum value for the horizon length"
annotation (Placement(transformation(extent={{-140,90},{-120,110}})));
Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler samAddtOntOff
@@ -155,11 +155,6 @@ Corrected unit propagation error that causes Dymola 2026x to not show certain un
See #2100.
-
-March 31, 2026, by Michael Wetter:
-Corrected unit propagation error that causes Dymola 2026x to not show certain units.
-See #2100.
-
--
September 20, 2023, by Sen Huang:
First implementation.
From 39d2db73301f698bdc3914355f77b56437d0eef7 Mon Sep 17 00:00:00 2001
From: Michael Wetter
Date: Wed, 8 Apr 2026 14:33:32 -0700
Subject: [PATCH 3/4] Corrected units
---
.../Validation/MixingVolumeZeroFlow.mo | 31 ++++++++++---------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo b/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
index 3b81a8dfd67..440dffafd32 100644
--- a/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
+++ b/Buildings/Fluid/MixingVolumes/Validation/MixingVolumeZeroFlow.mo
@@ -22,9 +22,10 @@ model MixingVolumeZeroFlow
Medium) "Sink"
annotation (Placement(transformation(extent={{40,-44},{20,-24}})));
Modelica.Blocks.Sources.Ramp ramp_m_flow(
- height=-1,
+ height(unit="kg/s") = -1,
duration=1,
- offset=1) "Mass flow rate ramp input"
+ offset(unit="kg/s") = 1,
+ y(unit="kg/s")) "Mass flow rate ramp input"
annotation (Placement(transformation(extent={{-100,-20},{-80,0}})));
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHea2
"Prescribed heat flow"
@@ -103,16 +104,16 @@ model MixingVolumeZeroFlow
use_T_in=true) "Source"
annotation (Placement(transformation(extent={{-60,0},{-40,20}})));
Modelica.Blocks.Math.Gain reaPasThr(
- final k=1,
+ final k(unit="W.s/kg")=1,
u(unit="kg/s"),
y(unit="W"))
"Real pass through for unit conversion"
annotation (Placement(transformation(extent={{-66,74},{-54,86}})));
equation
connect(sou2.ports[1], volNonLinSys.ports[1]) annotation (Line(points={{-40,-22},
- {-40,-20},{-2,-20}}, color={0,127,255}));
- connect(volNonLinSys.ports[2], sin.ports[1]) annotation (Line(points={{2,-20},
- {2,-20},{20,-20},{20,-31}},
+ {-40,-20},{-1,-20}}, color={0,127,255}));
+ connect(volNonLinSys.ports[2], sin.ports[1]) annotation (Line(points={{1,-20},
+ {1,-20},{20,-20},{20,-35.5}},
color={0,127,255}));
connect(reaExp.y, preHea2.Q_flow) annotation (Line(points={{-45.4,60},{-45.4,
60},{-40,60}},
@@ -120,16 +121,17 @@ equation
connect(preTem.T, cos1.y) annotation (Line(points={{-57.2,40},{-57.2,40},{
-63.4,40}}, color={0,0,127}));
connect(volT.ports[1],sou3. ports[1])
- annotation (Line(points={{-2,-50},{-2,-50},{-40,-50}}, color={0,127,255}));
+ annotation (Line(points={{-1,-50},{-1,-50},{-40,-50}}, color={0,127,255}));
connect(volT.ports[2], sin.ports[2])
- annotation (Line(points={{2,-50},{20,-50},{20,-33}}, color={0,127,255}));
+ annotation (Line(points={{1,-50},{20,-50},{20,-34.5}},
+ color={0,127,255}));
connect(volT.heatPort, preTem.port) annotation (Line(points={{-10,-40},{-18,
-40},{-18,40},{-44,40}},
color={191,0,0}));
connect(sou4.ports[1], volLinSys.ports[1])
- annotation (Line(points={{-40,-90},{-2,-90}}, color={0,127,255}));
- connect(volLinSys.ports[2], sin.ports[3]) annotation (Line(points={{2,-90},{
- 20,-90},{20,-35}}, color={0,127,255}));
+ annotation (Line(points={{-40,-90},{-1,-90}}, color={0,127,255}));
+ connect(volLinSys.ports[2], sin.ports[3]) annotation (Line(points={{1,-90},{20,
+ -90},{20,-33.5}}, color={0,127,255}));
connect(theRes.port_a, volLinSys.heatPort)
annotation (Line(points={{-22,-74},{-22,-80},{-10,-80}}, color={191,0,0}));
connect(theRes.port_b, preTem.port)
@@ -139,10 +141,11 @@ equation
color={191,0,0}));
connect(volQflow.heatPort, preHea1.port)
annotation (Line(points={{-10,20},{-10,80},{-20,80}}, color={191,0,0}));
- connect(sou1.ports[1], volQflow.ports[1]) annotation (Line(points={{-40,10},{
- -28,10},{-2,10}}, color={0,127,255}));
+ connect(sou1.ports[1], volQflow.ports[1]) annotation (Line(points={{-40,10},{-1,
+ 10},{-1,10}}, color={0,127,255}));
connect(volQflow.ports[2], sin.ports[4])
- annotation (Line(points={{2,10},{20,10},{20,-37}}, color={0,127,255}));
+ annotation (Line(points={{1,10},{20,10},{20,-32.5}},
+ color={0,127,255}));
connect(ramp_m_flow.y, sou1.m_flow_in) annotation (Line(points={{-79,-10},{
-72,-10},{-72,18},{-62,18}},
color={0,0,127}));
From e2b9a3647d743483fa83137911bfb2edd92fc6df Mon Sep 17 00:00:00 2001
From: Michael Wetter
Date: Sun, 12 Apr 2026 19:22:26 -0700
Subject: [PATCH 4/4] Separated Controls from other packages
---
.travis.yml | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index a658f5c0a6b..7d92bab96fb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -47,6 +47,9 @@ env:
- TEST_ARG="make test-dymola PACKAGE=\"Buildings.{Air,Examples}\""
- TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.{Air,Examples}\""
- TEST_ARG="make test-optimica PACKAGE=\"Buildings.{Air,Examples}\""
+ - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Controls\""
+ - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Controls\""
+ - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Controls\""
- TEST_ARG="make test-dymola PACKAGE=\"Buildings.ThermalZones.EnergyPlus_24_2_0\""
- TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.ThermalZones.EnergyPlus_24_2_0\""
- TEST_ARG="make test-optimica PACKAGE=\"Buildings.ThermalZones.EnergyPlus_24_2_0\""
@@ -95,9 +98,9 @@ env:
- TEST_ARG="make test-dymola PACKAGE=\"Buildings.Electrical\""
- TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Electrical\""
- TEST_ARG="make test-optimica PACKAGE=\"Buildings.Electrical\""
- - TEST_ARG="make test-dymola PACKAGE=\"Buildings.{Airflow,BoundaryConditions,Controls}\""
- - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.{Airflow,BoundaryConditions,Controls}\""
- - TEST_ARG="make test-optimica PACKAGE=\"Buildings.{Airflow,BoundaryConditions,Controls}\""
+ - TEST_ARG="make test-dymola PACKAGE=\"Buildings.{Airflow,BoundaryConditions}\""
+ - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.{Airflow,BoundaryConditions}\""
+ - TEST_ARG="make test-optimica PACKAGE=\"Buildings.{Airflow,BoundaryConditions}\""
- TEST_ARG="make test-dymola PACKAGE=\"Buildings.HeatTransfer\""
- TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.HeatTransfer\""
- TEST_ARG="make test-optimica PACKAGE=\"Buildings.HeatTransfer\""