diff --git a/IDEAS/Airflow/Multizone/CrackOrOperableDoor.mo b/IDEAS/Airflow/Multizone/CrackOrOperableDoor.mo
index a3529e2e3..2885161b2 100644
--- a/IDEAS/Airflow/Multizone/CrackOrOperableDoor.mo
+++ b/IDEAS/Airflow/Multizone/CrackOrOperableDoor.mo
@@ -16,35 +16,34 @@ model CrackOrOperableDoor
Modelica.Media.Interfaces.PartialMedium "Medium in the component"
annotation (choices(
choice(redeclare package Medium = IDEAS.Media.Air "Moist air")));
-
- parameter Modelica.Units.SI.Velocity vZer=0.001
- "Minimum velocity to prevent zero flow. Recommended: 0.001";
- parameter Modelica.Units.SI.Length wOpe=0.9 "Width of opening"
- annotation (Dialog(group="Geometry"));
- parameter Modelica.Units.SI.Length hOpe=2.1 "Height of opening"
- annotation (Dialog(group="Geometry"));
-
parameter BoundaryConditions.Types.InterZonalAirFlow interZonalAirFlowType
"Interzonal air flow type";
- final parameter Modelica.Units.SI.PressureDifference dpCloRat(displayUnit="Pa")=50
- "Pressure drop at rating condition of closed door"
- annotation (Dialog(group="Rating conditions"));
-
- parameter Modelica.Units.SI.Length h_b1 "Height at port b1 (hasCavity=false)";
- parameter Modelica.Units.SI.Length h_b2 = 0 "Height at port b2(hasCavity=false)";
- parameter Modelica.Units.SI.Length h_a1 = 0 "Height at port a1(hasCavity=false)";
- parameter Modelica.Units.SI.Length h_a2 "Height at port a2(hasCavity=false)";
+ parameter SI.Angle inc=Modelica.Constants.pi/2 "inclination angle (vertical=pi/2)";
+ parameter Modelica.Units.SI.Area A_q50 "Surface area for leakage computation (closed door)" annotation (Dialog(group="Crack or Closed door"));
+ parameter Real q50(unit="m3/(h.m2)") "Surface air tightness" annotation (Dialog(group="Crack or Closed door"));
+ parameter Modelica.Units.SI.Length wOpe=0.9 "Width of opening" annotation (Dialog(group="Open door"));
+ parameter Modelica.Units.SI.Length hOpe=2.1 "Height of opening" annotation (Dialog(group="Open door"));
+ parameter Integer nCom=if abs(hOpe*sin(inc)) < 0.01 then 2 else max(2,integer(abs(hOpe*sin(inc))/4)) "Number of compartments for the discretization" annotation (Dialog(group="Open door"));
+
+ parameter Modelica.Units.SI.Length h_b1 "Height of crack at port b1 (hasCavity=false), center of conected zone is 0" annotation (Dialog(group="Density Column Heights"));
+ parameter Modelica.Units.SI.Length h_b2 = 0 "Height of crack at port b2(hasCavity=false), center of conected zone is 0" annotation (Dialog(group="Density Column Heights"));
+ parameter Modelica.Units.SI.Length h_a1 = 0 "Height of crack at port a1(hasCavity=false), center of conected zone is 0" annotation (Dialog(group="Density Column Heights"));
+ parameter Modelica.Units.SI.Length h_a2 "Height at of crack port a2(hasCavity=false), center of conected zone is 0" annotation (Dialog(group="Density Column Heights"));
parameter SI.Length hA=(h_a1 + h_b2)/2
- "Height of reference pressure at port a1 for opening (hasCavity=true) model";
+ "Height of reference pressure at port a1 for opening (hasCavity=true) model, opening starting height is 0"
+ annotation (Dialog(group="Density Column Heights"));
parameter SI.Length hB=(h_a2 + h_b1)/2
- "Height of reference pressure at port b1 for opening (hasCavity=true) model";
+ "Height of reference pressure at port b1 for opening (hasCavity=true) model, opening starting height is 0"
+ annotation (Dialog(group="Density Column Heights"));
+ final parameter Modelica.Units.SI.PressureDifference dpCloRat(displayUnit="Pa")=50
+ "Pressure drop at rating condition of closed door"
+ annotation (Dialog(group="Rating conditions"));
final parameter Real CDCloRat(min=0, max=1)=1
"Discharge coefficient at rating conditions of closed door"
annotation (Dialog(group="Rating conditions"));
- parameter Modelica.Units.SI.Area A_q50 "Surface area for leakage computation (closed door)";
- parameter Real q50(unit="m3/(h.m2)") "Surface air tightness";
+
final parameter Modelica.Units.SI.Area LClo(min=0) = ((q50*A_q50/3600)/(dpCloRat)^mClo)/(((dpCloRat)^(0.5-mClo))*sqrt(2/rho_default))
"Effective leakage area of internal wall (when door is fully closed)"
@@ -59,23 +58,27 @@ model CrackOrOperableDoor
parameter Real mClo= 0.65 "Flow exponent for crack or crack of closed door"
annotation (Dialog(group="Crack or Closed door"));
- parameter Integer nCom=if abs(hOpe*sin(inc)) < 0.01 then 2 else max(2,integer(abs(hOpe*sin(inc))/4)) "Number of compartments for the discretization";
- parameter Boolean useDoor = false "=true, to use operable door instead of a crack";
- parameter Boolean use_y = true "=true, to use control input";
- parameter Boolean openDoorOnePort = false "Sets whether a door is open or closed in one port configuration";
+ parameter Boolean useDoor = false "=true, to use operable door instead of a crack" annotation (Dialog(group="Open door"));
+ parameter Boolean use_y = true "=true, to use control input" annotation (Dialog(group="Open door"));
+ parameter Boolean openDoorOnePort = false "Sets whether a door is open or closed in one port configuration" annotation (Dialog(group="Open door"));
parameter Modelica.Units.SI.PressureDifference dp_turbulent(
min=0,
displayUnit="Pa") = 0.01
- "Pressure difference where laminar and turbulent flow relation coincide. Recommended: 0.01";
+ "Pressure difference where laminar and turbulent flow relation coincide. Recommended: 0.01" annotation (Dialog(tab="Advanced",group="Crack model regularisation"));
parameter Modelica.Units.SI.PressureDifference dp_turbulent_ope(min=0,displayUnit="Pa") = (MFtrans/(rho_default*(CDOpe * hOpe*wOpe * sqrt(2/rho_default))))^(1/mOpe)
- if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Pressure difference where laminar and turbulent flow relation coincide for large cavities";
- parameter Modelica.Units.SI.MassFlowRate MFtrans=(hOpe*wOpe)*VItrans*REtrans/DOpe if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Recommended massflowrate used for reguralisation";
- parameter Modelica.Units.SI.Length DOpe=4*hOpe*wOpe/(2*hOpe+2*wOpe) if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Estimated hydraulic diameter of the opening - 4*A/Perimeter";
- constant Modelica.Units.SI.ReynoldsNumber REtrans=30 if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Assumed Reynolds number at transition";
- constant Modelica.Units.SI.DynamicViscosity VItrans=0.0000181625 if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Assumed dynamic viscosity of air at transition";
+ if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Pressure difference where laminar and turbulent flow relation coincide for large cavities"
+ annotation (Dialog(tab="Advanced",group="Door model regularisation"));
+ parameter Modelica.Units.SI.MassFlowRate MFtrans=(hOpe*wOpe)*VItrans*REtrans/DOpe if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Recommended massflowrate used for reguralisation"
+ annotation (Dialog(tab="Advanced",group="Door model regularisation"));
+ parameter Modelica.Units.SI.Length DOpe=4*hOpe*wOpe/(2*hOpe+2*wOpe) if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Estimated hydraulic diameter of the opening - 4*A/Perimeter"
+ annotation (Dialog(tab="Advanced",group="Door model regularisation"));
+ constant Modelica.Units.SI.ReynoldsNumber REtrans=30 if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Assumed Reynolds number at transition"
+ annotation (Dialog(tab="Advanced",group="Door model regularisation"));
+ constant Modelica.Units.SI.DynamicViscosity VItrans=0.0000181625 if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts "Assumed dynamic viscosity of air at transition"
+ annotation (Dialog(tab="Advanced",group="Door model regularisation"));
final parameter Medium.ThermodynamicState state_default=Medium.setState_pTX(
T=Medium.T_default,
@@ -151,7 +154,7 @@ model CrackOrOperableDoor
hOpe=hOpe,
dpCloRat=dpCloRat,
LClo=LClo,
- vZer=MFtrans/(rho_default*doo.wOpe*doo.hOpe))
+ vZer=MFtrans/(rho_default*doo.wOpe*doo.hOpe)/1000)
if useDoor and interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts annotation (
Placement(visible = true, transformation(origin={-2,0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
IDEAS.Fluid.Sources.Boundary_pT bou(
@@ -165,8 +168,7 @@ model CrackOrOperableDoor
"Door constantly opened" annotation (
Placement(visible = true, transformation(origin = {-54, -14}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
- parameter SI.Angle inc=Modelica.Constants.pi/2
- "inclination angle (vertical=pi/2)";
+
initial equation
assert( not (interZonalAirFlowType <> IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts and useDoor and use_y),
"In " +getInstanceName() + ": Cannot use a controllable door unless interZonalAirFlowType == TwoPorts.");
diff --git a/IDEAS/Buildings/Components/Examples/CavityInternalCeiling.mo b/IDEAS/Buildings/Components/Examples/CavityInternalCeiling.mo
new file mode 100644
index 000000000..6890a49a3
--- /dev/null
+++ b/IDEAS/Buildings/Components/Examples/CavityInternalCeiling.mo
@@ -0,0 +1,43 @@
+within IDEAS.Buildings.Components.Examples;
+model CavityInternalCeiling
+ "Illustration of an internal ceiling with an operable cavity"
+ extends IDEAS.Buildings.Examples.ZoneExample(
+ sim( interZonalAirFlowType = IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts),internalWall(
+ redeclare parameter
+ IDEAS.Buildings.Validation.Data.Constructions.LightRoof
+ constructionType,
+ incOpt=3, hasCavity = true),
+ zone1(hFloor=zone.hFloor + zone.hZone + 0.15));
+equation
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
+ coordinateSystem(preserveAspectRatio=false)),
+ experiment(
+ StopTime=108000,
+ Interval=720,
+ Tolerance=1e-06,
+ __Dymola_Algorithm="Dassl"),
+ __Dymola_Commands(file="Resources/Scripts/Dymola/Buildings/Components/Examples/CavityInternalCeiling.mos"
+ "Simulate and plot"),
+ Documentation(info="
+
+This example contains an example use of a controllable cavity in an internal wall. Note that it requires TwoPorts interzonal air flow.
+
+", revisions="
+
+-
+February 05 2025, Klaas De Jonge
+First implementation.
+
+
+"),
+ __Dymola_experimentSetupOutput,
+ __Dymola_experimentFlags(
+ Advanced(
+ EvaluateAlsoTop=false,
+ GenerateAnalyticJacobian=true,
+ OutputModelicaCode=false),
+ Evaluate=true,
+ OutputCPUtime=true,
+ OutputFlatModelica=false));
+end CavityInternalCeiling;
diff --git a/IDEAS/Buildings/Components/Examples/TwoStoreyBoxes.mo b/IDEAS/Buildings/Components/Examples/TwoStoreyBoxes.mo
index 3eda9a495..f7eb8b797 100644
--- a/IDEAS/Buildings/Components/Examples/TwoStoreyBoxes.mo
+++ b/IDEAS/Buildings/Components/Examples/TwoStoreyBoxes.mo
@@ -5,7 +5,7 @@ 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,
+ hFloor=5.25,
T_start=291.15,
bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall,
diff --git a/IDEAS/Buildings/Components/Examples/package.order b/IDEAS/Buildings/Components/Examples/package.order
index 55cd02739..a53b134a1 100644
--- a/IDEAS/Buildings/Components/Examples/package.order
+++ b/IDEAS/Buildings/Components/Examples/package.order
@@ -2,6 +2,7 @@ AirflowBoxModel
BeamRadiationOnFloor
BuildingShadeExample
CavityInternalWall
+CavityInternalCeiling
CavityWalls
FacadeShadeExample
HorizontalFinExample
diff --git a/IDEAS/Buildings/Components/Interfaces/PartialSurface.mo b/IDEAS/Buildings/Components/Interfaces/PartialSurface.mo
index 2ad2570a9..e5c97b533 100644
--- a/IDEAS/Buildings/Components/Interfaces/PartialSurface.mo
+++ b/IDEAS/Buildings/Components/Interfaces/PartialSurface.mo
@@ -51,8 +51,8 @@ partial model PartialSurface "Partial model for building envelope component"
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"
+ 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, 0 for floors and ceilings" annotation(Evaluate=true);
+ 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"
annotation(Evaluate=true);
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";
@@ -102,7 +102,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}})));
diff --git a/IDEAS/Buildings/Components/InternalWall.mo b/IDEAS/Buildings/Components/InternalWall.mo
index 8002eb5a7..b55af96d6 100644
--- a/IDEAS/Buildings/Components/InternalWall.mo
+++ b/IDEAS/Buildings/Components/InternalWall.mo
@@ -3,7 +3,7 @@ within IDEAS.Buildings.Components;
model InternalWall "interior opaque wall between two zones"
extends IDEAS.Buildings.Components.Interfaces.PartialOpaqueSurface(
final use_custom_q50=true,
- custom_q50=if IDEAS.Utilities.Math.Functions.isAngle(inc, 0) or IDEAS.Utilities.Math.Functions.isAngle(inc, Modelica.Constants.pi) then 0 else 2,
+ custom_q50=if IDEAS.Utilities.Math.Functions.isAngle(incInt, 0) or IDEAS.Utilities.Math.Functions.isAngle(incInt, Modelica.Constants.pi) then 0 else 2,
final nWin=1,
dT_nominal_a=1,
E(y=if sim.computeConservationOfEnergy then layMul.E else 0),
@@ -12,10 +12,12 @@ model InternalWall "interior opaque wall between two zones"
final QTra_design(fixed=false),
q50_zone(v50_surf=0, nDum=4),
crackOrOperableDoor(
- h_a1=-0.5*hzone_b + 0.75*hVertical + hRelSurfBot_b,
- h_b2=-0.5*hzone_b + 0.25*hVertical + hRelSurfBot_b,
- hA=0.5*hzone_b - hRelSurfBot_b - hRelOpeBot_b,
- hB=0.5*hzone_a - hRelSurfBot_a - hRelOpeBot_a,
+ h_b1=-0.5*hzone_a + 0.75*hVertical + hRelSurfBot_a + hThCor,
+ h_a1=-0.5*hzone_b + 0.75*hVertical + hRelSurfBot_b - hThCor,
+ h_b2=-0.5*hzone_b + 0.25*hVertical + hRelSurfBot_b - hThCor,
+ h_a2=-0.5*hzone_a + 0.25*hVertical + hRelSurfBot_a + hThCor,
+ hA=0.5*hzone_b - hRelSurfBot_b - hRelOpeBot_b + hThCor,
+ hB=0.5*hzone_a - hRelSurfBot_a - hRelOpeBot_a - hThCor,
openDoorOnePort=true,
useDoor=hasCavity,
use_y=use_y_doo,
@@ -67,6 +69,8 @@ model InternalWall "interior opaque wall between two zones"
parameter Boolean use_y_doo = false
"=true, to enable controllable cavity (door) input"
annotation(Dialog(enable=hasCavity,group="Cavity or open door",tab="Advanced"));
+ parameter Boolean CheckVH=true "Enable to not check vertical heights, if an internal floor or element is connected to the same zone at both sides this should be set to false" annotation(Dialog(group="Vertical height check",tab="Airflow"));
+
IDEAS.Buildings.Components.Interfaces.ZoneBus propsBus_b(
redeclare final package Medium = Medium,
numIncAndAziInBus=sim.numIncAndAziInBus,
@@ -81,11 +85,11 @@ model InternalWall "interior opaque wall between two zones"
"Discharge coefficient of cavity"
annotation(Dialog(group="Cavity or open door",tab="Advanced"));
final parameter Real hzone_b(fixed=false);
- final parameter Real hfloor_b(fixed=false);
+ final parameter Real hAbs_floor_b(fixed=false);
parameter Modelica.Units.SI.Length hRelSurfBot_b=if
- IDEAS.Utilities.Math.Functions.isAngle(inc, IDEAS.Types.Tilt.Floor)
+ IDEAS.Utilities.Math.Functions.isAngle(incInt, IDEAS.Types.Tilt.Floor)
then hzone_b else 0
"Height above the zone floor at propsbus_b. Height where the surface starts. e.g. 0 for walls at floor level and floors. ";
Modelica.Blocks.Interfaces.RealInput y_doo(min = 0, max = 1) if use_y_doo and useDooOpe
@@ -104,7 +108,7 @@ model InternalWall "interior opaque wall between two zones"
"Boundary for bus b" annotation(
Placement(transformation(origin = {-48, -4}, extent = {{28, -76}, {8, -56}}, rotation = -0)));
protected
- parameter Real Ope_hvert = sin(inc)*h "Vertical opening height, height of the surface projected to the vertical, 0 for openings in horizontal floors and ceilings" annotation (
+ parameter Real Ope_hvert = sin(incInt)*h "Vertical opening height, height of the surface projected to the vertical, 0 for openings in horizontal floors and ceilings" annotation (
Dialog(enable=hasCavity,group="Cavity or open door"));
final parameter Real U_value = 1/(1/8 + sum(constructionType.mats.R) + 1/8) "Wall U-value";
constant Real r = 287 "Gas constant";
@@ -143,19 +147,34 @@ protected
"Thermal-only model for open door"
annotation (Placement(transformation(extent={{-10,30},{10,50}})));
final parameter Boolean useDooOpe = hasCavity and sim.interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts;
+ final parameter Real hThCor=cos(incInt)*sum(constructionType.mats.d)/2 "Vertically projected internal wall thickness";
initial equation
hzone_b = propsBus_b.hzone;
- hfloor_b = propsBus_b.hfloor;
+ hAbs_floor_b = propsBus_b.hfloor;
QTra_design=U_value*A*(TRefZon - TRef_b)
"TRefZon is the reference temperature for heat loss calculations of the zone connected to propsbus_a,
TRef_b is the reference temperature for heat loss calculations of the zone connected to propsBus_b";
+ if sim.interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None and hasCavity == true then
+ assert(IDEAS.Utilities.Math.Functions.isAngle(incInt, IDEAS.Types.Tilt.Wall), "In " + getInstanceName() + ": Cavities without airflow are only supported for vertical walls, but inc=" + String(incInt) + ". The model is not accurate.", level = AssertionLevel.warning);
+ end if;
+
+ if CheckVH and sim.interZonalAirFlowType <> IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None and IDEAS.Utilities.Math.Functions.isAngle(incInt,0) then
+ assert(hAbs_floor_a IDEAS.BoundaryConditions.Types.InterZonalAirFlow.None and IDEAS.Utilities.Math.Functions.isAngle(incInt,Modelica.Constants.pi) then
+ assert(hAbs_floor_a>hAbs_floor_b, getInstanceName()+ " is a floor, but the floor of the zone at probsbus_a (hfloor="+String(hAbs_floor_a) +") does not lie below the floor of zone at probsbus_b (hfloor="+String(hAbs_floor_b) +"), this should be fixed",level=AssertionLevel.error);
+ end if;
+
+ if CheckVH and sim.interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts then
+ assert(Modelica.Math.isEqual(hAbs_floor_a+hRelSurfBot_a+hThCor,hAbs_floor_b+hRelSurfBot_b-hThCor,0.15),"The absolute height of internal wall (centerline) "+ getInstanceName() +" does not match within a 15cm margin between both sides of the wall, check the input for the floor thickness and hfloor,hzone of the corresponding zones. At propsbus_a the absolute surface centerline height is "+String(hAbs_floor_a+hRelSurfBot_a+hThCor)+"m while at propsbus_b the absolute surface centerline height is "+String(hAbs_floor_b+hRelSurfBot_b-hThCor)+"m",level=AssertionLevel.error);
+ assert(Modelica.Math.isEqual(hAbs_floor_a+hRelSurfBot_a+hRelOpeBot_a+hThCor,hAbs_floor_b+hRelSurfBot_b+hRelOpeBot_b-hThCor,0.15),"The absolute height of the large cavity in internal wall "+ getInstanceName() +" does not match within a 15cm margin between both sides of the wall, check the input for the relative opening height, the floor thickness and hfloor,hzone of the corresponding zones. At propsbus_a the opening its absolute starting height is "+String(hAbs_floor_a+hRelSurfBot_a+hRelOpeBot_a+hThCor)+"m while at propsbus_b the opening its absolute starting height is "+String(hAbs_floor_b+hRelSurfBot_b+hRelOpeBot_b-hThCor)+"m",level=AssertionLevel.error);
+ end if;
+
+ assert(CheckVH and sim.interZonalAirFlowType == IDEAS.BoundaryConditions.Types.InterZonalAirFlow.TwoPorts,"Vertical height check was disabled for "+getInstanceName()+" but InterZonalAirFlow.TwoPorts is active",AssertionLevel.warning);
+
equation
connect(constOne.y, crackOrOperableDoor.y);
-//assert(IDEAS.Utilities.Math.Functions.isAngle(inc,0) and hAbs_floor_a>hfloor_b, getInstanceName()+ "is a ceiling, but the floor of the zone at probsbus_b lies above the floor of zone at probsbus_a, this is probably a mistake",level=AssertionLevel.warning);
-//assert(IDEAS.Utilities.Math.Functions.isAngle(inc,Modelica.Constants.pi) and hAbs_floor_aA excludes the surface area of the cavi