Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
717c064
Removed overhead of windpressureprofile interpolation
kldjonge Jul 10, 2025
3a1a50c
Adjust floor heights and parameters in PPD12 models
kldjonge Jul 10, 2025
9096257
Add vertical height check (incl. floor thickness) and refer to incInt…
kldjonge Jul 10, 2025
2177259
Cleaned-up the code and parameter dialog of CrackOrOperableDoor
kldjonge Jul 10, 2025
19bce49
Test for a cavity in a internal ceiling component
kldjonge Jul 10, 2025
583a394
Update TwoStoreyBoxes.mo
kldjonge Jul 10, 2025
48d3d23
OutsideAir testmodel and .mos
kldjonge Jun 5, 2025
9973300
Update to documentation and .mos script for CavityInternalCeiling
kldjonge Jul 10, 2025
b4562c7
Updated .mos to actually show Vdir
kldjonge Jul 10, 2025
0980e96
Updated incInt for OuterWall and Window
kldjonge Jul 10, 2025
c528e70
Fix for assert of vertical height check
kldjonge Jul 18, 2025
21a64c9
Simplify n50_computed parameter assignment
kldjonge Aug 11, 2025
97a0410
Made hRelSurfBot parameter description consistent
kldjonge Aug 11, 2025
91c9af1
Merge branch 'open-ideas:master' into hfloorcheck
kldjonge Aug 13, 2025
eab7f88
CrackOrOperableDoor clean-up and revision notes
kldjonge Aug 13, 2025
03cbd90
Updated documentation for CrackOrOperableDoor.mo
kldjonge Aug 13, 2025
5364ffe
CrackOrOperableDoor make conditionals overrideable
kldjonge Aug 13, 2025
f3de2aa
Typo for MFtrans description
kldjonge Aug 13, 2025
9e07e30
New construction type for CavityInternalCeiling.mo
kldjonge Aug 13, 2025
0653ce9
Added line-breaks in documentation
kldjonge Aug 14, 2025
97a0cf6
TwoStoreyBoxes asserts, C_nominal, revision note
kldjonge Aug 18, 2025
2a088dd
changed hThCor description
kldjonge Aug 18, 2025
74ce453
Components.Examples package in alphabetical order
kldjonge Aug 18, 2025
f192404
Corrected description of CheckVH and added checkbox in dialog
kldjonge Aug 18, 2025
dddf894
Updated an assert message in InternalWall
kldjonge Aug 18, 2025
d4dfd0e
Use IDEAS Tilt types in stead of absolute angles
kldjonge Aug 18, 2025
7991d15
Revision note update and typo in assert statement
kldjonge Aug 18, 2025
2b537eb
Grouped vertical positioning parameters in dialog.
kldjonge Aug 18, 2025
2ec3cc1
Revision note for incInt and n50_computed
kldjonge Aug 18, 2025
d590e68
Better line-breaks and obsolete whitespace for CavityInternalWall
kldjonge Aug 18, 2025
9f67d4e
Deleted obsolete whitespace inPartialSurface.mo
kldjonge Aug 18, 2025
71b2594
grey-out hRelOpeBot when hasCavity=false
kldjonge Aug 18, 2025
5b5311e
Revision note for disabling checkVH in PPD12
kldjonge Aug 18, 2025
4e9ae6d
StructureExt_2Port.mo n50 declaration
kldjonge Aug 18, 2025
d121656
StructureExt_2Port.mo needs Dassl to run
kldjonge Aug 18, 2025
01f851b
OutsideAir revision note
kldjonge Aug 18, 2025
9c0e10d
Description for Radtable
kldjonge Aug 18, 2025
a8a7cd1
Code clean-up of OutsideAir.mo
kldjonge Aug 18, 2025
debaa35
Updated documentation and revisions
kldjonge Aug 18, 2025
421a241
Revision note line-breaks and fixed error in .MOS
kldjonge Aug 18, 2025
c4a853f
fix obsolete reference in LargeHorizontalOpening.mo
kldjonge Aug 18, 2025
88ce412
Set experiment tolerance in TwoStoreyBoxes
kldjonge Aug 18, 2025
ee3af87
Move TwoStoreyBoxes mos script to correct folder
jelgerjansen Aug 18, 2025
5d2bb3a
Update and add reference results
jelgerjansen Aug 18, 2025
55a535a
Remove override for openDoorOnePort parameter in InternalWall
kldjonge Aug 19, 2025
7c01c40
OutsideAir.mo revert unit definition
kldjonge Aug 19, 2025
4997246
HTML formatting changes
kldjonge Aug 19, 2025
82f2e33
CrackOrOperableDoor.mo reformatting
kldjonge Aug 19, 2025
8435b92
Avoid overriding openDoorOnePort, assert correct use of operable wind…
kldjonge Aug 19, 2025
eba386d
Fix triggered final modifier translation warning
kldjonge Aug 19, 2025
70b5f71
Update changelog to reference issue #1417
kldjonge Aug 19, 2025
474ea2a
component-level massflow output variable
kldjonge Aug 19, 2025
23200db
explicitly setting dh=0 for large openings in floors and ceilings
kldjonge Aug 19, 2025
85ff3d8
nCom=1 for small and horizontal gaps.
kldjonge Aug 19, 2025
aa2fc63
Revert "Update and add reference results"
jelgerjansen Aug 19, 2025
4d6b035
Merge branch 'master' into hfloorcheck
jelgerjansen Aug 19, 2025
050dd48
Fix syntax errors Klaas
jelgerjansen Aug 19, 2025
8c23316
Remove dpAB[2] from reference results TwoStoreyBoxes
jelgerjansen Aug 19, 2025
a8f6716
Update new reference results
jelgerjansen Aug 19, 2025
4ed1fe8
Remove second variable from pressure difference plot
kldjonge Aug 19, 2025
f24beb6
Update reference results IDEAS.Buildings.Examples.ZoneExample
jelgerjansen Aug 20, 2025
3181109
Move TwoStoreyBoxes model and script to Buildings.Components.Examples
jelgerjansen Aug 20, 2025
ea31857
Increase time_out of TwinHouses 1-port and 2-port examples
jelgerjansen Aug 20, 2025
240b45c
Change solver BuildingO5_Exp1_1Port to cvode to decrease CPU time and…
jelgerjansen Aug 20, 2025
3224ec4
Put TwinHouses temporarily as first unit test to verify that this works
jelgerjansen Aug 20, 2025
658b16e
Revert "Put TwinHouses temporarily as first unit test to verify that …
jelgerjansen Aug 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
452 changes: 252 additions & 200 deletions IDEAS/Airflow/Multizone/CrackOrOperableDoor.mo

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ model LargeHorizontalOpening
Orifice Opening_Orifice(
redeclare package Medium = Medium,
useDefaultProperties=false,
dp_turbulent=Opening_CrackOrOperableDoor.dp_turbulent_ope,
dp_turbulent=Opening_CrackOrOperableDoor.dp_turbulent,
A=2,
CD=0.78) annotation (Placement(transformation(
extent={{10,-10},{-10,10}},
Expand Down
47 changes: 47 additions & 0 deletions IDEAS/Buildings/Components/Examples/CavityInternalCeiling.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
within IDEAS.Buildings.Components.Examples;
model CavityInternalCeiling
"Illustration of an internal ceiling with a cavity"
extends IDEAS.Buildings.Examples.ZoneExample(
sim(interZonalAirFlowType= IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts),internalWall(
redeclare parameter IDEAS.Buildings.Validation.Data.Constructions.LightWall constructionType,
incOpt=3,
hasCavity = true),
zone1(hFloor=zone.hFloor + zone.hZone + 0.195));

annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)),
experiment(
StopTime=108000,
Interval=720,
Tolerance=0.001,
__Dymola_Algorithm="Dassl"),
__Dymola_Commands(file="Resources/Scripts/Dymola/Buildings/Components/Examples/CavityInternalCeiling.mos"
"Simulate and plot"),
Documentation(info="<html>
<p>
This example contains an example use of an opening in an internal ceiling.
Note that it requires TwoPorts interzonal air flow (<code>interZonalAirFlowType=IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts</code>).
</p>
</html>", revisions="<html>
<ul>
<li>
August 13, 2025, by Klaas De Jonge:<br/>
Updated construction type of Internal floor to <a href=modelica://IDEAS.Buildings.Validation.Data.Constructions.LightWall>
IDEAS.Buildings.Validation.Data.Constructions.LightWall</a>
</li>
<li>
February 05 2025, Klaas De Jonge<br>
First implementation.
</li>
</ul>
</html>"),
__Dymola_experimentSetupOutput,
__Dymola_experimentFlags(
Advanced(
EvaluateAlsoTop=false,
GenerateAnalyticJacobian=true,
OutputModelicaCode=false),
Evaluate=true,
OutputCPUtime=true,
OutputFlatModelica=false));
end CavityInternalCeiling;
10 changes: 6 additions & 4 deletions IDEAS/Buildings/Components/Examples/CavityInternalWall.mo
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
within IDEAS.Buildings.Components.Examples;
model CavityInternalWall
"Illustration of an internal wall with an operable cavity"
extends IDEAS.Buildings.Examples.ZoneExample(sim.interZonalAirFlowType = IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts, internalWall(hasCavity = true, use_y_doo = true));
extends IDEAS.Buildings.Examples.ZoneExample(sim(
interZonalAirFlowType=IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts),
internalWall(hasCavity = true, use_y_doo = true));
Modelica.Blocks.Sources.Sine sine(amplitude = 0.5, f = 1 / 7200, offset = 0.5) annotation(
Placement(visible = true, transformation(origin = {-90, 10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));equation
Placement(visible = true, transformation(origin = {-90, 10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(internalWall.y_doo, sine.y) annotation(
Line(points = {{-16, 6}, {-16, 10}, {-78, 10}}, color = {0, 0, 127}));

Line(points={{-16.8,6.4},{-16.8,10},{-79,10}}, color = {0, 0, 127}));
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)),
experiment(
Expand Down
18 changes: 12 additions & 6 deletions IDEAS/Buildings/Components/Examples/TwoStoreyBoxes.mo
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ model TwoStoreyBoxes "Model with two zones on different floors, one zone above t
inner BoundaryConditions.SimInfoManager sim(interZonalAirFlowType=IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts,n50=1) annotation (Placement(transformation(extent={{-100,80},{-80,100}})));

IDEAS.Buildings.Components.RectangularZoneTemplate Level(
hFloor=5,
Medium(extraPropertiesNames={"CO2"},C_nominal={1e-6}),
hFloor=5.25,
T_start=291.15,
bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
Expand All @@ -25,6 +26,7 @@ model TwoStoreyBoxes "Model with two zones on different floors, one zone above t
annotation (Placement(transformation(extent={{-40,20},{-20,40}})));

IDEAS.Buildings.Components.RectangularZoneTemplate Groundfloor(
Medium(extraPropertiesNames={"CO2"},C_nominal={1e-6}),
T_start=291.15,
bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
Expand Down Expand Up @@ -54,6 +56,9 @@ initial equation
Groundfloor.gainCon.T=Tfix.port.T;

equation
assert(Modelica.Math.isEqual(Groundfloor.ppm,sim.ppmCO2,eps=1),"CO2 should be at constant background level but isn't");
assert(Modelica.Math.isEqual(Level.ppm,sim.ppmCO2,eps=1),"CO2 should be at constant background level but isn't");

connect(Groundfloor.proBusCei, Level.proBusFlo) annotation (Line(
points={{-30.2,-24},{-30,-22},{-30,24}},
color={255,204,51},
Expand All @@ -74,21 +79,22 @@ equation
coordinateSystem(preserveAspectRatio=false)),
experiment(
StopTime=1209600,
Interval=3600.00288,
Tolerance=1e-12,
Interval=3600,
Tolerance=0.0001,
__Dymola_fixedstepsize=15,
__Dymola_Algorithm="Dassl"),
Documentation(revisions="<html>
<ul>
<li>
October 30, 2024, by Klaas De Jonge:<br/>
<li>August 18, 2025, by Klaas De Jonge:<br>
Added assert statements for CO2 background check,added C_nominal to medium declaration,changed tolerance in related .mos file,corrected Level.hFloor for <a href=\"https://github.com/open-ideas/IDEAS/issues/1338\">#1338</a></li>
<li>October 30, 2024, by Klaas De Jonge:<br>
First implementation
</li>
</ul>
</html>", info="<html>
<p>Model with two zones on different floors, one zone above the other, with a large opening between these zones and stack-effect airflow enabled.</p>
</html>"),
__Dymola_Commands(file=
"Resources/Scripts/Dymola/Buildings/Examples/TwoStoreyBoxes.mos"
"Resources/Scripts/Dymola/Buildings/Components/Examples/TwoStoreyBoxes.mos"
"Simulate and Plot"));
end TwoStoreyBoxes;
1 change: 1 addition & 0 deletions IDEAS/Buildings/Components/Examples/package.order
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
AirflowBoxModel
BeamRadiationOnFloor
BuildingShadeExample
CavityInternalCeiling
CavityInternalWall
CavityWalls
FacadeShadeExample
Expand Down
23 changes: 18 additions & 5 deletions IDEAS/Buildings/Components/Interfaces/PartialSurface.mo
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,16 @@ partial model PartialSurface "Partial model for building envelope component"
parameter Boolean use_custom_q50=false
"check to disable the default q50 computation and to assign a custom q50 value"
annotation (choices(checkBox=true),Dialog(tab="Airflow", group="Airtightness"), Evaluate=true);
parameter Real custom_q50(unit="m3/(h.m2)") = 2
parameter Real custom_q50(unit="m3/(h.m2)")=2
"Surface air tightness"
annotation (Dialog(enable=use_custom_q50,tab="Airflow", group="Airtightness"));
final parameter Real q50_internal(unit="m3/(h.m2)",fixed=false)
"Surface air tightness";

final parameter Modelica.Units.SI.Length hzone_a( fixed=false);//connected with propsbus in inital equation
final parameter Modelica.Units.SI.Length hAbs_floor_a( fixed=false);
parameter Modelica.Units.SI.Length hVertical=if IDEAS.Utilities.Math.Functions.isAngle(inc,IDEAS.Types.Tilt.Floor) or IDEAS.Utilities.Math.Functions.isAngle(inc,IDEAS.Types.Tilt.Ceiling) then 0 else hzone_a "Vertical surface height, height of the surface projected to the vertical, 0 for floors and ceilings" annotation(Evaluate=true);
parameter Modelica.Units.SI.Length hRelSurfBot_a= if IDEAS.Utilities.Math.Functions.isAngle(inc,IDEAS.Types.Tilt.Ceiling) then hzone_a else 0 "Height between the lowest point of the surface (bottom) and the floor level of the zone connected at propsBus_a"
annotation(Evaluate=true);
parameter Modelica.Units.SI.Length hVertical=if IDEAS.Utilities.Math.Functions.isAngle(incInt,IDEAS.Types.Tilt.Floor) or IDEAS.Utilities.Math.Functions.isAngle(incInt,IDEAS.Types.Tilt.Ceiling) then 0 else hzone_a "Vertical surface height, height of the surface projected to the vertical (e.g. 0 for floors and ceilings)" annotation(Evaluate=true,Dialog(group="Vertical position (important if interZonalAirFlowType is TwoPorts)"));
parameter Modelica.Units.SI.Length hRelSurfBot_a= if IDEAS.Utilities.Math.Functions.isAngle(incInt,IDEAS.Types.Tilt.Ceiling) then hzone_a else 0 "Height between the lowest point of the surface (bottom) and the floor level of the zone connected at propsBus_a (e.g. 0 for walls at floor level and floors.)" annotation(Evaluate=true,Dialog(group="Vertical position (important if interZonalAirFlowType is TwoPorts)"));
final parameter Modelica.Units.SI.Length Habs_surf=hAbs_floor_a+hRelSurfBot_a+(hVertical/2) "Absolute height of the middle of the surface, can be used to check the heights after initialisation";

IDEAS.Buildings.Components.Interfaces.ZoneBus propsBus_a(
Expand Down Expand Up @@ -88,6 +87,16 @@ partial model PartialSurface "Partial model for building envelope component"
"Multilayer component for simulating walls, windows and other surfaces"
annotation (Placement(transformation(extent={{10,-10},{-10,10}})));

output Modelica.Units.SI.MassFlowRate mBA_flow_1=crackOrOperableDoor.m1_flow
if add_door and sim.interZonalAirFlowType <> IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None
"Flow outwards relative to propsBus_a, part 1"
annotation (Placement(visible = true, transformation(origin = {30, -52}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
output Modelica.Units.SI.MassFlowRate mBA_flow_2=-crackOrOperableDoor.m2_flow
if add_door and sim.interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts
"Flow outwards relative to propsBus_a, part 2"
annotation (Placement(visible = true, transformation(origin = {30, -52}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

//protected
Q50_parameterToConnector q50_zone(
q50_inp=q50_internal,
v50_surf=q50_internal*A,
Expand All @@ -102,7 +111,7 @@ partial model PartialSurface "Partial model for building envelope component"
h_b1=-0.5*hzone_a + 0.75*hVertical + hRelSurfBot_a,
h_a2=-0.5*hzone_a + 0.25*hVertical + hRelSurfBot_a,
interZonalAirFlowType = sim.interZonalAirFlowType,
inc=inc) if add_door and sim.interZonalAirFlowType <> IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None annotation (
inc=incInt) if add_door and sim.interZonalAirFlowType <> IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None annotation (
Placement(visible = true, transformation(origin = {30, -52}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Sources.RealExpression AExp(y = A) "Area expression" annotation(
Placement(transformation(origin = {0, 20}, extent = {{-10, -10}, {10, 10}})));
Expand Down Expand Up @@ -282,6 +291,10 @@ equation
Documentation(revisions="<html>
<ul>
<li>
August 18, 2025, by Klaas De Jonge:<br/>
Changed <code>inc</code> to <code>incInt</code> where nececarry.
</li>
<li>
January 24, 2025, by Klaas De Jonge:<br/>
Addition of BooleanPassThrough and RealPassThrough block for v50 and use_custom_q50 and
parameter for number of dummy connections in <code>Q50_parameterToConnector</code> to avoid translation warnings.
Expand Down
6 changes: 5 additions & 1 deletion IDEAS/Buildings/Components/Interfaces/PartialZone.mo
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ model PartialZone "Building zone model"

parameter Real n50(unit="1/h",min=0.01)= sim.n50 "n50 value for this zone"
annotation(Dialog(tab="Airflow", group="Airtightness"));
final parameter Real n50_computed(unit="1/h",min=0.01) = if use_custom_n50 and not setq50.allSurfacesCustom then n50 else n50_int "Computed n50 value";
final parameter Real n50_computed(unit="1/h",min=0.01) = n50_int "Computed n50 value";
parameter Boolean allowFlowReversal=true
"= true to allow flow reversal in zone, false restricts to design direction (port_a -> port_b)."
annotation(Dialog(tab="Airflow", group="Air model"));
Expand Down Expand Up @@ -561,6 +561,10 @@ end for;
</html>", revisions="<html>
<ul>
<li>
August 18, 2025, by Klaas De Jonge:<br/>
Simplified <code>n50_computed</code> to <code>n50_int</code> since the if statement was a duplicate.
</li>
<li>
November 11, 2024 by Lucas Verleyen:<br/>
Change Medium to IDEAS.Media.Air and use 'constrainedby' for Modelica.Media.Interfaces.PartialMedium.
This is for <a href=https://github.com/open-ideas/IDEAS/issues/1375>#1375</a>.
Expand Down
Loading