From 0e7274afcbb2ac5d02afe81c10b76297b0aedf36 Mon Sep 17 00:00:00 2001 From: marcusfuchs Date: Thu, 10 Jul 2014 11:08:08 +0200 Subject: [PATCH] Initial commit of AixLib This corresponds to subversion revision 15030 --- AixLib/Building/Components.mo | 4309 +++++ AixLib/Building/HighOrder.mo | 14129 ++++++++++++++++ AixLib/Building/LowOrder.mo | 4719 ++++++ AixLib/Building/package.mo | 10 + AixLib/Building/package.order | 3 + AixLib/DataBase/Boiler.mo | 107 + AixLib/DataBase/Buildings.mo | 261 + AixLib/DataBase/Fans.mo | 42 + AixLib/DataBase/Profiles.mo | 144 + AixLib/DataBase/Pumps.mo | 57 + AixLib/DataBase/Radiators.mo | 584 + AixLib/DataBase/SolarThermal.mo | 129 + AixLib/DataBase/Surfaces.mo | 68 + AixLib/DataBase/Walls.mo | 2978 ++++ AixLib/DataBase/Weather.mo | 331 + AixLib/DataBase/WindowsDoors.mo | 151 + AixLib/DataBase/package.mo | 18 + AixLib/DataBase/package.order | 11 + AixLib/HVAC/BaseParameters.mo | 79 + AixLib/HVAC/Ductwork.mo | 622 + AixLib/HVAC/Fan.mo | 320 + AixLib/HVAC/HeatExchanger.mo | 1412 ++ AixLib/HVAC/HeatGeneration.mo | 1560 ++ AixLib/HVAC/HumidifierAndDehumidifier.mo | 384 + AixLib/HVAC/HydraulicResistances.mo | 42 + AixLib/HVAC/Interfaces.mo | 555 + AixLib/HVAC/OFD.mo | 1212 ++ AixLib/HVAC/Office.mo | 292 + AixLib/HVAC/Pipes.mo | 222 + AixLib/HVAC/Pumps.mo | 168 + AixLib/HVAC/Radiators.mo | 439 + AixLib/HVAC/Sensors.mo | 325 + AixLib/HVAC/Sources.mo | 406 + AixLib/HVAC/Storage.mo | 627 + AixLib/HVAC/Valves.mo | 123 + AixLib/HVAC/Volume.mo | 477 + AixLib/HVAC/package.mo | 10 + AixLib/HVAC/package.order | 18 + AixLib/Images/House/1OW_2IWl_2IWs_1Gr_Pa.png | Bin 0 -> 11148 bytes AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa.png | Bin 0 -> 10428 bytes .../House/2OW_1IWl_1IWs_1Gr_Pa_icon.png | Bin 0 -> 3466 bytes AixLib/Images/House/2OW_2IWl_1IWs_1Gr_Pa.png | Bin 0 -> 12123 bytes AixLib/Images/House/Attic_2Ro_5Rooms.png | Bin 0 -> 16183 bytes .../Images/House/GroundFloor_Hydraulics.png | Bin 0 -> 34942 bytes AixLib/Images/House/Groundfloor_5Rooms.png | Bin 0 -> 18919 bytes AixLib/Images/House/Groundfloor_icon.png | Bin 0 -> 6953 bytes AixLib/Images/House/Grundriss.PNG | Bin 0 -> 48472 bytes AixLib/Images/House/Hydraulik.png | Bin 0 -> 177093 bytes AixLib/Images/House/MFD_Attic.png | Bin 0 -> 15363 bytes AixLib/Images/House/MFD_FloorPlan_En.PNG | Bin 0 -> 20477 bytes AixLib/Images/House/OFD_FloorPlan_En.PNG | Bin 0 -> 32008 bytes AixLib/Images/House/OFD_GF_English.PNG | Bin 0 -> 13136 bytes AixLib/Images/House/OFD_Radiators_English.PNG | Bin 0 -> 38075 bytes AixLib/Images/House/OFD_SideView_En.PNG | Bin 0 -> 8710 bytes .../Images/House/OW1_2IWl_2IWs_1Pa_1At1Ro.png | Bin 0 -> 12486 bytes .../Images/House/OW2_1IWl_1IWs_1Pa_1At1Ro.png | Bin 0 -> 17253 bytes .../Images/House/OW2_2IWl_1IWs_1Pa_1At1Ro.png | Bin 0 -> 18392 bytes AixLib/Images/House/UpperFloor_Hydraulics.png | Bin 0 -> 37922 bytes AixLib/Images/House/Upperfloor_5Rooms.png | Bin 0 -> 17349 bytes AixLib/Images/House/Upperfloor_icon.png | Bin 0 -> 6641 bytes AixLib/Images/House/VoWo_Bath.png | Bin 0 -> 3596 bytes AixLib/Images/House/VoWo_Bedroom.png | Bin 0 -> 4001 bytes AixLib/Images/House/VoWo_Children.png | Bin 0 -> 3924 bytes AixLib/Images/House/VoWo_Corridor.png | Bin 0 -> 4287 bytes AixLib/Images/House/VoWo_Hydraulik.png | Bin 0 -> 33379 bytes AixLib/Images/House/VoWo_Hydraulik_H1.png | Bin 0 -> 29545 bytes AixLib/Images/House/VoWo_Hydraulik_H2.png | Bin 0 -> 93470 bytes AixLib/Images/House/VoWo_Hydraulik_Icon.png | Bin 0 -> 108788 bytes AixLib/Images/House/VoWo_Icon.png | Bin 0 -> 103320 bytes AixLib/Images/House/VoWo_Kitchen.png | Bin 0 -> 2983 bytes AixLib/Images/House/VoWo_Livingroom.png | Bin 0 -> 3981 bytes AixLib/Images/equations/equation-235E6PDM.png | Bin 0 -> 417 bytes AixLib/Images/equations/equation-fHlz87wz.png | Bin 0 -> 285 bytes AixLib/Images/equations/equation-vRK5Io7E.png | Bin 0 -> 1108 bytes AixLib/Images/equations/equation-zygE8L9u.png | Bin 0 -> 681 bytes AixLib/Images/stars0.png | Bin 0 -> 4280 bytes AixLib/Images/stars1.png | Bin 0 -> 4369 bytes AixLib/Images/stars2.png | Bin 0 -> 4639 bytes AixLib/Images/stars3.png | Bin 0 -> 4806 bytes AixLib/Images/stars4.png | Bin 0 -> 4867 bytes AixLib/Images/stars5.png | Bin 0 -> 4848 bytes .../HVAC_OFD_ExampleData/TemperaturesConv.mat | Bin 0 -> 276613 bytes .../HVAC_OFD_ExampleData/TemperaturesRad.mat | Bin 0 -> 276612 bytes .../UserProfilesHeatsimple.txt | 338 + ..._18599_SIA_Besprechung_Sitzung_Seminar.txt | 338 + .../TRY2010_12_Jahr_Modelica-Library.txt | 8763 ++++++++++ AixLib/UsersGuide.mo | 400 + AixLib/Utilities/Control.mo | 123 + AixLib/Utilities/Examples.mo | 252 + AixLib/Utilities/HeatTransfer.mo | 841 + AixLib/Utilities/Interfaces.mo | 371 + AixLib/Utilities/Logical.mo | 83 + AixLib/Utilities/Sensors.mo | 95 + AixLib/Utilities/Sources.mo | 692 + AixLib/Utilities/package.mo | 21 + AixLib/Utilities/package.order | 7 + AixLib/package.mo | 13 + AixLib/package.order | 5 + 98 files changed, 49686 insertions(+) create mode 100644 AixLib/Building/Components.mo create mode 100644 AixLib/Building/HighOrder.mo create mode 100644 AixLib/Building/LowOrder.mo create mode 100644 AixLib/Building/package.mo create mode 100644 AixLib/Building/package.order create mode 100644 AixLib/DataBase/Boiler.mo create mode 100644 AixLib/DataBase/Buildings.mo create mode 100644 AixLib/DataBase/Fans.mo create mode 100644 AixLib/DataBase/Profiles.mo create mode 100644 AixLib/DataBase/Pumps.mo create mode 100644 AixLib/DataBase/Radiators.mo create mode 100644 AixLib/DataBase/SolarThermal.mo create mode 100644 AixLib/DataBase/Surfaces.mo create mode 100644 AixLib/DataBase/Walls.mo create mode 100644 AixLib/DataBase/Weather.mo create mode 100644 AixLib/DataBase/WindowsDoors.mo create mode 100644 AixLib/DataBase/package.mo create mode 100644 AixLib/DataBase/package.order create mode 100644 AixLib/HVAC/BaseParameters.mo create mode 100644 AixLib/HVAC/Ductwork.mo create mode 100644 AixLib/HVAC/Fan.mo create mode 100644 AixLib/HVAC/HeatExchanger.mo create mode 100644 AixLib/HVAC/HeatGeneration.mo create mode 100644 AixLib/HVAC/HumidifierAndDehumidifier.mo create mode 100644 AixLib/HVAC/HydraulicResistances.mo create mode 100644 AixLib/HVAC/Interfaces.mo create mode 100644 AixLib/HVAC/OFD.mo create mode 100644 AixLib/HVAC/Office.mo create mode 100644 AixLib/HVAC/Pipes.mo create mode 100644 AixLib/HVAC/Pumps.mo create mode 100644 AixLib/HVAC/Radiators.mo create mode 100644 AixLib/HVAC/Sensors.mo create mode 100644 AixLib/HVAC/Sources.mo create mode 100644 AixLib/HVAC/Storage.mo create mode 100644 AixLib/HVAC/Valves.mo create mode 100644 AixLib/HVAC/Volume.mo create mode 100644 AixLib/HVAC/package.mo create mode 100644 AixLib/HVAC/package.order create mode 100644 AixLib/Images/House/1OW_2IWl_2IWs_1Gr_Pa.png create mode 100644 AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa.png create mode 100644 AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa_icon.png create mode 100644 AixLib/Images/House/2OW_2IWl_1IWs_1Gr_Pa.png create mode 100644 AixLib/Images/House/Attic_2Ro_5Rooms.png create mode 100644 AixLib/Images/House/GroundFloor_Hydraulics.png create mode 100644 AixLib/Images/House/Groundfloor_5Rooms.png create mode 100644 AixLib/Images/House/Groundfloor_icon.png create mode 100644 AixLib/Images/House/Grundriss.PNG create mode 100644 AixLib/Images/House/Hydraulik.png create mode 100644 AixLib/Images/House/MFD_Attic.png create mode 100644 AixLib/Images/House/MFD_FloorPlan_En.PNG create mode 100644 AixLib/Images/House/OFD_FloorPlan_En.PNG create mode 100644 AixLib/Images/House/OFD_GF_English.PNG create mode 100644 AixLib/Images/House/OFD_Radiators_English.PNG create mode 100644 AixLib/Images/House/OFD_SideView_En.PNG create mode 100644 AixLib/Images/House/OW1_2IWl_2IWs_1Pa_1At1Ro.png create mode 100644 AixLib/Images/House/OW2_1IWl_1IWs_1Pa_1At1Ro.png create mode 100644 AixLib/Images/House/OW2_2IWl_1IWs_1Pa_1At1Ro.png create mode 100644 AixLib/Images/House/UpperFloor_Hydraulics.png create mode 100644 AixLib/Images/House/Upperfloor_5Rooms.png create mode 100644 AixLib/Images/House/Upperfloor_icon.png create mode 100644 AixLib/Images/House/VoWo_Bath.png create mode 100644 AixLib/Images/House/VoWo_Bedroom.png create mode 100644 AixLib/Images/House/VoWo_Children.png create mode 100644 AixLib/Images/House/VoWo_Corridor.png create mode 100644 AixLib/Images/House/VoWo_Hydraulik.png create mode 100644 AixLib/Images/House/VoWo_Hydraulik_H1.png create mode 100644 AixLib/Images/House/VoWo_Hydraulik_H2.png create mode 100644 AixLib/Images/House/VoWo_Hydraulik_Icon.png create mode 100644 AixLib/Images/House/VoWo_Icon.png create mode 100644 AixLib/Images/House/VoWo_Kitchen.png create mode 100644 AixLib/Images/House/VoWo_Livingroom.png create mode 100644 AixLib/Images/equations/equation-235E6PDM.png create mode 100644 AixLib/Images/equations/equation-fHlz87wz.png create mode 100644 AixLib/Images/equations/equation-vRK5Io7E.png create mode 100644 AixLib/Images/equations/equation-zygE8L9u.png create mode 100644 AixLib/Images/stars0.png create mode 100644 AixLib/Images/stars1.png create mode 100644 AixLib/Images/stars2.png create mode 100644 AixLib/Images/stars3.png create mode 100644 AixLib/Images/stars4.png create mode 100644 AixLib/Images/stars5.png create mode 100644 AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesConv.mat create mode 100644 AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesRad.mat create mode 100644 AixLib/Resources/LowOrder_ExampleData/UserProfilesHeatsimple.txt create mode 100644 AixLib/Resources/LowOrder_ExampleData/UserProfiles_18599_SIA_Besprechung_Sitzung_Seminar.txt create mode 100644 AixLib/Resources/WeatherData/TRY2010_12_Jahr_Modelica-Library.txt create mode 100644 AixLib/UsersGuide.mo create mode 100644 AixLib/Utilities/Control.mo create mode 100644 AixLib/Utilities/Examples.mo create mode 100644 AixLib/Utilities/HeatTransfer.mo create mode 100644 AixLib/Utilities/Interfaces.mo create mode 100644 AixLib/Utilities/Logical.mo create mode 100644 AixLib/Utilities/Sensors.mo create mode 100644 AixLib/Utilities/Sources.mo create mode 100644 AixLib/Utilities/package.mo create mode 100644 AixLib/Utilities/package.order create mode 100644 AixLib/package.mo create mode 100644 AixLib/package.order diff --git a/AixLib/Building/Components.mo b/AixLib/Building/Components.mo new file mode 100644 index 0000000000..5d0a859dd0 --- /dev/null +++ b/AixLib/Building/Components.mo @@ -0,0 +1,4309 @@ +within AixLib.Building; +package Components "collection of basic components" + extends Modelica.Icons.Package; + + package DryAir "Models concerning dry air masses" + extends Modelica.Icons.Package; + + model Airload "Air volume" + parameter Modelica.SIunits.Density rho=1.19 "Density of air"; + parameter Modelica.SIunits.SpecificHeatCapacity c=1007 + "Specific heat capacity of air"; + parameter Modelica.SIunits.Volume V=48.0 "Volume of the room"; + Modelica.SIunits.Temperature T(start=293.15, displayUnit="degC") + "Temperature of airload"; + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port + annotation (Placement(transformation(extent={{-104,-24},{-76,4}}), + iconTransformation(extent={{-100,-30},{-80,-10}}))); + protected + parameter Modelica.SIunits.Mass m = rho*V; + + equation + T = port.T; + m * c* der(T) = port.Q_flow; + + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-28,14},{32,-52}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Air")}), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-30,16},{30,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Air")}), + Window( + x=0.25, + y=0.09, + width=0.6, + height=0.6), + Documentation(revisions=" +

+", + info=" +

Overview

+

The Airload model represents a heat capacity consisting of air. It is described by its volume, density and specific heat capacity.

+

Level of Development

+

+

Example Results

+

AixLib.Building.Components.Examples.DryAir.DryAir_test

+")); + end Airload; + + model VarAirExchange "Heat flow caused by air exchange" + extends Modelica.Thermal.HeatTransfer.Interfaces.Element1D; + + parameter Modelica.SIunits.Volume V=50 "Volume of the room"; + parameter Modelica.SIunits.SpecificHeatCapacity c=1000 + "Specific heat capacity of air"; + parameter Modelica.SIunits.Density rho=1.25 "Air density"; + + Modelica.Blocks.Interfaces.RealInput InPort1 + annotation (Placement(transformation(extent={{-100,-54},{-80,-74}}, + rotation=0))); + equation + if cardinality( InPort1)<1 then + InPort1=0; + end if; + port_a.Q_flow = InPort1*V*c*rho*(port_a.T - port_b.T)/3600; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,-58},{30,-72},{-22,-68},{-16,-60},{-68,-52},{-30,-80}, + {-24,-74},{46,-74},{60,-58}}, + lineColor={0,0,0}, + smooth=Smooth.Bezier, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-30,16},{30,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Air"), + Polygon( + points={{-58,22},{-28,36},{24,32},{18,24},{70,16},{32,44},{26,38}, + {-44,38},{-58,22}}, + lineColor={0,0,0}, + smooth=Smooth.Bezier, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Window( + x=0.4, + y=0.4, + width=0.6, + height=0.6), + Documentation(info=" +

Overview

+

The VarAirExchange model describes heat transfer by air exchange (e.g. due to opening a window). It needs the air exchange rate (in \"h^(-1)\"/) as input value.

+

Level of Development

+

+

Example Results

+

AixLib.Building.Components.Examples.DryAir.DryAir_test

+", + revisions=" +

+"), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,-58},{30,-72},{-22,-68},{-16,-60},{-68,-52},{-30,-80}, + {-24,-74},{46,-74},{60,-58}}, + lineColor={0,0,0}, + smooth=Smooth.Bezier, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-30,16},{30,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Air"), + Polygon( + points={{-58,22},{-28,36},{24,32},{18,24},{70,16},{32,44},{26, + 38},{-44,38},{-58,22}}, + lineColor={0,0,0}, + smooth=Smooth.Bezier, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + DymolaStoredErrors); + end VarAirExchange; + + model InfiltrationRate_DIN12831 + "Heat flow caused by infiltration after european standard DIN EN 12831" + extends Modelica.Thermal.HeatTransfer.Interfaces.Element1D; + + parameter Modelica.SIunits.Volume room_V=50 "Volume of the room"; + parameter Real n50(unit="h-1") = 4 + "Air exchange rate at 50 Pa pressure difference"; + parameter Real e=0.03 "Coefficient of windshield"; + parameter Real eps=1.0 "Coefficient of height"; + parameter Modelica.SIunits.SpecificHeatCapacity c=1000 + "Specific heat capacity of air"; + parameter Modelica.SIunits.Density rho=1.25 "Air density"; + protected + parameter Real InfiltrationRate = 2*n50*e*eps; + + equation + port_a.Q_flow = InfiltrationRate*room_V*c*rho*(port_a.T - port_b.T)/3600; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-30,-12},{30,-78}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString= + "Air"), + Text( + extent={{-76,26},{78,-8}}, + lineColor={0,0,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + textString="DIN 12381")}), + Window( + x=0.4, + y=0.4, + width=0.6, + height=0.6), + Documentation(info=" +

Overview

+

The InfiltrationRate model describes heat and mass transport by infiltration.

+

Level of Development

+

+

Concept

+

Air exchange coefficients at 50 Pa pressure difference between ambience and room air:

+ + + + + + + + + + + + + + + + + + +

Dwelling type

highly air tight

medium air tight

low air tight

one-family dwelling

< 4

4 - 10

> 10

multi-family dwelling/other

< 2

2 - 5

> 5

+

Reference values for air shielding value e:

+ + + + + + + + + + + + + + + + + + + + + + + + +

heated room without

facade with openings

exposed to wind

heated room with

one facade with openings

exposed to wind

heated room with more than

one facade with openings

exposed to wind

no shielding

0

0.03

0.05

moderate shielding

0

0.02

0.03

well shielded

0

0.01

0.02

+

Reference values for height correction value ε:

+ + + + + + + + + + + + + + + + +

Height of room


ε

0 - 10 m

1

10 - 30 m

1.2

> 30 m

1.5

+

References

+

DIN EN 12831

+

Example Results

+

AixLib.Building.Components.Examples.DryAir.DryAir_test

+", + revisions=" + +"), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-30,16},{30,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString= + "Air")}), + DymolaStoredErrors); + end InfiltrationRate_DIN12831; + + model DynamicVentilation + "Dynamic ventilation to ventilate away the solar gains" + parameter Modelica.SIunits.Temperature HeatingLimit = 285.15 + "Outside temperature at which the heating activates"; + parameter Real Max_VR = 200 "Maximal ventilation rate"; + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature"; + parameter Modelica.SIunits.Temperature Tset = 295.15 "set temperature"; + VarAirExchange varAirExchange + annotation (Placement(transformation(extent={{36,-20},{62,4}}))); + Utilities.Control.PITemp pITemp( + h=0, + l=-Max_VR, + PI(controllerType=Modelica.Blocks.Types.SimpleController.PI)) + annotation (Placement(transformation(extent={{-22,26},{-2,46}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_inside + annotation (Placement(transformation(extent={{84,-20},{104,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_outside + annotation (Placement(transformation(extent={{-106,-20},{-86,0}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Sensor_Toutside + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-90,12}))); + Modelica.Blocks.Logical.GreaterThreshold Higher_HeatingLimit(threshold= + HeatingLimit) + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + Modelica.Blocks.Sources.Constant Input_Tset(k=Tset) + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,90}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-60,90}))); + Modelica.Blocks.Math.MultiSum multiSum(nu=2) + annotation (Placement(transformation(extent={{-40,68},{-28,80}}))); + Modelica.Blocks.Sources.Constant Source_Tdiff(k=Diff_toTempset) + annotation (Placement(transformation(extent={{-80,46},{-60,66}}))); + Modelica.Blocks.Math.Gain Inverter(k=-1) + annotation (Placement(transformation(extent={{8,30},{20,42}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Sensor_Tinside + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={14,-80}))); + Modelica.Blocks.Logical.And Colder_and_HeatingLimit + annotation (Placement(transformation(extent={{-46,28},{-32,42}}))); + Modelica.Blocks.Logical.Less less + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + equation + connect(port_outside, Sensor_Toutside.port) annotation (Line( + points={{-96,-10},{-96,-4},{-90,-4},{-90,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(port_inside, pITemp.Therm1) annotation (Line( + points={{94,-10},{94,27},{-18,27}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Sensor_Toutside.T, Higher_HeatingLimit.u) annotation (Line( + points={{-90,22},{-90,30},{-82,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(multiSum.y, pITemp.soll) annotation (Line( + points={{-26.98,74},{-22,74},{-22,45},{-20,45}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_Tdiff.y, multiSum.u[1]) annotation (Line( + points={{-59,56},{-50,56},{-50,76.1},{-40,76.1}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(pITemp.y, Inverter.u) annotation (Line( + points={{-3,36},{6.8,36}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Inverter.y, varAirExchange.InPort1) annotation (Line( + points={{20.6,36},{24,36},{24,-15.68},{37.3,-15.68}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Input_Tset.y, multiSum.u[2]) annotation (Line( + points={{-59,90},{-54,90},{-54,88},{-50,88},{-50,71.9},{-40,71.9}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Sensor_Tinside.port, port_inside) annotation (Line( + points={{24,-80},{94,-80},{94,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Higher_HeatingLimit.y, Colder_and_HeatingLimit.u1) annotation (Line( + points={{-59,30},{-52,30},{-52,35},{-47.4,35}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(Colder_and_HeatingLimit.y, pITemp.onOff) annotation (Line( + points={{-31.3,35},{-24,35},{-24,31},{-21,31}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(less.u2, Sensor_Tinside.T) annotation (Line( + points={{-82,-58},{-100,-58},{-100,-80},{4,-80}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Sensor_Toutside.T, less.u1) annotation (Line( + points={{-90,22},{-100,22},{-100,-50},{-82,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(less.y, Colder_and_HeatingLimit.u2) annotation (Line( + points={{-59,-50},{-52,-50},{-52,29.4},{-47.4,29.4}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(port_outside, varAirExchange.port_a) annotation (Line( + points={{-96,-10},{-96,-8},{36,-8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(varAirExchange.port_b, port_inside) annotation (Line( + points={{62,-8},{94,-8},{94,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics), + Icon(graphics={ + Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid)}), + Documentation(revisions=" + +", info=" +

Overview

+

This model ventilates the solar gains away.

+

Level of Development

+

+

Concept

+

The model is used for simulations of heating periods. The outside temperature can be so high, that the heating system shuts down and the temperature in the room rises too high.

+

When the outside temperature rises above the heating limit, the model is activated and tries to lower the temperature under the set temperature of the room plus 2K.

+

Furthermore the model is only activated when the outdside temperature lower is than the inside temeperature.

+

The maximum ventilation rate can be adjusted according to the type of building. You can try to set it really high, e.g. 200 1/h, in order to exhaust the potential of this type of ventilation for cooling the rooms.

+

Example Results

+

AixLib.Building.Components.Examples.DryAir.DryAir_test

+")); + end DynamicVentilation; + end DryAir; + + package Sources + extends Modelica.Icons.Package; + + package InternalGains + "Models for humans, maschines, light and other heat sources" + extends Modelica.Icons.Package; + + package Humans + extends Modelica.Icons.Package; + + model HumanSensibleHeat_VDI2078 + "Model for sensible heat output after VDI 2078 " + // Number of Persons + parameter Integer ActivityType = 2 "Physical activity" + annotation(Dialog( compact = true, descriptionLabel = true), choices(choice=2 "light", choice = 3 + "moderate", choice = 4 "heavy ", radioButtons = true)); + parameter Real NrPeople = 1.0 "Number of people in the room" annotation(Dialog(descriptionLabel = true)); + parameter Real RatioConvectiveHeat = 0.5 + "Ratio of convective heat from overall heat output" annotation(Dialog( descriptionLabel = true)); + protected + parameter Modelica.SIunits.Area SurfaceArea_Human=2; + parameter Real Emissivity_Human = 0.98; + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow ConvectiveHeat(T_ref=T0) + annotation (Placement(transformation(extent={{18,20},{42,44}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow RadiativeHeat(T_ref=T0) + annotation (Placement(transformation(extent={{18,-20},{42,4}}))); + Modelica.Blocks.Tables.CombiTable1D HeatOutput(table=[10,100,125,155; 18,100,125, + 155; 20,95,115,140; 22,90,105,120; 23,85,100,115; 24,75,95,110; 25,75,85, + 105; 26,70,85,95; 35,70,85,95], + smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments, + tableOnFile=false, + columns={ActivityType}) + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + public + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ConvHeat + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + Utilities.HeatTransfer.HeatToStar_Avar RadiationConvertor(eps= + Emissivity_Human) annotation (Placement(transformation( + extent={{48,-22},{72,2}}))); + Utilities.Interfaces.Star RadHeat annotation (Placement( + transformation(extent={{80,-20},{100,0}}))); + Modelica.Blocks.Math.MultiProduct productHeatOutput(nu=2) + annotation (Placement(transformation(extent={{-24,10},{-4,30}}))); + public + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a TRoom + "Air temperature in room" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-90,64}))); + Modelica.Blocks.Math.UnitConversions.To_degC to_degC + annotation (Placement(transformation(extent={{-82,46},{-72,56}}))); + Modelica.Blocks.Interfaces.RealInput Schedule annotation (Placement( + transformation(extent={{-120,-40},{-80,0}}), iconTransformation( + extent={{-102,-22},{-80,0}}))); + Modelica.Blocks.Math.Gain Nr_People(k=NrPeople) + annotation (Placement(transformation(extent={{-66,-26},{-54,-14}}))); + Modelica.Blocks.Math.Gain SurfaceArea_People(k=SurfaceArea_Human) + annotation (Placement(transformation(extent={{-16,-56},{-4,-44}}))); + parameter Modelica.SIunits.Temperature T0= + Modelica.SIunits.Conversions.from_degC(22) "Initial temperature"; + Modelica.Blocks.Nonlinear.Limiter limiter(uMax=1e+23, uMin=1e-4) + annotation (Placement(transformation(extent={{8,-60},{28,-40}}))); + Modelica.Blocks.Math.Gain gain(k=RatioConvectiveHeat) + annotation (Placement(transformation(extent={{6,28},{14,36}}))); + Modelica.Blocks.Math.Gain gain1(k=1 - RatioConvectiveHeat) + annotation (Placement(transformation(extent={{6,-12},{14,-4}}))); + equation + connect(ConvectiveHeat.port, ConvHeat) annotation (Line( + points={{42,32},{42,50},{90,50}}, + color={191,0,0}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(RadiativeHeat.port, RadiationConvertor.Therm) annotation (Line( + points={{42,-8},{44,-8},{44,-12},{48,-12},{48,-10},{48.96,-10}}, + color={191,0,0}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(RadiationConvertor.Star, RadHeat) + annotation (Line( + points={{70.92,-10},{90,-10}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(TRoom, temperatureSensor.port) annotation (Line( + points={{-90,90},{-90,74}}, + color={191,0,0}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(temperatureSensor.T, to_degC.u) annotation (Line( + points={{-90,54},{-84,54},{-84,52},{-83,51}}, + color={0,0,127}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(to_degC.y, HeatOutput.u[1]) annotation (Line( + points={{-71.5,51},{-67.75,51},{-67.75,50},{-62,50}}, + color={0,0,127}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(HeatOutput.y[1], productHeatOutput.u[1]) annotation (Line( + points={{-39,50},{-32,50},{-32,23.5},{-24,23.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Schedule, Nr_People.u) annotation (Line( + points={{-100,-20},{-67.2,-20}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Nr_People.y, productHeatOutput.u[2]) annotation (Line( + points={{-53.4,-20},{-32,-20},{-32,16.5},{-24,16.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Nr_People.y, SurfaceArea_People.u) annotation (Line( + points={{-53.4,-20},{-32,-20},{-32,-50},{-17.2,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SurfaceArea_People.y, limiter.u) annotation (Line( + points={{-3.4,-50},{6,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(limiter.y, RadiationConvertor.A) annotation (Line( + points={{29,-50},{44,-50},{44,16},{60,16},{60,0.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gain.y, ConvectiveHeat.Q_flow) annotation (Line( + points={{14.4,32},{18,32}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gain1.y, RadiativeHeat.Q_flow) annotation (Line( + points={{14.4,-8},{18,-8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain.u) annotation (Line( + points={{-2.3,20},{2,20},{2,32},{5.2,32}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain1.u) annotation (Line( + points={{-2.3,20},{2,20},{2,-8},{5.2,-8}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Icon(graphics={ + Ellipse( + extent={{-36,98},{36,26}}, + lineColor={255,213,170}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-48,20},{54,-94}}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-40,-2},{44,-44}}, + lineColor={255,255,255}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid, + textString="ERC"), + Ellipse( + extent={{-24,80},{-14,70}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{10,80},{20,70}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{-18,54},{-16,48},{-10,44},{-4,42},{2,42},{10,44},{16,48},{18, + 54}}, + smooth=Smooth.None, + color={0,0,0}, + thickness=1)}), Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics), + Documentation(info=" +

Overview

+

Model for heat ouput of a human according to VDI 2078 (Table A.1). The model only considers the dry heat emission and divides it into convective and radiative heat transmission.

+

Level of Development

+

+

Concept

+

It is possible to choose between several types of physical activity.

+

The heat output depends on the air temperature in the room where the activity takes place.

+

A schedule of the activity is also required as constant presence of people in a room is not realistic. The schedule describes the presence of only one person, and can take values from 0 to 1.

+

Assumptions

+

The surface for radiation exchange is computed from the number of persons in the room, which leads to a surface area of zero, when no one is present. In particular cases this might lead to an error as depending of the rest of the system a division by this surface will be introduced in the system of equations -> division by zero. For this reson a limitiation for the surface has been intoduced: a minimum of 1e-4 m2 and a maximum of 1e+23 m2 (only needed for a complete parametrization of the model).

+

References

+

VDI 2078: Calculation of cooling load and room temperatures of rooms and buildings (VDI Cooling Load Code of Practice) - March 2012

+

Example Results

+

AixLib.Building.Components.Examples.Sources.InternalGains.Humans

+

AixLib.Building.Components.Examples.Sources.InternalGains.OneOffice

+", revisions=" + +")); + end HumanSensibleHeat_VDI2078; + end Humans; + + package Machines + extends Modelica.Icons.Package; + + model Machines_DIN18599 + extends BaseClasses.PartialInternalGain; + + parameter Integer ActivityType=2 "Machine activity" + annotation(Dialog( compact = true, descriptionLabel = true), choices(choice=1 "low", choice = 2 "middle", choice = 3 "high", radioButtons = true)); + parameter Real NrPeople=1.0 "Number of people with machines" annotation(Dialog(descriptionLabel = true)); + parameter Modelica.SIunits.Area SurfaceArea_Machines=2 + "surface area of radiative heat source"; + parameter Real Emissivity_Machines=0.98; + protected + Modelica.Blocks.Tables.CombiTable1D HeatOutput( + smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments, + tableOnFile=false, + table=[1,50; 2,100; 3,150], + columns={2}) + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Modelica.Blocks.Math.MultiProduct productHeatOutput(nu=2) + annotation (Placement(transformation(extent={{-24,-10},{-4,10}}))); + public + Modelica.Blocks.Math.Gain Nr_People(k=NrPeople) + annotation (Placement(transformation(extent={{-60,-46},{-48,-34}}))); + Modelica.Blocks.Sources.Constant Activity(k=ActivityType) + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + Utilities.HeatTransfer.HeatToStar RadiationConvertor(eps= + Emissivity_Machines, A=SurfaceArea_Machines*NrPeople) + annotation (Placement(transformation(extent={{50,-70},{70,-50}}))); + equation + connect(HeatOutput.y[1], productHeatOutput.u[1]) annotation (Line( + points={{-39,50},{-32,50},{-32,3.5},{-24,3.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Nr_People.y, productHeatOutput.u[2]) annotation (Line( + points={{-47.4,-40},{-32,-40},{-32,-3.5},{-24,-3.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Schedule, Nr_People.u) annotation (Line( + points={{-100,0},{-85.6,0},{-85.6,-40},{-61.2,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Activity.y, HeatOutput.u[1]) annotation (Line( + points={{-69,50},{-62,50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(RadiationConvertor.Star, RadHeat) annotation (Line( + points={{69.1,-60},{90,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(RadiativeHeat.port, RadiationConvertor.Therm) annotation (Line( + points={{40,-10},{48,-10},{48,-60},{50.8,-60}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain.u) annotation (Line( + points={{-2.3,0},{0,0},{0,30},{3.2,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain1.u) annotation (Line( + points={{-2.3,0},{0,0},{0,-10},{3.2,-10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Icon(graphics={ + Text( + extent={{-40,-20},{44,-62}}, + lineColor={255,255,255}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid, + textString="ERC"), + Polygon( + points={{-90,-86},{-58,-42},{60,-42},{98,-86},{-90,-86}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-54,-48},{-46,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-42,-48},{-34,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-30,-48},{-22,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-18,-48},{-10,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-6,-48},{2,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{6,-48},{14,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{18,-48},{26,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{30,-48},{38,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{42,-48},{50,-54}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-62,-58},{-54,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-50,-58},{-42,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-38,-58},{-30,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-26,-58},{-18,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-14,-58},{-6,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-2,-58},{6,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{10,-58},{18,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{22,-58},{30,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{34,-58},{42,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{46,-58},{54,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{58,-58},{66,-64}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-72,-68},{-64,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-60,-68},{-52,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-48,-68},{-40,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-36,-68},{-28,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-24,-68},{-16,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-12,-68},{-4,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{0,-68},{8,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{12,-68},{20,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{24,-68},{32,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{36,-68},{44,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{48,-68},{56,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{60,-68},{68,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{72,-68},{80,-74}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-60,60},{60,-38}}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-56,56},{56,-34}}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Text( + extent={{-54,30},{58,-8}}, + lineColor={255,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="ERC")}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics), + Documentation(info=" +

Overview

+

Heat cource with convective and radiative component. The load is determined by a schedule and the type of activity.

+

Level of Development

+

+

Concept

+

The schedule sets the usage of the room by people. To set a higher number of people, a multiplier is given.

+

The schedule describes the presence of only one person, and can take values from 0 to 1.

+

The type of activity determines the load by a person in the room according to DIN 18599. The following values are provided:

+ + + + + + + + + + + + + + + + +

Activity Type

Heat Load [W]

1

50

2

100

3

150

+

References

+

DIN 18599

+

Example Results

+

AixLib.Building.Components.Examples.Sources.InternalGains.Machines

+

AixLib.Building.Components.Examples.Sources.InternalGains.OneOffice

+", revisions=" +

+")); + end Machines_DIN18599; + end Machines; + + package Lights + extends Modelica.Icons.Package; + + model Lights_relative "light heat source model" + extends BaseClasses.PartialInternalGain(ratioConv=0.5); + parameter Modelica.SIunits.Area RoomArea=20 "Area of room" annotation(Dialog( descriptionLabel = true)); + parameter Real LightingPower = 10 "Heating power of lighting in W/m2" + annotation(Dialog( descriptionLabel = true)); + parameter Modelica.SIunits.Area SurfaceArea_Lighting=1; + parameter Real Emissivity_Lighting = 0.98; + Modelica.Blocks.Sources.Constant MaxLighting(k=RoomArea*LightingPower) + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + Modelica.Blocks.Math.MultiProduct productHeatOutput(nu=2) + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Utilities.HeatTransfer.HeatToStar RadiationConvertor(A= + SurfaceArea_Lighting, eps=Emissivity_Lighting) + annotation (Placement(transformation(extent={{50,-70},{70,-50}}))); + equation + connect(MaxLighting.y,productHeatOutput. u[2]) + annotation (Line( + points={{-69,50},{-48,50},{-48,-3.5},{-40,-3.5}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Schedule,productHeatOutput. u[1]) annotation (Line( + points={{-100,0},{-76,0},{-76,-20},{-48,-20},{-48,-4},{-40,-4},{-40,3.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(RadiativeHeat.port, RadiationConvertor.Therm) annotation (Line( + points={{40,-10},{46,-10},{46,-60},{50.8,-60}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(RadiationConvertor.Star, RadHeat) annotation (Line( + points={{69.1,-60},{90,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain.u) annotation (Line( + points={{-18.3,0},{-8,0},{-8,30},{3.2,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(productHeatOutput.y, gain1.u) annotation (Line( + points={{-18.3,0},{-8,0},{-8,-10},{3.2,-10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Icon(graphics={ + Ellipse( + extent={{-52,72},{50,-40}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-26,-48},{22,-48}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-24,-56},{22,-56}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-24,-64},{22,-64}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-24,-72},{22,-72}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-28,-42},{-28,-80},{26,-80},{26,-42}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1)}), Documentation(revisions=" +

+", info=" +

Overview

+

Light heat source model. Maximum lighting can be given as input and be adjusted by a schedule input.

+

Level of Development

+

+

Known limitation

+

The parameter A cannot be set by default since other models must be able to implement their own equations for A.

+

The input signal can take values from 0 to 1, and is then multiplied with the maximum lighting power per square meter and the room area.

+

Example Results

+

AixLib.Building.Components.Examples.Sources.InternalGains.Lights

+

AixLib.Building.Components.Examples.Sources.InternalGains.OneOffice

+"), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics)); + end Lights_relative; + annotation (Icon(graphics), Documentation(info=" +

Simple model for internal gains through lights.

+")); + end Lights; + + package BaseClasses + extends Modelica.Icons.BasesPackage; + + partial model PartialInternalGain + "Partial model to build a heat source with convective and radiative component" + parameter Real ratioConv=0.6 "Ratio convective to total heat release" + annotation(Dialog( descriptionLabel = true)); + parameter Real emissivity=0.95 + "emissivity of radiative heat source surface"; + parameter Modelica.SIunits.Temperature T0= + Modelica.SIunits.Conversions.from_degC(22) "Initial temperature"; + + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow ConvectiveHeat(T_ref=T0) + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow RadiativeHeat(T_ref= + ratioConv) + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ConvHeat + "convective heat connector" annotation (Placement(transformation( + extent={{80,50},{100,70}}), iconTransformation(extent={{80,50}, + {100,70}}))); + Utilities.Interfaces.Star RadHeat "radiative heat connector" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}), + iconTransformation(extent={{80,-68},{100,-48}}))); + Modelica.Blocks.Interfaces.RealInput Schedule annotation (Placement( + transformation(extent={{-120,-20},{-80,20}}),iconTransformation(extent={{-100, + -10},{-80,10}}))); + Modelica.Blocks.Math.Gain gain(k=ratioConv) + annotation (Placement(transformation(extent={{4,26},{12,34}}))); + Modelica.Blocks.Math.Gain gain1(k=1 - ratioConv) + annotation (Placement(transformation(extent={{4,-14},{12,-6}}))); + equation + connect(ConvectiveHeat.port, ConvHeat) annotation (Line( + points={{40,30},{46,30},{46,60},{90,60}}, + color={191,0,0}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(gain.y, ConvectiveHeat.Q_flow) annotation (Line( + points={{12.4,30},{20,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gain1.y, RadiativeHeat.Q_flow) annotation (Line( + points={{12.4,-10},{20,-10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), + graphics), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Partial model to build a heat source with convective and radiative components. The parameter ratioConv determines the percentage of convective heat.

+

Level of Development

+

+")); + end PartialInternalGain; + end BaseClasses; + end InternalGains; + end Sources; + + package Walls "Wall models" + extends Modelica.Icons.Package; + + model Wall + "Simple wall model for outside and inside walls with windows and doors" + import BaseLib = AixLib.Utilities; + + //Type parameter + + parameter Boolean outside = true + "Choose if the wall is an outside or an inside wall" annotation(Dialog(group="General Wall Type Parameter",compact = true),choices(choice=true + "Outside Wall",choice=false "Inside Wall", radioButtons = true)); + + // general wall parameters + + parameter DataBase.Walls.WallBaseDataDefinition WallType= + DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() + "Choose an outside wall type from the database" + annotation (Dialog(group="Room Geometry"), choicesAllMatching=true); + + parameter Modelica.SIunits.Length wall_length=2 "Length of wall" + annotation(Dialog(group="Room Geometry")); + parameter Modelica.SIunits.Height wall_height=2 "Height of wall" + annotation(Dialog(group="Room Geometry")); + + // Surface parameters + parameter Real solar_absorptance=0.25 + "Solar absorptance coefficient of outside wall surface" annotation(Dialog(tab="Surface Parameters", group = "Outside surface", enable = outside)); + + parameter Integer Model = 1 + "Choose the model for calculation of heat convection at outside surface" + annotation(Dialog(tab = "Surface Parameters", group = "Outside surface", enable = outside, compact = true), choices(choice=1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 "Custom alpha",radioButtons = true)); + + parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_custom=25 + "Custom alpha for convection (just for manual selection, not recommended)" + annotation(Dialog(tab="Surface Parameters", group = "Outside surface", enable= Model == 3 and outside)); + parameter + DataBase.Surfaces.RoughnessForHT.PolynomialCoefficients_ASHRAEHandbook + surfaceType=DataBase.Surfaces.RoughnessForHT.Brick_RoughPlaster() + "Surface type of outside wall" annotation (Dialog( + tab="Surface Parameters", + group="Outside surface", + enable=Model == 2 and outside), choicesAllMatching=true); + + parameter Integer ISOrientation = 1 "Inside surface orientation" annotation(Dialog(tab = "Surface Parameters", group = "Inside surface", compact = true, descriptionLabel = true), choices(choice=1 + "vertical wall", choice = 2 "floor", + choice = 3 "ceiling",radioButtons = true)); + + // window parameters + parameter Boolean withWindow = false + "Choose if the wall has got a window (only outside walls)" annotation(Dialog( tab="Window", enable = outside)); + + parameter DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + WindowType=DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() + "Choose a window type from the database" annotation (Dialog(tab= + "Window", enable=withWindow and outside), choicesAllMatching=true); + parameter Modelica.SIunits.Area windowarea=2 "Area of window" annotation(Dialog( tab="Window", enable = withWindow and outside)); + + parameter Boolean withSunblind = false "enable support of sunblinding?" annotation(Dialog( tab="Window", enable = outside and withWindow)); + parameter Real Blinding=0 "blinding factor <=1" annotation(Dialog( tab="Window", enable = withWindow and outside and withSunblind)); + parameter Real Limit=180 + "minimum specific total solar radiation in W/m2 for blinding becoming active" + annotation(Dialog( tab="Window", enable = withWindow and outside and withSunblind)); + + // door parameters + parameter Boolean withDoor = false "Choose if the wall has got a door" annotation(Dialog(tab="Door")); + + parameter Modelica.SIunits.CoefficientOfHeatTransfer U_door=1.8 + "Thermal transmission coefficient of door" + annotation (Dialog(tab="Door", enable = withDoor)); + + parameter Modelica.SIunits.Emissivity eps_door = 0.9 + "Solar emissivity of door material" annotation (Dialog(tab="Door", enable = withDoor)); + + parameter Modelica.SIunits.Length door_height=2 annotation(Dialog(tab="Door", enable = withDoor)); + parameter Modelica.SIunits.Length door_width=1 annotation(Dialog( tab="Door", enable = withDoor)); + + // Calculation of clearance + + final parameter Modelica.SIunits.Area clearance= + if not (outside) and withDoor then door_height*door_width else + if outside and withDoor and withWindow then (windowarea + door_height*door_width) else + if outside and withWindow then windowarea else + if outside and withDoor then door_height*door_width else + 0 "Wall clearance"; + + // Initial temperature + + parameter Modelica.SIunits.Temperature T0 = Modelica.SIunits.Conversions.from_degC(20) + "Initial temperature" annotation(Dialog(tab="Advanced Parameters")); + + // COMPONENT PART + + public + BaseClasses.ConvNLayerClearanceStar Wall( + h=wall_height, + l=wall_length, + T0=T0, + clearance=clearance, + selectable=true, + eps=WallType.eps, + wallType=WallType, + surfaceOrientation=ISOrientation) "Wall" annotation (Placement( + transformation(extent={{-20,14},{2,34}}, rotation=0))); + + Utilities.HeatTransfer.SolarRadToHeat SolarAbsorption(coeff= + solar_absorptance, A=wall_height*wall_length - clearance) if outside + annotation (Placement(transformation( + origin={-39,89}, + extent={{-10,-10},{10,10}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort if + outside + annotation (Placement(transformation(extent={{-116,79},{-96,99}}, + rotation=0), iconTransformation(extent={{-36,100},{-16,120}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_outside + annotation (Placement(transformation(extent={{-108,-6},{-88,14}}, + rotation=0), iconTransformation(extent={{-31,-10},{-11,10}}))); + + Modelica.Blocks.Interfaces.RealInput WindSpeedPort if outside and (Model ==1 or Model ==2) + annotation (Placement(transformation(extent={{-113,54},{-93,74}}, + rotation=0), iconTransformation(extent={{-31,78},{-11,98}}))); + + Weather.Sunblind Sunblind( + n=1, + gsunblind={Blinding}, + Imax=Limit) if outside and withWindow and withSunblind + annotation (Placement(transformation(extent={{-44,-22},{-21,4}}))); + + WindowsDoors.Door insideDoor( + T0=T0, + door_area=door_height*door_width, + U=U_door*2, + eps=eps_door) if not (outside) and withDoor + annotation (Placement(transformation(extent={{-21,-102},{11,-70}}))); + WindowsDoors.WindowSimple windowSimple( + T0=T0, + windowarea=windowarea, + WindowType=WindowType) if outside and withWindow + annotation (Placement(transformation(extent={{-15,-48},{11,-22}}))); + Utilities.HeatTransfer.HeatConv_outside heatTransfer_Outside( + A=wall_length*wall_height - clearance, + Model=Model, + surfaceType=surfaceType, + alpha_custom=alpha_custom) if outside annotation ( + Placement(transformation(extent={{-47,48},{-27,68}}))); + + Utilities.Interfaces.Adaptors.HeatStarToComb heatStarToComb + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=180, + origin={69,-1}))); + Utilities.Interfaces.HeatStarComb thermStarComb_inside annotation ( + Placement(transformation(extent={{92,-10},{112,10}}), + iconTransformation(extent={{10,-10},{30,10}}))); + equation + // if outside and cardinality(WindSpeedPort) < 2 then + // WindSpeedPort = 3; + // end if; + + //****************************************************************** + // **********************standard connection************************ + //****************************************************************** + connect(Wall.Star, heatStarToComb.star) annotation (Line( + points={{0.9,30},{48,30},{48,4.8},{58.6,4.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Wall.port_b, heatStarToComb.therm) annotation (Line( + points={{0.9,23},{48,23},{48,-6.1},{58.9,-6.1}}, + color={191,0,0}, + smooth=Smooth.None)); + //****************************************************************** + // **********************standard connection for inside wall******** + //****************************************************************** + if not (outside) then + connect(Wall.port_a, port_outside) annotation (Line( + points={{-18.9,23},{-56.45,23},{-56.45,4},{-98,4}}, + color={191,0,0}, + smooth=Smooth.None)); + end if; + + //****************************************************************** + // ********************standard connection for outside wall********* + //****************************************************************** + + if (outside) then + connect(SolarRadiationPort, SolarAbsorption.solarRad_in) annotation (Line( + points={{-106,89},{-77,89},{-77,87},{-49.1,87}}, + color={255,128,0}, + smooth=Smooth.None)); + if Model == 1 or Model == 2 then + connect(WindSpeedPort, heatTransfer_Outside.WindSpeedPort) annotation (Line( + points={{-103,64},{-68,64},{-68,50.8},{-46.2,50.8}}, + color={0,0,127}, + smooth=Smooth.None)); + end if; + connect(heatTransfer_Outside.port_a, port_outside) annotation (Line( + points={{-47,58},{-56,58},{-56,4},{-98,4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatTransfer_Outside.port_b,Wall.port_a) annotation (Line( + points={{-27,58},{-24,58},{-24,23},{-18.9,23}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(SolarAbsorption.heatPort,Wall.port_a) annotation (Line( + points={{-30,87},{-26,87},{-26,84},{-18.9,84},{-18.9,23}}, + color={191,0,0}, + smooth=Smooth.None)); + + end if; + + //****************************************************************** + // *******standard connections for inside wall with door************ + //****************************************************************** + + if not (outside) and withDoor then + + connect(insideDoor.port_a, port_outside) annotation (Line( + points={{-19.4,-86},{-56,-86},{-56,4},{-98,4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(insideDoor.port_b, heatStarToComb.therm) annotation (Line( + points={{9.4,-86},{48,-86},{48,-6.1},{58.9,-6.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(insideDoor.Star, heatStarToComb.star) annotation (Line( + points={{9.4,-76.4},{48,-76.4},{48,4.8},{58.6,4.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + + end if; + + //****************************************************************** + // *******standard connections for outside wall with door************ + //****************************************************************** + + if (outside) and withDoor then + + connect(insideDoor.port_a, heatTransfer_Outside.port_b) annotation (Line( + points={{-19.4,-86},{-56,-86},{-56,24},{-24,24},{-24,58},{-27,58}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(insideDoor.port_b, heatStarToComb.therm) annotation (Line( + points={{9.4,-86},{48,-86},{48,-6.1},{58.9,-6.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(insideDoor.Star, heatStarToComb.star) annotation (Line( + points={{9.4,-76.4},{48,-76.4},{48,4.8},{58.6,4.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + + end if; + + //****************************************************************** + // ****standard connections for outside wall with window*********** + //****************************************************************** + + if outside and withWindow then + connect(windowSimple.Star, heatStarToComb.star) annotation (Line( + points={{9.7,-27.2},{48,-27.2},{48,4.8},{58.6,4.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(windowSimple.port_inside, heatStarToComb.therm) annotation (Line( + points={{9.7,-36.3},{48,-36.3},{48,-6.1},{58.9,-6.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(windowSimple.port_outside, port_outside) annotation (Line( + points={{-13.7,-36.3},{-56,-36.3},{-56,4},{-98,4}}, + color={191,0,0}, + smooth=Smooth.None)); + end if; + + //****************************************************************** + // **** connections for outside wall with window without sunblind**** + //****************************************************************** + + if outside and withWindow and not (withSunblind) then + + connect(windowSimple.solarRad_in, SolarRadiationPort) annotation (Line( + points={{-13.7,-27.2},{-81,-27.2},{-81,89},{-106,89}}, + color={255,128,0}, + smooth=Smooth.None)); + + end if; + + //****************************************************************** + // **** connections for outside wall with window and sunblind**** + //****************************************************************** + + if outside and withWindow and withSunblind then + connect(Sunblind.Rad_Out[1], windowSimple.solarRad_in) annotation (Line( + points={{-22.15,-7.7},{-18,-7.7},{-18,-27.2},{-13.7,-27.2}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Sunblind.Rad_In[1], SolarRadiationPort) annotation (Line( + points={{-42.85,-7.7},{-81,-7.7},{-81,89},{-106,89}}, + color={255,128,0}, + smooth=Smooth.None)); + end if; + + connect(heatStarToComb.thermStarComb, thermStarComb_inside) annotation ( + Line( + points={{78.4,-1.1},{78.4,-1.05},{102,-1.05},{102,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(port_outside, port_outside) annotation (Line( + points={{-98,4},{-98,4}}, + color={191,0,0}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-20,-120},{20,120}}, + grid={1,1}), graphics={ + Rectangle( + extent={{-16,120},{15,-60}}, + fillColor={215,215,215}, + fillPattern=FillPattern.Backward, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-16,-90},{15,-120}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Backward), + Rectangle( + extent={{-16,-51},{15,-92}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Backward, + visible=not ((withDoor))), + Rectangle( + extent={{-16,80},{15,20}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + visible= outside and withWindow, + lineColor={255,255,255}), + Line( + points={{-2,80},{-2,20}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{1,80},{1,20}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{1,77},{-2,77}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{1,23},{-2,23}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Ellipse( + extent={{-16,-60},{44,-120}}, + lineColor={0,0,0}, + startAngle=359, + endAngle=450, + visible= withDoor), + Rectangle( + extent={{-16,-60},{15,-90}}, + visible= withDoor, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{1,50},{-2,50}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{15,80},{15,20}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{-16,80},{-16,20}}, + color={0,0,0}, + smooth=Smooth.None, + visible=outside and withWindow), + Line( + points={{-16,-60},{-16,-90}}, + color={0,0,0}, + smooth=Smooth.None, + visible=withDoor), + Line( + points={{15,-60},{15,-90}}, + color={0,0,0}, + smooth=Smooth.None, + visible=withDoor), + Line( + points={{-16,-90},{15,-60}}, + color={0,0,0}, + smooth=Smooth.None, + visible=withDoor), + Line( + points={{-16,-60},{15,-90}}, + color={0,0,0}, + smooth=Smooth.None, + visible=withDoor)}), + Documentation(info=" +

Overview

+

Flexible Model for Inside Walls and Outside Walls.

+

Level of Development

+

+

Concept

+

The WallSimple model models

+ +

This model uses a HeatStarComb Connector for an easier connection of temperature and radiance inputs.

+

Assumptions

+ +

Have a closer look at the used models to get more information about the assumptions.

+

Example Results

+

AixLib.Building.Components.Examples.Walls.InsideWall

+", + revisions=" +

+")); + end Wall; + + package BaseClasses + extends Modelica.Icons.BasesPackage; + + class SimpleNLayer "Wall consisting of n layers" + + parameter Modelica.SIunits.Height h=3 "Height" + annotation (Dialog(group="Geometry")); + parameter Modelica.SIunits.Length l=4 "Length" + annotation (Dialog(group="Geometry")); + + parameter Integer n(min=1) = 8 "Number of layers" + annotation (Dialog(group="Structure of wall layers")); + parameter Modelica.SIunits.Thickness d[n]=fill(0.1, n) "Thickness" + annotation (Dialog(group="Structure of wall layers")); + parameter Modelica.SIunits.Density rho[n]=fill(1600, n) "Density" + annotation (Dialog(group="Structure of wall layers")); + parameter Modelica.SIunits.ThermalConductivity lambda[n]=fill(2.4, n) + "Thermal conductivity" + annotation (Dialog(group="Structure of wall layers")); + parameter Modelica.SIunits.SpecificHeatCapacity c[n]=fill(1000, n) + "Specific heat capacity" + annotation (Dialog(group="Structure of wall layers")); + + parameter Modelica.SIunits.Temperature T0=Modelica.SIunits.Conversions.from_degC(16) + "Initial temperature" annotation (Dialog(group="Thermal")); + + // 2n HeatConds + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatCondb[n](G=(h .* + l .* lambda) ./ (d/2)) annotation (Placement(transformation( + extent={{30,-28},{50,-8}}, rotation=0))); + + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatConda[n](G=h + .* l .* lambda ./ (d/2)) annotation (Placement(transformation( + extent={{-52,-28},{-32,-8}}, rotation=0))); + + // n Loads + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Load[n]( + T(start=fill(T0, n)), C=c .* rho .* h .* l .* d) + annotation (Placement(transformation(extent={{-10,-60},{10,-40}}, + rotation=0))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}), + iconTransformation(extent={{-100,-20},{-80,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b + annotation (Placement(transformation(extent={{80,-20},{100,0}}), + iconTransformation(extent={{80,-20},{100,0}}))); + equation + // connecting inner elements HeatCondb[i]--Load[i]--HeatConda[i] to n groups + for i in 1:n loop + connect(HeatConda[i].port_b, Load[i].port); + connect(Load[i].port,HeatCondb [i].port_a); + end for; + + // establishing n-1 connections of HeatCondb--Load--HeatConda groups + for i in 1:(n - 1) loop + connect(HeatCondb[i].port_b, HeatConda[i + 1].port_a); + end for; + + // connecting outmost elements to connectors: port_a--HeatCondb[1]...HeatConda[n]--port_b + connect(HeatConda[1].port_a, port_a); + connect(HeatCondb[n].port_b, port_b); + + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={Rectangle(extent={{-80,60},{80,-100}}, + lineColor={0,0,0})}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{-32,60},{32,-100}}, + lineColor={166,166,166}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={135,135,135}), + Rectangle( + extent={{-48,60},{-32,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={208,208,208}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-64,60},{-48,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-64,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{64,60},{80,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{32,60},{48,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={208,208,208}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{48,60},{64,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Text( + extent={{10,-36},{106,-110}}, + lineColor={0,0,0}, + textString="n")}), + Documentation(info=" +

Overview

+

The SimpleNLayer model represents a simple wall, consisting of n different layers.

+

Level of Development

+

+

Concept

+

There is one inner and one outer HeatPort-connector to simulate one-dimensional heat transfer through the wall and heat storage within the wall.

+

Attention: The first element in each vector represents the layer connected to HeatPort_a, the last element represents the layer connected to HeatPort_b.

+ +", revisions=" + +")); + end SimpleNLayer; + + model ConvNLayerClearanceStar + "Wall consisting of n layers, with convection on one surface and (window) clearance" + + parameter Modelica.SIunits.Height h=3 "Height" + annotation (Dialog(group="Geometry")); + parameter Modelica.SIunits.Length l=4 "Length" + annotation (Dialog(group="Geometry")); + parameter Modelica.SIunits.Area clearance=0 "Area of clearance" + annotation (Dialog(group="Geometry")); + + parameter Boolean selectable=false + "Determines if wall type is set manually (false) or by definitions (true)" + annotation(Dialog(group="Structure of wall layers")); + parameter DataBase.Walls.WallBaseDataDefinition wallType= + DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() "Type of wall" + annotation (Dialog(group="Structure of wall layers", enable= + selectable), choicesAllMatching=true); + parameter Integer n(min=1) = (if selectable then wallType.n else 8) + "Number of layers" + annotation (Dialog(group="Structure of wall layers",enable=not selectable)); + parameter Modelica.SIunits.Thickness d[n]=(if selectable then wallType.d else fill(0.1, n)) + "Thickness" + annotation (Dialog(group="Structure of wall layers",enable=not selectable)); + parameter Modelica.SIunits.Density rho[n]=(if selectable then wallType.rho else fill(1600, n)) + "Density" + annotation (Dialog(group="Structure of wall layers",enable=not selectable)); + parameter Modelica.SIunits.ThermalConductivity lambda[n]=(if selectable then wallType.lambda else fill(2.4, n)) + "Thermal conductivity" + annotation (Dialog(group="Structure of wall layers",enable=not selectable)); + parameter Modelica.SIunits.SpecificHeatCapacity c[n]=(if selectable then wallType.c else fill(1000, n)) + "Specific heat capacity" + annotation (Dialog(group="Structure of wall layers",enable=not selectable)); + + // which orientation of surface? + parameter Integer surfaceOrientation = 1 "Surface orientation" + annotation(Dialog(descriptionLabel = true, enable = if IsAlphaConstant == true then false else true), choices(choice=1 + "vertical", choice = 2 + "horizontal facing up", choice = 3 + "horizontal facing down", radioButtons = true)); + + parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_custom=2 + "Constant heat transfer coefficient" annotation (Dialog(group="Convection", + enable=(control_type == ct.custom))); + + parameter Modelica.SIunits.Emissivity eps=(if selectable then wallType.eps else 0.95) + "Longwave emission coefficient" annotation (Dialog(group="Radiation")); + parameter Modelica.SIunits.Temperature T0=Modelica.SIunits.Conversions.from_degC(16) + "Initial temperature" annotation (Dialog(group="Thermal")); + + // 2n HeatConds + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatCondb[n]( + port_b(each T(start=T0)), + port_a(each T(start=T0)), + G=(A*lambda) ./ (d/2)) annotation (Placement(transformation(extent={ + {8,-8},{28,12}}, rotation=0))); + + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatConda[n]( + port_b(each T(start=T0)), + port_a(each T(start=T0)), + G=(A .* lambda) ./ (d/2)) annotation (Placement(transformation(extent={ + {-50,-8},{-30,12}}, rotation=0))); + + // n Loads + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Load[n]( + T(start=fill(T0, n)), C=c .* rho .* A .* d) + annotation (Placement(transformation(extent={{-8,-62},{12, + -42}}, rotation=0))); + + Utilities.HeatTransfer.HeatConv_inside HeatConv1( + port_b(T(start=T0)), + alpha_custom=alpha_custom, + A=A, + surfaceOrientation=surfaceOrientation) annotation (Placement( + transformation( + origin={64,-2}, + extent={{-10,-10},{10,10}}, + rotation=180))); + Utilities.Interfaces.Star Star annotation (Placement( + transformation(extent={{80,50},{100,70}}, rotation=0))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx( + A=A, + eps=eps, + Therm(T(start=T0)), + Star(T(start=T0))) annotation (Placement(transformation(extent= + {{54,30},{74,50}}, rotation=0))); + + protected + parameter Modelica.SIunits.Area A=h*l - clearance; + + protected + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a dummyTherm + "This really helps to solve initialisation problems in huge equation systems ..." + annotation (Placement(transformation(extent={{49,-41},{54,-36}}, + rotation=0))); + public + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation (Placement(transformation(extent={{-104,-8},{-84,12}}), + iconTransformation(extent={{-100,-20},{-80,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b + annotation (Placement(transformation(extent={{76,-8},{96,12}}), + iconTransformation(extent={{80,-20},{100,0}}))); + equation + + // connecting inner elements HeatCondb[i]--Load[i]--HeatConda[i] to n groups + for i in 1:n loop + connect(HeatConda[i].port_b, Load[i].port) annotation (Line(points={{-30, + 2},{-10,2},{-10,-62},{2,-62}}, color={200,100,0})); + connect(Load[i].port,HeatCondb [i].port_a) annotation (Line(points={{2, + -62},{-10,-62},{-10,2},{8,2}}, color={200,100,0})); + end for; + + // establishing n-1 connections of HeatCondb--Load--HeatConda groups + for i in 1:(n - 1) loop + connect(HeatCondb[i].port_b, HeatConda[i + 1].port_a); + end for; + + // connecting outmost elements to connectors: port_a--HeatCondb[1]...HeatConda[n]--HeatConv1--port_b + connect(HeatConda[1].port_a, port_a) + annotation (Line(points={{-50,2},{-94,2}}, color={200,100,0})); + connect(HeatConv1.port_a, port_b) annotation (Line(points={{74,-2},{84.5, + -2},{84.5,2},{86,2}}, color={ + 200,100,0})); + connect(HeatCondb[n].port_b,HeatConv1.port_b) annotation (Line(points={{28,2},{ + 52,2},{52,-2},{54,-2}}, color={200,100,0})); + connect(HeatConv1.port_b, twoStar_RadEx.Therm) annotation (Line(points={{54,-2}, + {50,-2},{50,40},{54.8,40}}, color={200,100,0})); + connect(twoStar_RadEx.Star, Star) annotation (Line( + points={{73.1,40},{90,40},{90,60}}, + color={95,95,95}, + pattern=LinePattern.None)); + connect(HeatConv1.port_b, dummyTherm) annotation (Line(points={{54,-2},{ + 51.5,-2},{51.5,-38.5}}, color={200,100,0})); + + // computing approximated longwave radiation exchange + + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={Rectangle(extent={{-80,60},{80,-100}}, + lineColor={0,0,0})}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{24,100},{80,-100}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,100},{0,-100}}, + lineColor={166,166,166}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-64,100},{-56,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={208,208,208}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-72,100},{-64,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,100},{-72,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,100},{8,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={208,208,208}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{16,100},{24,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{8,100},{16,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,-30},{80,-42}}, + lineColor={0,0,0}, + pattern=LinePattern.Dash, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-80,-32},{80,-39}}, + lineColor={0,0,0}, + pattern=LinePattern.Dash, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="gap"), + Text( + extent={{-44,-40},{52,-114}}, + lineColor={0,0,0}, + textString="n")}), + Documentation(info=" +

Overview

+

The ConvNLayerClearanceStar model represents a wall, consisting of n different layers with natural convection on one side and (window) clearance.

+

Level of Development

+

+

Concept

+

There is one inner and one outer HeatPort-connector to simulate one-dimensional heat transfer through the wall and heat storage within the wall.

+

The ConvNLayerClearanceStar model extends the basic concept by adding the functionality of approximated longwave radiation exchange. Simply connect all radiation exchanging surfaces via their Star-connectors.

+

Attention: The first element in each vector represents the layer connected to HeatPort_a, the last element represents the layer connected to HeatPort_b.

+

Example Results

+

This model is part of Wall therefore also part of the corresponding examples InsideWall and OutsideWall.

+", revisions=" + +")); + end ConvNLayerClearanceStar; + end BaseClasses; + annotation (Documentation(info=" +

+This package contains aggregated models for definition of walls. +

+ +
+
Main Author: +
Timo Haase
+ Technische Universtität Berlin
+ Hermann-Rietschel-Institut
+ Marchstr. 4
+ D-10587 Berlin
+ e-mail: timo.haase@tu-berlin.de
+
+
+ +")); + end Walls; + + package Weather + extends Modelica.Icons.Package; + + model Weather "Complex weather model" + + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Latitude= 49.5 + "latitude of location" + annotation (Dialog(group="Location Properties")); + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Longitude = 8.5 + "longitude of location" + annotation (Dialog(group="Location Properties")); + parameter Modelica.SIunits.Conversions.NonSIunits.Time_hour + DiffWeatherDataTime = 1 + "difference between weather data time and UTC, e.g. +1 for CET" + annotation (Dialog(group="Properties of Weather Data")); + parameter Real GroundReflection=0.2 "ground reflection coefficient" + annotation (Dialog(group="Location Properties")); + + parameter String tableName="wetter" + "table name on file or in function usertab" + annotation (Dialog(group="Properties of Weather Data")); + parameter String fileName="modelica://DataBase/additionalFiles/TRY2010_12_Jahr_Modelica-Library.txt" + "file where matrix is stored" + annotation (Dialog(group="Properties of Weather Data", + __Dymola_loadSelector(filter="Text files (*.txt);;Matlab files (*.mat)", + caption="Open file in which table is present"))); + parameter Real offset[:]={0} "offsets of output signals" + annotation (Dialog(group="Properties of Weather Data")); + parameter Modelica.Blocks.Types.Smoothness smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments + "Smoothness of table interpolation" + annotation (Dialog(group="Properties of Weather Data")); + parameter Modelica.Blocks.Types.Extrapolation extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic + "Extrapolation of data outside the definition range" + annotation (Dialog(group="Properties of Weather Data")); + parameter Real startTime[1]={0} + "output = offset for time < startTime (same value for all columns)" + annotation (Dialog(group="Properties of Weather Data")); + + parameter + DataBase.Weather.SurfaceOrientation.SurfaceOrientationBaseDataDefinition + SOD= + DataBase.Weather.SurfaceOrientation.SurfaceOrientationData_N_E_S_W_Hor() + "Surface orientation data" annotation (Dialog(group= + "Solar radiation on oriented surfaces", descriptionLabel=true), + choicesAllMatching=true); + + // parameter Integer wdv_choice[:]={7,8,9,10,11,12,13,18,19} " + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + //
7 - Cloud cover, 0..8; 9 12 - Mass fraction of water in dry air, kg/kg
8 - Wind direction, 13 - Relative humidity of air, 0..1
9 - Wind speed, m/s 18 - Longwave sky radiation on horizontal
surface, W/m
10 - Air temperature, C 19 - Longwave terrestric radiation from horizontal
surface, W/m
11 - Air pressure, Pa
" + // annotation (Dialog(group= + // "Weather Data Vector - choose output vector elements")); + + Utilities.Interfaces.SolarRad_out SolarRadiation_OrientedSurfaces[ + size(RadOnTiltedSurf, 1)] annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={50,98}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-78,-110}))); + parameter Integer Outopt = 2 "Output options" + annotation(Dialog(tab="Optional output vector", compact = true, descriptionLabel = true), choices(choice=1 + "one vector", choice = 2 + "individual vectors", radioButtons = true)); + + parameter Boolean Cloud_cover=false "Cloud cover [-] (TRY col 7)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Wind_dir=false "Wind direction [deg] (TRY col 8)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Wind_speed=false "Wind speed [m/s] (TRY col 9)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Air_temp=false "Air temperature [K] (TRY col 10)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Air_press=false "Air pressure [Pa] (TRY col 11)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Mass_frac=false + "Mass fraction of water in dry air [kg/kg] (TRY col 12)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Rel_hum=false + "Realtive humidity of air [-] (TRY col 13)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Sky_rad=false + "Longwave sky radiation on horizontal [W/m2] (TRY col 18)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + parameter Boolean Ter_rad=false + "Longwave terrestric radiation from horizontal [W/m2] (TRY col 19)" + annotation (Dialog(tab="Optional output vector", descriptionLabel = true), choices(checkBox=true)); + + protected + parameter Integer m = BaseClasses.CalculateNrOfOutputs( + Cloud_cover, Wind_dir, Wind_speed, Air_temp, Air_press, Mass_frac, Rel_hum, Sky_rad, Ter_rad) + "Number of choosen output variables"; + parameter Integer[9] PosWV = BaseClasses.DeterminePositionsInWeatherVector( + Cloud_cover, Wind_dir, Wind_speed, Air_temp, Air_press, Mass_frac, Rel_hum, Sky_rad, Ter_rad) + "Positions Weather Vector"; + parameter Integer columns[:]={16,15,7,8,9,10,11,12,13,18,19}; + + public + BaseClasses.Sun Sun( + Longitude=Longitude, + Latitude=Latitude, + DiffWeatherDataTime=DiffWeatherDataTime) annotation (Placement( + transformation(extent={{-62,18},{-38,42}}, rotation=0))); + BaseClasses.RadOnTiltedSurf RadOnTiltedSurf[SOD.nSurfaces]( + each Latitude=Latitude, + each GroundReflection=GroundReflection, + Azimut=SOD.Azimut, + Tilt=SOD.Tilt) annotation (Placement(transformation(extent={{-2, + 18},{22,42}}, rotation=0))); + Modelica.Blocks.Sources.CombiTimeTable WeatherData( + fileName=fileName, + columns=columns, + offset=offset, + table=[0, 0; 1, 1], + startTime=scalar(startTime), + tableName=tableName, + tableOnFile=(tableName) <> "NoName", + smoothness=smoothness, + extrapolation=extrapolation) + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}, + rotation=0))); + + Modelica.Blocks.Routing.DeMultiplex3 deMultiplex(n3=9) + annotation (Placement(transformation(extent={{-26,-70},{-6,-50}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealOutput WeatherDataVector[m] if Outopt == 1 and (Cloud_cover or Wind_dir or Wind_speed or Air_temp or Air_press or Mass_frac or Rel_hum or Sky_rad or Ter_rad) + annotation (Placement(transformation( + origin={-1,-110}, + extent={{-10,-10},{10,10}}, + rotation=270))); + + Modelica.Blocks.Interfaces.RealOutput CloudCover if Cloud_cover and Outopt == 2 "[0..8]" + annotation (Placement( + transformation(extent={{114,74},{134,94}}), iconTransformation(extent={{150,110}, + {170,130}}))); + Modelica.Blocks.Interfaces.RealOutput WindDirection(unit = "deg") if Wind_dir and Outopt == 2 + "in deg [0...360]" + annotation (Placement(transformation(extent={{126,52},{146,72}}), + iconTransformation(extent={{150,80},{170,100}}))); + Modelica.Blocks.Interfaces.RealOutput WindSpeed(unit = "m/s") if Wind_speed and Outopt == 2 "in m/s" + annotation ( + Placement(transformation(extent={{126,32},{146,52}}), iconTransformation( + extent={{150,50},{170,70}}))); + Modelica.Blocks.Interfaces.RealOutput AirTemp(unit = "K") if Air_temp and Outopt == 2 + "in Kelvin" annotation ( + Placement(transformation(extent={{126,14},{146,34}}), iconTransformation( + extent={{150,20},{170,40}}))); + Modelica.Blocks.Interfaces.RealOutput AirPressure(unit= "Pa") if Air_press and Outopt == 2 "in Pa" + annotation ( + Placement(transformation(extent={{126,-8},{146,12}}), iconTransformation( + extent={{150,-10},{170,10}}))); + Modelica.Blocks.Interfaces.RealOutput WaterInAir if Mass_frac and Outopt == 2 + "in kg/kg" annotation (Placement( + transformation(extent={{126,-24},{146,-4}}), iconTransformation(extent={{150,-40}, + {170,-20}}))); + Modelica.Blocks.Interfaces.RealOutput RelHumidity if Rel_hum and Outopt == 2 + "in percent" annotation (Placement( + transformation(extent={{126,-42},{146,-22}}), iconTransformation(extent={{150,-70}, + {170,-50}}))); + Modelica.Blocks.Interfaces.RealOutput SkyRadiation(unit= "W/m2") if Sky_rad and Outopt == 2 "in W/m2" + annotation (Placement(transformation(extent={{126,-62},{146,-42}}), + iconTransformation(extent={{150,-100},{170,-80}}))); + Modelica.Blocks.Interfaces.RealOutput TerrestrialRadiation(unit = "W/m2") if Ter_rad and Outopt == 2 "in W/m2" + annotation (Placement(transformation(extent={{126,-78},{146,-58}}), + iconTransformation(extent={{150,-130},{170,-110}}))); + + Modelica.Blocks.Math.Gain hPa_to_Pa(k=100) if Air_press + annotation (Placement(transformation(extent={{26,-60},{36,-50}}))); + Modelica.Blocks.Math.Gain percent_to_unit(k=0.01) if Rel_hum + annotation (Placement(transformation(extent={{26,-78},{36,-68}}))); + Modelica.Blocks.Math.Gain g_to_kg(k=0.001) if Mass_frac + annotation (Placement(transformation(extent={{28,-96},{38,-86}}))); + Modelica.Blocks.Math.UnitConversions.From_degC from_degC if Air_temp + annotation (Placement(transformation(extent={{26,-42},{36,-32}}))); + initial equation + assert(SOD.nSurfaces==size(SOD.name,1),"name has to have the nSurfaces Elements (see Surface orientation data in the Weather Model)"); + assert(SOD.nSurfaces==size(SOD.Azimut,1),"Azimut has to have the nSurfaces Elements (see Surface orientation data in the Weather Model)"); + assert(SOD.nSurfaces==size(SOD.Tilt,1),"Tilt has to have the nSurfaces Elements (see Surface orientation data in the Weather Model)"); + equation + // cloud cover + if Cloud_cover then + if Outopt == 1 then + connect(WeatherDataVector[PosWV[1]], deMultiplex.y3[1]); + else + connect( CloudCover, deMultiplex.y3[1]); + end if; + end if; + + // wind direction + if Wind_dir then + if Outopt == 1 then + connect(WeatherDataVector[PosWV[2]], deMultiplex.y3[2]); + else + connect(WindDirection, deMultiplex.y3[2]); + end if; + end if; + + // wind speed + if Wind_speed then + if Outopt == 1 then + connect(WeatherDataVector[PosWV[3]], deMultiplex.y3[3]); + else + connect(WindSpeed, deMultiplex.y3[3]); + end if; + end if; + + // air temperature + if Air_temp then + if Outopt == 1 then + connect(deMultiplex.y3[4], from_degC.u); + connect(WeatherDataVector[PosWV[4]], from_degC.y); + else + connect(deMultiplex.y3[4], from_degC.u); + connect(AirTemp, from_degC.y); + end if; + end if; + + // air pressure, conversion from hPa to Pa + if Air_press then + if Outopt == 1 then + connect(deMultiplex.y3[5], hPa_to_Pa.u); + connect( WeatherDataVector[PosWV[5]], hPa_to_Pa.y); + else + connect(deMultiplex.y3[5], hPa_to_Pa.u); + connect(AirPressure, hPa_to_Pa.y); + end if; + end if; + + // mass fraction water in dry air, conversion from g/kg to kg/kg + if Mass_frac then + if Outopt == 1 then + connect(deMultiplex.y3[6], g_to_kg.u); + connect(WeatherDataVector[PosWV[6]], g_to_kg.y); + else + connect(deMultiplex.y3[6], g_to_kg.u); + connect(WaterInAir, g_to_kg.y); + end if; + end if; + + // rel. humidity, conversion from % to 0..1 + if Rel_hum then + if Outopt == 1 then + connect(deMultiplex.y3[7], percent_to_unit.u); + connect(WeatherDataVector[PosWV[7]], percent_to_unit.y); + else + connect(deMultiplex.y3[7], percent_to_unit.u); + connect(RelHumidity, percent_to_unit.y); + end if; + end if; + + // longwave sky radiation + if Sky_rad then + if Outopt == 1 then + connect(WeatherDataVector[PosWV[8]], deMultiplex.y3[8]); + else + connect(SkyRadiation, deMultiplex.y3[8]); + end if; + end if; + + // longwave terrestric radiation + if Ter_rad then + if Outopt == 1 then + connect(WeatherDataVector[PosWV[9]], deMultiplex.y3[9]); + else + connect(TerrestrialRadiation, deMultiplex.y3[9]); + end if; + end if; + + connect(WeatherData.y, deMultiplex.u) annotation (Line(points={{-39,-60},{ + -28,-60}}, color={0,0,127})); + + // Connecting n RadOnTiltedSurf + for i in 1:SOD.nSurfaces loop + connect(Sun.OutHourAngleSun, RadOnTiltedSurf[i].InHourAngleSun); + connect(Sun.OutDeclinationSun, RadOnTiltedSurf[i].InDeclinationSun); + connect(Sun.OutAzimutSun, RadOnTiltedSurf[i].InAzimutSun); + connect(deMultiplex.y1[1], RadOnTiltedSurf[i].InDiffRadHor); + connect(deMultiplex.y2[1], RadOnTiltedSurf[i].InBeamRadHor); + end for; + + connect(RadOnTiltedSurf.OutTotalRadTilted, SolarRadiation_OrientedSurfaces) + annotation (Line( + points={{20.8,27.6},{50.4,27.6},{50.4,98},{50,98}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation (Dialog(group="Solar radiation on oriented surfaces"), + Dialog(tab="Optional output vector", descriptionLabel = true), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-150,-100}, + {150,100}}), graphics={ + Line(points={{-36,32},{-4,32}}, color={0,0,255}), + Line(points={{-36,28},{-4,28}}, color={0,0,255}), + Line(points={{-36,24},{-4,24}}, color={0,0,255}), + Line(points={{5,13},{5,-53},{-3,-53}}, color={0,0,255}), + Line(points={{15,14},{15,-60},{-3,-60}}, color={0,0,255})}), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-150,-100},{ + 150,100}}), graphics={ + Rectangle( + extent={{-150,78},{10,-82}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-150,78},{10,-72}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={170,213,255}), + Ellipse( + extent={{-96,20},{-44,-32}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={255,225,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-150,-22},{10,-82}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,0}), + Rectangle( + extent={{-150,-54},{10,-82}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-126,-32},{-118,-50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.VerticalCylinder, + fillColor={180,90,0}), + Ellipse( + extent={{-134,-12},{-110,-36}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Sphere, + fillColor={0,158,0}), + Polygon( + points={{-126,-50},{-138,-56},{-130,-56},{-118,-50},{-126,-50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Sphere, + fillColor={0,77,0}), + Ellipse( + extent={{-125,-54},{-150,-64}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,77,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-52,46},{-36,38}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={226,226,226}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-42,42},{-28,36}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={226,226,226}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-44,42},{-22,50}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={226,226,226}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-40,46},{-16,38}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={226,226,226}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-12,-10},{-2,-50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.VerticalCylinder, + fillColor={226,226,226}), + Line(points={{-8,-16},{-6,-16}}, color={0,0,0}), + Line(points={{-8,-18},{-6,-18}}, color={0,0,0}), + Line(points={{-8,-28},{-6,-28}}, color={0,0,0}), + Line(points={{-8,-22},{-6,-22}}, color={0,0,0}), + Line(points={{-8,-20},{-6,-20}}, color={0,0,0}), + Line(points={{-8,-26},{-6,-26}}, color={0,0,0}), + Line(points={{-8,-24},{-6,-24}}, color={0,0,0}), + Line(points={{-8,-30},{-6,-30}}, color={0,0,0}), + Line(points={{-8,-32},{-6,-32}}, color={0,0,0}), + Line(points={{-8,-34},{-6,-34}}, color={0,0,0}), + Line(points={{-8,-36},{-6,-36}}, color={0,0,0}), + Line(points={{-8,-38},{-6,-38}}, color={0,0,0}), + Line(points={{-8,-40},{-6,-40}}, color={0,0,0}), + Line( + points={{-7,-19},{-7,-47}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-7,-43},{-7,-47}}, + color={0,0,0}, + thickness=1), + Text( + extent={{-9,-11},{-5,-15}}, + lineColor={0,0,0}, + lineThickness=1, + fillPattern=FillPattern.VerticalCylinder, + fillColor={226,226,226}, + textString="degC"), + Text( + extent={{-176,114},{24,74}}, + lineColor={0,0,255}, + textString="Weather"), + Text( + extent={{12,122},{150,110}}, + lineColor={0,0,255}, visible= Cloud_cover, + textString="Cloud cov.", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,64},{150,52}}, + lineColor={0,0,255}, visible= Wind_speed, + textString="Wind speed", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,94},{150,82}}, + lineColor={0,0,255}, visible= Wind_dir, + textString="Wind dir.", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,34},{150,22}}, + lineColor={0,0,255}, visible= Air_temp, + textString="Air temp.", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,6},{150,-6}}, + lineColor={0,0,255}, visible= Air_press, + textString="Air pressure", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,-26},{150,-38}}, + lineColor={0,0,255}, visible= Mass_frac, + textString="Water in air", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,-54},{150,-66}}, + lineColor={0,0,255}, visible= Rel_hum, + textString="Rel. humidity", + horizontalAlignment=TextAlignment.Right), + Text( + extent={{10,-84},{150,-96}}, + lineColor={0,0,255}, visible= Sky_rad, + horizontalAlignment=TextAlignment.Right, + textString="Sky rad."), + Text( + extent={{10,-114},{150,-126}}, + lineColor={0,0,255}, visible= Ter_rad, + horizontalAlignment=TextAlignment.Right, + textString="Terrest. rad.")}), + Documentation(info=" +

Overview

+

Supplies weather data using a TRY - data set.

+

Level of Development

+

+

Concept

+

Input: a TRY data set in an accepted Modelica format (.mat, .txt, with header). The structure should be exactly the one of a TRY, status: TRY 2011.

+

Output:

+ +

The outputs can be supplied individually or in one vector, with the exception of total solar radiation, which are always supplied separately in a vector.

+

Known Limitations

+

Be aware that the calculation of the total solar radiation may cause problems at simulation times close to sunset and sunrise. In this case, change the cut-off angles. refer to model RadOnTiltedSurf.

+

References

+

DWD: TRYHandbuch.2011.DWD,2011

+

Example Results

+

Examples.Weather.WeatherModels

+", revisions=" + +"),DymolaStoredErrors); + end Weather; + + model Sunblind "Reduces beam at Imax" + + parameter Integer n=4 "Number of orientations"; + parameter Modelica.SIunits.TransmissionCoefficient gsunblind[n]={1,1,1,1} + "Total energy transmittances if sunblind is closed"; + parameter Modelica.SIunits.RadiantEnergyFluenceRate Imax=100 + "Intensity at which the sunblind closes"; + + Utilities.Interfaces.SolarRad_in Rad_In[n] annotation (Placement( + transformation(extent={{-100,0},{-80,20}}))); + Utilities.Interfaces.SolarRad_out Rad_Out[n] + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + Modelica.Blocks.Interfaces.RealOutput sunblindonoff[n] annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={8,-100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-90}))); /*if OutputSunblind*/ + initial equation + assert(n==size(gsunblind,1),"gsunblind has to have n elements"); + equation + for i in 1:n loop + if (Rad_In[i].I>Imax) then + Rad_Out[i].I=Rad_In[i].I*gsunblind[i]; + sunblindonoff[i]=1-gsunblind[i]; + else + Rad_Out[i].I=Rad_In[i].I; + sunblindonoff[i]=0; + end if; + end for; + annotation (Diagram(graphics), Icon(graphics={ + Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + fillColor={87,205,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,80},{80,66}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.HorizontalCylinder), + Ellipse( + extent={{-36,44},{36,-22}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,16},{80,2}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.HorizontalCylinder), + Rectangle( + extent={{-80,32},{80,18}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.HorizontalCylinder), + Rectangle( + extent={{-80,48},{80,34}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.HorizontalCylinder), + Rectangle( + extent={{-80,64},{80,50}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.HorizontalCylinder), + Rectangle( + extent={{-80,80},{-76,2}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Rectangle( + extent={{76,80},{80,2}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Rectangle( + extent={{-56,-14},{-54,-44}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-59,-17},{-55,-9},{-51,-17}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-51,-41},{-55,-49},{-59,-41}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1), + Rectangle( + extent={{-76,-64},{76,-76}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-70,-56},{-12,-70}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Imax"), + Rectangle( + extent={{-2,80},{2,-80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}, + origin={0,-78}, + rotation=-90), + Rectangle( + extent={{-80,2},{-76,-76}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Rectangle( + extent={{76,2},{80,-76}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Rectangle( + extent={{-2,80},{2,-80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}, + origin={0,78}, + rotation=-90), + Rectangle( + extent={{46,-52},{52,-64}}, + lineColor={144,72,0}, + fillColor={144,72,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{42,-38},{56,-54}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

This model represents a sunblind to reduce the vectorial radiance on facades, windows. etc.

+

Level of Development

+

+

Concept

+

+

Assumptions

+

Each direction closes seperatly, which means that in reality each direction has to have his own sensor. It seems, that if a building uses automatic shading, the sensor is on the roof and computes the radiance on each facade. This is quite similar to the concept of different sensors for different directions, as both systems close the sunblinds seperately for each direction.

+

There is no possibilty to disable the sunblind in a specific direction. This isn't necessary, as you can set gsunblind in this direction to 1, which means, that the whole radiance is passing through the closed sunblind.

+

Example Results

+

This model is part of Wall and checked in the Examples InsideWall and OutsideWall.

+", revisions=" +

+")); + end Sunblind; + + package BaseClasses + + model Sun "Solar radiation model" + + import Modelica.SIunits.Conversions.from_deg; + import Modelica.SIunits.Conversions.to_deg; + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Latitude + "latitude of location"; + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Longitude + "longitude of location in"; + parameter Modelica.SIunits.Conversions.NonSIunits.Time_hour + DiffWeatherDataTime + "difference between local time and UTC, e.g. +1 for MET"; + + Real NumberOfDay; + Real AzimutSun; + Real ElevationSun; + + Modelica.Blocks.Interfaces.RealOutput OutHourAngleSun + annotation (Placement(transformation(extent={{80,10},{100,30}}, rotation= + 0))); + Modelica.Blocks.Interfaces.RealOutput OutDeclinationSun + annotation (Placement(transformation(extent={{80,-30},{100,-10}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealOutput OutAzimutSun + annotation (Placement(transformation(extent={{80,-70},{100,-50}}, + rotation=0))); + protected + Real DeclinationSun; + Real HourAngleSun; + Real TimeEquation; + Real DayAngleSun; + Real ArgACOS(min=-1, max=1) + "helper variable to protect 'acos' from Arguments > 1"; + + equation + // number of day: 1 = Jan 1st + NumberOfDay = time/86400 + 1; + + // day angle of sun + DayAngleSun = 360/365.25*(NumberOfDay - 1); + + // equation of time in hours - used to convert local time in solar time + TimeEquation = -0.128*sin(from_deg( + DayAngleSun - 2.8)) - 0.165*sin( + from_deg(2*DayAngleSun + 19.7)); + + // hour angle of sun, first term calculates local time of day from continuous time signal + HourAngleSun = 15*(mod(time/3600, 24) - DiffWeatherDataTime + + TimeEquation + Longitude/15 - 12); + if (HourAngleSun > 180) then + OutHourAngleSun = HourAngleSun - 360; + elseif (HourAngleSun < -180) then + OutHourAngleSun = HourAngleSun + 360; + else + OutHourAngleSun = HourAngleSun; + end if; + + // declination of sun + DeclinationSun = noEvent(to_deg( + asin(0.3978*sin(from_deg( + DayAngleSun - 80.2 + 1.92*sin( + from_deg(DayAngleSun - 2.8))))))); + OutDeclinationSun = DeclinationSun; + + // elevation of sun over horizon + ElevationSun = noEvent(to_deg(asin( + cos(from_deg(DeclinationSun))*cos( + from_deg(OutHourAngleSun))*cos( + from_deg(Latitude)) + sin( + from_deg(DeclinationSun))*sin( + from_deg(Latitude))))); + + // azimut of sun + // AzimutSun = noEvent(to_deg(arctan((cos(from_deg(DeclinationSun))*sin(from_deg( + // OutHourAngleSun)))/(cos(from_deg(DeclinationSun))*cos(from_deg( + // OutHourAngleSun))*sin(from_deg(Latitude)) - sin(from_deg( + // DeclinationSun))*cos(from_deg(Latitude)))))); + ArgACOS = (sin(from_deg(ElevationSun)) + *sin(from_deg(Latitude)) - sin( + from_deg(DeclinationSun)))/(cos( + from_deg(ElevationSun))*cos( + from_deg(Latitude))); + AzimutSun = to_deg(acos(if noEvent( + ArgACOS > 1) then 1 else (if noEvent(ArgACOS < -1) then -1 else ArgACOS))); + if AzimutSun >= 0 then + OutAzimutSun = 180 - AzimutSun; + else + OutAzimutSun = 180 + AzimutSun; + end if; + + algorithm + // correcting azimut calculation for output + // OutAzimutSun := AzimutSun; + // while (OutAzimutSun < 0) loop + // OutAzimutSun := OutAzimutSun + 180; + // end while; + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={170,213,255}), + Ellipse( + extent={{-50,30},{50,-70}}, + lineColor={255,255,0}, + lineThickness=0.5, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,100},{100,60}}, + lineColor={0,0,255}, + textString="%name")}), + DymolaStoredErrors, + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={170,213,255}), Ellipse( + extent={{-50,30},{50,-70}}, + lineColor={255,255,0}, + lineThickness=0.5, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

The Sun model computes the hour angle, the declination and the azimut of the sun for a given set of geographic position and local time.

+

Level of Development

+

+

Concept

+

The model needs information on the difference between the local time zone (corresponding to the time basis of the simulation) and UTC (universal time coordinated) in hours. The ouput data of the Sun model is yet not very useful itself, but it is most commonly used as input data for e.g. RadOnTiltedSurf models to compute the solar radiance according to the azimut of a surface.

+

Example Results

+

The model is checked within the weather example as part of the weather model.

+", revisions=" + +")); + end Sun; + extends Modelica.Icons.BasesPackage; + + model RadOnTiltedSurf "Compute radiation on tilted surface" + + import Modelica.SIunits.Conversions.from_deg; + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Latitude = 52.517 + "latitude of location"; + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Azimut = 13.400 + "azimut of tilted surface, e.g. 0=south, 90=west, 180=north, -90=east"; + parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg Tilt = 90 + "tilt of surface, e.g. 0=horizontal surface, 90=vertical surface"; + parameter Real GroundReflection=0.2 "ground reflection coefficient"; + + Real cos_theta; + Real cos_theta_help; + Real cos_theta_z; + Real cos_theta_z_help; + Real R; + Real R_help; + Real term; + + Modelica.Blocks.Interfaces.RealInput InHourAngleSun + annotation (Placement(transformation(extent={{-100, + 10},{-80,30}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput InDeclinationSun + annotation (Placement(transformation(extent={{-100, + -30},{-80,-10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput InAzimutSun + annotation (Placement(transformation(extent={{-100, + -70},{-80,-50}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput InDiffRadHor + annotation (Placement(transformation( + origin={-40,-110}, + extent={{-10,-10},{10,10}}, + rotation=90))); + Modelica.Blocks.Interfaces.RealInput InBeamRadHor + annotation (Placement(transformation( + origin={40,-110}, + extent={{-10,-10},{10,10}}, + rotation=90))); + Utilities.Interfaces.SolarRad_out OutTotalRadTilted annotation ( + Placement(transformation(extent={{80,-30},{100,-10}}, + rotation=0))); + + equation + // calculation of cos_theta_z [Duffie/Beckman, p.15], cos_theta_z is manually cut at 0 (no neg. values) + cos_theta_z_help = sin(from_deg(InDeclinationSun))*sin(from_deg( + Latitude)) + cos(from_deg(InDeclinationSun))*cos(from_deg(Latitude))* + cos(from_deg(InHourAngleSun)); + cos_theta_z = (cos_theta_z_help + abs(cos_theta_z_help))/2; + + // calculation of cos_theta [Duffie/Beckman, p.15], cos_theta is manually cut at 0 (no neg. values) + term = cos(from_deg(InDeclinationSun))*sin(from_deg(Tilt))*sin(from_deg( + Azimut))*sin(from_deg(InHourAngleSun)); + cos_theta_help = sin(from_deg(InDeclinationSun))*sin(from_deg(Latitude)) + *cos(from_deg(Tilt)) - sin(from_deg(InDeclinationSun))*cos(from_deg( + Latitude))*sin(from_deg(Tilt))*cos(from_deg(Azimut)) + cos(from_deg( + InDeclinationSun))*cos(from_deg(Latitude))*cos(from_deg(Tilt))*cos( + from_deg(InHourAngleSun)) + cos(from_deg(InDeclinationSun))*sin( + from_deg(Latitude))*sin(from_deg(Tilt))*cos(from_deg(Azimut))*cos( + from_deg(InHourAngleSun)) + term; + cos_theta = (cos_theta_help + abs(cos_theta_help))/2; + + // calculation of R factor [Duffie/Beckman, p.25], due to numerical problems (cos_theta_z in denominator) + // R is manually set to 0 for theta_z >= 80° (-> 90° means sunset) + if noEvent(cos_theta_z <= 0.17365) then + R_help = cos_theta_z*cos_theta; + + else + R_help = cos_theta/cos_theta_z; + + end if; + + R = R_help; + + // calculation of total radiation on tilted surface according to model of Liu and Jordan + // according to [Dissertation Nytsch-Geusen, p.98] + OutTotalRadTilted.I = max(0, R*InBeamRadHor + 0.5*(1 + cos(from_deg( + Tilt)))*InDiffRadHor + GroundReflection*(InBeamRadHor + InDiffRadHor) + *((1 - cos(from_deg(Tilt)))/2)); + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={170,213,255}), + Ellipse( + extent={{14,36},{66,-16}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={255,225,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,-40},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,0}), + Rectangle( + extent={{-80,-72},{80,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-60,-64},{-22,-76},{-22,-32},{-60,-24},{-60,-64}}, + lineColor={0,0,0}, + fillPattern=FillPattern.VerticalCylinder, + fillColor={226,226,226}), + Polygon( + points={{-60,-64},{-80,-72},{-80,-100},{-60,-100},{-22,-76},{-60, + -64}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.VerticalCylinder, + fillColor={0,77,0}), + Text( + extent={{-100,100},{100,60}}, + lineColor={0,0,255}, + textString="%name")}), + DymolaStoredErrors, + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={ + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={170,213,255}), + Ellipse( + extent={{14,36},{66,-16}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={255,225,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,-40},{80,-100}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,0}), + Rectangle( + extent={{-80,-72},{80,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-60,-64},{-22,-76},{-22,-32},{-60,-24},{-60,-64}}, + lineColor={0,0,0}, + fillPattern=FillPattern.VerticalCylinder, + fillColor={226,226,226}), + Polygon( + points={{-60,-64},{-80,-72},{-80,-100},{-60,-100},{-22,-76},{-60, + -64}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.VerticalCylinder, + fillColor={0,77,0})}), + Documentation(info=" +

Overview

+

+The RadOnTiltedSurf model calculates the total radiance on a tilted surface. +

+

Level of Development

+

+

Concept

+

+The RadOnTiltedSurf model uses output data of the Sun model and weather data (beam and diffuse radiance on a horizontal surface) to compute total radiance on a tilted surface. It needs information on the tilt angle and the azimut angle of the surface, the latitude of the location and the ground reflection coefficient. +

+

Example Results

+

The model is checked within the weather example as part of the weather model.

+", revisions=" + +")); + end RadOnTiltedSurf; + + function CalculateNrOfOutputs "Calculates number of outputs" + input Boolean Cloud_cover "Cloud cover"; + input Boolean Wind_dir "Wind direction"; + input Boolean Wind_speed "Wind speed"; + input Boolean Air_temp "Air temperature"; + input Boolean Air_press "Air pressure"; + input Boolean Mass_frac "Mass fraction of water in dry air"; + input Boolean Rel_hum "Relative humidity"; + input Boolean Sky_rad + "Long wave radiation of the sky on horizontal surface"; + input Boolean Ter_rad + "Long wave terrestrial radiation from horizontal surface"; + + output Integer m "Number of Outputs"; + + algorithm + m :=0; + + if Cloud_cover then + m :=m + 1; + end if; + + if Wind_dir then + m :=m + 1; + end if; + + if Wind_speed then + m :=m + 1; + end if; + + if Air_temp then + m :=m + 1; + end if; + + if Air_press then + m :=m + 1; + end if; + + if Mass_frac then + m :=m + 1; + end if; + + if Rel_hum then + m :=m + 1; + end if; + + if Sky_rad then + m :=m + 1; + end if; + + if Ter_rad then + m :=m + 1; + end if; + + annotation (Documentation(info=" +

Overview

+

Calculates the number of outputs based on the given inputs.

+

Level of Development

+

+", revisions=" +

+")); + end CalculateNrOfOutputs; + + function DeterminePositionsInWeatherVector + "Determines position in weather vector" + + input Boolean Cloud_cover "Cloud cover"; + input Boolean Wind_dir "Wind direction"; + input Boolean Wind_speed "Wind speed"; + input Boolean Air_temp "Air temperature"; + input Boolean Air_press "Air pressure"; + input Boolean Mass_frac "Mass fraction of water in dry air"; + input Boolean Rel_hum "Relative humidity"; + input Boolean Sky_rad "Long wave sky radiation on horizontal surface"; + input Boolean Ter_rad + "Long Wave terrestrial radiation from horizontal surface"; + + output Integer[9] PosWV = fill(0, 9) + "Determined postition in weather data vector"; + protected + Integer m; + + algorithm + m :=1; + + if Cloud_cover then + PosWV[1] :=m; + m :=m + 1; + end if; + + if Wind_dir then + PosWV[2] :=m; + m :=m + 1; + end if; + + if Wind_speed then + PosWV[3] :=m; + m :=m + 1; + end if; + + if Air_temp then + PosWV[4] :=m; + m :=m + 1; + end if; + + if Air_press then + PosWV[5] :=m; + m :=m + 1; + end if; + + if Mass_frac then + PosWV[6] :=m; + m :=m + 1; + end if; + + if Rel_hum then + PosWV[7] :=m; + m :=m + 1; + end if; + + if Sky_rad then + PosWV[8] :=m; + m :=m + 1; + end if; + + if Ter_rad then + PosWV[9] :=m; + m :=m + 1; + end if; + + annotation (Documentation(revisions=" +

+", info=" +

Overview

+

Determines the position of the given input(s) in the weather vector of the weather model.

+

Level of Development

+

+")); + end DeterminePositionsInWeatherVector; + end BaseClasses; + end Weather; + + package WindowsDoors "Models for windows and doors " + extends Modelica.Icons.Package; + + model Door "Simple door" + + parameter Modelica.SIunits.Area door_area=2 "Total door area" + annotation (Dialog(group="Geometry")); + + parameter Modelica.SIunits.CoefficientOfHeatTransfer U=1.8 + "Thermal transmission coefficient" + annotation (Dialog(group="Properties")); + parameter Modelica.SIunits.Temperature T0=Modelica.SIunits.Conversions.from_degC(20) + "Initial temperature" annotation (Dialog(group="Properties")); + parameter Modelica.SIunits.Emissivity eps = 0.9 + "Emissivity of door material" + annotation (Dialog(group="Properties")); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation ( + Placement(transformation(extent={{-100,-10},{-80,10}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b + annotation ( + Placement(transformation(extent={{80,-10},{100,10}}, rotation=0))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx( + Therm(T(start=T0)), + Star(T(start=T0)), + A=door_area, + eps=eps) annotation (Placement(transformation(extent={{30,50},{50, + 70}}, rotation=0))); + Utilities.Interfaces.Star Star annotation (Placement(transformation( + extent={{80,50},{100,70}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatTrans( + G = ( + door_area)*(U)) annotation (Placement(transformation(extent={{-10,-8}, + {10,12}}, rotation=0))); + + Utilities.HeatTransfer.HeatToStar twoStar_RadEx1( + Therm(T(start=T0)), + Star(T(start=T0)), + A=door_area, + eps=eps) annotation (Placement(transformation(extent={{-32,50},{-52, + 70}}, rotation=0))); + Utilities.Interfaces.Star Star1 annotation (Placement( + transformation(extent={{-100,50},{-80,70}}, rotation=0))); + equation + + connect(twoStar_RadEx.Star, Star) + annotation (Line(points={{49.1,60},{90,60}}, pattern=LinePattern.None)); + connect(port_a, HeatTrans.port_a) + annotation (Line(points={{-90,0},{-49.5,0},{-49.5,2},{-10,2}})); + connect(HeatTrans.port_b, port_b) + annotation (Line(points={{10,2},{49.5,2},{49.5,0},{90,0}})); + connect(twoStar_RadEx.Therm,HeatTrans.port_b) annotation (Line( + points={{30.8,60},{20,60},{20,2},{10,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(twoStar_RadEx1.Therm,HeatTrans.port_a) annotation (Line( + points={{-32.8,60},{-20,60},{-20,2},{-10,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(twoStar_RadEx1.Star, Star1) annotation (Line( + points={{-51.1,60},{-90,60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation (Dialog(group="Air exchange"), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Line( + points={{-40,18},{-36,18}}, + color={255,255,0}, + smooth=Smooth.None), + Rectangle(extent={{-52,82},{48,-78}}, lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-46,76},{40,-68}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={127,0,0}), + Rectangle( + extent={{28,12},{36,0}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid)}), + Window( + x=0.26, + y=0.21, + width=0.49, + height=0.55), + Documentation(info=" +

Overview

+

The Door model models

+ +

Level of Development

+

+

Assumptions

+ +

References/ U-values special doors

+ +

- Doors with a frame of light metal and with glass:

+ +

- Doors of wood or plastic for new building (standard construction): 1,6 W/(m²K)

+

- insulated doors of wood or plastic with triplex glass: 0,7 W/(m²K)

+

Reference:[Hessisches Ministerium für Umwelt 2011] UMWELT, Energie Landwirtschaft und V. f.: Energieeinsparung

+

an Fenstern und Außentueren. Version: 2011. www.hmuelv.hessen.de, p.10

+

Example Results

+

AixLib.Building.Examples.WindowsDoors.DoorSimple

+",revisions=" + +"), Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={Rectangle(extent={{-80,80},{80,-80}}, + lineColor={0,0,0})}), + DymolaStoredErrors); + end Door; + + model WindowSimple "Window with radiation and U-Value" + + // parameter Modelica.SIunits.Area windowarea=2 "Total fenestration area"; + parameter Real windowarea=2 "Total fenestration area"; + parameter Modelica.SIunits.Temperature T0= 293.15 + "Initial temperature"; + parameter Boolean selectable = true "Select window type" annotation (Dialog(group="Window type", descriptionLabel = true)); + parameter DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + WindowType=DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() + "Window type" annotation (Dialog( + group="Window type", + enable=selectable, + descriptionLabel=true)); + parameter Real frameFraction(max=1.0) = if selectable then WindowType.frameFraction else 0.2 + "Frame fraction" annotation (Dialog( + group="Window type", + enable=not selectable, + descriptionLabel=true)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer Uw=if selectable then WindowType.Uw else 1.50 + "Thermal transmission coefficient of whole window" + annotation (Dialog(group="Window type", enable=not selectable)); + + parameter Real g= if selectable then WindowType.g else 0.60 + "Coefficient of solar energy transmission" + annotation (Dialog(group="Window type", enable=not selectable)); + + Utilities.Interfaces.SolarRad_in solarRad_in annotation (Placement( + transformation(extent={{-100,50},{-80,70}}, rotation=0))); + Utilities.HeatTransfer.SolarRadToHeat RadCondAdapt(coeff=g, A= + windowarea*(1 - frameFraction)) annotation (Placement( + transformation(extent={{-50,52},{-30,72}}, rotation=0))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx( + Therm(T(start=T0)), + Star(T(start=T0)), + A=(1 - frameFraction)*windowarea, + eps=WindowType.Emissivity) annotation (Placement(transformation( + extent={{30,50},{50,70}}, rotation=0))); + Utilities.Interfaces.Star Star annotation (Placement(transformation( + extent={{80,50},{100,70}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_outside + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor HeatTrans( + G=windowarea*Uw) annotation (Placement(transformation(extent={{-10,-20}, + {10,0}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_inside + annotation ( + Placement(transformation(extent={{80,-20},{100,0}}, rotation=0))); + equation + connect(RadCondAdapt.heatPort, twoStar_RadEx.Therm) + annotation (Line(points={{-31,60},{30.8,60}})); + connect(solarRad_in, RadCondAdapt.solarRad_in) + annotation (Line(points={{-90,60},{-50.1,60}}, color={0,0,0})); + connect(twoStar_RadEx.Star,Star) + annotation (Line(points={{49.1,60},{90,60}}, pattern=LinePattern.None)); + connect(port_outside, HeatTrans.port_a) + annotation (Line(points={{-90,-10},{-49.5,-10},{-10,-10}})); + connect(HeatTrans.port_b, port_inside) + annotation (Line(points={{10,-10},{10,-10},{90,-10}})); + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Line( + points={{-66,18},{-62,18}}, + color={255,255,0}, + smooth=Smooth.None), + Rectangle(extent={{-80,80},{80,-80}}, lineColor={0,0,0}), + Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-4,42},{10,-76}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-76,46},{74,38}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{2,40},{2,-76},{76,-76},{76,40},{2,40}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-76,40},{-76,-76},{-2,-76},{-2,40},{-76,40}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-76,76},{-76,44},{76,44},{76,76},{-76,76}}, + color={0,0,0}, + smooth=Smooth.None), + Rectangle( + extent={{4,-8},{6,-20}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{-72,72},{-72,48},{72,48},{72,72},{-72,72}}, + color={0,0,0}, + smooth=Smooth.None), + Rectangle( + extent={{-72,72},{72,48}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{10,36},{72,-72}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-72,36},{-8,-72}}, + lineColor={0,0,0}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-8,36},{-8,-72},{-72,-72},{-72,36},{-8,36}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{72,36},{72,-72},{10,-72},{10,36},{72,36}}, + color={0,0,0}, + smooth=Smooth.None), + Rectangle(extent={{-80,80},{80,-80}}, lineColor={0,0,0})}), + Window( + x=0.26, + y=0.21, + width=0.49, + height=0.55), + Documentation(info=" +

Overview

+

The WindowSimple model represents a window described by the thermal transmission coefficient and the coefficient of solar energy transmission.

+

Level of Development

+

+

Concept

+

Phenomena being simulated:

+

+

References

+

Exemplary U-Values for windows from insulation standards

+

+

Example Results

+

AixLib.Building.Components.Examples.WindowsDoors.WindowSimple

+",revisions=" +

+"), Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={Rectangle(extent={{-80,80},{80,-80}}, + lineColor={0,0,0})}), + DymolaStoredErrors); + end WindowSimple; + end WindowsDoors; + + package Examples "Examples for Building models" + extends Modelica.Icons.ExamplesPackage; + + package DryAir + extends Modelica.Icons.ExamplesPackage; + model DryAir_test "Simulation to test the dry air models" + extends Modelica.Icons.Example; + Components.DryAir.DynamicVentilation dynamicVentilation( + pITemp(triggeredTrapezoid(falling=1), TN=60), + HeatingLimit=288.15, + Max_VR=0.15, + Tset=295.15) + annotation (Placement(transformation(extent={{-12,-14},{8,6}}))); + Components.DryAir.Airload airload(V=100, T(start=303.15)) + annotation (Placement(transformation(extent={{30,-12},{50,8}}))); + Components.DryAir.Airload airload1(T(start=289.15)) + annotation (Placement(transformation(extent={{-12,70},{8,90}}))); + Components.DryAir.VarAirExchange varAirExchange + annotation (Placement(transformation(extent={{-12,38},{8,58}}))); + Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate_DIN12831 + annotation (Placement(transformation(extent={{-12,12},{8,32}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow(Q_flow= + 150) + annotation (Placement(transformation(extent={{-90,72},{-70,92}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + TempOutsideDaycurve + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TempInside(T=293.15) + annotation (Placement(transformation(extent={{90,40},{70,60}}))); + Modelica.Blocks.Sources.Sine sine( + amplitude=7, + offset=273.15 + 13, + freqHz=1/(3600*24)) + annotation (Placement(transformation(extent={{-74,20},{-86,32}}))); + Modelica.Blocks.Sources.Sine sine1( + amplitude=1, + freqHz=1/3600, + offset=1.5) + annotation (Placement(transformation(extent={{-34,32},{-24,42}}))); + Modelica.Blocks.Interfaces.RealOutput realOut[4] + annotation (Placement(transformation(extent={{72,-22},{92,-2}}))); + equation + //Connecting the most relevant outputs + realOut[1] = airload1.T; + realOut[2] =varAirExchange.port_b.Q_flow; + realOut[3] =infiltrationRate_DIN12831.port_b.Q_flow; + realOut[4] =dynamicVentilation.port_inside.Q_flow; + + connect(dynamicVentilation.port_inside, airload.port) annotation (Line( + points={{7.4,-5},{19.5,-5},{19.5,-4},{31,-4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(fixedHeatFlow.port, airload1.port) annotation (Line( + points={{-70,82},{-38,82},{-38,78},{-11,78}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempOutsideDaycurve.port,varAirExchange.port_a) annotation (Line( + points={{-70,50},{-41,50},{-41,48},{-12,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempInside.port,varAirExchange.port_b) annotation (Line( + points={{70,50},{49,50},{49,48},{8,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempOutsideDaycurve.port,infiltrationRate_DIN12831.port_a) + annotation (Line( + points={{-70,50},{-50,50},{-50,22},{-12,22}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempInside.port,infiltrationRate_DIN12831.port_b) annotation (Line( + points={{70,50},{40,50},{40,22},{8,22}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(sine.y, TempOutsideDaycurve.T) annotation (Line( + points={{-86.6,26},{-92,26},{-92,50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sine1.y, varAirExchange.InPort1) annotation (Line( + points={{-23.5,37},{-17.75,37},{-17.75,41.6},{-11,41.6}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TempOutsideDaycurve.port, dynamicVentilation.port_outside) + annotation (Line( + points={{-70,50},{-50,50},{-50,-5},{-11.6,-5}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics={ + Text( + extent={{12,90},{20,82}}, + lineColor={0,0,255}, + textString="1"), + Text( + extent={{12,60},{20,52}}, + lineColor={0,0,255}, + textString="2"), + Text( + extent={{12,32},{20,24}}, + lineColor={0,0,255}, + textString="3"), + Text( + extent={{12,6},{20,-2}}, + lineColor={0,0,255}, + textString="4")}), + experiment( + StopTime=86400, + Interval=15, + Algorithm="Lsodar"), + experimentSetupOutput(events=false), + Documentation(revisions=" + +", info=" +

Overview

+

This simulation tests the functionality of the dry air models. Default simulation parameters are provided.

+

Concept

+

The simulation consists of the following models:

+ + + + + + + + + + + + + + + + + + + + +

index

model

1

Airload

2

VarAirExchange

3

InfiltrationRate_DIN12831

4

DynamicVentilation

+

Outputs can easily be displayed via the provided outputs.

+")); + end DryAir_test; + + end DryAir; + + package Weather + extends Modelica.Icons.ExamplesPackage; + model WeatherModels + extends Modelica.Icons.Example; + + Components.Weather.Weather weather( + Cloud_cover=true, + Wind_dir=true, + Wind_speed=true, + Air_temp=true, + Air_press=true, + Mass_frac=true, + Rel_hum=true, + Sky_rad=true, + Ter_rad=true, + fileName= + "D:/EBC_SVN/projects/EBC9999_Modelica-Library/branches/2014-31-01_V2_2/DataBase/additionalFiles/TRY2010_12_Jahr_Modelica-Library.txt") + annotation (Placement(transformation(extent={{-60,16},{6,60}}))); + equation + + annotation ( + experiment( + StopTime=3.1536e+007, + Interval=3600, + Algorithm="Lsodar"), + experimentSetupOutput, + Documentation(info=" +

Overview

+

A test to see if the weather model is functioning correctly. A input file containing weather data (TRY standard) has to be provided and linked to. Check out the default path in order to set the path correctly considering the current directory.

+", revisions=" +

+"),Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics)); + end WeatherModels; + end Weather; + + package WindowsDoors + extends Modelica.Icons.ExamplesPackage; + model WindowSimple + extends Modelica.Icons.Example; + Components.WindowsDoors.WindowSimple windowSimple(windowarea=10) + annotation (Placement(transformation(extent={{-24,-4},{12,28}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Toutside(T=273.15) + annotation (Placement(transformation(extent={{-62,0},{-42,20}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside(T=293.15) + annotation (Placement(transformation(extent={{58,0},{38,20}}))); + Modelica.Blocks.Sources.RealExpression UValue(y=windowSimple.port_inside.Q_flow + /(1 - windowSimple.frameFraction)/windowSimple.windowarea/( + windowSimple.port_inside.T - windowSimple.port_outside.T)) + annotation (Placement(transformation(extent={{-20,-46},{0,-26}}))); + Utilities.Sources.PrescribedSolarRad + varRad(I={100}, n=1) + annotation (Placement(transformation(extent={{-66,40},{-46,60}}))); + Modelica.Blocks.Sources.Constant SolarRadiation(k=100) + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside1(T=293.15) + annotation (Placement(transformation(extent={{58,32},{38,52}}))); + equation + connect(Toutside.port, windowSimple.port_outside) annotation (Line( + points={{-42,10},{-34,10},{-34,10.4},{-22.2,10.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(windowSimple.port_inside, Tinside.port) annotation (Line( + points={{10.2,10.4},{24,10.4},{24,10},{38,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(windowSimple.Star, Tinside1.port) annotation (Line( + points={{10.2,21.6},{20,21.6},{20,42},{38,42}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(varRad.solarRad_out[1], windowSimple.solarRad_in) annotation (Line( + points={{-47,50},{-32,50},{-32,21.6},{-22.2,21.6}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(SolarRadiation.y, varRad.u[1]) annotation (Line( + points={{-79,50},{-66,50}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation ( + Diagram(graphics), + experiment( + StopTime=3600, + Interval=60, + Algorithm="Lsodar"), + experimentSetupOutput, + Documentation(info=" +

Overview

+

Simulation to test the WindowSimple model.

+

Concept

+

Test case for calculation of U-value

+

+", revisions=" + +")); + end WindowSimple; + + model DoorSimple + extends Modelica.Icons.Example; + Components.WindowsDoors.Door doorSimple( + eps=1, + door_area=10, + T0=293.15) + annotation (Placement(transformation(extent={{-24,-4},{12,28}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Toutside(T=273.15) + annotation (Placement(transformation(extent={{-62,0},{-42,20}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside(T=293.15) + annotation (Placement(transformation(extent={{58,0},{38,20}}))); + Modelica.Blocks.Sources.RealExpression UValue(y=doorSimple.port_b.Q_flow/( + doorSimple.port_b.T - doorSimple.port_a.T)/doorSimple.door_area) + annotation (Placement(transformation(extent={{-20,-46},{0,-26}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside1(T=293.15) + annotation (Placement(transformation(extent={{58,32},{38,52}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Toutside1(T=273.15) + annotation (Placement(transformation(extent={{-62,26},{-42,46}}))); + equation + connect(Toutside.port, doorSimple.port_a) annotation (Line( + points={{-42,10},{-34,10},{-34,12},{-22.2,12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(doorSimple.port_b, Tinside.port) annotation (Line( + points={{10.2,12},{24,12},{24,10},{38,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(doorSimple.Star, Tinside1.port) annotation (Line( + points={{10.2,21.6},{20,21.6},{20,42},{38,42}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Toutside1.port, doorSimple.Star1) annotation (Line( + points={{-42,36},{-34,36},{-34,21.6},{-22.2,21.6}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( + Diagram(graphics), + experiment( + StopTime=3600, + Interval=60, + Algorithm="Lsodar"), + experimentSetupOutput, + Documentation(info=" +

Overview

+

Simulation to test the Door model.

+

Concept

+

Test case for calculation of U-value

+

+", revisions=" + +")); + end DoorSimple; + + end WindowsDoors; + + package Walls + extends Modelica.Icons.ExamplesPackage; + model InsideWall + extends Modelica.Icons.Example; + + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside(T=293.15) + annotation (Placement(transformation(extent={{92,10},{72,30}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside1(T=293.15) + annotation (Placement(transformation(extent={{92,50},{72,70}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside2(T=283.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-84,62}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside3(T=283.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-84,22}))); + Components.Walls.Wall wall_simple_new( + outside=false, + wall_length=5, + wall_height=2, + withDoor=true, + WallType=DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half(), + T0=289.15) + annotation (Placement(transformation(extent={{28,-4},{40,68}}))); + Components.Walls.Wall wall_simple1_new( + outside=false, + wall_length=5, + wall_height=2, + withDoor=true, + WallType=DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half(), + T0=287.15) annotation (Placement(transformation( + extent={{-6,36},{6,-36}}, + rotation=180, + origin={-30,30}))); + Modelica.Blocks.Sources.RealExpression UValue_new(y=-Tinside3.port.Q_flow/( + Tinside3.T - Tinside.T)/(wall_simple_new.wall_length*wall_simple_new.wall_height)) + annotation (Placement(transformation(extent={{-28,-100},{28,-80}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb + thermStar_Demux + annotation (Placement(transformation(extent={{-56,-50},{-72,-38}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb + thermStar_Demux1 + annotation (Placement(transformation(extent={{56,-52},{70,-40}}))); + equation + connect(wall_simple1_new.port_outside, wall_simple_new.port_outside) + annotation (Line( + points={{-23.7,30},{-23.7,32},{27.7,32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.thermStarComb, wall_simple1_new.thermStarComb_inside) + annotation (Line( + points={{-56.48,-44.075},{-39.24,-44.075},{-39.24,30},{-36,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux1.thermStarComb, wall_simple_new.thermStarComb_inside) + annotation (Line( + points={{56.42,-46.075},{49.21,-46.075},{49.21,32},{40,32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside2.port, thermStar_Demux.star) annotation (Line( + points={{-74,62},{-56,62},{-56,-22},{-88,-22},{-88,-39.65},{-72.32, + -39.65}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside3.port, thermStar_Demux.therm) annotation (Line( + points={{-74,22},{-60,22},{-60,-18},{-92,-18},{-92,-47.825},{-72.08, + -47.825}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside1.port, thermStar_Demux1.star) annotation (Line( + points={{72,60},{56,60},{56,-22},{88,-22},{88,-41.65},{70.28,-41.65}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside.port, thermStar_Demux1.therm) annotation (Line( + points={{72,20},{60,20},{60,-18},{94,-18},{94,-50},{82,-50},{82,-49.825}, + {70.07,-49.825}}, + color={191,0,0}, + smooth=Smooth.None)); + + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + experiment( + StopTime=90000, + Interval=60, + __Dymola_Algorithm="Lsodar"), + experimentSetupOutput, + Documentation(info=" +

Overview

+

Simulation to test the Wall model in case of an inside wall application.

+

Concept

+

Test case for calculation of U-value

+

+

The u-values are calculated via calculation moduls and may be displayed easily.

+", revisions=" + +")); + end InsideWall; + + model OutsideWall + extends Modelica.Icons.Example; + + Components.Walls.Wall wall_simple( + wall_length=5, + wall_height=2, + withWindow=true, + WindowType=DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009(), + withSunblind=true, + WallType=DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S(), + outside=true, + Model=3, + T0=289.15) annotation (Placement(transformation( + extent={{-6,57},{6,-57}}, + rotation=180, + origin={-30,25}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside1(T=293.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-90,44}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Tinside2(T=293.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-90,10}))); + Modelica.Blocks.Sources.RealExpression UValue(y=-Tinside2.port.Q_flow/( + Tinside2.T - Toutside.T)/(wall_simple.wall_length*wall_simple.wall_height)) + annotation (Placement(transformation(extent={{-32,-78},{24,-58}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Toutside(T=283.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={30,22}))); + Utilities.Sources.PrescribedSolarRad + varRad(I={100}) annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={50,80}))); + Utilities.Interfaces.Adaptors.HeatStarToComb + heatStarToComb annotation ( + Placement(transformation( + extent={{-10,-8},{10,8}}, + rotation=180, + origin={-58,26}))); + Modelica.Blocks.Sources.RealExpression WindSpeed(y=4) + annotation (Placement(transformation(extent={{30,48},{12,64}}))); + equation + connect(Toutside.port, wall_simple.port_outside) annotation (Line( + points={{20,22},{4,22},{4,25},{-23.7,25}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(wall_simple.SolarRadiationPort, varRad.solarRad_out[1]) annotation ( + Line( + points={{-22.2,77.25},{9.9,77.25},{9.9,80},{41,80}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(heatStarToComb.thermStarComb, wall_simple.thermStarComb_inside) + annotation (Line( + points={{-48.6,26.1},{-43.3,26.1},{-43.3,25},{-36,25}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside2.port, heatStarToComb.therm) annotation (Line( + points={{-80,10},{-74,10},{-74,31.1},{-68.1,31.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tinside1.port, heatStarToComb.star) annotation (Line( + points={{-80,44},{-74,44},{-74,20.2},{-68.4,20.2}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + experiment( + StopTime=36000, + Interval=60, + Algorithm="Lsodar"), + experimentSetupOutput, + Documentation(info=" +

Overview

+

Simulation to test the Wall model in case of an outside wall application.

+

Concept

+

Test case for calculation of U-value

+

+", revisions=" + +")); + end OutsideWall; + + end Walls; + + package Sources "Package for examples of sources" + extends Modelica.Icons.ExamplesPackage; + + package InternalGains + extends Modelica.Icons.ExamplesPackage; + model OneOffice + extends Modelica.Icons.Example; + + Components.Sources.InternalGains.Humans.HumanSensibleHeat_VDI2078 + human_SensibleHeat_VDI2078(NrPeople=2) + annotation (Placement(transformation(extent={{-10,40},{12,64}}))); + Building.Components.Sources.InternalGains.Machines.Machines_DIN18599 + machines_SensibleHeat_DIN18599(NrPeople=2) + annotation (Placement(transformation(extent={{-10,-6},{14,24}}))); + Components.Sources.InternalGains.Lights.Lights_relative lights + annotation (Placement(transformation(extent={{-8,-46},{12,-22}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature RoomTemp + annotation (Placement(transformation(extent={{-58,40},{-38,60}}))); + Modelica.Blocks.Sources.Ramp Evolution_RoomTemp( + duration=36000, + offset=293.15, + startTime=4000, + height=0) + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + Modelica.Blocks.Sources.CombiTimeTable combiTimeTable( + columns={2,3,4,5}, + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0.1,0,0; 36000,0,0.1,0,0; 36060,1,1,0.3,0.8; 72000,1,1,0.3,0.8; + 72060,0,0.1,0,0; 86400,0,0.1,0,0]) + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T=293.15) + annotation (Placement(transformation(extent={{62,46},{42,66}}))); + equation + connect(RoomTemp.port, human_SensibleHeat_VDI2078.TRoom) annotation (Line( + points={{-38,50},{-28,50},{-28,64},{-8.9,64},{-8.9,62.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Evolution_RoomTemp.y, RoomTemp.T) annotation (Line( + points={{-79,50},{-60,50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combiTimeTable.y[1], human_SensibleHeat_VDI2078.Schedule) + annotation (Line( + points={{-59,-10},{-20,-10},{-20,50.68},{-9.01,50.68}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combiTimeTable.y[2], machines_SensibleHeat_DIN18599.Schedule) + annotation (Line( + points={{-59,-10},{-20,-10},{-20,9},{-8.8,9}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combiTimeTable.y[3], lights.Schedule) annotation (Line( + points={{-59,-10},{-20,-10},{-20,-34},{-7,-34}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078.ConvHeat, fixedTemp.port) annotation ( + Line( + points={{10.9,58},{34,58},{34,56},{42,56}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078.RadHeat, fixedTemp.port) annotation ( + Line( + points={{10.9,50.8},{36,50.8},{36,56},{42,56}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(machines_SensibleHeat_DIN18599.ConvHeat, fixedTemp.port) + annotation (Line( + points={{12.8,18},{38,18},{38,56},{42,56}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(machines_SensibleHeat_DIN18599.RadHeat, fixedTemp.port) + annotation (Line( + points={{12.8,0.3},{38,0.3},{38,56},{42,56}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(lights.ConvHeat, fixedTemp.port) annotation (Line( + points={{11,-26.8},{38,-26.8},{38,56},{42,56}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(lights.RadHeat, fixedTemp.port) annotation (Line( + points={{11,-40.96},{38,-40.96},{38,56},{42,56}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Diagram(graphics), + experiment( + StopTime=86400, + Interval=60, + __Dymola_Algorithm="Lsodar"), + experimentSetupOutput(events=false), + Documentation(info=" +

Overview

+

Simulation to test the functionalty of the internal gains in a modelled room.

+", revisions=" +

+")); + end OneOffice; + + model Humans "Simulation to check the human models" + extends Modelica.Icons.Example; + Components.Sources.InternalGains.Humans.HumanSensibleHeat_VDI2078 + human_SensibleHeat_VDI2078_1(RatioConvectiveHeat=0.6) + annotation (Placement(transformation(extent={{-24,-20},{22,32}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature varTempRoom + annotation (Placement(transformation(extent={{-64,42},{-84,62}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T=293.15) + annotation (Placement(transformation(extent={{78,4},{58,24}}))); + Modelica.Blocks.Sources.CombiTimeTable combiTimeTable(table=[0,0; 28740,0; 28800, + 1; 43200,1; 43260,0; 46800,0; 46860,1; 64800,1; 64860,0; 86400,0]) + annotation (Placement(transformation(extent={{-82,-26},{-62,-6}}))); + Modelica.Blocks.Sources.Sine sine( + amplitude=2, + freqHz=1/(24*3600), + offset=273.15 + 20, + phase(displayUnit="deg") = -3.1415926535898) + annotation (Placement(transformation(extent={{-82,18},{-70,30}}))); + Modelica.Blocks.Interfaces.RealOutput HeatOut + annotation (Placement(transformation(extent={{58,-74},{78,-54}}))); + equation + //Connect human heat output + human_SensibleHeat_VDI2078_1.productHeatOutput.y = HeatOut; + + connect(varTempRoom.port, human_SensibleHeat_VDI2078_1.TRoom) annotation ( + Line( + points={{-84,52},{-44,52},{-44,29.4},{-21.7,29.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(sine.y, varTempRoom.T) annotation (Line( + points={{-69.4,24},{-54,24},{-54,52},{-62,52}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078_1.ConvHeat, fixedTemp.port) + annotation (Line( + points={{19.7,19},{38.85,19},{38.85,14},{58,14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078_1.RadHeat, fixedTemp.port) annotation ( + Line( + points={{19.7,3.4},{39.85,3.4},{39.85,14},{58,14}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(combiTimeTable.y[1], human_SensibleHeat_VDI2078_1.Schedule) + annotation (Line( + points={{-61,-16},{-42,-16},{-42,3.14},{-21.93,3.14}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics), + experiment(StopTime=86400), + __Dymola_experimentSetupOutput, + Documentation(info=" +

Overview

+

Simulation to check the functionality of the human heat sources. It only consists of one human (VDI 2078).

+

The timetable represents typical working hours with one hour lunch time. The room temperature follows a sine input varying between 18 and 22 degrees over a 24 hour time period.

+", revisions=" +

+")); + end Humans; + + model Machines "Simulation to check the machine models" + extends Modelica.Icons.Example; + Components.Sources.InternalGains.Machines.Machines_DIN18599 + machines_sensibleHeat_DIN18599 + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Modelica.Blocks.Sources.CombiTimeTable combiTimeTable(table=[0,0; 28740,0; + 28800,1; 64800,1; 64860,0; 86400,0]) + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T=293.15) + annotation (Placement(transformation(extent={{80,-8},{60,12}}))); + equation + connect(combiTimeTable.y[1], machines_sensibleHeat_DIN18599.Schedule) + annotation (Line( + points={{-49,0},{-9,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(machines_sensibleHeat_DIN18599.ConvHeat, fixedTemp.port) + annotation (Line( + points={{9,6},{38,6},{38,2},{60,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(machines_sensibleHeat_DIN18599.RadHeat, fixedTemp.port) + annotation (Line( + points={{9,-5.8},{34.5,-5.8},{34.5,2},{60,2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics), + experiment(StopTime=86400, Interval=60), + __Dymola_experimentSetupOutput, + Documentation(info=" +

Overview

+

This simulation is to check the functionality of the machine models described by the internal gains.

+

Concept

Heat flow values can be displayed via the provided output.

+", revisions=" +

+")); + end Machines; + + model Lights "Simulation to check the light models" + extends Modelica.Icons.Example; + Components.Sources.InternalGains.Lights.Lights_relative lights + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Modelica.Blocks.Sources.CombiTimeTable combiTimeTable(table=[0,0; 28740,0; + 28800,1; 64800,1; 64860,0; 86400,0]) + annotation (Placement(transformation(extent={{-76,-10},{-56,10}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T=293.15) + annotation (Placement(transformation(extent={{78,-8},{58,12}}))); + equation + connect(combiTimeTable.y[1], lights.Schedule) annotation (Line( + points={{-55,0},{-9,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(lights.ConvHeat, fixedTemp.port) annotation (Line( + points={{9,6},{34,6},{34,2},{58,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(lights.RadHeat, fixedTemp.port) annotation (Line( + points={{9,-5.8},{46,-5.8},{46,2},{58,2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics), + experiment( + StopTime=86400, + Interval=60, + __Dymola_Algorithm="Lsodar"), + __Dymola_experimentSetupOutput, + Documentation(info=" +

Overview

+

This simulation is to check the functionality of the light models described by the internal gains.

+

Concept

+

Heat flow values can be displayed via the provided output.

+", revisions=" +

+")); + end Lights; + end InternalGains; + end Sources; + end Examples; +end Components; diff --git a/AixLib/Building/HighOrder.mo b/AixLib/Building/HighOrder.mo new file mode 100644 index 0000000000..cf440fdf3c --- /dev/null +++ b/AixLib/Building/HighOrder.mo @@ -0,0 +1,14129 @@ +within AixLib.Building; +package HighOrder "Standard house models" + extends Modelica.Icons.Package; + + package Rooms + extends Modelica.Icons.Package; + + package OFD "One Family Dwelling" + extends Modelica.Icons.Package; + + model Ow2IwL1IwS1Gr1Uf1 + "2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.13 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.13 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width=2 "width" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height=2 "height" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer wall properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T_Ground=278.15 + "Ground temperature" annotation(Dialog(group="Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow1 = true "Window 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW1=0 "Window area " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow1)); + parameter Boolean withWindow2 = true "Window 2 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow2)); + parameter Boolean withDoor1 = true "Door 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD1=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Modelica.SIunits.Length door_height_OD1=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real U_door_OD1=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real eps_door_OD1=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor1)); + parameter Boolean withDoor2 = true "Door 2" annotation (Dialog( group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real eps_door_OD2=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to ground type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLground_EnEV2009_SML() else + if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLground_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLground_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Floor.FLground_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + // Ceiling to upper floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width*room_height; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW1, + T0=T0_OW1, + door_height=door_height_OD1, + door_width=door_width_OD1, + wall_length=room_length, + wall_height=room_height, + withWindow=withWindow1, + withDoor=withDoor1, + WallType=Type_OW, + Model=ModelConvOW, + WindowType=Type_Win, + withSunblind=false, + U_door=U_door_OD1, + eps_door=eps_door_OD1) annotation (Placement(transformation( + extent={{-64,-28},{-54,36}}, rotation=0))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + wall_length=room_width, + wall_height=room_height, + withWindow=withWindow2, + withDoor=withDoor2, + WallType=Type_OW, + Model=ModelConvOW, + WindowType=Type_Win, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={19,57}, + extent={{-5.00018,-29},{5.00003,29}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1( + T0=T0_IW1, + outside=false, + wall_length=room_length, + wall_height=room_height, + withWindow=false, + withDoor=false, + WallType=Type_IWload) annotation (Placement(transformation( + origin={58,5}, + extent={{-6,-35},{6,35}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={16,-60}, + extent={{-4,-24},{4,24}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={-30,59}, + extent={{2.99997,-16},{-3.00002,16}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + outside=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-29,-53}, + extent={{-3.00001,-15},{2.99998,15}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{80,0},{100,20}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-50},{-89.5,-30}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,20},{-89.5,40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation ( + Placement(transformation( + origin={50.5,99}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,60},{100,80}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-32,10},{-12,30}}), + iconTransformation(extent={{-32,10},{-12,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-20,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-20.5,98.5}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature Ground + annotation (Placement(transformation(extent={{0,-100},{-20,-80}}))); + Modelica.Blocks.Sources.Constant GroundTemperature(k=T_Ground) + annotation (Placement(transformation(extent={{-62,-100},{-42,-80}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-68,44},{-50, + 52}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-68,-66},{-46,-54}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + Utilities.Interfaces.Star starRoom annotation (Placement( + transformation(extent={{10,10},{30,30}}), iconTransformation( + extent={{10,10},{30,30}}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + h=room_width, + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-24,-75}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-24,-68},{-14,-58}}), iconTransformation( + extent={{-32,-34},{-12,-14}}))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + connect(floor_FH.port_a, Ground.port) annotation (Line( + points={{-25.6,-77.7001},{-25.6,-90},{-20,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floor_FH.port_b, thermFloor) annotation (Line( + points={{-25.6,-72.3},{-25.6,-63},{-19,-63}}, + color={191,0,0}, + smooth=Smooth.None)); + else + connect(floor.port_outside, Ground.port) annotation (Line( + points={{-29,-56.15},{-29,-90},{-20,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-29,-50},{-29,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + end if; + + connect(outside_wall1.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{-64.25,27.4667},{-72,27.4667},{-80,27.4667},{-80,-40},{ + -99.5,-40}}, color={0,0,127})); + connect(thermInsideWall2,thermInsideWall2) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1.port_outside, thermInsideWall1) annotation (Line( + points={{64.3,5},{90,5},{90,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{40.2667,62.2502},{40.2667,68},{40.2667,70},{-80,70},{-80, + -40},{-99.5,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(GroundTemperature.y, Ground.T) annotation (Line( + points={{-41,-90},{2,-90}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-68,48},{-80,48},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.port_outside, thermOutside) annotation (Line( + points={{-64.25,4},{-80,4},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermRoom, thermRoom) annotation (Line( + points={{-22,20},{-22,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(starRoom, thermStar_Demux.star) + annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{19,52},{19,52},{19,40},{-40,40},{-40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) + annotation (Line( + points={{45.5833,63.5002},{45.5833,80.7501},{50.5,80.7501},{50.5,99}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) + annotation (Line( + points={{-99.5,30},{-80,30},{-80,33.3333},{-65.5,33.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(thermOutside, thermOutside) annotation (Line( + points={{-90,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2.port_outside, thermInsideWall2) annotation (Line( + points={{16,-64.2},{16,-75.45},{30,-75.45},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{52,5},{50,6},{40,6},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{-30,62.15},{-30,70},{90,70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, thermRoom) annotation (Line( + points={{-25.1,-15.9},{-25.1,1.05},{-22,1.05},{-22,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.port_outside, thermOutside) annotation (Line( + points={{19,62.2502},{19,70},{-80,70},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-50,48},{-40,48},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tair.port, airload.port) annotation (Line( + points={{24,-13},{24,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-30,56},{-30,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1, + -35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{16,-56},{16,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,4},{-40,4},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(AirExchangePort, NaturalVentilation.InPort1) annotation (Line( + points={{-20,100},{-20,70},{-80,70},{-80,-46.4},{-67,-46.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermOutside,NaturalVentilation.port_a) annotation (Line( + points={{-90,90},{-80,90},{-80,-40},{-68,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floor_FH.port_a, Ground.port) annotation (Line( + points={{-25.6,-77.7001},{-25.6,-90},{-20,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor_FH.port_b, thermFloor) annotation (Line( + points={{-25.6,-72.3},{-25.6,-63},{-19,-63}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa.png")), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,80},{-50,60}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow2), + Rectangle( + extent={{6,64},{-6,-64}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + origin={74,-4}, + rotation=360), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-60,0}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow1), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Line( + points={{38,46},{68,46}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{64,52},{-56,40}}, + lineColor={255,255,255}, + textString="width"), + Line( + points={{-46,-38},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{3,-6},{-117,6}}, + lineColor={255,255,255}, + origin={-46,53}, + rotation=90, + textString="length"), + Rectangle( + extent={{-80,-20},{-60,-40}}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}, + visible=withDoor1), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid, + visible= withWindow2, + textString="Win2", + lineThickness=0.5), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid, + origin={-70,25}, + rotation=90, + visible= withWindow1, + textString="Win1"), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + visible= withDoor2, + textString="D2"), + Text( + extent={{-10,4},{10,-4}}, + lineColor={255,255,255}, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid, + origin={-70,-30}, + rotation=90, + visible= withDoor1, + textString="D1"), + Line( + points={{-60,46},{-30,46}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-46,60},{-46,30}}, + color={255,255,255}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow2IwL1IwS1Gr1Uf1; + + model Ow2IwL2IwS1Gr1Uf1 + "2 outer walls, 2 inner walls load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1a=295.15 "IW1a" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1b=295.15 "IW1b" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.13 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.13 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_lengthb=1 "length_b " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width=2 "width " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height=2 "height" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T_Ground=278.15 + "Ground Temperature" annotation(Dialog(group="Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow1 = true "Window 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW1=0 "Window area " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow1)); + parameter Boolean withWindow2 = true "Window 2 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow2)); + parameter Boolean withDoor1 = true "Door 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD1=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Modelica.SIunits.Length door_height_OD1=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real U_door_OD1=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real eps_door_OD1=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor1)); + parameter Boolean withDoor2 = true "Door 2" annotation (Dialog( group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real eps_door_OD2=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to ground type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLground_EnEV2009_SML() else + if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLground_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLground_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Floor.FLground_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + // Ceiling to upper floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width*room_height; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW1, + T0=T0_OW1, + door_height=door_height_OD1, + door_width=door_width_OD1, + wall_length=room_length, + wall_height=room_height, + withWindow=withWindow1, + withDoor=withDoor1, + WallType=Type_OW, + WindowType=Type_Win, + U_door=U_door_OD1, + eps_door=eps_door_OD1) annotation (Placement(transformation( + extent={{-64,-22},{-54,36}}, rotation=0))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + wall_length=room_width, + wall_height=room_height, + withWindow=withWindow2, + withDoor=withDoor2, + WallType=Type_OW, + WindowType=Type_Win, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={23,59}, + extent={{-4.99998,-27},{5.00001,27}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1a( + T0=T0_IW1a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,24}, + extent={{-2.99999,-16},{2.99999,16}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={22,-60}, + extent={{-4.00002,-26},{4.00001,26}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={-30,61}, + extent={{2.99997,-16},{-3.00002,16}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-27,-60}, + extent={{-2.00002,-11},{2.00001,11}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1a + annotation (Placement(transformation(extent={{80,20},{100,40}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0), iconTransformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-50},{-89.5,-30}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,20},{-89.5,40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation ( + Placement(transformation( + origin={50.5,101}, + extent={{-10,-10},{10,10}}, + rotation=270), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={50.5,99}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,60},{100,80}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom + annotation (Placement(transformation(extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom + annotation (Placement(transformation(extent={{10,10},{30,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-20,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-20.5,98.5}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature Ground + annotation (Placement(transformation(extent={{-24,-100},{-4,-80}}))); + Modelica.Blocks.Sources.Constant GroundTemperature(k=T_Ground) + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + AixLib.Building.Components.Walls.Wall inside_wall1b( + T0=T0_IW1b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,-15}, + extent={{-3,-15},{3,15}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1b + annotation (Placement(transformation(extent={{80,-20},{100,0}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-68,44},{-50, + 52}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-70,-66},{-46,-54}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + h=room_width, + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-22,-77}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-24,-72},{-14,-62}}), iconTransformation( + extent={{-32,-34},{-12,-14}}))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + connect(floor_FH.port_b,thermFloor) annotation (Line( + points={{-23.6,-74.3},{-23.6,-67},{-19,-67}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor_FH.port_a, Ground.port) annotation (Line( + points={{-23.6,-79.7001},{-23.6,-90},{-4,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + else + connect(floor.port_outside, Ground.port) annotation (Line( + points={{-27,-62.1},{-27,-90},{-4,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-27,-58},{-27,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + + end if; + + connect(thermInsideWall2,thermInsideWall2) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GroundTemperature.y, Ground.T) annotation (Line( + points={{-39,-90},{-30,-90},{-30,-90},{-26,-90}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(WindSpeedPort, outside_wall2.WindSpeedPort) annotation (Line( + points={{-99.5,-40},{-80,-40},{-80,74},{42.8,74},{42.8,64.25}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermRoom, thermRoom) annotation (Line( + points={{-20,20},{-20,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermOutside, thermOutside) annotation (Line( + points={{-90,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermOutside, outside_wall1.port_outside) annotation (Line( + points={{-90,90},{-90,82},{-80,82},{-80,6},{-68,6},{-68,7},{-64.25,7}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-64.25,28.2667},{-80,28.2667},{-80,-40},{-99.5,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(inside_wall1b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,-15},{52,-15},{52,-40},{-20,-40},{-20,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,24},{52,24},{52,-40},{-20.1,-40},{-20.1,-38},{-20.1, + -35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,7},{-48,6},{-40,6},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) + annotation (Line( + points={{47.75,65.5},{47.75,74},{50.5,74},{50.5,88},{50.5,101}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(outside_wall2.port_outside, thermOutside) annotation (Line( + points={{23,64.25},{23,74},{-80,74},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{-30,64.15},{-30,64.15},{-30,74},{84,74},{84,70},{90,70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{23,54},{23,54},{23,40},{-40,40},{-40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{22,-56},{22,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2.port_outside, thermInsideWall2) annotation (Line( + points={{22,-64.2},{22,-77.3},{30,-77.3},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1a.port_outside, thermInsideWall1a) annotation (Line( + points={{64.15,24},{77.225,24},{77.225,30},{90,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1b.port_outside, thermInsideWall1b) annotation (Line( + points={{64.15,-15},{79.225,-15},{79.225,-10},{90,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-68,48},{-80,48},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) + annotation (Line( + points={{-99.5,30},{-80,30},{-80,33.5833},{-65.5,33.5833}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, thermRoom) annotation (Line( + points={{-25.1,-15.9},{-25.1,2.05},{-20,2.05},{-20,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Tair.port, airload.port) annotation (Line( + points={{24,-13},{24,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-50,48},{-40,48},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-30,58},{-30,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1, + -35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-68,-40},{-80,-40},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-67,-46.4},{-80,-46.4},{-80,74},{-20,74},{-20,100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermInsideWall1b, thermInsideWall1b) annotation (Line( + points={{90,-10},{85,-10},{85,-10},{90,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + + annotation (__Dymola_Images(Parameters( source="AixLib/Images/House/2OW_2IWl_1IWs_1Gr_Pa.png", Width = 5, Length = 5)), + Icon(graphics={ + Rectangle( + extent={{-6,-46},{6,46}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + origin={74,-22}, + rotation=0, + radius=0), + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{25,10},{-25,-10}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + origin={-25,70}, + rotation=180, + visible=withWindow2), + Rectangle( + extent={{6,18},{-6,-18}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + origin={74,42}, + rotation=0), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-60,0}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow1), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor2), + Rectangle( + extent={{-80,-20},{-60,-40}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor1), + Line( + points={{-46,-38},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{68,24},{56,24}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-56,52},{64,40}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Text( + extent={{-120,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,56}, + rotation=90, + textString="length"), + Text( + extent={{57,6},{-57,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-23}, + rotation=90, + textString="length_b"), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D2", + visible=withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible= withWindow2), + Text( + extent={{50,-6},{0,6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win1", + origin={-70,0}, + rotation=90, + visible= withWindow1), + Text( + extent={{2.85713,-4},{-17.1429,4}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D1", + origin={-70,-22.8571}, + rotation=90, + visible= withDoor1), + Line( + points={{-46,60},{-46,30}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-60,46},{-30,46}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{38,46},{68,46}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{60,24},{60,16}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{60,-64},{60,-68}}, + color={255,255,255}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 2 outer walls, 2 inner walls load towards two different rooms but with the same orientation, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow2IwL2IwS1Gr1Uf1; + + model Ow1IwL2IwS1Gr1Uf1 + "1 outer wall, 2 inner walls load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2a=295.15 "IW2a" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2b=295.15 "IW2b" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW3=295.15 "IW3" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.13 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.13 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_lengthb=1 "length_b " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width=2 "width " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height=2 "height " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T_Ground=278.15 + "Ground Temperature" annotation(Dialog(group="Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow1 = true "Window 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW1=0 "Window area " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow1)); + parameter Boolean withDoor1 = true "Door 1" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD1=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Modelica.SIunits.Length door_height_OD1=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real U_door_OD1=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor1)); + parameter Real eps_door_OD1=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor1)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.02 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to ground type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLground_EnEV2009_SML() else + if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLground_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLground_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Floor.FLground_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + // Ceiling to upper floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width*room_height; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW1, + T0=T0_OW1, + door_height=door_height_OD1, + door_width=door_width_OD1, + wall_length=room_length, + wall_height=room_height, + withWindow=withWindow1, + withDoor=withDoor1, + WallType=Type_OW, + WindowType=Type_Win, + U_door=U_door_OD1, + eps_door=eps_door_OD1) annotation (Placement(transformation( + extent={{-64,-30},{-54,26}}, rotation=0))); + AixLib.Building.Components.Walls.Wall inside_wall1( + T0=T0_IW1, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={23,59}, + extent={{-5.00018,-29},{5.00003,29}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall2a( + T0=T0_IW2a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,23}, + extent={{-3,-15},{3,15}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall3( + T0=T0_IW3, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={25,-59}, + extent={{-5.00002,-29},{5.00001,29}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={-31,60}, + extent={{2,-9},{-2,9}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width, + withWindow=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-27,-60}, + extent={{-2.00002,-11},{2.00001,11}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall3 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2a + annotation (Placement(transformation(extent={{80,20},{100,40}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-70},{-89.5,-50}}, + rotation=0), iconTransformation(extent={{-109.5,-70},{-89.5,-50}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,50},{-89.5,70}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort + annotation (Placement(transformation( + origin={-100,-19.5}, + extent={{-10,-10.5},{10,10.5}}, + rotation=0), iconTransformation(extent={{-110,-30},{-90,-10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,60},{100,80}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom + annotation (Placement(transformation(extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom + annotation (Placement(transformation(extent={{10,10},{30,30}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature Ground + annotation (Placement(transformation(extent={{-22,-100},{-2,-80}}))); + Modelica.Blocks.Sources.Constant GroundTemperature(k=T_Ground) + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + AixLib.Building.Components.Walls.Wall inside_wall2b( + T0=T0_IW2b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,-17}, + extent={{-3,-15},{3,15}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2b + annotation (Placement(transformation(extent={{80,-20},{100,0}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-66,44},{-48, + 52}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-70,-70},{-46,-58}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + h=room_width, + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-16,-77}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-18,-68},{-8,-58}}), iconTransformation( + extent={{-32,-34},{-12,-14}}))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + connect(floor_FH.port_b,thermFloor) annotation (Line( + points={{-17.6,-74.3},{-17.6,-63},{-13,-63}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor_FH.port_a, Ground.port) annotation (Line( + points={{-17.6,-79.7001},{-17.6,-90},{-2,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + else + connect(floor.port_outside, Ground.port) annotation (Line( + points={{-27,-62.1},{-27,-90},{-2,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-27,-58},{-27,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + end if; + + connect(thermInsideWall3,thermInsideWall3) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GroundTemperature.y, Ground.T) annotation (Line( + points={{-39,-90},{-30,-90},{-30,-90},{-24,-90}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Tair.port, airload.port) annotation (Line( + points={{24,-13},{24,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(inside_wall2b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,-17},{40,-17},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,23},{40,23},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{23,54},{23,54},{23,40},{-40,40},{-40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall3.port_outside, thermInsideWall3) annotation (Line( + points={{25,-64.25},{25,-77.375},{30,-77.375},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2b.port_outside, thermInsideWall2b) annotation (Line( + points={{64.15,-17},{77.225,-17},{77.225,-10},{90,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2a.port_outside, thermInsideWall2a) annotation (Line( + points={{64.15,23},{78.225,23},{78.225,30},{90,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1.port_outside, thermInsideWall1) annotation (Line( + points={{23,64.2502},{23,76.3751},{30,76.3751},{30,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{-31,62.1},{-31,70},{90,70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-64.25,18.5333},{-80,18.5333},{-80,-60},{-99.5,-60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, thermRoom) annotation (Line( + points={{-25.1,-15.9},{-25.1,0.05},{-20,0.05},{-20,20}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall3.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{25,-54},{25,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,-2},{-40,-2},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-48,48},{-40,48},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-31,58},{-31,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-66,48},{-80,48},{-80,84},{-90,84},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.port_outside, thermOutside) annotation (Line( + points={{-64.25,-2},{-80,-2},{-80,84},{-90,84},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) + annotation (Line( + points={{-99.5,60},{-80,60},{-80,23.6667},{-65.5,23.6667}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(AirExchangePort, NaturalVentilation.InPort1) annotation (Line( + points={{-100,-19.5},{-80,-19.5},{-80,-46.4},{-67,-46.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-68,-40},{-80,-40},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermCeiling, thermCeiling) annotation (Line( + points={{90,70},{85,70},{85,70},{90,70}}, + color={191,0,0}, + smooth=Smooth.None)); + + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/1OW_2IWl_2IWs_1Gr_Pa.png", Width = 5, Length = 5)), + Icon(graphics={ + Rectangle( + extent={{6,65},{-6,-65}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + origin={74,-3}, + rotation=180), + Rectangle( + extent={{-60,68},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,68},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,0},{-60,-50}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow1), + Rectangle( + extent={{80,80},{-80,68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{80,68},{68,26}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Line( + points={{-46,68},{-46,38}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-60,54},{-30,54}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-56,60},{62,48}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{38,54},{68,54}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-126,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,64}, + rotation=90, + textString="length"), + Line( + points={{-46,-38},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{68,26},{54,26}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{58,-58},{58,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{59,6},{-59,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-21}, + rotation=90, + textString="length_b"), + Rectangle( + extent={{-80,40},{-60,20}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor1), + Text( + extent={{-10,4},{10,-4}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D1", + origin={-70,30}, + rotation=90, + visible= withDoor1), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-70,-25}, + rotation=90, + textString="Win1", + visible= withWindow1), + Line( + points={{58,26},{58,18}}, + color={255,255,255}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 1 outer wall, 2 inner walls load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow1IwL2IwS1Gr1Uf1; + + model Ow2IwL1IwS1Lf1At1Ro1 + "2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow2 = true "Window 2" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow2)); + parameter Boolean withWindow3 = true "Window 3 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow3)); + parameter Boolean withDoor2 = true "Door 2" annotation (Dialog( group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real eps_door_OD2=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to lower floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling to attic type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + // Saddle roof type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long*room_height_long - room_length*(room_width_long-room_width_short)*(room_height_long-room_height_short)*0.5; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) annotation (Placement(transformation(extent={{-64, + -26},{-54,32}}, rotation=0))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + withWindow=withWindow2, + withDoor=withDoor2, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + WindowType=Type_Win, + WallType=Type_OW, + ISOrientation=1, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={-29,59}, + extent={{-5.00001,-29},{5.00001,29}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1( + T0=T0_IW1, + outside=false, + WallType=Type_IWload, + wall_length=room_length, + wall_height=room_height_long, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,4.00001}, + extent={{-4.99999,-30},{5,30}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={32,-59}, + extent={{-4.99998,-28},{4.99998,28}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={22,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-27,-60}, + extent={{-2.00002,-11},{2.00001,11}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{80,0},{100,20}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-50},{-89.5,-30}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,20},{-89.5,40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation ( + Placement(transformation( + origin={44.5,101}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,60},{100,80}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), + iconTransformation(extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement( + transformation(extent={{10,10},{30,30}}), iconTransformation( + extent={{10,10},{30,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-20,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-20.5,98.5}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win) annotation (Placement(transformation( + origin={55,59}, + extent={{-2.99995,-17},{2.99997,17}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,36},{-54, + 44}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-70,-68},{-46,-56}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-8,-58},{2,-48}}), iconTransformation(extent= + {{-32,-34},{-12,-14}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL, + h=room_width_long) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-6,-67}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + + else + connect(floor.port_outside, thermFloor) annotation (Line( + points={{-27,-62.1},{-27,-82},{-30,-82},{-30,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-27,-58},{-27,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + end if; + + connect(outside_wall1.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{-64.25,24.2667},{-80,24.2667},{-80,-40},{-99.5,-40}}, + color={0,0,127})); + connect(inside_wall2.port_outside, thermInsideWall2) annotation (Line( + points={{32,-64.25},{32,-72},{30,-72},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermInsideWall2,thermInsideWall2) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1.port_outside, thermInsideWall1) annotation (Line( + points={{66.25,4.00001},{90,4.00001},{90,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{22,62.1},{22,70},{90,70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{-7.73333,64.25},{-7.73333,68},{-7.73333,70},{-80,70},{-80, + -40},{-99.5,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(airload.port, Tair.port) annotation (Line( + points={{1,-12},{-6,-12},{-6,-40},{24,-40},{24,-13}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermOutside,infiltrationRate.port_a) annotation (Line( + points={{-90,90},{-90,80},{-80,80},{-80,40},{-72,40},{-72,40}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) + annotation (Line( + points={{-99.5,30},{-65.5,30},{-65.5,29.5833}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) + annotation (Line( + points={{-2.41667,65.5},{-2.41667,70},{44.5,70},{44.5,92},{44.5,101}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{70.5833,62.8999},{70.5833,70},{74,70},{74,100}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(roof.port_outside, thermOutside) annotation (Line( + points={{55,62.1499},{55,70},{-80,70},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.port_outside, thermOutside) annotation (Line( + points={{-64.25,3},{-70,2},{-80,2},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.port_outside, thermOutside) annotation (Line( + points={{-29,64.25},{-29,70},{-80,70},{-80,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,3},{-40,3},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-29,54},{-29,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1, + -35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{22,58},{22,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{55,56},{55,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, thermRoom) annotation (Line( + points={{-25.1,-15.9},{-25.1,6},{-20,6},{-20,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{56,4.00001},{40,4.00001},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{32,-54},{32,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-54,40},{-40,40},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-67,-46.4},{-80,-46.4},{-80,70},{-20,70},{-20,100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-68,-40},{-80,-40},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{67.4667,62.1499},{67.4667,70},{-80,70},{-80,-40},{-99.5, + -40}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(floor_FH.port_b, thermFloor1) + annotation (Line( + points={{-7.6,-64.3},{-7.6,-53},{-3,-53}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor_FH.port_a, thermFloor) annotation (Line( + points={{-7.6,-69.7001},{-7.6,-90},{-30,-90}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/OW2_1IWl_1IWs_1Pa_1At1Ro.png", Width = 5, Length = 5)), + Icon(graphics={ + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,80},{-50,60}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow2), + Rectangle( + extent={{6,64},{-6,-64}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + origin={74,-4}, + rotation=0), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor2), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D2", + visible= withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible= withWindow2), + Text( + extent={{-56,52},{64,40}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{38,46},{68,46}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-60,46},{-30,46}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-120,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,56}, + rotation=90, + textString="length"), + Line( + points={{-46,60},{-46,30}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-46,-42},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Rectangle( + extent={{-80,30},{-60,-20}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow3), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,5}, + rotation=90, + visible= withWindow3)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow2IwL1IwS1Lf1At1Ro1; + + model Ow2IwL2IwS1Lf1At1Ro1 + "2 outer walls, 2 inner walls load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1a=295.15 "IW1a" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1b=295.15 "IW1b" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_lengthb=2 "length_b " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow2 = true "Window 2" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow2)); + parameter Boolean withWindow3 = true "Window 3 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow3)); + parameter Boolean withDoor2 = true "Door 2" annotation (Dialog( group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=0 "U-value" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); + parameter Real eps_door_OD2=0 "eps" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to lower floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling to attic type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + // Saddle roof type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long*room_height_long - room_length*(room_width_long-room_width_short)*(room_height_long-room_height_short)*0.5; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) annotation (Placement(transformation(extent={{-64, + -24},{-54,32}}, rotation=0))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + withWindow=withWindow2, + withDoor=withDoor2, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + WallType=Type_OW, + WindowType=Type_Win, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={-25,58}, + extent={{-6,-33},{6,33}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1a( + T0=T0_IW1a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height_long, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={60,19}, + extent={{-2,-15},{2,15}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={28,-60}, + extent={{-4.00002,-26},{4.00001,26}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={28,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-24,-60}, + extent={{-1.99999,-10},{1.99999,10}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0), iconTransformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1a + annotation (Placement(transformation(extent={{80,0},{100,20}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-60},{-89.5,-40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,20},{-89.5,40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation ( + Placement(transformation( + origin={44.5,101}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,40},{100,60}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), + iconTransformation(extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement( + transformation(extent={{10,10},{30,30}}), iconTransformation( + extent={{10,10},{30,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-28,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-26.5,96.5}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation ( + Placement(transformation(extent={{-40,-100},{-20,-80}}), + iconTransformation(extent={{-40,-100},{-20,-80}}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win) annotation (Placement(transformation( + origin={59,59}, + extent={{-3.00001,-17},{3.00002,17}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + AixLib.Building.Components.Walls.Wall inside_wall1b( + T0=T0_IW1b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height_long, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={60,-19}, + extent={{-2,-15},{2,15}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1b + annotation (Placement(transformation(extent={{80,-40},{100,-20}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{22,-20},{36,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,42},{-54, + 50}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-70,-66},{-46,-54}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-8,-58},{2,-48}}), iconTransformation(extent= + {{-32,-34},{-12,-14}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL, + h=room_width_long) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-6,-67}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + connect(floor_FH.port_b, thermFloor1) + annotation (Line( + points={{-7.6,-64.3},{-7.6,-53},{-3,-53}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(thermFloor,floor_FH.port_a) annotation (Line( + points={{-30,-90},{-6,-90},{-6,-69.7001},{-7.6,-69.7001}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + else + connect(floor.port_outside, thermFloor) annotation (Line( + points={{-24,-62.1},{-24,-74.5},{-30,-74.5},{-30,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-24,-58},{-24,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + end if; + + connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) + annotation (Line(points={{-65.5,29.6667},{-80,29.6667},{-80,30},{ + -99.5,30}}, + color={0,0,0})); + connect(inside_wall2.port_outside, thermInsideWall2) annotation (Line( + points={{28,-64.2},{28,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermInsideWall2,thermInsideWall2) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{-0.8,64.3},{-0.8,74},{-80,74},{-80,-50},{-99.5,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(inside_wall1b.port_outside, thermInsideWall1b) annotation (Line( + points={{62.1,-19},{90,-19},{90,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1a.port_outside, thermInsideWall1a) annotation (Line( + points={{62.1,19},{84,19},{84,20},{90,20},{90,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, Tair.port) annotation (Line( + points={{1,-12},{-6,-12},{-6,-40},{22,-40},{22,-13}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermRoom, thermStar_Demux.therm) annotation (Line( + points={{-20,20},{-20,6},{-25.1,6},{-25.1,-15.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-72,46},{-80,46},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.port_outside, thermOutside) annotation (Line( + points={{-64.25,4},{-80,4},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.port_outside, thermOutside) annotation (Line( + points={{-25,64.3},{-25,74},{-80,74},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.port_outside, thermOutside) annotation (Line( + points={{59,62.15},{59,74},{-80,74},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{74.5833,62.9},{74.5833,92},{74,92},{74,100}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{28,62.1},{28,62.1},{28,74},{90,74},{90,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) + annotation (Line( + points={{5.25,65.8},{5.25,74},{44.5,74},{44.5,101}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,4},{-40,4},{-40,-40},{-20,-40},{-20,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{28,-56},{28,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,-19},{40,-19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-25,52},{-25,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{59,56},{59,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{28,58},{28,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-64.25,24.5333},{-80,24.5333},{-80,-50},{-99.5,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall1a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,19},{40,19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-54,46},{-40,46},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-67,-46.4},{-80,-46.4},{-80,74},{-28,74},{-28,100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-68,-40},{-80,-40},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{71.4667,62.15},{71.4667,74},{-80,74},{-80,-50},{-99.5,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/OW2_2IWl_1IWs_1Pa_1At1Ro.png", Width = 5, Length = 5)), + Icon(graphics={ + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,80},{-50,60}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow2), + Rectangle( + extent={{80,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{80,60},{68,8}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,30},{-60,-20}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow3), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Text( + extent={{-56,52},{64,40}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{38,46},{68,46}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-46,60},{-46,30}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-60,46},{-30,46}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-120,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,56}, + rotation=90, + textString="length"), + Line( + points={{-46,-42},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible= withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible= withWindow2), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,5}, + rotation=90, + visible= withWindow3), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D2", + visible= withDoor2), + Line( + points={{68,8},{54,8}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{58,8},{58,0}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{50,6},{-50,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-30}, + rotation=90, + textString="length_b"), + Line( + points={{58,-62},{58,-68}}, + color={255,255,255}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 2 outer walls, 2 inner walls load towards two different rooms but with the same orientation, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow2IwL2IwS1Lf1At1Ro1; + + model Ow1IwL2IwS1Lf1At1Ro1 + "1 outer wall, 2 inner walls load, 2 inner walls simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2a=295.15 "IW2a" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW2b=295.15 "IW2b" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IW3=295.15 "IW3" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_length=2 "length " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_lengthb=2 "length_b " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow3 = true "Window 3 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = if withWindow3 then true else false)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 + "Outside temperature at which the heating activates" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 10 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.02 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if + TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor to lower floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling to attic type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + // Saddle roof type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long*room_height_long - room_length*(room_width_long-room_width_short)*(room_height_long-room_height_short)*0.5; + + public + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) annotation (Placement(transformation(extent={{-64, + -24},{-54,34}}, rotation=0))); + AixLib.Building.Components.Walls.Wall inner_wall1( + T0=T0_IW1, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-14,58}, + extent={{-3.99997,-22},{3.99999,22}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall2a( + T0=T0_IW2a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height_long, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,19}, + extent={{-3,-15},{3,15}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall3( + T0=T0_IW3, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + + room_width_short/room_width_long*(room_height_long - + room_height_short)), + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={20,-60}, + extent={{-4,-24},{4,24}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={28,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation ( + Placement(transformation( + origin={-24,-60}, + extent={{-1.99999,-10},{1.99999,10}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall3 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}, + rotation=0), iconTransformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2a + annotation (Placement(transformation(extent={{80,0},{100,20}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-60},{-89.5,-40}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-109.5,20},{-89.5,40}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort + annotation (Placement(transformation( + origin={-100,-9}, + extent={{-10,-10},{10,10}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,40},{100,60}}, rotation= + 0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), + iconTransformation(extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement( + transformation(extent={{10,10},{30,30}}), iconTransformation( + extent={{10,10},{30,30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation ( + Placement(transformation(extent={{-40,-100},{-20,-80}}), + iconTransformation(extent={{-40,-100},{-20,-80}}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win, + ISOrientation=1) annotation (Placement(transformation( + origin={58,59}, + extent={{-2.99997,-16},{2.99999,16}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + AixLib.Building.Components.Walls.Wall inside_wall2b( + T0=T0_IW2b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height_long, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,-20}, + extent={{-2.99998,-16},{2.99998,16}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2b + annotation (Placement(transformation(extent={{80,-40},{100,-20}}, + rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{-20,80},{0,100}}), + iconTransformation(extent={{-20,80},{0,100}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,52},{-54, + 60}}))); + AixLib.Building.Components.DryAir.DynamicVentilation + dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation annotation (Placement( + transformation(extent={{-70,-66},{-46,-54}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-68,-50}, + {-48,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if + withFloorHeating + "thermal connector for floor heating" annotation (Placement( + transformation(extent={{-8,-58},{2,-48}}), iconTransformation(extent= + {{-32,-34},{-12,-14}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + l=room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL, + h=room_width_long) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-6,-67}, + extent={{-3.00007,16},{3,-16}}, + rotation=90))); + equation + + // Connect equations for dynamic ventilation + if withDynamicVentilation then + connect(thermOutside, dynamicVentilation.port_outside); + connect(dynamicVentilation.port_inside, airload.port); + end if; + + //Connect floor for cases with or without floor heating + if withFloorHeating then + connect(floor_FH.port_b, thermFloor1) + annotation (Line( + points={{-7.6,-64.3},{-7.6,-53},{-3,-53}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(thermFloor,floor_FH.port_a) annotation (Line( + points={{-30,-90},{-7.6,-90},{-7.6,-69.7001}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + else + connect(floor.port_outside, thermFloor) annotation (Line( + points={{-24,-62.1},{-24,-74.5},{-30,-74.5},{-30,-90}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-24,-58},{-24,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None, + pattern=LinePattern.Dash)); + end if; + + connect(outside_wall1.WindSpeedPort,WindSpeedPort) annotation (Line( + points={{-64.25,26.2667},{-80,26.2667},{-80,-50},{-99.5,-50}}, + color={0,0,127})); + connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) + annotation (Line(points={{-65.5,31.5833},{-80,31.5833},{-80,30},{ + -99.5,30}}, + color={0,0,0})); + connect(inside_wall3.port_outside, thermInsideWall3) annotation (Line( + points={{20,-64.2},{20,-74},{30,-74},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermInsideWall3,thermInsideWall3) annotation (Line( + points={{30,-90},{30,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.port_outside, thermCeiling) annotation (Line( + points={{28,62.1},{28,72},{92,72},{92,50},{90,50}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2b.port_outside, thermInsideWall2b) annotation (Line( + points={{64.15,-20},{90,-20},{90,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2a.port_outside, thermInsideWall2a) annotation (Line( + points={{64.15,19},{84,19},{84,20},{90,20},{90,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inner_wall1.port_outside, thermInsideWall1) annotation (Line( + points={{-14,62.2},{-14,90},{-10,90}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(thermOutside, thermOutside) annotation (Line( + points={{-90,90},{-90,84},{-90,84},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, Tair.port) annotation (Line( + points={{1,-12},{-6,-12},{-6,-40},{24,-40},{24,-13}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-72,56},{-72,56},{-80,56},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.port_outside, thermOutside) annotation (Line( + points={{-64.25,5},{-80,5},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{72.6667,62.9},{72.6667,72},{74,72},{74,100}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(roof.port_outside, thermOutside) annotation (Line( + points={{58,62.15},{58,72},{-80,72},{-80,82},{-90,82},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall2b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,-20},{40,-20},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inside_wall2a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,19},{40,19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{58,56},{58,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{28,58},{28,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(inner_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-14,54},{-14,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-54,56},{-40,56},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,5},{-40,5},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(inside_wall3.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{20,-56},{20,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(thermRoom, thermStar_Demux.therm) annotation (Line( + points={{-20,20},{-20,3},{-25.1,3},{-25.1,-15.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-25.1,-15.9},{-25.1,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-67,-46.4},{-80,-46.4},{-80,-9},{-100,-9}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-68,-40},{-80,-40},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-48,-40},{-6,-40},{-6,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{69.7333,62.15},{69.7333,72},{-80,72},{-80,-50},{-99.5,-50}}, + color={0,0,127}, + smooth=Smooth.None)); + + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/OW1_2IWl_2IWs_1Pa_1At1Ro.png", Width = 5, Length = 5)), + Icon(graphics={ + Rectangle( + extent={{-80,80},{80,68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{80,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,68},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,68},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-60,0}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow3), + Rectangle( + extent={{80,68},{68,12}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,25}, + rotation=90, + visible= withWindow3), + Line( + points={{38,54},{68,54}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-56,60},{62,48}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{-46,68},{-46,38}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{-60,54},{-30,54}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{-126,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,64}, + rotation=90, + textString="length"), + Line( + points={{-46,-42},{-46,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{68,12},{54,12}}, + color={255,255,255}, + smooth=Smooth.None), + Text( + extent={{53,6},{-53,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-27}, + rotation=90, + textString="length_b"), + Line( + points={{58,-58},{58,-68}}, + color={255,255,255}, + smooth=Smooth.None), + Line( + points={{58,12},{58,2}}, + color={255,255,255}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a room with 1 outer wall, 2 inner walls load, 2 inner walls simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Ow1IwL2IwS1Lf1At1Ro1; + + model Attic_Ro2Lf5 + "Attic with 2 saddle roofs and a floor toward 5 rooms on the lower floor, with all other walls towards the outside" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Modelica.SIunits.Temperature T0_air=283.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO1=282.15 "RO1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO2=282.15 "RO2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW1=282.15 "OW1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW2=282.15 "OW2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL1=284.15 "FL1" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL2=284.15 "FL2" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL3=284.15 "FL3" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL4=284.15 "FL4" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL5=284.15 "FL5" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + //////////room geometry + parameter Modelica.SIunits.Length length=2 "length " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Length room1_length=2 "l1 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Length room2_length=2 "l2 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Length room3_length=2 "l3 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Length room4_length=2 "l4 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Length room5_length=2 "l5 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true)); + parameter Modelica.SIunits.Length width=2 "width " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length room1_width=2 "w1 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length room2_width=2 "w2 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length room3_width=2 "w3 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length room4_width=2 "w4 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length room5_width=2 "w5 " annotation (Dialog(group = "Dimensions", absoluteWidth=6, descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width1 = 2 "wRO1" annotation (Dialog(group = "Dimensions", absoluteWidth=28, descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length roof_width2 = 2 "wRO2" annotation (Dialog(group = "Dimensions", absoluteWidth=28, descriptionLabel = true)); + parameter Modelica.SIunits.Angle alfa = Modelica.SIunits.Conversions.from_deg(90) "alfa" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow1 = false "Window 1 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO1=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow1)); + parameter Boolean withWindow2 = false "Window 2 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO2=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow2)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + parameter Modelica.SIunits.Length p = (width + roof_width2 + roof_width1)* 0.5; // semi perimeter + parameter Modelica.SIunits.Area VerticalWall_Area = sqrt(p * (p - width)*(p -roof_width2)*(p-roof_width1)); // Heron's formula + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 + then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if + TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + // Floor to lower floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + // Saddle roof type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleAttic_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleAttic_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleAttic_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleAttic_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=roof_width1*roof_width2*sin(alfa)*0.5*length; + + public + AixLib.Building.Components.Walls.Wall roof1( + withDoor=false, + door_height=0, + door_width=0, + T0=T0_RO1, + solar_absorptance=solar_absorptance_RO, + withWindow=withWindow1, + windowarea=windowarea_RO1, + wall_length=length, + wall_height=roof_width1, + WallType=Type_RO, + WindowType=Type_Win, + ISOrientation=1) annotation (Placement(transformation( + extent={{-5.00001,-29},{5.00001,29}}, + rotation=270, + origin={-41,59}))); + AixLib.Building.Components.Walls.Wall floorRoom2( + T0=T0_FL2, + WallType=Type_FL, + wall_length=room2_length, + wall_height=room2_width, + withWindow=false, + ISOrientation=2, + outside=false, + withDoor=false) annotation (Placement(transformation( + origin={-29,-40}, + extent={{-1.99999,-13},{1.99999,13}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start= + T0_air)) annotation (Placement(transformation(extent={{0,-20}, + {20,0}}, rotation=0))); + AixLib.Building.Components.Walls.Wall floorRoom1( + T0=T0_FL1, + WallType=Type_FL, + wall_length=room1_length, + wall_height=room1_width, + withWindow=false, + ISOrientation=2, + outside=false, + withDoor=false) annotation (Placement(transformation( + origin={-60,-40}, + extent={{-2,-12},{2,12}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-10},{-89.5,10}}, + rotation=0), iconTransformation(extent={{-109.5,-10},{-89.5,10}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RO1 annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-45.5,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-50,90}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort + annotation (Placement(transformation( + origin={-100,17}, + extent={{-10,-10},{10,10}}, + rotation=0), iconTransformation(extent={{-110,30},{-90,50}}))); + AixLib.Building.Components.Walls.Wall roof2( + solar_absorptance=solar_absorptance_RO, + withDoor=false, + door_height=0, + door_width=0, + T0=T0_RO2, + wall_height=roof_width2, + withWindow=withWindow2, + windowarea=windowarea_RO2, + wall_length=length, + WallType=Type_RO, + WindowType=Type_Win, + ISOrientation=1) annotation (Placement(transformation( + origin={47,59}, + extent={{-5,-27},{5,27}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RO2 annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={48,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={50,90}))); + AixLib.Building.Components.Walls.Wall floorRoom3( + T0=T0_FL3, + WallType=Type_FL, + wall_length=room3_length, + wall_height=room3_width, + withWindow=false, + ISOrientation=2, + outside=false, + withDoor=false) annotation (Placement(transformation( + origin={3,-40}, + extent={{-1.99999,-13},{1.99999,13}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floorRoom4( + T0=T0_FL4, + WallType=Type_FL, + wall_length=room4_length, + wall_height=room4_width, + withWindow=false, + ISOrientation=2, + outside=false, + withDoor=false) annotation (Placement(transformation( + origin={35,-40}, + extent={{-1.99998,-13},{1.99999,13}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floorRoom5( + T0=T0_FL5, + WallType=Type_FL, + wall_length=room5_length, + wall_height=room5_width, + withWindow=false, + ISOrientation=2, + outside=false, + withDoor=false) annotation (Placement(transformation( + origin={69,-40}, + extent={{-1.99998,-13},{1.99998,13}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom1 + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom2 + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom3 + annotation (Placement(transformation(extent={{-20,-100},{0,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom4 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom5 + annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) + annotation (Placement(transformation(extent={{-62,0},{-46,16}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,-8},{10,8}}, + rotation=90, + origin={-30,-10}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation( + V=room_V) annotation (Placement(transformation(extent={{-64,16}, + {-44,36}}))); + public + AixLib.Building.Components.Walls.Wall OW1( + withDoor=false, + door_height=0, + door_width=0, + windowarea=windowarea_RO1, + WindowType=Type_Win, + ISOrientation=1, + WallType=Type_OW, + wall_length=sqrt(VerticalWall_Area), + wall_height=sqrt(VerticalWall_Area), + solar_absorptance=solar_absorptance_OW, + withWindow=false, + T0=T0_OW1) annotation (Placement(transformation( + extent={{-4,-21},{4,21}}, + rotation=0, + origin={-75,-22}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation ( + Placement(transformation(extent={{-116,-30},{-96,-10}}))); + public + AixLib.Building.Components.Walls.Wall OW2( + withDoor=false, + door_height=0, + door_width=0, + windowarea=windowarea_RO1, + WindowType=Type_Win, + ISOrientation=1, + WallType=Type_OW, + wall_length=sqrt(VerticalWall_Area), + wall_height=sqrt(VerticalWall_Area), + solar_absorptance=solar_absorptance_OW, + withWindow=false, + T0=T0_OW2) annotation (Placement(transformation( + extent={{-4,21},{4,-21}}, + rotation=180, + origin={85,-16}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-18}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermAttic annotation ( + Placement(transformation(extent={{8,8},{28,28}}), iconTransformation( + extent={{8,8},{28,28}}))); + equation + + connect(SolarRadiationPort_RO1, roof1.SolarRadiationPort) annotation (Line( + points={{-45.5,100},{-45.5,80},{-14.4167,80},{-14.4167,65.5}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(SolarRadiationPort_RO2, roof2.SolarRadiationPort) annotation (Line( + points={{48,100},{48,80},{71.75,80},{71.75,65.5}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(thermOutside, thermOutside) annotation (Line( + points={{-90,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-19.7333,64.25},{-19.7333,80},{-80,80},{-80,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(roof2.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{66.8,64.25},{66.8,80},{-80,80},{-80,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(floorRoom1.port_outside, thermRoom1) annotation (Line( + points={{-60,-42.1},{-60,-90},{-90,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom2.port_outside, thermRoom2) annotation (Line( + points={{-29,-42.1},{-29,-90},{-50,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermRoom3, floorRoom3.port_outside) annotation (Line( + points={{-10,-90},{3,-90},{3,-42.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermRoom4, floorRoom4.port_outside) annotation (Line( + points={{30,-90},{38,-90},{38,-70},{35,-70},{35,-42.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom5.port_outside, thermRoom5) annotation (Line( + points={{69,-42.1},{69,-84},{72,-84},{72,-88},{70,-88},{70,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, Tair.port) annotation (Line( + points={{1,-12},{-10,-12},{-10,8},{24,8},{24,-13}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-62,8},{-80,8},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-46,8},{-10,8},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-24.9,0.1},{-24.9,8},{-10,8},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof1.port_outside, thermOutside) annotation (Line( + points={{-41,64.25},{-41,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof2.port_outside, thermOutside) annotation (Line( + points={{47,64.25},{47,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom3.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{3,-38},{3,-28},{-30,-28},{-30,-19.4},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-60,-38},{-60,-28},{-30,-28},{-30,-19.4},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(floorRoom2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-29,-38},{-29,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom4.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{35,-38},{35,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(floorRoom5.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{69,-38},{69,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{47,54},{47,40},{60,40},{60,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-41,54},{-41,40},{60,40},{60,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-63,19.6},{-80,19.6},{-80,17},{-100,17}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-64,26},{-80,26},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-44,26},{-40,26},{-40,8},{-10,8},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(OW1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-71,-22},{-64,-22},{-64,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(OW1.port_outside, thermOutside) annotation (Line( + points={{-79.2,-22},{-86,-22},{-86,0},{-80,0},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(OW1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-79.2,-6.6},{-86,-6.6},{-86,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(OW1.SolarRadiationPort, SolarRadiationPort_OW1) annotation (Line( + points={{-80.2,-2.75},{-86,-2.75},{-86,-20},{-106,-20}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(OW2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{81,-16},{76,-16},{76,-28},{-29.9,-28},{-29.9,-19.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(OW2.port_outside, thermOutside) annotation (Line( + points={{89.2,-16},{100,-16},{100,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(OW2.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{89.2,-0.6},{100,-0.6},{100,-28},{-86,-28},{-86,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(OW2.SolarRadiationPort, SolarRadiationPort_OW2) annotation (Line( + points={{90.2,3.25},{100,3.25},{100,-18},{110,-18}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(airload.port, ThermAttic) annotation (Line( + points={{1,-12},{-4,-12},{-4,-10},{18,-10},{18,18}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/Attic_2Ro_5Rooms.png", Width = 5, Length = 5)), + Icon(graphics={Polygon( + points={{-58,-20},{16,54},{90,-20},{76,-20},{16,40},{-44,-20},{-58,-20}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Polygon( + points={{-24,0},{6,30},{-8,30},{-38,0},{-24,0}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow1), + Text( + extent={{-36,10},{12,22}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + textString="Win1", + visible= withWindow1), + Polygon( + points={{26,30},{56,0},{70,0},{40,30},{26,30}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow2), + Text( + extent={{22,10},{70,22}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible=withWindow2), + Text( + extent={{-44,-14},{74,-26}}, + lineColor={0,0,0}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{48,-20},{76,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-44,-20},{-20,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-62,-16},{12,58}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{16,54},{10,60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-58,-20},{-64,-14}}, + color={0,0,0}, + smooth=Smooth.None), + Text( + extent={{-40,52},{16,42}}, + lineColor={0,0,0}, + textString="wRO1"), + Line( + points={{3,-3},{-3,3}}, + color={0,0,0}, + smooth=Smooth.None, + origin={93,-17}, + rotation=90), + Line( + points={{-37,-37},{37,37}}, + color={0,0,0}, + smooth=Smooth.None, + origin={57,21}, + rotation=90), + Line( + points={{3,-3},{-3,3}}, + color={0,0,0}, + smooth=Smooth.None, + origin={19,57}, + rotation=90), + Text( + extent={{-28,5},{28,-5}}, + lineColor={0,0,0}, + origin={44,47}, + rotation=0, + textString="wRO2"), + Line( + points={{-44,-20},{-44,-24}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{76,-20},{76,-24}}, + color={0,0,0}, + smooth=Smooth.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), + graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for an attic with 2 saddle roofs and a floor toward 5 rooms on the lower floor, with all other walls towards the outside.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+

We also tested a model where the attic has just one floor, over the whole building and each room connects to this component through the ceiling. However the model didn't lead to the expected lower simulation times, on the contrary. This model is also more correct, as it is not realistic to think that every layer of the attic's floor has a single temperature.

+")); + end Attic_Ro2Lf5; + + annotation (Documentation(info=" +

Overview

+

Package for rooms for a one familiy dwelling.

+

Concept

+

The one family dwelling isn’t based on an existing building, but on a virtual two storey building with ten rooms and a saddle roof, which is typical for German houses. A core of six room types was developed to model the different rooms in the house: room types with two outer walls and room types with one outer wall. Some inner walls can face just one room, while others can face two rooms. Rooms on the ground floor are connected to the ground, while rooms on the upper floor have a saddle roof. The layout of the two floors is the same.

+


The room model is realized by aggregating together all the components in a model, parameterizing on a room level and referencing the parameter on the component level. In this way the number of parameters is reduced, e.g. for a simple rectangular room only three parameters are needed for the dimensions of all the walls: height, length, width.

+

The set of room types developed for the one family dwelling can, if necessary, be parameterized differently than the standard model or extended in order to build up specific house models. New sets of wall, window and door types can be developed, e.g. for older, not renovated buildings, and incorporated in the existing structure.

+", revisions=" +

+")); + end OFD; + + package MFD "Multiple Family Dweling" + extends Modelica.Icons.Package; + package OneApparment + extends Modelica.Icons.Package; + + model Livingroom_VoWo "Livingroom from the VoWo appartment" + import AixLib; + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW=295.15 "OW" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWChild=295.15 "IWChild" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWCorridor=290.15 + "IWCorridor" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBedroom=295.15 + "IWBedroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWNeighbour=295.15 + "IWNeighbour" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition + Type_IWNeigbour=if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_M_half() + else + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_L_half() + else if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_M_half() + else + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_L_half() + else if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_M_half() + else + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_M_half() + else + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=4.20*4.645*2.46; + + public + AixLib.Building.Components.Walls.Wall Wall_Neighbour( + T0=T0_IWNeighbour, + outside=false, + WallType=Type_IWNeigbour, + wall_length=4.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-80, + -24},{-68,54}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Corridor( + T0=T0_IWCorridor, + outside=false, + WallType=Type_IWload, + wall_length=1.54, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={19,-43}, + extent={{-4.99999,-31},{4.99998,31}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Children( + T0=T0_IWChild, + outside=false, + WallType=Type_IWload, + wall_length=4.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={75,14.9756}, + extent={{-7.00003,-39.0244},{7.00003,40.9756}}, + rotation=180))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-28,0},{-48,20}}, rotation=0))); + + AixLib.Building.Components.Walls.Wall outsideWall( + wall_length=4.645, + wall_height=2.46, + windowarea=3.99, + door_height=0.1, + door_width=0.1, + withWindow=true, + T0=T0_OW, + solar_absorptance=solar_absorptance_OW, + withDoor=false, + WallType=Type_OW, + WindowType=Type_Win) annotation (Placement(transformation( + origin={-14.9999,71}, + extent={{-13,-61.0001},{11,82.9999}}, + rotation=270))); + + AixLib.Building.Components.Walls.Wall Wall_Bedroom( + T0=T0_IWBedroom, + outside=false, + WallType=Type_IWload, + wall_length=3.105, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-45,-44}, + extent={{-3.99999,-25},{3.99998,25}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=4.2, + wall_height=4.645, + Model=1, + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={104,70}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=4.2, + wall_height=4.645, + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={104,32}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermRoom annotation ( + Placement(transformation(extent={{-12,4},{8,24}}), iconTransformation( + extent={{-12,4},{8,24}}))); + Utilities.Interfaces.Star StarInside1 annotation (Placement( + transformation(extent={{16,4},{36,24}}), iconTransformation( + extent={{16,4},{36,24}}))); + public + Utilities.Interfaces.SolarRad_in SolarRadiation_SE annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-66,134}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-160,120},{-140,140}}), + iconTransformation(extent={{-160,120},{-140,140}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation(extent={{-180,50},{-140,90}}),iconTransformation( + extent={{-160,70},{-140,90}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation(extent={{-180,10},{-140,50}}), + iconTransformation(extent={{-160,30}, + {-140,50}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-160,-120},{-140,-100}}), + iconTransformation(extent={{-160,-120},{-140,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-160,-150},{-140,-130}}), + iconTransformation(extent={{-160,-150},{-140,-130}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermChildren + annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}), + iconTransformation(extent={{-160,-90},{-140,-70}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}), + iconTransformation(extent={{-160,-60},{-140,-40}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBedroom + annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}), + iconTransformation(extent={{-160,-30},{-140,-10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermNeighbour + annotation (Placement(transformation(extent={{-160,0},{-140,20}}), + iconTransformation(extent={{-160,0},{-140,20}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,-84}, + {-46,-58}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=180, + origin={24,-14}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{-72,-112},{-46,-86}}))); + equation + + connect(outsideWall.SolarRadiationPort,SolarRadiation_SE) annotation (Line( + points={{62,87.6},{62,100},{-66,100},{-66,134}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(outsideWall.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{48.8,84.6},{48.8,100},{-86,100},{-86,30},{-160,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{104,72.1},{104,84},{134,84},{134,-56},{-86,-56},{-86, + -110},{-150,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, thermFloor) annotation (Line( + points={{104,29.9},{104,4},{134,4},{134,-56},{-86,-56},{-86,-140}, + {-150,-140}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Children.port_outside, thermChildren) annotation (Line( + points={{82.35,14},{104,14},{104,4},{134,4},{134,-80},{-150,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor.port_outside, thermCorridor) annotation (Line( + points={{19,-48.25},{19,-48.25},{19,-56},{-86,-56},{-86,-50},{ + -150,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bedroom.port_outside, thermBedroom) annotation (Line( + points={{-45,-48.2},{-45,-56},{-86,-56},{-86,-20},{-150,-20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Neighbour.port_outside, thermNeighbour) annotation (Line( + points={{-80.3,15},{-86,15},{-86,10},{-150,10}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-72,-71},{-86,-71},{-86,130},{-150,130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(ThermRoom, ThermRoom) annotation (Line( + points={{-2,14},{-7,14},{-7,14},{-2,14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.star, StarInside1) annotation (Line( + points={{13.6,-8.2},{13.6,3.2},{26,3.2},{26,14}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Wall_Children.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{68,14},{54,14},{54,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Corridor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{19,-38},{19,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bedroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-45,-40},{-45,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Neighbour.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-68,15},{-56,15},{-56,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-4,60},{-4,48},{-56,48},{-56,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{104,68},{104,58},{54,58},{54,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{104,34},{104,58},{54,58},{54,-32},{33.4,-32},{33.4,-14.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, ThermRoom) annotation (Line( + points={{13.9,-19.1},{13.9,-20},{-20,-20},{-20,14},{-2,14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, infiltrationRate.port_b) annotation (Line( + points={{-29,8},{-20,8},{-20,-71},{-46,-71}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-70.7,-107.32},{-86,-107.32},{-86,70},{-160,70}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-72,-99},{-86,-99},{-86,130},{-150,130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, ThermRoom) annotation (Line( + points={{-29,8},{-20,8},{-20,14},{-2,14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-46,-99},{-20,-99},{-20,8},{-29,8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.port_outside, thermOutside) annotation (Line( + points={{-4,84.6},{-4,100},{-86,100},{-86,130},{-150,130}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Livingroom.png")), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-170,-150},{170,150}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-170,-150},{170,150}}, + initialScale=0.1), graphics={ + Rectangle( + extent={{-62,60},{112,-92}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Rectangle( + extent={{38,72},{60,52}}, + lineColor={0,0,0}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,70},{58,54}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-56,-14},{104,-32}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Forward, + textString="Livingroom"), + Text( + extent={{42,-98},{92,-114}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Rectangle( + extent={{92,-88},{112,-118}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{94,-100},{96,-102}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Rectangle( + extent={{-62,84},{-42,54}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{-44,68},{-46,66}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Rectangle( + extent={{-160,-130},{-140,-150}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,-100},{-140,-120}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,-70},{-140,-90}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,-10},{-140,-30}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,20},{-140,0}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,140},{-140,120}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,-40},{-140,-60}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-160,90},{-140,28}}, + lineColor={0,0,0}, + lineThickness=0.5), + Line( + points={{44,62},{50,68}}, + color={255,255,255}, + thickness=1), + Line( + points={{44,58},{54,68}}, + color={255,255,255}, + thickness=1), + Line( + points={{48,58},{54,64}}, + color={255,255,255}, + thickness=1), + Text( + extent={{50,78},{100,62}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="OW")}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the livingroom.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Livingroom_VoWo; + + model Kitchen_VoWo "Kitchen from the VoWo appartment" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW=295.15 "OW" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBath=297.15 "IWBathroom" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWCorridor=290.15 + "IWCorridor" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWStraicase=288.15 + "IWStaircase" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() + else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() + else if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() + else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() + else if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=8.35*2.46; + public + AixLib.Building.Components.Walls.Wall Wall_Corridor1( + T0=T0_IWCorridor, + outside=false, + WallType=Type_IWsimple, + wall_length=2.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-3,30}, + extent={{-8,-51},{8,51}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Bath1( + T0=T0_IWBath, + outside=false, + WallType=Type_IWsimple, + wall_length=3.28, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-68, + -50},{-62,-12}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Staircase( + T0=T0_IWStraicase, + outside=false, + WallType=Type_IWload, + wall_length=3.94, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={45,-29}, + extent={{-7,-49},{7,49}}, + rotation=180))); + public + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-36,-16},{-16,4}}, rotation=0))); + + public + AixLib.Building.Components.Walls.Wall Wall_Bath2( + T0=T0_IWBath, + outside=false, + WallType=Type_IWsimple, + wall_length=0.44, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-46,-75}, + extent={{-2.99998,-16},{2.99998,16}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall outsideWall( + wall_length=1.8, + wall_height=2.46, + windowarea=0.75, + T0=T0_OW, + solar_absorptance=solar_absorptance_OW, + withWindow=true, + withDoor=false, + WallType=Type_OW, + WindowType=Type_Win) annotation (Placement(transformation( + origin={5,-99}, + extent={{-7,-45},{7,45}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Corridor2( + T0=T0_IWCorridor, + outside=false, + WallType=Type_IWsimple, + wall_length=0.6, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-68, + -2},{-64,24}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=sqrt(8.35), + wall_height=sqrt(8.35), + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={80,-72}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=sqrt(8.35), + wall_height=sqrt(8.35), + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={80,-100}, + extent={{-1.99984,-10},{1.99983,10}}, + rotation=90))); + public + Utilities.Interfaces.SolarRad_in SolarRadiation_NW annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-20,-150}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort + annotation (Placement(transformation(extent={{-130,56},{-90,96}}), + iconTransformation(extent={{-108,52},{-90,70}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation ( + Placement(transformation(extent={{-130,28},{-90,68}}), + iconTransformation(extent={{-108,20},{-90,38}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-108,80},{-88,100}}), + iconTransformation(extent={{-108,80},{-88,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{-110,-20},{-90,0}}), + iconTransformation(extent={{-110,-20},{-90,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermStaircase + annotation (Placement(transformation(extent={{-110,-60},{-90,-40}}), + iconTransformation(extent={{-110,-60},{-90,-40}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBath annotation ( + Placement(transformation(extent={{-110,-100},{-90,-80}}), + iconTransformation(extent={{-110,-100},{-90,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-110,-140},{-90,-120}}), + iconTransformation(extent={{-110,-140},{-90,-120}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-70,-160},{-50,-140}}), + iconTransformation(extent={{-70,-160},{-50,-140}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-42,72}, + {-18,96}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermRoom + annotation (Placement(transformation(extent={{-2,-18},{18,2}}))); + Utilities.Interfaces.Star StarRoom annotation (Placement( + transformation(extent={{-4,-48},{16,-28}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{10,-8},{-10,8}}, + rotation=180, + origin={-30,-40}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{-2,72},{22,96}}))); + equation + + connect(outsideWall.SolarRadiationPort, SolarRadiation_NW) + annotation (Line( + points={{-36.25,-108.1},{-36.25,-120},{-20,-120},{-20,-150}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(outsideWall.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-28,-106.35},{-28,-120},{-80,-120},{-80,48},{-110,48}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Wall_Corridor1.port_outside, thermCorridor) annotation (Line( + points={{-3,38.4},{-3,60},{-80,60},{-80,-10},{-100,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor2.port_outside, thermCorridor) annotation (Line( + points={{-68.1,11},{-80,11},{-80,-10},{-100,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Staircase.port_outside, thermStaircase) annotation (Line( + points={{52.35,-29},{100,-29},{100,-120},{-80,-120},{-80,-50},{-100,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bath2.port_outside, thermBath) annotation (Line( + points={{-46,-78.15},{-46,-90},{-100,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bath1.port_outside, thermBath) annotation (Line( + points={{-68.15,-31},{-80,-31},{-80,-90},{-100,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{80,-69.9},{80,-48},{100,-48},{100,-130},{-100,-130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, thermFloor) annotation (Line( + points={{80,-102.1},{80,-120},{-60,-120},{-60,-150}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-18,84},{-12,84},{-12,60},{-56,60},{-56,10},{-40,10},{-40,-8}, + {-35,-8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermCeiling, thermCeiling) annotation (Line( + points={{-100,-130},{-100,-130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-42,84},{-98,84},{-98,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.star, StarRoom) annotation (Line( + points={{-19.6,-45.8},{-12,-45.8},{-12,-38},{6,-38}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(airload.port, thermStar_Demux.therm) annotation (Line( + points={{-35,-8},{-40,-8},{-40,-20},{-12,-20},{-12,-34.9},{-19.9,-34.9}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bath1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-62,-31},{-52,-31},{-52,-39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-64,11},{-52,11},{-52,-40},{-46,-40},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Corridor1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-3,22},{-3,10},{-52,10},{-52,-39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bath2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-46,-72},{-46,-60},{-52,-60},{-52,-39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outsideWall.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{5,-92},{5,-60},{-52,-60},{-52,-39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Staircase.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{38,-29},{28,-29},{28,-60},{-52,-60},{-52,-39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{80,-98.0002},{80,-86},{28,-86},{28,-60},{-52,-60},{-52, + -39.9},{-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{80,-74},{80,-86},{28,-86},{28,-60},{-52,-60},{-52,-39.9}, + {-39.4,-39.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-0.8,76.32},{-12,76.32},{-12,60},{-80,60},{-80,76},{-110,76}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-2,84},{-12,84},{-12,60},{-98,60},{-98,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{22,84},{24,84},{24,60},{-56,60},{-56,10},{-40,10},{-40,-8},{ + -35,-8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.port_outside, thermOutside) annotation (Line( + points={{5,-106.35},{5,-120},{-80,-120},{-80,60},{-98,60},{-98,90}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(ThermRoom, airload.port) annotation (Line( + points={{8,-8},{-10,-8},{-10,-20},{-40,-20},{-40,-8},{-35,-8}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Kitchen.png")), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={ + Polygon( + points={{-60,58},{-60,-62},{-18,-62},{-18,-122},{100,-122},{ + 100,58},{-60,58}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Text( + extent={{-32,38},{84,4}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Forward, + textString="Kitchen"), + Rectangle( + extent={{-18,-114},{4,-134}}, + lineColor={0,0,0}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-16,-116},{2,-132}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-12,-128},{-2,-118}}, + color={255,255,255}, + thickness=1), + Line( + points={{-8,-128},{-2,-122}}, + color={255,255,255}, + thickness=1), + Line( + points={{-12,-124},{-6,-118}}, + color={255,255,255}, + thickness=1), + Text( + extent={{-6,-122},{44,-138}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="OW"), + Text( + extent={{12,76},{72,60}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Rectangle( + extent={{72,82},{92,52}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{74,70},{76,68}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Rectangle( + extent={{-70,-140},{-50,-160}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-120},{-90,-140}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-80},{-90,-100}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-40},{-90,-60}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,0},{-90,-20}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-108,72},{-88,18}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-108,100},{-88,80}}, + lineColor={0,0,0}, + lineThickness=0.5)}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the kitchen.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Kitchen_VoWo; + + model Corridor_VoWo "Corridor from the VoWo appartment" + import AixLib; + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=290.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_Staircase=288.15 + "IWStaircase" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWKitchen=295.15 + "IWKitchen" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBath=297.15 "IWBath" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBedroom=295.15 + "IWBedroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWLivingroom=295.15 + "IWLivingroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWChild=295.15 "IWChild" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() + else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() + else if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() + else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() + else if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=5.73*2.46; + public + AixLib.Building.Components.Walls.Wall Wall_Children( + T0=T0_IWChild, + outside=false, + WallType=Type_IWload, + wall_length=2.13, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={46,24}, + extent={{-3.99999,-24},{3.99999,24}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Kitchen2( + T0=T0_IWKitchen, + outside=false, + WallType=Type_IWsimple, + wall_length=2.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={52,-63}, + extent={{-5.00001,-30},{5.00001,30}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Bath( + T0=T0_IWBath, + outside=false, + WallType=Type_IWsimple, + wall_length=1.31, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-20,-99}, + extent={{-3.00001,-18},{3.00001,18}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Kitchen1( + T0=T0_IWKitchen, + outside=false, + WallType=Type_IWsimple, + wall_length=0.6, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-2,-74}, + extent={{-2,-12},{2,12}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall Wall_Bedroom( + T0=T0_IWBedroom, + outside=false, + WallType=Type_IWload, + wall_length=1.96, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-66, + -70},{-54,2}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Staircase( + T0=T0_Staircase, + outside=false, + WallType=Type_IWload, + wall_length=1.34, + wall_height=2.46, + withWindow=false, + withDoor=true, + U_door=30/31, + eps_door=0.95, + door_height=2) annotation (Placement(transformation( + origin={109,-32}, + extent={{-3.00013,-22},{5.0002,22}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall Wall_Livingroom( + T0=T0_IWLivingroom, + outside=false, + WallType=Type_IWload, + wall_length=1.25, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-28,24}, + extent={{-3.99999,-24},{3.99999,24}}, + rotation=270))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-12,-12},{-32,8}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=sqrt(5.73), + wall_height=sqrt(5.73), + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={117,80}, + extent={{-2,-15},{2,15}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=sqrt(5.73), + wall_height=sqrt(5.73), + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={118,55}, + extent={{-2.99998,-16},{2.99998,16}}, + rotation=90))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-44,60}, + {-18,86}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermStaircase + annotation (Placement(transformation(extent={{-112,70},{-92,90}}), + iconTransformation(extent={{-112,70},{-92,90}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermKitchen + annotation (Placement(transformation(extent={{-112,40},{-92,60}}), + iconTransformation(extent={{-112,40},{-92,60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBath annotation ( + Placement(transformation(extent={{-110,-50},{-90,-30}}), + iconTransformation(extent={{-110,-50},{-90,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBedroom + annotation (Placement(transformation(extent={{-110,-80},{-90,-60}}), + iconTransformation(extent={{-110,-80},{-90,-60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-110,-110},{-90,-90}}), + iconTransformation(extent={{-110,-110},{-90,-90}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-110,-140},{-90,-120}}), + iconTransformation(extent={{-110,-140},{-90,-120}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermLivingroom + annotation (Placement(transformation(extent={{-112,10},{-92,30}}), + iconTransformation(extent={{-112,10},{-92,30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermChild + annotation (Placement(transformation(extent={{-112,-20},{-92,0}}), + iconTransformation(extent={{-112,-20},{-92,0}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={46,-26}))); + equation + + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-18,73},{0,73},{0,-4},{-13,-4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Staircase.port_outside, thermStaircase) annotation (Line( + points={{112.2,-32},{140,-32},{140,-130},{-80,-130},{-80,80},{ + -102,80}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Kitchen2.port_outside, thermKitchen) annotation (Line( + points={{52,-68.25},{52,-130},{-80,-130},{-80,50},{-102,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermStaircase) annotation (Line( + points={{-44,73},{-80,73},{-80,80},{-102,80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen1.port_outside, thermKitchen) annotation (Line( + points={{0.1,-74},{20,-74},{20,-130},{-80,-130},{-80,50},{-102,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bath.port_outside, thermBath) annotation (Line( + points={{-20,-102.15},{-20,-130},{-80,-130},{-80,-40},{-100,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bedroom.port_outside, thermBedroom) annotation (Line( + points={{-66.3,-34},{-80,-34},{-80,-70},{-100,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{117,82.1},{117,96},{140,96},{140,-130},{-80,-130},{-80,-100}, + {-100,-100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, thermFloor) annotation (Line( + points={{118,51.85},{118,36},{140,36},{140,-130},{-100,-130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.port_outside, thermLivingroom) annotation (Line( + points={{-28,28.2},{-28,52},{-80,52},{-80,20},{-102,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Children.port_outside, thermChild) annotation (Line( + points={{46,28.2},{46,52},{-80,52},{-80,-10},{-102,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{52,-58},{52,-44.0875},{45.9,-44.0875},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Staircase.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{104,-32},{94,-32},{94,-44},{45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-4,-74},{-14,-74},{-14,-44},{45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bath.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-20,-96},{-20,-80},{-14,-80},{-14,-44},{45.9,-44},{45.9, + -35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bedroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-54,-34},{-40,-34},{-40,-80},{-14,-80},{-14,-44},{45.9,-44}, + {45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-28,20},{-28,12},{-40,12},{-40,-80},{-14,-80},{-14,-44}, + {45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Children.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{46,20},{46,10},{94,10},{94,-44},{45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{118,58},{118,64},{94,64},{94,-44},{45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{117,78},{117,64},{94,64},{94,-44},{45.9,-44},{45.9,-35.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(airload.port, thermStar_Demux.therm) annotation (Line( + points={{-13,-4},{40.9,-4},{40.9,-15.9}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Corridor.png")), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={ + Polygon( + points={{-60,60},{120,60},{120,-60},{20,-60},{20,-100},{-60,-100}, + {-60,-18},{-60,60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Text( + extent={{-26,6},{82,-26}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Forward, + textString="Corridor"), + Rectangle( + extent={{-110,-120},{-90,-140}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-90},{-90,-110}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-60},{-90,-80}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-30},{-90,-50}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-112,60},{-92,40}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-112,90},{-92,70}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{108,12},{128,-18}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{110,0},{112,-2}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Text( + extent={{78,38},{164,18}}, + lineColor={0,0,255}, + textString="Staircase"), + Rectangle( + extent={{-112,0},{-92,-20}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-112,30},{-92,10}}, + lineColor={0,0,0}, + lineThickness=0.5)}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the corridor.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Corridor_VoWo; + + model Bathroom_VoWo "Bathroom from the VoWo appartment" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=297.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_Corridor=290.15 + "IWCorridor" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWKitchen=295.15 + "IWKitchen" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBedroom=295.15 + "IWBedroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW=295.15 "OW" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() + else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() + else if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() + else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() + else if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() + else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() + else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=4.65*2.46; + + public + AixLib.Building.Components.Walls.Wall Wall_Corridor( + T0=T0_Corridor, + outside=false, + WallType=Type_IWsimple, + wall_length=1.31, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={7,37}, + extent={{-7,-39},{7,39}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Bedroom( + T0=T0_IWBedroom, + outside=false, + WallType=Type_IWload, + wall_length=3.28, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-60, + -76},{-46,8}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Kitchen1( + T0=T0_IWKitchen, + outside=false, + WallType=Type_IWsimple, + wall_length=3.28, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={58,-22}, + extent={{-6,-36},{6,36}}, + rotation=180))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-12,-26},{8,-6}}, rotation=0))); + + AixLib.Building.Components.Walls.Wall Wall_Kitchen2( + T0=T0_IWKitchen, + outside=false, + WallType=Type_IWsimple, + wall_length=0.44, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={77,-59}, + extent={{-3,-15},{3,15}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall outsideWall( + wall_height=2.46, + windowarea=0.75, + wall_length=1.75, + withWindow=true, + T0=T0_OW, + solar_absorptance=solar_absorptance_OW, + withDoor=false, + WallType=Type_OW, + WindowType=Type_Win) annotation (Placement(transformation( + origin={8,-105}, + extent={{-11,-66},{11,66}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=sqrt(4.65), + wall_height=sqrt(4.65), + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={106,-80}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=sqrt(4.65), + wall_height=sqrt(4.65), + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={106,-116}, + extent={{-1.99983,-10},{1.99984,10}}, + rotation=90))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-42,60}, + {-16,86}}))); + Utilities.Interfaces.SolarRad_in SolarRadiation_NW annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-56,-150}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation(extent={{-122,-30},{-82,10}}), iconTransformation(extent={{-110,12}, + {-94,28}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation(extent={{-122,0},{-82,40}}), iconTransformation( + extent={{-110,52},{-94,68}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-110,80},{-90,100}}), + iconTransformation(extent={{-110,80},{-90,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{-110,-20},{-90,0}}), + iconTransformation(extent={{-110,-20},{-90,0}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermKitchen + annotation (Placement(transformation(extent={{-110,-50},{-90,-30}}), + iconTransformation(extent={{-110,-50},{-90,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBedroom + annotation (Placement(transformation(extent={{-110,-80},{-90,-60}}), + iconTransformation(extent={{-110,-80},{-90,-60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-110,-110},{-90,-90}}), + iconTransformation(extent={{-110,-110},{-90,-90}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-110,-140},{-90,-120}}), + iconTransformation(extent={{-110,-140},{-90,-120}}))); + Utilities.Interfaces.Star StarRoom annotation (Placement( + transformation(extent={{10,-54},{30,-34}}), + iconTransformation(extent={{10,-54},{30,-34}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermRoom annotation ( + Placement(transformation(extent={{-28,-52},{-8,-32}}), + iconTransformation(extent={{-28,-52},{-8,-32}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={0,-68}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{16,68},{44,94}}))); + equation + + connect(outsideWall.SolarRadiationPort, SolarRadiation_NW) annotation (Line( + points={{-52.5,-119.3},{-52.5,-131.905},{-56,-131.905},{-56,-150}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(outsideWall.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-40.4,-116.55},{-40.4,-140},{-80,-140},{-80,-10},{-102,-10}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Wall_Corridor.port_outside, thermCorridor) annotation (Line( + points={{7,44.35},{7,60},{-80,60},{-80,-10},{-100,-10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen1.port_outside, thermKitchen) annotation (Line( + points={{64.3,-22},{94,-22},{94,60},{-80,60},{-80,-40},{-100,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen2.port_outside, thermKitchen) annotation (Line( + points={{77,-55.85},{94,-55.85},{94,60},{-80,60},{-80,-40},{-100,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bedroom.port_outside, thermBedroom) annotation (Line( + points={{-60.35,-34},{-80,-34},{-80,-70},{-100,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{106,-77.9},{106,-60},{134,-60},{134,-140},{-80,-140},{ + -80,-100},{-100,-100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, thermFloor) annotation (Line( + points={{106,-118.1},{106,-140},{-80,-140},{-80,-130},{-100,-130}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-42,73},{-80,73},{-80,90},{-100,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-16,73},{4,73},{4,60},{94,60},{94,16},{-36,16},{-36,-18},{ + -11,-18}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outsideWall.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{8,-94},{8,-84},{-0.1,-84},{-0.1,-77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bedroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-46,-34},{-36,-34},{-36,-84},{-0.1,-84},{-0.1,-77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{7,30},{7,16},{-36,16},{-36,-84},{-0.1,-84},{-0.1,-77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{52,-22},{40,-22},{40,16},{-36,16},{-36,-84},{-0.1,-84},{-0.1, + -77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Kitchen2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{77,-62},{77,-84},{-0.1,-84},{-0.1,-77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{106,-82},{106,-92},{76,-92},{76,-84},{-0.1,-84},{-0.1, + -77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{106,-114},{106,-92},{76,-92},{76,-84},{-0.1,-84},{-0.1, + -77.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(thermStar_Demux.therm, ThermRoom) annotation (Line( + points={{-5.1,-57.9},{-5.1,-42},{-18,-42}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.star, StarRoom) annotation (Line( + points={{5.8,-57.6},{5.8,-44},{20,-44}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(airload.port, thermStar_Demux.therm) annotation (Line( + points={{-11,-18},{-36,-18},{-36,-57.9},{-5.1,-57.9}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(AirExchangePort, NaturalVentilation.InPort1) annotation (Line( + points={{-102,20},{-80,20},{-80,60},{4,60},{4,72.68},{17.4,72.68}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermOutside,NaturalVentilation.port_a) annotation (Line( + points={{-100,90},{-80,90},{-80,60},{4,60},{4,81},{16,81}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, NaturalVentilation.port_b) annotation (Line( + points={{-11,-18},{-36,-18},{-36,16},{94,16},{94,60},{48,60},{48,81}, + {44,81}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.port_outside, thermOutside) annotation (Line( + points={{8,-116.55},{8,-140},{-80,-140},{-80,90},{-100,90}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Bath.png")), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={ + Polygon( + points={{-58,62},{-58,-118},{104,-118},{104,-58},{42,-58},{42,62},{-58, + 62}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Text( + extent={{-44,-108},{82,-58}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward, + textString="Bath"), + Rectangle( + extent={{-30,-108},{-8,-128}}, + lineColor={0,0,0}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-28,-110},{-10,-126}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-24,-122},{-14,-112}}, + color={255,255,255}, + thickness=1), + Line( + points={{-20,-122},{-14,-116}}, + color={255,255,255}, + thickness=1), + Line( + points={{-24,-118},{-18,-112}}, + color={255,255,255}, + thickness=1), + Text( + extent={{-20,-118},{30,-134}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="OW"), + Rectangle( + extent={{20,92},{40,62}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{22,80},{24,78}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Text( + extent={{36,84},{86,68}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Rectangle( + extent={{-110,-120},{-90,-140}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-90},{-90,-110}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-60},{-90,-80}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-30},{-90,-50}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,0},{-90,-20}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,68},{-90,12}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,100},{-90,80}}, + lineColor={0,0,0}, + lineThickness=0.5)}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the bathroom.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Bathroom_VoWo; + + model Bedroom_VoWo "Bedroom from the VoWo appartment" + import AixLib; + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW=295.15 "OW" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWLivingroom=295.15 + "IWLivingroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWCorridor=290.15 + "IWCorridor" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWBathroom=297.15 + "IWBathroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWNeighbour=295.15 + "IWNeighbour" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + parameter AixLib.DataBase.Walls.WallBaseDataDefinition + Type_IWNeigbour=if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_M_half() + else + AixLib.DataBase.Walls.EnEV2009.IW.IWneighbour_EnEV2009_L_half() + else if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_M_half() + else + AixLib.DataBase.Walls.EnEV2002.IW.IWneighbour_EnEV2002_L_half() + else if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_M_half() + else + AixLib.DataBase.Walls.WSchV1995.IW.IWneighbour_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_M_half() + else + AixLib.DataBase.Walls.WSchV1984.IW.IWneighbour_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=3.105*5.30*2.46; + + public + AixLib.Building.Components.Walls.Wall Wall_Livingroom( + T0=T0_IWLivingroom, + outside=false, + WallType=Type_IWload, + wall_length=3.105, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-10,42}, + extent={{-7.99999,-48},{7.99999,48}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Neighbour( + T0=T0_IWNeighbour, + outside=false, + WallType=Type_IWNeigbour, + wall_length=5.3, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-74, + -58},{-60,20}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Bath( + T0=T0_IWBathroom, + outside=false, + WallType=Type_IWload, + wall_length=3.28, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={61,-40}, + extent={{-4.99999,-28},{4.99999,28}}, + rotation=180))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{30,-2},{10,18}}, rotation=0))); + + AixLib.Building.Components.Walls.Wall outsideWall( + wall_length=3.105, + wall_height=2.46, + windowarea=1.84, + withWindow=true, + T0=T0_OW, + solar_absorptance=solar_absorptance_OW, + WallType=Type_OW, + WindowType=Type_Win, + outside=true, + withDoor=false) annotation (Placement(transformation( + origin={-4,-92}, + extent={{-10,-60},{10,60}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=3.105, + wall_height=5.30, + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={96,-62}, + extent={{-2,-12},{2,12}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=3.105, + wall_height=5.30, + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={96,-100}, + extent={{-1.99983,-10},{1.99984,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Corridor( + T0=T0_IWCorridor, + outside=false, + WallType=Type_IWload, + wall_length=1.96, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={59,16}, + extent={{-3.00002,-16},{2.99997,16}}, + rotation=180))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-44,80}, + {-18,106}}))); + Utilities.Interfaces.SolarRad_in SolarRadiation_NW annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-60,-150}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation(extent={{-128,-24},{-88,16}}), iconTransformation(extent={{-110,20}, + {-90,40}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation(extent={{-130,30},{-90,70}}),iconTransformation( + extent={{-110,50},{-90,70}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-110,80},{-90,100}}), + iconTransformation(extent={{-110,80},{-90,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermLivingroom + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}), + iconTransformation(extent={{-110,-10},{-90,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{-110,-40},{-90,-20}}), + iconTransformation(extent={{-110,-40},{-90,-20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermBath annotation ( + Placement(transformation(extent={{-110,-70},{-90,-50}}), + iconTransformation(extent={{-110,-70},{-90,-50}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-110,-130},{-90,-110}}), + iconTransformation(extent={{-110,-130},{-90,-110}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-110,-160},{-90,-140}}), + iconTransformation(extent={{-110,-160},{-90,-140}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermNeigbour + annotation (Placement(transformation(extent={{-110,-100},{-90,-80}}), + iconTransformation(extent={{-110,-100},{-90,-80}}))); + Utilities.Interfaces.Star StarRoom annotation (Placement( + transformation(extent={{18,-44},{38,-24}}), + iconTransformation(extent={{18,-44},{38,-24}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermRoom annotation ( + Placement(transformation(extent={{-20,-46},{0,-26}}), + iconTransformation(extent={{-20,-46},{0,-26}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={14,-60}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{66,72},{94,98}}))); + equation + + connect(outsideWall.SolarRadiationPort, SolarRadiation_NW) annotation (Line( + points={{-59,-105},{-59,-118.691},{-60,-118.691},{-60,-150}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(outsideWall.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-48,-102.5},{-48,-130},{-80,-130},{-80,-4},{-108,-4}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-44,93},{-61.35,93},{-61.35,90},{-100,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-18,93},{-18,92},{44,92},{44,6},{29,6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.port_outside, thermLivingroom) annotation (Line( + points={{-10,50.4},{-10,50.4},{-10,66},{-80,66},{-80,0},{-100,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor.port_outside, thermCorridor) annotation (Line( + points={{62.15,16},{84,16},{84,66},{-80,66},{-80,-30},{-100,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Bath.port_outside, thermBath) annotation (Line( + points={{66.25,-40},{80,-40},{80,-130},{-80,-130},{-80,-60},{-100, + -60}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{96,-59.9},{96,-48},{130,-48},{130,-130},{-80,-130},{-80,-120}, + {-100,-120}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Neighbour.port_outside, thermNeigbour) annotation (Line( + points={{-74.35,-19},{-80,-19},{-80,-90},{-100,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermFloor, Wall_Floor.port_outside) annotation (Line( + points={{-100,-150},{-90,-150},{-90,-142},{-80,-142},{-80,-130},{ + 96,-130},{96,-102.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-4,-82},{-4,-74},{13.9,-74},{13.9,-69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.thermStarComb, Wall_Ceiling.thermStarComb_inside) + annotation (Line( + points={{13.9,-69.4},{13.9,-74},{96,-74},{96,-64}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{96,-98.0002},{96,-74},{13.9,-74},{13.9,-69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.star, StarRoom) annotation (Line( + points={{19.8,-49.6},{19.8,-43.8},{28,-43.8},{28,-34}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{8.9,-49.9},{8.9,-16},{44,-16},{44,6},{29,6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, ThermRoom) annotation (Line( + points={{8.9,-49.9},{8.9,-36},{-10,-36}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Neighbour.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-60,-19},{-48,-19},{-48,-74},{13.9,-74},{13.9,-69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-10,34},{-10,24},{-48,24},{-48,-74},{13.9,-74},{13.9, + -69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Corridor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{56,16},{44,16},{44,-74},{13.9,-74},{13.9,-69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Bath.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{56,-40},{44,-40},{44,-74},{13.9,-74},{13.9,-69.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(AirExchangePort, NaturalVentilation.InPort1) annotation (Line( + points={{-110,50},{-80,50},{-80,66},{44,66},{44,76.68},{67.4,76.68}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{66,85},{44,85},{44,90},{-100,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, NaturalVentilation.port_b) annotation (Line( + points={{29,6},{44,6},{44,66},{100,66},{100,85},{94,85}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.port_outside, thermOutside) annotation (Line( + points={{-4,-102.5},{-4,-130},{-80,-130},{-80,90},{-100,90}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Bedroom.png")), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={ + Rectangle( + extent={{-54,68},{98,-112}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Text( + extent={{-40,2},{84,-26}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Forward, + textString="Bedroom"), + Rectangle( + extent={{-42,-104},{-20,-124}}, + lineColor={0,0,0}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,-106},{-22,-122}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-36,-118},{-26,-108}}, + color={255,255,255}, + thickness=1), + Line( + points={{-32,-118},{-26,-112}}, + color={255,255,255}, + thickness=1), + Line( + points={{-36,-114},{-30,-108}}, + color={255,255,255}, + thickness=1), + Text( + extent={{-32,-112},{18,-128}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="OW"), + Text( + extent={{26,92},{76,76}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Rectangle( + extent={{-54,94},{-34,64}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{-52,82},{-50,80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Text( + extent={{-72,-16},{-76,-18}}, + lineColor={0,0,0}, + lineThickness=0.5, + textString="Edit Here"), + Rectangle( + extent={{-110,-110},{-90,-130}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-80},{-90,-100}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-20},{-90,-40}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,10},{-90,-10}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,72},{-90,18}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,100},{-90,80}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-50},{-90,-70}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-140},{-90,-160}}, + lineColor={0,0,0}, + lineThickness=0.5)}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the bedroom.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Bedroom_VoWo; + + model Children_VoWo "Children room from the VoWo appartment" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.7 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=295.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_OW=295.15 "OW" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWLivingroom=294.15 + "IWLivingroom" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWNeighbour=294.15 + "IWNeighbour" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWCorridor=290.15 + "IWCorridor" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_IWStraicase=288.15 + "IWStaircase" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_CE=295.35 "Ceiling" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=294.95 "Floor" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Outer wall type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else + AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else + AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() + else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); + + //Inner wall Types + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload= + if TIR == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() + else if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() + else if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if + Floor == 1 then if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLcellar_EnEV2009_SML_upHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLcellar_EnEV2002_SML_upHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLcellar_WSchV1995_SML_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLcellar_WSchV1984_SML_upHalf() + else if TIR == 1 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if ( + Floor == 1) or (Floor == 2) then if TIR == 1 then if (TMC == 1 + or TMC == 2) then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEpartition_EnEV2009_L_loHalf() + else if TIR == 2 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_SM_loHalf() + else + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEpartition_EnEV2002_L_loHalf() + else if TIR == 3 then if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEpartition_WSchV1995_L_loHalf() + else if (TMC == 1 or TMC == 2) then + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_SM_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEpartition_WSchV1984_L_loHalf() + else if TIR == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=3.38*4.20*2.46; + public + AixLib.Building.Components.Walls.Wall Wall_Livingroom( + T0=T0_IWLivingroom, + outside=false, + WallType=Type_IWload, + wall_length=4.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation(extent={{-76, + -40},{-66,20}}, rotation=0))); + AixLib.Building.Components.Walls.Wall Wall_Corridor( + T0=T0_IWCorridor, + outside=false, + WallType=Type_IWload, + wall_length=2.13, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={-25.6,-49}, + extent={{-3,-21.6},{5,26.4}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Neighbour( + T0=T0_IWNeighbour, + outside=false, + WallType=Type_IWload, + wall_length=4.2, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={60,4.92309}, + extent={{-2,-35.0769},{10,36.9231}}, + rotation=180))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-38,16},{-58,36}}, rotation=0))); + Utilities.Interfaces.SolarRad_in Strahlung_SE annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-82,110}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-30,110}))); + + AixLib.Building.Components.Walls.Wall outsideWall( + wall_length=3.38, + wall_height=2.46, + windowarea=1.84, + withWindow=true, + T0=T0_OW, + solar_absorptance=solar_absorptance_OW, + WallType=Type_OW, + WindowType=Type_Win, + outside=true, + withDoor=false) annotation (Placement(transformation( + origin={-12,51}, + extent={{-9,-54},{9,54}}, + rotation=270))); + + AixLib.Building.Components.Walls.Wall Wall_Staircase( + T0=T0_IWStraicase, + outside=false, + WallType=Type_IWload, + wall_length=0.86, + wall_height=2.46, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={36.9565,-47}, + extent={{-3,-21.0435},{5,22.9565}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=4.20, + wall_height=3.38, + ISOrientation=3, + withWindow=false, + withDoor=false) "Decke" annotation (Placement(transformation( + origin={112,76}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=4.20, + wall_height=3.38, + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={112,42}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=90))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-44,-120}, + {-18,-94}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-70,88},{-50,108}}), + iconTransformation(extent={{-70,88},{-50,108}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation(extent={{-124,-8},{-84,32}}), iconTransformation(extent={{-110,30}, + {-90,50}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation ( + Placement(transformation(extent={{-124,20},{-84,60}}), iconTransformation( + extent={{-110,60},{-90,80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermNeighbour + annotation (Placement(transformation(extent={{-110,0},{-90,20}}), + iconTransformation(extent={{-110,0},{-90,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermStaircase + annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}), + iconTransformation(extent={{-110,-30},{-90,-10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{-110,-60},{-90,-40}}), + iconTransformation(extent={{-110,-60},{-90,-40}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermLivingroom + annotation (Placement(transformation(extent={{-108,-130},{-88,-110}}), + iconTransformation(extent={{-110,-90},{-90,-70}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{-110,-120},{-90,-100}}), + iconTransformation(extent={{-110,-120},{-90,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-110,-152},{-90,-132}}), + iconTransformation(extent={{-110,-152},{-90,-132}}))); + Utilities.Interfaces.Star StarRoom annotation (Placement( + transformation(extent={{6,-6},{26,14}}), iconTransformation( + extent={{6,-6},{26,14}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermRoom annotation ( + Placement(transformation(extent={{-26,-4},{-6,16}}), + iconTransformation(extent={{-26,-4},{-6,16}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={0,-22}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{-44,-94},{-16,-68}}))); + equation + + connect(Strahlung_SE,outsideWall. SolarRadiationPort) annotation ( + Line( + points={{-82,110},{-82,78},{58,78},{58,62.7},{37.5,62.7}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-18,-107},{0,-107},{0,-36},{-32,-36},{-32,24},{-39,24}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-44,-107},{-80,-107},{-80,98},{-60,98}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{27.6,60.45},{27.6,78},{-80,78},{-80,12},{-104,12}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Wall_Neighbour.port_outside, thermNeighbour) annotation (Line( + points={{62.3,3.99999},{100,3.99999},{100,-68},{-80,-68},{-80,10},{-100, + 10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Staircase.port_outside, thermStaircase) annotation (Line( + points={{36,-50.2},{36,-68},{-80,-68},{-80,-20},{-100,-20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor.port_outside, thermCorridor) annotation (Line( + points={{-28,-52.2},{-28,-68},{-80,-68},{-80,-50},{-100,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.port_outside, thermLivingroom) annotation (Line( + points={{-76.25,-10},{-80,-10},{-80,-120},{-98,-120}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCeiling) annotation (Line( + points={{112,78.1},{112,88},{100,88},{100,-68},{-80,-68},{-80, + -110},{-100,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, thermFloor) annotation (Line( + points={{112,39.9},{112,8},{100,8},{100,-68},{-100,-68},{-100, + -142}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(thermStar_Demux.star, StarRoom) annotation (Line( + points={{5.8,-11.6},{6,-10},{6,-8},{16,-8},{16,4}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, ThermRoom) annotation (Line( + points={{-5.1,-11.9},{-5.1,-3.95},{-16,-3.95},{-16,6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-5.1,-11.9},{-32,-11.9},{-32,24},{-39,24}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Corridor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-28,-44},{-28,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Staircase.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{36,-42},{36,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Neighbour.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{50,3.99999},{40,3.99999},{40,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(outsideWall.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-12,42},{-12,30},{40,30},{40,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{112,44},{112,52},{40,52},{40,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{112,74},{112,52},{40,52},{40,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Livingroom.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-66,-10},{-50,-10},{-50,-36},{-0.1,-36},{-0.1,-31.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(thermOutside,NaturalVentilation.port_a) annotation (Line( + points={{-60,98},{-80,98},{-80,-68},{-50,-68},{-50,-81},{-44,-81}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(AirExchangePort, NaturalVentilation.InPort1) annotation (Line( + points={{-104,40},{-80,40},{-80,-68},{-50,-68},{-50,-89.32},{-42.6, + -89.32}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-16,-81},{0,-81},{0,-36},{-32,-36},{-32,24},{-39,24}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outsideWall.port_outside, thermOutside) annotation (Line( + points={{-12,60.45},{-12,98},{-60,98}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermOutside, thermOutside) annotation (Line( + points={{-60,98},{-86,98},{-86,98},{-60,98}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/VoWo_Children.png")), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={ + Rectangle( + extent={{-54,68},{116,-108}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Forward), + Text( + extent={{-36,-20},{98,-54}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Forward, + textString="Children"), + Rectangle( + extent={{-10,80},{12,60}}, + lineColor={0,0,0}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-8,78},{10,62}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-4,66},{6,76}}, + color={255,255,255}, + thickness=1), + Line( + points={{0,66},{6,72}}, + color={255,255,255}, + thickness=1), + Line( + points={{-4,70},{2,76}}, + color={255,255,255}, + thickness=1), + Text( + extent={{2,82},{52,66}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="OW"), + Text( + extent={{6,-110},{56,-126}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Rectangle( + extent={{90,-96},{110,-126}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={127,0,0}, + fillPattern=FillPattern.Forward), + Ellipse( + extent={{92,-108},{94,-110}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0}), + Rectangle( + extent={{-110,-100},{-90,-120}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-70},{-90,-90}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-40},{-90,-60}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,20},{-90,0}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-70,88},{-50,88}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-10},{-90,-30}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,82},{-90,28}}, + lineColor={0,0,0}, + lineThickness=0.5), + Rectangle( + extent={{-110,-132},{-90,-152}}, + lineColor={0,0,0}, + lineThickness=0.5)}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a second bedroom: the childrens' room.

+

Level of Development

+

+

Concept

+

The following figure presents the room's layout:

+

+")); + end Children_VoWo; + + annotation (Documentation(info=" +

Overview

+

Package for the rooms in the appartment.

+")); + end OneApparment; + + package CellarAttic + extends Modelica.Icons.Package; + + model Cellar "Cellar completly under ground" + import AixLib; + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + // Room geometry + parameter Modelica.SIunits.Length room_length = 10.24 "length" annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width = 17.01 "width" annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height = 2.5 "length" annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + + // Outer walls properties + parameter Modelica.SIunits.Temperature T_Ground = 283.15 + "GroundTemperature" annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + //Initial temperatures + parameter Modelica.SIunits.Temperature T0_air=285.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_Walls=284.95 "Walls" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_Ceiling=285.25 "Ceiling" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLground_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLground_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLground_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLground_WSchV1984_SML(); + + // Ceiling type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEcellar_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEcellar_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEcellar_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEcellar_WSchV1984_SML_loHalf(); + + parameter Modelica.SIunits.Volume room_V=room_length*room_width*room_height; + + public + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{-18,-4},{-38,16}}, rotation=0))); + + AixLib.Building.Components.Walls.Wall Wall_Ceiling( + T0=T0_Ceiling, + outside=false, + WallType=Type_CE, + wall_length=room_width, + wall_height=room_length, + ISOrientation=3, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={110,62}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall Wall_Floor( + T0=T0_Walls, + outside=false, + WallType=Type_FL, + wall_length=room_width, + wall_height=room_length, + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={110,32}, + extent={{-1.99998,-10},{1.99998,10}}, + rotation=90))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-44,-100}, + {-18,-74}}))); + public + AixLib.Building.Components.Walls.Wall Wall1( + T0=T0_Walls, + outside=false, + WallType=Type_FL, + wall_length=room_width, + wall_height=room_height, + ISOrientation=1, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + extent={{-9,-50},{9,50}}, + rotation=270, + origin={2,65}))); + public + AixLib.Building.Components.Walls.Wall Wall3( + T0=T0_Walls, + outside=false, + WallType=Type_FL, + wall_height=room_height, + wall_length=room_width, + withDoor=false) annotation (Placement(transformation( + extent={{-9,-50},{9,50}}, + rotation=90, + origin={2,-45}))); + public + AixLib.Building.Components.Walls.Wall Wall2( + T0=T0_Walls, + outside=false, + WallType=Type_FL, + wall_height=room_height, + wall_length=room_length, + withDoor=false) annotation (Placement(transformation( + extent={{-9,-50},{9,50}}, + rotation=180, + origin={68,13}))); + public + AixLib.Building.Components.Walls.Wall Wall4( + T0=T0_Walls, + outside=false, + WallType=Type_FL, + wall_height=room_height, + wall_length=room_length, + withDoor=false) annotation (Placement(transformation( + extent={{-9,-50},{9,50}}, + rotation=0, + origin={-70,13}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCellar + annotation (Placement(transformation(extent={{100,80},{120,100}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TGround(T=T_Ground) + annotation (Placement(transformation(extent={{118,-80},{138,-60}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={4,-6}))); + equation + + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-44,-87},{-42,-87},{-42,-90},{-90,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-18,-87},{-2,-87},{-2,-64},{-54,-64},{-54,-24},{-12,-24},{ + -12,4},{-19,4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Ceiling.port_outside, thermCellar) annotation (Line( + points={{110,64.1},{110,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TGround.port, Wall3.port_outside) annotation (Line( + points={{138,-70},{2,-70},{2,-54.45}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall2.port_outside, TGround.port) annotation (Line( + points={{77.45,13},{100,13},{100,-70},{138,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.port_outside, TGround.port) annotation (Line( + points={{110,29.9},{110,8},{100,8},{100,-70},{138,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall1.port_outside, TGround.port) annotation (Line( + points={{2,74.45},{2,88},{100,88},{100,-70},{138,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall4.port_outside, TGround.port) annotation (Line( + points={{-79.45,13},{-86,13},{-86,-64},{-2,-64},{-2,-70},{138,-70}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{59,13},{46,13},{46,-24},{3.9,-24},{3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall3.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{2,-36},{2,-25.1125},{3.9,-25.1125},{3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{2,56},{2,44},{46,44},{46,-24},{3.9,-24},{3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall4.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-61,13},{-48,13},{-48,-24},{3.9,-24},{3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Wall_Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{110,34},{110,34},{110,44},{46,44},{46,-24},{3.9,-24},{ + 3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Wall_Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{110,60},{110,44},{46,44},{46,-24},{3.9,-24},{3.9,-15.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-1.1,4.1},{-1.1,12},{-12,12},{-12,4},{-19,4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-150},{150,100}}, + initialScale=0.1), graphics={Rectangle( + extent={{-68,74},{134,-128}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), Text( + extent={{-66,10},{126,-48}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="Cellar")}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for a cellar for the whole building.

+

Level of Development

+

+

Concept

+

The model can extended, if one wants to consider each of the floors belongig to the upper rooms individually.

+")); + end Cellar; + + model Attic_Ro2Lf1 + "Attic with two saddle roofs and on floor towards the rooms on the lower floors" + import AixLib; + + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + // Room geometry + parameter Modelica.SIunits.Length room_length = 10.24 "length" annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width = 17.01 "width" annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width1 = 5.7 "wRO1" annotation (Dialog(group = "Room geometry",absoluteWidth=25, joinNext = true, descriptionLabel = true)); + parameter Modelica.SIunits.Length roof_width2 = 5.7 "wRO2" annotation (Dialog(group = "Room geometry", absoluteWidth=25, descriptionLabel = true)); + parameter Modelica.SIunits.Angle alfa = Modelica.SIunits.Conversions.from_deg(120) "alfa" + annotation (Dialog(group = "Room geometry", descriptionLabel = true)); + + parameter Modelica.SIunits.Temperature T0_air=283.15 "Air" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO1=282.15 "RO1" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_RO2=282.15 "RO2" + annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T0_FL=284.15 "FL" annotation(Dialog(tab="Initial temperatures", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Integer ModelConvOW = 1 "Heat Convection Model" + annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 + "Custom alpha", radioButtons = true)); + + // Windows and Doors + parameter Boolean withWindow1 = false "Window 1 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO1=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow1)); + parameter Boolean withWindow2 = false "Window 2 " annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO2=0 "Window area" annotation (Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow2)); + + // Infiltration rate + protected + parameter Real n50(unit="h-1")= + if (TIR == 1 or TIR ==2) then 3 else + if TIR == 3 then 4 else 6 + "Air exchange rate at 50 Pa pressure difference" annotation (Dialog(tab = "Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" annotation (Dialog(tab = "Infiltration")); + parameter Real eps=1.0 "Coefficient of height" annotation (Dialog(tab = "Infiltration")); + + // Floor to lower floor type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); + + // Saddle roof type + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR + == 1 then + AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleAttic_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleAttic_EnEV2002_SML() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleAttic_WSchV1995_SML() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleAttic_WSchV1984_SML() + annotation (Dialog(tab="Types")); + + //Window type + parameter + AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else + if TIR == 2 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() + else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + + parameter Modelica.SIunits.Volume room_V=roof_width1*roof_width2*sin(alfa)*0.5*room_width; + + public + AixLib.Building.Components.Walls.Wall roof1( + withDoor=false, + door_height=0, + door_width=0, + T0=T0_RO1, + solar_absorptance=solar_absorptance_RO, + wall_height=roof_width1, + wall_length=room_width, + withWindow=false, + WallType=Type_RO, + ISOrientation=1) annotation (Placement(transformation( + extent={{-4.99998,-28},{4.99998,28}}, + rotation=270, + origin={-42,63}))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T( + start=T0_air)) annotation (Placement(transformation(extent= + {{0,-20},{20,0}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-10},{-89.5,10}}, + rotation=0), iconTransformation(extent={{-109.5,-10},{-89.5,10}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofNW + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-45.5,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-50,90}))); + AixLib.Building.Components.Walls.Wall roof2( + solar_absorptance=solar_absorptance_RO, + withDoor=false, + door_height=0, + door_width=0, + T0=T0_RO2, + wall_height=roof_width2, + wall_length=room_width, + withWindow=false, + WallType=Type_RO, + outside=true, + ISOrientation=1) annotation (Placement(transformation( + origin={50,63}, + extent={{-4.99998,-28},{4.99998,28}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofSE + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={48,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={50,90}))); + AixLib.Building.Components.Walls.Wall Floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width, + ISOrientation=2, + withWindow=false, + withDoor=false) annotation (Placement(transformation( + origin={1,-46}, + extent={{-1.99999,-13},{1.99999,13}}, + rotation=90))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 + infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-64,-24}, + {-46,-16}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor + annotation (Placement(transformation(extent={{-10,-86},{10,-66}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux + annotation (Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-28,6}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort + annotation (Placement(transformation( + origin={-100,25}, + extent={{-10,-10},{10,10}}, + rotation=0), iconTransformation(extent={{-110,30},{-90,50}}))); + AixLib.Building.Components.DryAir.VarAirExchange + NaturalVentilation(V=room_V) annotation (Placement( + transformation(extent={{-70,-56},{-50,-36}}))); + equation + + // Connect-equation for ventilation/infiltration. If there are two windows, the ventilation rate is equally distributed between the two. the same with two door. + // Be careful to set a given ventilation rate only for the windows, or for the doors, otherweise you will have double the ventilation rate. + + connect(SolarRadiationPort_RoofNW, roof1.SolarRadiationPort) + annotation (Line( + points={{-45.5,100},{-45.5,80},{-16.3333,80},{-16.3333,69.5}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(SolarRadiationPort_RoofSE, roof2.SolarRadiationPort) + annotation (Line( + points={{48,100},{48,80},{75.6667,80},{75.6667,69.5}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(thermOutside, thermOutside) annotation (Line( + points={{-90,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof1.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-21.4667,68.25},{-21.4667,80},{-80,80},{-80,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(roof2.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{70.5333,68.25},{70.5333,80},{-80,80},{-80,0},{-99.5,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line( + points={{-64,-20},{-80,-20},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.port_b, airload.port) annotation (Line( + points={{-46,-20},{-28,-20},{-28,-28},{-10,-28},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Floor.port_outside, thermFloor) annotation (Line( + points={{1,-48.1},{1,-65.55},{0,-65.55},{0,-76}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{1,-44},{1,-28},{-28.1,-28},{-28.1,-3.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(thermStar_Demux.therm, airload.port) annotation (Line( + points={{-33.1,16.1},{-33.1,26},{-10,26},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{50,58},{50,50},{-42,50},{-42,-3.4},{-28.1,-3.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(roof1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-42,58},{-42,-3.4},{-28.1,-3.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof1.port_outside, thermOutside) annotation (Line( + points={{-42,68.25},{-42,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(roof2.port_outside, thermOutside) annotation (Line( + points={{50,68.25},{50,80},{-90,80},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line( + points={{-70,-46},{-80,-46},{-80,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.port_b, airload.port) annotation (Line( + points={{-50,-46},{-28,-46},{-28,-28},{-10,-28},{-10,-12},{1,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line( + points={{-69,-52.4},{-80,-52.4},{-80,25},{-100,25}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/MFD_Attic.png", Width = 5, Length = 5)), + Icon(graphics={Polygon( + points={{-58,-20},{16,54},{90,-20},{76,-20},{16,40},{-44,-20},{-58,-20}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Polygon( + points={{-24,0},{6,30},{-8,30},{-38,0},{-24,0}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible= withWindow1), + Text( + extent={{-36,10},{12,22}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + textString="Win1", + visible= withWindow1), + Polygon( + points={{26,30},{56,0},{70,0},{40,30},{26,30}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow2), + Text( + extent={{22,10},{70,22}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible=withWindow2), + Text( + extent={{-44,-14},{74,-26}}, + lineColor={0,0,0}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line( + points={{-44,-20},{-44,-24}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-44,-20},{-20,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{48,-20},{76,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{76,-20},{76,-24}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-37,-37},{37,37}}, + color={0,0,0}, + smooth=Smooth.None, + origin={57,21}, + rotation=90), + Line( + points={{3,-3},{-3,3}}, + color={0,0,0}, + smooth=Smooth.None, + origin={93,-17}, + rotation=90), + Text( + extent={{-28,5},{28,-5}}, + lineColor={0,0,0}, + origin={44,47}, + rotation=0, + textString="wRO2"), + Line( + points={{3,-3},{-3,3}}, + color={0,0,0}, + smooth=Smooth.None, + origin={19,57}, + rotation=90), + Line( + points={{16,54},{10,60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-62,-16},{12,58}}, + color={0,0,0}, + smooth=Smooth.None), + Text( + extent={{-40,52},{16,42}}, + lineColor={0,0,0}, + textString="wRO1"), + Line( + points={{-58,-20},{-64,-14}}, + color={0,0,0}, + smooth=Smooth.None)}), + Diagram(graphics), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for an attic for the whole building.

+

Level of Development

+

+

Concept

+

The model can extended, if one wants to consider each of the ceilings belongig to the lower rooms individually.

+")); + end Attic_Ro2Lf1; + annotation (Documentation(info=" +

Overview

+

Package with models for cellar and attic for the whole building.

+")); + end CellarAttic; + annotation (Documentation(info=" +

Overview

+

Package for rooms for an appartment in a multi family dwelling.

+

Concept

+

The multi-family dwelling is based on an existing building consisting of several identical apartments which is part of a larger national research project [1].

+

The dimensions and layout of the rooms are fixed, with an apartment having a living area of 70 m2 and consisting of a living room, two bedrooms, a kitchen and a bathroom.

+

+



References

+

[1] Cali, D., Streblow, R., Müller, D., Osterhage, T. Holistic Renovation and Monitoring of Residential Buildings in Proceedings of Rethink, renew, restart: ECEE 2013 summer study, 2013.

+")); + end MFD; + annotation (Documentation(info=" +

Overview

+

Package for rooms.

+

Concept

+

In a room model the following physical processes are considered:

+ +


All outer walls are whole walls connected to the room air and the ambient, while inner walls are half walls, each half belonging to one of the rooms which share the wall. Airflow among rooms is not explicitly considered.

+


We chose to parameterize according to the following criteria:

+ +

By specifying these two parameters, all wall, window and door types in a house are automatically set correctly. Furthermore for a multi-family dwelling, for each apartment, the types for floor and ceiling are automatically set if the apartment is situated on the ground, last or an arbitrary upper floor.

+


We wanted to make the library easy to use and extend by future users and developers. To this purpose we put extra effort in creating easy to understand icons and graphical interfaces for parameter input. Because users might want to rotate or mirror a room to build up a whole floor, we wanted to transfer the information about the position of the walls in the room, the meaning of the parameters width and length as well as the existence of windows on the icon level.

+")); + end Rooms; + + package House + extends Modelica.Icons.Package; + + package OFD_MiddleInnerLoadWall + "The one family dwelling model, with the inner load wall divides the house in two" + extends Modelica.Icons.Package; + + package BuildingEnvelope + extends Modelica.Icons.Package; + + model GroundFloorBuildingEnvelope + ///////// construction parameters + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + //////////room geometry + parameter Modelica.SIunits.Length room_width=3.86 "width" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Height room_height=2.60 "height" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length length1=3.23 "l1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length length2=2.44 "l2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length length3=1.33 "l3 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length length4=3.23 "l4 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length thickness_IWsimple=0.145 + "thickness IWsimple " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + parameter Real solar_absorptance_OW=0.6 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Modelica.SIunits.Temperature T_Ground=283.15 + "Ground temperature" annotation(Dialog(group="Outer wall properties", descriptionLabel = true)); + + //Windows and Doors + parameter Modelica.SIunits.Area windowarea_11=8.44 " Area Window11" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Area windowarea_12=1.73 " Area Window12 " + annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + parameter Modelica.SIunits.Area windowarea_22=1.73 " Area Window22" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext=true)); + parameter Modelica.SIunits.Area windowarea_41=1.4 " Area Window41 " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + parameter Modelica.SIunits.Area windowarea_51=3.46 " Area Window51" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Area windowarea_52=1.73 " Area Window52 " + annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + parameter Modelica.SIunits.Length door_width_31=1.01 "Width Door31" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true)); + parameter Modelica.SIunits.Length door_height_31=2.25 + "Height Door31 " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + parameter Modelica.SIunits.Length door_width_42=1.25 "Width Door42" annotation (Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true)); + parameter Modelica.SIunits.Length door_height_42=2.25 + "Height Door42 " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + + parameter Real AirExchangeCorridor = 2 + "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = true "Dynamic ventilation" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 + "Outside temperature at which the heating activates" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 200 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + Modelica.Blocks.Sources.Constant AirExchangePort_doorSt(k=0) + "Storage" annotation ( + Placement(transformation(extent={{-116,-68},{-100,-52}}))); + + Rooms.OFD.Ow2IwL2IwS1Gr1Uf1 Livingroom( + TMC=TMC, + TIR=TIR, + room_lengthb=length2, + room_width=room_width, + room_height=room_height, + room_length=length1 + length2 + thickness_IWsimple, + solar_absorptance_OW=solar_absorptance_OW, + T_Ground=T_Ground, + windowarea_OW1=windowarea_11, + windowarea_OW2=windowarea_12, + withDoor1=false, + withDoor2=false, + withWindow1=true, + withWindow2=true, + withFloorHeating=withFloorHeating, + T0_air=295.15, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.13, + T0_FL=295.13) + annotation (Placement(transformation(extent={{-86,14},{-42,78}}))); + Rooms.OFD.Ow2IwL1IwS1Gr1Uf1 Hobby( + TMC=TMC, + TIR=TIR, + room_length=length1, + room_width=room_width, + room_height=room_height, + solar_absorptance_OW=solar_absorptance_OW, + T_Ground=T_Ground, + windowarea_OW2=windowarea_22, + withDoor1=false, + withDoor2=false, + withWindow1=false, + withWindow2=true, + withFloorHeating=withFloorHeating, + T0_air=295.15, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1=295.15, + T0_IW2=295.15, + T0_CE=295.13, + T0_FL=295.13) + annotation (Placement(transformation(extent={{84,28},{46,76}}))); + Rooms.OFD.Ow2IwL1IwS1Gr1Uf1 WC_Storage( + TMC=TMC, + TIR=TIR, + room_length=length4, + room_width=room_width, + room_height=room_height, + solar_absorptance_OW=solar_absorptance_OW, + T_Ground=T_Ground, + withWindow1=true, + windowarea_OW1=windowarea_41, + withDoor2=true, + door_width_OD2=door_width_42, + door_height_OD2=door_height_42, + withWindow2=false, + withDoor1=false, + withFloorHeating=withFloorHeating, + T0_air=291.15, + T0_OW1=291.15, + T0_OW2=291.15, + T0_IW1=291.15, + T0_IW2=291.15, + T0_CE=291.13, + T0_FL=291.13) + annotation (Placement(transformation(extent={{84,-36},{46,-84}}))); + Rooms.OFD.Ow2IwL2IwS1Gr1Uf1 Kitchen( + TMC=TMC, + TIR=TIR, + room_length=length3 + length4 + thickness_IWsimple, + room_width=room_width, + room_height=room_height, + solar_absorptance_OW=solar_absorptance_OW, + T_Ground=T_Ground, + withWindow1=true, + windowarea_OW1=windowarea_51, + withWindow2=true, + windowarea_OW2=windowarea_52, + room_lengthb=length3, + withDoor1=false, + withDoor2=false, + withFloorHeating=withFloorHeating, + T0_air=295.15, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.13, + T0_FL=295.13) annotation (Placement( + transformation(extent={{-84,-20},{-44,-84}}))); + Rooms.OFD.Ow1IwL2IwS1Gr1Uf1 Corridor( + TMC=TMC, + TIR=TIR, + room_length=length2 + length3 + thickness_IWsimple, + room_width=room_width, + room_height=room_height, + solar_absorptance_OW=solar_absorptance_OW, + T_Ground=T_Ground, + withDoor1=true, + door_width_OD1=door_width_31, + door_height_OD1=door_height_31, + room_lengthb=length3, + withWindow1=false, + withFloorHeating=withFloorHeating, + T0_air=291.15, + T0_OW1=291.15, + T0_IW1=291.15, + T0_IW2a=291.15, + T0_IW2b=291.15, + T0_IW3=291.15, + T0_CE=291.13, + T0_FL=291.13) + annotation (Placement(transformation(extent={{82,-28},{42,10}}))); + Utilities.Interfaces.SolarRad_in North annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,88}))); + Utilities.Interfaces.SolarRad_in East annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,60}))); + Utilities.Interfaces.SolarRad_in South annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,26}))); + Utilities.Interfaces.SolarRad_in West annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-16}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation ( + Placement(transformation(extent={{-130,12},{-100,42}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] + annotation (Placement(transformation(extent={{-130,-18},{-100,12}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-116,66},{-100,82}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Livingroom + annotation (Placement(transformation(extent={{-100,100},{-84,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Hobby + annotation (Placement(transformation(extent={{-58,100},{-40,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Corridor + annotation (Placement(transformation(extent={{-20,100},{-2,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_WCStorage + annotation (Placement(transformation(extent={{20,100},{38,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Kitchen + annotation (Placement(transformation(extent={{62,100},{80,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{100,100},{120,120}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermLivingroom + annotation (Placement(transformation(extent={{-26,54},{-14,66}}), + iconTransformation(extent={{-28,56},{-14,66}}))); + Utilities.Interfaces.Star StarLivingroom annotation (Placement( + transformation(extent={{-28,32},{-12,48}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermHobby + annotation (Placement(transformation(extent={{14,54},{26,66}}))); + Utilities.Interfaces.Star StarHobby annotation (Placement( + transformation(extent={{12,32},{28,48}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermCorridor + annotation (Placement(transformation(extent={{-6,-6},{6,6}}))); + Utilities.Interfaces.Star StarCorridor annotation (Placement( + transformation(extent={{-8,-28},{8,-12}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermWC_Storage + annotation (Placement(transformation(extent={{14,-46},{26,-34}}))); + Utilities.Interfaces.Star StarWC_Storage annotation (Placement( + transformation(extent={{12,-68},{28,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermKitchen + annotation (Placement(transformation(extent={{-26,-46},{-14,-34}}))); + Utilities.Interfaces.Star StarKitchen annotation (Placement( + transformation(extent={{-28,-68},{-12,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermFloor[5] if + withFloorHeating annotation ( + Placement(transformation(extent={{-4,-100},{8,-88}}), + iconTransformation(extent={{0,-88},{14,-78}}))); + equation + if withFloorHeating then + connect(Livingroom.thermFloor, ThermFloor[1]) annotation (Line( + points={{-68.84,38.32},{-68.84,6},{-90,6},{-90,-92},{-44,-92},{2,-92},{2,-98.8}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(Hobby.thermFloor, ThermFloor[2]) annotation (Line( + points={{69.18,46.24},{69.18,22},{90,22},{90,-92},{8,-92},{8,-92},{2,-96.4}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(Corridor.thermFloor, ThermFloor[3]) annotation (Line( + points={{66.4,-13.56},{66.4,-32},{90,-32},{90,-92},{4,-92},{4,-94},{2,-94}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(WC_Storage.thermFloor, ThermFloor[4]) annotation (Line( + points={{69.18,-54.24},{90,-54.24},{90,-91.6},{2,-91.6}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Kitchen.thermFloor, ThermFloor[5]) annotation (Line( + points={{-68.4,-44.32},{-90,-44.32},{-90,-92},{-44,-92},{-4,-92},{2,-89.2}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + end if; + + connect(Livingroom.SolarRadiationPort_OW2, West) annotation (Line( + points={{-52.89,77.68},{-52.89,86},{90,86},{90,-16},{110,-16}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Hobby.SolarRadiationPort_OW2, West) annotation (Line( + points={{55.405,75.76},{55.405,86},{90,86},{90,-16},{110,-16}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Hobby.SolarRadiationPort_OW1, North) annotation (Line( + points={{83.905,59.2},{90,59.2},{90,88},{110,88}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Corridor.SolarRadiationPort_OW1, North) + annotation (Line( + points={{81.9,2.4},{90,2.4},{90,88},{110,88}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(WC_Storage.SolarRadiationPort_OW1, North) annotation (Line( + points={{83.905,-67.2},{90,-67.2},{90,88},{110,88}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(WC_Storage.SolarRadiationPort_OW2, East) annotation (Line( + points={{55.405,-83.76},{55.405,-92},{-90,-92},{-90,86},{90,86},{90, + 60},{110,60}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Kitchen.SolarRadiationPort_OW2, East) annotation (Line( + points={{-53.9,-83.68},{-53.9,-92},{-90,-92},{-90,86},{90,86},{90,60}, + {110,60}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Livingroom.SolarRadiationPort_OW1, South) annotation (Line( + points={{-85.89,55.6},{-90,55.6},{-90,86},{90,86},{90,26},{110,26}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Livingroom.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-85.89,33.2},{-90,33.2},{-90,27},{-115,27}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Kitchen.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-83.9,-39.2},{-90,-39.2},{-90,27},{-115,27}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(WC_Storage.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{83.905,-50.4},{90,-50.4},{90,-92},{-90,-92},{-90,27},{-115, + 27}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Corridor.WindSpeedPort, WindSpeedPort) + annotation (Line( + points={{81.9,-20.4},{90,-20.4},{90,-92},{-90,-92},{-90,27},{-115,27}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Hobby.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{83.905,42.4},{90,42.4},{90,-92},{-90,-92},{-90,27},{-115,27}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Livingroom.thermOutside, thermOutside) annotation (Line( + points={{-83.8,74.8},{-90,74.8},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermOutside, thermOutside) annotation (Line( + points={{-82,-80.8},{-90,-80.8},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(WC_Storage.thermOutside, thermOutside) annotation (Line( + points={{82.1,-81.6},{82.1,-92},{-90,-92},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermOutside, thermOutside) annotation ( + Line( + points={{80,8.1},{86,8.1},{86,8},{90,8},{90,-92},{-90,-92},{-90,74},{ + -108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hobby.thermOutside, thermOutside) annotation (Line( + points={{82.1,73.6},{90,73.6},{90,86},{-90,86},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Livingroom.thermCeiling, thermCeiling_Livingroom) annotation ( + Line( + points={{-44.2,68.4},{-32,68.4},{-32,86},{-92,86},{-92,109}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermInsideWall1a, Hobby.thermInsideWall1) + annotation (Line( + points={{-44.2,55.6},{-32,55.6},{-32,86},{36,86},{36,54.4},{47.9,54.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hobby.thermCeiling, thermCeiling_Hobby) annotation (Line( + points={{47.9,68.8},{36,68.8},{36,86},{-50,86},{-50,109},{-49,109}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermCeiling, thermCeiling_Corridor) + annotation (Line( + points={{44,4.3},{36,4.3},{36,86},{-10,86},{-10,109},{-11,109}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(WC_Storage.thermCeiling, thermCeiling_WCStorage) annotation ( + Line( + points={{47.9,-76.8},{36,-76.8},{36,-92},{90,-92},{90,86},{29,86},{29, + 109}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermCeiling, thermCeiling_Kitchen) annotation (Line( + points={{-46,-74.4},{-34,-74.4},{-34,-92},{90,-92},{90,86},{71,86},{ + 71,109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Kitchen.thermInsideWall1a, WC_Storage.thermInsideWall1) + annotation (Line( + points={{-46,-61.6},{-34,-61.6},{-34,-92},{36,-92},{36,-62},{47.9,-62}, + {47.9,-62.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermInsideWall1b, Corridor.thermInsideWall2a) + annotation (Line( + points={{-44.2,42.8},{-32,42.8},{-32,86},{36,86},{36,-3.3},{44,-3.3}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermInsideWall2, Livingroom.thermInsideWall2) + annotation (Line( + points={{-58,-23.2},{-58,-14},{-90,-14},{-90,6},{-57.4,6},{-57.4,17.2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermInsideWall3, WC_Storage.thermInsideWall2) + annotation (Line( + points={{56,-26.1},{56,-32},{59.3,-32},{59.3,-38.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hobby.thermInsideWall2, Corridor.thermInsideWall1) + annotation (Line( + points={{59.3,30.4},{59.3,22},{90,22},{90,14},{56,14},{56,8.1}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermRoom, thermCorridor) annotation (Line( + points={{66,-5.2},{66,-32},{90,-32},{90,100},{110,100},{110,110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hobby.starRoom, StarHobby) annotation (Line( + points={{61.2,56.8},{61.2,44},{36,44},{36,40},{20,40}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Corridor.starRoom, StarCorridor) annotation (Line( + points={{58,-5.2},{58,-20},{0,-20}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(StarWC_Storage, StarWC_Storage) annotation (Line( + points={{20,-60},{20,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Corridor.thermRoom, ThermCorridor) annotation (Line( + points={{66,-5.2},{66,14},{36,14},{36,0},{0,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hobby.thermRoom, ThermHobby) annotation (Line( + points={{69.18,56.8},{69.18,44},{36,44},{36,60},{20,60}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(ThermLivingroom, Livingroom.thermRoom) annotation (Line( + points={{-20,60},{-32,60},{-32,48},{-68.4,48},{-68.4,52.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.AirExchangePort, AirExchangePort[1]) annotation (Line( + points={{-68.51,77.52},{-68.51,86},{-90,86},{-90,-14.25},{-115,-14.25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Hobby.AirExchangePort, AirExchangePort[2]) annotation (Line( + points={{68.895,75.64},{68.895,86},{-90,86},{-90,-6.75},{-115,-6.75}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Kitchen.SolarRadiationPort_OW1, South) annotation (Line( + points={{-83.9,-61.6},{-90,-61.6},{-90,-92},{90,-92},{90,26},{110,26}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Corridor.thermInsideWall2b, Kitchen.thermInsideWall1b) + annotation (Line( + points={{44,-10.9},{36,-10.9},{36,-92},{-34,-92},{-34,-48.8},{-46, + -48.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(WC_Storage.starRoom, StarWC_Storage) annotation (Line( + points={{61.2,-64.8},{61.2,-70},{36,-70},{36,-60},{20,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(WC_Storage.thermRoom, ThermWC_Storage) annotation (Line( + points={{69.18,-64.8},{69.18,-70},{36,-70},{36,-40},{20,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(WC_Storage.AirExchangePort, AirExchangePort[3]) annotation (Line( + points={{68.895,-83.64},{68.895,-92},{-90,-92},{-90,0.75},{-115,0.75}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Kitchen.AirExchangePort, AirExchangePort[4]) annotation (Line( + points={{-68.1,-83.52},{-68.1,-92},{-90,-92},{-90,8.25},{-115,8.25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Kitchen.starRoom, StarKitchen) annotation (Line( + points={{-60,-58.4},{-60,-54},{-34,-54},{-34,-60},{-20,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Kitchen.thermRoom, ThermKitchen) annotation (Line( + points={{-68,-58.4},{-68,-54},{-34,-54},{-34,-40},{-20,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.AirExchangePort, AirExchangePort_doorSt.y) annotation ( + Line( + points={{82,-12.8},{90,-12.8},{90,-92},{-90,-92},{-90,-60},{-99.2,-60}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Livingroom.starRoom, StarLivingroom) annotation (Line( + points={{-59.6,52.4},{-59.6,48},{-32,48},{-32,40},{-20,40}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Livingroom.thermFloor, ThermFloor[1]) annotation (Line( + points={{-68.84,38.32},{-68.84,6},{-90,6},{-90,-92},{-44,-92},{2,-92},{2,-98.8}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(Hobby.thermFloor, ThermFloor[2]) annotation (Line( + points={{69.18,46.24},{69.18,22},{90,22},{90,-92},{8,-92},{8,-92},{2,-96.4}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(Corridor.thermFloor, ThermFloor[3]) annotation (Line( + points={{66.4,-13.56},{66.4,-32},{90,-32},{90,-92},{4,-92},{4,-94},{2,-94}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + connect(WC_Storage.thermFloor, ThermFloor[4]) annotation (Line( + points={{69.18,-54.24},{90,-54.24},{90,-91.6},{2,-91.6}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Kitchen.thermFloor, ThermFloor[5]) annotation (Line( + points={{-68.4,-44.32},{-90,-44.32},{-90,-92},{-44,-92},{-4,-92},{2,-89.2}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/Groundfloor_5Rooms.png")), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), Icon(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={Bitmap(extent={{-96,90},{ + 100,-106}}, fileName= + "modelica://AixLib/Images/House/Groundfloor_icon.png"), + Text( + extent={{-66,66},{10,54}}, + lineColor={0,0,0}, + textString="Livingroom"), + Text( + extent={{14,76},{64,62}}, + lineColor={0,0,0}, + textString="Hobby"), + Text( + extent={{22,24},{56,14}}, + lineColor={0,0,0}, + textString="Corridor"), + Text( + extent={{-2,-42},{74,-52}}, + lineColor={0,0,0}, + textString="WC_Storage"), + Text( + extent={{-50,-10},{-6,-24}}, + lineColor={0,0,0}, + textString="Kitchen")}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the envelope of the ground floor.

+

Level of Development

+

+")); + end GroundFloorBuildingEnvelope; + + model UpperloorBuildingEnvelope + + ///////// construction parameters + + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Boolean withFloorHeating = true + "If true, that floor has different connectors" annotation (Dialog(group = "Construction parameters"), choices(checkBox=true)); + + //////////room geometry + + parameter Modelica.SIunits.Length room_width_long=3.84 "w1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length room_width_short=2.28 "w2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Height room_height_long=2.60 "h1 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Height room_height_short=1 "h2 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length roof_width = 2.21 "wRO" annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length length5=3.23 "l5 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length length6=2.44 "l6 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length length7=1.33 "l7 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length length8=3.23 "l8 " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + parameter Modelica.SIunits.Length thickness_IWsimple=0.145 + "thickness IWsimple " annotation (Dialog(group = "Dimensions", descriptionLabel = true)); + + // Outer walls properties + + parameter Real solar_absorptance_OW=0.6 + "Solar absoptance outer walls " annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + + parameter Real solar_absorptance_RO=0.1 "Solar absoptance roof " + annotation (Dialog(group = "Outer wall properties", descriptionLabel = true)); + + //Windows and Doors + + parameter Modelica.SIunits.Area windowarea_62=1.73 " Area Window62" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); + + parameter Modelica.SIunits.Area windowarea_63=1.73 " Area Window63 " + annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + + parameter Modelica.SIunits.Area windowarea_72=1.73 " Area Window72" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext=true)); + + parameter Modelica.SIunits.Area windowarea_73=1.73 " Area Window73 " + annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + + parameter Modelica.SIunits.Area windowarea_92=1.73 " Area Window51" annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + + parameter Modelica.SIunits.Area windowarea_102=1.73 " Area Window102" + annotation (Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext=true)); + + parameter Modelica.SIunits.Area windowarea_103=1.73 + " Area Window103 " annotation (Dialog(group = "Windows and Doors", descriptionLabel = true)); + + parameter Real AirExchangeCorridor = 2 + "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = true "Dynamic ventilation" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 + "Outside temperature at which the heating activates" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 200 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + Utilities.Interfaces.SolarRad_in RoofS annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,44}))); + + Utilities.Interfaces.SolarRad_in RoofN annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,76}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bedroom + annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children1 + annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Corridor + annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bath + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children2 + annotation (Placement(transformation(extent={{60,-120},{80,-100}}))); + + Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Bedroom( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length5 + length6 + thickness_IWsimple, + room_lengthb=length6, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_62, + withWindow3=true, + windowarea_RO=windowarea_63, + withDoor2=false, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) + annotation (Placement(transformation(extent={{-82,14},{-42,78}}))); + + Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Children1( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length5, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_72, + withWindow3=true, + windowarea_RO=windowarea_73, + withDoor2=false, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) + annotation (Placement(transformation(extent={{82,28},{44,76}}))); + + Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Bath( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + room_length=length8, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_92, + withDoor2=false, + door_width_OD2=0, + door_height_OD2=0, + withWindow2=true, + withWindow3=false, + withFloorHeating=withFloorHeating, + T0_air=297.11, + T0_OW1=297.15, + T0_OW2=297.15, + T0_IW1=297.15, + T0_IW2=297.15, + T0_CE=297.1, + T0_RO=297.15, + T0_FL=297.12) + annotation (Placement(transformation(extent={{84,-36},{46,-84}}))); + + Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Children2( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length7 + length8 + thickness_IWsimple, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_102, + withWindow3=true, + windowarea_RO=windowarea_103, + room_lengthb=length7, + withDoor2=false, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) annotation (Placement( + transformation(extent={{-84,-20},{-44,-84}}))); + + Rooms.OFD.Ow1IwL2IwS1Lf1At1Ro1 Corridor( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + room_length=length6 + length7 + thickness_IWsimple, + room_lengthb=length7, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + withWindow3=false, + withFloorHeating=withFloorHeating, + T0_air=291.11, + T0_OW1=291.15, + T0_IW1=291.15, + T0_IW2a=291.15, + T0_IW2b=291.15, + T0_IW3=291.15, + T0_CE=291.1, + T0_RO=291.15, + T0_FL=291.12) + annotation (Placement(transformation(extent={{82,-28},{42,10}}))); + + Utilities.Interfaces.SolarRad_in North annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,6}))); + + Utilities.Interfaces.SolarRad_in East annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-24}))); + + Utilities.Interfaces.SolarRad_in South annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-54}))); + + Utilities.Interfaces.SolarRad_in West annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-84}))); + + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation ( + Placement(transformation(extent={{-130,10},{-100,40}}))); + + Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] + annotation (Placement(transformation(extent={{-130,-26},{-100,4}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-116,66},{-100,82}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bedroom + annotation (Placement(transformation(extent={{-98,100},{-82,118}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children1 + annotation (Placement(transformation(extent={{-58,100},{-40,118}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Corridor + annotation (Placement(transformation(extent={{-20,100},{-2,118}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bath + annotation (Placement(transformation(extent={{20,100},{38,118}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children2 + annotation (Placement(transformation(extent={{60,100},{78,118}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{100,-120},{120,-100}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBedroom + annotation (Placement(transformation(extent={{-26,54},{-14,66}}))); + + Utilities.Interfaces.Star StarBedroom annotation (Placement( + transformation(extent={{-28,32},{-12,48}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren1 + annotation (Placement(transformation(extent={{14,54},{26,66}}))); + + Utilities.Interfaces.Star StarChildren1 annotation (Placement( + transformation(extent={{12,32},{28,48}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBath + annotation (Placement(transformation(extent={{14,-46},{26,-34}}))); + + Utilities.Interfaces.Star StarBath annotation (Placement( + transformation(extent={{12,-68},{28,-52}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren2 + annotation (Placement(transformation(extent={{-26,-46},{-14,-34}}))); + + Utilities.Interfaces.Star StarChildren2 annotation (Placement( + transformation(extent={{-28,-68},{-12,-52}}))); + + Modelica.Blocks.Sources.Constant AirExchangePort_doorSt(k=0) + "Storage" annotation ( + Placement(transformation(extent={{-116,-68},{-100,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermFloor[4] if + withFloorHeating annotation ( + Placement(transformation(extent={{-6,-6},{6,6}}), iconTransformation( + extent={{-4,-2},{10,8}}))); + equation + if withFloorHeating then + connect(Bedroom.thermFloor1, ThermFloor[1]) annotation (Line( + points={{-66.4,38.32},{-90,38.32},{-90,-4.5},{0,-4.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Children1.thermFloor1, ThermFloor[2]) annotation (Line( + points={{67.18,46.24},{90,46.24},{90,20},{0,20},{0,-1.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Bath.thermRoom, ThermFloor[3]) annotation (Line( + points={{68.8,-64.8},{90,-64.8},{90,20},{0,20},{0,1.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Children2.thermRoom, ThermFloor[4]) annotation (Line( + points={{-68,-58.4},{-90,-58.4},{-90,-4},{-44,-4},{0,-4},{0,4.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + + end if; + + connect(Bedroom.SolarRadiationPort_OW2, West) annotation (Line( + points={{-53.1,78.32},{-53.1,86},{90,86},{90,-84},{110,-84}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Children1.SolarRadiationPort_OW2, West) + annotation (Line( + points={{54.545,76.24},{54.545,86},{90,86},{90,-84},{110,-84}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Children1.SolarRadiationPort_OW1, North) + annotation (Line( + points={{81.905,59.2},{90,59.2},{90,6},{110,6}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Corridor.SolarRadiationPort_OW1, North) + annotation (Line( + points={{81.9,-3.3},{90,-3.3},{90,6},{110,6}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bath.SolarRadiationPort_OW1, North) annotation (Line( + points={{83.905,-67.2},{90,-67.2},{90,6},{110,6}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bath.SolarRadiationPort_OW2, East) annotation (Line( + points={{56.545,-84.24},{56.545,-92},{-90,-92},{-90,86},{90,86}, + {90,-24},{110,-24}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Children2.SolarRadiationPort_OW2, East) + annotation (Line( + points={{-55.1,-84.32},{-55.1,-92},{-90,-92},{-90,86},{90,86},{90, + -24},{110,-24}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Children2.SolarRadiationPort_OW1, South) + annotation (Line( + points={{-83.9,-61.6},{-90,-61.6},{-90,86},{90,86},{90,-54},{110, + -54}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bedroom.SolarRadiationPort_OW1, South) annotation (Line( + points={{-81.9,55.6},{-90,55.6},{-90,86},{90,86},{90,-54},{110, + -54}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bedroom.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-81.9,30},{-90,30},{-90,25},{-115,25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Children2.WindSpeedPort, WindSpeedPort) + annotation (Line( + points={{-83.9,-36},{-90,-36},{-90,25},{-115,25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Bath.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{83.905,-50.4},{90,-50.4},{90,-92},{-90,-92},{-90,25},{-115, + 25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Corridor.WindSpeedPort, WindSpeedPort) + annotation (Line( + points={{81.9,-18.5},{90,-18.5},{90,-92},{-90,-92},{-90,25},{-115,25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Children1.WindSpeedPort, WindSpeedPort) + annotation (Line( + points={{81.905,42.4},{90,42.4},{90,-92},{-90,-92},{-90,25},{-115,25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Bedroom.thermOutside, thermOutside) annotation (Line( + points={{-80,74.8},{-90,74.8},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermOutside, thermOutside) + annotation (Line( + points={{-82,-80.8},{-90,-80.8},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bath.thermOutside, thermOutside) annotation (Line( + points={{82.1,-81.6},{82.1,-92},{-90,-92},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermOutside, thermOutside) annotation ( + Line( + points={{80,8.1},{86,8.1},{86,8},{90,8},{90,-92},{-90,-92},{-90, + 74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children1.thermOutside, thermOutside) + annotation (Line( + points={{80.1,73.6},{90,73.6},{90,86},{-90,86},{-90,74},{-108,74}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bedroom.thermCeiling, thermCeiling_Bedroom) annotation ( + Line( + points={{-44,62},{-32,62},{-32,86},{-90,86},{-90,109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children1.thermCeiling, thermCeiling_Children1) + annotation (Line( + points={{45.9,68.8},{36,68.8},{36,86},{-50,86},{-50,110},{-49,109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermCeiling, thermCeiling_Corridor) + annotation (Line( + points={{44,0.5},{36,0.5},{36,86},{-12,86},{-12,110},{-11,109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bath.thermCeiling, thermCeiling_Bath) annotation ( + Line( + points={{47.9,-76.8},{36,-76.8},{36,-92},{90,-92},{90,86},{29,86},{29, + 109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermCeiling, thermCeiling_Children2) + annotation (Line( + points={{-46,-68},{-34,-68},{-34,-92},{90,-92},{90,86},{69,86},{69, + 109}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermInsideWall1a, Bath.thermInsideWall1) + annotation (Line( + points={{-46,-55.2},{-46,-56},{-34,-56},{-34,-92},{36,-92},{36,-62},{ + 47.9,-62},{47.9,-62.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermInsideWall1b, Corridor.thermInsideWall2b) + annotation (Line( + points={{-46,-42.4},{-34,-42.4},{-34,-92},{36,-92},{36,-14},{44, + -14},{44,-14.7}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermInsideWall2, Bedroom.thermInsideWall2) + annotation (Line( + points={{-58,-23.2},{-58,-14},{-90,-14},{-90,6},{-56,6},{-56,17.2}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermInsideWall3, Bath.thermInsideWall2) + annotation (Line( + points={{56,-26.1},{56,-32},{59.3,-32},{59.3,-38.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children1.thermInsideWall2, Corridor.thermInsideWall1) + annotation (Line( + points={{57.3,30.4},{57.3,18},{64,18},{64,8.1}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bedroom.SolarRadiationPort_Roof, RoofS) + annotation (Line( + points={{-47.2,78},{-48,78},{-48,86},{90,86},{90,44},{110,44}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Children1.SolarRadiationPort_Roof, RoofN) + annotation (Line( + points={{48.94,76},{48.94,86},{90,86},{90,76},{110,76}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Corridor.SolarRadiationPort_Roof, RoofN) + annotation (Line( + points={{47.2,10},{48,10},{48,18},{90,18},{90,76},{110,76}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bath.SolarRadiationPort_Roof, RoofN) + annotation (Line( + points={{50.94,-84},{50,-84},{50,-92},{90,-92},{90,76},{110,76}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(Bedroom.thermFloor, thermFloor_Bedroom) annotation (Line( + points={{-68,17.2},{-68,6},{-90,6},{-90,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children1.thermFloor, thermFloor_Children1) annotation (Line( + points={{68.7,30.4},{68,26},{68,20},{90,20},{90,-92},{-50,-92},{ + -50,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermFloor, thermFloor_Corridor) annotation (Line( + points={{68,-26.1},{68,-32},{90,-32},{90,-92},{-10,-92},{-10,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bath.thermFloor, thermFloor_Bath) annotation (Line( + points={{70.7,-38.4},{70.7,-32},{90,-32},{90,-92},{30,-92},{30, + -110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children2.thermFloor, thermFloor_Children2) annotation (Line( + points={{-70,-23.2},{-70,-14},{-90,-14},{-90,-92},{70,-92},{70,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Corridor.thermRoom, thermCorridor) annotation (Line( + points={{66,-5.2},{66,-14},{90,-14},{90,-110},{110,-110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bedroom.AirExchangePort, AirExchangePort[1]) annotation (Line( + points={{-67.3,76.88},{-67.3,86},{-90,86},{-90,-22.25},{-115,-22.25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Children1.AirExchangePort, AirExchangePort[2]) annotation (Line( + points={{66.895,75.64},{66.895,86},{-90,86},{-90,-14.75},{-115,-14.75}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Bath.AirExchangePort, AirExchangePort[3]) annotation (Line( + points={{68.895,-83.64},{68.895,-92},{-90,-92},{-90,-7.25},{-115, + -7.25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Children2.AirExchangePort, AirExchangePort[4]) annotation (Line( + points={{-69.3,-82.88},{-69.3,-92},{-90,-92},{-90,0.25},{-115,0.25}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Children1.starRoom, StarChildren1) annotation (Line( + points={{59.2,56.8},{59.2,46},{36,46},{36,40},{20,40}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Children1.thermRoom, ThermChildren1) annotation (Line( + points={{66.8,56.8},{66.8,46},{36,46},{36,60},{20,60}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermInsideWall1a, Children1.thermInsideWall1) + annotation (Line( + points={{-44,49.2},{-32,49.2},{-32,86},{36,86},{36,54.4},{45.9,54.4}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bedroom.thermRoom, ThermBedroom) annotation (Line( + points={{-66,52.4},{-66,28},{-32,28},{-32,60},{-20,60}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.starRoom, StarBedroom) annotation (Line( + points={{-58,52.4},{-58,28},{-32,28},{-32,40},{-20,40}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Bedroom.thermInsideWall1b, Corridor.thermInsideWall2a) + annotation (Line( + points={{-44,36.4},{-32,36.4},{-32,86},{36,86},{36,-7.1},{44,-7.1}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children2.starRoom, StarChildren2) annotation (Line( + points={{-60,-58.4},{-60,-34},{-34,-34},{-34,-60},{-20,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Children2.thermRoom, ThermChildren2) annotation (Line( + points={{-68,-58.4},{-68,-34},{-34,-34},{-34,-40},{-20,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bath.starRoom, StarBath) annotation (Line( + points={{61.2,-64.8},{61.2,-52},{36,-52},{36,-60},{20,-60}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Bath.thermRoom, ThermBath) annotation (Line( + points={{68.8,-64.8},{68.8,-52},{36,-52},{36,-40},{20,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children2.SolarRadiationPort_Roof, RoofS) annotation (Line( + points={{-49.2,-84},{-50,-84},{-50,-92},{90,-92},{90,44},{110,44}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Corridor.AirExchangePort, AirExchangePort_doorSt.y) annotation ( + Line( + points={{82,-10.71},{90,-10.71},{90,-92},{-90,-92},{-90,-60},{-99.2, + -60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Bedroom.thermFloor1, ThermFloor[1]) annotation (Line( + points={{-66.4,38.32},{-90,38.32},{-90,-4.5},{0,-4.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Children1.thermFloor1, ThermFloor[2]) annotation (Line( + points={{67.18,46.24},{90,46.24},{90,20},{0,20},{0,-1.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Bath.thermRoom, ThermFloor[3]) annotation (Line( + points={{68.8,-64.8},{90,-64.8},{90,20},{0,20},{0,1.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + connect(Children2.thermRoom, ThermFloor[4]) annotation (Line( + points={{-68,-58.4},{-90,-58.4},{-90,-4},{-44,-4},{0,-4},{0,4.5}}, + color={191,0,0}, + pattern=LinePattern.Dash, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/Upperfloor_5Rooms.png")), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), + graphics), Icon(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={Bitmap(extent={{-96,90},{100,-106}}, + fileName= + "modelica://AixLib/Images/House/Upperfloor_icon.png"), + Text( + extent={{-56,74},{-4,60}}, + lineColor={0,0,0}, + textString="Bedroom"), + Text( + extent={{16,76},{62,66}}, + lineColor={0,0,0}, + textString="Children1"), + Text( + extent={{22,28},{64,14}}, + lineColor={0,0,0}, + textString="Corridor"), + Text( + extent={{22,-42},{58,-56}}, + lineColor={0,0,0}, + textString="Bath"), + Text( + extent={{-62,-2},{-6,-16}}, + lineColor={0,0,0}, + textString="Children2")}), + Documentation(revisions=" + +

+ +", info=" +

Overview

+

Model for the envelope of the upper floor.

+

Level of Development

+

+")); + end UpperloorBuildingEnvelope; + + model WholeHouseBuildingEnvelope + import AixLib; + + ///////// construction parameters + + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + parameter Integer TRY = 1 "Region according to TRY" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "TRY01", + choice = 2 "TRY02", choice = 3 "TRY03", choice = 4 "TRY04", choice = 5 "TRY05", choice = 6 "TRY06", choice = 7 "TRY07", choice = 8 "TRY08", + choice = 9 "TRY09", choice = 10 "TRY10", choice = 11 "TRY11", choice = 12 "TRY12", choice = 13 "TRY13", choice = 14 "TRY14", choice= 15 "TRY15",radioButtons = true)); + + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater + "Medium in the system" + annotation (Dialog(tab = "Hydraulics", group = "Medium"),choicesAllMatching=true); + parameter Real AirExchangeCorridor = 2 + "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); + parameter Real AirExchangeAttic = 0 "Air exchange attic in 1/h " annotation(Dialog(group = "Air Exchange Attic", descriptionLabel = true)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = true "Dynamic ventilation" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 + "Outside temperature at which the heating activates" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 200 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + GroundFloorBuildingEnvelope + groundFloor_Building( + TMC=TMC, + TIR=TIR, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset) + annotation (Placement(transformation(extent={{-26,-94},{22,-42}}))); + UpperloorBuildingEnvelope + upperFloor_Building( + TMC=TMC, + TIR=TIR, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + withDynamicVentilation=withDynamicVentilation) + annotation (Placement(transformation(extent={{-26,-22},{20,30}}))); + Rooms.OFD.Attic_Ro2Lf5 attic_2Ro_5Rooms( + length=10.64, + room1_length=5.875, + room2_length=3.215, + room3_length=3.92, + room4_length=3.215, + room5_length=4.62, + room1_width=3.84, + room2_width=3.84, + room3_width=3.84, + room4_width=3.84, + room5_width=3.84, + roof_width1=3.36, + roof_width2=3.36, + solar_absorptance_RO=0.1, + width=4.75, + TMC=TMC, + TIR=TIR, + alfa=1.5707963267949) + annotation (Placement(transformation(extent={{-26,46},{20,86}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-120,26},{-80,66}}), + iconTransformation(extent={{-108,38},{-80,66}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] + annotation (Placement(transformation(extent={{-120,-16},{-80,24}}), + iconTransformation(extent={{-108,-4},{-80,24}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofS + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,58}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofN + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,90}))); + Utilities.Interfaces.SolarRad_in North annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,18}))); + Utilities.Interfaces.SolarRad_in East annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-18}))); + Utilities.Interfaces.SolarRad_in South annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-56}))); + Utilities.Interfaces.SolarRad_in West annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-90}))); + AixLib.Building.Components.DryAir.VarAirExchange varAirExchange(V= + upperFloor_Building.Corridor.airload.V) annotation (Placement( + transformation( + extent={{-6,-6},{6,6}}, + rotation=270, + origin={36,-32}))); + Modelica.Blocks.Sources.Constant AirExchangeCorridor_Source(k= + AirExchangeCorridor) annotation (Placement(transformation( + extent={{22,-34},{26,-30}}))); + Modelica.Blocks.Sources.Constant AirExchangeAttic_Source(k=AirExchangeAttic) + annotation (Placement(transformation( + extent={{-60,70},{-52,78}}))); + equation + connect(groundFloor_Building.thermCeiling_Livingroom, upperFloor_Building.thermFloor_Bedroom) + annotation (Line( + points={{-24.08,-39.66},{-24.08,-32.83},{-23.7,-32.83},{-23.7,-24.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermCeiling_Hobby, upperFloor_Building.thermFloor_Children1) + annotation (Line( + points={{-13.76,-39.66},{-13.76,-32.83},{-14.5,-32.83},{-14.5,-24.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermCeiling_Corridor, upperFloor_Building.thermFloor_Corridor) + annotation (Line( + points={{-4.64,-39.66},{-4.64,-32.83},{-5.3,-32.83},{-5.3,-24.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermCeiling_WCStorage, upperFloor_Building.thermFloor_Bath) + annotation (Line( + points={{4.96,-39.66},{4.96,-32.83},{3.9,-32.83},{3.9,-24.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermCeiling_Kitchen, upperFloor_Building.thermFloor_Children2) + annotation (Line( + points={{15.04,-39.66},{15.04,-32.83},{13.1,-32.83},{13.1,-24.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermOutside, thermOutside) annotation (Line( + points={{-27.84,23.24},{-74,23.24},{-74,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.thermOutside, thermOutside) annotation (Line( + points={{-23.7,84},{-74,84},{-74,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermOutside, thermOutside) annotation (Line( + points={{-27.92,-48.76},{-74,-48.76},{-74,90},{-90,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCeiling_Bedroom, attic_2Ro_5Rooms.thermRoom1) + annotation (Line( + points={{-23.7,32.34},{-23.7,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCeiling_Children1, attic_2Ro_5Rooms.thermRoom2) + annotation (Line( + points={{-14.27,32.34},{-14.27,40.17},{-14.5,40.17},{-14.5,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCeiling_Corridor, attic_2Ro_5Rooms.thermRoom3) + annotation (Line( + points={{-5.53,32.34},{-5.53,40.17},{-5.3,40.17},{-5.3,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCeiling_Bath, attic_2Ro_5Rooms.thermRoom4) + annotation (Line( + points={{3.67,32.34},{3.67,40.17},{3.9,40.17},{3.9,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCeiling_Children2, attic_2Ro_5Rooms.thermRoom5) + annotation (Line( + points={{12.87,32.34},{12.87,39.17},{13.1,39.17},{13.1,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-25.885,66},{-74,66},{-74,46},{-100,46}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(upperFloor_Building.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.45,10.5},{-32,12},{-74,12},{-74,46},{-100,46}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(groundFloor_Building.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.6,-60.98},{-74,-60.98},{-74,46},{-100,46}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(upperFloor_Building.North, North) annotation (Line( + points={{22.3,5.56},{60,5.56},{60,18},{90,18}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.North, North) annotation (Line( + points={{24.4,-45.12},{60,-45.12},{60,18},{90,18}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.East, East) annotation (Line( + points={{22.3,-2.24},{60,-2.24},{60,-18},{90,-18}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.East, East) annotation (Line( + points={{24.4,-52.4},{60,-52.4},{60,-18},{90,-18}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.South, South) annotation (Line( + points={{22.3,-10.04},{60,-10.04},{60,-56},{90,-56}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.South, South) annotation (Line( + points={{24.4,-61.24},{60,-61.24},{60,-56},{90,-56}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.West, West) annotation (Line( + points={{22.3,-17.84},{60,-17.84},{60,-90},{90,-90}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.West, West) annotation (Line( + points={{24.4,-72.16},{60,-72.16},{60,-90},{90,-90}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.RoofS, SolarRadiationPort_RoofS) + annotation (Line( + points={{22.3,15.44},{60,15.44},{60,58},{90,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.RoofN, SolarRadiationPort_RoofN) + annotation (Line( + points={{22.3,23.76},{60,23.76},{60,90},{90,90}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(groundFloor_Building.thermCorridor,varAirExchange.port_b) + annotation (Line( + points={{24.4,-39.4},{36,-39.4},{36,-38}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(upperFloor_Building.thermCorridor,varAirExchange.port_a) annotation ( + Line( + points={{22.3,-24.6},{36,-24.6},{36,-26}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(AirExchangeCorridor_Source.y, varAirExchange.InPort1) + annotation (Line( + points={{26.2,-32},{28,-32},{28,-24},{32.16,-24},{32.16,-26.6}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(groundFloor_Building.AirExchangePort, AirExchangePort) + annotation (Line( + points={{-29.6,-68.78},{-74,-68.78},{-74,4},{-100,4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(upperFloor_Building.AirExchangePort, AirExchangePort) annotation ( + Line( + points={{-29.45,1.14},{-74,1.14},{-74,4},{-100,4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(AirExchangeAttic_Source.y, attic_2Ro_5Rooms.AirExchangePort) + annotation (Line( + points={{-51.6,74},{-26,74}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.SolarRadiationPort_RO1, SolarRadiationPort_RoofS) + annotation (Line( + points={{-14.5,84},{-14,88},{-14,90},{60,90},{60,58},{90,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.SolarRadiationPort_RO2, SolarRadiationPort_RoofN) + annotation (Line( + points={{8.5,84},{10,84},{10,90},{90,90}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.SolarRadiationPort_OW1, SolarRadiationPort_RoofS) + annotation (Line( + points={{-27.38,62},{-74,62},{-74,90},{60,90},{60,58},{90,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(attic_2Ro_5Rooms.SolarRadiationPort_OW2, SolarRadiationPort_RoofN) + annotation (Line( + points={{22.3,62.4},{60,62.4},{60,90},{90,90}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/Grundriss.png")), Icon( + graphics={Bitmap(extent={{-78,74},{72,-68}}, fileName= + "modelica://AixLib/Images/House/Grundriss.PNG")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics), + Documentation(info=" +

Overview

+

Model for the envelope of the whole one family dwelling.

+

Level of Development

+

+", revisions=" + +

+ +")); + end WholeHouseBuildingEnvelope; + annotation (Documentation(info=" +

Overview

+

Package with models for the whole building envelope.

+")); + end BuildingEnvelope; + + package EnergySystem + extends Modelica.Icons.Package; + + package IdealHeaters + extends Modelica.Icons.Package; + + model GroundFloor + parameter Real ratioRadHeat=0.3 + "ratio of radiative heat from total heat generated"; + + Utilities.Interfaces.Star Rad_Livingroom annotation (Placement( + transformation(extent={{-145,84},{-129,101}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Livingroom + annotation (Placement(transformation(extent={{-143,64},{-130,77}}))); + Utilities.Interfaces.Star Rad_Kitchen annotation (Placement( + transformation(extent={{-146,-38},{-129,-22}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Kitchen + annotation (Placement(transformation(extent={{-145,-66},{-131,-51}}))); + Utilities.Interfaces.Star Rad_Hobby annotation (Placement( + transformation(extent={{128,90},{146,108}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Hobby + annotation (Placement(transformation(extent={{130,64},{146,82}}))); + Utilities.Interfaces.Star Rad_Corridor annotation (Placement( + transformation(extent={{128,34},{148,54}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Corridor + annotation (Placement(transformation(extent={{130,7},{145,24}}))); + Utilities.Interfaces.Star Rad_WC annotation (Placement( + transformation(extent={{129,-26},{149,-6}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Storage + annotation (Placement(transformation(extent={{131,-51},{150,-33}}))); + Modelica.Blocks.Interfaces.RealInput TSet_GF[5] annotation (Placement( + transformation(extent={{-86,85},{-58,115}}), iconTransformation(extent={ + {-79,91},{-58,115}}))); + + Modelica.Blocks.Continuous.LimPID PI_livingroom( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{-106,-14},{ + -86,6}}))); + Modelica.Blocks.Math.Gain gainConv_livinrgoom(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{-75,0},{-66,9}}))); + Modelica.Blocks.Math.Gain gainRad_livinrgoom(k=ratioRadHeat) + annotation (Placement(transformation(extent={{-74,-17},{-65,-8}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceConv_livingroom "source convective heat livingroom" + annotation (Placement(transformation(extent={{-60,-5},{-40,15}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceRad_livingroom "source radiative heat livingroom" + annotation (Placement(transformation(extent={{-59,-23},{-39,-3}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_livingroom annotation (Placement(transformation(extent= + {{-126,-24},{-114,-12}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_hobby + annotation (Placement(transformation(extent={{5,63},{17,75}}))); + Modelica.Blocks.Continuous.LimPID PI_hobby( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) + annotation (Placement(transformation(extent={{25,73},{45,93}}))); + Modelica.Blocks.Math.Gain gainConv_hobby(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{56,87},{65,96}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceRad_hobby "source radiative heat hobby" + annotation (Placement(transformation(extent={{72,64},{92,84}}))); + Modelica.Blocks.Math.Gain gainRad_hobby(k=ratioRadHeat) + annotation (Placement(transformation(extent={{57,70},{66,79}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceConv_hobby "source convective heat hobby" + annotation (Placement(transformation(extent={{71,82},{91,102}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_corridor + annotation (Placement(transformation(extent={{14,15},{26,27}}))); + Modelica.Blocks.Continuous.LimPID PI_corridor( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) + annotation (Placement(transformation(extent={{34,25},{54,45}}))); + Modelica.Blocks.Math.Gain gainConv_corridor(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{65,39},{74,48}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceRad_corridor "source radiative heat corridor" + annotation (Placement(transformation(extent={{81,16},{101,36}}))); + Modelica.Blocks.Math.Gain gainRad_corridor(k=ratioRadHeat) + annotation (Placement(transformation(extent={{66,22},{75,31}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceConv_corridor "source convective heat corridor" + annotation (Placement(transformation(extent={{80,34},{100,54}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_WC annotation (Placement(transformation(extent={{24, + -66},{36,-54}}))); + Modelica.Blocks.Continuous.LimPID PI_WC( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{44,-56},{64, + -36}}))); + Modelica.Blocks.Math.Gain gainConv_WC(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{75,-42},{84,-33}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceRad_WC "source radiative heat WC" annotation (Placement( + transformation(extent={{91,-65},{111,-45}}))); + Modelica.Blocks.Math.Gain gainRad_WC(k=ratioRadHeat) annotation ( + Placement(transformation(extent={{76,-59},{85,-50}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceConv_WC "source convective heat WC" annotation (Placement( + transformation(extent={{90,-47},{110,-27}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_kitchen annotation (Placement(transformation(extent={{ + -124,-92},{-112,-80}}))); + Modelica.Blocks.Continuous.LimPID PI_kitchen( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{-104,-82},{ + -84,-62}}))); + Modelica.Blocks.Math.Gain gainConv_kitchen(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{-73,-68},{-64,-59}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceRad_kitchen "source radiative heat kitchen" annotation ( + Placement(transformation(extent={{-57,-91},{-37,-71}}))); + Modelica.Blocks.Math.Gain gainRad_kitchen(k=ratioRadHeat) + annotation (Placement(transformation(extent={{-72,-85},{-63,-76}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + SourceConv_kitchen "source convective heat kitchen" annotation ( + Placement(transformation(extent={{-58,-73},{-38,-53}}))); + equation + connect(PI_livingroom.y, gainConv_livinrgoom.u) annotation (Line( + points={{-85,-4},{-80,-4},{-80,4.5},{-75.9,4.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_livingroom.y, gainRad_livinrgoom.u) annotation (Line( + points={{-85,-4},{-80,-4},{-80,-12.5},{-74.9,-12.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_livingroom.Q_flow, gainConv_livinrgoom.y) + annotation (Line( + points={{-60,5},{-62,5},{-62,4.5},{-65.55,4.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_livinrgoom.y, SourceRad_livingroom.Q_flow) + annotation (Line( + points={{-64.55,-12.5},{-61,-12.5},{-61,-13},{-59,-13}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_livingroom.T, PI_livingroom.u_m) annotation ( + Line( + points={{-114,-18},{-96,-18},{-96,-16}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_livingroom.port, Con_Livingroom) annotation ( + Line( + points={{-126,-18},{-130,-18},{-130,70.5},{-136.5,70.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(PI_livingroom.u_s, TSet_GF[1]) annotation (Line( + points={{-108,-4},{-114,-4},{-114,-3},{-130,-3},{-130,88},{-72, + 88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_livingroom.port, Con_Livingroom) annotation ( + Line( + points={{-40,5},{-22,5},{-22,28},{-125,28},{-125,70.5},{-136.5, + 70.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_livingroom.port, Rad_Livingroom) annotation (Line( + points={{-39,-13},{-22,-13},{-22,28},{-125,28},{-125,92.5},{ + -137,92.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_hobby.T, PI_hobby.u_m) annotation (Line( + points={{17,69},{35,69},{35,71}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_hobby.y, gainRad_hobby.u) annotation (Line( + points={{46,83},{51,83},{51,74.5},{56.1,74.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_hobby.y, gainConv_hobby.u) annotation (Line( + points={{46,83},{51,83},{51,91.5},{55.1,91.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_corridor.T, PI_corridor.u_m) annotation (Line( + points={{26,21},{44,21},{44,23}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_corridor.y, gainRad_corridor.u) annotation (Line( + points={{55,35},{60,35},{60,26.5},{65.1,26.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_corridor.y, gainConv_corridor.u) annotation (Line( + points={{55,35},{60,35},{60,43.5},{64.1,43.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_WC.T, PI_WC.u_m) annotation (Line( + points={{36,-60},{54,-60},{54,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_WC.y, gainRad_WC.u) annotation (Line( + points={{65,-46},{70,-46},{70,-54.5},{75.1,-54.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_WC.y, gainConv_WC.u) annotation (Line( + points={{65,-46},{70,-46},{70,-37.5},{74.1,-37.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_kitchen.T, PI_kitchen.u_m) annotation (Line( + points={{-112,-86},{-94,-86},{-94,-84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_kitchen.y, gainRad_kitchen.u) annotation (Line( + points={{-83,-72},{-78,-72},{-78,-80.5},{-72.9,-80.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_kitchen.y, gainConv_kitchen.u) annotation (Line( + points={{-83,-72},{-78,-72},{-78,-63.5},{-73.9,-63.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainConv_hobby.y, SourceConv_hobby.Q_flow) annotation (Line( + points={{65.45,91.5},{67.725,91.5},{67.725,92},{71,92}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_hobby.y, SourceRad_hobby.Q_flow) annotation (Line( + points={{66.45,74.5},{68.225,74.5},{68.225,74},{72,74}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_corridor.y, SourceRad_corridor.Q_flow) annotation ( + Line( + points={{75.45,26.5},{77.725,26.5},{77.725,26},{81,26}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainConv_corridor.y, SourceConv_corridor.Q_flow) + annotation (Line( + points={{74.45,43.5},{76.725,43.5},{76.725,44},{80,44}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainConv_WC.y, SourceConv_WC.Q_flow) annotation (Line( + points={{84.45,-37.5},{87.225,-37.5},{87.225,-37},{90,-37}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_WC.y, SourceRad_WC.Q_flow) annotation (Line( + points={{85.45,-54.5},{87.225,-54.5},{87.225,-55},{91,-55}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainConv_kitchen.y, SourceConv_kitchen.Q_flow) annotation ( + Line( + points={{-63.55,-63.5},{-61.775,-63.5},{-61.775,-63},{-58,-63}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(gainRad_kitchen.y, SourceRad_kitchen.Q_flow) annotation ( + Line( + points={{-62.55,-80.5},{-59.775,-80.5},{-59.775,-81},{-57,-81}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(tempSensor_kitchen.port, Con_Kitchen) annotation (Line( + points={{-124,-86},{-124,-86},{-130,-86},{-130,-59},{-134,-59}, + {-134,-58.5},{-138,-58.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_kitchen.port, Con_Kitchen) annotation (Line( + points={{-38,-63},{-23,-63},{-23,-49},{-130,-49},{-130,-58.5},{ + -138,-58.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_kitchen.port, Rad_Kitchen) annotation (Line( + points={{-37,-81},{-23,-81},{-23,-30},{-137.5,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_WC.port, Con_Storage) annotation (Line( + points={{110,-37},{127,-37},{127,-42},{140.5,-42}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_WC.port, Rad_WC) annotation (Line( + points={{111,-55},{127,-55},{127,-16},{139,-16}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_WC.port, Con_Storage) annotation (Line( + points={{24,-60},{24,-67},{127,-67},{127,-42},{140.5,-42}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_corridor.port, Con_Corridor) annotation (Line( + points={{14,21},{3,21},{3,10},{137.5,10},{137.5,15.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_corridor.port, Rad_Corridor) annotation (Line( + points={{101,26},{139,26},{139,44},{138,44}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_corridor.port, Con_Corridor) annotation (Line( + points={{100,44},{126,44},{126,10},{138,10},{138,13},{137.5,13}, + {137.5,15.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_hobby.port, Con_Hobby) annotation (Line( + points={{5,69},{0,69},{0,63},{138,63},{138,73}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_hobby.port, Rad_Hobby) annotation (Line( + points={{92,74},{126,74},{126,99},{137,99}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_hobby.port, Con_Hobby) annotation (Line( + points={{91,92},{126,92},{126,73},{138,73}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(PI_hobby.u_s, TSet_GF[2]) annotation (Line( + points={{23,83},{1,83},{1,94},{-72,94}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_corridor.u_s, TSet_GF[3]) annotation (Line( + points={{32,35},{1,35},{1,100},{-72,100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_WC.u_s, TSet_GF[4]) annotation (Line( + points={{42,-46},{24,-46},{24,-46},{1,-46},{1,106},{-72,106}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_kitchen.u_s, TSet_GF[5]) annotation (Line( + points={{-106,-72},{-130,-72},{-130,112},{-72,112}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-130,-100},{130,100}}, + grid={1,1}), graphics={ + Rectangle( + extent={{1,100},{126,63}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{3,58},{126,15}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{1,-14},{127,-67}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-129,28},{-22,-26}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-130,-49},{-23,-103}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,-88},{-69,-103}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Kitchen"), + Text( + extent={{-155,24},{-48,11}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Livingroom"), + Text( + extent={{31,-15},{138,-28}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="WC/Storage"), + Text( + extent={{49,58},{156,45}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Corridor"), + Text( + extent={{51,99},{158,86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Hobby"), + Text( + extent={{-68,87},{-15,55}}, + lineColor={0,0,0}, + textString="1 - Livingroom +2- Hobby +3 - Corridor +4 - WC/Storage +5 - Kitchen")}), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-130,-100},{130,100}}, + grid={1,1}), graphics={ + Rectangle( + extent={{-119,92},{123,-79}}, + lineColor={255,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Line( + points={{-99,22},{104,22},{104,-6}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-98,13},{95,13},{95,-6}}, + color={0,0,255}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-21,13},{-21,35}}, + color={0,0,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-14,23},{-14,45}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Text( + extent={{-87,74},{-34,42}}, + lineColor={0,0,0}, + textString="1 - Livingroom +2- Hobby +3 - Corridor +4 - WC/Storage +5 - Kitchen")}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the ground floor.

+

Level of Development

+

+")); + end GroundFloor; + + model UpperFloor + parameter Real ratioRadHeat=0.3 + "ratio of radiative heat from total heat generated"; + + Utilities.Interfaces.Star Rad_Bedroom annotation (Placement( + transformation(extent={{-149,80},{-129,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Bedroom + annotation (Placement(transformation(extent={{-150,49},{-130,69}}))); + Utilities.Interfaces.Star Rad_Children2 annotation (Placement( + transformation(extent={{-149,-25},{-129,-5}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Children2 + annotation (Placement(transformation(extent={{-151,-61},{-131,-41}}))); + Utilities.Interfaces.Star Rad_Children1 annotation (Placement( + transformation(extent={{127,63},{147,83}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Chidlren1 + annotation (Placement(transformation(extent={{129,40},{149,60}}))); + Utilities.Interfaces.Star Rad_Bath annotation (Placement( + transformation(extent={{130,-50},{150,-30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_Bath + annotation (Placement(transformation(extent={{129,-78},{149,-58}}))); + Modelica.Blocks.Interfaces.RealInput TSet_UF[4] annotation (Placement( + transformation(extent={{-85,82},{-57,112}}), iconTransformation(extent={ + {-77,90},{-57,112}}))); + + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_bedroom + annotation (Placement(transformation(extent={{-119,-11},{-107,1}}))); + Modelica.Blocks.Continuous.LimPID PI_bedroom( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{-99,-1},{-79,19}}))); + Modelica.Blocks.Math.Gain gainRad_bedroom(k=ratioRadHeat) + annotation (Placement(transformation(extent={{-67,-4},{-58,5}}))); + Modelica.Blocks.Math.Gain gainConv_bedroom(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{-68,13},{-59,22}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceRad_bedroom + "source radiative heat bedroom" + annotation (Placement(transformation(extent={{-52,-10},{-32,10}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceConv_bedroom + "source convective heat bedroom" + annotation (Placement(transformation(extent={{-53,8},{-33,28}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_children1 + annotation (Placement(transformation(extent={{4,36},{16,48}}))); + Modelica.Blocks.Continuous.LimPID PI_children1( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{24,46},{44,66}}))); + Modelica.Blocks.Math.Gain gainRad_children1(k=ratioRadHeat) + annotation (Placement(transformation(extent={{56,43},{65,52}}))); + Modelica.Blocks.Math.Gain gainConv_children1(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{55,60},{64,69}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceRad_children1 + "source radiative heat children1" + annotation (Placement(transformation(extent={{71,37},{91,57}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceConv_children1 + "source convective heat children1" + annotation (Placement(transformation(extent={{70,55},{90,75}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_bath + annotation (Placement(transformation(extent={{17,-64},{29,-52}}))); + Modelica.Blocks.Continuous.LimPID PI_bath( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) annotation (Placement(transformation(extent={{37,-54},{57,-34}}))); + Modelica.Blocks.Math.Gain gainRad_bath(k=ratioRadHeat) + annotation (Placement(transformation(extent={{69,-57},{78,-48}}))); + Modelica.Blocks.Math.Gain gainConv_bath(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{68,-40},{77,-31}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceRad_bath + "source radiative heat bath" + annotation (Placement(transformation(extent={{84,-63},{104,-43}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceConv_bath + "source convective heat bath" + annotation (Placement(transformation(extent={{83,-45},{103,-25}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_children2 + annotation (Placement(transformation(extent={{-123,-69},{-111,-57}}))); + Modelica.Blocks.Continuous.LimPID PI_children2( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.3, + Ti=10, + yMax=2000, + yMin=0) + annotation (Placement(transformation(extent={{-103,-59},{-83,-39}}))); + Modelica.Blocks.Math.Gain gainRad_children2(k=ratioRadHeat) + annotation (Placement(transformation(extent={{-71,-62},{-62,-53}}))); + Modelica.Blocks.Math.Gain gainConv_children2(k=1 - ratioRadHeat) + annotation (Placement(transformation(extent={{-72,-45},{-63,-36}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceRad_children2 + "source radiative heat children2" + annotation (Placement(transformation(extent={{-56,-68},{-36,-48}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow SourceConv_children2 + "source convective heat children2" + annotation (Placement(transformation(extent={{-57,-50},{-37,-30}}))); + equation + connect(tempSensor_bedroom.T, PI_bedroom.u_m) annotation (Line( + points={{-107,-5},{-89,-5},{-89,-3}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_bedroom.y, gainRad_bedroom.u) annotation (Line( + points={{-78,9},{-73,9},{-73,0.5},{-67.9,0.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_bedroom.y, gainConv_bedroom.u) annotation (Line( + points={{-78,9},{-73,9},{-73,17.5},{-68.9,17.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_bedroom.y, SourceRad_bedroom.Q_flow) annotation (Line( + points={{-57.55,0.5},{-54,0.5},{-54,0},{-52,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_bedroom.Q_flow, gainConv_bedroom.y) annotation (Line( + points={{-53,18},{-55,18},{-55,17.5},{-58.55,17.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_children1.T, PI_children1.u_m) annotation (Line( + points={{16,42},{34,42},{34,44}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children1.y, gainRad_children1.u) annotation (Line( + points={{45,56},{50,56},{50,47.5},{55.1,47.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children1.y, gainConv_children1.u) annotation (Line( + points={{45,56},{50,56},{50,64.5},{54.1,64.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_children1.y, SourceRad_children1.Q_flow) annotation (Line( + points={{65.45,47.5},{69,47.5},{69,47},{71,47}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_children1.Q_flow, gainConv_children1.y) annotation (Line( + points={{70,65},{68,65},{68,64.5},{64.45,64.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_bath.T, PI_bath.u_m) annotation (Line( + points={{29,-58},{47,-58},{47,-56}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_bath.y, gainRad_bath.u) annotation (Line( + points={{58,-44},{63,-44},{63,-52.5},{68.1,-52.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_bath.y, gainConv_bath.u) annotation (Line( + points={{58,-44},{63,-44},{63,-35.5},{67.1,-35.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_bath.y, SourceRad_bath.Q_flow) annotation (Line( + points={{78.45,-52.5},{82,-52.5},{82,-53},{84,-53}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_bath.Q_flow, gainConv_bath.y) annotation (Line( + points={{83,-35},{81,-35},{81,-35.5},{77.45,-35.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_children2.T, PI_children2.u_m) annotation (Line( + points={{-111,-63},{-93,-63},{-93,-61}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children2.y, gainRad_children2.u) annotation (Line( + points={{-82,-49},{-77,-49},{-77,-57.5},{-71.9,-57.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children2.y, gainConv_children2.u) annotation (Line( + points={{-82,-49},{-77,-49},{-77,-40.5},{-72.9,-40.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(gainRad_children2.y, SourceRad_children2.Q_flow) annotation (Line( + points={{-61.55,-57.5},{-58,-57.5},{-58,-58},{-56,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_children2.Q_flow, gainConv_children2.y) annotation (Line( + points={{-57,-40},{-59,-40},{-59,-40.5},{-62.55,-40.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Con_Bedroom, tempSensor_bedroom.port) annotation (Line( + points={{-140,59},{-129,59},{-129,-5},{-119,-5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_children1.port, Con_Chidlren1) annotation (Line( + points={{4,42},{0,42},{0,30},{139,30},{139,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_bath.port, Con_Bath) annotation (Line( + points={{17,-58},{1,-58},{1,-68},{139,-68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_children2.port, Con_Children2) annotation (Line( + points={{-123,-63},{-129,-63},{-129,-51},{-141,-51}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_children2.port, Rad_Children2) annotation (Line( + points={{-36,-58},{-23,-58},{-23,-15},{-139,-15}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_children2.port, Con_Children2) annotation (Line( + points={{-37,-40},{-23,-40},{-23,-71},{-129,-71},{-129,-51},{-141,-51}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_children1.port, Con_Chidlren1) annotation (Line( + points={{90,65},{139,65},{139,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_children1.port, Rad_Children1) annotation (Line( + points={{91,47},{137,47},{137,73}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceConv_bath.port, Con_Bath) annotation (Line( + points={{103,-35},{111,-35},{111,-36},{139,-36},{139,-68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_bath.port, Rad_Bath) annotation (Line( + points={{104,-53},{118,-53},{118,-55},{140,-55},{140,-40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(PI_bedroom.u_s, TSet_UF[1]) annotation (Line( + points={{-101,9},{-129,9},{-129,85.75},{-71,85.75}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children1.u_s, TSet_UF[2]) annotation (Line( + points={{22,56},{0,56},{0,93.25},{-71,93.25}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_bath.u_s, TSet_UF[3]) annotation (Line( + points={{35,-44},{0,-44},{0,100.75},{-71,100.75}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PI_children2.u_s, TSet_UF[4]) annotation (Line( + points={{-105,-49},{-129,-49},{-129,108.25},{-71,108.25}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(SourceConv_bedroom.port, Con_Bedroom) annotation (Line( + points={{-33,18},{-22,18},{-22,43},{-140,43},{-140,59}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(SourceRad_bedroom.port, Rad_Bedroom) annotation (Line( + points={{-32,0},{-22,0},{-22,43},{-139,43},{-139,90}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Dialog(group = "Radiators", descriptionLabel = true), + Dialog(group = "Valves", descriptionLabel = true), + __Dymola_Images(Parameters(source="AixLib/Images/House/UpperFloor_Hydraulics.png")), + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-130,-100},{130,100}}, + grid={1,1}), graphics={ + Rectangle( + extent={{0,73},{127,30}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,-14},{129,-71}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-129,43},{-22,-11}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-130,-16},{-23,-70}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-129,-17},{-78,-31}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Children2"), + Text( + extent={{-155,38},{-48,25}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Bedroom"), + Text( + extent={{31,-15},{138,-28}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Bath"), + Text( + extent={{52,41},{159,28}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Children1"), + Text( + extent={{-53,95},{-11,72}}, + lineColor={0,0,0}, + textString="1 - Bedroom +2- Children1 +3 - Bath +4 - Children2")}), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-130,-100},{130,100}}, + grid={1,1}), graphics={ + Rectangle( + extent={{-122,91},{120,-80}}, + lineColor={255,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Line( + points={{-17,22},{-17,44}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-102,21},{101,21},{101,-7}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-101,12},{92,12},{92,-7}}, + color={0,0,255}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-24,12},{-24,34}}, + color={0,0,255}, + thickness=1, + smooth=Smooth.None), + Text( + extent={{-79,66},{-37,43}}, + lineColor={0,0,0}, + textString="1 - Bedroom +2- Children1 +3 - Bath +4 - Children2")}), + Documentation(revisions=" +

+", info=" +

Overview

+

Model for the upper floor.

+

Level of Development

+

+")); + end UpperFloor; + annotation (Documentation(info=" +

Overview

+


Package for models with ideal heaters

+

Concept

+

The model is only an example on how an energy system is built and what connectors it need to connect to the building's envelope.

+")); + end IdealHeaters; + + annotation (Documentation(info=" +

Overview

+

Package for energy systems for the one family dwelling.

+

Concept

+

The package includes an energy systems based on ideal heaters. It should serve as an example of how such a model can be built.

+")); + end EnergySystem; + + package BuildingAndEnergySystem + extends Modelica.Icons.Package; + + model OFD_IdealHeaters + parameter Real ratioRadHeat=0.3 + "ratio of radiative heat from total heat generated"; + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + + parameter Integer TIR = 1 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Real AirExchangeCorridor = 2 + "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); + parameter Real AirExchangeAttic = 0 "Air exchange attic in 1/h " annotation(Dialog(group = "Air Exchange Attic", descriptionLabel = true)); + + // Dynamic Ventilation + parameter Boolean withDynamicVentilation = true "Dynamic ventilation" + annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 + "Outside temperature at which the heating activates" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Real Max_VR = 200 "Maximal ventilation rate" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 + "Difference to set temperature" annotation (Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + + BuildingEnvelope.GroundFloorBuildingEnvelope + GF( + TMC=TMC, + TIR=TIR, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset) + annotation (Placement(transformation(extent={{-26,-94},{22,-42}}))); + BuildingEnvelope.UpperloorBuildingEnvelope + UF( + TMC=TMC, + TIR=TIR, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset) + annotation (Placement(transformation(extent={{-26,-26},{20,26}}))); + Rooms.OFD.Attic_Ro2Lf5 Attic( + length=10.64, + room1_length=5.875, + room2_length=3.215, + room3_length=3.92, + room4_length=3.215, + room5_length=4.62, + roof_width1=3.36, + roof_width2=3.36, + solar_absorptance_RO=0.1, + width=4.75, + room1_width=2.28, + room2_width=2.28, + room3_width=2.28, + room4_width=2.28, + room5_width=2.28, + alfa=1.5707963267949) + annotation (Placement(transformation(extent={{-26,46},{20,86}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=270, + origin={-74,120}), + iconTransformation(extent={{-14,-14},{14,14}}, + rotation=270, + origin={-68,114}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort[6] + "[1:6]=[N, E, S, W, RoofN, RoofS]" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=180, + origin={190,90}))); + Modelica.Blocks.Interfaces.RealInput NaturalVentilation_UF[4] annotation ( + Placement(transformation(extent={{-118,42},{-86,74}}), iconTransformation( + extent={{-118,42},{-86,74}}))); + Modelica.Blocks.Interfaces.RealInput NaturalVentilation_GF[4] annotation ( + Placement(transformation(extent={{-116,-2},{-84,30}}), iconTransformation( + extent={{-116,-2},{-84,30}}))); + Modelica.Blocks.Interfaces.RealInput TSet_UF[4] annotation (Placement( + transformation(extent={{-118,-52},{-84,-18}}), iconTransformation( + extent={{-118,-52},{-84,-18}}))); + Modelica.Blocks.Interfaces.RealInput TSet_GF[5] annotation (Placement( + transformation(extent={{-118,-100},{-82,-64}}), iconTransformation( + extent={{-118,-100},{-82,-64}}))); + Modelica.Blocks.Sources.Constant AirExchangeCorridor_Source(k= + AirExchangeCorridor) + annotation (Placement(transformation(extent={{20,-34},{24,-30}}))); + AixLib.Building.Components.DryAir.VarAirExchange varAirExchange(V=UF.Corridor.airload.V) + annotation (Placement(transformation( + extent={{-6,-6},{6,6}}, + rotation=270, + origin={34,-32}))); + EnergySystem.IdealHeaters.GroundFloor GF_Hydraulic(ratioRadHeat= + ratioRadHeat) + annotation (Placement(transformation(extent={{86,-84},{128,-52}}))); + + EnergySystem.IdealHeaters.UpperFloor UF_Hydraulic(ratioRadHeat= + ratioRadHeat) + annotation (Placement(transformation(extent={{88,-10},{132,24}}))); + + Modelica.Blocks.Sources.Constant AirExchangeAttic_Source(k= + AirExchangeAttic) "Storage" annotation ( + Placement(transformation(extent={{-96,80},{-80,96}}), + iconTransformation(extent={{-122,-72},{-100,-50}}))); + Modelica.Blocks.Interfaces.RealInput Air_Temp annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={120,116}), iconTransformation( + extent={{-14,-14},{14,14}}, + rotation=-90, + origin={120,114}))); + public + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature tempOutside + annotation (Placement(transformation(extent={{138.5,62},{158,80}}))); + equation + + connect(GF.thermCeiling_Livingroom, UF.thermFloor_Bedroom) + annotation (Line( + points={{-24.08,-39.66},{-24.08,-32.83},{-23.7,-32.83},{-23.7,-28.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.thermCeiling_Hobby, UF.thermFloor_Children1) + annotation (Line( + points={{-13.76,-39.66},{-13.76,-32.83},{-14.5,-32.83},{-14.5,-28.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.thermCeiling_Kitchen, UF.thermFloor_Children2) + annotation (Line( + points={{15.04,-39.66},{15.04,-32.83},{13.1,-32.83},{13.1,-28.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.thermCeiling_Bedroom, Attic.thermRoom1) + annotation (Line( + points={{-23.7,28.34},{-23.7,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.thermCeiling_Children1, Attic.thermRoom2) + annotation (Line( + points={{-14.27,28.34},{-14.27,40.17},{-14.5,40.17},{-14.5,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.thermCeiling_Corridor, Attic.thermRoom3) + annotation (Line( + points={{-5.53,28.34},{-5.53,40.17},{-5.3,40.17},{-5.3,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.thermCeiling_Bath, Attic.thermRoom4) + annotation (Line( + points={{3.67,28.34},{3.67,40.17},{3.9,40.17},{3.9,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.thermCeiling_Children2, Attic.thermRoom5) + annotation (Line( + points={{12.87,28.34},{12.87,39.17},{13.1,39.17},{13.1,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Attic.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-25.885,66},{-74,66},{-74,120}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(UF.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.45,6.5},{-32,12},{-74,12},{-74,120}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(GF.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.6,-60.98},{-74,-60.98},{-74,120}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(AirExchangeCorridor_Source.y,varAirExchange. InPort1) annotation ( + Line( + points={{24.2,-32},{26,-32},{26,-24},{30.16,-24},{30.16,-26.6}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(UF.thermCorridor,varAirExchange.port_a) annotation (Line( + points={{22.3,-28.6},{34,-28.6},{34,-26},{34,-26}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.thermCorridor,varAirExchange.port_b) annotation (Line( + points={{24.4,-39.4},{34,-39.4},{34,-38}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.StarBedroom, UF_Hydraulic.Rad_Bedroom) annotation ( + Line( + points={{-7.6,10.4},{-2,10.4},{-2,4},{74,4},{74,22.3},{86.4769, + 22.3}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(UF.StarChildren1, UF_Hydraulic.Rad_Children1) annotation ( + Line( + points={{1.6,10.4},{-2,10.4},{-2,4},{74,4},{74,30},{146,30},{146, + 20},{136,20},{136,19.41},{133.185,19.41}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.StarLivingroom, GF_Hydraulic.Rad_Livingroom) + annotation (Line( + points={{-6.8,-57.6},{-6.8,-68},{76,-68},{76,-53.2},{84.8692, + -53.2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + + connect(GF.StarHobby, GF_Hydraulic.Rad_Hobby) annotation (Line( + points={{2.8,-57.6},{2.8,-62},{0,-62},{0,-68},{76,-68},{76,-46},{ + 140,-46},{140,-52.16},{129.131,-52.16}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.StarCorridor, GF_Hydraulic.Rad_Corridor) annotation ( + Line( + points={{-2,-73.2},{0,-73.2},{0,-68},{76,-68},{76,-46},{140,-46}, + {140,-60.96},{129.292,-60.96}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.StarWC_Storage, GF_Hydraulic.Rad_WC) annotation (Line( + points={{2.8,-83.6},{0,-83.6},{0,-68},{76,-68},{76,-46},{140,-46}, + {140,-70.56},{129.454,-70.56}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.StarKitchen, GF_Hydraulic.Rad_Kitchen) annotation ( + Line( + points={{-6.8,-83.6},{0,-83.6},{0,-68},{76,-68},{76,-72.8},{ + 84.7885,-72.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(UF.ThermBedroom, UF_Hydraulic.Con_Bedroom) annotation ( + Line( + points={{-7.6,15.6},{-2,15.6},{-2,4},{74,4},{74,17.03},{86.3077, + 17.03}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.ThermChildren1, UF_Hydraulic.Con_Chidlren1) + annotation (Line( + points={{1.6,15.6},{-2,15.6},{-2,4},{74,4},{74,30},{146,30},{146, + 15.5},{133.523,15.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.ThermChildren2, UF_Hydraulic.Con_Children2) + annotation (Line( + points={{-7.6,-10.4},{-2,-10.4},{-2,4},{74,4},{74,-1.67},{86.1385, + -1.67}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.ThermBath, UF_Hydraulic.Con_Bath) annotation (Line( + points={{1.6,-10.4},{-2,-10.4},{-2,4},{74,4},{74,30},{146,30},{ + 146,-4.56},{133.523,-4.56}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF.StarBath, UF_Hydraulic.Rad_Bath) annotation (Line( + points={{1.6,-15.6},{-2,-15.6},{-2,4},{74,4},{74,30},{146,30},{ + 146,0.2},{133.692,0.2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.ThermLivingroom, GF_Hydraulic.Con_Livingroom) + annotation (Line( + points={{-7.04,-52.14},{-7.04,-68},{76,-68},{76,-56.72},{84.95,-56.72}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.ThermHobby, GF_Hydraulic.Con_Hobby) annotation (Line( + points={{2.8,-52.4},{2.8,-58},{0,-58},{0,-68},{76,-68},{76,-46},{ + 140,-46},{140,-56.32},{129.292,-56.32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.ThermKitchen, GF_Hydraulic.Con_Kitchen) annotation ( + Line( + points={{-6.8,-78.4},{54,-78.4},{54,-80},{76,-80},{76,-78},{82, + -78},{82,-77.36},{84.7077,-77.36}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.ThermCorridor, GF_Hydraulic.Con_Corridor) annotation ( + Line( + points={{-2,-68},{76,-68},{76,-46},{140,-46},{140,-65.52},{ + 129.212,-65.52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.ThermWC_Storage, GF_Hydraulic.Con_Storage) + annotation (Line( + points={{2.8,-78.4},{0,-78.4},{0,-68},{76,-68},{76,-46},{140,-46}, + {140,-74.72},{129.696,-74.72}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(UF_Hydraulic.Rad_Children2, UF.StarChildren2) annotation ( + Line( + points={{86.4769,4.45},{74,4.45},{74,4},{-2,4},{-2,-15.6},{-7.6, + -15.6}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(GF.thermCeiling_Corridor, UF.thermFloor_Corridor) annotation (Line( + points={{-4.64,-39.66},{-4.64,-32.83},{-5.3,-32.83},{-5.3,-28.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(GF.thermCeiling_WCStorage, UF.thermFloor_Bath) annotation (Line( + points={{4.96,-39.66},{4.96,-33.83},{3.9,-33.83},{3.9,-28.6}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(TSet_UF, UF_Hydraulic.TSet_UF) annotation (Line( + points={{-101,-35},{-74,-35},{-74,90},{98,90},{98,24.17},{98.6615, + 24.17}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet_GF, GF_Hydraulic.TSet_GF) annotation (Line( + points={{-100,-82},{-74,-82},{-74,90},{74,90},{74,-46},{95.9346, + -46},{95.9346,-51.52}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(UF.AirExchangePort, NaturalVentilation_UF) annotation (Line( + points={{-29.45,-2.86},{-74,-2.86},{-74,58},{-102,58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(GF.AirExchangePort, NaturalVentilation_GF) annotation (Line( + points={{-29.6,-68.78},{-74,-68.78},{-74,14},{-100,14}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Attic.AirExchangePort, AirExchangeAttic_Source.y) + annotation (Line( + points={{-26,74},{-74,74},{-74,88},{-79.2,88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(UF.North, SolarRadiationPort[1]) annotation (Line( + points={{22.3,1.56},{36,1.56},{36,-22},{172,-22},{172,98.3333},{ + 190,98.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(UF.RoofS, SolarRadiationPort[6]) annotation (Line( + points={{22.3,11.44},{36,11.44},{36,-22},{172,-22},{172,81.6667}, + {190,81.6667}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(UF.RoofN, SolarRadiationPort[5]) annotation (Line( + points={{22.3,19.76},{36,19.76},{36,-22},{172,-22},{172,85},{190,85}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(UF.East, SolarRadiationPort[2]) annotation (Line( + points={{22.3,-6.24},{36,-6.24},{36,-22},{172,-22},{172,95},{190,95}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(UF.South, SolarRadiationPort[3]) annotation (Line( + points={{22.3,-14.04},{36,-14.04},{36,-22},{172,-22},{172,91.6667}, + {190,91.6667}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(UF.West, SolarRadiationPort[4]) annotation (Line( + points={{22.3,-21.84},{36,-21.84},{36,-22},{172,-22},{172,88.3333}, + {190,88.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(GF.North, SolarRadiationPort[1]) annotation (Line( + points={{24.4,-45.12},{46,-45.12},{46,-22},{172,-22},{172,98.3333}, + {190,98.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(GF.East, SolarRadiationPort[2]) annotation (Line( + points={{24.4,-52.4},{46,-52.4},{46,-22},{172,-22},{172,95},{190,95}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(GF.South, SolarRadiationPort[3]) annotation (Line( + points={{24.4,-61.24},{46,-61.24},{46,-22},{172,-22},{172,91.6667}, + {190,91.6667}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(GF.West, SolarRadiationPort[4]) annotation (Line( + points={{24.4,-72.16},{46,-72.16},{46,-22},{172,-22},{172,88.3333}, + {190,88.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(tempOutside.port, GF.thermOutside) annotation (Line( + points={{158,71},{98,71},{98,90},{-74,90},{-74,-48.76},{-27.92,-48.76}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempOutside.T, Air_Temp) annotation (Line( + points={{136.55,71},{120,71},{120,116}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(UF.thermOutside, tempOutside.port) annotation (Line( + points={{-27.84,19.24},{-74,19.24},{-74,90},{98,90},{98,71},{158,71}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Attic.thermOutside, tempOutside.port) annotation (Line( + points={{-23.7,84},{-24,84},{-24,90},{98,90},{98,71},{158,71}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Attic.SolarRadiationPort_RO1, SolarRadiationPort[6]) annotation ( + Line( + points={{-14.5,84},{-16,84},{-16,90},{74,90},{74,-22},{172,-22},{ + 172,81.6667},{190,81.6667}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Attic.SolarRadiationPort_RO2, SolarRadiationPort[5]) annotation ( + Line( + points={{8.5,84},{8,84},{8,90},{74,90},{74,-22},{172,-22},{172,85},{ + 190,85}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Attic.SolarRadiationPort_OW1, SolarRadiationPort[4]) annotation ( + Line( + points={{-27.38,62},{-44,62},{-44,90},{74,90},{74,-22},{172,-22}, + {172,88.3333},{190,88.3333}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Attic.SolarRadiationPort_OW2, SolarRadiationPort[2]) annotation ( + Line( + points={{22.3,62.4},{36,62.4},{36,90},{74,90},{74,-20},{172,-20},{172, + 95},{190,95}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation (__Dymola_Images(Parameters(source="AixLib/Images/House/Hydraulik.png")), Icon( + coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{200, + 100}}), + graphics={Bitmap(extent={{-76,122},{172,-124}}, fileName= + "modelica://AixLib/Images/House/Hydraulik.png")}), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{200,100}}), + graphics={ + Text( + extent={{-160,84},{-110,82}}, + lineColor={0,0,255}, + textString="1-Bedroom"), + Text( + extent={{-160,78},{-110,76}}, + lineColor={0,0,255}, + textString="2-Children1"), + Text( + extent={{-160,72},{-110,70}}, + lineColor={0,0,255}, + textString="3-Bath"), + Text( + extent={{-160,66},{-110,64}}, + lineColor={0,0,255}, + textString="4-Children2"), + Text( + extent={{-164,-4},{-114,-6}}, + lineColor={0,0,255}, + textString="1-Bedroom"), + Text( + extent={{-164,-10},{-114,-12}}, + lineColor={0,0,255}, + textString="2-Children1"), + Text( + extent={{-164,-16},{-114,-18}}, + lineColor={0,0,255}, + textString="3-Bath"), + Text( + extent={{-164,-22},{-114,-24}}, + lineColor={0,0,255}, + textString="4-Children2"), + Text( + extent={{-164,-48},{-114,-50}}, + lineColor={0,0,255}, + textString="1-Livingroom"), + Text( + extent={{-164,-54},{-114,-56}}, + lineColor={0,0,255}, + textString="2-Hobby"), + Text( + extent={{-164,-60},{-114,-62}}, + lineColor={0,0,255}, + textString="3-Corridor"), + Text( + extent={{-164,-66},{-114,-68}}, + lineColor={0,0,255}, + textString="4-WC"), + Text( + extent={{-164,-72},{-114,-74}}, + lineColor={0,0,255}, + textString="5-Kitchen"), + Text( + extent={{-162,42},{-112,40}}, + lineColor={0,0,255}, + textString="1-Livingroom"), + Text( + extent={{-162,36},{-112,34}}, + lineColor={0,0,255}, + textString="2-Hobby"), + Text( + extent={{-162,30},{-112,28}}, + lineColor={0,0,255}, + textString="3-WC"), + Text( + extent={{-162,24},{-112,22}}, + lineColor={0,0,255}, + textString="4-Kitchen")}), + Documentation(info=" +

Overview

+

Model for a complete model with building envelope and an energy system based on ideal heaters.

+

Level of Development

+

+", revisions=" +

+")); + end OFD_IdealHeaters; + + annotation (Documentation(info=" +

Overview

+

Package with complete models with building envelopes and energy systems.

+

Concept

+

Three models are available:

+ +")); + end BuildingAndEnergySystem; + annotation (Documentation(info=" +

Overview

+

Package with set-up models for a one family dwelling.

+

Concept

+

The room models are connected together. The name OFD_MiddleInnerLoadWall denotes the fact that the standard house has a middle load bearing wall. Other positions of the load bearing inner wall are possible, but not included in the library. Walls are connected together and they form a room. Multiple rooms are connected together and they form a storey for the one family dwelling.

+

The living area over both storeys is 150 m2.

+

The following figure shows the floor layout for the ground and upper floor. For simplification the toilet and the storage room are aggregated to one room. The side view shows the saddle roof.

+

+

+")); + end OFD_MiddleInnerLoadWall; + + package MFD "Multiple Family Dwelling" + extends Modelica.Icons.Package; + + package Building + extends Modelica.Icons.Package; + + model OneAppartment_VoWo + parameter Integer TMC = 1 "Themal Mass Class" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 "S", choice = 2 "M", choice = 3 "L", radioButtons = true)); + parameter Integer TIR = 4 "Thermal Insulation Regulation" + annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice=1 + "EnEV_2009", choice = 2 + "EnEV_2002", choice = 3 + "WSchV_1995", choice = 4 "WSchV_1984", radioButtons = true)); + + parameter Integer Floor = 1 "Floor" + annotation(Dialog(group = "Floor", compact = true, descriptionLabel = true), choices(choice=1 "GF", choice = 2 "1F", choice = 3 "2F", radioButtons = true)); + + Rooms.MFD.OneApparment.Livingroom_VoWo Livingroom( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{-68,26},{-16,78}}))); + Rooms.MFD.OneApparment.Children_VoWo Children( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{36,38},{74,76}}))); + Rooms.MFD.OneApparment.Corridor_VoWo Corridor( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{22,-12},{60,26}}))); + Rooms.MFD.OneApparment.Bedroom_VoWo Bedroom( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{-64,-74},{-20,-30}}))); + Rooms.MFD.OneApparment.Bathroom_VoWo Bathroom( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{-6,-72},{32,-34}}))); + Rooms.MFD.OneApparment.Kitchen_VoWo Kitchen( + TMC=TMC, + TIR=TIR, + Floor=Floor) + annotation (Placement(transformation(extent={{46,-74},{88,-28}}))); + Utilities.Interfaces.SolarRad_in SolarRadiation_SE annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={28,110}))); + Utilities.Interfaces.SolarRad_in SolarRadiation_NW annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={58,110}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort[5] + annotation (Placement(transformation(extent={{-15,-15},{15,15}}, + rotation=270, + origin={-9,115}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={-4,110}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation ( + Placement(transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-41,113}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-38,110}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-82,100},{-62,120}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + thermNeighbour_Livingroom + annotation (Placement(transformation(extent={{-120,80},{-100,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermNeigbour_Bedroom + annotation (Placement(transformation(extent={{-120,56},{-100,76}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermNeighbour_Child + annotation (Placement(transformation(extent={{100,80},{120,100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermStaircase + annotation (Placement(transformation(extent={{100,54},{120,74}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Livingroom + annotation (Placement(transformation(extent={{-120,28},{-100,48}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Livingroom + annotation (Placement(transformation(extent={{-120,4},{-100,24}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bedroom + annotation (Placement(transformation(extent={{-120,-22},{-100,-2}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bedroom + annotation (Placement(transformation(extent={{-120,-46},{-100,-26}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bath + annotation (Placement(transformation(extent={{-120,-72},{-100,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bath + annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children + annotation (Placement(transformation(extent={{100,26},{120,46}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children + annotation (Placement(transformation(extent={{100,2},{120,22}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Corridor + annotation (Placement(transformation(extent={{100,-22},{120,-2}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Corridor + annotation (Placement(transformation(extent={{100,-46},{120,-26}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Kitchen + annotation (Placement(transformation(extent={{100,-72},{120,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Kitchen + annotation (Placement(transformation(extent={{100,-96},{120,-76}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermLivingroom + annotation (Placement(transformation(extent={{-60,12},{-44,28}}), + iconTransformation(extent={{-56,14},{-44,28}}))); + Utilities.Interfaces.Star StarLivingroom annotation (Placement( + transformation(extent={{-40,12},{-24,28}}), + iconTransformation(extent={{-40,0},{-24,14}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren + annotation (Placement(transformation(extent={{40,24},{56,40}}), + iconTransformation(extent={{40,24},{56,40}}))); + Utilities.Interfaces.Star StarChildren annotation (Placement( + transformation(extent={{60,24},{76,40}}), + iconTransformation(extent={{56,22},{76,42}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBedroom + annotation (Placement(transformation(extent={{-60,-20},{-44,-4}}), + iconTransformation(extent={{-60,-20},{-44,-4}}))); + Utilities.Interfaces.Star StarBedroom annotation (Placement( + transformation(extent={{-40,-20},{-24,-4}}), + iconTransformation(extent={{-40,-20},{-24,-2}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBath annotation ( + Placement(transformation(extent={{-20,-28},{-4,-12}}), + iconTransformation(extent={{-20,-28},{-4,-12}}))); + Utilities.Interfaces.Star StarBath annotation (Placement( + transformation(extent={{0,-28},{16,-12}}), + iconTransformation(extent={{-2,-28},{16,-12}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermKitchen + annotation (Placement(transformation(extent={{40,-22},{56,-6}}), + iconTransformation(extent={{40,-20},{56,-4}}))); + Utilities.Interfaces.Star StarKitchen annotation (Placement( + transformation(extent={{62,-22},{78,-6}}), + iconTransformation(extent={{34,-44},{52,-26}}))); + equation + connect(Bedroom.SolarRadiation_NW, SolarRadiation_NW) annotation ( + Line( + points={{-56.96,-74},{-56,-74},{-56,-80},{-80,-80},{-80,90},{58,90},{58, + 110}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Bathroom.SolarRadiation_NW, SolarRadiation_NW) annotation ( + Line( + points={{0.688,-72},{0,-72},{0,-80},{-80,-80},{-80,90},{58,90},{58,110}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Kitchen.SolarRadiation_NW, SolarRadiation_NW) annotation ( + Line( + points={{59.44,-74},{56,-74},{56,-80},{80,-80},{80,90},{58,90},{58,110}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Children.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{36,66.88},{20,66.88},{20,90},{-41,90},{-41,113}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Livingroom.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-64.9412,58.9333},{-80,58.9333},{-80,90},{-41,90},{-41, + 113}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Bedroom.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-64,-42.32},{-80,-42.32},{-80,90},{-41,90},{-41,113}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Bathroom.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-6.304,-46.16},{-18,-46.16},{-18,-80},{80,-80},{80,90},{-41,90}, + {-41,113}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Kitchen.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{46.168,-41.064},{36,-41.064},{36,-80},{80,-80},{80,90},{-41,90}, + {-41,113}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Livingroom.thermOutside, thermOutside) annotation (Line( + points={{-64.9412,74.5333},{-80,74.5333},{-80,110},{-72,110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.thermOutside, thermOutside) annotation (Line( + points={{42.08,75.696},{20,75.696},{20,90},{-72,90},{-72,110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermOutside, thermOutside) annotation (Line( + points={{-64,-31.76},{-80,-31.76},{-80,90},{-72,90},{-72,110}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Bathroom.thermOutside, thermOutside) annotation (Line( + points={{-6,-35.52},{-18,-35.52},{-18,-80},{-80,-80},{-80,90},{-72,90}, + {-72,110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermOutside, thermOutside) annotation (Line( + points={{46.336,-29.84},{42,-29.84},{42,-30},{36,-30},{36,-80},{-80,-80}, + {-80,90},{-72,90},{-72,110}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermNeighbour, thermNeighbour_Livingroom) + annotation (Line( + points={{-64.9412,53.7333},{-80,53.7333},{-80,90},{-110,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermNeigbour, thermNeigbour_Bedroom) annotation ( + Line( + points={{-64,-63.44},{-80,-63.44},{-80,66},{-110,66}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.thermNeighbour, thermNeighbour_Child) annotation ( + Line( + points={{36,62.32},{20,62.32},{20,90},{110,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.thermStaircase, thermStaircase) annotation (Line( + points={{36,57.76},{20,57.76},{20,90},{80,90},{80,64},{110,64}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermStaircase, thermStaircase) annotation (Line( + points={{21.696,22.96},{18,22.96},{18,-20},{36,-20},{36,-80},{80,-80},{ + 80,64},{110,64}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermBedroom, Bedroom.thermLivingroom) annotation ( + Line( + points={{-64.9412,48.5333},{-80,48.5333},{-80,-47.6},{-64,-47.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermLivingroom, Livingroom.thermCorridor) + annotation (Line( + points={{21.696,13.84},{18,13.84},{18,-20},{36,-20},{36,-80},{-80, + -80},{-80,43.3333},{-64.9412,43.3333}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermChildren, Children.thermLivingroom) + annotation (Line( + points={{-64.9412,38.1333},{-80,38.1333},{-80,90},{20,90},{20, + 48.64},{36,48.64}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermCeiling, thermCeiling_Livingroom) annotation ( + Line( + points={{-64.9412,32.9333},{-80,32.9333},{-80,38},{-110,38}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.thermFloor, thermFloor_Livingroom) annotation ( + Line( + points={{-64.9412,27.7333},{-80,27.7333},{-80,14},{-110,14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermCorridor, Corridor.thermBedroom) annotation ( + Line( + points={{-64,-52.88},{-80,-52.88},{-80,-80},{36,-80},{36,-20},{18,-20}, + {18,0},{22,0},{22,0.16}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermBath, Bathroom.thermBedroom) annotation (Line( + points={{-64,-58.16},{-80,-58.16},{-80,-80},{-18,-80},{-18,-59.84},{-6, + -59.84}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermCeiling, thermCeiling_Bedroom) annotation (Line( + points={{-64,-68.72},{-80,-68.72},{-80,-12},{-110,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.thermFloor, thermFloor_Bedroom) annotation (Line( + points={{-64,-74},{-80,-74},{-80,-36},{-110,-36}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bathroom.thermCorridor, Corridor.thermBath) annotation (Line( + points={{-6,-50.72},{-18,-50.72},{-18,-80},{36,-80},{36,-20},{18,-20},{ + 18,4},{22,4},{22,4.72}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bathroom.thermKitchen, Kitchen.thermBath) annotation (Line( + points={{-6,-55.28},{-18,-55.28},{-18,-80},{36,-80},{36,-62.96},{46, + -62.96}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermStaircase, thermStaircase) annotation (Line( + points={{46,-55.6},{36,-55.6},{36,-80},{80,-80},{80,64},{110,64}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bathroom.thermCeiling, thermCeiling_Bath) annotation (Line( + points={{-6,-64.4},{-18,-64.4},{-18,-80},{-80,-80},{-80,-62},{-110,-62}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bathroom.thermFloor, thermFloor_Bath) annotation (Line( + points={{-6,-68.96},{-18,-68.96},{-18,-80},{-110,-80},{-110,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermCorridor, Corridor.thermKitchen) annotation ( + Line( + points={{46,-48.24},{36,-48.24},{36,-20},{18,-20},{18,18.4},{21.696, + 18.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.thermCorridor, Corridor.thermChild) annotation (Line( + points={{36,53.2},{20,53.2},{20,90},{80,90},{80,-80},{36,-80},{36,-20}, + {18,-20},{18,9.28},{21.696,9.28}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.thermCeiling, thermCeiling_Children) annotation ( + Line( + points={{36,44.08},{20,44.08},{20,90},{80,90},{80,36},{110,36}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Children.thermFloor, thermFloor_Children) annotation (Line( + points={{36,39.216},{20,39.216},{20,90},{80,90},{80,12},{110,12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermCeiling, thermCeiling_Kitchen) annotation (Line( + points={{46,-70.32},{36,-70.32},{36,-80},{80,-80},{80,-62},{110,-62}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.thermFloor, thermFloor_Kitchen) annotation (Line( + points={{52.72,-74},{36,-74},{36,-80},{80,-80},{80,-86},{110,-86}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.ThermRoom, thermLivingroom) + annotation (Line( + points={{-42.3059,54.4267},{-42.3059,51.64},{-52,51.64},{-52,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.StarInside1, StarLivingroom) + annotation (Line( + points={{-38.0235,54.4267},{-38.0235,54},{-32,54},{-32,20}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Children.StarRoom, StarChildren) + annotation (Line( + points={{53.632,61.408},{54,60},{72,60},{72,32},{68,32}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Bedroom.StarRoom, StarBedroom) + annotation (Line( + points={{-41.472,-53.584},{-32,-53.584},{-32,-12}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Bathroom.ThermRoom, ThermBath) annotation (Line( + points={{6.464,-55.584},{6.464,-30},{-12,-30},{-12,-20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bathroom.StarRoom, StarBath) annotation (Line( + points={{12.24,-55.888},{12.24,-44},{6,-44},{6,-30},{8,-30},{8,-20}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Kitchen.StarRoom, StarKitchen) + annotation (Line( + points={{63.808,-53.392},{58,-53.392},{58,-14},{70,-14}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(ThermBath, ThermBath) annotation (Line( + points={{-12,-20},{-12,-20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Livingroom.AirExchangePort, AirExchangePort[1]) annotation (Line( + points={{-64.9412,65.8667},{-80,65.8667},{-80,90},{-9,90},{-9,103}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Children.AirExchangePort, AirExchangePort[2]) annotation (Line( + points={{36,71.44},{20,71.44},{20,90},{-9,90},{-9,109}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Children.ThermRoom, ThermChildren) annotation (Line( + points={{48.768,61.712},{46,61.712},{46,32},{48,32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Bedroom.ThermRoom, ThermBedroom) annotation (Line( + points={{-48.16,-53.936},{-52,-53.936},{-52,-40},{-48,-40},{-48,-30},{ + -52,-30},{-52,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.AirExchangePort, AirExchangePort[3]) annotation (Line( + points={{46.168,-35.176},{36,-35.176},{36,-80},{80,-80},{80,90},{-9,90}, + {-9,115}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Bathroom.AirExchangePort, AirExchangePort[4]) annotation (Line( + points={{-6.304,-40.08},{-18,-40.08},{-18,-80},{80,-80},{80,90},{-9,90}, + {-9,121}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Bedroom.AirExchangePort, AirExchangePort[5]) annotation (Line( + points={{-64,-37.04},{-80,-37.04},{-80,90},{-9,90},{-9,127}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Corridor.thermFloor, thermFloor_Corridor) annotation (Line( + points={{22,-8.96},{18,-8.96},{18,-20},{36,-20},{36,-80},{80,-80},{80, + -36},{110,-36}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Corridor.thermCeiling, thermCeiling_Corridor) annotation (Line( + points={{22,-4.4},{18,-4.4},{18,-20},{36,-20},{36,-80},{80,-80},{80,-12}, + {110,-12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Kitchen.ThermRoom, ThermKitchen) annotation (Line( + points={{64.144,-47.872},{58,-47.872},{58,-14},{48,-14}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Children.Strahlung_SE, SolarRadiation_SE) annotation (Line( + points={{46.64,77.52},{46.64,90},{28,90},{28,110}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Livingroom.SolarRadiation_SE, SolarRadiation_SE) annotation (Line( + points={{-52.0941,75.2267},{-52.0941,90},{28,90},{28,110}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-150, + -150},{150,150}}), + graphics), Icon(coordinateSystem( + preserveAspectRatio=true, extent={{-150,-150},{150,150}}), + graphics={Bitmap(extent={{-86,94}, + {88,-96}}, fileName= + "modelica://AixLib/Images/House/MFD_FloorPlan_En.PNG"), + Rectangle( + extent={{-52,56},{-4,36}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-72,58},{16,44}}, + lineColor={0,0,0}, + textString="Livingroom"), + Rectangle( + extent={{28,56},{70,18}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{8,58},{82,46}}, + lineColor={0,0,0}, + textString="Children"), + Rectangle( + extent={{-8,6},{52,-14}}, + fillColor={170,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={170,255,255}), + Text( + extent={{-16,4},{58,-8}}, + lineColor={0,0,0}, + textString="Corridor"), + Rectangle( + extent={{-62,-28},{-20,-78}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-76,-52},{-2,-64}}, + lineColor={0,0,0}, + textString="Bedroom"), + Rectangle( + extent={{-8,-28},{12,-70}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-36,-50},{38,-62}}, + lineColor={0,0,0}, + textString="Bath"), + Rectangle( + extent={{16,-28},{52,-68}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{0,-54},{74,-66}}, + lineColor={0,0,0}, + textString="Kitchen")}), + Documentation(info=" +

Overview

+

Complete model appartment

+

Level of Development

+

+", revisions=" +

+")); + end OneAppartment_VoWo; + annotation (Documentation(info=" +

Overview

+

Package for the appartment model used for the muti family dwelling.

+")); + end Building; + + package EnergySystem + extends Modelica.Icons.Package; + + package OneAppartment + extends Modelica.Icons.Package; + + model Radiators + + //Pipe lengths + parameter Modelica.SIunits.Length Length_thSt=2.5 "L1" annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_thBath=2.5 "L2 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_thChildren1=2.3 "L3 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true,joinNext = true)); + parameter Modelica.SIunits.Length Length_thChildren2=1.5 "L4 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true)); + parameter Modelica.SIunits.Length Length_toKi=2.5 "l5" annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_toBath=2 "l4 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_toChildren=0.5 "l3 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_toBedroom=4.0 "l2 " + annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true)); + parameter Modelica.SIunits.Length Length_toLi=7 "l1 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true)); + + //Pipe diameters + parameter Modelica.SIunits.Diameter Diam_Main = 0.016 + "Diameter main pipe" annotation (Dialog(group = "Pipe diameters", descriptionLabel = true)); + parameter Modelica.SIunits.Diameter Diam_Sec = 0.013 + "Diameter secondary pipe " annotation (Dialog(group = "Pipe diameters", descriptionLabel = true)); + + //Hydraulic resistance + parameter Real zeta_lateral = 2.5 "zeta lateral" annotation (Dialog(group = "Hydraulic resistance", descriptionLabel = true, joinNext = true)); + parameter Real zeta_through = 0.6 "zeta through" annotation (Dialog(group = "Hydraulic resistance", descriptionLabel = true)); + parameter Real zeta_bend = 1.0 "zeta bend" annotation (Dialog(group = "Hydraulic resistance", descriptionLabel = true)); + + //Radiators + + parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition + Type_Radiator_Livingroom= + AixLib.DataBase.Radiators.StandardMFD_WSchV1984_OneAppartment.Livingroom() + "Livingroom" + annotation (Dialog(group="Radiators", descriptionLabel=true)); + + parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition + Type_Radiator_Bedroom= + AixLib.DataBase.Radiators.StandardMFD_WSchV1984_OneAppartment.Bedroom() + "Bedroom" + annotation (Dialog(group="Radiators", descriptionLabel=true)); + parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition + Type_Radiator_Children= + AixLib.DataBase.Radiators.StandardMFD_WSchV1984_OneAppartment.Children() + "Corridor" + annotation (Dialog(group="Radiators", descriptionLabel=true)); + parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition + Type_Radiator_Bath= + AixLib.DataBase.Radiators.StandardMFD_WSchV1984_OneAppartment.Bathroom() "Bath" + annotation (Dialog(group="Radiators", descriptionLabel=true)); + parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition + Type_Radiator_Kitchen= + AixLib.DataBase.Radiators.StandardMFD_WSchV1984_OneAppartment.Kitchen() + "Kitchen" + annotation (Dialog(group="Radiators", descriptionLabel=true)); + + HVAC.Radiators.Radiator radiatorKitchen(RadiatorType=Type_Radiator_Kitchen) + annotation (Placement(transformation(extent={{-89,-83},{-106,-66}}))); + + HVAC.Radiators.Radiator radiator_bath(RadiatorType=Type_Radiator_Bath) + annotation (Placement(transformation(extent={{83,-48},{100,-31}}))); + + HVAC.Valves.ThermostaticValve valve_kitchen( + Kvs=0.41, + Kv_setT=0.262, + p(start=1000)) annotation (Placement(transformation(extent={{-67, + -82.5},{-82,-66.5}}))); + + HVAC.Radiators.Radiator radiator_livingroom(RadiatorType= + Type_Radiator_Livingroom) annotation (Placement( + transformation(extent={{-95,-5},{-113,13}}))); + HVAC.Radiators.Radiator radiator_bedroom(RadiatorType=Type_Radiator_Bedroom) + annotation (Placement(transformation(extent={{78,72},{94,88}}))); + HVAC.Radiators.Radiator radiatorCorridor(RadiatorType=Type_Radiator_Children) + annotation (Placement(transformation(extent={{86,33},{101,48}}))); + + HVAC.Valves.ThermostaticValve valve_bath(Kvs=0.24, Kv_setT=0.162, + p(start=1000)) + annotation (Placement(transformation(extent={{38,-47},{50,-31}}))); + HVAC.Valves.ThermostaticValve valve_livingroom( + Kvs=1.43, + Kv_setT=0.4, + p(start=1000)) annotation (Placement(transformation(extent={{-67, + -4},{-79,12}}))); + + HVAC.Valves.ThermostaticValve valve_children(Kvs=0.16, Kv_setT=0.088, + p(start=1000)) + annotation (Placement(transformation(extent={{64,32},{76,48}}))); + + HVAC.Valves.ThermostaticValve valve_bedroom(Kvs=0.24, Kv_setT=0.182, + p(start=1000)) + annotation (Placement(transformation(extent={{49,74},{60,87}}))); + HVAC.Pipes.StaticPipe thStF(D=Diam_Main, l=Length_thSt) + "through the storage room, flow stream" + annotation (Placement(transformation(extent={{57,-85},{40,-74}}))); + HVAC.Pipes.StaticPipe toKiF(D=Diam_Sec, l=Length_toKi) + "to kitchen, flow stream" annotation (Placement(transformation( + extent={{8,-5},{-8,5}}, + rotation=0, + origin={-49,-74.5}))); + HVAC.Pipes.StaticPipe thStR(D=Diam_Main, l=Length_thSt) + "through the storage room, return stream" + annotation (Placement(transformation(extent={{40,-102},{58,-90}}))); + HVAC.Pipes.StaticPipe toKiR(D=Diam_Sec, l=Length_toKi) + "to kitchen, return stream" + annotation (Placement(transformation(extent={{-72,-102},{-56,-90}}))); + HVAC.Pipes.StaticPipe thBathF(D=Diam_Main, l=Length_thBath) + "through Bath, flow stream" annotation (Placement(transformation( + extent={{8,4.5},{-8,-4.5}}, + rotation=270, + origin={-4.5,-62}))); + HVAC.Pipes.StaticPipe thBathR(D=Diam_Main, l=Length_thBath) + "through bath, return stream" + annotation (Placement(transformation( + extent={{8.75,-4.25},{-8.75,4.25}}, + rotation=90, + origin={-18.25,-62.75}))); + HVAC.Pipes.StaticPipe thChildren1R(D=Diam_Main, l= + Length_thChildren1) "through chidlren room 1, return stream" + annotation (Placement(transformation( + extent={{6.5,-5},{-6.5,5}}, + rotation=90, + origin={-18,-27.5}))); + HVAC.Pipes.StaticPipe thChildren1F(D=Diam_Main, l= + Length_thChildren1) "through chidlren room 1, flow stream" + annotation (Placement(transformation( + extent={{6.5,5},{-6.5,-5}}, + rotation=270, + origin={-5,-26.5}))); + HVAC.Pipes.StaticPipe toBathF(D=Diam_Sec, l=Length_toBath) + "to Bath, flow stream" annotation (Placement(transformation( + extent={{-8.5,4.5},{8.5,-4.5}}, + rotation=0, + origin={18.5,-38.5}))); + HVAC.Pipes.StaticPipe toBathR(D=Diam_Sec, l=Length_toBath) + "to bath return stream" annotation (Placement(transformation( + extent={{8.5,4.5},{-8.5,-4.5}}, + rotation=0, + origin={18.5,-49.5}))); + HVAC.Interfaces.Port_b RETURN + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{66,-114},{86,-94}}))); + HVAC.Interfaces.Port_a FLOW + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{92,-114},{112,-94}}))); + HVAC.Pipes.StaticPipe toChildrenF(D=Diam_Sec, l=Length_toChildren) + "to Children, flow stream" annotation (Placement(transformation( + extent={{-8.5,4.5},{8.5,-4.5}}, + rotation=0, + origin={45.5,40.5}))); + HVAC.Pipes.StaticPipe toChildrenR(D=Diam_Sec, l=Length_toChildren) + "to Children, return stream" annotation (Placement(transformation( + extent={{7.5,4.5},{-7.5,-4.5}}, + rotation=0, + origin={47.5,27}))); + HVAC.Pipes.StaticPipe thChildrenF2(D=Diam_Main, l= + Length_thChildren2) "through chidlren room, flow stream" + annotation (Placement(transformation( + extent={{7,5},{-7,-5}}, + rotation=270, + origin={-5,13}))); + HVAC.Pipes.StaticPipe thChildrenR2(D=Diam_Main, l= + Length_thChildren2) "through chidlren room, return stream" + annotation (Placement(transformation( + extent={{7.5,-5},{-7.5,5}}, + rotation=90, + origin={-19,12.5}))); + HVAC.Pipes.StaticPipe toBedroomF(D=Diam_Sec, l=Length_toBedroom) + "to Bedroom , flow stream" annotation (Placement(transformation( + extent={{-6.5,4.5},{6.5,-4.5}}, + rotation=0, + origin={23.5,80.5}))); + HVAC.Pipes.StaticPipe toBedroomR(D=Diam_Sec, l=Length_toBedroom) + "to Bedroom, return stream" annotation (Placement(transformation( + extent={{6.5,4.5},{-6.5,-4.5}}, + rotation=0, + origin={20.5,66}))); + HVAC.Pipes.StaticPipe toLiF(D=Diam_Sec, l=Length_toLi) + "to livingroom, flow stream" annotation (Placement(transformation( + extent={{6,-4.5},{-6,4.5}}, + rotation=0, + origin={-47.5,3}))); + HVAC.Pipes.StaticPipe toLiR(D=Diam_Main, l=Length_toLi) + "to livingroom, return stream" annotation (Placement(transformation( + extent={{6.5,-5},{-6.5,5}}, + rotation=180, + origin={-88.5,-16.5}))); + HVAC.Interfaces.RadPort Rad_Livingroom + annotation (Placement(transformation(extent={{-148,38},{-132,55}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + Con_Livingroom + annotation (Placement(transformation(extent={{-146,25},{-133,38}}))); + HVAC.Interfaces.RadPort Rad_kitchen + annotation (Placement(transformation(extent={{-146,-50},{-129,-34}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + Con_kitchen + annotation (Placement(transformation(extent={{-145,-66},{-131,-51}}))); + HVAC.Interfaces.RadPort Rad_bedroom + annotation (Placement(transformation(extent={{128,88},{146,106}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_bedroom + annotation (Placement(transformation(extent={{130,64},{146,82}}))); + HVAC.Interfaces.RadPort Rad_children + annotation (Placement(transformation(extent={{130,39},{150,59}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + Con_children + annotation (Placement(transformation(extent={{131,17},{146,34}}))); + HVAC.Interfaces.RadPort Rad_bath + annotation (Placement(transformation(extent={{128,-38},{148,-18}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_bath + annotation (Placement(transformation(extent={{129,-59},{148,-41}}))); + Modelica.Blocks.Interfaces.RealInput TSet[5] annotation (Placement( + transformation(extent={{-123,78},{-95,108}}), iconTransformation( + extent={{-10.5,-12},{10.5,12}}, + rotation=270, + origin={-105.5,96}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_InFl(zeta=zeta_bend, D= + Diam_Main) "hydraulic resistance in floor" + annotation (Placement(transformation(extent={{24,-84},{10,-75}}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_RadKi(zeta=3*zeta_bend, + D=Diam_Sec) + annotation (Placement(transformation(extent={{-113,-100.5},{-99,-91.5}}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_BendRight(zeta=zeta_bend, + D=Diam_Main) "hydraulic resistance bend right" annotation (Placement( + transformation( + extent={{-3.25,-2.25},{3.25,2.25}}, + rotation=90, + origin={-3.75,-75.75}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_RadWC(zeta=2*zeta_bend, + D=Diam_Sec) + annotation (Placement(transformation(extent={{67,-53},{57,-44}}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_RadLi(zeta=3*zeta_bend, + D=Diam_Sec) + annotation (Placement(transformation(extent={{-116,-21},{-102,-12}}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_RadChildren(zeta=2* + zeta_bend, D=Diam_Sec) + annotation (Placement(transformation(extent={{84,22.5},{74,31.5}}))); + HVAC.HydraulicResistances.HydraulicResistance HydRes_RadBedroom(zeta=3* + zeta_bend, D=Diam_Sec) + annotation (Placement(transformation(extent={{74,61.5},{60,70.5}}))); + + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + tempSensor_livingroom annotation (Placement(transformation(extent={{-108,30}, + {-96,42}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_bedroom + annotation (Placement(transformation(extent={{75,92},{63,104}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_children + annotation (Placement(transformation(extent={{88,49},{76,61}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_bath + annotation (Placement(transformation(extent={{66,-21},{54,-9}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tempSensor_bath1 + annotation (Placement(transformation(extent={{-91,-57},{-79,-45}}))); + equation + connect(radiator_livingroom.port_a, valve_livingroom.port_b) + annotation (Line( + points={{-95.72,4},{-79,4}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + + connect(valve_bath.port_b, radiator_bath.port_a) annotation (Line( + points={{50,-39},{83.68,-39},{83.68,-39.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(valve_children.port_b, radiatorCorridor.port_a) annotation (Line( + points={{76,40},{86.6,40},{86.6,40.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(valve_bedroom.port_b, radiator_bedroom.port_a) annotation (Line( + points={{60,80.5},{78.64,80.5},{78.64,80}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(thStR.port_b, RETURN) annotation (Line( + points={{58,-96},{76,-96},{76,-104}}, + color={0,0,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(thStF.port_a, FLOW) annotation (Line( + points={{57,-79.5},{60,-80},{62,-80},{62,-95},{102,-95},{102,-104}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + + connect(toBathF.port_b, valve_bath.port_a) annotation (Line( + points={{27,-38.5},{39,-38.5},{39,-39},{38,-39}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(toChildrenF.port_b, valve_children.port_a) annotation (Line( + points={{54,40.5},{56,40},{64,40}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(toBedroomF.port_b, valve_bedroom.port_a) annotation (Line( + points={{30,80.5},{49,80.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(toLiF.port_b, valve_livingroom.port_a) annotation (Line( + points={{-53.5,3},{-53.5,4},{-67,4}}, + color={255,0,0}, + thickness=0.5, + smooth=Smooth.None)); + + connect(valve_kitchen.port_a, toKiF.port_b) annotation (Line( + points={{-67,-74.5},{-57,-74.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(radiatorKitchen.port_a, valve_kitchen.port_b) annotation ( + Line( + points={{-89.68,-74.5},{-82,-74.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + + connect(HydRes_InFl.port_a, thStF.port_b) + annotation (Line( + points={{24,-79.5},{40,-79.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + + connect(radiatorKitchen.port_b, HydRes_RadKi.port_a) annotation (Line( + points={{-105.32,-74.5},{-118,-74.5},{-118,-75},{-130,-75},{-130,-96}, + {-113,-96}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadKi.port_b, toKiR.port_a) annotation (Line( + points={{-99,-96},{-72,-96}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toBathR.port_a, HydRes_RadWC.port_b) annotation (Line( + points={{27,-49.5},{42,-49.5},{42,-48.5},{57,-48.5}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadWC.port_a, radiator_bath.port_b) annotation (Line( + points={{67,-48.5},{127,-48.5},{127,-39.5},{99.32,-39.5}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadLi.port_b, toLiR.port_a) annotation (Line( + points={{-102,-16.5},{-95,-16.5}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadLi.port_a, radiator_livingroom.port_b) + annotation (Line( + points={{-116,-16.5},{-129,-16.5},{-129,4},{-112.28,4}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toChildrenR.port_a, HydRes_RadChildren.port_b) annotation (Line( + points={{55,27},{74,27}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadChildren.port_a, radiatorCorridor.port_b) annotation (Line( + points={{84,27},{126,27},{126,40.5},{100.4,40.5}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toBedroomR.port_a, HydRes_RadBedroom.port_b) annotation (Line( + points={{27,66},{60,66}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_RadBedroom.port_a, radiator_bedroom.port_b) annotation (Line( + points={{74,66},{126,66},{126,80},{93.36,80}}, + color={0,128,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_BendRight.port_b, thBathF.port_a) annotation (Line( + points={{-3.75,-72.5},{-3.75,-70},{-4.5,-70}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(radiatorKitchen.radPort,Rad_kitchen) annotation (Line( + points={{-100.9,-67.87},{-100.9,-42},{-137.5,-42}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(radiatorKitchen.convPort,Con_kitchen) annotation (Line( + points={{-93.93,-68.04},{-93.93,-58.5},{-138,-58.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(radiator_bath.convPort, Con_bath) annotation (Line( + points={{87.93,-33.04},{88,-33.04},{88,-33},{119,-33},{119,-50},{138.5,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(radiator_bath.radPort, Rad_bath) annotation (Line( + points={{94.9,-32.87},{94.9,-28},{138,-28}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(radiatorCorridor.radPort,Rad_children) annotation (Line( + points={{96.5,46.35},{96.5,49},{140,49}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(radiatorCorridor.convPort,Con_children) annotation (Line( + points={{90.35,46.2},{90,46.2},{90,46},{113,46},{113,25.5},{138.5,25.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(radiator_bedroom.convPort, Con_bedroom) annotation (Line( + points={{82.64,86.08},{82.64,91},{119,91},{119,73},{138,73}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(radiator_bedroom.radPort, Rad_bedroom) annotation (Line( + points={{89.2,86.24},{89.2,97},{137,97}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(radiator_livingroom.radPort, Rad_Livingroom) annotation ( + Line( + points={{-107.6,11.02},{-107.6,11},{-131,11},{-131,46},{-136,46}, + {-136,46.5},{-140,46.5}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(radiator_livingroom.convPort, Con_Livingroom) annotation ( + Line( + points={{-100.22,10.84},{-100.22,12},{-100,12},{-100,14},{-133, + 14},{-133,32},{-137,32},{-137,31.5},{-139.5,31.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(toKiR.port_b, thStR.port_a) annotation (Line( + points={{-56,-96},{40,-96}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(thBathR.port_b, thStR.port_a) annotation (Line( + points={{-18.25,-71.5},{-18.25,-96},{40,-96}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(thChildren1R.port_b, thBathR.port_a) annotation (Line( + points={{-18,-34},{-18,-54},{-18.25,-54}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(thChildrenR2.port_b, thChildren1R.port_a) annotation (Line( + points={{-19,5},{-19,-21},{-18,-21}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toLiR.port_b, thChildren1R.port_a) annotation (Line( + points={{-82,-16.5},{-19,-16.5},{-19,-21},{-18,-21}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toBedroomR.port_b, thChildrenR2.port_a) annotation (Line( + points={{14,66},{-19,66},{-19,20}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toChildrenR.port_b, thChildrenR2.port_a) annotation (Line( + points={{40,27},{-19,27},{-19,20}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(toBathR.port_b, thBathR.port_a) annotation (Line( + points={{10,-49.5},{-18,-49.5},{-18,-54},{-18.25,-54}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(HydRes_BendRight.port_a, HydRes_InFl.port_b) annotation (Line( + points={{-3.75,-79},{-3.75,-79.5},{10,-79.5}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(thBathF.port_b, toBathF.port_a) annotation (Line( + points={{-4.5,-54},{-4.5,-38.5},{10,-38.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(toKiF.port_a, HydRes_InFl.port_b) annotation (Line( + points={{-41,-74.5},{-23,-74.5},{-23,-80},{10,-80},{10,-79.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(thBathF.port_b, thChildren1F.port_a) annotation (Line( + points={{-4.5,-54},{-4.5,-44},{-5,-44},{-5,-33}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(thChildren1F.port_b, thChildrenF2.port_a) annotation (Line( + points={{-5,-20},{-5,6}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(thChildrenF2.port_b, toChildrenF.port_a) annotation (Line( + points={{-5,20},{-5,40.5},{37,40.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(thChildrenF2.port_b, toBedroomF.port_a) annotation (Line( + points={{-5,20},{-5,80.5},{17,80.5}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(thChildren1F.port_b, toLiF.port_a) annotation (Line( + points={{-5,-20},{-5,3},{-41.5,3}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=0.5)); + connect(valve_bedroom.T_setRoom, TSet[2]) annotation (Line( + points={{57.58,86.87},{57.58,87},{-109,87}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(valve_children.T_setRoom, TSet[3]) annotation (Line( + points={{73.36,47.84},{73.36,57},{-77,57},{-77,92},{-109,92},{-109,93}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(valve_bath.T_setRoom, TSet[4]) annotation (Line( + points={{47.36,-31.16},{47.36,-7},{18,-7},{18,29},{-76,29},{-76,99},{-109, + 99}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(valve_kitchen.T_setRoom, TSet[5]) annotation (Line( + points={{-78.7,-66.66},{-78.7,-62},{-76,-62},{-76,105},{-109, + 105}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(valve_livingroom.T_setRoom, TSet[1]) annotation (Line( + points={{-76.36,11.84},{-76.36,52},{-76,52},{-76,92},{-109,92}, + {-109,81}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Con_Livingroom, tempSensor_livingroom.port) annotation (Line( + points={{-139.5,31.5},{-120,31.5},{-120,36},{-108,36}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_livingroom.T, valve_livingroom.T_room) + annotation (Line( + points={{-96,36},{-69.16,36},{-69.16,11.84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(valve_bedroom.T_room, tempSensor_bedroom.T) annotation (Line( + points={{50.98,86.87},{50.98,98},{63,98}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_bedroom.port, Con_bedroom) annotation (Line( + points={{75,98},{89,98},{89,97},{141,97},{141,73},{138,73}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(valve_children.T_room, tempSensor_children.T) annotation (Line( + points={{66.16,47.84},{66.16,55},{76,55}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_children.port,Con_children) annotation (Line( + points={{88,55},{138,55},{138,53},{138.5,53},{138.5,25.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(valve_bath.T_room, tempSensor_bath.T) annotation (Line( + points={{40.16,-31.16},{40.16,-15},{54,-15}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempSensor_bath.port, Con_bath) annotation (Line( + points={{66,-15},{97,-15},{97,-21},{138.5,-21},{138.5,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_bath1.port,Con_kitchen) annotation (Line( + points={{-91,-51},{-107,-51},{-107,-50},{-138,-50},{-138,-58.5}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempSensor_bath1.T, valve_kitchen.T_room) annotation (Line( + points={{-79,-51},{-69.7,-51},{-69.7,-66.66}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-150,-100},{150,110}}, + grid={1,1}), graphics={ + Rectangle( + extent={{1,100},{126,63}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{4,58},{127,15}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{4,-14},{127,-67}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-129,29},{-22,-25}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-130,-49},{-23,-103}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,-81},{-69,-96}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Kitchen"), + Text( + extent={{-156.5,29},{-49.5,16}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Livingroom"), + Text( + extent={{31,-15},{138,-28}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Bath"), + Text( + extent={{-27,56},{80,43}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Children"), + Text( + extent={{-34,100},{73,87}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Bedroom"), + Text( + extent={{-70,103},{-17,71}}, + lineColor={0,0,0}, + textString="1 - Livingroom +2- Bedroom +3 - Children +4 - Bath +5 - Kitchen")}), Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-150,-100},{150,110}}, + grid={1,1}), graphics={ + Rectangle( + extent={{-119,92},{123,-79}}, + lineColor={255,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Line( + points={{-99,22},{104,22},{104,-6}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-98,13},{95,13},{95,-6}}, + color={0,0,255}, + smooth=Smooth.None, + thickness=1), + Line( + points={{-21,13},{-21,35}}, + color={0,0,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-14,23},{-14,45}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Text( + extent={{-124,119},{-84,111}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="Set"), + Text( + extent={{-70,81},{-17,49}}, + lineColor={0,0,0}, + textString="1 - Livingroom +2- Bedroom +3 - Children +4 - Bath +5 - Kitchen")}), + Documentation(revisions=" +

+", info=" +

Overview

+

The model is exemplarly build with components found in the HVAC package.

+

Level of Development

+

+

Concept

+

The model should be used as an example on how such a system can be built and connected to the building envelope.

+")); + end Radiators; + annotation (Documentation(info=" +

Overview

+

Package with two hydraulic systems based on radiators for the one appartment, considered as a single unit.

+")); + end OneAppartment; + annotation (Documentation(info=" +

Overview

+

Package for energy systems for the multi family dwelling.

+

Concept

+

The package contains a model for an energy system based on radiators, for just one appartment.

+")); + end EnergySystem; + + package BuildingAndEnergySystem + extends Modelica.Icons.Package; + + model OneAppartment_Radiators + "just one appartment (same appartment as in MFD, but hydraulic network fit to this one appartment)" + import HouseModels = AixLib.Building.HighOrder; + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater + "Medium in the system" annotation (Dialog(group="Medium"), + choicesAllMatching=true); + HouseModels.House.MFD.EnergySystem.OneAppartment.Radiators + Hydraulic + annotation (Placement(transformation(extent={{-22,-72},{38,-12}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow6(Q_flow=0) + annotation (Placement(transformation(extent={{-62,26},{-50,32}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow1(Q_flow=0) + annotation (Placement(transformation(extent={{-78,62},{-66,68}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow2(Q_flow=0) + annotation (Placement(transformation(extent={{-78,26},{-66,32}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow3(Q_flow=0) + annotation (Placement(transformation(extent={{-78,46},{-66,52}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow4(Q_flow=0) + annotation (Placement(transformation(extent={{-62,38},{-50,44}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow5(Q_flow=0) + annotation (Placement(transformation(extent={{-64,52},{-52,58}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow8(Q_flow=0) + annotation (Placement(transformation(extent={{76,18},{64,24}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow9(Q_flow=0) + annotation (Placement(transformation(extent={{-80,14},{-68,20}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow10(Q_flow= + 0) annotation (Placement(transformation(extent={{-60,18},{-48,24}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow7(Q_flow=0) + annotation (Placement(transformation(extent={{78,38},{66,44}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow11(Q_flow= + 0) annotation (Placement(transformation(extent={{72,60},{60,66}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow12(Q_flow= + 0) annotation (Placement(transformation(extent={{58,40},{46,46}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow13(Q_flow= + 0) annotation (Placement(transformation(extent={{60,18},{48,24}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow14(Q_flow= + 0) annotation (Placement(transformation(extent={{60,28},{48,34}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow15(Q_flow= + 0) annotation (Placement(transformation(extent={{74,28},{62,34}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow16(Q_flow= + 0) annotation (Placement(transformation(extent={{74,50},{62,56}}))); + HVAC.Interfaces.Port_a Inflow + "Inflow to connect with external models (boiler, pump etc.)" + annotation (Placement(transformation(extent={{-26,-118},{-6,-98}}), + iconTransformation(extent={{-26,-118},{-6,-98}}))); + HVAC.Interfaces.Port_b Returnflow + "Returnflow to connect with external models (boiler, pump etc.)" + annotation (Placement(transformation(extent={{-2,-118},{18,-98}}), + iconTransformation(extent={{-2,-118},{18,-98}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-32,112}), iconTransformation( + extent={{-15,-15},{15,15}}, + rotation=-90, + origin={-31,105}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort_Window[5] annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={20,112}), iconTransformation( + extent={{-14,-14},{14,14}}, + rotation=-90, + origin={26,106}))); + Utilities.Interfaces.SolarRad_in SolarRadiation[2] "[SE, NW]" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={58,108}))); + HouseModels.House.MFD.Building.OneAppartment_VoWo Appartment(Floor=2, + Livingroom( + T0_air=293.15, + T0_OW=293.15, + T0_IWChild=293.15, + T0_IWBedroom=293.15, + T0_IWNeighbour=293.15, + T0_CE=293.35, + T0_FL=292.95), + Children( + T0_air=293.15, + T0_OW=293.15, + T0_IWLivingroom=293.15, + T0_IWNeighbour=293.15, + T0_CE=293.35, + T0_FL=292.95), + Bedroom( + T0_air=293.15, + T0_OW=293.15, + T0_IWLivingroom=293.15, + T0_IWNeighbour=293.15, + T0_CE=293.35, + T0_FL=292.95), + Bathroom( + T0_IWKitchen=293.15, + T0_IWBedroom=293.15, + T0_OW=293.15, + T0_CE=297.35, + T0_FL=296.95), + Kitchen( + T0_air=293.15, + T0_OW=293.15, + T0_CE=293.35, + T0_FL=292.95), + Corridor( + T0_IWKitchen=293.15, + T0_IWBedroom=293.15, + T0_IWLivingroom=293.15, + T0_IWChild=293.15, + T0_CE=293.35, + T0_FL=292.95)) + annotation (Placement(transformation(extent={{-30,8},{32,70}}))); + public + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature tempOutside3 + annotation (Placement(transformation(extent={{-48,78},{-67.5,96}}))); + Modelica.Blocks.Interfaces.RealInput air_temp annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=90, + origin={-80,112}), iconTransformation( + extent={{14,-14},{-14,14}}, + rotation=90, + origin={-86,106}))); + Modelica.Blocks.Interfaces.RealInput TSet[5] "1 - Livingroom +2- Bedroom +3 - Children +4 - Bath +5 - Kitchen" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-120,-14},{-90,16}}))); + equation + + connect(Appartment.WindSpeedPort, WindSpeedPort) annotation ( + Line( + points={{-6.85333,61.7333},{-6.85333,80},{-32,80},{-32,112}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Appartment.thermNeighbour_Livingroom, fixedHeatFlow1.port) + annotation (Line( + points={{-21.7333,57.6},{-38,57.6},{-38,65},{-66,65}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermNeigbour_Bedroom, fixedHeatFlow5.port) annotation ( + Line( + points={{-21.7333,52.64},{-38,52.64},{-38,55},{-52,55}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermCeiling_Livingroom, fixedHeatFlow3.port) + annotation (Line( + points={{-21.7333,46.8533},{-38,46.8533},{-38,49},{-66,49}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermFloor_Livingroom, fixedHeatFlow4.port) annotation ( + Line( + points={{-21.7333,41.8933},{-38,41.8933},{-38,41},{-50,41}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermCeiling_Bath, fixedHeatFlow10.port) annotation ( + Line( + points={{-21.7333,26.1867},{-38,26.1867},{-38,21},{-48,21}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermFloor_Bath, fixedHeatFlow9.port) annotation (Line( + points={{-21.7333,20.4},{-38,20.4},{-38,17},{-68,17}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermNeighbour_Child, fixedHeatFlow11.port) annotation ( + Line( + points={{23.7333,57.6},{38,57.6},{38,63},{60,63}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermStaircase, fixedHeatFlow16.port) annotation (Line( + points={{23.7333,52.2267},{38,52.2267},{38,53},{62,53}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermCeiling_Children, fixedHeatFlow12.port) annotation ( + Line( + points={{23.7333,46.44},{38,46.44},{38,43},{46,43}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermCeiling_Corridor, fixedHeatFlow14.port) annotation ( + Line( + points={{23.7333,36.52},{38,36.52},{38,31},{48,31}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.thermCeiling_Kitchen, fixedHeatFlow13.port) annotation ( + Line( + points={{23.7333,26.1867},{38,26.1867},{38,21},{48,21}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Appartment.SolarRadiation_SE, SolarRadiation[1]) + annotation (Line( + points={{6.78667,61.7333},{6.78667,72},{58,72},{58,103}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Appartment.SolarRadiation_NW, SolarRadiation[2]) + annotation (Line( + points={{12.9867,61.7333},{12.9867,72},{58,72},{58,113}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(fixedHeatFlow7.port, Appartment.thermFloor_Children) annotation ( + Line( + points={{66,41},{64,41},{64,38},{38,38},{38,41.48},{23.7333,41.48}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(fixedHeatFlow8.port, Appartment.thermFloor_Kitchen) annotation ( + Line( + points={{64,21},{62,21},{62,16},{38,16},{38,21.2267},{23.7333, + 21.2267}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(fixedHeatFlow15.port, Appartment.thermFloor_Corridor) annotation ( + Line( + points={{62,31},{60,31},{60,26},{38,26},{38,31.56},{23.7333,31.56}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(fixedHeatFlow6.port, Appartment.thermCeiling_Bedroom) annotation ( + Line( + points={{-50,29},{-38,29},{-38,36.52},{-21.7333,36.52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(fixedHeatFlow2.port, Appartment.thermFloor_Bedroom) annotation ( + Line( + points={{-66,29},{-62,29},{-62,26},{-38,26},{-38,31.56},{-21.7333, + 31.56}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(tempOutside3.T, air_temp) annotation (Line( + points={{-46.05,87},{-46.05,112},{-80,112}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(AirExchangePort_Window, Appartment.AirExchangePort) annotation ( + Line( + points={{20,112},{20,80},{0.173333,80},{0.173333,61.7333}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(tempOutside3.port, Appartment.thermOutside) annotation (Line( + points={{-67.5,87},{-80,87},{-80,74},{-13.88,74},{-13.88,61.7333}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(Inflow, Hydraulic.FLOW) annotation (Line( + points={{-16,-108},{20,-108},{20,-73.1429},{28.4,-73.1429}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(Returnflow, Hydraulic.RETURN) annotation (Line( + points={{8,-108},{8,-74},{23.2,-74},{23.2,-73.1429}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(Hydraulic.Rad_Livingroom, Appartment.StarLivingroom) + annotation (Line( + points={{-20,-30.1429},{-26,-30.1429},{-26,-30},{-34,-30},{-34,0}, + {-5.61333,0},{-5.61333,40.4467}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Con_Livingroom, Appartment.thermLivingroom) + annotation (Line( + points={{-19.9,-34.4286},{-34,-34.4286},{-34,0},{-6,0},{-6,43.34}, + {-9.33333,43.34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Rad_bedroom, Appartment.StarBedroom) annotation ( + Line( + points={{35.4,-15.7143},{54,-15.7143},{54,0},{-5.61333,0},{ + -5.61333,36.7267}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Con_bedroom, Appartment.ThermBedroom) annotation ( + Line( + points={{35.6,-22.5714},{54,-22.5714},{54,0},{-9.74667,0},{ + -9.74667,36.52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Rad_children, Appartment.StarChildren) annotation ( + Line( + points={{36,-29.4286},{54,-29.4286},{54,0},{14.64,0},{14.64, + 45.6133}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Con_children, Appartment.ThermChildren) annotation ( + Line( + points={{35.7,-36.1429},{54,-36.1429},{54,0},{12,0},{12,22},{ + 10.92,22},{10.92,45.6133}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Rad_bath, Appartment.StarBath) annotation (Line( + points={{35.6,-51.4286},{54,-51.4286},{54,0},{2.44667,0},{2.44667, + 34.8667}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Con_bath, Appartment.ThermBath) annotation (Line( + points={{35.7,-57.7143},{54,-57.7143},{54,0},{-1.48,0},{-1.48, + 34.8667}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Rad_kitchen, Appartment.StarKitchen) annotation ( + Line( + points={{-19.5,-55.4286},{-34,-55.4286},{-34,0},{9.88667,0},{ + 9.88667,31.7667}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.Con_kitchen, Appartment.ThermKitchen) annotation ( + Line( + points={{-19.6,-60.1429},{-34,-60.1429},{-34,0},{10.92,0},{10.92, + 36.52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Hydraulic.TSet, TSet) annotation (Line( + points={{-13.1,-16},{-14,-16},{-14,0},{-120,0}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-120,-120},{100,120}}), + graphics), Documentation(info=" +

Overview

+

Model for an appartment, considered as a single unit with an energy system based on radiators.

+

Level of Development

+

+", revisions=" +

+"), Icon(coordinateSystem(extent={{-120,-120},{100,120}}, + preserveAspectRatio=false), graphics={Bitmap(extent={{-86,80}, + {76,-84}}, fileName= + "modelica://AixLib/Images/House/MFD_FloorPlan_En.PNG")})); + end OneAppartment_Radiators; + annotation (Documentation(info=" +

Overview

+

Package with models with building envelope and energy systems.

+

Concept

+

There is a complete model for a multi family building: middle entrance, three storeys (including the groundfloor).

+

There is also a complete model for an appartment, considered as a single unit and not part of a multi family dwelling.

+

Attention: there exissa only a parametrisation (the default parametrisation) for the energy system for a heavy building build accoring to the energy saving ordinance WSchV1984.

+")); + end BuildingAndEnergySystem; + annotation (Documentation(info=" +

Overview

+

Package with rooms aggregated to an appartment and appartments aggregated to a complete building.

+

Concept

+

Multiple rooms are connected together and they form an apartment.

+

+

It is possible to model several storeys with apartments on top of each other, as well as several wings with apartments next to each other. Storeys are connected together to form a whole house.

+

The example here has three wings and three storeys.

+")); + end MFD; + annotation (Documentation(info=" +

Overview

+

Package with complete standard house models

+

Concept

+

For each standard house type there are packages for the building envelope (Building), for the energy system (EnergySystem) and for the building as a whole (BuildingAndEnergySystem).

+")); + end House; + + package Examples + extends Modelica.Icons.ExamplesPackage; + + model RoomGFOw2_DayNightMode + "Room on groudn floor with 2 outer walls with day and night" + import AixLib; + extends Modelica.Icons.Example; + + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater + "Medium in the system" annotation (choicesAllMatching=true); + + Rooms.OFD.Ow2IwL1IwS1Gr1Uf1 room_GF_2OW( + withDoor1=false, + withDoor2=false, + withWindow1=true, + solar_absorptance_OW=0.6, + room_length=5.87, + room_width=3.84, + room_height=2.6, + windowarea_OW1=8.4, + withWindow2=true, + windowarea_OW2=1.73, + withFloorHeating=false, + TIR=1, + T0_air=294.15, + T0_IW1=291.15, + T0_IW2=291.15, + T0_FL=289.15, + T_Ground=279.15) + annotation (Placement(transformation(extent={{16,8},{52,44}}))); + + AixLib.Building.Components.Weather.Weather combinedWeather( + Latitude=49.5, + Longitude=8.5, + Cloud_cover=false, + Wind_speed=true, + Air_temp=true, + fileName= + "modelica://AixLib/Resources/WeatherData/TRY2010_12_Jahr_Modelica-Library.txt") + annotation (Placement(transformation(extent={{-100,78},{-62,104}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature varTemp + annotation (Placement(transformation(extent={{-58,38},{-38,58}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow thermCeiling(Q_flow=0) + annotation (Placement(transformation(extent={{102,58},{82,78}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow thermInsideWall1(Q_flow= + 0) annotation (Placement(transformation(extent={{102,34},{82,54}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow thermInsideWall2(Q_flow= + 0) annotation (Placement(transformation(extent={{102,10},{82,30}}))); + + AixLib.HVAC.Valves.ThermostaticValve heatValve_new(p(start= + 1000)) + annotation (Placement(transformation(extent={{22,-36},{42,-16}}))); + + AixLib.HVAC.Pumps.Pump Pumo + annotation (Placement(transformation(extent={{-92,-36},{-72,-16}}))); + + AixLib.HVAC.HeatGeneration.Boiler + boilerTaktTable + annotation (Placement(transformation(extent={{-56,-36},{-36,-16}}))); + + AixLib.Utilities.Sources.NightMode nightMode(dayEnd=22, dayStart=6) + annotation (Placement(transformation(extent={{-104,0},{-84,20}}))); + AixLib.HVAC.Pipes.StaticPipe pipe_flow(p(start=100)) + annotation (Placement(transformation(extent={{-6,-36},{14,-16}}))); + AixLib.HVAC.Pipes.StaticPipe pipe_return(p(start=100)) + annotation (Placement(transformation(extent={{28,-82},{8,-62}}))); + Modelica.Blocks.Sources.Constant Tset(k=273.15 + 20) + annotation (Placement(transformation(extent={{-6,-4},{4,6}}))); + Modelica.Blocks.Sources.Constant AirExchange(k=0.7) + annotation (Placement(transformation(extent={{8,68},{18,78}}))); + AixLib.HVAC.Sources.Boundary_p tank + annotation (Placement(transformation(extent={{-120,-32},{-106,-18}}))); + AixLib.HVAC.Radiators.Radiator radiator_ML_delta(RadiatorType= + AixLib.DataBase.Radiators.StandardOFD_EnEV2009.Livingroom()) + annotation (Placement(transformation(extent={{54,-36},{74,-16}}))); + + Modelica.Blocks.Sources.Constant Tset_flowTemperature(k=273.15 + 55) + annotation (Placement(transformation(extent={{-72,-6},{-62,4}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation( + extent={{-5,-5},{5,5}}, + rotation=270, + origin={23,-5}))); + inner AixLib.HVAC.BaseParameters baseParameters(T0=293.15) + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + Modelica.Blocks.Interfaces.RealOutput Troom + "Absolute temperature as output signal" + annotation (Placement(transformation(extent={{90,-20},{110,0}}))); + equation + connect(varTemp.port, room_GF_2OW.thermOutside) annotation (Line( + points={{-38,48},{17.8,48},{17.8,42.2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(room_GF_2OW.thermCeiling, thermCeiling.port) annotation (Line( + points={{50.2,38.6},{80,38.6},{80,68},{82,68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(room_GF_2OW.thermInsideWall1, thermInsideWall1.port) annotation ( + Line( + points={{50.2,27.8},{80,27.8},{80,44},{82,44}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(room_GF_2OW.thermInsideWall2, thermInsideWall2.port) annotation ( + Line( + points={{39.4,9.8},{39.4,0},{80,0},{80,20},{82,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Pumo.port_b, boilerTaktTable.port_a) + annotation (Line( + points={{-72,-26},{-56,-26}}, + color={0,127,255}, + smooth=Smooth.None)); + + connect(pipe_flow.port_b, heatValve_new.port_a) annotation (Line( + points={{14,-26},{22,-26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(boilerTaktTable.port_b, pipe_flow.port_a) annotation (Line( + points={{-36,-26},{-6,-26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(heatValve_new.port_b, radiator_ML_delta.port_a) annotation (Line( + points={{42,-26},{54.8,-26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(radiator_ML_delta.port_b, pipe_return.port_a) annotation (Line( + points={{73.2,-26},{100,-26},{100,-72},{28,-72}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(room_GF_2OW.AirExchangePort, AirExchange.y) annotation (Line( + points={{30.31,43.73},{30.31,73},{18.5,73}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combinedWeather.SolarRadiation_OrientedSurfaces[1], room_GF_2OW.SolarRadiationPort_OW2) + annotation (Line( + points={{-90.88,76.7},{-90.88,70},{0,70},{0,84},{43.09,84},{43.09,43.82}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(combinedWeather.SolarRadiation_OrientedSurfaces[2], room_GF_2OW.SolarRadiationPort_OW1) + annotation (Line( + points={{-90.88,76.7},{-90.88,70},{0,70},{0,31.4},{16.09,31.4}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(combinedWeather.WindSpeed, room_GF_2OW.WindSpeedPort) annotation ( + Line( + points={{-60.7333,98.8},{0,98.8},{0,18.8},{16.09,18.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combinedWeather.AirTemp, varTemp.T) annotation (Line( + points={{-60.7333,94.9},{0,94.9},{0,60},{-64,60},{-64,48},{-60,48}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Pumo.port_a, pipe_return.port_b) annotation (Line( + points={{-92,-26},{-100,-26},{-100,-72},{8,-72}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(tank.port_a, Pumo.port_a) annotation (Line( + points={{-106,-25},{-100,-25},{-100,-26},{-92,-26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(nightMode.SwitchToNightMode, Pumo.IsNight) annotation (Line( + points={{-85.15,10.3},{-82,10.3},{-82,-15.8}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(Tset.y, heatValve_new.T_setRoom) annotation (Line( + points={{4.5,1},{37.6,1},{37.6,-16.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(radiator_ML_delta.convPort, room_GF_2OW.thermRoom) annotation ( + Line( + points={{59.8,-18.4},{59.8,0},{30.04,0},{30.04,29.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(radiator_ML_delta.radPort, room_GF_2OW.starRoom) annotation (Line( + points={{68,-18.2},{68,0},{37.6,0},{37.6,29.6}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(Tset_flowTemperature.y, boilerTaktTable.T_set) annotation (Line( + points={{-61.5,-1},{-56.8,-1},{-56.8,-19}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(temperatureSensor.T, heatValve_new.T_room) annotation (Line( + points={{23,-10},{22,-10},{22,-16.2},{25.6,-16.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(temperatureSensor.port, room_GF_2OW.thermRoom) annotation (Line( + points={{23,0},{23,29},{30.04,29},{30.04,29.6}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temperatureSensor.T, Troom) annotation (Line( + points={{23,-10},{100,-10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics={ Text( + extent={{-56,-44},{82,-130}}, + lineColor={0,0,255}, + textString="Set initial values for iteration variables (list given by translate, usually pressure drops). Rule of thumb: valves 1000 Pa, pipes 100 Pa. Simulation may still work without some of them, but it gives warning of division by zero at initialization. +")}), experiment( + StopTime=86400, + Interval=60, + __Dymola_Algorithm="Lsodar"), + experimentSetupOutput(events=false), + Documentation(info=" +

Overview

+

Example for setting up a simulation for a room.

+

Concept

+

Energy generation and delivery system consisting of boiler and pump.

+

The example works for a day and shows how such a simulation can be set up. It is not guranteed that the model will work stable under sifferent conditions or for longer periods of time.

+", revisions=" +

+")); + end RoomGFOw2_DayNightMode; + + model Appartment_VoWo "Simulation of 1 apartment " + import AixLib; + extends Modelica.Icons.Example; + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater + "Medium in the system" annotation (Dialog(group="Medium"), + choicesAllMatching=true); + + AixLib.Building.HighOrder.House.MFD.BuildingAndEnergySystem.OneAppartment_Radiators + VoWoWSchV1984( + redeclare package Medium = Medium, + fixedHeatFlow3(T_ref=288.15), + fixedHeatFlow5(T_ref=283.15), + fixedHeatFlow16(T_ref=288.15)) + annotation (Placement(transformation(extent={{-42,-4},{36,46}}))); + + AixLib.HVAC.HeatGeneration.Boiler boilerTable(boilerEfficiencyB= + AixLib.DataBase.Boiler.BoilerConst()) annotation (Placement( + transformation(extent={{-44,-86},{-64,-66}}, rotation=0))); + + AixLib.HVAC.Pumps.Pump Pumpe + annotation (Placement(transformation(extent={{4,-82},{-16,-62}}))); + AixLib.HVAC.Pipes.StaticPipe pipe + annotation (Placement(transformation(extent={{-30,-48},{-18,-36}}))); + AixLib.HVAC.Pipes.StaticPipe pipe2 + annotation (Placement(transformation(extent={{26,-50},{38,-38}}))); + AixLib.Building.Components.Weather.Weather combinedWeather( + Latitude=49.5, + Longitude=8.5, + Wind_dir=false, + Wind_speed=true, + Air_temp=true, + SOD=AixLib.DataBase.Weather.SurfaceOrientation.SurfaceOrientationData_NE_SE_SW_NW_Hor(), + fileName= + "modelica://AixLib/Resources/WeatherData/TRY2010_12_Jahr_Modelica-Library.txt") + annotation (Placement(transformation(extent={{-82,74},{-50,96}}, + rotation=0))); + + Modelica.Blocks.Sources.Constant Source_TsetChildren(k=273.15 + 22) + annotation (Placement(transformation(extent={{-100,8},{-86,22}}))); + Modelica.Blocks.Sources.Constant Source_TsetLivingroom(k=273.15 + 20) + annotation (Placement(transformation(extent={{-100,52},{-86,66}}))); + Modelica.Blocks.Sources.Constant Source_TsetBedroom(k=273.15 + 20) + annotation (Placement(transformation(extent={{-100,30},{-86,44}}))); + Modelica.Blocks.Sources.Constant Source_TsetKitchen(k=273.15 + 20) + annotation (Placement(transformation(extent={{-100,-36},{-86,-22}}))); + Modelica.Blocks.Sources.Constant Source_TsetBath(k=273.15 + 24) + annotation (Placement(transformation(extent={{-100,-16},{-86,-2}}))); + Modelica.Blocks.Sources.Constant AirExWindow[5](k=0.5) + annotation (Placement(transformation(extent={{-6,74},{0,80}}))); + AixLib.HVAC.Sources.Boundary_p tank + annotation (Placement(transformation(extent={{-8,-8},{8,8}}, + rotation=270, + origin={28,-64}))); + + Modelica.Blocks.Sources.BooleanExpression booleanExpression + annotation (Placement(transformation(extent={{-94,-56},{-74,-36}}))); + inner AixLib.HVAC.BaseParameters baseParameters + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + Modelica.Blocks.Sources.Constant Source_TseBoiler(k=273.15 + 55) + annotation (Placement(transformation(extent={{-86,-96},{-72,-82}}))); + equation + + connect(Pumpe.port_b, boilerTable.port_a) annotation ( + Line( + points={{-16,-72},{-38,-72},{-38,-76},{-44,-76}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(boilerTable.port_b, pipe.port_a) annotation (Line( + points={{-64,-76},{-74,-76},{-74,-42},{-30,-42}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(pipe.port_b, VoWoWSchV1984.Inflow) annotation (Line( + points={{-18,-42},{-5.12727,-42},{-5.12727,-1.5}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(VoWoWSchV1984.Returnflow, pipe2.port_a) annotation (Line( + points={{3.38182,-1.5},{3.38182,-44},{26,-44}}, + color={0,127,255}, + smooth=Smooth.None)); + // Here the relevant Variables for the simulation are set as output to limit the dimension of the result file + + public + output Real Ta = combinedWeather.AirTemp; + + // Livingroom + output Real airTLiving = VoWoWSchV1984.Appartment.Livingroom.airload.T; + output Real radPowerLiConv = - VoWoWSchV1984.Hydraulic.Con_Livingroom.Q_flow; + output Real radPowerLiRad = - VoWoWSchV1984.Hydraulic.Rad_Livingroom.Q_flow; + output Real travelHVLi = VoWoWSchV1984.Hydraulic.valve_livingroom.opening; + output Real massFlowLi = VoWoWSchV1984.Hydraulic.valve_livingroom.port_a.m_flow; + + // Bath + output Real airTBath = VoWoWSchV1984.Appartment.Bathroom.airload.T; + output Real radPowerBConv = - VoWoWSchV1984.Hydraulic.Con_bath.Q_flow; + output Real radPowerBRad = - VoWoWSchV1984.Hydraulic.Rad_bath.Q_flow; + output Real travelHVB = VoWoWSchV1984.Hydraulic.valve_bath.opening; + output Real massFlowB = VoWoWSchV1984.Hydraulic.valve_bath.port_a.m_flow; + + // Bedroom + output Real airTBedromm = VoWoWSchV1984.Appartment.Bedroom.airload.T; + output Real radPowerBrConv = - VoWoWSchV1984.Hydraulic.Con_bedroom.Q_flow; + output Real radPowerBrRad = - VoWoWSchV1984.Hydraulic.Rad_bedroom.Q_flow; + output Real travelHVBr = VoWoWSchV1984.Hydraulic.valve_bedroom.opening; + output Real massFlowBr = VoWoWSchV1984.Hydraulic.valve_bedroom.port_a.m_flow; + + // Children + output Real airTChildren = VoWoWSchV1984.Appartment.Children.airload.T; + output Real radPowerChConv = - VoWoWSchV1984.Hydraulic.Con_children.Q_flow; + output Real radPowerChRad = - VoWoWSchV1984.Hydraulic.Rad_children.Q_flow; + output Real travelHVCh = VoWoWSchV1984.Hydraulic.valve_children.opening; + output Real massFlowCh = VoWoWSchV1984.Hydraulic.valve_children.port_a.m_flow; + + // Kitchen + output Real airTKitchen = VoWoWSchV1984.Appartment.Kitchen.airload.T; + output Real radPowerKitConv = - VoWoWSchV1984.Hydraulic.Con_kitchen.Q_flow; + output Real radPowerKitRad = - VoWoWSchV1984.Hydraulic.Rad_kitchen.Q_flow; + output Real travelHVKit = VoWoWSchV1984.Hydraulic.valve_kitchen.opening; + output Real massFlowKit = VoWoWSchV1984.Hydraulic.valve_kitchen.port_a.m_flow; + + equation + connect(combinedWeather.WindSpeed, VoWoWSchV1984.WindSpeedPort) + annotation (Line( + points={{-48.9333,91.6},{-10.4455,91.6},{-10.4455,42.875}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(AirExWindow.y, VoWoWSchV1984.AirExchangePort_Window) + annotation (Line( + points={{0.3,77},{6,77},{6,43.0833},{9.76364,43.0833}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(combinedWeather.SolarRadiation_OrientedSurfaces[2], VoWoWSchV1984.SolarRadiation[ + 1]) annotation (Line( + points={{-74.32,72.9},{-74.32,60},{21.1091,60},{21.1091,42.4583}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(combinedWeather.SolarRadiation_OrientedSurfaces[4], VoWoWSchV1984.SolarRadiation[ + 2]) annotation (Line( + points={{-74.32,72.9},{-74.32,60},{21.1091,60},{21.1091,44.5417}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(combinedWeather.AirTemp, VoWoWSchV1984.air_temp) annotation (Line( + points={{-48.9333,88.3},{-29.9455,88.3},{-29.9455,43.0833}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_TsetLivingroom.y, VoWoWSchV1984.TSet[1]) annotation (Line( + points={{-85.3,59},{-60,59},{-60,18.7083},{-36.6818,18.7083}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_TsetBedroom.y, VoWoWSchV1984.TSet[2]) annotation (Line( + points={{-85.3,37},{-60,37},{-60,19.9583},{-36.6818,19.9583}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_TsetChildren.y, VoWoWSchV1984.TSet[3]) annotation (Line( + points={{-85.3,15},{-72,15},{-72,14},{-60,14},{-60,21.2083},{-36.6818, + 21.2083}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(booleanExpression.y, Pumpe.IsNight) annotation (Line( + points={{-73,-46},{-6,-46},{-6,-61.8}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(Pumpe.port_a, tank.port_a) annotation (Line( + points={{4,-72},{28,-72}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(tank.port_a, pipe2.port_b) annotation (Line( + points={{28,-72},{28,-78},{56,-78},{56,-44},{38,-44}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(Source_TsetBath.y, VoWoWSchV1984.TSet[4]) annotation (Line( + points={{-85.3,-9},{-60,-9},{-60,22.4583},{-36.6818,22.4583}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_TsetKitchen.y, VoWoWSchV1984.TSet[5]) annotation (Line( + points={{-85.3,-29},{-60,-29},{-60,23.7083},{-36.6818,23.7083}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Source_TseBoiler.y, boilerTable.T_set) annotation (Line( + points={{-71.3,-89},{-36,-89},{-36,-69},{-43.2,-69}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -140},{100,100}}), + graphics={ Text( + extent={{-48,-82},{90,-168}}, + lineColor={0,0,255}, + textString="Set initial values for iteration variables (list given by translate, usually pressure drops). Rule of thumb: valves 1000 Pa, pipes 100 Pa. Simulation may still work without some of them, but it gives warning of division by zero at initialization. +")}), experiment( + StopTime=86400, + Interval=60, + __Dymola_Algorithm="Lsodar"), + experimentSetupOutput( + states=false, + derivatives=false, + auxiliaries=false, + events=false), + Documentation(info=" +

Overview

+

Example for setting up a simulation for an appartment.

+

Concept

+

Energy generation and delivery system consisting of boiler and pump.

+

The example works for a day and shows how such a simulation can be set up. It is not guranteed that the model will work stable under sifferent conditions or for longer periods of time.

+", revisions=" +

+"), + Icon(coordinateSystem(extent={{-100,-140},{100,100}}))); + end Appartment_VoWo; + + model OFD_1Jan "OFD with TMC, TIR and TRY" + import AixLib; + extends Modelica.Icons.Example; + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater + "Medium in the system" + annotation (Dialog(group = "Medium"),choicesAllMatching=true); + + parameter AixLib.DataBase.Profiles.Profile_BaseDataDefinition + VentilationProfile= + AixLib.DataBase.Profiles.Ventilation_2perDay_Mean05perH(); + parameter AixLib.DataBase.Profiles.Profile_BaseDataDefinition TSetProfile= + AixLib.DataBase.Profiles.SetTemperatures_Ventilation2perDay(); + + public + AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingAndEnergySystem.OFD_IdealHeaters + OFD( + TIR=3) annotation (Placement(transformation(extent={{94,-20},{153,19}}))); + + protected + AixLib.Building.Components.Weather.Weather Weather( + Latitude=49.5, + Longitude=8.5, + GroundReflection=0.2, + tableName="wetter", + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + SOD=AixLib.DataBase.Weather.SurfaceOrientation.SurfaceOrientationData_N_E_S_W_RoofN_Roof_S(), + Wind_dir=false, + Wind_speed=true, + Air_temp=true, + fileName= + "modelica://AixLib/Resources/WeatherData/TRY2010_12_Jahr_Modelica-Library.txt") + annotation (Placement(transformation(extent={{-199,69},{-151,101}}))); + + public + inner Modelica.Fluid.System system annotation (Placement(transformation( + extent={{181,78.5},{200.5,99.5}}))); + + public + Modelica.Blocks.Sources.CombiTimeTable NaturalVentilation( + columns={2,3,4,5,6}, + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=VentilationProfile.Profile) + annotation (Placement(transformation(extent={{18,25},{38,45}}))); + Modelica.Blocks.Sources.CombiTimeTable TSet( + columns={2,3,4,5,6,7}, + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=TSetProfile.Profile) + annotation (Placement(transformation(extent={{20,-23},{40,-3}}))); + + public + Modelica.Blocks.Interfaces.RealOutput TAirRooms[10]( unit = "degC") + annotation (Placement(transformation(extent={{177,11},{197,31}}), + iconTransformation(extent={{171,-29},{187,-13}}))); + Modelica.Blocks.Interfaces.RealOutput Toutside( unit = "degC") + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={142,-111}), + iconTransformation(extent={{172,-95},{188,-79}}))); + Modelica.Blocks.Interfaces.RealOutput SolarRadiation[6](unit="W/m2") + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={186,-112}), + iconTransformation(extent={{172,-95},{188,-79}}))); + Modelica.Blocks.Interfaces.RealOutput VentilationSchedule[4] + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={100,-111}), + iconTransformation(extent={{171,-29},{187,-13}}))); + Modelica.Blocks.Interfaces.RealOutput TsetValvesSchedule[5]( unit = "degC") + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={121,-111}), + iconTransformation(extent={{171,-29},{187,-13}}))); + equation + // Romm Temperatures + TAirRooms[1] =Modelica.SIunits.Conversions.to_degC(OFD.GF.Livingroom.airload.port.T); + TAirRooms[2] =Modelica.SIunits.Conversions.to_degC(OFD.GF.Hobby.airload.port.T); + TAirRooms[3] =Modelica.SIunits.Conversions.to_degC(OFD.GF.Corridor.airload.port.T); + TAirRooms[4] =Modelica.SIunits.Conversions.to_degC(OFD.GF.WC_Storage.airload.port.T); + TAirRooms[5] =Modelica.SIunits.Conversions.to_degC(OFD.GF.Kitchen.airload.port.T); + TAirRooms[6] =Modelica.SIunits.Conversions.to_degC(OFD.UF.Bedroom.airload.port.T); + TAirRooms[7] =Modelica.SIunits.Conversions.to_degC(OFD.UF.Children1.airload.port.T); + TAirRooms[8] =Modelica.SIunits.Conversions.to_degC(OFD.UF.Corridor.airload.port.T); + TAirRooms[9] =Modelica.SIunits.Conversions.to_degC(OFD.UF.Bath.airload.port.T); + TAirRooms[10] =Modelica.SIunits.Conversions.to_degC(OFD.UF.Children2.airload.port.T); + + //SimulationData + VentilationSchedule[1] = NaturalVentilation.y[1]; + VentilationSchedule[2] = NaturalVentilation.y[2]; + VentilationSchedule[3] = NaturalVentilation.y[3]; + VentilationSchedule[4] = NaturalVentilation.y[4]; + + TsetValvesSchedule[1] = Modelica.SIunits.Conversions.to_degC(TSet.y[1]); + TsetValvesSchedule[2] = Modelica.SIunits.Conversions.to_degC(TSet.y[2]); + TsetValvesSchedule[3] = Modelica.SIunits.Conversions.to_degC(TSet.y[3]); + TsetValvesSchedule[4] = Modelica.SIunits.Conversions.to_degC(TSet.y[4]); + TsetValvesSchedule[5] = Modelica.SIunits.Conversions.to_degC(TSet.y[5]); + + Toutside = Modelica.SIunits.Conversions.to_degC(Weather.AirTemp); + + //SolarRadiation + SolarRadiation[1] = Weather.SolarRadiation_OrientedSurfaces[1].I; + SolarRadiation[2] = Weather.SolarRadiation_OrientedSurfaces[2].I; + SolarRadiation[3] = Weather.SolarRadiation_OrientedSurfaces[3].I; + SolarRadiation[4] = Weather.SolarRadiation_OrientedSurfaces[4].I; + SolarRadiation[5] = Weather.SolarRadiation_OrientedSurfaces[5].I; + SolarRadiation[6] = Weather.SolarRadiation_OrientedSurfaces[6].I; + + connect(NaturalVentilation.y[1], OFD.NaturalVentilation_UF[1]) + annotation (Line( + points={{39,35},{59,35},{59,8.47},{93.6067,8.47}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[1], OFD.NaturalVentilation_GF[1]) + annotation (Line( + points={{39,35},{59,35},{59,-0.11},{94,-0.11}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[2], OFD.NaturalVentilation_UF[2]) + annotation (Line( + points={{39,35},{59,35},{59,10.03},{93.6067,10.03}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[2], OFD.NaturalVentilation_GF[2]) + annotation (Line( + points={{39,35},{59,35},{59,1.45},{94,1.45}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[1], OFD.TSet_UF[1]) annotation (Line( + points={{41,-13},{59,-13},{59,-9.81125},{93.8033,-9.81125}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[1], OFD.TSet_GF[1]) annotation (Line( + points={{41,-13},{59,-13},{59,-19.298},{94,-19.298}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[2], OFD.TSet_UF[2]) annotation (Line( + points={{41,-13},{59,-13},{59,-8.15375},{93.8033,-8.15375}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[2], OFD.TSet_GF[2]) annotation (Line( + points={{41,-13},{59,-13},{59,-17.894},{94,-17.894}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[6], OFD.TSet_GF[3]) annotation (Line( + points={{41,-13},{60,-13},{60,-16.49},{94,-16.49}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[4], OFD.TSet_UF[3]) annotation (Line( + points={{41,-13},{60,-13},{60,-6.49625},{93.8033,-6.49625}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[5], OFD.TSet_GF[4]) annotation (Line( + points={{41,-13},{59,-13},{59,-15.086},{94,-15.086}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[3], OFD.TSet_UF[4]) annotation (Line( + points={{41,-13},{60,-13},{60,-4.83875},{93.8033,-4.83875}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TSet.y[3], OFD.TSet_GF[5]) annotation (Line( + points={{41,-13},{60,-13},{60,-27},{94,-27},{94,-13.682}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[3], OFD.NaturalVentilation_UF[4]) + annotation (Line( + points={{39,35},{60,35},{60,13.15},{93.6067,13.15}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[3], OFD.NaturalVentilation_GF[4]) + annotation (Line( + points={{39,35},{59,35},{59,4.57},{94,4.57}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[4], OFD.NaturalVentilation_UF[3]) + annotation (Line( + points={{39,35},{60,35},{60,11.59},{93.6067,11.59}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(NaturalVentilation.y[4], OFD.NaturalVentilation_GF[3]) + annotation (Line( + points={{39,35},{59,35},{59,3.01},{94,3.01}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(Weather.WindSpeed, OFD.WindSpeedPort) annotation (Line( + points={{-149.4,94.6},{-126,94.6},{-126,70},{100.293,70},{100.293, + 21.73}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Weather.SolarRadiation_OrientedSurfaces, OFD.SolarRadiationPort) + annotation (Line( + points={{-187.48,67.4},{-187.48,52},{-169,52},{-169,70},{147,70},{147, + 17.05},{151.033,17.05}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(OFD.Air_Temp, Weather.AirTemp) annotation (Line( + points={{137.267,21.73},{137.267,70},{-126,70},{-126,90},{-149.4,90}, + {-149.4,89.8}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-200,-100},{200,100}}, + grid={1,1}), graphics={ + Rectangle( + extent={{-63,15},{-28,-13}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-23,50},{12,22}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-35,45},{15,43}}, + lineColor={0,0,255}, + textString="1-Bedroom"), + Text( + extent={{-35,39},{15,37}}, + lineColor={0,0,255}, + textString="2-Children1"), + Text( + extent={{-35,33},{15,31}}, + lineColor={0,0,255}, + textString="3-Bath"), + Text( + extent={{-35,27},{15,25}}, + lineColor={0,0,255}, + textString="4-Children2"), + Text( + extent={{-76,13},{-26,11}}, + lineColor={0,0,255}, + textString="1-Livingroom"), + Text( + extent={{-76,7},{-26,5}}, + lineColor={0,0,255}, + textString="2-Hobby"), + Text( + extent={{-76,1},{-26,-1}}, + lineColor={0,0,255}, + textString="3-Corridor"), + Text( + extent={{-76,-5},{-26,-7}}, + lineColor={0,0,255}, + textString="4-WC"), + Text( + extent={{-76,-11},{-26,-13}}, + lineColor={0,0,255}, + textString="5-Kitchen"), + Text( + extent={{-3,38},{13,49}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="UF"), + Rectangle( + extent={{-63,50},{-28,22}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-43,38},{-27,49}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="GF"), + Text( + extent={{-75,41},{-25,39}}, + lineColor={0,0,255}, + textString="1-Livingroom"), + Text( + extent={{-75,35},{-25,33}}, + lineColor={0,0,255}, + textString="2-Hobby"), + Text( + extent={{-75,29},{-25,27}}, + lineColor={0,0,255}, + textString="3-WC"), + Text( + extent={{-76,25},{-26,23}}, + lineColor={0,0,255}, + textString="4-Kitchen"), + Rectangle( + extent={{-23,15},{12,-13}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-43,3},{-27,14}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="GF"), + Text( + extent={{-3,3},{13,14}}, + lineColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textString="UF"), + Text( + extent={{-32,10},{18,8}}, + lineColor={0,0,255}, + textString="1-Bedroom"), + Text( + extent={{-32,4},{18,2}}, + lineColor={0,0,255}, + textString="2-Children1"), + Text( + extent={{-32,-2},{18,-4}}, + lineColor={0,0,255}, + textString="3-Bath"), + Text( + extent={{-32,-8},{18,-10}}, + lineColor={0,0,255}, + textString="4-Children2")}), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-200,-100},{200,100}}, + grid={1,1}), graphics), + experiment( + StopTime=86400, + Interval=15, + __Dymola_Algorithm="Lsodar"), + experimentSetupOutput(events=false), + Documentation(info=" +

Overview

+

Example for setting up a simulation for a one family dwelling.

+

Concept

+

Energy generation and delivery system consisting of boiler and pump.

+

The example works for a day and shows how such a simulation can be set up. It is not guranteed that the model will work stable under sifferent conditions or for longer periods of time.

+", revisions=" +

+")); + end OFD_1Jan; + + annotation (Documentation(info=" +

Overview

+

Package with exemplary simulation setups for a room, an apartment and a one family dwelling.

+

Concept

+

The examples can be used to learn how to set up a simulation for these models (e.g. assumption for boundary conditions for a single room) and to compare the different CPU-times for simulations using the models.

+")); + end Examples; + annotation ( + conversion(noneFromVersion="", noneFromVersion="1.0", + noneFromVersion="1.1", noneFromVersion="1.2", + from(version="1.3", script="Conversions/ConvertFromHouse_Models_1.3.mos"), + from(version = "2.0", script="Conversions/ConvertFromHouse_Models_2.0_To_2.1"), + from(version = "2.1", script="Conversions/ConvertFromHouse_Models_2.1_To_2.2")), + Documentation(revisions=" +

2014-05-19: Version 1.0: by Ana Constantin

+

+

2013-09-24: Version 0.9: by Ana Constantin

+

+", info=" +

Overview

+

Package for standard house models, derived form the EBC-Library HouseModels.

+

Level of Development

+

+

Concept

+

The H library aims to provide standard models for one family dwellings (stand alone house), single apartments and multi-family dwellings consisting of several apartments. The particularity of this library lies in providing ready to use models for the dynamic simulation of building energy systems, while allowing for a degree of flexibility in adapting or extending these models to ones needs.

+

A library with models for standard houses as such does not yet exist. While at the moment the standard house models are tailor-made for the German market, it is possible to adapt them to other markets.

+

When developing the HouseModels library we followed several goals:

+ +


We call these house models standard for the following reasons:

+ +

References

+

Ana Constantin, Rita Streblow and Dirk Mueller The Modelica HouseModels Library: Presentation and Evaluation of a Room Model with the ASHRAE Standard 140 in Proceedings of Modelica Conference, Lund 2014, Pages 293-299. DOI: 10.3384/ECP14096293

+")); +end HighOrder; diff --git a/AixLib/Building/LowOrder.mo b/AixLib/Building/LowOrder.mo new file mode 100644 index 0000000000..bba85289ad --- /dev/null +++ b/AixLib/Building/LowOrder.mo @@ -0,0 +1,4719 @@ +within AixLib.Building; +package LowOrder "Low Order Building Models" + extends Modelica.Icons.Package; + + model ThermalZone "Ready-to-use Low Order building model" + parameter DataBase.Buildings.ZoneBaseRecord zoneParam= + DataBase.Buildings.OfficePassiveHouse.OPH_1_Meeting() + "choose setup for this zone" annotation (choicesAllMatching=true); + + Components.Sources.InternalGains.Humans.HumanSensibleHeat_VDI2078 + human_SensibleHeat_VDI2078( + ActivityType=zoneParam.ActivityTypePeople, + NrPeople=zoneParam.NrPeople, + RatioConvectiveHeat=zoneParam.RatioConvectiveHeatPeople, + T0=zoneParam.T0all) annotation (choicesAllMatching=true, Placement( + transformation(extent={{40,0},{60,20}}))); + Components.Sources.InternalGains.Machines.Machines_DIN18599 + machines_SensibleHeat_DIN18599( + ActivityType=zoneParam.ActivityTypeMachines, + NrPeople=zoneParam.NrPeopleMachines, + ratioConv=zoneParam.RatioConvectiveHeatMachines, + T0=zoneParam.T0all) + annotation (Placement(transformation(extent= + {{40,-20},{60,-1}}))); + Components.Sources.InternalGains.Lights.Lights_relative + lights( + RoomArea=zoneParam.RoomArea, + LightingPower=zoneParam.LightingPower, + ratioConv=zoneParam.RatioConvectiveHeatLighting, + T0=zoneParam.T0all) + annotation (Placement(transformation(extent= + {{40,-40},{60,-21}}))); + Modelica.Blocks.Interfaces.RealInput infiltrationRate annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-40,-100}), iconTransformation( + extent={{-12,-12},{12,12}}, + rotation=90, + origin={-40,-88}))); + Modelica.Blocks.Interfaces.RealInput weather[3] if zoneParam.withOuterwalls + "[1]: Air temperature
[2]: Horizontal radiation of sky
[3]: Horizontal radiation of earth" + annotation (Placement(transformation(extent={{-120,0},{-80,40}}), + iconTransformation(extent={{-86,-12},{-62,12}}))); + Utilities.Interfaces.SolarRad_in solarRad_in[zoneParam.n] if zoneParam.withOuterwalls + annotation (Placement(transformation(extent={{-100,70},{-80,90}}), + iconTransformation(extent={{-100,40},{-60,80}}))); + Modelica.Blocks.Interfaces.RealInput internalGains[3] + "persons, machines, lighting" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={80,-100}), iconTransformation( + extent={{-12,-12},{12,12}}, + rotation=90, + origin={80,-88}))); + BaseClasses.ThermalZonePhysics thermalZonePhysics( + RRest=zoneParam.RRest, + R1o=zoneParam.R1o, + C1o=zoneParam.C1o, + Ao=zoneParam.Ao, + T0all=zoneParam.T0all, + alphaowi=zoneParam.alphaowi, + alphaowo=zoneParam.alphaowo, + epso=zoneParam.epso, + R1i=zoneParam.R1i, + C1i=zoneParam.C1i, + Ai=zoneParam.Ai, + Vair=zoneParam.Vair, + alphaiwi=zoneParam.alphaiwi, + rhoair=zoneParam.rhoair, + cair=zoneParam.cair, + epsi=zoneParam.epsi, + aowo=zoneParam.aowo, + epsw=zoneParam.epsw, + g=zoneParam.g, + Imax=zoneParam.Imax, + n=zoneParam.n, + weightfactorswall=zoneParam.weightfactorswall, + weightfactorswindow=zoneParam.weightfactorswindow, + weightfactorground=zoneParam.weightfactorground, + temperatureground=zoneParam.temperatureground, + Aw=zoneParam.Aw, + gsunblind=zoneParam.gsunblind, + withInnerwalls=zoneParam.withInnerwalls, + withWindows=zoneParam.withWindows, + withOuterwalls=zoneParam.withOuterwalls, + splitfac=zoneParam.splitfac) + annotation (Placement(transformation(extent={{-20,0},{20,40}}))); + Modelica.Blocks.Interfaces.RealInput infiltrationTemperature annotation ( + Placement(transformation(extent={{-100,-60},{-60,-20}}), + iconTransformation(extent={{-88,-52},{-62,-26}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a internalGainsConv + annotation (Placement(transformation(extent={{-10,-100},{10,-80}}), + iconTransformation(extent={{-10,-100},{10,-80}}))); + Utilities.Interfaces.Star internalGainsRad + annotation (Placement(transformation(extent={{30,-100},{50,-80}}))); + equation + if zoneParam.withOuterwalls then + connect(weather, thermalZonePhysics.weather) annotation (Line( + points={{-100,20},{-64,20},{-64,23.8},{-15,23.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(solarRad_in, thermalZonePhysics.solarRad_in) annotation (Line( + points={{-90,80},{-60,80},{-60,33},{-15.4,33}}, + color={255,128,0}, + smooth=Smooth.None)); + end if; + connect(infiltrationRate, thermalZonePhysics.ventilationRate) + annotation (Line( + points={{-40,-100},{-40,-40},{-8,-40},{-8,2.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078.TRoom, thermalZonePhysics.internalGainsConv) + annotation (Line( + points={{41,19},{46,19},{46,32},{96,32},{96,-52},{8,-52},{8,2}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(human_SensibleHeat_VDI2078.ConvHeat, thermalZonePhysics.internalGainsConv) + annotation (Line( + points={{59,15},{96,15},{96,-52},{8,-52},{8,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(machines_SensibleHeat_DIN18599.ConvHeat, thermalZonePhysics.internalGainsConv) + annotation (Line( + points={{59,-4.8},{96,-4.8},{96,-52},{8,-52},{8,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(lights.ConvHeat, thermalZonePhysics.internalGainsConv) annotation (Line( + points={{59,-24.8},{96,-24.8},{96,-52},{8,-52},{8,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078.RadHeat, thermalZonePhysics.internalGainsRad) + annotation (Line( + points={{59,9},{92,9},{92,-48},{16,-48},{16,2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(machines_SensibleHeat_DIN18599.RadHeat, thermalZonePhysics.internalGainsRad) + annotation (Line( + points={{59,-16.01},{92,-16.01},{92,-48},{16,-48},{16,2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(lights.RadHeat, thermalZonePhysics.internalGainsRad) annotation (Line( + points={{59,-36.01},{92,-36.01},{92,-48},{16,-48},{16,2}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(human_SensibleHeat_VDI2078.Schedule, internalGains[1]) annotation ( + Line( + points={{40.9,8.9},{30,8.9},{30,-74},{80,-74},{80,-113.333}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(machines_SensibleHeat_DIN18599.Schedule, internalGains[2]) + annotation (Line( + points={{41,-10.5},{30,-10.5},{30,-74},{80,-74},{80,-100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(lights.Schedule, internalGains[3]) annotation (Line( + points={{41,-30.5},{30,-30.5},{30,-74},{80,-74},{80,-86.6667}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(infiltrationTemperature, thermalZonePhysics.ventilationTemperature) + annotation (Line( + points={{-80,-40},{-60,-40},{-60,12},{-15.2,12}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(thermalZonePhysics.internalGainsConv, internalGainsConv) annotation ( + Line( + points={{8,2},{8,-52},{0,-52},{0,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermalZonePhysics.internalGainsRad, internalGainsRad) annotation (Line( + points={{16,2},{16,-80},{40,-80},{40,-90}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Dialog( + tab="Windows", + group="Shading", + descriptionLabel=false), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100,-100},{100, + 100}}), graphics), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), graphics={ + Rectangle( + extent={{-60,80},{100,-58}}, + lineColor={0,128,255}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-58},{100,-70}}, + lineColor={0,127,0}, + lineThickness=1, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{14,36},{100,-58}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{100,36},{-2,36},{100,60},{100,36}}, + lineColor={255,85,85}, + lineThickness=1, + smooth=Smooth.None, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-50,72},{-22,44}}, + lineColor={255,255,0}, + lineThickness=1, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-18,54},{-6,44}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-26,44},{-18,32}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-36,40},{-36,26}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-48,-58},{-50,-52},{-46,-48},{-48,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-40,-58},{-42,-52},{-38,-48},{-40,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-32,-58},{-34,-52},{-30,-48},{-32,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-50,-44},{-48,-40},{-46,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-42,-44},{-40,-40},{-38,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-34,-44},{-32,-40},{-30,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Rectangle( + extent={{22,36},{100,-50}}, + fillColor={127,0,127}, + fillPattern=FillPattern.Solid, + lineThickness=1, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{64,12},{80,0}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{64,0},{80,-12}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{48,0},{64,-12}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{48,12},{64,0}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{4,-4},{-4,4}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + origin={65,28}, + rotation=180), + Line( + points={{-12,-24},{-18,-24}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1, + origin={50,8}, + rotation=180), + Line( + points={{-11,-37},{-11,-41},{-17,-41},{-17,-37}}, + color={0,0,0}, + smooth=Smooth.None, + thickness=1, + origin={51,-5}, + rotation=180), + Rectangle( + extent={{62,36},{68,32}}, + pattern=LinePattern.None, + lineThickness=1, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{74,-24},{92,-36}}, + pattern=LinePattern.None, + lineThickness=1, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{75,-25},{91,-35}}, + pattern=LinePattern.None, + lineThickness=1, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Polygon( + points={{74,-42},{78,-38},{88,-38},{92,-42},{74,-42}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{78,-41},{80,-39},{86,-39},{88,-41},{78,-41}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Ellipse( + extent={{40,-26},{46,-32}}, + lineColor={255,213,170}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{43,-29},{41,-27}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{45,-29},{43,-27}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{40,-29},{40,-29},{40,-29},{42,-31},{44,-31},{46,-29},{46, + -29},{46,-29}}, + smooth=Smooth.None, + color={0,0,0}, + thickness=1), + Rectangle( + extent={{39,-32},{47,-44}}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-90,134},{98,76}}, + lineColor={127,0,127}, + textString="%name")}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Concept

+

ThermalZone is thought for easy computations to get information about air temperatures and heating profiles. Therefore, some simplifications have been implemented (one air node, one inner wall, one outer wall).

+

All theory is documented in VDI 6007. How to gather the physical parameters for the thermal zone is documented in this standard. It is possible to get this information out of the normal information of a building. Various data can be used, depending on the abilities of the preprocessing tools.

+


References

+ +

Example Results

+

See Examples for some results.

+", + revisions=" + +")); + end ThermalZone; + + package BaseClasses "Sub-models for ThermalZone" + extends Modelica.Icons.BasesPackage; + + model EqAirTemp "equivalent air temperature according to VDI 6007" + + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowo=20 + "Outer wall's coefficient of heat transfer (outer side)"; + parameter Real aowo=0.6 "Coefficient of absorption of the outer walls"; + parameter Real eowo=0.9 "Coefficient of emission of the outer walls"; + parameter Integer n=4 "Number of orientations (without ground)"; + //parameter Real orientationswallsvertical[n]={0,90,180,270,0} "orientations of the walls against the horizontal (n,e,s,w)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + //parameter Real orientationswallshorizontal[n]={90,90,90,90,0} "orientations of the walls against the vertical (wall,roof)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + parameter Real wf_wall[n]={0.5,0.2,0.2,0.1} "Weight factors of the walls"; + //parameter Integer m=4 "Number of window orientations"; + //parameter Real orientationswindowsvertical[m]={0,90,180,270,0} "orientations of the windows against the horizontal (n,e,s,w)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + //parameter Real orientationswindowshorizontal[m]={90,90,90,90,0} "orientations of the windows against the vertical (wall,roof)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + parameter Real wf_win[n]={0,0,0,0} "Weight factors of the windows"; + parameter Real wf_ground=0 + "Weight factor of the ground (0 if not considered)"; + parameter Modelica.SIunits.Temp_K T_ground=284.15 + "Temperature of the ground in contact with ground slab"; + protected + parameter Real phiprivate=0.5; + parameter Real unitvec[n]=ones(n); + // parameter Real unitvecwindow[m]=ones(m); + public + Modelica.Blocks.Interfaces.RealInput weatherData[3] + "[1]: Air temperature
[2]: Horizontal radiation of sky
[3]: Horizontal radiation of earth" + annotation (Placement(transformation(extent={{-120,-20},{-80,20}}), + iconTransformation(extent={{-100,-20},{-60,20}}))); + Utilities.Interfaces.SolarRad_in solarRad_in[n] annotation (Placement( + transformation(extent={{-100,56},{-80,76}}), iconTransformation( + extent={{-99,42},{-71,70}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a equalAirTemp annotation ( + Placement(transformation(extent={{80,-6},{100,14}}), iconTransformation( + extent={{60,-20},{100,20}}))); + + Modelica.SIunits.Temp_K T_earth + "radiative temperature of the land surface"; + Modelica.SIunits.Temp_K T_sky "radiative temperature of the sky"; + + Modelica.SIunits.Temp_K T_eqWall[n] "temperature equal wall"; + Modelica.SIunits.Temp_K T_eqWin[n] "temperature equal window"; + + protected + Modelica.SIunits.RadiantEnergyFluenceRate E_earth + "Iradiation from land surface"; + Modelica.SIunits.RadiantEnergyFluenceRate E_sky "Iradiation from sky"; + + Modelica.SIunits.Temp_K T_air "outdoor air temperature"; + + Modelica.SIunits.Temp_K T_eqLWs "equal long wave scalar"; + Modelica.SIunits.TemperatureDifference T_eqLW[n] "equal long wave"; + Modelica.SIunits.TemperatureDifference T_eqSW[n] "equal short wave"; + + Modelica.SIunits.CoefficientOfHeatTransfer alpharad; + + public + Modelica.Blocks.Interfaces.RealInput sunblindsig[n] + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-10,100}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={0,80}))); + + initial equation + assert(n==size(wf_wall,1),"weightfactorswall has to have n elements"); + assert(n==size(wf_win,1),"weightfactorswall has to have n elements"); + if ((sum(wf_wall)+sum(wf_win)+wf_ground)<>0.00001)==false then + Modelica.Utilities.Streams.print("WARNING!:The sum of the weightfactors (walls,windows and ground) in eqairtemp is 0. This means, that eqairtemp is 0 °C. If there are no walls, windows and ground at all, this might be irrelevant."); + end if; + if (abs((sum(wf_wall)+sum(wf_win)+wf_ground)-1)>0.1) then + Modelica.Utilities.Streams.print("WARNING!:The sum of the weightfactors (walls,windows and ground) in eqairtemp is <0.9 or >1.1. Normally, the sum should be 1, as the influence of all weightfactors should the whole influence on the temperature."); + end if; + equation + if cardinality(sunblindsig)<1 then + sunblindsig=fill(0,n); + end if; + + T_air=weatherData[1]; + E_sky=weatherData[2]; + E_earth=weatherData[3]; + if (abs(E_sky+E_earth)<0.1) then + alpharad=5.0; + else + alpharad=(E_sky+E_earth)/(T_sky-T_earth); + end if; + + T_earth=((-E_earth/(0.93*5.67))^0.25)*100;//-273.15 + T_sky=((E_sky/(0.93*5.67))^0.25)*100;//-273.15 + + T_eqLWs=((T_earth-(T_air))*(1-phiprivate)+(T_sky-(T_air))*phiprivate)*((eowo*alpharad)/(alphaowo*0.93)); + T_eqLW=T_eqLWs*abs(sunblindsig-unitvec); + + T_eqSW=solarRad_in.I*aowo/alphaowo; + + T_eqWin=(T_air*unitvec)+T_eqLW; + T_eqWall=(T_air+T_eqLWs)*unitvec+T_eqSW; + // T_ground is currently a parameter + + //temperatureequalwindowcelsius = Modelica.SIunits.Conversions.to_degC(temperatureequalwindow); + //temperatureequalwallcelsius = Modelica.SIunits.Conversions.to_degC(temperatureequalwall); + //temperaturegroundcelsius = Modelica.SIunits.Conversions.to_degC(temperatureground); + + equalAirTemp.T = T_eqWall*wf_wall + T_eqWin*wf_win + T_ground*wf_ground; + + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), Icon(graphics={ + Rectangle( + extent={{-70,-76},{78,76}}, + lineColor={0,128,255}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,46},{60,-76}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,46},{2,46},{60,74},{60,70},{60,46}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,72},{-28,40}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,-76},{78,-90}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Forward), + Line( + points={{-54,-74},{-58,-66},{-50,-62},{-56,-54},{-52,-50},{-54,-44}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1), + Line( + points={{-58,-48},{-54,-40},{-50,-46}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-40,-74},{-44,-66},{-36,-62},{-42,-54},{-38,-50},{-40,-44}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1), + Line( + points={{-44,-48},{-40,-40},{-36,-46}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-50,34},{-50,10}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-36,36},{-24,14}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-24,46},{-6,32}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{12,-30},{12,-68},{6,-70},{4,-60},{4,-30},{10,-22},{12,-30}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{10,-48},{12,-38},{14,-48}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier)}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Known Limitations

+

The heat transfer through the radiance is considered by an alpha. It is computed and is somewhere around 5. In cases of exorbitant high radiance values, this alpha could be not as accurate as a real T^4 equation.

+

The longwave radiation is normally also considered for each direction separately, but this means that you need the angles for each direction. As the longwave term has no great impact on the equivalent temperature, the improvement is not worth the costs. Phiprivate is set to 0.5. Nonetheless, the parameters are prepared, but the equations for phiprivate ( in which the angles have an effect) are not yet implemented.

+

In addition, the convective heat transfer coefficient alpha is weighted over the areas per each direction. In VDI 6007, alpha is considered for each element and not averaged per direction. This may cause deviations if the alphas of the single elements are considerabely different.

+

Concept

+

To the air temperature is added (or substracted) a term for longwave radiation and one term for shortwave radiation. As the shortwave radiation is taken into account only for the walls and the windows can be equipped with a shading, the equal temperatures are computed separately for the windows and for the walls. Due to the different beams in different directions, the temperatures are also computed separately for each direction. You need one weightfactor per direction and wall or window, e.g. 4 directions means 8 weightfactors (4 windows, 4 walls). Additionally, one weightfactor for the ground (for the ground temperature) .

+


First, a temperature of the earth (not the ground temperature!) and temperature of the sky are computed. The difference is taken into account for the longwave radiance term.

+

For the windows, the shading input is considered on the longwave term.

+

For the walls, the shortwave radiance term is computed with the beam of the radiance input.

+

The n temperature of the walls, the n temperature of the windows and the ground temperature are weighted with the weightfactors and summed up. As this equations only works in °C, the unit is changed and rechanged to use Kelvin for the heat port again.

+



References

+ +

Example Results

+

See Validation for some results.

+", revisions=" +

+")); + end EqAirTemp; + + model ReducedOrderModel + "Low Order building envelope model corresponding to VDI 6007" + + parameter Boolean withInnerwalls=true "If inner walls are existent" annotation(Dialog(tab="Inner walls")); + parameter Modelica.SIunits.ThermalResistance R1i=0.0005955 + "Resistor 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1i=14860000 + "Capacity 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Area Ai=75.5 "Inner wall area" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Temp_K T0all=295.15 + "Initial temperature for all components"; + parameter Boolean withWindows=true "If windows are existent" annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withOuterwalls then true else false)); + parameter Real splitfac=0 "Factor for conv. part of rad. through windows" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Aw=10.5 "Window area" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.Emissivity epsw=0.95 + "Emissivity of the windows" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.TransmissionCoefficient g=0.7 + "Total energy transmittance" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Boolean withOuterwalls=true + "If outer walls (including windows) are existent" annotation(Dialog(tab="Outer walls")); + parameter Modelica.SIunits.ThermalResistance RRest=0.0427487 + "Resistor Rest outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.ThermalResistance R1o=0.004366 + "Resistor 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1o=1557570 + "Capacity 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Ao=10.5 "Outer wall area" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Volume Vair=52.5 + "Volume of the air in the zone" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaiwi=2.7 + "Coefficient of heat transfer for inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowi=2.7 + "Outer wall's coefficient of heat transfer (inner side)" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Density rhoair=1.19 "Density of the air" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.SpecificHeatCapacity cair=1007 + "Heat capacity of the air" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.Emissivity epsi=0.95 + "Emissivity of the inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Emissivity epso=0.95 + "Emissivity of the outer walls" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + + Components.DryAir.Airload airload( + V=Vair, + rho=rhoair, + c=cair, + T(nominal=293.15, + min=278.15, + max=323.15)) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={2,2}))); + Utilities.HeatTransfer.HeatConv heatConvInnerwall(A=Ai, alpha= + alphaiwi) if withInnerwalls + annotation (Placement(transformation(extent={{28,-10},{48,10}}))); + + SimpleOuterWall outerwall( + RRest=RRest, + R1=R1o, + C1=C1o, + T0=T0all, + port_b(T( + nominal=293.15, + min=278.15, + max=323.15))) if + withOuterwalls + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + SimpleInnerWall innerwall( + R1=R1i, + C1=C1i, + T0=T0all, + port_a(T( + nominal=293.15, + min=278.15, + max=323.15))) if + withInnerwalls + annotation (Placement(transformation(extent={{56,-10},{76,10}}))); + + Utilities.HeatTransfer.HeatConv heatConvOuterwall(A=Ao, alpha= + alphaowi) if withOuterwalls + annotation (Placement(transformation(extent={{-24,-10},{-44,10}}))); + + Utilities.HeatTransfer.HeatToStar heatToStarOuterwall(eps=epso, A=Ao) if + withOuterwalls annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-46,22}))); + Utilities.HeatTransfer.HeatToStar heatToStarInnerwall(A=Ai, eps=epsi) if withInnerwalls + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=270, + origin={52,22}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a internalGainsConv(T( + nominal=273.15 + 22, + min=273.15 - 30, + max=273.15 + 60)) annotation (Placement(transformation(extent={{10,-100},{ + 30,-80}}), iconTransformation(extent={{0,-100},{40,-60}}))); + Components.DryAir.VarAirExchange airExchange( + V=Vair, + c=cair, + rho=rhoair) + annotation (Placement(transformation(extent={{-44,-40},{-24,-20}}))); + Modelica.Blocks.Interfaces.RealInput ventilationRate annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=270, + origin={-40,-100}), iconTransformation( + extent={{20,-20},{-20,20}}, + rotation=270, + origin={-40,-80}))); + public + Modelica.Blocks.Interfaces.RealInput ventilationTemperature annotation ( + Placement(transformation(extent={{-120,-82},{-80,-42}}), + iconTransformation(extent={{-100,-28},{-60,-68}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a equalAirTemp if + withOuterwalls annotation (Placement(transformation(extent={{-110,-20},{-70, + 20}}), iconTransformation(extent={{-100,-16},{-60,24}}))); + Utilities.Interfaces.Star internalGainsRad annotation (Placement( + transformation(extent={{70,-100},{90,-80}}), iconTransformation( + extent={{54,-102},{100,-58}}))); + Utilities.HeatTransfer.SolarRadToHeat solarRadToHeatWindowRad(coeff=g, + A=Aw) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-46,74},{-26,94}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in solarRad_in if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-102,60},{-82,80}}, + rotation=0), iconTransformation(extent={{-102,34},{-60,74}}))); + + SolarRadMultiplier solarRadMultiplierWindowRad(x=1 - splitfac) if + withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-72,72},{-52,92}}))); + SolarRadMultiplier solarRadMultiplierWindowConv(x=splitfac) if withWindows + and withOuterwalls + annotation (Placement(transformation(extent={{-72,48},{-52,68}}))); + Utilities.HeatTransfer.SolarRadToHeat solarRadToHeatWindowConv(A=Aw, + coeff=g) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-46,50},{-26,70}}, + rotation=0))); + Utilities.HeatTransfer.HeatToStar heatToStarWindow(A=Aw, eps=epsw) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-20,72},{0,92}}))); + + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + ventilationTemperatureConverter annotation (Placement(transformation( + extent={{-8,-8},{8,8}}, + rotation=90, + origin={-68,-42}))); + initial equation + if abs(Aw) < 0.00001 and withWindows then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel, withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + if abs(Ao) < 0.00001 and withOuterwalls then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel,withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + if abs(Ai) < 0.00001 and withInnerwalls then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel,withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + + equation + if withWindows and withOuterwalls then + connect(solarRad_in, solarRadMultiplierWindowRad.solarRad_in) annotation (Line( + points={{-92,70},{-75,70},{-75,82},{-71,82}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(solarRad_in, solarRadMultiplierWindowConv.solarRad_in) annotation (Line( + points={{-92,70},{-75,70},{-75,58},{-71,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(solarRadMultiplierWindowRad.solarRad_out, solarRadToHeatWindowRad.solarRad_in) + annotation (Line( + points={{-53,82},{-46.1,82}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(solarRadMultiplierWindowConv.solarRad_out, solarRadToHeatWindowConv.solarRad_in) + annotation (Line( + points={{-53,58},{-46.1,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(solarRadToHeatWindowRad.heatPort, heatToStarWindow.Therm) + annotation (Line( + points={{-27,82},{-19.2,82}}, + color={191,0,0}, + smooth=Smooth.None)); + if withOuterwalls then + else + assert(withOuterwalls,"There must be outer walls, windows have to be counted too!"); + end if; + if withInnerwalls then + end if; + end if; + + if withOuterwalls then + connect(equalAirTemp, outerwall.port_a) annotation (Line( + points={{-90,0},{-80,0},{-80,-0.909091},{-70,-0.909091}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outerwall.port_b, heatToStarOuterwall.Therm) annotation (Line( + points={{-50,-0.909091},{-46,-0.909091},{-46,12.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outerwall.port_b, heatConvOuterwall.port_b) annotation (Line( + points={{-50,-0.909091},{-46.5,-0.909091},{-46.5,0},{-44,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatConvOuterwall.port_a, airload.port) annotation (Line( + points={{-24,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + if withInnerwalls then + else + end if; + end if; + + if withInnerwalls then + connect(innerwall.port_a, heatConvInnerwall.port_b) annotation (Line( + points={{56,-0.909091},{51.5,-0.909091},{51.5,0},{48,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(internalGainsRad, heatToStarInnerwall.Star) annotation (Line( + points={{80,-90},{80,54},{10,54},{10,40},{52,40},{52,31.1}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + end if; + + connect(airExchange.port_b, airload.port) annotation ( + Line( + points={{-24,-30},{-16,-30},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(internalGainsConv, airload.port) annotation (Line( + points={{20,-90},{20,-30},{-16,-30},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port, heatConvInnerwall.port_a) annotation (Line( + points={{-7,0},{-16,0},{-16,-30},{20,-30},{20,0},{28,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatToStarInnerwall.Therm, innerwall.port_a) annotation (Line( + points={{52,12.8},{52,-0.909091},{56,-0.909091}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatToStarOuterwall.Star, internalGainsRad) annotation (Line( + points={{-46,31.1},{-46,40},{10,40},{10,54},{80,54},{80,-90}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(heatToStarWindow.Star, internalGainsRad) annotation (Line( + points={{-0.9,82},{10,82},{10,54},{80,54},{80,-90}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(solarRadToHeatWindowConv.heatPort, airload.port) annotation (Line( + points={{-27,58},{-16,58},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(ventilationRate, airExchange.InPort1) annotation (Line( + points={{-40,-100},{-40,-60},{-50,-60},{-50,-36.4},{-43,-36.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(ventilationTemperature, ventilationTemperatureConverter.T) + annotation (Line( + points={{-100,-62},{-68,-62},{-68,-51.6}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(ventilationTemperatureConverter.port, airExchange.port_a) annotation ( + Line( + points={{-68,-34},{-68,-30},{-44,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + experiment(StopTime=864000), + experimentSetupOutput, + Icon(graphics={ + Rectangle( + extent={{-60,74},{100,-72}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{14,38},{46,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{14,12},{46,-14}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{-18,12},{14,-14}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{-18,38},{14,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1)}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Concept

+

The concept is described in VDI 6007. All outer walls and inner walls (including the windows) are merged together to one wall respectively. The inner walls are used as heat storages only, there is no heat transfer out of the zone (adiabate). This assumption is valid as long as the walls are in the zone or touch zones with a similar temperature. All walls, which touch other thermal zones are put together in the outer walls, which have an heat transfer with EqAirTemp.

+

The two different "wall types" are connected through a convective heat circuit and a star circuit (different as in VDI 6007). As the air node can only react to convective heat, it is integrated in the convectice heat circuit. To add miscellaneous other heat sources/sinks (inner loads, heating) to the circiuts, there is one heat port to the convective circuit and one star port to the star circuit.

+

The last influence is the solar radiation through the windows. The heat transfer through the windows is considered in the outer walls. The beam is considered in the star circuit. There is a bypass from the beam to the convective circuit implemented, as a part of the beam is sometimes considered directly as convective heat.

+


References

+ +

Example Results

+

See Vadliation for some results.

+", revisions=" +

+")); + end ReducedOrderModel; + + model SimpleInnerWall "1 capacitance, 1 resistance" + import SI = Modelica.SIunits; + parameter SI.ThermalResistance R1=1 "Resistance 1"; + parameter SI.HeatCapacity C1=1 "Capacity 1"; + parameter Modelica.SIunits.Temp_K T0=295.15 + "Initial temperature for all components"; + //parameter SI.Area A=16 "Wall Area"; + + Modelica.Thermal.HeatTransfer.Components.ThermalResistor + Res1(R=R1) annotation ( + Placement(transformation(extent={{-18,18},{2,38}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0), iconTransformation(extent={{-110,-10},{-90,10}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor load1(C=C1, T(start=T0)) + annotation (Placement(transformation(extent={{32,4},{52,24}}))); + equation + connect(port_a, Res1.port_a) annotation (Line( + points={{-100,0},{-60,0},{-60,28},{-18,28}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Res1.port_b, load1.port) annotation (Line( + points={{2,28},{20,28},{20,0},{42,0},{42,4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100, + -100},{100,120}}), + graphics), Documentation(info=" +

Overview

+ +

Level of Development

+

+

Assumptions

+

The model underlies all assumptions which are made in VDI 6007, especially that all heat transfer parts are combined in one part. It can be used in combination with various other models.

+

Known Limitations

+

There are no known limitaions.

+

Concept

+

The model works like an electric circuit as the equations of heat transfer are similar to them. All elements used in the model are taken from the EBC standard library.

+


References

+ +

Example Results

+

The wall model is tested and validated in the context of the ReducedOrderModel. See Validation for some results.

+", revisions=" +

+"), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 120}}), + graphics={ + Rectangle( + extent={{-86,60},{-34,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-28,60},{26,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{32,60},{86,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,20},{54,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,20},{-6,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-86,-20},{-34,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-28,-20},{26,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{32,-20},{86,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,-60},{-6,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,-60},{54,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,100},{-6,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,100},{54,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,-60},{114,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,20},{116,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,100},{116,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,-60},{-66,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,20},{-66,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,100},{-66,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-88,120},{-120,-100}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{120,120},{89,-100}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Line( + points={{-90,0},{-2,0}}, + color={0,0,0}, + thickness=0.5, + smooth=Smooth.None), + Rectangle( + extent={{-74,12},{-26,-10}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-2,0},{-2,-32}}, + color={0,0,0}, + thickness=0.5, + smooth=Smooth.None), + Rectangle( + extent={{15,-32},{-19,-44}}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Line( + points={{-19,-32},{15,-32}}, + pattern=LinePattern.None, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-19,-44},{15,-44}}, + pattern=LinePattern.None, + thickness=0.5, + smooth=Smooth.None), + Text( + extent={{-90,142},{90,104}}, + lineColor={0,0,255}, + textString="%name")})); + end SimpleInnerWall; + + model SimpleOuterWall "1 capacitance, 2 resistors" + import SI = Modelica.SIunits; + parameter SI.ThermalResistance RRest=1 "Resistor Rest"; + parameter SI.ThermalResistance R1=1 "Resistor 1"; + parameter SI.HeatCapacity C1=1 "Capacity 1"; + //parameter SI.Area A=16 "Wall Area"; + parameter Modelica.SIunits.Temp_K T0=295.15 + "Initial temperature for all components"; + + Modelica.Thermal.HeatTransfer.Components.ThermalResistor + ResRest(R=RRest) + annotation (Placement(transformation(extent={{-48, + 20},{-28,40}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor + Res1(R=R1) + annotation (Placement(transformation(extent={{38,20},{ + 58,40}}, rotation=0))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0), iconTransformation(extent={{-110,-10},{-90,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b annotation ( + Placement(transformation(extent={{90,-10},{110,10}}, rotation=0), + iconTransformation(extent={{90,-10},{110,10}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor load1(C=C1, T(start=T0)) + annotation (Placement(transformation(extent={{-12,2},{8,-18}}))); + equation + connect(port_a, ResRest.port_a) annotation (Line( + points={{-100,0},{-62,0},{-62,30},{-48,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(ResRest.port_b, load1.port) annotation (Line( + points={{-28,30},{-2,30},{-2,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(load1.port, Res1.port_a) annotation (Line( + points={{-2,2},{-2,30},{38,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Res1.port_b, port_b) annotation (Line( + points={{58,30},{80,30},{80,0},{100,0}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100,-100}, + {100,120}}), + graphics), Documentation(info=" +

Overview

+ +

Level of Development

+

+

Assumptions

+

The model underlies all assumptions which are made in VDI 6007, especially that all heat transfer parts are combined in one part. It can be used in combination with various other models.

+

Known Limitations

+

There are no known limitaions.

+

Concept

+

The model works like an electric circuit as the equations of heat transfer are similar to them. All elements used in the model are taken from the EBC standard library.

+


References

+ +

Example Results

+

The wall model is tested and validated in the context of the ReducedOrderModel. See Validation for some results.

+", revisions=" +

+"), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 120}}), + graphics={ + Rectangle( + extent={{-86,60},{-34,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-28,60},{26,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{32,60},{86,26}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,20},{54,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,20},{-6,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-86,-20},{-34,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-28,-20},{26,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{32,-20},{86,-54}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,-60},{-6,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,-60},{54,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-60,100},{-6,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{0,100},{54,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,-60},{114,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,20},{116,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{60,100},{116,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,-60},{-66,-94}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,20},{-66,-14}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-120,100},{-66,66}}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + lineColor={175,175,175}), + Rectangle( + extent={{-90,120},{-120,-100}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{120,120},{89,-100}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Line( + points={{-90,0},{90,0}}, + color={0,0,0}, + thickness=0.5, + smooth=Smooth.None), + Rectangle( + extent={{-74,12},{-26,-10}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{28,12},{76,-10}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-1,0},{-1,-32}}, + color={0,0,0}, + thickness=0.5, + smooth=Smooth.None), + Rectangle( + extent={{16,-32},{-18,-44}}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Line( + points={{-18,-32},{16,-32}}, + pattern=LinePattern.None, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-18,-44},{16,-44}}, + pattern=LinePattern.None, + thickness=0.5, + smooth=Smooth.None), + Text( + extent={{-90,142},{90,104}}, + lineColor={0,0,255}, + textString="%name")})); + end SimpleOuterWall; + + model SolarRadMultiplier "scalar radiant input * factor x" + parameter Real x=1; + Utilities.Interfaces.SolarRad_in solarRad_in annotation (Placement( + transformation(extent={{-100,-10},{-80,10}}))); + Utilities.Interfaces.SolarRad_out solarRad_out + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + equation + solarRad_out.I=solarRad_in.I*x; + annotation (Documentation(info=" +

Overview

+ +

Level of Development

+

+", revisions=" +

+"), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), + graphics), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics={ + Rectangle( + extent={{-80,40},{80,-40}}, + lineColor={215,215,215}, + fillColor={239,239,159}, + fillPattern=FillPattern.Solid), + Text( + extent={{-80,20},{-40,-20}}, + lineColor={0,0,0}, + textString="I", + fontName="Times New Roman"), + Text( + extent={{-60,12},{-20,-28}}, + lineColor={0,0,0}, + fontName="Times New Roman", + textString="in"), + Text( + extent={{-50,20},{62,-20}}, + lineColor={0,0,0}, + fontName="Times New Roman", + textString=" * fac"), + Line( + points={{54,0},{72,0},{62,6}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{72,0},{62,-6}}, + color={0,0,255}, + smooth=Smooth.None)})); + end SolarRadMultiplier; + + model SolarRadWeightedSum + "weights vec input and sums it up to one scalar output" + parameter Integer n=1 "number of inputs and weightfactors"; + parameter Real weightfactors[n]={1} + "weightfactors with which the inputs are to be weighted"; + + Utilities.Interfaces.SolarRad_in solarRad_in[n] annotation (Placement( + transformation(extent={{-100,0},{-80,20}}), iconTransformation( + extent={{-100,-10},{-80,10}}))); + Utilities.Interfaces.SolarRad_out solarRad_out annotation (Placement( + transformation(extent={{80,0},{100,20}}), iconTransformation( + extent={{80,-10},{100,10}}))); + protected + parameter Real sumWeightfactors = if (sum(weightfactors) == 0) then 0.0001 else sum(weightfactors); + + initial equation + assert(n==size(weightfactors,1),"weightfactors (likely Aw) has to have n elements"); + if (sum(weightfactors)==0) then + Modelica.Utilities.Streams.print("WARNING!:The sum of the weightfactors (likely the window areas) in rad_weighted_sum is 0. In case of no radiation (e.g. no windows) this might be correct."); + end if; + equation + solarRad_out.I=solarRad_in.I*weightfactors/sumWeightfactors; + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), Icon(graphics={ + Rectangle(extent={{-80,80},{80,-80}}, lineColor={0,0,0}), + Text( + extent={{-40,70},{-22,60}}, + lineColor={0,0,0}, + textString="*Gn"), + Line( + points={{-80,0},{-60,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-80,0},{-60,20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-80,0},{-60,60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{72,0},{82,0},{20,0}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-60,-20},{0,-20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-60,20},{0,20}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-60,60},{0,60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-60,-60},{0,-60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{-80,0},{-60,-60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{0,20},{20,0}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{0,60},{20,0}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{20,0},{0,-60}}, + color={0,0,0}, + smooth=Smooth.None), + Line( + points={{0,-20},{20,0}}, + color={0,0,0}, + smooth=Smooth.None), + Text( + extent={{10,-2},{72,-14}}, + lineColor={0,0,0}, + textString="/sum(Gn)"), + Text( + extent={{-42,30},{-20,20}}, + lineColor={0,0,0}, + textString="*Gn"), + Text( + extent={{-42,-10},{-20,-20}}, + lineColor={0,0,0}, + textString="*Gn"), + Text( + extent={{-42,-50},{-20,-60}}, + lineColor={0,0,0}, + textString="*Gn")}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Known Limitations

+

If the weightfactors are all zero, Dymola tries to divide through zero. You will get a warning and the output is set to zero.

+", revisions=" +

+")); + end SolarRadWeightedSum; + + model ThermalZonePhysics + "All sub-models of VDI 6007 connected to one model" + + parameter Boolean withInnerwalls=true "If inner walls are existent" annotation(Dialog(tab="Inner walls")); + parameter Modelica.SIunits.ThermalResistance R1i=0.000656956 + "Resistor 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1i=12049200 + "Capacity 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Area Ai=60.5 "Inner wall area" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Temp_K T0all=295.15 + "Initial temperature for all components"; + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaiwi=2.1 + "Coefficient of heat transfer for inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Boolean withOuterwalls=true + "If outer walls (including windows) are existent" annotation(Dialog(tab="Outer walls")); + parameter Modelica.SIunits.ThermalResistance RRest=0.001717044 + "Resistor Rest outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.ThermalResistance R1o=0.02045808 + "Resistor 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1o=4896650 + "Capacity 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Ao=25.5 "Outer wall area" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowi=2.7 + "Outer wall's coefficient of heat transfer (inner side)" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowo=20 + "Outer wall's coefficient of heat transfer (outer side) " + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Emissivity epsi=1 + "Emissivity of the inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Emissivity epso=1 + "Emissivity of the outer walls" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Real aowo=0.7 "Coefficient of absorption of the outer walls" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Boolean withWindows=true "If windows are existent" annotation(Dialog(tab="Windows",enable = if withOuterwalls then true else false)); + parameter Real splitfac = 0 + "Factor for conv. part of rad. through windows" annotation(Dialog(tab="Windows",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Aw[n]={1,1,1,1} "Area of the windows" + annotation(Dialog(tab="Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.TransmissionCoefficient gsunblind[n]={1,1,1,1} + "Total energy transmittances if sunblind is closed" + annotation(Dialog(tab="Windows",group="Shading",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.RadiantEnergyFluenceRate Imax=100 + "Intensity at which the sunblind closes" + annotation(Dialog(tab="Windows",group="Shading",enable = if withWindows and withOuterwalls then true else false)); + parameter Integer n=4 "Number of orientations (without ground)" annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Real weightfactorswall[n]={0.5,0.2,0.2,0.1} + "Weight factors of the walls" annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Real weightfactorswindow[n]={0,0,0,0} + "Weight factors of the windows" annotation(Dialog(tab="Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Real weightfactorground=0 + "Weight factor of the earth (0 if not considered)" annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Temp_K temperatureground=284.15 + "Temperature of the earth" annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Emissivity epsw=0.95 + "Emissivity of the windows" + annotation(Dialog(tab="Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.TransmissionCoefficient g=0.7 + "Total energy transmittance" + annotation(Dialog(tab="Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.Volume Vair=52.5 + "Volume of the air in the zone" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.Density rhoair=1.19 "Density of the air" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.SpecificHeatCapacity cair=1007 + "Heat capacity of the air" + annotation(Dialog(tab="Room air")); + + SolarRadWeightedSum solRadWeightedSum(n=n, weightfactors=Aw) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{0,56},{28,86}}))); + Components.Weather.Sunblind sunblind( + Imax=Imax, + n=n, + gsunblind=gsunblind) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-26,62},{-6,82}}))); + Utilities.Interfaces.SolarRad_in solarRad_in[n] if withOuterwalls + annotation (Placement(transformation(extent={{-100,60},{-80,80}}), + iconTransformation(extent={{-94,50},{-60,80}}))); + Modelica.Blocks.Interfaces.RealInput weather[3] if withOuterwalls + "[1]: Air temperature
[2]: Horizontal radiation of sky
[3]: Horizontal radiation of earth" + annotation (Placement(transformation(extent={{-120,-10},{-80,30}}), + iconTransformation(extent={{-90,4},{-60,34}}))); + Modelica.Blocks.Interfaces.RealInput ventilationRate annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-28,-90}), iconTransformation( + extent={{-14,-14},{14,14}}, + rotation=90, + origin={-40,-86}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a internalGainsConv + annotation (Placement(transformation(extent={{30,-100},{50,-80}}), + iconTransformation(extent={{30,-100},{50,-80}}))); + Utilities.Interfaces.Star internalGainsRad annotation (Placement( + transformation(extent={{70,-100},{90,-80}}), iconTransformation( + extent={{70,-100},{90,-80}}))); + EqAirTemp eqAirTemp( + alphaowo=alphaowo, + aowo=aowo, + wf_wall=weightfactorswall, + wf_win=weightfactorswindow, + wf_ground=weightfactorground, + T_ground=temperatureground, + n=n) if withOuterwalls + annotation (Placement(transformation(extent={{-46,0},{-26,20}}))); + ReducedOrderModel reducedOrderModel( + epsw=epsw, + g=g, + RRest=RRest, + R1o=R1o, + C1o=C1o, + Ao=Ao, + R1i=R1i, + C1i=C1i, + Ai=Ai, + T0all=T0all, + Vair=Vair, + alphaiwi=alphaiwi, + alphaowi=alphaowi, + rhoair=rhoair, + cair=cair, + epsi=epsi, + epso=epso, + Aw=sum(Aw), + withInnerwalls=withInnerwalls, + withWindows=withWindows, + withOuterwalls=withOuterwalls, + splitfac=splitfac) + annotation (Placement(transformation(extent={{18,-10},{76,46}}))); + Modelica.Blocks.Interfaces.RealInput ventilationTemperature annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-100,-50}), iconTransformation( + extent={{-15,-15},{15,15}}, + rotation=0, + origin={-76,-40}))); + equation + if withWindows and withOuterwalls then + connect(sunblind.sunblindonoff, eqAirTemp.sunblindsig) annotation (Line( + points={{-16,63},{-26,63},{-26,18},{-36,18}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(solRadWeightedSum.solarRad_out, reducedOrderModel.solarRad_in) annotation ( + Line( + points={{26.6,71},{26.6,52.25},{23.51,52.25},{23.51,33.12}}, + color={255,128,0}, + smooth=Smooth.None)); + end if; + if withOuterwalls then + connect(weather, eqAirTemp.weatherData) annotation (Line( + points={{-100,10},{-44,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(solarRad_in, eqAirTemp.solarRad_in) annotation (Line( + points={{-90,70},{-68,70},{-68,15.6},{-44.5,15.6}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(eqAirTemp.equalAirTemp, reducedOrderModel.equalAirTemp) + annotation (Line( + points={{-28,10},{-2,10},{-2,19.12},{23.8,19.12}}, + color={191,0,0}, + smooth=Smooth.None)); + end if; + connect(internalGainsConv, reducedOrderModel.internalGainsConv) annotation (Line( + points={{40,-90},{40,-49},{52.8,-49},{52.8,-4.4}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(internalGainsRad, reducedOrderModel.internalGainsRad) annotation (Line( + points={{80,-90},{80,-4.4},{69.33,-4.4}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(ventilationRate, reducedOrderModel.ventilationRate) + annotation (Line( + points={{-28,-90},{4,-90},{4,-4.4},{35.4,-4.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(ventilationTemperature, reducedOrderModel.ventilationTemperature) annotation ( + Line( + points={{-100,-50},{-12,-50},{-12,4.56},{23.8,4.56}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, solRadWeightedSum.solarRad_in) annotation (Line( + points={{-7,73},{-2.5,73},{-2.5,71},{1.4,71}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(solarRad_in, sunblind.Rad_In) annotation (Line( + points={{-90,70},{-58,70},{-58,73},{-25,73}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics), + Icon(graphics={ + Rectangle( + extent={{-60,80},{100,-58}}, + lineColor={0,128,255}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-58},{100,-70}}, + lineColor={0,127,0}, + lineThickness=1, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{14,36},{100,-58}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{100,36},{-2,36},{100,60},{100,36}}, + lineColor={255,85,85}, + lineThickness=1, + smooth=Smooth.None, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{64,12},{80,0}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{64,0},{80,-12}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{48,0},{64,-12}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{48,12},{64,0}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-50,72},{-22,44}}, + lineColor={255,255,0}, + lineThickness=1, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-18,54},{-6,44}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-26,44},{-18,32}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-36,40},{-36,26}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-48,-58},{-50,-52},{-46,-48},{-48,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-40,-58},{-42,-52},{-38,-48},{-40,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-32,-58},{-34,-52},{-30,-48},{-32,-42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-50,-44},{-48,-40},{-46,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-42,-44},{-40,-40},{-38,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-34,-44},{-32,-40},{-30,-44}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier)}), + experiment(StopTime=864000, Interval=3599), + experimentSetupOutput, + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Concept

+

The concept is desrcibed in VDI 6007 and in the submodels. Basically, ThermalZonePhysics is thought for the easy computation of room temperatures and heat load profiles for thermal zones, e.g. buildings. To reduce computation time, number of parameters and work, some simplifications are implemented into the model (only one air node, ideal building technology, one outer wall, one inner wall). See VDI 6007 for more information.

+


References

+ +

Example Results

+

See Validation for some results.

+", revisions=" +

+")); + end ThermalZonePhysics; + + end BaseClasses; + + package Validation "Contains Test Cases from VDI 6007 Validation" + package VDI6007 + extends Modelica.Icons.ExamplesPackage; + model TestCase_1 + extends Modelica.Icons.Example; + + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T= + 295.15) + annotation (Placement(transformation(extent={{-34,10},{-54,30}}))); + Modelica.Blocks.Sources.Constant const(k=22) + annotation (Placement(transformation(extent={{-54,-18},{-34,2}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{-14,-50},{6,-30}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machines + annotation (Placement(transformation(extent={{22,-78},{42,-58}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + Ao=10.5, + Aw=0.000000001, + Ai=75.5, + epsi=1, + epso=1, + epsw=1, + g=1, + alphaiwi=2.2, + alphaowi=2.7, + splitfac=0.09, + R1i=0.000595515, + C1i=1.48216e+007, + withWindows=false, + RRest=0.042748777, + R1o=0.004366222, + C1o=1.60085e+006) + annotation (Placement(transformation(extent={{0,0},{34,34}}))); + Modelica.Blocks.Sources.CombiTimeTable table_machines( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0; 3600,0; 7200,0; 10800,0; 14400,0; 18000,0; 21600,0; 21600,1000; + 25200,1000; 28800,1000; 32400,1000; 36000,1000; 39600,1000; 43200,1000; + 46800,1000; 50400,1000; 54000,1000; 57600,1000; 61200,1000; 64800,1000; + 64800,0; 68400,0; 72000,0; 75600,0; 79200,0; 82800,0; 86400,0], + columns={2}) + annotation (Placement(transformation(extent={{-8,-83},{6,-69}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,22; 7200,22; 10800,22; 14400,22; 18000,22; 21600,22; 25200, + 27.7; 28800,27.9; 32400,28.1; 36000,28.4; 39600,28.6; 43200,28.8; + 46800,29; 50400,29.2; 54000,29.4; 57600,29.6; 61200,29.8; 64800,30; + 68400,24.5; 72000,24.5; 75600,24.5; 79200,24.5; 82800,24.5; 86400, + 24.5; 781200,37.7; 784800,37.6; 788400,37.5; 792000,37.5; 795600,37.4; + 799200,37.3; 802800,43; 806400,43.2; 810000,43.3; 813600,43.5; 817200, + 43.6; 820800,43.8; 824400,43.9; 828000,44.1; 831600,44.3; 835200,44.4; + 838800,44.6; 842400,44.7; 846000,39.1; 849600,39.1; 853200,39; 856800, + 38.9; 860400,38.9; 864000,38.8; 5101200,49.9; 5104800,49.8; 5108400, + 49.7; 5112000,49.6; 5115600,49.4; 5119200,49.3; 5122800,54.9; 5126400, + 55.1; 5130000,55.2; 5133600,55.3; 5137200,55.4; 5140800,55.5; 5144400, + 55.6; 5148000,55.7; 5151600,55.8; 5155200,55.9; 5158800,56.1; 5162400, + 56.2; 5166000,50.6; 5169600,50.4; 5173200,50.3; 5176800,50.2; 5180400, + 50.1; 5184000,50], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{80,80},{100,99}}))); + equation + connect(table_machines.y[1],machines.Q_flow) annotation (Line( + points={{6.7,-76},{14,-76},{14,-68},{22,-68}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(fixedTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{-54,20},{-14,20},{-14,17.68},{3.4,17.68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(const.y, reducedModel.ventilationTemperature) annotation (Line( + points={{-33,-8},{-18,-8},{-18,8.84},{3.4,8.84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, reducedModel.ventilationRate) annotation (Line( + points={{7,-40},{10.2,-40},{10.2,3.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(machines.port, reducedModel.internalGainsConv) annotation (Line( + points={{42,-68},{20.4,-68},{20.4,3.4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics), + experiment(StopTime=3.1536e+007, Interval=3600), + experimentSetupOutput(events=false), Documentation(revisions=" +

+



+", info=" +

Test Case 1 of the VDI6007: Calculation of the reaction indoor temperature to a convective heat source for Type room S

+

+

All values are given in the VDI6007.

+

Same Test Case exists in VDI 6020.

+")); + end TestCase_1; + + model TestCase_2 + extends Modelica.Icons.Example; + + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T= + 295.15) + annotation (Placement(transformation(extent={{-24,20},{-44,40}}))); + Modelica.Blocks.Sources.Constant const(k=22) + annotation (Placement(transformation(extent={{-44,-8},{-24,12}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{-4,-40},{16,-20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machines + annotation (Placement(transformation(extent={{48,-68},{68,-48}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + Aw=0.000000001, + Ai=75.5, + epsi=1, + epso=1, + epsw=1, + g=1, + alphaiwi=2.2, + alphaowi=2.7, + splitfac=0.09, + R1i=0.000595515, + C1i=1.48216e+007, + withWindows=false, + RRest=0.042748777, + R1o=0.004366222, + C1o=1.60085e+006, + Ao=10.5) + annotation (Placement(transformation(extent={{12,10},{46,44}}))); + Modelica.Blocks.Sources.CombiTimeTable table_machines( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0; 3600,0; 7200,0; 10800,0; 14400,0; 18000,0; 21600,0; 21600,1000; + 25200,1000; 28800,1000; 32400,1000; 36000,1000; 39600,1000; 43200,1000; + 46800,1000; 50400,1000; 54000,1000; 57600,1000; 61200,1000; 64800,1000; + 64800,0; 68400,0; 72000,0; 75600,0; 79200,0; 82800,0; 86400,0], + columns={2}) + annotation (Placement(transformation(extent={{2,-73},{16,-59}}))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx(A=2, eps=1) + annotation (Placement(transformation(extent={{40,-42},{60,-22}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,22; 7200,22; 10800,22; 14400,22; 18000,22; 21600,22; 25200, + 22.6; 28800,22.9; 32400,23.1; 36000,23.3; 39600,23.5; 43200,23.7; + 46800,23.9; 50400,24.1; 54000,24.3; 57600,24.6; 61200,24.8; 64800,25; + 68400,24.5; 72000,24.5; 75600,24.5; 79200,24.5; 82800,24.5; 86400, + 24.5; 781200,37.7; 784800,37.7; 788400,37.6; 792000,37.5; 795600,37.5; + 799200,37.4; 802800,38; 806400,38.2; 810000,38.3; 813600,38.5; 817200, + 38.6; 820800,38.8; 824400,38.9; 828000,39.1; 831600,39.2; 835200,39.4; + 838800,39.5; 842400,39.7; 846000,39.2; 849600,39.1; 853200,39.1; + 856800,39; 860400,38.9; 864000,38.9; 5101200,50; 5104800,49.9; + 5108400,49.8; 5112000,49.7; 5115600,49.6; 5119200,49.5; 5122800,50; + 5126400,50.1; 5130000,50.2; 5133600,50.3; 5137200,50.5; 5140800,50.6; + 5144400,50.7; 5148000,50.8; 5151600,50.9; 5155200,51; 5158800,51.1; + 5162400,51.2; 5166000,50.7; 5169600,50.6; 5173200,50.4; 5176800,50.3; + 5180400,50.2; 5184000,50.1], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{80,80},{100,99}}))); + equation + connect(machines.port, twoStar_RadEx.Therm) annotation (Line( + points={{68,-58},{40.8,-58},{40.8,-32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(table_machines.y[1],machines.Q_flow) annotation (Line( + points={{16.7,-66},{32,-66},{32,-58},{48,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(fixedTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{-44,30},{-6,30},{-6,27.68},{15.4,27.68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(const.y, reducedModel.ventilationTemperature) annotation (Line( + points={{-23,2},{-4,2},{-4,18.84},{15.4,18.84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, reducedModel.ventilationRate) annotation (Line( + points={{17,-30},{20,-30},{20,13.4},{22.2,13.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(twoStar_RadEx.Therm, reducedModel.internalGainsConv) annotation ( + Line( + points={{40.8,-32},{36,-32},{36,13.4},{32.4,13.4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), + graphics), + experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false), + Icon(graphics), + Documentation(info=" +

Test Case 2 of the VDI6007: Calculation of the reaction indoor temperature to a radiant heat source for Type room S

+

+

All values are given in the VDI6007.

+

Same Test Case exists in VDI 6020.

+", revisions=" +

February 2014, by Peter Remmen:

Implemented

+")); + end TestCase_2; + + model TestCase_3 + extends Modelica.Icons.Example; + + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T= + 295.15) + annotation (Placement(transformation(extent={{-24,20},{-44,40}}))); + Modelica.Blocks.Sources.Constant const(k=22) + annotation (Placement(transformation(extent={{-44,-8},{-24,12}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{-4,-40},{16,-20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machines + annotation (Placement(transformation(extent={{32,-68},{52,-48}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + Ao=10.5, + Aw=0.000000001, + Ai=75.5, + epsi=1, + epso=1, + epsw=1, + g=1, + alphaiwi=2.2, + alphaowi=2.7, + splitfac=0.09, + withWindows=false, + C1o=4.78618e+004, + R1i=0.003237138, + C1i=7.297100e+006, + RRest=0.043120170, + R1o=0.004047899) + annotation (Placement(transformation(extent={{12,10},{46,44}}))); + Modelica.Blocks.Sources.CombiTimeTable table_machines( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0; 3600,0; 7200,0; 10800,0; 14400,0; 18000,0; 21600,0; 21600,1000; + 25200,1000; 28800,1000; 32400,1000; 36000,1000; 39600,1000; 43200,1000; + 46800,1000; 50400,1000; 54000,1000; 57600,1000; 61200,1000; 64800,1000; + 64800,0; 68400,0; 72000,0; 75600,0; 79200,0; 82800,0; 86400,0], + columns={2}) + annotation (Placement(transformation(extent={{2,-73},{16,-59}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,22; 7200,22; 10800,22; 14400,22; 18000,22; 21600,22; 25200, + 30.2; 28800,30.8; 32400,31.2; 36000,31.6; 39600,32; 43200,32.4; 46800, + 32.8; 50400,33.2; 54000,33.6; 57600,34; 61200,34.3; 64800,34.7; 68400, + 26.9; 72000,26.7; 75600,26.7; 79200,26.6; 82800,26.6; 86400,26.6; + 781200,43.7; 784800,43.5; 788400,43.4; 792000,43.2; 795600,43; 799200, + 42.9; 802800,50.9; 806400,51.3; 810000,51.6; 813600,51.8; 817200,52.1; + 820800,52.3; 824400,52.5; 828000,52.8; 831600,53; 835200,53.3; 838800, + 53.5; 842400,53.7; 846000,45.8; 849600,45.4; 853200,45.3; 856800,45.1; + 860400,44.9; 864000,44.7; 5101200,48.7; 5104800,48.5; 5108400,48.3; + 5112000,48.1; 5115600,47.9; 5119200,47.7; 5122800,55.7; 5126400,56; + 5130000,56.3; 5133600,56.5; 5137200,56.7; 5140800,56.9; 5144400,57.1; + 5148000,57.3; 5151600,57.5; 5155200,57.7; 5158800,57.9; 5162400,58.1; + 5166000,50.1; 5169600,49.8; 5173200,49.5; 5176800,49.3; 5180400,49.1; + 5184000,48.9], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{62,76},{82,95}}))); + equation + connect(table_machines.y[1],machines.Q_flow) annotation (Line( + points={{16.7,-66},{24,-66},{24,-58},{32,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(fixedTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{-44,30},{-4,30},{-4,27.68},{15.4,27.68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(const.y, reducedModel.ventilationTemperature) annotation (Line( + points={{-23,2},{-4,2},{-4,18.84},{15.4,18.84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, reducedModel.ventilationRate) annotation (Line( + points={{17,-30},{20,-30},{20,13.4},{22.2,13.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(machines.port, reducedModel.internalGainsConv) annotation (Line( + points={{52,-58},{32.4,-58},{32.4,13.4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 3 of the VDI6007: Calculation of the reaction indoor temperature to a convective heat source for Type room L

+

+

All values are given in the VDI 6007.

+

Same Test Case exists in VDI 6020.

+"), Icon(graphics), + experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics)); + end TestCase_3; + + model TestCase_4 + extends Modelica.Icons.Example; + + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T= + 295.15) + annotation (Placement(transformation(extent={{-26,20},{-46,40}}))); + Modelica.Blocks.Sources.Constant const(k=22) + annotation (Placement(transformation(extent={{-46,-8},{-26,12}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{-6,-40},{14,-20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machines + annotation (Placement(transformation(extent={{46,-68},{66,-48}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + Ao=10.5, + Aw=0.000000001, + Ai=75.5, + epsi=1, + epso=1, + epsw=1, + g=1, + alphaiwi=2.2, + alphaowi=2.7, + splitfac=0.09, + withWindows=false, + RRest=0.043120170, + R1o=0.004047899, + C1o=4.78618e+004, + R1i=0.003237138, + C1i=7.297100e+006) + annotation (Placement(transformation(extent={{10,10},{44,44}}))); + Modelica.Blocks.Sources.CombiTimeTable table_machines( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0; 3600,0; 7200,0; 10800,0; 14400,0; 18000,0; 21600,0; 21600,1000; + 25200,1000; 28800,1000; 32400,1000; 36000,1000; 39600,1000; 43200,1000; + 46800,1000; 50400,1000; 54000,1000; 57600,1000; 61200,1000; 64800,1000; + 64800,0; 68400,0; 72000,0; 75600,0; 79200,0; 82800,0; 86400,0], + columns={2}) + annotation (Placement(transformation(extent={{0,-73},{14,-59}}))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx(A=2, eps=1) + annotation (Placement(transformation(extent={{32,-44},{52,-24}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,22; 7200,22; 10800,22; 14400,22; 18000,22; 21600,22; 25200, + 25.1; 28800,25.7; 32400,26.1; 36000,26.5; 39600,26.9; 43200,27.3; + 46800,27.7; 50400,28.1; 54000,28.5; 57600,28.9; 61200,29.3; 64800, + 29.7; 68400,26.9; 72000,26.7; 75600,26.7; 79200,26.7; 82800,26.6; + 86400,26.6; 781200,43.8; 784800,43.6; 788400,43.5; 792000,43.3; + 795600,43.1; 799200,43; 802800,45.9; 806400,46.3; 810000,46.6; 813600, + 46.8; 817200,47.1; 820800,47.3; 824400,47.6; 828000,47.8; 831600,48.1; + 835200,48.3; 838800,48.5; 842400,48.8; 846000,45.9; 849600,45.6; + 853200,45.4; 856800,45.2; 860400,45.1; 864000,44.9; 5101200,48.8; + 5104800,48.6; 5108400,48.4; 5112000,48.2; 5115600,48; 5119200,47.8; + 5122800,50.7; 5126400,51.1; 5130000,51.3; 5133600,51.5; 5137200,51.7; + 5140800,51.9; 5144400,52.1; 5148000,52.4; 5151600,52.6; 5155200,52.8; + 5158800,53; 5162400,53.2; 5166000,50.2; 5169600,49.9; 5173200,49.7; + 5176800,49.5; 5180400,49.2; 5184000,49], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{78,78},{98,97}}))); + equation + connect(machines.port, twoStar_RadEx.Therm) annotation (Line( + points={{66,-58},{32.8,-58},{32.8,-34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(table_machines.y[1],machines.Q_flow) annotation (Line( + points={{14.7,-66},{30,-66},{30,-58},{46,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(fixedTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{-46,30},{-8,30},{-8,27.68},{13.4,27.68}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(const.y, reducedModel.ventilationTemperature) annotation (Line( + points={{-25,2},{-8,2},{-8,18.84},{13.4,18.84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, reducedModel.ventilationRate) annotation (Line( + points={{15,-30},{18,-30},{18,13.4},{20.2,13.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(twoStar_RadEx.Star, reducedModel.internalGainsRad) annotation ( + Line( + points={{51.1,-34},{58,-34},{58,-10},{40.09,-10},{40.09,13.4}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation (Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 4 of the VDI6007: Calculation of the reaction indoor temperature to a radiant heat source for Type room L

+

+

All values are given in the VDI6007.

+"),Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}),graphics), + Icon(graphics), + experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false)); + end TestCase_4; + + model TestCase_5 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{30,-4},{40,6}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{6,-4},{16,6}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{42,-100},{62,-80}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Konvektion + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Konvektion + annotation (Placement(transformation(extent={{10,-72},{30,-52}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Strahlung + annotation (Placement(transformation(extent={{10,-98},{30,-78}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600,0, + 0; 25200,0,0; 25200,160,200; 28800,160,200; 32400,160,200; 36000,160, + 200; 39600,160,200; 43200,160,200; 46800,160,200; 50400,160,200; 54000, + 160,200; 57600,160,200; 61200,160,200; 61200,0,0; 64800,0,0; 72000,0,0; + 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-58,-80},{-38,-60}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + C1i=1.48216e+007, + C1o=1.60085e+006, + alphaiwi=2.2, + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + Aw=7, + splitfac=0.09, + R1i=0.000595515, + Ai=75.5, + epsw=1, + g=1, + RRest=0.042748777, + R1o=0.004366222, + Ao=10.5) + annotation (Placement(transformation(extent={{48,26},{82,66}}))); + + Modelica.Blocks.Sources.CombiTimeTable Temperaturverlauf( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3,4}, + table=[0,291.95,0,0; 3600,291.95,0,0; 3600,290.25,0,0; 7200,290.25,0,0; + 7200,289.65,0,0; 10800,289.65,0,0; 10800,289.25,0,0; 14400,289.25,0,0; + 14400,289.65,0,0; 18000,289.65,0,0; 18000,290.95,0,0; 21600,290.95,0,0; + 21600,293.45,0,0; 25200,293.45,0,0; 25200,295.95,0,0; 28800,295.95,0,0; + 28800,297.95,0,0; 32400,297.95,0,0; 32400,299.85,0,0; 36000,299.85,0,0; + 36000,301.25,0,0; 39600,301.25,0,0; 39600,302.15,0,0; 43200,302.15,0,0; + 43200,302.85,0,0; 46800,302.85,0,0; 46800,303.55,0,0; 50400,303.55,0,0; + 50400,304.05,0,0; 54000,304.05,0,0; 54000,304.15,0,0; 57600,304.15,0,0; + 57600,303.95,0,0; 61200,303.95,0,0; 61200,303.25,0,0; 64800,303.25,0,0; + 64800,302.05,0,0; 68400,302.05,0,0; 68400,300.15,0,0; 72000,300.15,0,0; + 72000,297.85,0,0; 75600,297.85,0,0; 75600,296.05,0,0; 79200,296.05,0,0; + 79200,295.05,0,0; 82800,295.05,0,0; 82800,294.05,0,0; 86400,294.05,0,0]) + annotation (Placement(transformation(extent={{-62,14},{-42,34}}))); + Modelica.Blocks.Sources.CombiTimeTable Strahlung_Fenster( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + table=[0,0,0,0,0,0.0; 3600,0,0,0,0,0.0; 10800,0,0,0,0,0.0; 14400,0,0,0,0, + 0.0; 14400,0,0,17,0,0.0; 18000,0,0,17,0,0.0; 18000,0,0,38,0,0.0; + 21600,0,0,38,0,0.0; 21600,0,0,59,0,0.0; 25200,0,0,59,0,0.0; 25200,0,0, + 98,0,0.0; 28800,0,0,98,0,0.0; 28800,0,0,186,0,0.0; 32400,0,0,186,0, + 0.0; 32400,0,0,287,0,0.0; 36000,0,0,287,0,0.0; 36000,0,0,359,0,0.0; + 39600,0,0,359,0,0.0; 39600,0,0,385,0,0.0; 43200,0,0,385,0,0.0; 43200, + 0,0,359,0,0.0; 46800,0,0,359,0,0.0; 46800,0,0,287,0,0.0; 50400,0,0, + 287,0,0.0; 50400,0,0,186,0,0.0; 54000,0,0,186,0,0.0; 54000,0,0,98,0, + 0.0; 57600,0,0,98,0,0.0; 57600,0,0,59,0,0.0; 61200,0,0,59,0,0.0; + 61200,0,0,38,0,0.0; 64800,0,0,38,0,0.0; 64800,0,0,17,0,0.0; 68400,0,0, + 17,0,0.0; 68400,0,0,0,0,0.0; 72000,0,0,0,0,0.0; 82800,0,0,0,0,0.0; + 86400,0,0,0,0,0.0], + columns={2,3,4,5,6}) + annotation (Placement(transformation(extent={{-96,68},{-76,88}}))); + Utilities.Sources.PrescribedSolarRad Quelle_Fenster(n=5) + annotation (Placement(transformation(extent={{-60,68},{-40,88}}))); + Components.Weather.Sunblind sunblind(n=5, gsunblind={0,0,0.15,0,0}) + annotation (Placement(transformation(extent={{-30,67},{-10,87}}))); + Building.LowOrder.BaseClasses.SolarRadWeightedSum rad_weighted_sum( + n=5, weightfactors={0,0,7,0,0}) + annotation (Placement(transformation(extent={{-2,68},{18,88}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature varTemp + annotation (Placement(transformation(extent={{-8,22},{12,42}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[3600,22; 7200,22; 10800,21.9; 14400,21.9; 18000,22; 21600,22.2; + 25200,22.4; 28800,24.4; 32400,24.1; 36000,24.4; 39600,24.7; 43200, + 24.9; 46800,25.1; 50400,25.2; 54000,25.3; 57600,26; 61200,25.9; 64800, + 24.3; 68400,24.2; 72000,24.1; 75600,24.1; 79200,24.1; 82800,24.1; + 86400,24.1; 781200,34.9; 784800,34.8; 788400,34.7; 792000,34.6; + 795600,34.7; 799200,34.8; 802800,34.9; 806400,36.9; 810000,36.6; + 813600,36.8; 817200,37; 820800,37.2; 824400,37.3; 828000,37.4; 831600, + 37.4; 835200,38.1; 838800,38; 842400,36.4; 846000,36.2; 849600,36.1; + 853200,36.1; 856800,36; 860400,35.9; 864000,35.9; 5101200,44.9; + 5104800,44.8; 5108400,44.7; 5112000,44.6; 5115600,44.6; 5119200,44.6; + 5122800,44.8; 5126400,46.7; 5130000,46.3; 5133600,46.5; 5137200,46.7; + 5140800,46.8; 5144400,46.9; 5148000,47; 5151600,47; 5155200,47.6; + 5158800,47.5; 5162400,45.8; 5166000,45.6; 5169600,45.4; 5173200,45.4; + 5176800,45.3; 5180400,45.2; 5184000,45.1], + columns={2}, + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{78,80},{98,99}}))); + equation + connect(Personen_Strahlung.port, Konvektiv_Strahlung.Therm) annotation ( + Line( + points={{30,-88},{36,-88},{36,-90},{42.8,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Konvektion.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-62},{10,-62}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Strahlung.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-88},{10,-88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Konvektion.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-40},{40,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Temperaturverlauf.y[1], varTemp.T) annotation (Line( + points={{-41,24},{-26,24},{-26,32},{-10,32}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Fenster.y, Quelle_Fenster.u) annotation (Line( + points={{-75,78},{-60,78}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Quelle_Fenster.solarRad_out, sunblind.Rad_In) annotation (Line( + points={{-41,78},{-29,78}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(rad_weighted_sum.solarRad_out, reducedModel.solarRad_in) + annotation (Line( + points={{17,78},{34,78},{34,56.8},{51.23,56.8}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(varTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{12,32},{22,32},{22,46.8},{51.4,46.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.ventilationTemperature) + annotation (Line( + points={{16.5,1},{16.5,18.5},{51.4,18.5},{51.4,36.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.ventilationRate) annotation (Line( + points={{40.5,1},{40.5,14.5},{58.2,14.5},{58.2,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Personen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{30,-62},{10,-62},{10,-20},{68.4,-20},{68.4,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Maschinen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{60,-40},{40,-40},{40,-20},{68.4,-20},{68.4,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{61.1,-90},{70,-90},{70,30},{78.09,30}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, rad_weighted_sum.solarRad_in) annotation (Line( + points={{-11,78},{-1,78}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics), + experiment( + StartTime=3600, + StopTime=5.184e+006, + Interval=3600, + __Dymola_Algorithm="Lsodar"), + __Dymola_experimentSetupOutput(events=false), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 5 of the VDI6007: Calculation of the reaction indoor temperature to radiant and convective heat source for Type room S

+

+

All values are given in the VDI6007.

+"),Icon(graphics)); + end TestCase_5; + + model TestCase_6 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{30,-4},{40,6}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{6,-4},{16,6}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{40,-102},{60,-82}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Strahlung + annotation (Placement(transformation(extent={{-4,-100},{22,-78}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600, + 0,0; 25200,0,1000; 28800,0,1000; 32400,0,1000; 36000,0,1000; 39600,0, + 1000; 43200,0,1000; 46800,0,1000; 50400,0,1000; 54000,0,1000; 57600,0, + 1000; 61200,0,1000; 64800,0,1000; 68400,0,0; 72000,0,0; 75600,0,0; + 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Aussentemperatur( + T=295.15) + annotation (Placement(transformation(extent={{-4,39},{-24,59}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + C1i=1.48216e+007, + Aw=7, + g=0.15, + C1o=1.60085e+006, + alphaiwi=2.2, + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + R1i=0.000595515, + Ai=75.5, + RRest=0.042748777, + R1o=0.004366222, + Ao=10.5, + withWindows=false) + annotation (Placement(transformation(extent={{54,26},{88,66}}))); + Modelica.Blocks.Sources.CombiTimeTable Solltemperaturen( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2}, + table=[0,295.1; 3600,295.1; 7200,295.1; 10800,295.1; 14400,295.1; + 18000,295.1; 21600,295.1; 25200,300.1; 28800,300.1; 32400, + 300.1; 36000,300.1; 39600,300.1; 43200,300.1; 46800,300.1; + 50400,300.1; 54000,300.1; 57600,300.1; 61200,300.1; 64800, + 300.1; 68400,295.1; 72000,295.1; 75600,295.1; 79200,295.1; + 82800,295.1; 86400,295.1]) + annotation (Placement(transformation(extent={{-62,-38},{-42,-18}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2,3}, + table=[3600,22,0; 7200,22,0; 10800,22,0; 14400,22,0; 18000,22,0; 21600,22, + 0; 25200,27,-764; 28800,27,-696; 32400,27,-632; 36000,27,-570; 39600, + 27,-511; 43200,27,-455; 46800,27,-402; 50400,27,-351; 54000,27,-302; + 57600,27,-255; 61200,27,-210; 64800,27,-167; 68400,22,638; 72000,22, + 610; 75600,22,583; 79200,22,557; 82800,22,533; 86400,22,511; 781200, + 22,774; 784800,22,742; 788400,22,711; 792000,22,682; 795600,22,654; + 799200,22,627; 802800,27,-163; 806400,27,-120; 810000,27,-79; 813600, + 27,-40; 817200,27,-2; 820800,27,33; 824400,27,67; 828000,27,99; + 831600,27,130; 835200,27,159; 838800,27,187; 842400,27,214; 846000,22, + 1004; 849600,22,960; 853200,22,919; 856800,22,880; 860400,22,843; + 864000,22,808; 5101200,22,774; 5104800,22,742; 5108400,22,711; + 5112000,22,682; 5115600,22,654; 5119200,22,627; 5122800,27,-163; + 5126400,27,-120; 5130000,27,-78; 5133600,27,-39; 5137200,27,-2; + 5140800,27,33; 5144400,27,67; 5148000,27,99; 5151600,27,130; 5155200, + 27,159; 5158800,27,187; 5162400,27,214; 5166000,22,1004; 5169600,22, + 960; 5173200,22,919; 5176800,22,880; 5180400,22,843; 5184000,22,808], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{80,78},{100,97}}))); + Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor heatFlowSensor + annotation (Placement(transformation(extent={{24,-38},{44,-18}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + prescribedTemperature annotation (Placement(transformation(extent= + {{-6,-38},{14,-18}}))); + equation + connect(Maschinen_Strahlung.port, Konvektiv_Strahlung.Therm) + annotation (Line( + points={{22,-89},{28,-89},{28,-92},{40.8,-92}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Strahlung.Q_flow) annotation (Line( + points={{-39,-90},{-14,-90},{-14,-89},{-4,-89}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.ventilationTemperature) + annotation (Line( + points={{16.5,1},{21.25,1},{21.25,36.4},{57.4,36.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.ventilationRate) annotation (Line( + points={{40.5,1},{40.5,13.5},{64.2,13.5},{64.2,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{59.1,-92},{84.09,-92},{84.09,30}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Aussentemperatur.port, reducedModel.equalAirTemp) annotation ( + Line( + points={{-24,49},{26.5,49},{26.5,46.8},{57.4,46.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatFlowSensor.port_a, prescribedTemperature.port) + annotation (Line( + points={{24,-28},{14,-28}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Solltemperaturen.y[1], prescribedTemperature.T) annotation ( + Line( + points={{-41,-28},{-8,-28}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heatFlowSensor.port_b, reducedModel.internalGainsConv) + annotation (Line( + points={{44,-28},{74.4,-28},{74.4,30}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics), + experiment( + StopTime=5.184e+006, + Interval=3600, + __Dymola_Algorithm="Lsodar"), + __Dymola_experimentSetupOutput(events=false), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 6 of the VDI6007: Load calculation in compliance with the desired values of the indoor temperature and a setpoint for the type space S:

+

+

All values are given in the VDI6007.

+"),Icon(graphics)); + end TestCase_6; + + model TestCase_7 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{40,-16},{50,-6}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{6,-4},{16,6}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{40,-102},{60,-82}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Strahlung + annotation (Placement(transformation(extent={{-4,-100},{22,-78}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600, + 0,0; 25200,0,1000; 28800,0,1000; 32400,0,1000; 36000,0,1000; 39600,0, + 1000; 43200,0,1000; 46800,0,1000; 50400,0,1000; 54000,0,1000; 57600,0, + 1000; 61200,0,1000; 64800,0,1000; 68400,0,0; 72000,0,0; 75600,0,0; + 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Aussentemperatur( + T=295.15) + annotation (Placement(transformation(extent={{-4,39},{-24,59}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + C1i=1.48216e+007, + Aw=7, + g=0.15, + C1o=1.60085e+006, + alphaiwi=2.2, + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + withWindows=false, + R1i=0.000595515, + Ai=75.5, + RRest=0.042748777, + R1o=0.004366222, + Ao=10.5) + annotation (Placement(transformation(extent={{44,38},{78,78}}))); + Utilities.Sources.HeaterCooler.IdealHeaterCoolerVar1 + idealHeaterCoolerVar1_1( + Q_flow_heat=1, + Q_flow_cooler=1, + h_cooler=0, + TN_heater=1, + TN_cooler=1, + h_heater=500, + l_cooler=-500, + KR_heater=1000, + KR_cooler=1000) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-26,-20}))); + Modelica.Blocks.Sources.CombiTimeTable Solltemperaturen( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3}, + table=[0,295.15,295.2; 3600,295.1,295.2; 7200,295.1,295.2; 10800,295.1, + 295.2; 14400,295.1,295.2; 18000,295.1,295.2; 21600,295.1,295.2; 25200, + 300.1,300.2; 28800,300.1,300.2; 32400,300.1,300.2; 36000,300.1,300.2; + 39600,300.1,300.2; 43200,300.1,300.2; 46800,300.1,300.2; 50400,300.1, + 300.2; 54000,300.1,300.2; 57600,300.1,300.2; 61200,300.1,300.2; 64800, + 300.1,300.2; 68400,295.1,295.2; 72000,295.1,295.2; 75600,295.1,295.2; + 79200,295.1,295.2; 82800,295.1,295.2; 86400,295.1,295.2]) + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2,3}, + table=[3600,22,0; 7200,22,0; 10800,22,0; 14400,22,0; 18000,22,0; 21600,22, + 0; 25200,25.5,-500; 28800,25.8,-500; 32400,26.1,-500; 36000,26.5,-500; + 39600,26.8,-500; 43200,27,-481; 46800,27,-426; 50400,27,-374; 54000, + 27,-324; 57600,27,-276; 61200,27,-230; 64800,27,-186; 68400,22.7,500; + 72000,22.6,500; 75600,22.4,500; 79200,22.3,500; 82800,22.2,500; 86400, + 22,500; 781200,25.1,500; 784800,25,500; 788400,24.8,500; 792000,24.7, + 500; 795600,24.6,500; 799200,24.4,500; 802800,27,142; 806400,27,172; + 810000,27,201; 813600,27,228; 817200,27,254; 820800,27,278; 824400,27, + 302; 828000,27,324; 831600,27,345; 835200,27,366; 838800,27,385; + 842400,27,404; 846000,25.9,500; 849600,25.8,500; 853200,25.6,500; + 856800,25.5,500; 860400,25.4,500; 864000,25.2,500; 5101200,25.1,500; + 5104800,25,500; 5108400,24.9,500; 5112000,24.7,500; 5115600,24.6,500; + 5119200,24.5,500; 5122800,27,149; 5126400,27,179; 5130000,27,207; + 5133600,27,234; 5137200,27,259; 5140800,27,284; 5144400,27,307; + 5148000,27,329; 5151600,27,350; 5155200,27,371; 5158800,27,390; + 5162400,27,409; 5166000,25.9,500; 5169600,25.8,500; 5173200,25.7,500; + 5176800,25.5,500; 5180400,25.4,500; 5184000,25.3,500], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{80,80},{100,99}}))); + Modelica.Blocks.Math.Add sumHeatLoad + annotation (Placement(transformation(extent={{-30,4},{-20,14}}))); + equation + connect(Maschinen_Strahlung.port, Konvektiv_Strahlung.Therm) + annotation (Line( + points={{22,-89},{28,-89},{28,-92},{40.8,-92}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Strahlung.Q_flow) annotation (Line( + points={{-39,-90},{-14,-90},{-14,-89},{-4,-89}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Solltemperaturen.y[2], idealHeaterCoolerVar1_1.soll_cool) + annotation (Line( + points={{-59,-20},{-50,-20},{-50,-15.2},{-30.8,-15.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Solltemperaturen.y[1], idealHeaterCoolerVar1_1.soll_heat) + annotation (Line( + points={{-59,-20},{-50,-20},{-50,-23},{-30.8,-23}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sumHeatLoad.u1,idealHeaterCoolerVar1_1.heatMeter.p); + connect(sumHeatLoad.u2,idealHeaterCoolerVar1_1.coolMeter.p); + connect(Aussentemperatur.port, reducedModel.equalAirTemp) annotation ( + Line( + points={{-24,49},{26.5,49},{26.5,58.8},{47.4,58.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(idealHeaterCoolerVar1_1.HeatCoolRoom, reducedModel.internalGainsConv) + annotation (Line( + points={{-26,-29},{30,-29},{30,-32},{64.4,-32},{64.4,42}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.ventilationTemperature) + annotation (Line( + points={{16.5,1},{35.25,1},{35.25,48.4},{47.4,48.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.ventilationRate) annotation (Line( + points={{50.5,-11},{50.5,14.5},{54.2,14.5},{54.2,42}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{59.1,-92},{72,-92},{72,42},{74.09,42}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics), + experiment( + StopTime=5.184e+006, + Interval=3600, + Algorithm="Lsodar"), + __Dymola_experimentSetupOutput(events=false), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 7 of the VDI6007: Load calculation in compliance with the desired values of the indoor temperature and a setpoint for the type space S:

+


This case is the same like case 6, but with a maximum heating/cooling power.

+

+

All values are given in the VDI6007.

+"),Icon(graphics)); + end TestCase_7; + + model TestCase_8 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{30,-4},{40,6}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{6,-4},{16,6}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{42,-100},{62,-80}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Konvektion + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Konvektion + annotation (Placement(transformation(extent={{10,-72},{30,-52}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Strahlung + annotation (Placement(transformation(extent={{10,-98},{30,-78}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600,0, + 0; 25200,0,0; 25200,160,200; 28800,160,200; 32400,160,200; 36000,160, + 200; 39600,160,200; 43200,160,200; 46800,160,200; 50400,160,200; 54000, + 160,200; 57600,160,200; 61200,160,200; 61200,0,0; 64800,0,0; 72000,0,0; + 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-58,-80},{-38,-60}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + R1i=0.000668639, + C1i=1.23849e+007, + Ai=60.5, + splitfac=0.09, + Aw=14, + epsw=1, + g=1, + R1o=0.001735719, + C1o=5.25993e+006, + Ao=25.5, + alphaiwi=2.1, + RRest=0.020439688) + annotation (Placement(transformation(extent={{48,26},{82,66}}))); + + Modelica.Blocks.Sources.CombiTimeTable Temperaturverlauf( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3,4}, + table=[0,291.95,0,0; 3600,291.95,0,0; 3600,290.25,0,0; 7200,290.25,0,0; + 7200,289.65,0,0; 10800,289.65,0,0; 10800,289.25,0,0; 14400,289.25,0,0; + 14400,289.65,0,0; 18000,289.65,0,0; 18000,290.95,0,0; 21600,290.95,0, + 0; 21600,293.45,0,0; 25200,293.45,0,0; 25200,295.95,0,0; 28800,295.95, + 0,0; 28800,297.95,0,0; 32400,297.95,0,0; 32400,299.85,0,0; 36000, + 299.85,0,0; 36000,301.25,0,0; 39600,301.25,0,0; 39600,302.15,0,0; + 43200,302.15,0,0; 43200,302.85,0,0; 46800,302.85,0,0; 46800,303.55,0, + 0; 50400,303.55,0,0; 50400,304.05,0,0; 54000,304.05,0,0; 54000,304.15, + 0,0; 57600,304.15,0,0; 57600,303.95,0,0; 61200,303.95,0,0; 61200, + 303.25,0,0; 64800,303.25,0,0; 64800,302.05,0,0; 68400,302.05,0,0; + 68400,300.15,0,0; 72000,300.15,0,0; 72000,297.85,0,0; 75600,297.85,0, + 0; 75600,296.05,0,0; 79200,296.05,0,0; 79200,295.05,0,0; 82800,295.05, + 0,0; 82800,294.05,0,0; 86400,294.05,0,0]) + annotation (Placement(transformation(extent={{-88,8},{-68,28}}))); + + Utilities.Sources.PrescribedSolarRad Quelle_Wand(n=5) annotation ( + Placement(transformation(extent={{-60,36},{-40,56}}))); + Modelica.Blocks.Sources.CombiTimeTable Strahlung_Wand( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + table=[0,0,0,0,0,0.0; 3600,0,0,0,0,0.0; 10800,0,0,0,0,0.0; 14400,0,0,0,0, + 0.0; 14400,0,0,24,23,0.0; 18000,0,0,24,23,0.0; 18000,0,0,58,53,0.0; + 21600,0,0,58,53,0.0; 21600,0,0,91,77,0.0; 25200,0,0,91,77,0.0; 25200, + 0,0,203,97,0.0; 28800,0,0,203,97,0.0; 28800,0,0,348,114,0.0; 32400,0, + 0,348,114,0.0; 32400,0,0,472,131,0.0; 36000,0,0,472,131,0.0; 36000,0, + 0,553,144,0.0; 39600,0,0,553,144,0.0; 39600,0,0,581,159,0.0; 43200,0, + 0,581,159,0.0; 43200,0,0,553,372,0.0; 46800,0,0,553,372,0.0; 46800,0, + 0,472,557,0.0; 50400,0,0,472,557,0.0; 50400,0,0,348,685,0.0; 54000,0, + 0,348,685,0.0; 54000,0,0,203,733,0.0; 57600,0,0,203,733,0.0; 57600,0, + 0,91,666,0.0; 61200,0,0,91,666,0.0; 61200,0,0,58,474,0.0; 64800,0,0, + 58,474,0.0; 64800,0,0,24,177,0.0; 68400,0,0,24,177,0.0; 68400,0,0,0,0, + 0.0; 72000,0,0,0,0,0.0; 82800,0,0,0,0,0.0; 86400,0,0,0,0,0.0], + columns={2,3,4,5,6}) + annotation (Placement(transformation(extent={{-88,36},{-68,56}}))); + Modelica.Blocks.Sources.CombiTimeTable Strahlung_Fenster( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + table=[0,0,0,0,0,0.0; 3600,0,0,0,0,0.0; 10800,0,0,0,0,0.0; 14400,0,0,0,0, + 0.0; 14400,0,0,17,17,0.0; 18000,0,0,17,17,0.0; 18000,0,0,38,36,0.0; + 21600,0,0,38,36,0.0; 21600,0,0,59,51,0.0; 25200,0,0,59,51,0.0; 25200, + 0,0,98,64,0.0; 28800,0,0,98,64,0.0; 28800,0,0,186,74,0.0; 32400,0,0, + 186,74,0.0; 32400,0,0,287,84,0.0; 36000,0,0,287,84,0.0; 36000,0,0,359, + 92,0.0; 39600,0,0,359,92,0.0; 39600,0,0,385,100,0.0; 43200,0,0,385, + 100,0.0; 43200,0,0,359,180,0.0; 46800,0,0,359,180,0.0; 46800,0,0,287, + 344,0.0; 50400,0,0,287,344,0.0; 50400,0,0,186,475,0.0; 54000,0,0,186, + 475,0.0; 54000,0,0,98,528,0.0; 57600,0,0,98,528,0.0; 57600,0,0,59,492, + 0.0; 61200,0,0,59,492,0.0; 61200,0,0,38,359,0.0; 64800,0,0,38,359,0.0; + 64800,0,0,17,147,0.0; 68400,0,0,17,147,0.0; 68400,0,0,0,0,0.0; 72000, + 0,0,0,0,0.0; 82800,0,0,0,0,0.0; 86400,0,0,0,0,0.0], + columns={2,3,4,5,6}) + annotation (Placement(transformation(extent={{-92,68},{-72,88}}))); + Utilities.Sources.PrescribedSolarRad Quelle_Fenster(n=5) + annotation (Placement(transformation(extent={{-60,68},{-40,88}}))); + Components.Weather.Sunblind sunblind(n=5, gsunblind={0,0,0.15,0.15, + 0}) annotation (Placement(transformation(extent={{-30,67},{-10, + 87}}))); + Building.LowOrder.BaseClasses.SolarRadWeightedSum rad_weighted_sum( + weightfactors={0,0,7,7,0}, n=5) + annotation (Placement(transformation(extent={{-2,68},{18,88}}))); + VDIComponents.EqAirTemp_TestCase_8 eqAirTemp( + aowo=0.7, + n=5, + wf_wall={0.000000000,0.000000000,0.057948807,0.132454416,0.000000000}, + wf_win={0.000000000,0.000000000,0.404798388,0.404798388,0.000000000}, + alphaowo=25) + annotation (Placement(transformation(extent={{-16,30},{4,50}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, + table=[3600,22; 7200,21.9; 10800,21.9; 14400,21.8; 18000,22; 21600,22.3; + 25200,22.7; 28800,24.8; 32400,24.7; 36000,25.2; 39600,25.6; 43200, + 26.1; 46800,25.9; 50400,26.3; 54000,26.6; 57600,27.5; 61200,27.6; + 64800,26; 68400,25.8; 72000,25.6; 75600,25.6; 79200,25.5; 82800,25.5; + 86400,25.5; 781200,37.6; 784800,37.5; 788400,37.3; 792000,37.1; + 795600,37.1; 799200,37.3; 802800,37.5; 806400,39.6; 810000,39.4; + 813600,39.7; 817200,40; 820800,40.3; 824400,40; 828000,40.3; 831600, + 40.5; 835200,41.3; 838800,41.3; 842400,39.6; 846000,39.2; 849600,38.9; + 853200,38.8; 856800,38.7; 860400,38.5; 864000,38.4; 5101200,40.9; + 5104800,40.7; 5108400,40.5; 5112000,40.2; 5115600,40.3; 5119200,40.4; + 5122800,40.6; 5126400,42.6; 5130000,42.4; 5133600,42.7; 5137200,43; + 5140800,43.3; 5144400,43; 5148000,43.2; 5151600,43.4; 5155200,44.2; + 5158800,44.1; 5162400,42.4; 5166000,42; 5169600,41.7; 5173200,41.6; + 5176800,41.4; 5180400,41.2; 5184000,41.1]) + annotation (Placement(transformation(extent={{80,80},{100,99}}))); + equation + connect(Personen_Strahlung.port, Konvektiv_Strahlung.Therm) annotation ( + Line( + points={{30,-88},{36,-88},{36,-90},{42.8,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Konvektion.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-62},{10,-62}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Strahlung.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-88},{10,-88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Konvektion.Q_flow) annotation (Line( + points={{-37,-70},{-14,-70},{-14,-40},{40,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(eqAirTemp.WeatherDataVector, Temperaturverlauf.y) annotation (Line( + points={{-14,40},{-40,40},{-40,18},{-67,18}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Fenster.y, Quelle_Fenster.u) annotation (Line( + points={{-71,78},{-60,78}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Quelle_Fenster.solarRad_out, sunblind.Rad_In) annotation (Line( + points={{-41,78},{-29,78}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Quelle_Wand.solarRad_out, eqAirTemp.Rad_In) annotation (Line( + points={{-41,46},{-27.75,46},{-27.75,45.6},{-14.5,45.6}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, Quelle_Wand.u) annotation (Line( + points={{-67,46},{-60,46}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sunblind.sunblindonoff, eqAirTemp.sunblindsig) annotation (Line( + points={{-20,68},{-14,68},{-14,48},{-6,48}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(eqAirTemp.equalairtemp, reducedModel.equalAirTemp) annotation ( + Line( + points={{2,40},{24,40},{24,46.8},{51.4,46.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rad_weighted_sum.solarRad_out, reducedModel.solarRad_in) + annotation (Line( + points={{17,78},{34,78},{34,56.8},{51.23,56.8}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, rad_weighted_sum.solarRad_in) annotation (Line( + points={{-11,78},{-1,78}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.ventilationTemperature) + annotation (Line( + points={{16.5,1},{16.5,18.5},{51.4,18.5},{51.4,36.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.ventilationRate) annotation (Line( + points={{40.5,1},{40.5,13.5},{58.2,13.5},{58.2,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Maschinen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{60,-40},{36,-40},{36,-14},{68.4,-14},{68.4,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Personen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{30,-62},{12,-62},{12,-14},{68.4,-14},{68.4,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{61.1,-90},{70,-90},{70,30},{78.09,30}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics), + experiment( + StopTime=5.184e+006, + Interval=3600, + Algorithm="Lsodar"), + __Dymola_experimentSetupOutput(events=false), + Icon(graphics), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 8 of the VDI6007:: Calculation of the reaction indoor temperature to mixed inner and outer heat sources for Type Room S:

+

Based on Test Case 5

+

+


All values are given in the VDI6007.

+")); + end TestCase_8; + + model TestCase_9 + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Constant const(k=273.15 + 22) + annotation (Placement(transformation(extent={{12,9},{26,23}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{28,-10},{40,2}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow persons_conv + annotation (Placement(transformation(extent={{66,-32},{86,-12}}))); + Utilities.HeatTransfer.HeatToStar twoStar_RadEx(eps=1, A=2) + annotation (Placement(transformation(extent={{60,-75},{80,-55}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow persons_rad + annotation (Placement(transformation(extent={{38,-73},{58,-53}}))); + Building.LowOrder.BaseClasses.SolarRadWeightedSum + window_shortwave_rad_sum(n=4, weightfactors={0,0,7,7}) + annotation (Placement(transformation(extent={{6,62},{28,84}}))); + Building.LowOrder.BaseClasses.EqAirTemp eqAirTemp( + aowo=0.7, + wf_wall={0,0,0.05795,0.13245}, + wf_win={0,0,0.4048,0.4048}, + alphaowo=25) + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machines + annotation (Placement(transformation(extent={{38,-44},{58,-24}}))); + Components.Weather.Sunblind sunblind(Imax=100, gsunblind={1,1,0.15, + 0.15}) + annotation (Placement(transformation(extent={{-20,62},{0,82}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + Ao=25.5, + Aw=14, + Ai=60.5, + epsi=1, + epso=1, + epsw=1, + g=1, + splitfac=0.09, + T0all(displayUnit="degC"), + R1i=0.000668639, + C1i=1.23849e+007, + R1o=0.001735719, + C1o=5.25993e+006, + alphaiwi=2.1, + alphaowi=2.7, + RRest=0.020439688) + annotation (Placement(transformation(extent={{38,8},{80,46}}))); + Utilities.Sources.PrescribedSolarRad varRad3(n=4) annotation ( + Placement(transformation(extent={{-58,63},{-38,83}}))); + Utilities.Sources.PrescribedSolarRad varRad1(n=4) annotation ( + Placement(transformation(extent={{-44,23},{-24,43}}))); + Modelica.Blocks.Sources.CombiTimeTable sunbeambehindwindow( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0,0,0,0; 3600,0,0,0,0; 10800,0,0,0,0; 14400,0,0,0,0; 14400,0,0,17, + 17; 18000,0,0,17,17; 18000,0,0,38,36; 21600,0,0,38,36; 21600,0,0,59,51; + 25200,0,0,59,51; 25200,0,0,98,64; 28800,0,0,98,64; 28800,0,0,186,74; + 32400,0,0,186,74; 32400,0,0,287,84; 36000,0,0,287,84; 36000,0,0,359,92; + 39600,0,0,359,92; 39600,0,0,385,100; 43200,0,0,385,100; 43200,0,0,359, + 180; 46800,0,0,359,180; 46800,0,0,287,344; 50400,0,0,287,344; 50400,0,0, + 186,475; 54000,0,0,186,475; 54000,0,0,98,528; 57600,0,0,98,528; 57600,0, + 0,59,492; 61200,0,0,59,492; 61200,0,0,38,359; 64800,0,0,38,359; 64800,0, + 0,17,147; 68400,0,0,17,147; 68400,0,0,0,0; 72000,0,0,0,0; 82800,0,0,0,0; + 86400,0,0,0,0], + columns={2,3,4,5}) + annotation (Placement(transformation(extent={{-88,66},{-74,80}}))); + Modelica.Blocks.Sources.CombiTimeTable sunbeam( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2,3,4,5}, + table=[0,0,0,0,0; 3600,0,0,0,0; 10800,0,0,0,0; 14400,0,0,0,0; 14400,0,0,24, + 23; 18000,0,0,24,23; 18000,0,0,58,53; 21600,0,0,58,53; 21600,0,0,91,77; + 25200,0,0,91,77; 25200,0,0,203,97; 28800,0,0,203,97; 28800,0,0,348,114; + 32400,0,0,348,114; 32400,0,0,472,131; 36000,0,0,472,131; 36000,0,0,553, + 144; 39600,0,0,553,144; 39600,0,0,581,159; 43200,0,0,581,159; 43200,0,0, + 553,372; 46800,0,0,553,372; 46800,0,0,472,557; 50400,0,0,472,557; 50400, + 0,0,348,685; 54000,0,0,348,685; 54000,0,0,203,733; 57600,0,0,203,733; + 57600,0,0,91,666; 61200,0,0,91,666; 61200,0,0,58,474; 64800,0,0,58,474; + 64800,0,0,24,177; 68400,0,0,24,177; 68400,0,0,0,0; 72000,0,0,0,0; 82800, + 0,0,0,0; 86400,0,0,0,0]) + annotation (Placement(transformation(extent={{-88,26},{-74,40}}))); + Modelica.Blocks.Sources.CombiTimeTable weather( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0,0,0,18.8,0,0,0,343,-382,0; 0.36,0,0,0,18.8,0,0,0,343,-382,0; + 3600,0,0,0,17.1,0,0,0,344,-384,0; 7200,0,0,0,17.1,0,0,0,344,-384,0; + 7200,0,0,0,16.5,0,0,0,345,-384,0; 10800,0,0,0,16.5,0,0,0,345,-384,0; + 10800,0,0,0,16.1,0,0,0,347,-381,0; 14400,0,0,0,16.1,0,0,0,347,-381,0; + 14400,0,0,0,16.5,0,0,0,355,-406,0; 18000,0,0,0,16.5,0,0,0,355,-406,0; + 18000,0,0,0,17.8,0,0,0,359,-422,0; 21600,0,0,0,17.8,0,0,0,359,-422,0; + 21600,0,0,0,20.3,0,0,0,353,-448,0; 25200,0,0,0,20.3,0,0,0,353,-448,0; + 25200,0,0,0,22.8,0,0,0,356,-472,0; 28800,0,0,0,22.8,0,0,0,356,-472,0; + 28800,0,0,0,24.8,0,0,0,356,-499,0; 32400,0,0,0,24.8,0,0,0,356,-499,0; + 32400,0,0,0,26.7,0,0,0,359,-519,0; 36000,0,0,0,26.7,0,0,0,359,-519,0; + 36000,0,0,0,28.1,0,0,0,360,-537,0; 39600,0,0,0,28.1,0,0,0,360,-537,0; + 39600,0,0,0,29,0,0,0,361,-553,0; 43200,0,0,0,29,0,0,0,361,-553,0; 43200, + 0,0,0,29.7,0,0,0,367,-552,0; 46800,0,0,0,29.7,0,0,0,367,-552,0; 46800,0, + 0,0,30.4,0,0,0,370,-550,0; 50400,0,0,0,30.4,0,0,0,370,-550,0; 50400,0,0, + 0,30.9,0,0,0,371,-544,0; 54000,0,0,0,30.9,0,0,0,371,-544,0; 54000,0,0,0, + 31,0,0,0,372,-533,0; 57600,0,0,0,31,0,0,0,372,-533,0; 57600,0,0,0,30.8, + 0,0,0,371,-519,0; 61200,0,0,0,30.8,0,0,0,371,-519,0; 61200,0,0,0,30.1,0, + 0,0,382,-495,0; 64800,0,0,0,30.1,0,0,0,382,-495,0; 64800,0,0,0,28.9,0,0, + 0,400,-474,0; 68400,0,0,0,28.9,0,0,0,400,-474,0; 68400,0,0,0,27,0,0,0, + 395,-445,0; 72000,0,0,0,27,0,0,0,395,-445,0; 72000,0,0,0,24.7,0,0,0,389, + -436,0; 75600,0,0,0,24.7,0,0,0,389,-436,0; 75600,0,0,0,22.9,0,0,0,383,-427, + 0; 79200,0,0,0,22.9,0,0,0,383,-427,0; 79200,0,0,0,21.9,0,0,0,377,-418,0; + 82800,0,0,0,21.9,0,0,0,377,-418,0; 82800,0,0,0,20.9,0,0,0,372,-408,0; + 86400,0,0,0,20.9,0,0,0,372,-408,0], + columns={5,9,10}) + annotation (Placement(transformation(extent={{-88,3},{-74,17}}))); + Modelica.Blocks.Sources.CombiTimeTable innerloads( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600,0, + 0; 25200,0,0; 25200,160,200; 28800,160,200; 32400,160,200; 36000,160, + 200; 39600,160,200; 43200,160,200; 46800,160,200; 50400,160,200; 54000, + 160,200; 57600,160,200; 61200,160,200; 61200,0,0; 64800,0,0; 68400,0,0; + 72000,0,0; 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0], + columns={2,3}) + annotation (Placement(transformation(extent={{-8,-59},{6,-45}}))); + Modelica.Blocks.Routing.DeMultiplex3 deMultiplex3_1 + annotation (Placement(transformation(extent={{-68,4},{-56,16}}))); + Modelica.Blocks.Math.UnitConversions.From_degC from_degC + annotation (Placement(transformation(extent={{-50,11},{-44,17}}))); + Modelica.Blocks.Routing.Multiplex3 multiplex3_1 + annotation (Placement(transformation(extent={{-37,4},{-25,16}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, + table=[3600,22; 7200,21.9; 10800,21.9; 14400,21.8; 18000,22; 21600,22.3; + 25200,22.7; 28800,24.8; 32400,24.7; 36000,25.2; 39600,25.6; 43200, + 26.1; 46800,25.9; 50400,26.3; 54000,26.6; 57600,27.5; 61200,27.6; + 64800,26; 68400,25.8; 72000,25.6; 75600,25.6; 79200,25.5; 82800,25.5; + 86400,25.5; 781200,37.6; 784800,37.4; 788400,37.3; 792000,37.1; + 795600,37.1; 799200,37.3; 802800,37.5; 806400,39.6; 810000,39.4; + 813600,39.7; 817200,40; 820800,40.3; 824400,40; 828000,40.3; 831600, + 40.5; 835200,41.3; 838800,41.3; 842400,39.6; 846000,39.2; 849600,38.9; + 853200,38.8; 856800,38.7; 860400,38.5; 864000,38.4; 5101200,40.8; + 5104800,40.6; 5108400,40.4; 5112000,40.2; 5115600,40.2; 5119200,40.4; + 5122800,40.5; 5126400,42.6; 5130000,42.3; 5133600,42.6; 5137200,42.9; + 5140800,43.2; 5144400,42.9; 5148000,43.2; 5151600,43.4; 5155200,44.1; + 5158800,44.1; 5162400,42.3; 5166000,42; 5169600,41.6; 5173200,41.5; + 5176800,41.3; 5180400,41.2; 5184000,41]) + annotation (Placement(transformation(extent={{80,80},{100,99}}))); + equation + connect(persons_rad.port, twoStar_RadEx.Therm) annotation (Line( + points={{58,-63},{58,-66},{60.8,-66},{60.8,-65}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(sunblind.sunblindonoff, eqAirTemp.sunblindsig) annotation (Line( + points={{-10,63},{-10,18}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(varRad3.solarRad_out, sunblind.Rad_In) annotation (Line( + points={{-39,73},{-19,73}}, + color={255,128,0}, + smooth=Smooth.None)); + + connect(sunbeambehindwindow.y, varRad3.u) annotation (Line( + points={{-73.3,73},{-58,73}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sunbeam.y, varRad1.u) annotation (Line( + points={{-73.3,33},{-44,33}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(innerloads.y[2],machines.Q_flow) annotation (Line( + points={{6.7,-52},{22,-52},{22,-34},{38,-34}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(innerloads.y[1],persons_rad.Q_flow) annotation (Line( + points={{6.7,-52},{22,-52},{22,-63},{38,-63}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(innerloads.y[1],persons_conv.Q_flow) annotation (Line( + points={{6.7,-52},{60,-52},{60,-22},{66,-22}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(weather.y, deMultiplex3_1.u) annotation (Line( + points={{-73.3,10},{-69.2,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(deMultiplex3_1.y1[1], from_degC.u) annotation (Line( + points={{-55.4,14.2},{-52.7,14.2},{-52.7,14},{-50.6,14}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(from_degC.y, multiplex3_1.u1[1]) annotation (Line( + points={{-43.7,14},{-39.95,14},{-39.95,14.2},{-38.2,14.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(deMultiplex3_1.y2, multiplex3_1.u2) annotation (Line( + points={{-55.4,10},{-38.2,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(deMultiplex3_1.y3, multiplex3_1.u3) annotation (Line( + points={{-55.4,5.8},{-38.2,5.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(window_shortwave_rad_sum.solarRad_out, reducedModel.solarRad_in) + annotation (Line( + points={{26.9,73},{26.9,54.5},{41.99,54.5},{41.99,37.26}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(eqAirTemp.equalAirTemp, reducedModel.equalAirTemp) annotation ( + Line( + points={{-2,10},{8,10},{8,27.76},{42.2,27.76}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(const.y, reducedModel.ventilationTemperature) annotation (Line( + points={{26.7,16},{32,16},{32,17.88},{42.2,17.88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, reducedModel.ventilationRate) annotation (Line( + points={{40.6,-4},{48,-4},{48,11.8},{50.6,11.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(persons_conv.port, reducedModel.internalGainsConv) annotation ( + Line( + points={{86,-22},{64,-22},{64,11.8},{63.2,11.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(machines.port, reducedModel.internalGainsConv) annotation (Line( + points={{58,-34},{36,-34},{36,-34},{34,-34},{34,-14},{64,-14},{64, + 11.8},{63.2,11.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(twoStar_RadEx.Star, reducedModel.internalGainsRad) annotation ( + Line( + points={{79.1,-65},{102,-65},{102,-4},{75.17,-4},{75.17,11.8}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, window_shortwave_rad_sum.solarRad_in) + annotation (Line( + points={{-1,73},{3.5,73},{3.5,73},{7.1,73}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(varRad1.solarRad_out, eqAirTemp.solarRad_in) annotation (Line( + points={{-25,33},{-25,24.5},{-18.5,24.5},{-18.5,15.6}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(multiplex3_1.y, eqAirTemp.weatherData) annotation (Line( + points={{-24.4,10},{-18,10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), Icon(graphics), + experiment(StopTime=3.1536e+007, Interval=3600), + experimentSetupOutput(events=false), Documentation(revisions=" + +", info=" +

Test Case 9 of the VDI6007:: Calculation of the reaction indoor temperature to mixed inner and outer heat sources for Type Room S:

+

Based on Test Case 8

+

+


All values are given in the VDI6007.

+")); + end TestCase_9; + + model TestCase_10 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{40,6},{50,16}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{16,6},{26,16}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{52,-90},{72,-70}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Konvektion + annotation (Placement(transformation(extent={{50,-40},{70,-20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Konvektion + annotation (Placement(transformation(extent={{20,-62},{40,-42}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Strahlung + annotation (Placement(transformation(extent={{20,-88},{40,-68}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600,0, + 0; 25200,0,0; 25200,160,200; 28800,160,200; 32400,160,200; 36000,160, + 200; 39600,160,200; 43200,160,200; 46800,160,200; 50400,160,200; 54000, + 160,200; 57600,160,200; 61200,160,200; 61200,0,0; 64800,0,0; 72000,0,0; + 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-48,-70},{-28,-50}}))); + Modelica.Blocks.Sources.CombiTimeTable Strahlung_Fenster( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + table=[0,0,0,0,0,0.0; 3600,0,0,0,0,0.0; 10800,0,0,0,0,0.0; 14400,0,0,0,0, + 0.0; 14400,0,0,17,0,0.0; 18000,0,0,17,0,0.0; 18000,0,0,38,0,0.0; + 21600,0,0,38,0,0.0; 21600,0,0,59,0,0.0; 25200,0,0,59,0,0.0; 25200,0,0, + 98,0,0.0; 28800,0,0,98,0,0.0; 28800,0,0,186,0,0.0; 32400,0,0,186,0, + 0.0; 32400,0,0,287,0,0.0; 36000,0,0,287,0,0.0; 36000,0,0,359,0,0.0; + 39600,0,0,359,0,0.0; 39600,0,0,385,0,0.0; 43200,0,0,385,0,0.0; 43200, + 0,0,359,0,0.0; 46800,0,0,359,0,0.0; 46800,0,0,287,0,0.0; 50400,0,0, + 287,0,0.0; 50400,0,0,186,0,0.0; 54000,0,0,186,0,0.0; 54000,0,0,98,0, + 0.0; 57600,0,0,98,0,0.0; 57600,0,0,59,0,0.0; 61200,0,0,59,0,0.0; + 61200,0,0,38,0,0.0; 64800,0,0,38,0,0.0; 64800,0,0,17,0,0.0; 68400,0,0, + 17,0,0.0; 68400,0,0,0,0,0.0; 72000,0,0,0,0,0.0; 82800,0,0,0,0,0.0; + 86400,0,0,0,0,0.0], + columns={2,3,4,5,6}) + annotation (Placement(transformation(extent={{-86,78},{-66,98}}))); + Utilities.Sources.PrescribedSolarRad Quelle_Fenster(n=5) + annotation (Placement(transformation(extent={{-50,78},{-30,98}}))); + Components.Weather.Sunblind sunblind(n=5, gsunblind={0,0,0.15,0,0}) + annotation (Placement(transformation(extent={{-20,77},{0,97}}))); + Building.LowOrder.BaseClasses.SolarRadWeightedSum rad_weighted_sum( + n=5, weightfactors={0,0,7,0,0}) + annotation (Placement(transformation(extent={{8,78},{28,98}}))); + BaseClasses.EqAirTemp eqAirTemp_TestCase_8_1( + alphaowo=25, + wf_ground=0.629038674, + n=5, + wf_wall={0.000000000,0.000000000,0.046454666,0.000000000,0.0}, + wf_win={0.000000000,0.000000000,0.324506660,0.000000000,0.0}, + T_ground=288.15) annotation (Placement(transformation(extent={{-36, + 36},{-16,56}}))); + Utilities.Sources.PrescribedSolarRad Quelle_Wand(n=5) annotation ( + Placement(transformation(extent={{-80,50},{-60,70}}))); + Modelica.Blocks.Sources.CombiTimeTable Temperaturverlauf( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3,4}, + table=[0,291.95,0,0; 3600,291.95,0,0; 3600,290.25,0,0; 7200,290.25,0,0; + 7200,289.65,0,0; 10800,289.65,0,0; 10800,289.25,0,0; 14400,289.25,0,0; + 14400,289.65,0,0; 18000,289.65,0,0; 18000,290.95,0,0; 21600,290.95,0,0; + 21600,293.45,0,0; 25200,293.45,0,0; 25200,295.95,0,0; 28800,295.95,0,0; + 28800,297.95,0,0; 32400,297.95,0,0; 32400,299.85,0,0; 36000,299.85,0,0; + 36000,301.25,0,0; 39600,301.25,0,0; 39600,302.15,0,0; 43200,302.15,0,0; + 43200,302.85,0,0; 46800,302.85,0,0; 46800,303.55,0,0; 50400,303.55,0,0; + 50400,304.05,0,0; 54000,304.05,0,0; 54000,304.15,0,0; 57600,304.15,0,0; + 57600,303.95,0,0; 61200,303.95,0,0; 61200,303.25,0,0; 64800,303.25,0,0; + 64800,302.05,0,0; 68400,302.05,0,0; 68400,300.15,0,0; 72000,300.15,0,0; + 72000,297.85,0,0; 75600,297.85,0,0; 75600,296.05,0,0; 79200,296.05,0,0; + 79200,295.05,0,0; 82800,295.05,0,0; 82800,294.05,0,0; 86400,294.05,0,0]) + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Modelica.Blocks.Sources.Constant Strahlung_Wand(k=0) + annotation (Placement(transformation(extent={{-146,54},{-136,64}}))); + Modelica.Blocks.Routing.Multiplex5 multiplex5_1 + annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + R1i=0.000779672, + C1i=1.23140e+07, + Ai=58, + splitfac=0.09, + Aw=7, + epsw=1, + RRest=0.014406788, + R1o=0.001719315, + C1o=4.33875e+06, + Ao=28, + alphaiwi=2.4, + alphaowi=2.1, + epsi=1, + epso=1, + g=1, + T0all=290.75) + annotation (Placement(transformation(extent={{50,48},{98,98}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,17.6; 7200,17.6; 10800,17.5; 14400,17.5; 18000,17.6; 21600, + 17.8; 25200,18; 28800,20; 32400,19.7; 36000,20; 39600,20.3; 43200, + 20.5; 46800,20.6; 50400,20.7; 54000,20.8; 57600,21.5; 61200,21.4; + 64800,19.8; 68400,19.7; 72000,19.6; 75600,19.6; 79200,19.5; 82800, + 19.5; 86400,19.5; 781200,24.7; 784800,24.6; 788400,24.5; 792000,24.4; + 795600,24.4; 799200,24.5; 802800,24.6; 806400,26.6; 810000,26.2; + 813600,26.4; 817200,26.6; 820800,26.8; 824400,26.9; 828000,26.9; + 831600,26.9; 835200,27.5; 838800,27.4; 842400,25.7; 846000,25.5; + 849600,25.3; 853200,25.3; 856800,25.2; 860400,25.1; 864000,25; + 5101200,25.5; 5104800,25.3; 5108400,25.2; 5112000,25.1; 5115600,25.1; + 5119200,25.2; 5122800,25.3; 5126400,27.3; 5130000,26.9; 5133600,27.1; + 5137200,27.3; 5140800,27.4; 5144400,27.5; 5148000,27.5; 5151600,27.5; + 5155200,28.1; 5158800,28; 5162400,26.3; 5166000,26.1; 5169600,26; + 5173200,25.9; 5176800,25.8; 5180400,25.7; 5184000,25.6], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{-98,-20},{-78,-1}}))); + equation + connect(Personen_Strahlung.port, Konvektiv_Strahlung.Therm) annotation ( + Line( + points={{40,-78},{46,-78},{46,-80},{52.8,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Konvektion.Q_flow) annotation (Line( + points={{-27,-60},{-4,-60},{-4,-52},{20,-52}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Strahlung.Q_flow) annotation (Line( + points={{-27,-60},{-4,-60},{-4,-78},{20,-78}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Konvektion.Q_flow) annotation (Line( + points={{-27,-60},{-4,-60},{-4,-30},{50,-30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Fenster.y,Quelle_Fenster. u) annotation (Line( + points={{-65,88},{-50,88}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Quelle_Fenster.solarRad_out,sunblind. Rad_In) annotation (Line( + points={{-31,88},{-19,88}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(multiplex5_1.y, Quelle_Wand.u) annotation (Line( + points={{-89,60},{-80,60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, multiplex5_1.u1[1]) annotation (Line( + points={{-135.5,59},{-124,59},{-124,70},{-112,70}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, multiplex5_1.u2[1]) annotation (Line( + points={{-135.5,59},{-124,59},{-124,65},{-112,65}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, multiplex5_1.u3[1]) annotation (Line( + points={{-135.5,59},{-124,59},{-124,60},{-112,60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, multiplex5_1.u4[1]) annotation (Line( + points={{-135.5,59},{-124,59},{-124,55},{-112,55}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(sunblind.sunblindonoff, eqAirTemp_TestCase_8_1.sunblindsig) + annotation (Line( + points={{-10,78},{-10,66},{-26,66},{-26,54}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.ventilationTemperature) + annotation (Line( + points={{26.5,11},{34,11},{34,61},{54.8,61}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.ventilationRate) annotation (Line( + points={{50.5,11},{64.4,11},{64.4,53}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Maschinen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{70,-30},{40,-30},{40,-6},{78.8,-6},{78.8,53}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Personen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{40,-52},{8,-52},{8,-6},{78.8,-6},{78.8,53}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{71.1,-80},{92.48,-80},{92.48,53}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(rad_weighted_sum.solarRad_out, reducedModel.solarRad_in) + annotation (Line( + points={{27,88},{42,88},{42,86.5},{54.56,86.5}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, rad_weighted_sum.solarRad_in) annotation (Line( + points={{-1,88},{9,88}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(eqAirTemp_TestCase_8_1.equalAirTemp, reducedModel.equalAirTemp) + annotation (Line( + points={{-18,46},{-2,46},{-2,42},{18,42},{18,74},{54.8,74}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Temperaturverlauf.y, eqAirTemp_TestCase_8_1.weatherData) + annotation (Line( + points={{-79,30},{-34,30},{-34,46}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Quelle_Wand.solarRad_out, eqAirTemp_TestCase_8_1.solarRad_in) + annotation (Line( + points={{-61,60},{-48,60},{-48,51.6},{-34.5,51.6}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Strahlung_Wand.y, multiplex5_1.u5[1]) annotation (Line( + points={{-135.5,59},{-124.75,59},{-124.75,50},{-112,50}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false), + Icon(graphics), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 10 of the VDI6007:: Calculation of the reaction indoor temperature to mixed inner and outer heat sources for Type Room S:

+

Based on Test Case 5

+

+



All values are given in the VDI6007.

+")); + end TestCase_10; + + model TestCase_11 + extends Modelica.Icons.Example; + + Modelica.Blocks.Sources.Constant Infiltration(k=0) + annotation (Placement(transformation(extent={{40,6},{50,16}}))); + Modelica.Blocks.Sources.Constant Temperatur_Infiltration(k=22) + annotation (Placement(transformation(extent={{16,6},{26,16}}))); + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{50,-92},{70,-72}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Strahlung + annotation (Placement(transformation(extent={{6,-90},{32,-68}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature Aussentemperatur( + T=295.15) + annotation (Placement(transformation(extent={{6,49},{-14,69}}))); + VDIComponents.ReducedOrderModel_surfaceCooling reducedModel( + C1i=1.48216e+007, + Aw=7, + g=0.15, + C1o=1.60085e+006, + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + rad_split_conv(x=0.09), + withWindows=false, + R1i=0.000595515, + Ai=75.5, + RRest=0.042748777, + R1o=0.004366222, + Ao=10.5, + alphaiwi=3) + annotation (Placement(transformation(extent={{64,36},{98,76}}))); + Utilities.Sources.HeaterCooler.IdealHeaterCoolerVar1 + idealHeaterCoolerVar1_1( + Q_flow_heat=1, + Q_flow_cooler=1, + h_cooler=0, + KR_heater=1000, + KR_cooler=1000, + TN_heater=1, + TN_cooler=1, + h_heater=500, + l_cooler=-500, + Cooler_on=false) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-26,-20}))); + Modelica.Blocks.Sources.CombiTimeTable Solltemperaturen( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3}, + table=[0,295.15,295.2; 3600,295.1,295.2; 7200,295.1,295.2; 10800,295.1, + 295.2; 14400,295.1,295.2; 18000,295.1,295.2; 21600,295.1,295.2; 25200, + 300.1,300.2; 28800,300.1,300.2; 32400,300.1,300.2; 36000,300.1,300.2; + 39600,300.1,300.2; 43200,300.1,300.2; 46800,300.1,300.2; 50400,300.1, + 300.2; 54000,300.1,300.2; 57600,300.1,300.2; 61200,300.1,300.2; 64800, + 300.1,300.2; 68400,295.1,295.2; 72000,295.1,295.2; 75600,295.1,295.2; + 79200,295.1,295.2; 82800,295.1,295.2; 86400,295.1,295.2]) + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2,3}, + table=[3600,22,0; 7200,22,0; 10800,22,0; 14400,22,0; 18000,22,0; 21600,22, + 0; 25200,24.9,-500; 28800,25.2,-500; 32400,25.6,-500; 36000,25.9,-500; + 39600,26.2,-500; 43200,26.5,-500; 46800,26.8,-500; 50400,27,-464; + 54000,27,-397; 57600,27,-333; 61200,27,-272; 64800,27,-215; 68400, + 25.3,500; 72000,25.2,500; 75600,25.1,500; 79200,24.9,500; 82800,24.8, + 500; 86400,24.7,500; 781200,26.2,500; 784800,26.1,500; 788400,26,500; + 792000,25.8,500; 795600,25.7,500; 799200,25.6,500; 802800,26.7,-126; + 806400,26.8,-76; 810000,26.9,-28; 813600,27,121; 817200,27,391; + 820800,27,500; 824400,27.1,500; 828000,27.2,500; 831600,27.3,500; + 835200,27.4,500; 838800,27.5,500; 842400,27.6,500; 846000,27,500; + 849600,26.9,500; 853200,26.7,500; 856800,26.6,500; 860400,26.5,500; + 864000,26.4,500; 5101200,26.2,500; 5104800,26.1,500; 5108400,26,500; + 5112000,25.8,500; 5115600,25.7,500; 5119200,25.6,500; 5122800,27,-126; + 5126400,27,-76; 5130000,27,-28; 5133600,27,121; 5137200,27,391; + 5140800,27,500; 5144400,27.1,500; 5148000,27.2,500; 5151600,27.3,500; + 5155200,27.4,500; 5158800,27.5,500; 5162400,27.6,500; 5166000,27,500; + 5169600,26.9,500; 5173200,26.7,500; 5176800,26.6,500; 5180400,26.5, + 500; 5184000,26.4,500], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{-96,78},{-76,97}}))); + Modelica.Blocks.Math.Add sumHeatLoad + annotation (Placement(transformation(extent={{-30,4},{-20,14}}))); + Utilities.Sources.HeaterCooler.IdealHeaterCoolerVar1 + idealHeaterCoolerVar1_2( + Q_flow_heat=1, + Q_flow_cooler=1, + h_cooler=0, + KR_heater=1000, + KR_cooler=1000, + TN_heater=1, + TN_cooler=1, + h_heater=500, + l_cooler=-500, + Heater_on=false) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-26,-48}))); + Modelica.Blocks.Sources.CombiTimeTable table_machines( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2,3}, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600, + 0,0; 21600,0,1000; 25200,0,1000; 28800,0,1000; 32400,0,1000; 36000,0, + 1000; 39600,0,1000; 43200,0,1000; 46800,0,1000; 50400,0,1000; 54000,0, + 1000; 57600,0,1000; 61200,0,1000; 64800,0,1000; 64800,0,0; 68400,0,0; + 72000,0,0; 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-24,-93},{-10,-79}}))); + equation + connect(Maschinen_Strahlung.port, Konvektiv_Strahlung.Therm) + annotation (Line( + points={{32,-79},{38,-79},{38,-82},{50.8,-82}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Solltemperaturen.y[1], idealHeaterCoolerVar1_1.soll_heat) + annotation (Line( + points={{-59,-20},{-50,-20},{-50,-23},{-30.8,-23}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(sumHeatLoad.u1,idealHeaterCoolerVar1_1.heatMeter.p); + connect(sumHeatLoad.u2,idealHeaterCoolerVar1_2.coolMeter.p); + connect(Solltemperaturen.y[2], idealHeaterCoolerVar1_2.soll_cool) annotation ( + Line( + points={{-59,-20},{-44,-20},{-44,-43.2},{-30.8,-43.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(table_machines.y[2],Maschinen_Strahlung.Q_flow) annotation (Line( + points={{-9.3,-86},{-2,-86},{-2,-79},{6,-79}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Aussentemperatur.port, reducedModel.equivalentoutdoortemp) + annotation (Line( + points={{-14,59},{36.5,59},{36.5,56.8},{67.4,56.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Temperatur_Infiltration.y, reducedModel.outdoorairtemp) + annotation (Line( + points={{26.5,11},{38,11},{38,46.4},{67.4,46.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Infiltration.y, reducedModel.InfiltrationVentilationRate) + annotation (Line( + points={{50.5,11},{72.5,11},{72.5,40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(idealHeaterCoolerVar1_1.HeatCoolRoom, reducedModel.innerLoadskonv) + annotation (Line( + points={{-26,-29},{28,-29},{28,-28},{79.64,-28},{79.64,40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(idealHeaterCoolerVar1_2.HeatCoolRoom, reducedModel.surfaceCooling) + annotation (Line( + points={{-26,-57},{38,-57},{38,-54},{87.12,-54},{87.12,40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Maschinen_Strahlung.port, reducedModel.innerLoadskonv) + annotation (Line( + points={{32,-79},{32,-28},{30,-28},{28,-28},{28,-28},{79.64,-28},{ + 79.64,40}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.innerLoadsrad) annotation ( + Line( + points={{69.1,-82},{84,-82},{84,-84},{94.09,-84},{94.09,40}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation (experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false), + Icon(graphics), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}),graphics), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 11 of the VDI6007: Load calculation in compliance with the desired values of the indoor temperature and a setpoint for the type space S:

+

Based on Test Case 7

+ +

All values are given 7in the VDI6007.

+")); + end TestCase_11; + + model TestCase_12 + extends Modelica.Icons.Example; + + Utilities.HeatTransfer.HeatToStar Konvektiv_Strahlung(A=2) + annotation (Placement(transformation(extent={{48,-96},{68,-76}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Maschinen_Konvektion + annotation (Placement(transformation(extent={{46,-46},{66,-26}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Konvektion + annotation (Placement(transformation(extent={{16,-68},{36,-48}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + Personen_Strahlung + annotation (Placement(transformation(extent={{16,-94},{36,-74}}))); + Modelica.Blocks.Sources.CombiTimeTable Innere_Lasten( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=false, + table=[0,0,0; 3600,0,0; 7200,0,0; 10800,0,0; 14400,0,0; 18000,0,0; 21600,0, + 0; 25200,0,0; 25200,160,200; 28800,160,200; 32400,160,200; 36000,160, + 200; 39600,160,200; 43200,160,200; 46800,160,200; 50400,160,200; 54000, + 160,200; 57600,160,200; 61200,160,200; 61200,0,0; 64800,0,0; 72000,0,0; + 75600,0,0; 79200,0,0; 82800,0,0; 86400,0,0]) + annotation (Placement(transformation(extent={{-60,-76},{-40,-56}}))); + Building.LowOrder.BaseClasses.ReducedOrderModel reducedModel( + C1i=1.48216e+007, + Aw=7, + C1o=1.60085e+006, + epsi=1, + epso=1, + T0all(displayUnit="K") = 295.15, + R1i=0.000595515, + Ai=75.5, + RRest=0.042748777, + R1o=0.004366222, + Ao=10.5, + splitfac=0.09, + epsw=1, + g=1, + airload(V=0.1), + alphaiwi=2.2) + annotation (Placement(transformation(extent={{54,30},{88,70}}))); + Modelica.Blocks.Sources.CombiTimeTable Temperaturverlauf( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + columns={2,3,4}, + table=[0,291.95,0,0; 3600,291.95,0,0; 3600,290.25,0,0; 7200,290.25,0,0; + 7200,289.65,0,0; 10800,289.65,0,0; 10800,289.25,0,0; 14400,289.25,0,0; + 14400,289.65,0,0; 18000,289.65,0,0; 18000,290.95,0,0; 21600,290.95,0,0; + 21600,293.45,0,0; 25200,293.45,0,0; 25200,295.95,0,0; 28800,295.95,0,0; + 28800,297.95,0,0; 32400,297.95,0,0; 32400,299.85,0,0; 36000,299.85,0,0; + 36000,301.25,0,0; 39600,301.25,0,0; 39600,302.15,0,0; 43200,302.15,0,0; + 43200,302.85,0,0; 46800,302.85,0,0; 46800,303.55,0,0; 50400,303.55,0,0; + 50400,304.05,0,0; 54000,304.05,0,0; 54000,304.15,0,0; 57600,304.15,0,0; + 57600,303.95,0,0; 61200,303.95,0,0; 61200,303.25,0,0; 64800,303.25,0,0; + 64800,302.05,0,0; 68400,302.05,0,0; 68400,300.15,0,0; 72000,300.15,0,0; + 72000,297.85,0,0; 75600,297.85,0,0; 75600,296.05,0,0; 79200,296.05,0,0; + 79200,295.05,0,0; 82800,295.05,0,0; 82800,294.05,0,0; 86400,294.05,0,0]) + annotation (Placement(transformation(extent={{-60,18},{-40,38}}))); + Modelica.Blocks.Sources.CombiTimeTable Strahlung_Fenster( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + table=[0,0,0,0,0,0.0; 3600,0,0,0,0,0.0; 10800,0,0,0,0,0.0; 14400,0,0,0,0, + 0.0; 14400,0,0,17,0,0.0; 18000,0,0,17,0,0.0; 18000,0,0,38,0,0.0; + 21600,0,0,38,0,0.0; 21600,0,0,59,0,0.0; 25200,0,0,59,0,0.0; 25200,0,0, + 98,0,0.0; 28800,0,0,98,0,0.0; 28800,0,0,186,0,0.0; 32400,0,0,186,0, + 0.0; 32400,0,0,287,0,0.0; 36000,0,0,287,0,0.0; 36000,0,0,359,0,0.0; + 39600,0,0,359,0,0.0; 39600,0,0,385,0,0.0; 43200,0,0,385,0,0.0; 43200, + 0,0,359,0,0.0; 46800,0,0,359,0,0.0; 46800,0,0,287,0,0.0; 50400,0,0, + 287,0,0.0; 50400,0,0,186,0,0.0; 54000,0,0,186,0,0.0; 54000,0,0,98,0, + 0.0; 57600,0,0,98,0,0.0; 57600,0,0,59,0,0.0; 61200,0,0,59,0,0.0; + 61200,0,0,38,0,0.0; 64800,0,0,38,0,0.0; 64800,0,0,17,0,0.0; 68400,0,0, + 17,0,0.0; 68400,0,0,0,0,0.0; 72000,0,0,0,0,0.0; 82800,0,0,0,0,0.0; + 86400,0,0,0,0,0.0], + columns={2,3,4,5,6}) + annotation (Placement(transformation(extent={{-82,72},{-62,92}}))); + Utilities.Sources.PrescribedSolarRad Quelle_Fenster(n=5) + annotation (Placement(transformation(extent={{-54,72},{-34,92}}))); + Components.Weather.Sunblind sunblind(n=5, gsunblind={0,0,0.15,0,0}) + annotation (Placement(transformation(extent={{-24,71},{-4,91}}))); + Building.LowOrder.BaseClasses.SolarRadWeightedSum rad_weighted_sum( + n=5, weightfactors={0,0,7,0,0}) + annotation (Placement(transformation(extent={{4,72},{24,92}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature varTemp + annotation (Placement(transformation(extent={{-2,26},{18,46}}))); + Modelica.Blocks.Sources.CombiTimeTable Ventilationsrate( + table=[0,1.9048; 3600,1.9048; 7200,1.9048; 10800,1.9048; 14400,1.9048; + 18000,1.9048; 21600,1.9048; 25200,1.9048; 25200,0.95238; 28800, + 0.95238; 32400,0.95238; 36000,0.95238; 39600,0.95238; 43200,0.95238; + 46800,0.95238; 50400,0.95238; 54000,0.95238; 57600,0.95238; 61200, + 0.95238; 61200,1.9048; 64800,1.9048; 72000,1.9048; 75600,1.9048; + 79200,1.9048; 82800,1.9048; 86400,1.9048], + columns={2}, + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic) + annotation (Placement(transformation(extent={{-60,-18},{-40,2}}))); + Modelica.Blocks.Sources.CombiTimeTable reference( + tableName="UserProfilesOffice", + fileName="./Tables/J1615/UserProfilesOffice.txt", + tableOnFile=false, + columns={2}, + table=[3600,21.5; 7200,21.2; 10800,21; 14400,20.9; 18000,21; 21600,21.3; + 25200,21.9; 28800,24.1; 32400,24; 36000,24.4; 39600,24.8; 43200,25.1; + 46800,25.4; 50400,25.5; 54000,25.7; 57600,26.3; 61200,26.3; 64800, + 25.2; 68400,25; 72000,24.7; 75600,24.3; 79200,24; 82800,23.8; 86400, + 23.6; 781200,29.1; 784800,28.7; 788400,28.5; 792000,28.3; 795600,28.3; + 799200,28.6; 802800,29.1; 806400,31.8; 810000,31.7; 813600,32; 817200, + 32.3; 820800,32.6; 824400,32.8; 828000,32.9; 831600,33; 835200,33.6; + 838800,33.5; 842400,31.8; 846000,31.5; 849600,31.1; 853200,30.7; + 856800,30.3; 860400,30.1; 864000,29.8; 5101200,30.5; 5104800,30; + 5108400,29.8; 5112000,29.6; 5115600,29.6; 5119200,29.8; 5122800,30.3; + 5126400,33.1; 5130000,33; 5133600,33.3; 5137200,33.7; 5140800,33.9; + 5144400,34.1; 5148000,34.2; 5151600,34.3; 5155200,34.9; 5158800,34.8; + 5162400,33; 5166000,32.7; 5169600,32.2; 5173200,31.8; 5176800,31.4; + 5180400,31.2; 5184000,30.9], + extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint) + annotation (Placement(transformation(extent={{-96,-38},{-76,-19}}))); + equation + connect(Personen_Strahlung.port, Konvektiv_Strahlung.Therm) annotation ( + Line( + points={{36,-84},{42,-84},{42,-86},{48.8,-86}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Konvektion.Q_flow) annotation (Line( + points={{-39,-66},{-12,-66},{-12,-58},{16,-58}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[1],Personen_Strahlung.Q_flow) annotation (Line( + points={{-39,-66},{-8,-66},{-8,-84},{16,-84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Innere_Lasten.y[2],Maschinen_Konvektion.Q_flow) annotation (Line( + points={{-39,-66},{-8,-66},{-8,-36},{46,-36}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Temperaturverlauf.y[1], varTemp.T) annotation (Line( + points={{-39,28},{-22,28},{-22,36},{-4,36}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Strahlung_Fenster.y, Quelle_Fenster.u) annotation (Line( + points={{-61,82},{-54,82}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Quelle_Fenster.solarRad_out, sunblind.Rad_In) annotation (Line( + points={{-35,82},{-23,82}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(varTemp.port, reducedModel.equalAirTemp) annotation (Line( + points={{18,36},{-6,36},{-6,32},{-14,32},{-14,50.8},{57.4,50.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(sunblind.Rad_Out, rad_weighted_sum.solarRad_in) annotation (Line( + points={{-5,82},{5,82}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(rad_weighted_sum.solarRad_out, reducedModel.solarRad_in) + annotation (Line( + points={{23,82},{32,82},{32,60.8},{57.23,60.8}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(Ventilationsrate.y[1], reducedModel.ventilationTemperature) + annotation (Line( + points={{-39,-8},{-10,-8},{-10,-6},{44,-6},{44,40.4},{57.4,40.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Maschinen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{66,-36},{36,-36},{36,-16},{74.4,-16},{74.4,34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Temperaturverlauf.y[1], reducedModel.ventilationRate) annotation ( + Line( + points={{-39,28},{-20,28},{-20,10},{64.2,10},{64.2,34}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Personen_Konvektion.port, reducedModel.internalGainsConv) + annotation (Line( + points={{36,-58},{6,-58},{6,-16},{74.4,-16},{74.4,34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Konvektiv_Strahlung.Star, reducedModel.internalGainsRad) + annotation (Line( + points={{67.1,-86},{84.09,-86},{84.09,34}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), + graphics), + experiment(StopTime=5.184e+006, Interval=3600), + __Dymola_experimentSetupOutput(events=false), + Icon(graphics), + Documentation(revisions=" +

February 2014, by Peter Remmen:

Implemented

+", info=" +

Test Case 12 of the VDI6007: Calculation of the reaction indoor temperature to mixed inner and outer heat sources for Type Room S:

+

Based on Test Case 5

+

+

All values are given in the VDI6007.

+")); + end TestCase_12; + + package VDIComponents + "BaseClass-Components with modifications to fulfill requirements of Test Cases" + extends Modelica.Icons.Package; + model EqAirTemp_TestCase_8 + + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowo=20 + "Outer wall's coefficient of heat transfer (outer side)"; + parameter Real aowo=0.6 + "Coefficient of absorption of the outer walls"; + parameter Real eowo=0.9 "Coefficientasdission of the outer walls"; + parameter Integer n=5 "Number of orientations (without ground)"; + //parameter Real orientationswallsvertical[n]={0,90,180,270,0} "orientations of the walls against the horizontal (n,e,s,w)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + //parameter Real orientationswallshorizontal[n]={90,90,90,90,0} "orientations of the walls against the vertical (wall,roof)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + parameter Real wf_wall[n]={0.5,0.2,0.2,0.1,0} + "Weight factors of the walls"; + //parameter Integer m=4 "Number of window orientations"; + //parameter Real orientationswindowsvertical[m]={0,90,180,270,0} "orientations of the windows against the horizontal (n,e,s,w)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + //parameter Real orientationswindowshorizontal[m]={90,90,90,90,0} "orientations of the windows against the vertical (wall,roof)"; //Muss rein bei genauer Beachtung der Orientierungen ueber phi fuer die langwellige Strahlung + parameter Real wf_win[n]={0,0,0,0,0} "Weight factors of the windows"; + parameter Real wf_ground=0 + "Weight factor of the ground (0 if not considered)"; + parameter Modelica.SIunits.Temp_K T_ground=284.15 + "Temperature of the ground in contact with ground slab"; + protected + parameter Real phiprivate=0.5; //Phi muss für horizontal geneigte Flaechen agepasst werden + parameter Real unitvec[n]=ones(n); + // parameter Real unitvecwindow[m]=ones(m); + public + Modelica.Blocks.Interfaces.RealInput WeatherDataVector[3] + "[1]: Air temperature
[2]: Horizontal radiation of sky
[3]: Horizontal radiation of earth" + annotation (Placement(transformation(extent={{-120,-20},{-80,20}}), + iconTransformation(extent={{-100,-20},{-60,20}}))); //Muss noch auf neues Modell von Ana angepasst werden + Utilities.Interfaces.SolarRad_in Rad_In[n] annotation (Placement( + transformation(extent={{-100,56},{-80,76}}), + iconTransformation(extent={{-99,42},{-71,70}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a equalairtemp + annotation (Placement(transformation(extent={{80,-6},{100,14}}), + iconTransformation(extent={{60,-20},{100,20}}))); + + Modelica.SIunits.TemperatureDifference T_earth + "radiative temperature of the land surface"; + Modelica.SIunits.TemperatureDifference T_sky + "radiative temperature of the sky"; + + Modelica.SIunits.Temp_K T_eqWall[n] "temperature equal wall"; + Modelica.SIunits.Temp_K T_eqWin[n] "temperature equal window"; + + protected + Modelica.SIunits.RadiantEnergyFluenceRate E_earth + "Iradiation from land surface"; + Modelica.SIunits.RadiantEnergyFluenceRate E_sky "Iradiation from sky"; + + Modelica.SIunits.Temp_K T_air "outdoor air temperature"; + + Modelica.SIunits.TemperatureDifference T_eqLWs + "equal long wave scalar"; + Modelica.SIunits.TemperatureDifference T_eqLW[n] "equal long wave"; + Modelica.SIunits.TemperatureDifference T_eqSW[n] "equal short wave"; + + Modelica.SIunits.CoefficientOfHeatTransfer alpharad; + + public + Modelica.Blocks.Interfaces.RealInput sunblindsig[n] + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-10,100}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={0,80}))); + + initial equation + assert(n==size(wf_wall,1),"weightfactorswall has to have n elements"); + assert(n==size(wf_win,1),"weightfactorswall has to have n elements"); + if ((sum(wf_wall)+sum(wf_win)+wf_ground)<>0.00001)==false then + Modelica.Utilities.Streams.print("WARNING!:The sum of the weightfactors (walls,windows and ground) in eqairtemp is 0. This means, that eqairtemp is 0 °C. If there are no walls, windows and ground at all, this might be irrelevant."); + end if; + if (abs((sum(wf_wall)+sum(wf_win)+wf_ground)-1)>0.1) then + Modelica.Utilities.Streams.print("WARNING!:The sum of the weightfactors (walls,windows and ground) in eqairtemp is <0.9 or >1.1. Normally, the sum should be 1, as the influence of all weightfactors should the whole influence on the temperature."); + end if; + equation + if cardinality(sunblindsig)<1 then + sunblindsig=fill(0,n); + end if; + + T_air=WeatherDataVector[1]; + E_sky=WeatherDataVector[2]; + E_earth=WeatherDataVector[3]; + if (abs(E_sky+E_earth)<0.1) then + alpharad=5.0; + else + alpharad=(E_sky+E_earth)/(T_sky-T_earth); + end if; + + T_earth=((-E_earth/(0.93*5.67))^0.25)*100;//-273.15 + T_sky=((E_sky/(0.93*5.67))^0.25)*100;//-273.15 + + T_eqLWs=0; + T_eqLW={0,0,0,0,0}; + + T_eqSW=Rad_In.I*aowo/alphaowo; + + T_eqWin=(T_air*unitvec)+T_eqLW; + T_eqWall=(T_air+T_eqLWs)*unitvec+T_eqSW; + // T_ground is currently a parameter + + //temperatureequalwindowcelsius = Modelica.SIunits.Conversions.to_degC(temperatureequalwindow); + //temperatureequalwallcelsius = Modelica.SIunits.Conversions.to_degC(temperatureequalwall); + //temperaturegroundcelsius = Modelica.SIunits.Conversions.to_degC(temperatureground); + + equalairtemp.T = T_eqWall*wf_wall + T_eqWin*wf_win + T_ground*wf_ground; + + annotation (Diagram(graphics), Icon(graphics={ + Rectangle( + extent={{-70,-76},{78,76}}, + lineColor={0,128,255}, + lineThickness=1, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,46},{60,-76}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,46},{2,46},{60,74},{60,70},{60,46}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,85,85}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,72},{-28,40}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,-76},{78,-90}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Forward), + Line( + points={{-54,-74},{-58,-66},{-50,-62},{-56,-54},{-52,-50},{-54,-44}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1), + Line( + points={{-58,-48},{-54,-40},{-50,-46}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-40,-74},{-44,-66},{-36,-62},{-42,-54},{-38,-50},{-40,-44}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1), + Line( + points={{-44,-48},{-40,-40},{-36,-46}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-50,34},{-50,10}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-36,36},{-24,14}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{-24,46},{-6,32}}, + color={255,255,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{12,-30},{12,-68},{6,-70},{4,-60},{4,-30},{10,-22},{12,-30}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier), + Line( + points={{10,-48},{12,-38},{14,-48}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier)}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Known Limitations

+

The heat transfer through the radiance is considered by an alpha. It is computed and is somewhere around 5. In cases of exorbitant high radiance values, this alpha could be not as accurate as a real T^4 equation.

+

The longwave radiation is normally also considered for each direction separately, but this means that you need the angles for each direction. As the longwave term has no great impact on the equivalent temperature, the improvement is not worth the costs. Phiprivate is set to 0.5. Nonetheless, the parameters are prepared, but the equations for phiprivate ( in which the angles have an effect) are not yet implemented.

+

In addition, the convective heat transfer coefficient alpha is weighted over the areas per each direction. In VDI 6007, alpha is considered for each element and not averaged per direction. This may cause deviations if the alphas of the single elements are considerabely different.

+

Concept

+

To the air temperature is added (or substracted) a term for longwave radiation and one term for shortwave radiation. As the shortwave radiation is taken into account only for the walls and the windows can be equipped with a shading, the equal temperatures are computed separately for the windows and for the walls. Due to the different beams in different directions, the temperatures are also computed separately for each direction. You need one weightfactor per direction and wall or window, e.g. 4 directions means 8 weightfactors (4 windows, 4 walls). Additionally, one weightfactor for the ground (for the ground temperature) .

+


First, a temperature of the earth (not the ground temperature!) and temperature of the sky are computed. The difference is taken into account for the longwave radiance term.

+

For the windows, the shading input is considered on the longwave term.

+

For the walls, the shortwave radiance term is computed with the beam of the radiance input.

+

The n temperature of the walls, the n temperature of the windows and the ground temperature are weighted with the weightfactors and summed up. As this equations only works in °C, the unit is changed and rechanged to use Kelvin for the heat port again.

+



References

+ +

Example Results

+

See Validation for some results.

+", revisions=" +

+")); + end EqAirTemp_TestCase_8; + + model ReducedOrderModel_surfaceCooling + "Modell corresponding to VDI 6007" + + parameter Boolean withInnerwalls=true "If inner walls are existent" annotation(Dialog(tab="Inner walls")); + parameter Modelica.SIunits.ThermalResistance R1i=0.0005955 + "Resistor 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1i=14860000 + "Capacity 1 inner wall" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Area Ai=75.5 "Inner wall area" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Temp_K T0all=295.15 + "Initial temperature for all components"; + parameter Boolean withWindows=true "If windows are existent" annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withOuterwalls then true else false)); + parameter Real splitfac=0 + "Factor for conv. part of rad. through windows" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Aw=10.5 "Window area" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.Emissivity epsw=0.95 + "Emissivity of the windows" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Modelica.SIunits.TransmissionCoefficient g=0.7 + "Total energy transmittance" + annotation(Dialog(tab="Outer walls",group = "Windows",enable = if withWindows and withOuterwalls then true else false)); + parameter Boolean withOuterwalls=true + "If outer walls (including windows) are existent" annotation(Dialog(tab="Outer walls")); + parameter Modelica.SIunits.ThermalResistance RRest=0.0427487 + "Resistor Rest outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.ThermalResistance R1o=0.004366 + "Resistor 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.HeatCapacity C1o=1557570 + "Capacity 1 outer wall" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Area Ao=10.5 "Outer wall area" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Volume Vair=52.5 + "Volume of the air in the zone" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaiwi=2.7 + "Coefficient of heat transfer for inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowi=2.7 + "Outer wall's coefficient of heat transfer (inner side)" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + parameter Modelica.SIunits.Density rhoair=1.19 "Density of the air" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.SpecificHeatCapacity cair=1007 + "Heat capacity of the air" + annotation(Dialog(tab="Room air")); + parameter Modelica.SIunits.Emissivity epsi=0.95 + "Emissivity of the inner walls" + annotation(Dialog(tab="Inner walls",enable = if withInnerwalls then true else false)); + parameter Modelica.SIunits.Emissivity epso=0.95 + "Emissivity of the outer walls" + annotation(Dialog(tab="Outer walls",enable = if withOuterwalls then true else false)); + + Components.DryAir.Airload airload( + V=Vair, + rho=rhoair, + c=cair) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={2,2}))); + Utilities.HeatTransfer.HeatConv conv_innerwall(A=Ai, alpha=alphaiwi) if + withInnerwalls + annotation (Placement(transformation(extent={{28,-10},{48,10}}))); + + Building.LowOrder.BaseClasses.SimpleOuterWall outerwall( + RRest=RRest, + R1=R1o, + C1=C1o, + T0=T0all) if withOuterwalls annotation (Placement( + transformation(extent={{-70,-10},{-50,10}}))); + Building.LowOrder.BaseClasses.SimpleInnerWall innerwall( + R1=R1i, + C1=C1i, + T0=T0all) if withInnerwalls annotation (Placement( + transformation(extent={{56,-10},{76,10}}))); + + Utilities.HeatTransfer.HeatConv conv_outerwall_innerside(A=Ao, alpha= + alphaowi) if withOuterwalls + annotation (Placement(transformation(extent={{-24,-10},{-44,10}}))); + + Utilities.HeatTransfer.HeatToStar rad_outerwall_innerside(eps= + epso, A=Ao) if withOuterwalls annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-46,22}))); + Utilities.HeatTransfer.HeatToStar rad_innerwall(A=Ai, eps=epsi) if withInnerwalls + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=270, + origin={52,22}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a innerLoadskonv(T( + nominal=273.15 + 22, + min=273.15 - 30, + max=273.15 + 60)) annotation (Placement(transformation(extent={{-4,-100}, + {16,-80}}), iconTransformation(extent={{-28,-100},{12,-60}}))); + Components.DryAir.VarAirExchange airexchange( + V=Vair, + c=cair, + rho=rhoair) annotation (Placement(transformation(extent={{-44,-40}, + {-24,-20}}))); + Modelica.Blocks.Interfaces.RealInput InfiltrationVentilationRate + annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=270, + origin={-40,-100}), iconTransformation( + extent={{20,-20},{-20,20}}, + rotation=270, + origin={-50,-80}))); + protected + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + outdoorairtemp1 annotation (Placement(transformation(extent={{-74,-64}, + {-54,-44}}))); + public + Modelica.Blocks.Interfaces.RealInput outdoorairtemp + annotation (Placement(transformation(extent={{-120,-82},{-80,-42}}), + iconTransformation(extent={{-100,-28},{-60,-68}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a equivalentoutdoortemp if + withOuterwalls + annotation (Placement(transformation(extent={{-110,-20},{-70,20}}), + iconTransformation(extent={{-100,-16},{-60,24}}))); + Utilities.Interfaces.Star innerLoadsrad annotation (Placement( + transformation(extent={{70,-100},{90,-80}}), + iconTransformation(extent={{54,-102},{100,-58}}))); + Utilities.HeatTransfer.SolarRadToHeat conv_window_rad(coeff=g, A= + Aw) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-46,74},{-26,94}}, + rotation=0))); + Utilities.Interfaces.SolarRad_in Rad_In if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-102,60},{-82,80}}, + rotation=0), iconTransformation(extent={{-102,34},{-60,74}}))); + + Building.LowOrder.BaseClasses.SolarRadMultiplier rad_split_rad(x= + 1 - splitfac) if + withWindows and withOuterwalls annotation ( + Placement(transformation(extent={{-72,72},{-52,92}}))); + Building.LowOrder.BaseClasses.SolarRadMultiplier rad_split_conv(x= + splitfac) if + withWindows and withOuterwalls annotation (Placement( + transformation(extent={{-72,48},{-52,68}}))); + Utilities.HeatTransfer.SolarRadToHeat conv_window_conv(A=Aw, + coeff=g) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-46,50},{-26,70}}, + rotation=0))); + Utilities.HeatTransfer.HeatToStar rad_window(A=Aw, eps=epsw) if withWindows and withOuterwalls + annotation (Placement(transformation(extent={{-20,72},{0,92}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a surfaceCooling(T( + nominal=273.15 + 22, + min=273.15 - 30, + max=273.15 + 60)) annotation (Placement(transformation(extent={{40,-100}, + {60,-80}}), iconTransformation(extent={{16,-100},{56,-60}}))); + initial equation + if abs(Aw) < 0.00001 and withWindows then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel, withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + if abs(Ao) < 0.00001 and withOuterwalls then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel,withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + if abs(Ai) < 0.00001 and withInnerwalls then + Modelica.Utilities.Streams.print("WARNING!:in ReducedModel,withWindows is true (windows existent), but the area of the windows Aw is zero (or nearly zero). This might cause an error."); + end if; + + equation + if withWindows and withOuterwalls then + connect(conv_window_rad.heatPort, rad_window.Therm) annotation (Line( + points={{-27,82},{-19.2,82}}, + color={191,0,0}, + smooth=Smooth.None)); + if withOuterwalls then + else + assert(withOuterwalls,"There must be outer walls, windows have to be counted too!"); + end if; + if withInnerwalls then + end if; + end if; + + if withOuterwalls then + connect(equivalentoutdoortemp, outerwall.port_a) annotation (Line( + points={{-90,0},{-80,0},{-80,-0.909091},{-70,-0.909091}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outerwall.port_b, rad_outerwall_innerside.Therm) + annotation (Line( + points={{-50,-0.909091},{-46,-0.909091},{-46,12.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outerwall.port_b,conv_outerwall_innerside.port_b) + annotation (Line( + points={{-50,-0.909091},{-46.5,-0.909091},{-46.5,0},{-44,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(conv_outerwall_innerside.port_a, airload.port) + annotation (Line( + points={{-24,0},{-24,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + if withInnerwalls then + else + end if; + end if; + + if withInnerwalls then + connect(innerwall.port_a,conv_innerwall.port_b) + annotation (Line( + points={{56,-0.909091},{51.5,-0.909091},{51.5,0},{48,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(innerLoadsrad, rad_innerwall.Star) annotation (Line( + points={{80,-90},{80,54},{10,54},{10,40},{52,40},{52,31.1}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + end if; + + connect(outdoorairtemp1.T, outdoorairtemp) annotation (Line( + points={{-76,-54},{-88,-54},{-88,-62},{-100,-62}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(airexchange.port_b, airload.port) annotation ( + Line( + points={{-24,-30},{-16,-30},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(innerLoadskonv, airload.port) annotation (Line( + points={{6,-90},{6,-30},{-16,-30},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(airload.port,conv_innerwall.port_a) annotation (Line( + points={{-7,0},{-16,0},{-16,-30},{20,-30},{20,0},{28,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rad_innerwall.Therm, innerwall.port_a) annotation (Line( + points={{52,12.8},{52,-0.909091},{56,-0.909091}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rad_outerwall_innerside.Star, innerLoadsrad) annotation (Line( + points={{-46,31.1},{-46,40},{10,40},{10,54},{80,54},{80,-90}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(rad_window.Star, innerLoadsrad) annotation (Line( + points={{-0.9,82},{10,82},{10,54},{80,54},{80,-90}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(conv_window_conv.heatPort, airload.port) annotation (Line( + points={{-27,58},{-16,58},{-16,0},{-7,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(outdoorairtemp1.port, airexchange.port_a) annotation (Line( + points={{-54,-54},{-78,-54},{-78,-30},{-44,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(InfiltrationVentilationRate, airexchange.InPort1) annotation (Line( + points={{-40,-100},{-40,-60},{-50,-60},{-50,-36.4},{-43,-36.4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(surfaceCooling,conv_innerwall.port_b) annotation (Line( + points={{50,-90},{50,0},{48,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Rad_In, rad_split_rad.solarRad_in) annotation (Line( + points={{-92,70},{-82,70},{-82,82},{-71,82}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(rad_split_conv.solarRad_in, Rad_In) annotation (Line( + points={{-71,58},{-78,58},{-78,70},{-92,70}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(rad_split_conv.solarRad_out, conv_window_conv.solarRad_in) + annotation (Line( + points={{-53,58},{-46.1,58}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(rad_split_rad.solarRad_out, conv_window_rad.solarRad_in) + annotation (Line( + points={{-53,82},{-46.1,82}}, + color={255,128,0}, + smooth=Smooth.None)); + annotation (Line( + points={{50,-90},{-4,-90},{-4,-90},{50,-90}}, + color={191,0,0}, + smooth=Smooth.None), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), + experiment(StopTime=864000), + experimentSetupOutput, + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), + graphics={ + Rectangle( + extent={{-60,74},{100,-72}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{14,38},{46,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{14,12},{46,-14}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{-18,12},{14,-14}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1), + Rectangle( + extent={{-18,38},{14,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=1)}), + Documentation(info=" +

Overview

+ +

Level of Development

+

+

Concept

+

The concept is described in VDI 6007. All outer walls and inner walls (including the windows) are merged together to one wall respectively. The inner walls are used as heat storages only, there is no heat transfer out of the zone (adiabate). This assumption is valid as long as the walls are in the zone or touch zones with a similar temperature. All walls, which touch other thermal zones are put together in the outer walls, which have an heat transfer with EqAirTemp.

+

The two different "wall types" are connected through a convective heat circuit and a star circuit (different as in VDI 6007). As the air node can only react to convective heat, it is integrated in the convectice heat circuit. To add miscellaneous other heat sources/sinks (inner loads, heating) to the circiuts, there is one heat port to the convective circuit and one star port to the star circuit.

+

The last influence is the solar radiation through the windows. The heat transfer through the windows is considered in the outer walls. The beam is considered in the star circuit. There is a bypass from the beam to the convective circuit implemented, as a part of the beam is sometimes considered directly as convective heat.

+


References

+ +

Example Results

+

See Vadliation for some results.

+", revisions=" +

+")); + end ReducedOrderModel_surfaceCooling; + end VDIComponents; + annotation ( + conversion(noneFromVersion="", noneFromVersion="1")); + end VDI6007; + + annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + fillPattern=FillPattern.None, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); + end Validation; + + package Examples + extends Modelica.Icons.ExamplesPackage; + + model LowOrderExample + extends Modelica.Icons.Example; + import AixLib; + output Real TRoom; + output Real heatDemand; + output Real coolDemand; + + ThermalZone thermalZone(zoneParam= + AixLib.DataBase.Buildings.OfficePassiveHouse.OPH_1_Meeting()) + annotation (Placement(transformation(extent={{-10,-12},{16,14}}))); + Components.Weather.Weather weather( + fileName= + "modelica://AixLib/Resources/WeatherData/TRY2010_12_Jahr_Modelica-Library.txt", + Air_temp=true, + Sky_rad=true, + Ter_rad=true, + Outopt=1) + annotation (Placement(transformation(extent={{-60,42},{-30,62}}))); + + Utilities.Sources.HeaterCooler.IdealHeaterCoolerVar1 + idealHeaterCoolerVar1_1 + annotation (Placement(transformation(extent={{-22,-52},{-2,-32}}))); + Modelica.Blocks.Sources.Constant infiltrationRate(k=1) + annotation (Placement(transformation(extent={{-88,-32},{-74,-18}}))); + Modelica.Blocks.Sources.Constant infiltrationTemperature(k=288.15) + annotation (Placement(transformation(extent={{-88,-10},{-74,4}}))); + Modelica.Blocks.Sources.CombiTimeTable internalGains( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableOnFile=true, + tableName="UserProfiles", + fileName= + "modelica://AixLib/Resources/LowOrder_ExampleData/UserProfiles_18599_SIA_Besprechung_Sitzung_Seminar.txt", + columns={2,3,4}) + annotation (Placement(transformation(extent={{14,-71},{28,-57}}))); + + Modelica.Blocks.Sources.CombiTimeTable heatingCooling( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + tableName="UserProfilesHeat", + fileName= + "modelica://AixLib/Resources/LowOrder_ExampleData/UserProfilesHeatSimple.txt", + columns={2,3}, + tableOnFile=false) + annotation (Placement(transformation(extent={{-56,-75},{-42,-61}}))); + + equation + TRoom=thermalZone.thermalZonePhysics.reducedOrderModel.airload.T; + heatDemand=idealHeaterCoolerVar1_1.heatMeter.q_kwh; + coolDemand=idealHeaterCoolerVar1_1.coolMeter.q_kwh; + connect(weather.SolarRadiation_OrientedSurfaces, thermalZone.solarRad_in) + annotation (Line( + points={{-52.8,41},{-52.8,8.8},{-7.4,8.8}}, + color={255,128,0}, + smooth=Smooth.None)); + connect(idealHeaterCoolerVar1_1.HeatCoolRoom, thermalZone.internalGainsConv) + annotation (Line( + points={{-3,-42},{3,-42},{3,-10.7}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(infiltrationRate.y, thermalZone.infiltrationRate) annotation ( + Line( + points={{-73.3,-25},{-2.2,-25},{-2.2,-10.44}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(infiltrationTemperature.y, thermalZone.infiltrationTemperature) + annotation (Line( + points={{-73.3,-3},{-40.65,-3},{-40.65,-4.07},{-6.75,-4.07}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(weather.WeatherDataVector, thermalZone.weather) annotation (Line( + points={{-45.1,41},{-45.1,1},{-6.62,1}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(internalGains.y, thermalZone.internalGains) annotation (Line( + points={{28.7,-64},{34,-64},{34,-34},{13.4,-34},{13.4,-10.44}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heatingCooling.y[1], idealHeaterCoolerVar1_1.soll_heat) + annotation (Line( + points={{-41.3,-68},{-9,-68},{-9,-46.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heatingCooling.y[2], idealHeaterCoolerVar1_1.soll_cool) + annotation (Line( + points={{-41.3,-68},{-16.8,-68},{-16.8,-46.8}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), graphics), Documentation(info=" +

Overview

+

Example for setting up a simulation for a thermal zone.

+

Concept

+

Calculation of room temperatures and heating and cooling demands.

+", revisions=" + +")); + end LowOrderExample; + end Examples; + annotation (Documentation(info=" +

Overview

+

Package of Low Order Models for thermal building simulations.

+

Level of Development

+

+

Concept

+

The Low Order library provides low order models for thermal building simulation using a bundle of simplifications. One major question is the number of capacitances used to discretize thermal masses and to describe heat storage and transfer effects. This number defines the order of the model. Further simplifications are made for the consideration of long-wave radiation exchange, outdoor as well as indoor radiation exchange.

+

Most of the models in this package base on the German Guideline VDI 6007, though some changes have been applied, especially regarding long-wave radiation exchange. All models have been validated using test cases given in VDI 6007 (see Validation) and ASHRAE 140.

+

Thermal Zone serves as a ready-to-use model and represents one thermal zone that can be connected to external loads, weather and variable internal gains or sinks, radiative as well as convective. It calculates the indoor air temperature and is usually connectd to heating and cooling devices that calculate heat and cool demands. It is thus some kind of heating and cooling load generator. This model has been developed in the context of city district simulations and thus extensively tested for this purpose. Nevertheless, it has also been applied in different simulations of single buildings for e.g. control strategy optimization. Thermal Zone uses all sub-models given in BaseClasses with Thermal Zone Physics, EqAirTemp and Reduced Order Model being the main sub-models.

+

For an easy-to-use parameterization of Thermal Zone, all parameters have been bundled in one ZoneBaseRecord. To simulate a specific building, calculate and collect all parameters and define a new record according to your building.

+

References

+ +", revisions=" +

2014-06-24: Version 1.0: by Moritz Lauster

+

+

2014-05-19: Version 0.9: by Moritz Lauster

+

+ +

The AixLib library uses the following conventions in addition to the ones of the Modelica Standard Library:

+
    +
  1. +
  2. Names of models, blocks and packages should start with an upper-case letter and be a noun or a noun with a combination of adjectives and nouns. Use camel-case notation to combine multiple words, such as HeatTransfer
  3. +
  4. Comments should be added to each class (package, model, function etc.). The first character should be upper case. For one-line comments of parameters, variables and classes, no period should be used at the end of the comment.
  5. +
  6. Where applicable, all variable must have units, also if the variable is protected.
  7. +
  8. To indicate that a class (i.e., a package, model, block etc.) has not been extensively tested or validated, its class name ends with the string _UC.
  9. +
  10. Please use the following check list each time you make a new model.
  11. +

      +
    1. Name the model according to the naming conventions
    2. +
    3. Comment the code
    4. +
    5. Build an example for testing the model
    6. +
    7. Are the results from the test plausible
    8. +
    9. Write a complete documentation
    10. +
      • +
      • Concept
      • +
      • Detailed description
      • +
      • Limitations
      • +
      • References (!)
      • +
        • +
        • for equations
        • +
        • records only with catalogue data
        • +
        • Add catalogue data in your literature databank (e.g.JabRef) unsing the Keyword: ModelicaDataBase
        • +
      • +
      • Links and cross references
      • +
      • Revisions – date, name and what was changed
      • +
      • Stars
      • +
    11. +
    12. Expand the test script with the new example (if used)
    13. +
    +

+ +")); + end Conventions; + + package ReleaseNotes "Release notes" + extends Modelica.Icons.ReleaseNotes; + end ReleaseNotes; + + class Contact "Contact" + extends Modelica.Icons.Contact; + annotation (Documentation(info=" +

Contact

+

+ The development of the AixLib library is organized by
+ Modelica Group
+ RWTH Aachen University
+ E.ON Energy Research Center
+ Institute for Energy Efficient Buildings and Indoor Climate
+ Mathieustraße 10
+ D-52074 Aachen
+ Germany
+ email: aixlib@eonerc.rwth-aachen.de
+

+ + ")); + end Contact; + + class Acknowledgements "Acknowledgements" + extends Modelica.Icons.Information; + annotation (Documentation(info=" +

Acknowledgements

+

+ The following people from RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate have directly contributed to the implementation of the AixLib library +

    +
  • Ana Constantin +
  • +
  • Björn Flieger +
  • +
  • Marcus Fuchs +
  • +
  • Kristian Huchtemann +
  • +
  • Pooyan Jahangiri +
  • +
  • Amir Javadi +
  • +
  • Moritz Lauster +
  • +
  • Peter Matthes +
  • +
  • Ole Odendahl +
  • +
  • Markus Schumacher +
  • +
  • Sebastian Stinner +
  • +
  • Mark Wesseling +
  • +
+

+ + ")); + end Acknowledgements; + + class License "Modelica License 2" + extends Modelica.Icons.Information; + annotation (Documentation(info=" +

The Modelica License 2

+

+Preamble. The goal of this license is that Modelica related model libraries, software, images, documents, data files etc. can be used freely in the original or a modified form, in open source and in commercial environments (as long as the license conditions below are fulfilled, in particular sections 2c) and 2d). The Original Work is provided free of charge and the use is completely at your own risk. Developers of free Modelica packages are encouraged to utilize this license for their work. +

+

+The Modelica License applies to any Original Work that contains the following licensing notice adjacent to the copyright notice(s) for this Original Work: +

+

+This version of the license including exceptions has been inspired by the license of Buildings library published by The Regents of the University of California, through Lawrence Berkeley National Laboratory. +

+

+Note. This is the standard Modelica License 2, except for the following changes: the parenthetical in paragraph 7., paragraph 5., and the addition of paragraph 15.d). +

+

+Licensed by RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate under the Modelica License 2 +

+ +

1. Definitions

+
  1. +\"License\" is this Modelica License. +
  2. +\"Original Work\" is any work of authorship, including software, images, documents, data files, that contains the above licensing notice or that is packed together with a licensing notice referencing it. +
  3. +\"Licensor\" is the provider of the Original Work who has placed this licensing notice adjacent to the copyright notice(s) for the Original Work. The Original Work is either directly provided by the owner of the Original Work, or by a licensee of the owner. +
  4. +\"Derivative Work\" is any modification of the Original Work which represents, as a whole, an original work of authorship. For the matter of clarity and as examples: +
      +
    1. +Derivative Work shall not include work that remains separable from the Original Work, as well as merely extracting a part of the Original Work without modifying it. +
    2. +Derivative Work shall not include (a) fixing of errors and/or (b) adding vendor specific Modelica annotations and/or (c) using a subset of the classes of a Modelica package, and/or (d) using a different representation, e.g., a binary representation. +
    3. +Derivative Work shall include classes that are copied from the Original Work where declarations, equations or the documentation are modified. +
    4. +Derivative Work shall include executables to simulate the models that are generated by a Modelica translator based on the Original Work (of a Modelica package).
    5. +
    +
  5. +
  6. +\"Modified Work\" is any modification of the Original Work with the following exceptions: (a) fixing of errors and/or (b) adding vendor specific Modelica annotations and/or (c) using a subset of the classes of a Modelica package, and/or (d) using a different representation, e.g., a binary representation. +
  7. +\"Source Code\" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. +
  8. +\"You\" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. +
  9. +\"Modelica package\" means any Modelica library that is defined with the + package <Name> ... end <Name>; Modelica language element. +
  10. +
+ +

2. Grant of Copyright License

+

+Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: +

+
    +
  1. +To reproduce the Original Work in copies, either alone or as part of a collection. +
  2. +To create Derivative Works according to Section 1d) of this License. +
  3. +To distribute or communicate to the public copies of the Original Work or a Derivative Work under this License. No fee, neither as a copyright-license fee, nor as a selling fee for the copy as such may be charged under this License. Furthermore, a verbatim copy of this License must be included in any copy of the Original Work or a Derivative Work under this License. +
    +For the matter of clarity, it is permitted A) to distribute or communicate such copies as part of a (possible commercial) collection where other parts are provided under different licenses and a license fee is charged for the other parts only and B) to charge for mere printing and shipping costs. +
  4. +To distribute or communicate to the public copies of a Derivative Work, alternatively to Section 2c), under any other license of your choice, especially also under a license for commercial/proprietary software, as long as You comply with Sections 3, 4 and 8 below. +
    +For the matter of clarity, no restrictions regarding fees, either as to a copyright-license fee or as to a selling fee for the copy as such apply. +
  5. +To perform the Original Work publicly. +
  6. +To display the Original Work publicly. +
+ +

3. Acceptance

+

+Any use of the Original Work or a Derivative Work, or any action according to either Section 2a) to 2f) above constitutes Your acceptance of this License. +

+ +

4. Designation of Derivative Works and of Modified Works

+

+The identifying designation of Derivative Work and of Modified Work must be different to the corresponding identifying designation of the Original Work. This means especially that the (root-level) name of a Modelica package under this license must be changed if the package is modified (besides fixing of errors, adding vendor specific Modelica annotations, using a subset of the classes of a Modelica package, or using another representation, e.g. a binary representation). +

+ +

5. [reserved]

+

6. Provision of Source Code

+

+Licensor agrees to provide You with a copy of the Source Code of the Original Work but reserves the right to decide freely on the manner of how the Original Work is provided. For the matter of clarity, Licensor might provide only a binary representation of the Original Work. In that case, You may (a) either reproduce the Source Code from the binary representation if this is possible (e.g., by performing a copy of an encrypted Modelica package, if encryption allows the copy operation) or (b) request the Source Code from the Licensor who will provide it to You. +

+ +

7. Exclusions from License Grant

+

+Neither the names of Licensor (including, but not limited to, RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate), nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as otherwise expressly stated in this License and in particular in Sections 2 and 5, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property, and no patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims. +No license is granted to the trademarks of Licensor even if such trademarks are included in the Original Work, except as expressly stated in this License. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. +

+ +

8. Attribution Rights

+

+You must retain in the Source Code of the Original Work and of any Derivative Works that You create, all author, copyright, patent, or trademark notices, as well as any descriptive text identified therein as an \"Attribution Notice\". The same applies to the licensing notice of this License in the Original Work. For the matter of clarity, \"author notice\" means the notice that identifies the original author(s). +

+

+You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. +

+

+In case the Original Work or Derivative Work is not provided in Source Code, the Attribution Notices shall be appropriately displayed, e.g., in the documentation of the Derivative Work. +

+ +

9. Disclaimer of Warranty

+

+The Original Work is provided under this License on an \"as is\" basis and without warranty, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. The entire risk as to the quality of the Original Work is with You. This disclaimer of warranty constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. +

+ +

10. Limitation of Liability

+

+Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor, the owner or a licensee of the Original Work be liable to anyone for any direct, indirect, general, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. +

+ +

11. Termination

+

+This License conditions your rights to undertake the activities listed in Section 2 and 5, including your right to create Derivative Works based upon the Original Work, and doing so without observing these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations. This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to observe the conditions of this license. +

+ +

12. Termination for Patent Action

+

+This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor, any owners of the Original Work or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement through combinations of the Original Work under combination with other software or hardware. +

+ +

13. Jurisdiction

+

+Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. +

+ +

14. Attorneys' Fees

+

+In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. +

+ +

15. Miscellaneous

+
    +
  1. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. +
  2. +No verbal ancillary agreements have been made. Changes and additions to this License must appear in writing to be valid. This also applies to changing the clause pertaining to written form. +
  3. +You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. +
  4. +You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code (\"Enhancements\") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such enhancements or derivative works thereof, in binary and source code form. +
+ +

How to Apply the Modelica License 2

+

+At the top level of your Modelica package and at every important subpackage, add the following notices in the info layer of the package: +

+
  • +Licensed by RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate under the Modelica License 2 Copyright (c) 2009-2013, RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate. +
  • +
  • +This Modelica package is free software and the use is completely at your own risk; it can be redistributed and/or modified under the terms of the Modelica license 2, see the license conditions (including the disclaimer of warranty) here or at http://www.modelica.org/modelica-legal-documents/ModelicaLicense2.html. +
+ +

+Include a copy of the Modelica License 2 under <library>.UsersGuide.ModelicaLicense2 +(use +http://www.modelica.org/modelica-legal-documents/ModelicaLicense2.mo) +Furthermore, add the list of authors and contributors under +<library>.UsersGuide.Contributors or <library>.UsersGuide.Contact +

+

+For example, sublibrary Modelica.Blocks of the Modelica Standard Library may have the following notices:

+
  • +Licensed by Modelica Association under the Modelica License 2 Copyright (c) 1998-2008, Modelica Association. +
  • +This Modelica package is free software and the use is completely at your own risk; it can be redistributed and/or modified under the terms of the Modelica license 2, see the license conditions (including the disclaimer of warranty) here or at +http://www.modelica.org/modelica-legal-documents/ModelicaLicense2.html. + +
+ +

For C-source code and documents, add similar notices in the corresponding file.

+

+For images, add a \"readme.txt\" file to the directories where the images are stored and include a similar notice in this file. +

+ +

+In these cases, save a copy of the Modelica License 2 in one directory of the distribution, e.g., +http://www.modelica.org/modelica-legal-documents/ModelicaLicense2-standalone.html in directory <library>/help/documentation/ModelicaLicense2.html. +

+ + +")); + end License; + + class Copyright "Copyright" + extends Modelica.Icons.Information; + annotation (Documentation(info=" +

Copyright

+

+ Copyright (c) 2010-2014, RWTH Aachen University, E.ON Energy Research Center, Institute for Energy Efficient Buildings and Indoor Climate. All rights reserved. +

+ + ")); + end Copyright; + annotation (DocumentationClass=true, Documentation(info=" +

The free open-source AixLib library is being developed for research and teaching purposes. It aims at dynamic simulations of thermal and hydraulic systems to develop control strategies for HVAC systems and analyse interactions in complex systems. It is used for simulations on component, building and city district level. As this library is developed mainly for academic purposes, user-friendliness and model robustness is not a main task. This research focus thus influences the layout and philosophy of the library. Various models are highly inspired by other libraries, especially by Modelica Standard Library and LBNL's Building Library.

+

Various connectors of the Modelica Standard Library are used, e.g. Modelica.Fluid and Modelica.HeatTransfer. These are accompanied by own connectors for simplified hydraulics (no fluid.media, incompressible, one phase) , shortwave radiation (intensity), longwave radiation (heat flow combined with a virtual temperature) and combined longwave radiation and thermal. The pressure in the connectors is the total pressure. The used media models are simplified from the Modelica.Media library. If possible and necessary, components use continuously differentiable equations. In general, zero mass flow rate and reverse flow are supported.

+

Most models have been analytically verified. In addition, hydraulic components are compared to empirical data such as performance curves. High and low order building models have been validated using a standard test suite provided by the ANSI/ASHRAE Standard 140 and VDI 6007 Guideline. The library has only been tested with Dymola.

+

The web page for this library is https://www.github.com/RWTH-EBC/AixLib. We welcome contributions from different users to further advance this library, whether it is through collaborative model development, through model use and testing or through requirements definition or by providing feedback regarding the model applicability to solve specific problems.

+")); +end UsersGuide; diff --git a/AixLib/Utilities/Control.mo b/AixLib/Utilities/Control.mo new file mode 100644 index 0000000000..7ee4d061ab --- /dev/null +++ b/AixLib/Utilities/Control.mo @@ -0,0 +1,123 @@ +within AixLib.Utilities; +package Control "Controls that are not defined in MSL or Annex60-Library" + extends Modelica.Icons.Package; + + model PITemp "PI Controler that can switch the output range of the controler" + + Modelica.Blocks.Interfaces.RealInput soll + annotation (Placement(transformation( + origin={-80,90}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Therm1 annotation ( + Placement(transformation(extent={{-70,-100},{-50,-80}}, rotation=0), + iconTransformation(extent={{-70,-100},{-50,-80}}))); + parameter Real h=1 "upper limit controler output" + annotation (Dialog(group="Control")); + parameter Real l=0 "lower limit of controler output" + annotation (Dialog(group="Control")); + parameter Real KR=1 "Gain" annotation (Dialog(group="Control")); + parameter Modelica.SIunits.Time TN=1 "Time Constant (T>0 required)" + annotation (Dialog(group="Control")); + Modelica.Blocks.Interfaces.RealOutput y + annotation (Placement(transformation(extent={{80,-10},{100,10}}, rotation= + 0), iconTransformation(extent={{80,-10},{100,10}}))); + parameter Modelica.Blocks.Interfaces.BooleanInput RangeSwitch=false + "Switch controler output range" + annotation (Placement(transformation( + origin={80,100}, + extent={{-10,-10},{10,10}}, + rotation=270), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={80,90}))); + Modelica.Blocks.Interfaces.BooleanInput onOff + "Switches Controler on and off" + annotation (Placement(transformation(extent={{-120,-80},{-80,-40}}, + rotation=0), iconTransformation(extent={{-100,-60},{-80,-40}}))); + Modelica.Blocks.Logical.Switch switch1 + annotation (Placement(transformation(extent={{-40,6},{-20,-14}}, rotation= + 0))); + Modelica.Blocks.Logical.Switch switch2 + annotation (Placement(transformation(extent={{56,-18},{76,2}}, rotation=0))); + Modelica.Blocks.Logical.TriggeredTrapezoid triggeredTrapezoid(rising=0, + falling=60) + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}, + rotation=0))); + Modelica.Blocks.Math.Product product + annotation (Placement(transformation(extent={{26,-34},{46,-54}}, rotation= + 0))); + Modelica.Blocks.Continuous.LimPID PI( + k=KR, + initType=Modelica.Blocks.Types.Init.NoInit, + yMax=if RangeSwitch then -l else h, + yMin=if RangeSwitch then -h else l, + controllerType=Modelica.Blocks.Types.SimpleController.PI, + Ti=TN, + Td=0.1) annotation (Placement(transformation(extent={{-16,30},{4,50}}, + rotation=0))); + + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation( + origin={-60,-70}, + extent={{-10,-10},{10,10}}, + rotation=90))); + equation + connect(onOff, switch1.u2) annotation (Line(points={{-100,-60},{-80,-60},{ + -80,-4},{-42,-4}}, color={255,0,255})); + connect(switch2.y, y) annotation (Line(points={{77,-8},{79.5,-8},{79.5,0},{ + 90,0}}, color={0,0,127})); + connect(onOff, switch2.u2) annotation (Line(points={{-100,-60},{-80,-60},{ + -80,-30},{-16,-30},{-16,-12},{30,-12},{30,-8},{54,-8}}, color={255, + 0,255})); + connect(onOff, triggeredTrapezoid.u) annotation (Line(points={{-100,-60},{ + -80,-60},{-80,-30},{-50,-30},{-50,-50},{-42,-50}}, color={255,0,255})); + connect(triggeredTrapezoid.y, product.u1) annotation (Line(points={{-19,-50}, + {24,-50}}, color={0,0,127})); + connect(product.y, switch2.u3) annotation (Line(points={{47,-44},{50,-44},{ + 50,-16},{54,-16}}, color={0,0,127})); + connect(switch1.y, PI.u_m) annotation (Line(points={{-19,-4},{-6,-4},{-6,28}}, + color={0,0,127})); + connect(PI.y, switch2.u1) annotation (Line(points={{5,40},{24,40},{24,0},{ + 54,0}}, color={0,0,127})); + connect(PI.y, product.u2) annotation (Line(points={{5,40},{14,40},{14,-38}, + {24,-38}}, color={0,0,127})); + connect(soll, PI.u_s) annotation (Line(points={{-80,90},{-80,40},{-18,40}}, + color={0,0,127})); + connect(soll, switch1.u3) annotation (Line(points={{-80,90},{-80,6},{-42,6}, + {-42,4}}, color={0,0,127})); + connect(temperatureSensor.port, Therm1) annotation (Line( + points={{-60,-80},{-60,-90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temperatureSensor.T, switch1.u1) annotation (Line( + points={{-60,-60},{-60,-12},{-42,-12}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(graphics), + Documentation(info=" +

Overview

+

+Based on a model by Alexander Hoh with some modifications and the Modelica-Standard PI controller. If set to "on" it will controll the thermal port temperature to the target value (soll). If set to "off" the controller error will become zero and therefore the current output level of the PI controller will remain constant. When this switching occurs the TriggeredTrapezoid will level the current controller output down to zero in a selectable period of time. +

+

Level of Development

+

+", revisions=" +
    +
  • October 7, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • + by Peter Matthes:
    + implemented
  • +
+ "), + Icon(graphics={ + Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={135,135,135}, + fillColor={255,255,170}, + fillPattern=FillPattern.Solid), Text( + extent={{-58,32},{62,-20}}, + lineColor={175,175,175}, + textString="%name")})); + end PITemp; +end Control; diff --git a/AixLib/Utilities/Examples.mo b/AixLib/Utilities/Examples.mo new file mode 100644 index 0000000000..0761ad05b2 --- /dev/null +++ b/AixLib/Utilities/Examples.mo @@ -0,0 +1,252 @@ +within AixLib.Utilities; +package Examples "Examples for BaseLib Components" + extends Modelica.Icons.ExamplesPackage; + +model HeatConv_outside +extends Modelica.Icons.Example; + + HeatTransfer.HeatConv_outside heatTransfer_Outside(Model=3, + A=16, + alpha_custom=25) + annotation (Placement(transformation(extent={{-24,-2},{2,24}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature Tinside + annotation (Placement(transformation(extent={{40,20},{20,40}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature Toutside + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={-50,30}))); + Modelica.Blocks.Sources.RealExpression Windspeed(y=4) + annotation (Placement(transformation(extent={{-60,-26},{-40,-6}}))); + Modelica.Blocks.Sources.Constant const(k=10 + 273.15) + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Modelica.Blocks.Sources.Constant const1(k=20 + 273.15) + annotation (Placement(transformation(extent={{80,20},{60,40}}))); + Modelica.Blocks.Sources.RealExpression HeatFlow(y=heatTransfer_Outside.port_b.Q_flow) + annotation (Placement(transformation(extent={{20,-44},{40,-24}}))); +equation + connect(const.y, Toutside.T) annotation (Line( + points={{-79,30},{-70,30},{-70,30},{-62,30},{-62,30},{-62,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(const1.y, Tinside.T) annotation (Line( + points={{59,30},{42,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(heatTransfer_Outside.port_a, Toutside.port) annotation (Line( + points={{-24,11},{-34,11},{-34,30},{-40,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatTransfer_Outside.port_b, Tinside.port) annotation (Line( + points={{2,11},{10,11},{10,30},{20,30}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics), + Documentation(revisions=" +
    +
  • April 11, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • October 14, 2012  + by Ana Constantin:
    + Implemented.
  • +
+", + info=" +

Overview

+

Plot HeatFlow for the different ways of calcutating the heat transfer to see the difference.

+"), + experiment( + StopTime=3600, + Interval=60, + Algorithm="Lsodar"), + experimentSetupOutput); +end HeatConv_outside; + + model HeatTransfer_test "Test routine for heat transfer models" + extends Modelica.Icons.Example; + + HeatTransfer.HeatConv heatConv(alpha=2, A=16) + annotation (Placement(transformation(extent={{-10,38},{10,58}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor load(C=(1000)*(1600) + *(16)*(0.2)) + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor heatCond(G=(16)*( + 2.4)/(0.1)) + annotation (Placement(transformation(extent={{-10,2},{10,22}}))); + HeatTransfer.HeatConv_inside heatConv_universal(A=16, alpha_custom=2, + surfaceOrientation=2) + annotation (Placement(transformation(extent={{-10,-18},{10,2}}))); + HeatTransfer.HeatConv_outside heatTransfer_Outside( + Model=1, + A=16, + alpha_custom=25, + surfaceType=DataBase.Surfaces.RoughnessForHT.Brick_RoughPlaster()) + annotation (Placement(transformation(extent={{-10,-38},{10,-18}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor heatTrans(G=(16)* + (1.5)) + annotation (Placement(transformation(extent={{-10,-56},{10,-36}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TempOutside + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TempInside + annotation (Placement(transformation(extent={{80,0},{60,20}}))); + Modelica.Blocks.Sources.Sine sineWindSpeed(amplitude=10, freqHz=0.5) + annotation (Placement(transformation(extent={{-34,-24},{-24,-14}}))); + Modelica.Blocks.Interfaces.RealOutput Q_flow[6] + annotation (Placement(transformation(extent={{76,50},{94,68}}))); + Modelica.Blocks.Sources.Constant constTempOutside(k=283) + annotation (Placement(transformation(extent={{-100,-20},{-86,-6}}))); + Modelica.Blocks.Sources.Constant constTempInside(k=298) annotation ( + Placement(transformation( + extent={{7,-7},{-7,7}}, + rotation=0, + origin={93,-15}))); + equation + //Connecting the Heat Flow Output, models as stated below in source code + Q_flow[1] =heatConv.port_b.Q_flow; + Q_flow[2] =load.port.Q_flow; + Q_flow[3] =heatCond.port_b.Q_flow; + Q_flow[4] =heatConv_universal.port_b.Q_flow; + Q_flow[5] =heatTransfer_Outside.port_b.Q_flow; + Q_flow[6] =heatTrans.port_b.Q_flow; + + connect(TempOutside.port, load.port) annotation (Line( + points={{-60,10},{-40,10},{-40,20},{0,20}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempOutside.port, heatCond.port_a) annotation (Line( + points={{-60,10},{-40,10},{-40,12},{-10,12}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TempOutside.port, heatConv_universal.port_a) annotation (Line( + points={{-60,10},{-40,10},{-40,-8},{-10,-8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatConv.port_b, TempInside.port) annotation (Line( + points={{10,48},{46,48},{46,10},{60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatCond.port_b, TempInside.port) annotation (Line( + points={{10,12},{46,12},{46,10},{60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatConv_universal.port_b, TempInside.port) annotation (Line( + points={{10,-8},{46,-8},{46,10},{60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(sineWindSpeed.y, heatTransfer_Outside.WindSpeedPort) annotation (Line( + points={{-23.5,-19},{-18,-19},{-18,-35.2},{-9.2,-35.2}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(TempOutside.port, heatConv.port_a) annotation (Line( + points={{-60,10},{-40,10},{-40,48},{-10,48}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(constTempOutside.y, TempOutside.T) annotation (Line( + points={{-85.3,-13},{-82,-13},{-82,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(constTempInside.y, TempInside.T) annotation (Line( + points={{85.3,-15},{84,-15},{84,-16},{84,-16},{84,10},{82,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TempOutside.port, heatTrans.port_a) annotation (Line( + points={{-60,10},{-40,10},{-40,-46},{-10,-46}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatTrans.port_b, TempInside.port) annotation (Line( + points={{10,-46},{46,-46},{46,10},{60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatTransfer_Outside.port_a, TempOutside.port) annotation (Line( + points={{-10,-28},{-40,-28},{-40,10},{-60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heatTransfer_Outside.port_b, TempInside.port) annotation (Line( + points={{10,-28},{46,-28},{46,10},{60,10}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={ + Text( + extent={{14,46},{26,36}}, + lineColor={0,0,255}, + textString="1"), + Text( + extent={{14,30},{26,20}}, + lineColor={0,0,255}, + textString="2"), + Text( + extent={{14,10},{26,0}}, + lineColor={0,0,255}, + textString="3"), + Text( + extent={{14,-10},{26,-20}}, + lineColor={0,0,255}, + textString="4"), + Text( + extent={{14,-30},{26,-40}}, + lineColor={0,0,255}, + textString="5"), + Text( + extent={{14,-48},{26,-58}}, + lineColor={0,0,255}, + textString="6")}), Documentation(info=" +

Overview

+

Test routine to check simple heat transfer models with a maximum of 2 temperature connectors.

+

Concept

+

Simple test to calculate the heat flux through the different conduction and convection models.

+

Boundary conditions can be given by 2 different temperatur values on each side of the model. Models with additional inputs (e.g. variable thermal conductivity, wind speed, ...) will be given preferably alternating input values, for example customized sine values.

+", revisions=" +

    +
  • April 16, 2013  by Ole Odendahl:
    Implemented, added documentation and formatted appropriately
  • +

+ +"), experiment(StopTime=100, __Dymola_Algorithm="Dassl"), + __Dymola_experimentSetupOutput); + end HeatTransfer_test; + + model TimeUtilities_test + "Simulation to test the utilities concerning the time" + import Utilities; + extends Modelica.Icons.Example; + Sources.NightMode nightMode(dayStart=8, dayEnd=20) + annotation (Placement(transformation(extent={{-12,-32},{8,-12}}))); + Sources.HourOfDay hourOfDay + annotation (Placement(transformation(extent={{-12,10},{8,30}}))); + Modelica.Blocks.Interfaces.BooleanOutput boolNightMode + annotation (Placement(transformation(extent={{56,-30},{76,-10}}))); + Modelica.Blocks.Interfaces.RealOutput realSamples[1] + annotation (Placement(transformation(extent={{56,30},{76,50}}))); + + equation + //Connections for real outputs + realSamples[1] = hourOfDay.HOD; + + //Connection for night mode output + boolNightMode = nightMode.IsNight.y; + + connect(boolNightMode, boolNightMode) annotation (Line( + points={{66,-20},{66,-20}}, + color={255,0,255}, + smooth=Smooth.None)); + annotation (experiment(StopTime=604800, Interval=600), + __Dymola_experimentSetupOutput, + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), + graphics), + Documentation(revisions=" +

    +
  • April 25, 2013  by Ole Odendahl:
    Implemented model, added documentation and formatted appropriately
  • +

+ +", info=" +

Overview

+

Simulation to test the functionality of time concerning models.

+

Concept

+

To check the calculations of models which are using the simulation time. There are no inputs required.

+

Output values can be easily displayed via the provided output ports, one for each data type (real and boolean).

+")); + end TimeUtilities_test; + +end Examples; diff --git a/AixLib/Utilities/HeatTransfer.mo b/AixLib/Utilities/HeatTransfer.mo new file mode 100644 index 0000000000..a989316e3e --- /dev/null +++ b/AixLib/Utilities/HeatTransfer.mo @@ -0,0 +1,841 @@ +within AixLib.Utilities; +package HeatTransfer "Models for different types of heat transfer" + extends Modelica.Icons.Package; + + model HeatConv + extends Modelica.Thermal.HeatTransfer.Interfaces.Element1D; + parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha=2; + parameter Modelica.SIunits.Area A=16; + equation + + // no storage of heat + port_a.Q_flow = alpha*A*(port_a.T - port_b.T); + + annotation ( + Coordsys( + extent=[-100, -100; 100, 100], + grid=[2, 2], + component=[20, 20]), + Diagram( + coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), + Rectangle(extent=[-80, 60; 0, -100], style( + color=0, + rgbcolor={0,0,0}, + pattern=0, + fillColor=31, + rgbfillColor={211,243,255}, + fillPattern=1))= + {{-80,70},{80,-90}}, + Rectangle(extent=[-80,60; 80,-100], style(color=0)), + Rectangle(extent=[60,60; 80,-100], style( + pattern=0, + fillColor=7, + rgbfillColor={244,244,244}, + fillPattern=1)), + Rectangle(extent=[40,60; 60,-100], style( + pattern=0, + fillColor=30, + rgbfillColor={207,207,207}, + fillPattern=1)), + Rectangle(extent=[20,60; 40,-100], style( + pattern=0, + fillColor=8, + rgbfillColor={182,182,182}, + fillPattern=1)), + Rectangle(extent=[0,60; 20,-100], style( + pattern=0, + fillColor=9, + rgbfillColor={156,156,156}, + fillPattern=1)), + graphics, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid, lineColor={0,0,0}, + Rectangle[ + extent]= + {{60,70},{80,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={244,244,244}, + fillPattern=FillPattern.Solid, + Rectangle[ + extent]= + {{40,70},{60,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid, + Rectangle[ + extent]= + {{20,70},{40,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={182,182,182}, + fillPattern=FillPattern.Solid, + Rectangle[ + extent]= + {{0,70},{20,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Icon(Rectangle(extent=[-80, 60; 0, -100], style( + pattern=0, + fillColor=31, + rgbfillColor={211,243,255}, + fillPattern=1)), + Rectangle(extent=[60,60; 80,-100], style( + pattern=0, + fillColor=7, + rgbfillColor={244,244,244}, + fillPattern=1)), + Rectangle(extent=[40,60; 60,-100], style( + pattern=0, + fillColor=30, + rgbfillColor={207,207,207}, + fillPattern=1)), + Rectangle(extent=[20,60; 40,-100], style( + pattern=0, + fillColor=8, + rgbfillColor={182,182,182}, + fillPattern=1)), + Rectangle(extent=[0,60; 20,-100], style( + pattern=0, + fillColor=9, + rgbfillColor={156,156,156}, + fillPattern=1)), + graphics={ + Rectangle( + extent={{-76,80},{4,-80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-76,80},{84,-80}}, lineColor={0,0,0}), + Rectangle( + extent={{64,80},{84,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={244,244,244}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{44,80},{64,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{24,80},{44,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={182,182,182}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{4,80},{24,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid)}), + Window( + x=0.25, + y=0.38, + width=0.6, + height=0.6), + Documentation(info=" +

Overview

+

The HeatConv model represents the phenomenon of heat convection. No heat is stored.

+

Level of Development

+

+

Example Results

+

AixLib.Utilities.HeatTransfer_test

+", revisions=" +

    +
  • April 1, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +

+

    +
  • April 10, 2013  by Ole Odendahl:
    Added basic documentation and formatted appropriately
  • +

+")); + end HeatConv; + + class HeatConv_inside + "Natural convection computation according to B. Glueck, choice between several types of surface orientation, or constant factor" + /* calculation of natural convection in the inside of a building according to B.Glueck- Waermeuebertragung, + Waermeabgabe von Raumheizflaechen und Rohren +*/ + extends Modelica.Thermal.HeatTransfer.Interfaces.Element1D; + + parameter Boolean IsAlphaConstant = false "Use a constant alpha?" annotation (Dialog(descriptionLabel = true), choices(checkBox=true)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_custom + "Constant heat transfer coefficient" annotation(Dialog(descriptionLabel = true, enable = IsAlphaConstant)); + + // which orientation of surface? + parameter Integer surfaceOrientation = 1 "Surface orientation" + annotation(Dialog(descriptionLabel = true, enable = if IsAlphaConstant == true then false else true), choices(choice=1 + "vertical", choice = 2 + "horizontal facing up", choice = 3 + "horizontal facing down", radioButtons = true)); + + parameter Modelica.SIunits.Area A=16 "Area of surface"; + Modelica.SIunits.CoefficientOfHeatTransfer alpha + "variable heat transfer coefficient"; + + protected + Modelica.SIunits.Temp_C posDiff=noEvent(abs(port_b.T - port_a.T)) + "Positive temperature difference"; + equation + + /* + port_b -> wall + port_a -> air + */ + // top side of horizontal plate + // ------------------------------------------------------ + if surfaceOrientation == 2 then + // upward heat flow + if noEvent(port_b.T > port_a.T) then + // + alpha = 2*(posDiff)^0.31; + else + // downward heatflux with function switch + alpha = if noEvent(posDiff <= 0.0050474370) then 2*(posDiff)^0.31 else + 1.08*(posDiff)^0.31; + end if; + // down side of horizontal plate + // ------------------------------------------------------ + + else + if surfaceOrientation == 3 then + if noEvent(port_b.T > port_a.T) then + // downward heatflux + alpha = if noEvent(posDiff <= 0.0050474370) then 2*(posDiff)^0.31 else + 1.08*(posDiff)^0.31; + else + // upward heatflux + alpha = 2*(posDiff)^0.31; + end if; + + // vertical plate + //------------------------------------------------- + else + /* + at interior wall according to B. Glueck. + Also check to prevent small fluctuations which often lead to illeagal functions calls as + (small negative value)^exponent + + at interior wall according to B. Glueck: Waermeuebertragung - + Waermeabgabe von Raumheizflaechen und Rohren. + */ + alpha = if noEvent(posDiff <= 5e-12) then 0 else (1.6*noEvent(posDiff^ + 0.3)); + end if; + end if; + port_a.Q_flow = alpha*A*(port_a.T - port_b.T); + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle( + extent={{-80,60},{0,-100}}, + lineColor={0,255,255}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Rectangle( + extent={{60,60},{80,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={244,244,244}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,60},{60,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,60},{40,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={182,182,182}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,60},{20,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Polygon( + points={{80,60},{80,60},{60,20},{60,60},{80,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={157,166,208}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,60},{60,20},{40,-20},{40,60},{60,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={102,110,139}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,60},{40,-20},{20,-60},{20,60},{40,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={75,82,103}, + fillPattern=FillPattern.Solid), + Polygon( + points={{20,60},{20,-60},{0,-100},{0,60},{20,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={51,56,70}, + fillPattern=FillPattern.Solid), + Line( + points={{-58,20},{-68,8}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-58,20},{-58,-60}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-40,20},{-50,8}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-40,20},{-40,-60}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-22,20},{-32,8}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-22,20},{-22,-60}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None)}), + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle( + extent={{0,60},{20,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,60},{40,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={182,182,182}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,60},{60,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{60,60},{80,-100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={244,244,244}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{0,-100}}, + lineColor={0,255,255}, + fillColor={211,243,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,60},{80,-100}}, lineColor={0,0,0}), + Polygon( + points={{80,60},{80,60},{60,20},{60,60},{80,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={157,166,208}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,60},{60,20},{40,-20},{40,60},{60,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={102,110,139}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,60},{40,-20},{20,-60},{20,60},{40,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={75,82,103}, + fillPattern=FillPattern.Solid), + Polygon( + points={{20,60},{20,-60},{0,-100},{0,60},{20,60}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={51,56,70}, + fillPattern=FillPattern.Solid), + Line( + points={{-20,16},{-20,-64}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-20,16},{-30,4}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-38,16},{-48,4}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-54,16},{-64,4}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-38,16},{-38,-64}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-54,16},{-54,-64}}, + color={0,0,255}, + thickness=0.5, + smooth=Smooth.None)}), + Window( + x=0.25, + y=0.38, + width=0.6, + height=0.6), + Documentation(info=" +

Overview

+

The HeatConv_choice model represents the phenomenon of heat convection at inside surfaces, with different choice for surface orientation.

+

Level of Development

+

+

Concept

+

In this model the orientation of the surface can be chosen from a menu for an easier adoption to new situations. This allows to calculate alpha depending on orientation and respective direction of heat flow. The equations for alpha are mainly taken from B. Glück.

+

The model can in this way be used on inside surfaces. There is also the possibility of setting a constant alpha value.

+

References

+
    +
  • Bernd Glück: Thermische Bauteilaktivierung - Nutzen von Umweltenergie und Kapillarrohren. 1. Aufl., C.F. Müller-Verlag 1999.
  • +
  • EN ISO 6946 in case of an outside vertical surface.
  • +
+

Example Results

+

AixLib.Utilities.Examples.HeatTransfer_test

+", revisions=" +

    +
  • April 1, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +

+

    +
  • April 10, 2013  by Ole Odendahl
    Formatted documentation according to standards
  • +
  • December 15, 2005  by Peter Matthes:
    Implemented.
  • +

+"), + DymolaStoredErrors); + end HeatConv_inside; + + model HeatConv_outside + "Model for heat transfer at outside surfaces. Choice between multiple models" + extends Modelica.Thermal.HeatTransfer.Interfaces.Element1D; + parameter Integer Model = 1 "Model" + annotation(Dialog(group = "Computational Models", compact = true, descriptionLabel = true), choices(choice=1 + "DIN 6946", choice = 2 + "ASHRAE Fundamentals", choice = 3 "Custom alpha",radioButtons = true)); + + parameter Modelica.SIunits.Area A=16 "Area of surface" annotation(Dialog(group = "Surface properties", descriptionLabel = true)); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_custom=25 + "Custom alpha" annotation(Dialog(group = "Surface properties", descriptionLabel = true, enable= Model == 3)); + parameter + DataBase.Surfaces.RoughnessForHT.PolynomialCoefficients_ASHRAEHandbook + surfaceType=DataBase.Surfaces.RoughnessForHT.Brick_RoughPlaster() + "Surface type" annotation (Dialog( + group="Surface properties", + descriptionLabel=true, + enable=Model == 2), choicesAllMatching=true); + + // Variables + Modelica.SIunits.CoefficientOfHeatTransfer alpha; + + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-102,-82}, + {-82,-62}}, rotation=0), iconTransformation(extent={{-102,-82}, + {-82,-62}}))); + + equation + // Main equation of heat transfer + port_a.Q_flow = alpha*A*(port_a.T - port_b.T); + + //Determine alpha + if Model == 1 then + alpha = (4 + 4*WindSpeedPort); + elseif Model == 2 then + alpha = surfaceType.D + surfaceType.E*WindSpeedPort + surfaceType.F*(WindSpeedPort^2); + else + alpha = alpha_custom; + end if; + + // Dummy variable for WindSpeedPort + if cardinality( WindSpeedPort) < 1 then + WindSpeedPort = 0; + end if; + + annotation (Icon(graphics={ + Rectangle(extent={{-80,70},{80,-90}}, lineColor={0,0,0}), + Rectangle( + extent={{0,70},{20,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,70},{40,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={182,182,182}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,70},{60,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{60,70},{80,-90}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={244,244,244}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,70},{0,-90}}, + lineColor={255,255,255}, + fillColor={85,85,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,70},{80,-90}}, lineColor={0,0,0}), + Polygon( + points={{80,70},{80,70},{60,30},{60,70},{80,70}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={157,166,208}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,70},{60,30},{40,-10},{40,70},{60,70}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={102,110,139}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,70},{40,-10},{20,-50},{20,70},{40,70}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={75,82,103}, + fillPattern=FillPattern.Solid), + Polygon( + points={{20,70},{20,-50},{0,-90},{0,70},{20,70}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={51,56,70}, + fillPattern=FillPattern.Solid), + Line( + points={{-20,26},{-20,-54}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-20,26},{-30,14}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-38,26},{-48,14}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-54,26},{-64,14}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-38,26},{-38,-54}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None), + Line( + points={{-54,26},{-54,-54}}, + color={255,255,255}, + thickness=0.5, + smooth=Smooth.None)}), + Documentation(info=" +

Overview

+

The HeatTrasfer_Outside is a model for the convective heat transfer at outside walls

+

Level of Development

+

+

Concept

+

It allows the choice between three different models:

+
    +
  • after DIN 6946: \"alfa , where alfa is the heat transfer coefficent and v is the wind speed
  • +
  • after the ASHRAE Fundamentals Handbook from 1989, the way it is presented in EnergyPlus Engineering reference from 2011: \"alfa, where alfa and v are as above and the coefficients D, E, F depend on the surface of the outer wall
  • +
  • with a custom constant alfa value
  • +
+

References

+
    +
  • DIN 6946 p.20
  • +
  • ASHRAEHandbook1989, as cited in EnergyPlus Engineering Reference. : EnergyPlus Engineering Reference, 2011 p.56
  • +
+

Example Results

+

AixLib.Utilities.Examples.HeatTransfer_test

+

AixLib.Utilities.Examples.HeatConv_outside

+", revisions=" +

    +
  • April 1, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +

+
    +
  • March 30, 2012  + by Ana Constantin:
    + Implemented.
  • +
+"), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), + graphics)); + end HeatConv_outside; + + class SolarRadToHeat "Compute the heat flow caused by radiation on a surface" + parameter Real coeff=0.6 "Weight coefficient"; + // parameter Modelica.SIunits.Area A=6 "Area of surface"; + parameter Real A = 10 "Area of surface"; + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort annotation ( + Placement(transformation(extent={{80,-30},{100,-10}}, rotation=0))); + AixLib.Utilities.Interfaces.SolarRad_in solarRad_in annotation (Placement( + transformation(extent={{-122,-40},{-80,0}}, rotation=0))); + equation + heatPort.Q_flow = -solarRad_in.I*A*coeff; + + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-48,2},{-4,-42}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="I"), + Text( + extent={{4,0},{56,-44}}, + lineColor={0,0,0}, + textString="J"), + Polygon( + points={{-12,-24},{-12,-16},{10,-16},{10,-10},{22,-20},{10,-30}, + {10,-24},{-12,-24}}, + lineColor={0,0,0}, + smooth=Smooth.None)}), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Rectangle( + extent={{-80,60},{80,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-58,0},{-14,-44}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="I"), + Text( + extent={{0,-2},{52,-46}}, + lineColor={0,0,0}, + textString="J"), + Polygon( + points={{-22,-24},{-22,-16},{0,-16},{0,-10},{12,-20},{0,-30},{0,-24}, + {-22,-24}}, + lineColor={0,0,0}, + smooth=Smooth.None), + Text( + extent={{-100,100},{100,60}}, + lineColor={0,0,255}, + textString="%name")}), + Window( + x=0.29, + y=0.14, + width=0.6, + height=0.6), + Documentation(info=" +

Overview

+

+The RadCondAdapt model computes a heat flow rate caused by the absorbance of radiation. The amount of radiation being transformed into a heat flow is controlled by a given coefficient. +

+

Level of Development

+

+ +", revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Moved and Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
+")); + end SolarRadToHeat; + + model HeatToStar "Adaptor for approximative longwave radiation exchange" + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Therm annotation ( + Placement(transformation(extent={{-102,-10},{-82,10}}, rotation=0))); + AixLib.Utilities.Interfaces.Star Star annotation (Placement(transformation(extent={{81, + -10},{101,10}}, rotation=0))); + + parameter Modelica.SIunits.Area A=12 "Area of radiation exchange"; + parameter Modelica.SIunits.Emissivity eps=0.95 "Emissivity"; + + equation + Therm.Q_flow + Star.Q_flow = 0; + Therm.Q_flow = Modelica.Constants.sigma*eps*A*(Therm.T*Therm.T*Therm.T*Therm.T -Star.T*Star.T*Star.T*Star.T); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid), Text( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid, + textString="2*")}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid), Text( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid, + textString="2*")}), + Documentation(info=" +

Overview

+

The TwoStar_RadEx model cobines the HeatPort and the Star connector. To model longwave radiation exchange of a surfaces, just connect the HeatPort to the outmost layer of the surface and connect the Star connector to the Star connectors of an unlimited number of corresponding surfaces.

+

Level of Development

+

+

Concept

+

Since exact calculation of longwave radiation exchange inside a room demands for the computation of view factors, it may be very complex to achieve for non-rectangular room layouts. Therefore, an approximated calculation of radiation exchange basing on the proportions of the affected surfaces is an alternative. The underlying concept of this approach is known as the "two star" room model.

+", + revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Moved and Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • June 16, 2006  by Timo Haase:
    Implemented.
  • +
+")); + end HeatToStar; + + model HeatToStar_Avar + "Adaptor for approximative longwave radiation exchange with variable surface Area" + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Therm annotation ( + Placement(transformation(extent={{-102,-10},{-82,10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput A "Area of radiation exchange" + annotation (Placement(transformation( + origin={0,90}, + extent={{-10,-10},{10,10}}, + rotation=270))); + parameter Modelica.SIunits.Emissivity eps=0.95 "Emissivity"; + + AixLib.Utilities.Interfaces.Star Star annotation (Placement(transformation(extent={{81, + -10},{101,10}}, rotation=0))); + equation + Therm.Q_flow + Star.Q_flow = 0; + Therm.Q_flow = Modelica.Constants.sigma*eps*A*(Therm.T*Therm.T*Therm.T*Therm.T -Star.T*Star.T*Star.T*Star.T); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid), Text( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid, + textString="2*")}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid), Text( + extent={{-80,80},{80,-80}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillColor={135,150,177}, + fillPattern=FillPattern.Solid, + textString="2*")}), + Documentation(info=" +

Overview

+

The TwoStar_RadEx model cobines the HeatPort and the Star connector. To model longwave radiation exchange of surfaces, just connect the HeatPort connector to the outmost layer of the surface and connect the Star connector to the Star connectors of an unlimited number of corresponding surfaces.

+

Level of Development

+

+

Concept

+

Since exact calculation of longwave radiation exchange inside a room demands for the computation of view factors, it may be very complex to achieve for non-rectangular room layouts. Therefore, an approximated calculation of radiation exchange basing on the proportions of the affected surfaces is an alternative. The underlying concept of this approach is known as the "two star" room model.

+", + revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Moved and Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • June 21, 2007  by Peter Mattes:
    Extended model based on TwoStar_RadEx.
  • +
+")); + end HeatToStar_Avar; +end HeatTransfer; diff --git a/AixLib/Utilities/Interfaces.mo b/AixLib/Utilities/Interfaces.mo new file mode 100644 index 0000000000..29243c883e --- /dev/null +++ b/AixLib/Utilities/Interfaces.mo @@ -0,0 +1,371 @@ +within AixLib.Utilities; +package Interfaces "Interfaces that are not defined in MSL or Annex60-Library" + extends Modelica.Icons.InterfacesPackage; + +connector Star "Connector for twostar (approximated) radiation exchange" + extends Modelica.Thermal.HeatTransfer.Interfaces.HeatPort; + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics={Rectangle( + extent={{-80,80},{80,-80}}, + lineColor={95,95,95}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Polygon( + points={{-13,86},{13,86},{13,12},{77,34},{85,6},{22,-14},{62,-72},{ + 37,-88},{0,-28},{-35,-88},{-60,-72},{-22,-14},{-85,6},{-77,34}, + {-13,12},{-13,86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={Rectangle( + extent={{-82,84},{78,-76}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Polygon( + points={{-13,86},{13,86},{13,12},{77,34},{85,6},{22,-14},{62,-72},{ + 37,-88},{0,-28},{-35,-88},{-60,-72},{-22,-14},{-85,6},{-77,34}, + {-13,12},{-13,86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

The Star connector extends from the HeatPort connector. But the carried data has to be interpreted in a different way: the temperature T is a virtual temperature describing the potential of longwave radiation exchange inside the room. The heat flow Q_flow is the resulting energy flow due to longwave radiation.

+

Level of Development

+

+", + revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • July 12, 2009  + by Peter Matthes:
    + Switched to Modelica.SIunits.Temperature.
  • +
  • June 16, 2006  + by Timo Haase:
    + Implemented.
  • + +
+")); +end Star; + + connector SolarRad_out "Scalar total radiation connector (output)" + output Modelica.SIunits.RadiantEnergyFluenceRate I; + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={ + Ellipse(extent={{18,58},{-98,-58}}, lineColor={255,128,0}), + Line( + points={{-40,62},{-40,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{24,0},{78,0}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{6,44},{46,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{20,22},{72,40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-14,58},{-2,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-14,-58},{-2,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{8,-44},{46,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{20,-22},{74,-40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-40,-80},{-40,-62}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Rectangle( + extent={{-100,100},{-60,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-60,6},{-60,28},{-60,28},{-8,0},{-60,-26},{-60,-26},{-60,-6}, + {-60,6}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid)}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics={ + Ellipse(extent={{18,58},{-98,-58}}, lineColor={255,128,0}), + Line( + points={{-40,62},{-40,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{24,0},{78,0}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{6,44},{46,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{20,22},{72,40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-14,58},{-2,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-14,-58},{-2,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{8,-44},{46,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{20,-22},{74,-40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-40,-80},{-40,-62}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Rectangle( + extent={{-100,100},{-60,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-60,6},{-60,28},{-60,28},{-8,0},{-60,-26},{-60,-26},{-60,-6}, + {-60,6}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

The SolarRad_out connector is used for total radiation output. Is explicitly defined as an output.

+

Level of Development

+

+", + revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
+")); + + end SolarRad_out; + + connector SolarRad_in "Scalar total radiation connector (input)" + input Modelica.SIunits.RadiantEnergyFluenceRate I; + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}}), graphics={ + Ellipse(extent={{-20,58},{96,-58}}, lineColor={255,128,0}), + Rectangle( + extent={{52,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{38,62},{38,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-24,0},{-78,0}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-6,44},{-46,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-20,22},{-72,40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{14,58},{2,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{14,-58},{2,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-8,-44},{-46,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-20,-22},{-74,-40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{38,-80},{38,-62}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Polygon( + points={{0,6},{0,28},{0,28},{52,0},{0,-26},{0,-26},{0,-6},{0,6}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid)}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics={ + Ellipse(extent={{-20,58},{96,-58}}, lineColor={255,128,0}), + Rectangle( + extent={{52,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{38,62},{38,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-24,0},{-78,0}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-6,44},{-46,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-20,22},{-72,40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{14,58},{2,80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{14,-58},{2,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-8,-44},{-46,-80}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{-20,-22},{-74,-40}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Line( + points={{38,-80},{38,-62}}, + color={255,128,0}, + smooth=Smooth.Bezier), + Polygon( + points={{0,6},{0,28},{0,28},{52,0},{0,-26},{0,-26},{0,-6},{0,6}}, + lineColor={0,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

The SolarRad_in connector is used for total radiation input. Is explicitly defined as an input.

+

Level of Development

+

+", + revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
+")); + + end SolarRad_in; + +connector HeatStarComb "Combines therm connector and star connector." + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Therm; + AixLib.Utilities.Interfaces.Star Star; + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={Rectangle( + extent={{-100,102},{102,-100}}, + lineColor={191,0,0}, + fillColor={191,0,0}, + fillPattern=FillPattern.Solid), Polygon( + points={{-9,86},{17,86},{17,12},{81,34},{89,6},{26,-14},{66,-72},{41, + -88},{4,-28},{-31,-88},{-56,-72},{-18,-14},{-81,6},{-73,34},{-9,12}, + {-9,86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, + {100,100}}), graphics), Documentation(info=" +

Overview

+

+This connector makes a single connection for a combination of Radiation and Convection possible. +

+

Level of Development

+

+ +", revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • by Mark Wesseling:
    Implemented.
  • +
+")); + +end HeatStarComb; + + package Adaptors + extends Modelica.Icons.Package; + + model HeatStarToComb + + AixLib.Utilities.Interfaces.HeatStarComb thermStarComb annotation (Placement( + transformation(extent={{-120,-10},{-76,36}}), iconTransformation(extent= + {{-116,-24},{-72,22}}))); + AixLib.Utilities.Interfaces.Star star annotation (Placement(transformation(extent={{84, + 38},{124,78}}), iconTransformation(extent={{84,38},{124,78}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a therm annotation ( + Placement(transformation(extent={{84,-68},{118,-34}}), + iconTransformation(extent={{84,-68},{118,-34}}))); + equation + + connect(thermStarComb.Star,star); + connect(thermStarComb.Therm,therm); + + annotation (Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100, + -80},{100,80}}), + graphics), Icon(coordinateSystem(preserveAspectRatio= + true, extent={{-100,-80},{100,80}}), + graphics={Polygon( + points={{-76,0},{86,-72},{86,70},{-76,0}}, + lineColor={0,0,255}, + smooth=Smooth.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

Overview

+

This adaptor makes it possible to connect HeatStarComb with either Star or Heat connector or both.

+

Level of Development

+

+", revisions=" +
    +
  • Mai 19, 2014  by Ana Constantin:
    Uses components from MSL and respects the naming conventions
  • +
  • April 01, 2014 by Moritz Lauster:
    Renamed
  • +
  • April 10, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • by Mark Wesseling:
    Implemented.
  • +
+")); + end HeatStarToComb; + end Adaptors; +end Interfaces; diff --git a/AixLib/Utilities/Logical.mo b/AixLib/Utilities/Logical.mo new file mode 100644 index 0000000000..b9b14fb623 --- /dev/null +++ b/AixLib/Utilities/Logical.mo @@ -0,0 +1,83 @@ +within AixLib.Utilities; +package Logical "Logicals like switches" + extends Modelica.Icons.Package; + + block SmoothSwitch "Smooth switch between two Real signals" + extends Modelica.Blocks.Interfaces.partialBooleanBlockIcon; + Modelica.Blocks.Interfaces.RealInput u1 + "Connector of first Real input signal" + annotation (Placement(transformation(extent= + {{-140,60},{-100,100}}, rotation=0))); + Modelica.Blocks.Interfaces.BooleanInput u2 + "Connector of Boolean input signal" + annotation (Placement(transformation( + extent={{-140,-20},{-100,20}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput u3 + "Connector of second Real input signal" + annotation (Placement(transformation(extent= + {{-140,-100},{-100,-60}}, rotation=0))); + Modelica.Blocks.Interfaces.RealOutput y "Connector of Real output signal" + annotation (Placement(transformation(extent= + {{100,-10},{120,10}}, rotation=0))); + + equation + y = smooth(1, if u2 then u1 else u3); + annotation (defaultComponentName="switch1", + Documentation(info=" +

Overview

+

Adapted from Modelica.Blocks.Logical.Switch.

+

The SmoothSwitch switches, depending on the logical connector u2 (the middle connector) between the two possible input signals u1 (upper connector) and u3 (lower connector).

+

Level of Development

+

+

Concept

+

The switch is smooth.

+

If u2 is true, the output signal y is set equal to u1, else it is set equal to u3.

+", + revisions=" +
    +
  • April 11, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • 16 Mai, 2012  + by Ana Constantin:
    + Implemented.
  • +
+"), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Line( + points={{12,0},{100,0}}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}, + color={0,0,255}), + Line( + points={{-100,0},{-40,0}}, + color={255,0,127}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Line( + points={{-100,-80},{-40,-80},{-40,-80}}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}, + color={0,0,255}), + Line(points={{-40,12},{-40,-12}}, color={255,0,127}), + Line(points={{-100,80},{-38,80}}, color={0,0,255}), + Line( + points={{-38,80},{6,2}}, + thickness=1, + color={0,0,255}), + Ellipse( + extent={{2,8},{18,-6}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics)); + end SmoothSwitch; + +end Logical; diff --git a/AixLib/Utilities/Sensors.mo b/AixLib/Utilities/Sensors.mo new file mode 100644 index 0000000000..d04b26e492 --- /dev/null +++ b/AixLib/Utilities/Sensors.mo @@ -0,0 +1,95 @@ +within AixLib.Utilities; +package Sensors "Sensors" + extends Modelica.Icons.Package; + + model EEnergyMeter + + Modelica.Blocks.Interfaces.RealInput p + annotation (Placement(transformation( + origin={-86,0}, + extent={{-14,-14},{14,14}}, + rotation=180))); + Modelica.SIunits.Conversions.NonSIunits.Energy_kWh q_kwh; + Modelica.SIunits.Energy q_joule(stateSelect=StateSelect.avoid, start = 0.0); + equation + (der(q_joule)) = p; + q_kwh = Modelica.SIunits.Conversions.to_kWh(q_joule); + annotation ( + Diagram(graphics), + Icon(graphics={ + Rectangle( + extent={{-40,66},{46,-62}}, + lineColor={0,0,255}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-20,38},{30,12}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{4,24},{4,14},{4,16}}, color={0,0,0}), + Line(points={{14,24},{14,14},{14,16}}, color={0,0,0}), + Line(points={{24,24},{24,14},{24,16}}, color={0,0,0}), + Line(points={{-6,24},{-6,14},{-6,16}}, color={0,0,0}), + Line(points={{-14,24},{-14,14},{-14,16}}, color={0,0,0}), + Line( + points={{-16,30},{28,30},{26,30}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{0,30},{10,30},{10,30}}, + color={255,0,0}, + thickness=0.5), + Text( + extent={{-12,24},{-4,14}}, + lineColor={0,0,0}, + textString= + "1"), + Text( + extent={{16,24},{24,14}}, + lineColor={0,0,0}, + textString= + "1"), + Text( + extent={{6,24},{14,14}}, + lineColor={0,0,0}, + textString= + "1"), + Text( + extent={{-4,24},{4,14}}, + lineColor={0,0,0}, + textString= + "1")}), + Documentation(info=" +

Overview

+

+Model of an electric meter (integration over time of the electric power). +

+

Level of Development

+

+", revisions=" +
    +
  • October 15, 2013  by Ole Odendahl:
    Formatted documentation appropriately
  • +
  • + by Alexander Hoh:
    + implemented
  • +
      +")); + end EEnergyMeter; + + model TEnergyMeter "measures thermal power (heat flow)" + extends EEnergyMeter; + + annotation (Diagram(graphics), Documentation(info=" +

      Overview

      +

      Model that meters the thermal power (heat flow)

      +

      Level of Development

      +

      +", revisions=" +

        +
      • October 15, 2013  by Ole Odendahl:
        Added documentation and formatted appropriately
      • +

      + +")); + end TEnergyMeter; +end Sensors; diff --git a/AixLib/Utilities/Sources.mo b/AixLib/Utilities/Sources.mo new file mode 100644 index 0000000000..249fccd43d --- /dev/null +++ b/AixLib/Utilities/Sources.mo @@ -0,0 +1,692 @@ +within AixLib.Utilities; +package Sources "Sources" + extends Modelica.Icons.Package; + + model PrescribedSolarRad "variable radiation condition" + parameter Integer n=1 "number of output vector length"; + AixLib.Utilities.Interfaces.SolarRad_out solarRad_out[n] annotation (Placement( + transformation(extent={{80,-10},{100,10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealInput u[n] "radiation on surface (W/m2)" + annotation (Placement(transformation(extent={{-120,-20},{-80,20}}, + rotation=0))); + + parameter Modelica.SIunits.RadiantEnergyFluenceRate I[n] = fill(0,n) + "fixed radiation if u is not connected" annotation (Diagram(graphics)); + + equation + if cardinality(u) < 1 then + u[:] = fill(0,n); + solarRad_out[:].I = I[:]; + else + solarRad_out[:].I = u[:] "Radiant energy fluence rate"; + end if; + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={ + Line( + points={{0,80},{0,-80}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Line( + points={{80,0},{-80,0}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Line( + points={{-68,42},{68,-42}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Line( + points={{-38,70},{38,-70}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Line( + points={{-68,-42},{68,42}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Line( + points={{-40,-70},{40,70}}, + color={255,170,85}, + pattern=LinePattern.Dot, + thickness=0.5), + Ellipse( + extent={{-60,60},{60,-60}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Sphere, + fillColor={255,255,0})}), Documentation(revisions=" +
        +
      • April 01, 2014 by Moritz Lauster:
        Renamed
      • +
      • April 11, 2013  by Ole Odendahl:
        Formatted documentation appropriately
      • +
      • October 23, 2006  by Peter Matthes:
        Implemented.
      • +
      +", + info=" +

      Overview

      +

      The VarRad Model is a source model to represent a varying radiation source.

      +

      Level of Development

      +

      +

      Assumption

      +

      If nothing is specified through the input port solar radiation of 0 W/m2 is assumed by default.

      +"), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics)); + end PrescribedSolarRad; + + model HourOfDay "Computes the hour of day taking the second of year as input" + + Modelica.Blocks.Sources.Clock clock(offset=-startTime) + annotation (Placement(transformation(extent={{-20,20},{0,40}}, rotation=0))); + + Modelica.Blocks.Interfaces.RealOutput SOY "second of the year" + annotation (Placement(transformation(extent={{90,70},{110,90}}, rotation= + 0))); + Modelica.Blocks.Interfaces.RealOutput H "passed hours" + annotation (Placement(transformation(extent={{90,10},{110,30}}, rotation= + 0))); + + Modelica.Blocks.Interfaces.RealOutput D "passed days" + annotation (Placement(transformation(extent={{90,-50},{110,-30}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealOutput SOD "second of the day" + annotation (Placement(transformation( + origin={40,-100}, + extent={{-10,-10},{10,10}}, + rotation=270))); + + Modelica.Blocks.Interfaces.RealOutput HOD "hour of the day" + annotation (Placement(transformation( + origin={-20,-100}, + extent={{-10,-10},{10,10}}, + rotation=270))); + parameter Real startTime = 0 + "The start time of the simulation in reference to 1st of Jan. 0:00 o'clock"; + equation + // Modulo(SOY,SecondsInDay) gives the passed seconds of the current day. + SOD=mod(SOY,86400) "passed seconds of the current day"; + + H=SOY/3600 "passed hours"; + D=SOY/86400 "passed days"; + + // computes the hour of day from second of day. + HOD=SOD/3600; + + connect(clock.y, SOY) annotation (Line(points={{1,30},{20,30},{20,80},{100, + 80}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{ + -100,-100},{100,100}}), + graphics), + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{34,96},{88,62}}, + lineColor={0,0,255}, + textString="SoY"), + Text( + extent={{-6,-62},{100,-90}}, + lineColor={0,0,255}, + textString="SoD"), + Text( + extent={{-92,-62},{28,-92}}, + lineColor={0,0,255}, + textString="HoD"), + Line(points={{-38,70},{-28,51}}, color={160,160,164}), + Line(points={{-71,37},{-54,28}}, color={160,160,164}), + Line(points={{-80,0},{-60,0}}, color={160,160,164}), + Line(points={{-71,-37},{-50,-26}}, color={160,160,164}), + Line(points={{-39,-70},{-29,-52}}, color={160,160,164}), + Line(points={{0,-80},{0,-60}}, color={160,160,164}), + Line(points={{39,-70},{29,-51}}, color={160,160,164}), + Line(points={{71,-37},{52,-27}}, color={160,160,164}), + Line(points={{80,0},{60,0}}, color={160,160,164}), + Line(points={{70,38},{49,26}}, color={160,160,164}), + Line(points={{37,70},{26,50}}, color={160,160,164}), + Line(points={{0,80},{0,60}}, color={160,160,164}), + Ellipse(extent={{-80,80},{80,-80}}, lineColor={160,160,164}), + Line( + points={{0,0},{-50,50}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{0,0},{40,0}}, + color={0,0,0}, + thickness=0.5)}), + Documentation(info=" +

      Overview

      +

      +Additional to passed simulation seconds (SOY), hours (HOY) and days (DOY) this model provides the passed seconds of a day and the passed hours of a day. That can be used for a controller that will act depending on the time of the day for example. +

      +

      Level of Development

      +

      +

      Example Results

      +

      AixLib.Utilities.Examples.TimeUtilities_test

      +", revisions=" +
        +
      • April 11, 2013  by Ole Odendahl:
        Formatted documentation appropriately
      • +
      • + by Peter Matthes:
        + Implemented.
      • +
      +")); + end HourOfDay; + + model NightMode + "Module to establish if an element should opperate in night mode or not." + import BaseLib = AixLib.Utilities; + + //Parameters + parameter Real dayStart "hour when day operation starts"; + parameter Real dayEnd "hour when night operation starts"; + parameter Real startTime = 0 + "The start time of the simulation in reference to 1st of Jan. 0:00 o'clock"; + + BaseLib.Sources.HourOfDay hourOfDay + annotation (Placement(transformation(extent={{-72,10},{-52,30}}))); + Modelica.Blocks.Logical.GreaterEqualThreshold greaterThreshold( + threshold=dayStart) + annotation (Placement(transformation(extent={{-11.5,7.5},{3,22.5}}))); + Modelica.Blocks.Logical.LessThreshold lessEqualThreshold( threshold= + dayEnd) + annotation (Placement(transformation(extent={{-12,-19.5},{3,-4.5}}))); + Modelica.Blocks.Logical.Nand IsNight + annotation (Placement(transformation(extent={{18,-4.5},{33,10.5}}))); + Modelica.Blocks.Interfaces.BooleanOutput SwitchToNightMode + "Connector of Boolean output signal" + annotation (Placement(transformation(extent={{78.5,-7},{98.5,13}}), + iconTransformation(extent={{78.5,-7},{98.5,13}}))); + equation + + connect(hourOfDay.HOD,lessEqualThreshold. u) annotation (Line( + points={{-64,10},{-64,1.5},{-21,1.5},{-21,-12},{-13.5,-12}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(hourOfDay.HOD,greaterThreshold. u) annotation (Line( + points={{-64,10},{-64,1.5},{-21,1.5},{-21,15},{-12.95,15}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(lessEqualThreshold.y, IsNight.u2) annotation (Line( + points={{3.75,-12},{9,-12},{9,-3},{16.5,-3}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(greaterThreshold.y, IsNight.u1) annotation (Line( + points={{3.725,15},{9,15},{9,3},{16.5,3}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(IsNight.y, SwitchToNightMode) annotation (Line( + points={{33.75,3},{88.5,3}}, + color={255,0,255}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1.5,1.5}), graphics), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1.5,1.5}), graphics={ + Ellipse(extent={{-70.5,73.5},{78,-76.5}}, lineColor={0,0,255}), + Line( + points={{3,73.5},{3,57},{3,58.5}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{3,-60},{3,-76.5},{3,-75}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{-54,0},{-70.5,0},{-70.5,1.5}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{78,0},{61.5,0},{61.5,1.5}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{-51,49.5},{-42,37.5},{-51,49.5}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{46.5,-42},{55.5,-54},{46.5,-42}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{-39,-40.5},{-51,-52.5},{-39,-40.5}}, + color={0,0,255}, + smooth=Smooth.None), + Line( + points={{60,48},{48,36},{60,48}}, + color={0,0,255}, + smooth=Smooth.None), + Ellipse( + extent={{-70.5,73.5},{78,-76.5}}, + lineColor={0,255,255}, + lineThickness=1, + fillColor={0,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-40.5,18},{-15,-9}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-27,18},{-27,30},{-28.5,-18},{-27,4.5},{-49.5,4.5}, + {-4.5,4.5},{-30,4.5},{-12,21},{-45,-12},{-27,6},{-43.5, + 21},{-12,-10.5},{-28.5,6}}, + color={255,255,0}, + smooth=Smooth.None, + thickness=0.5), + Polygon( + points={{4.5,73.5},{4.5,-78},{19.5,-75},{31.5,-72},{43.5, + -66},{54,-58.5},{63,-49.5},{72,-34.5},{78,-21},{79.5, + -4.5},{79.5,13.5},{72,31.5},{64.5,45},{49.5,60},{24,72}, + {22.5,72},{4.5,73.5}}, + lineColor={0,0,255}, + lineThickness=0.5, + smooth=Smooth.None, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{16.5,22.5},{49.5,-12}}, + lineColor={255,255,0}, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{28.5,22.5},{63,-10.5}}, + lineColor={0,0,255}, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + lineThickness=1)}), + Documentation(info=" +

      Overview

      +

      +Model for the switching between night and day operation modes based on the simulation time. +

      +

      Level of Development

      +

      +

      Example Results

      +

      AixLib.Utilities.Examples.TimeUtilities_test

      +", + revisions=" +

        +
      • April 11, 2013  by Ole Odendahl:
        Formatted documentation appropriately
      • +
      • Mai 20, 2011 by Ana Constantin:
        Implemented
      • +

      +")); + end NightMode; + + package HeaterCooler + "Collection of heater and cooler models to supply the thermal energy to the building" + extends Modelica.Icons.Package; + + partial model IdealHeaterCoolerBase + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a HeatCoolRoom + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + annotation (Diagram(graphics), Icon(graphics={ + Rectangle( + extent={{-94,6},{80,-28}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-82,6},{-82,40},{-48,6},{-82,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-46,6},{-8,6},{-8,40},{-46,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{30,6},{-8,6},{-8,40},{30,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{64,6},{64,40},{30,6},{64,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Text( + extent={{64,-18},{-80,-4}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + textString="T_set_room<->T_air_room"), + Line( + points={{-62,24},{-62,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-46,10},{-46,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-30,24},{-30,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-66,48},{-62,54},{-58,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-50,48},{-46,54},{-42,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-34,48},{-30,54},{-26,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{16,24},{16,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{12,48},{16,54},{20,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{44,24},{44,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{40,48},{44,54},{48,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{30,10},{30,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{26,48},{30,54},{34,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None)}), + Documentation(info=" +

      Overview

      +

      This is the base class of an ideal heater and/or cooler. It is used in full ideal heater/cooler models as an extension.

      +", revisions=" +

        +
      • June, 2014  by Moritz Lauster:
        Added some basic documentation
      • +

      +")); + end IdealHeaterCoolerBase; + + partial model IdealHeaterCoolerBase_seperate_parameters + extends AixLib.Utilities.Sources.HeaterCooler.IdealHeaterCoolerBase; + Sensors.TEnergyMeter coolMeter if Cooler_on "measures cooling energy" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow Cooling if + Cooler_on + annotation (Placement(transformation(extent={{6,-23},{26,-2}}))); + Control.PITemp pITemp2( + RangeSwitch=false, + h=h_cooler, + l=l_cooler, + KR=KR_cooler, + TN=TN_cooler) if Cooler_on + annotation (Placement(transformation(extent={{-20,-10},{0,-30}}))); + Sensors.TEnergyMeter heatMeter if Heater_on + "measures heating energy" + annotation (Placement(transformation(extent={{40,30},{60,50}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow Heating if + Heater_on + annotation (Placement(transformation(extent={{6,22},{26,2}}))); + Control.PITemp pITemp1( + RangeSwitch=false, + h=h_heater, + l=l_heater, + KR=KR_heater, + TN=TN_heater) if Heater_on + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a HeatCoolRoom + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + parameter Modelica.SIunits.Temp_K T0all=295.15 + "Initial temperature for all components"; + parameter Modelica.SIunits.HeatFlowRate Q_flow_heat=1 + "Heat flow rate of the heater" + annotation(Dialog(tab="Heater")); + parameter Real weightfactor_heater=1 "weightfactor of the heater" + annotation(Dialog(tab="Heater")); + parameter Modelica.SIunits.HeatFlowRate Q_flow_cooler=1 + "Heat flow rate of the cooler" + annotation(Dialog(tab="Cooler")); + parameter Real weightfactor_cooler=1 "weightfactor of the cooler" + annotation(Dialog(tab="Cooler")); + parameter Real h_heater=100000 + "upper limit controller output of the heater" + annotation(Dialog(tab="Heater",group = "Controller")); + parameter Real l_heater=0 "lower limit controller output of the heater" + annotation(Dialog(tab="Heater",group = "Controller")); + parameter Real KR_heater=10000 "Gain of the heating controller" + annotation(Dialog(tab="Heater",group = "Controller")); + parameter Modelica.SIunits.Time TN_heater=1 + "Time constant of the heating controller" + annotation(Dialog(tab="Heater",group = "Controller")); + parameter Real h_cooler=0 "upper limit controller output of the cooler" + annotation(Dialog(tab="Cooler",group = "Controller")); + parameter Real l_cooler=-100000 + "lower limit controller output of the cooler" + annotation(Dialog(tab="Cooler",group = "Controller")); + parameter Real KR_cooler=10000 "Gain of the cooling controller" + annotation(Dialog(tab="Cooler",group = "Controller")); + parameter Modelica.SIunits.Time TN_cooler=1 + "Time constant of the cooling controller" + annotation(Dialog(tab="Cooler",group = "Controller")); + parameter Boolean Heater_on=true "Activates the heater" + annotation(Dialog(tab="Heater")); + parameter Boolean Cooler_on=true "Activates the cooler" + annotation(Dialog(tab="Cooler")); + equation + connect(pITemp2.y,Cooling.Q_flow) annotation (Line( + points={{-1,-20},{6,-20},{6,-12.5}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Cooling.Q_flow, coolMeter.p) annotation (Line( + points={{6,-12.5},{6,-40},{41.4,-40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(pITemp1.y,Heating.Q_flow) annotation (Line( + points={{-1,20},{2,20},{2,12},{6,12}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Heating.Q_flow, heatMeter.p) annotation (Line( + points={{6,12},{6,40},{41.4,40}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(Heating.port, HeatCoolRoom) annotation (Line( + points={{26,12},{2,12},{2,0},{90,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(Cooling.port, HeatCoolRoom) annotation (Line( + points={{26,-12.5},{2.4,-12.5},{2.4,0},{90,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(pITemp2.Therm1, HeatCoolRoom) annotation (Line( + points={{-16,-11},{-16,0},{90,0}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(pITemp1.Therm1, HeatCoolRoom) annotation (Line( + points={{-16,11},{-16,0},{90,0}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(graphics), Icon(graphics={ + Rectangle( + extent={{-94,6},{80,-28}}, + lineColor={135,135,135}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-82,6},{-82,40},{-48,6},{-82,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-46,6},{-8,6},{-8,40},{-46,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{30,6},{-8,6},{-8,40},{30,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{64,6},{64,40},{30,6},{64,6}}, + lineColor={135,135,135}, + lineThickness=1, + smooth=Smooth.None, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Text( + extent={{64,-18},{-80,-4}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + textString="T_set_room<->T_air_room"), + Line( + points={{-62,24},{-62,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-46,10},{-46,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-30,24},{-30,50}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-66,48},{-62,54},{-58,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-50,48},{-46,54},{-42,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{-34,48},{-30,54},{-26,48}}, + color={0,128,255}, + thickness=1, + smooth=Smooth.None), + Line( + points={{16,24},{16,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{12,48},{16,54},{20,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{44,24},{44,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{40,48},{44,54},{48,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{30,10},{30,50}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None), + Line( + points={{26,48},{30,54},{34,48}}, + color={255,0,0}, + thickness=1, + smooth=Smooth.None)}), + Documentation(info=" +

      Overview

      +

      This is the base class of an ideal heater and/or cooler. It is used in full ideal heater/cooler models as an extension. It extends another base class and adds some basic elements.

      +", revisions=" +

        +
      • June, 2014  by Moritz Lauster:
        Added some basic documentation
      • +

      +")); + end IdealHeaterCoolerBase_seperate_parameters; + + model IdealHeaterCoolerVar1 "heater and cooler with variable setpoints" + extends + AixLib.Utilities.Sources.HeaterCooler.IdealHeaterCoolerBase_seperate_parameters; + Modelica.Blocks.Interfaces.RealInput soll_cool if Cooler_on annotation (Placement( + transformation(extent={{-120,-60},{-80,-20}}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-48,-48}))); + Modelica.Blocks.Interfaces.RealInput soll_heat if Heater_on annotation (Placement( + transformation(extent={{-120,20},{-80,60}}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={30,-48}))); + Modelica.Blocks.Sources.BooleanExpression booleanExpression(y=Heater_on) if Heater_on + annotation (Placement(transformation(extent={{-52,14},{-33,30}}))); + Modelica.Blocks.Sources.BooleanExpression booleanExpression1(y= + Cooler_on) if Cooler_on + annotation (Placement(transformation(extent={{-52,-30},{-32,-14}}))); + equation + connect(booleanExpression.y, pITemp1.onOff) annotation (Line( + points={{-32.05,22},{-24,22},{-24,15},{-19,15}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(booleanExpression1.y, pITemp2.onOff) annotation (Line( + points={{-31,-22},{-24,-22},{-24,-15},{-19,-15}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(soll_heat, pITemp1.soll) annotation (Line( + points={{-100,40},{-18,40},{-18,29},{-18,29}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(soll_cool, pITemp2.soll) annotation (Line( + points={{-100,-40},{-58,-40},{-58,-40},{-18,-40},{-18,-29}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(graphics), Documentation(info=" +

      Overview

      +

      This is just as simple heater and/or cooler with a PI-controller. It can be used as an quasi-ideal source for heating and cooling applications.

      +", revisions=" +

        +
      • June, 2014  by Moritz Lauster:
        Added some basic documentation
      • +

      +")); + end IdealHeaterCoolerVar1; + end HeaterCooler; +end Sources; diff --git a/AixLib/Utilities/package.mo b/AixLib/Utilities/package.mo new file mode 100644 index 0000000000..b370adec62 --- /dev/null +++ b/AixLib/Utilities/package.mo @@ -0,0 +1,21 @@ +within AixLib; +package Utilities "Package contains basic utility models used for simple heat transfer processes, sources and sensors related to the field of building and building systems performance simulation." + extends Modelica.Icons.Package; + + +annotation (preferedView="diagram", + conversion(from(version="0.2",script="modelica://BaseLib/Conversions/ConvertFromBaseLib_0.2_To_1.2.mos"), + from(version="1.1",script="modelica://BaseLib/Conversions/ConvertFromBaseLib_1.1_To_1.2.mos"), + noneFromVersion="1.2.1", + from(version="2.0",script="modelica://BaseLib/Conversions/ConvertFromBaseLib_2.0_To_2.1.mos"), + from(version="2.1",script="modelica://BaseLib/Conversions/ConvertFromBaseLib_2.1_To_2.2.mos")), + uses( + Modelica(version="3.2")), + Icon, + Diagram, + Documentation(revisions=" +", info=" +

      Overview

      +


      This package contains basic utility models used for simple heat transfer processes, sources and sensors related to the field of building and building systems performance simulation.

      +")); +end Utilities; diff --git a/AixLib/Utilities/package.order b/AixLib/Utilities/package.order new file mode 100644 index 0000000000..9b66ae1193 --- /dev/null +++ b/AixLib/Utilities/package.order @@ -0,0 +1,7 @@ +Control +HeatTransfer +Interfaces +Logical +Sensors +Sources +Examples diff --git a/AixLib/package.mo b/AixLib/package.mo new file mode 100644 index 0000000000..19dcd9775b --- /dev/null +++ b/AixLib/package.mo @@ -0,0 +1,13 @@ +within ; +package AixLib + extends Modelica.Icons.Package; + + + annotation (uses(Modelica(version="3.2.1")), version="0.1.0", + Documentation(info=" +

      The free open-source AixLib library is being developed for research and teaching purposes. It aims at dynamic simulations of thermal and hydraulic systems to develop control strategies for HVAC systems and analyse interactions in complex systems. It is used for simulations on component, building and city district level. As this library is developed mainly for academic purposes, user-friendliness and model robustness is not a main task. This research focus thus influences the layout and philosophy of the library.

      +

      Various connectors of the Modelica Standard Library are used, e.g. Modelica.Fluid and Modelica.HeatTransfer. These are accompanied by own connectors for simplified hydraulics (no fluid.media, incompressible, one phase) , shortwave radiation (intensity), longwave radiation (heat flow combined with a virtual temperature) and combined longwave radiation and thermal. The pressure in the connectors is the total pressure. The used media models are simplified from the Modelica.Media library. If possible and necessary, components use continuously differentiable equations. In general, zero mass flow rate and reverse flow are supported.

      +

      Most models have been analytically verified. In addition, hydraulic components are compared to empirical data such as performance curves. High and low order building models have been validated using a standard test suite provided by the ANSI/ASHRAE Standard 140 and VDI 6007 Guideline. The library has only been tested with Dymola.

      +

      The web page for this library is https://www.github.com/RWTH-EBC/AixLib. We welcome contributions from different users to further advance this library, whether it is through collaborative model development, through model use and testing or through requirements definition or by providing feedback regarding the model applicability to solve specific problems.

      +")); +end AixLib; diff --git a/AixLib/package.order b/AixLib/package.order new file mode 100644 index 0000000000..946da92e17 --- /dev/null +++ b/AixLib/package.order @@ -0,0 +1,5 @@ +UsersGuide +Utilities +Building +HVAC +DataBase