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=" + +"), + __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 ", revisions = "