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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+
+",
+ 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 ) as input value.
+Level of Development
+
+Example Results
+AixLib.Building.Components.Examples.DryAir.DryAir_test
+",
+ revisions="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+
+"),
+ 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 withone facade with openings exposed to wind |
+heated room with more thanone 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - August 2, 2011
+ by Ana Constantin:
+ Implemented after a model from Time Haase.
+
+"),
+ 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - October 16, 2011 by Ana Constantin:
implemented
+
+", 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- April 10, 2014 by Ana Constantin:
Added a lower positive limit to the surface area, so it won't lead to a division by zero
+- May 07, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- August 10, 2011 by Ana Constantin:
implemented
+
+"));
+ 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 07, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+
+"));
+ 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 07, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+
+", 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- April 30, 2012 by Peter Matthes:
implemented partial model for heat sources to work with Ana's models.
+- August 10, 2011 by Ana Constantin:
implemented
+
+", 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
+
+- Conduction and convection for a wall (different on the inside surface depending on the surface orientation: vertical wall, floor or ceiling)
+- Outside walls may have a window and/ or a door
+- Inside walls may have a door
+
+This model uses a HeatStarComb Connector for an easier connection of temperature and radiance inputs.
+Assumptions
+
+- Outside walls are represented as complete walls
+- Inside walls are modeled as a half of a wall, you need to connect a corresponding second half with the same values
+- Door and window got a constant U-value
+- No heat storage in doors or window
+
+Have a closer look at the used models to get more information about the assumptions.
+Example Results
+AixLib.Building.Components.Examples.Walls.InsideWall
+",
+ revisions="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- June 22, 2012 by Lukas Mencher:
Outside wall may have a door now, icon adjusted
+- Mai 24, 2012 by Ana Constantin:
Added inside surface orientation
+- April, 2012 by Mark Wesseling:
Implemented.
+
+"));
+ 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - March 14, 2005
+ by Timo Haase:
+ Implemented.
+
+"));
+ 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - Aug. 08, 2006
+ by Peter Matthes:
+ Fixed wrong connection with heatConv-Module and added connection graphics.
+
+ - June 19, 2006
+ by Timo Haase:
+ Implemented.
+
+"));
+ 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:
+
+- Total radiation on "n" oriented surfaces
+- Cloud cover
+- Wind direction
+- Wind speed
+- Air temperature
+- Air pressure
+- Mass fraction of water in dry air
+- Relative humidity
+- Long wave sky radiation on horizontal surface
+- Long wave terrestrial radiation from horizontal surface
+
+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="
+
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately, Rewarded 5*****!
+ - Mai 1, 2012
+ by Moritz Lauster and Ana Constantin:
+ Improved beyond belief.
+ - September 12, 2006
+ by Timo Haase:
+ Implemented.
+
+"),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
+
+- You can define the amount of radiance hitting the facade with gsunblind, which states how much radiance goes through the closed sunblind
+- At which amount of radiance the sunblind will be closed is defined by Imax. Each directon is independent from all other directions and closes/opens seperately due to the radiance hitting the direction.
+- The output sunblindonoff can be used to transfer the state of the shading to another model component. It contains 1-gsunblind, which is the amount of radiances, detained by the shading.
+
+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="
+
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- January 2012, by Moritz Lauster:
Implemented.
+
+"));
+ 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="
+
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - September 29, 2006
+ by Peter Matthes:
+ Included ArgACOS variable to protect acos function from arguments > 1. Added protection for some variables.
+ - March 14, 2005
+ by Timo Haase:
+ Implemented.
+
+"));
+ 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="
+
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - March 14, 2005
+ by Timo Haase:
+ Implemented.
+
+"));
+ 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="
+
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately, added descriptions for variables
+
+"));
+ 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="
+
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately, added variable descriptions
+
+", 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
+
+- the conductive heat transfer through the door with a U-Value is set to 1.8 W/(m²K) (EnEV2009)
+- the radiative heat transfer on both sides
+
+Level of Development
+
+Assumptions
+
+References/ U-values special doors
+
+- Doors of wood or plastic 40 mm: 2,2 W/(m²K)
+- Doors of wood 60 mm: 1,7 W/(m²K)
+- Doors of wood with glass:
+- 7 mm wired glass: 4,5 W/(m²K)
+- 20 mm insulated glass: 2,8 W/(m²K)
+
+- Doors with a frame of light metal and with glass:
+
+- 7 mm wired glass: 5,5 W/(m²K)
+- 20 mm insulated glass: 3,5 W/(m²K)
+
+- 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="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+ - May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - March 30, 2012
+ by Corinna Leonhardt and Ana Constantin:
+ Implemented.
+
+"), 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:
+
+- Solar energy transmission through the glass
+- Heat transmission through the whole window
+
+References
+Exemplary U-Values for windows from insulation standards
+
+- WschV 1984: specified "two panes" assumed 2,5 W/m2K
+- WschV 1995: 1,8 W/m2K
+- EnEV 2002: 1,7 W/m2K
+- EnEV 2009: 1,3 W/m2K
+
+Example Results
+AixLib.Building.Components.Examples.WindowsDoors.WindowSimple
+",revisions="
+
+- Mai 19, 2014 by Ana Constantin:
Uses components from MSL and respects the naming conventions
+- May 02, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- March 30, 2012 by Ana Constantin and Corinna Leonhardt:
Implemented.
+
+"), 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="
+
+ - May 14, 2013 by Ole Odendahl:
Implemented remaining DryAir models, adjusted existing model, documentated
+ - May 07, 2013 by Ole Odendahl:
Formatted documentation appropriately
+ - October 16, 2011
+ by Ana Constantin:implemented DynamicVentilation
+
+", 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:
+
+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="
+
+- May 28, 2013 by Ole Odendahl:
Formatted documentation appropriately, Added SkyTemp model to simulation.
+- December 13, 2011 by Ana Constantin:
Implemented.
+
+"),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
+
+- Area of component: 10 m2
+- Temperature difference: 20 K
+- Test time: 1 h
+
+", revisions="
+
+ - April 1, 2012
+ by Ana Constantin and Corinna Leonhard:
+ Implemented.
+
+"));
+ 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
+
+- Area of component: 10 m2
+- Temperature difference: 20 K
+- Test time: 1 h
+
+", revisions="
+
+ - April 1, 2012
+ by Ana Constantin and Corinna Leonhard:
+ Implemented.
+
+"));
+ 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
+
+- Area of Wall: 10 m²
+- Area of Door: 2 m²
+- Temperature difference: 10 K
+- Test time: 25 h
+
+The u-values are calculated via calculation moduls and may be displayed easily.
+", revisions="
+
+ - April, 2012
+ by Mark Wesseling:
+ Implemented.
+
+"));
+ 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
+
+- Area of Wall: 10 m2
+- Area of Window: 2 m2
+- Temperature difference: 10 K
+- Test time: 10 h
+
+", revisions="
+
+ - April, 2012
+ by Mark Wesseling:
+ Implemented.
+
+"));
+ 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="
+
+- May 07, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- August 12, 2011 by Ana Constantin:
implemented
+
+"));
+ 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="
+
+- May 31, 2013 by Ole Odendahl:
Implemented, added documentation and formatted appropriately
+
+"));
+ 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="
+
+- May 31, 2013 by Ole Odendahl:
Implemented, added documentation and formatted appropriately
+
+"));
+ 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="
+
+- May 31, 2013 by Ole Odendahl:
Implemented, added documentation and formatted appropriately
+
+"));
+ 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 7, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 7, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 7, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 8, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 8, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 8, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 8, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 14, 2014 by Ana Constantin:
Added documentation
+- July 7, 2011 by Ana Constantin:
Implemented
+
+"));
+ 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 17, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 17, 2011 by Ana Constantin:
Implemented
+
+", 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:
+
+- transient heat conduction through walls; each wall consists of several layers with different physical properties; further discretization of each layer is possible
+- steady-state heat conduction through glazing systems; transmission of short wave radiation through the window depends on a constant coefficient; transmitted radiation is considered together with the radiation from room facing elements
+- heat convection at outside facing surfaces either with a constant coefficient, depending on wind speed, or depending on wind speed and surface abrasiveness
+- heat convection at inside facing surfaces either with a constant coefficient, depending on wind speed, or depending on wind speed and surface abrasiveness
+- heat convection at inside facing surfaces depends on the wall orientation and the temperature difference between the room air and the wall surface
+- radiation exchange between room facing elements
+- temperature balance equations for the room airvolume; per room only one air node is considered; humidity is not considered in the air node
+
+
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:
+
+- thermal mass class: heavy, middle and light
+- energy saving ordinance: WSchV 1984, WSchV1995, EnEV 2002 and EnEV 2009
+
+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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 10, 2011 by Ana Constantin:
Implemented
+
+", 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="
+
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 10, 2011 by Ana Constantin:
Implemented
+
+
+
+", 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="
+
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- July 10, 2011 by Ana Constantin:
Implemented
+
+
+
+"));
+ 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+", 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+", 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+"));
+ end OFD_IdealHeaters;
+
+ annotation (Documentation(info="
+Overview
+Package with complete models with building envelopes and energy systems.
+Concept
+Three models are available:
+
+- with an energy system based on radiators
+- with an energy system based on radiators and the possibility of inputing variable convective internal gains for each room
+- with an energy system based on floor heating
+
+"));
+ 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="
+
+- April 18, 2014 by Ana Constantin:
Added documentation
+- August 16, 2011 by Ana Constantin:
Implemented
+
+"));
+ 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+", 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+"), 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+"));
+ 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+"),
+ 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="
+
+- June 19, 2014 by Ana Constantin:
Implemented
+
+"));
+ 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
+
+- Added documentation for all models and examples
+- Renaming according to the MSL naming conventions
+- Uses new MSL comform models from Building
+
+2013-09-24: Version 0.9: by Ana Constantin
+
+- Extended hydraulics models to also include floor heating
+- Extended room models for OFD, to automatically change the connection to the floor if using floor heating or radiators
+
+", 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:
+
+- develop standard models
+- model only the necessary physical processes
+- build a model so that changing the parameters is easy, quick and will not lead to hidden mistakes
+- have an easy to use graphical interface
+- ensure a degree of flexibility for expanding or building new models
+
+
We call these house models standard for the following reasons:
+
+- the floor layouts were made based on existing buildings, by analyzing data provided by the German Federal Statistical Office and by consulting with experts
+- for modeling realistical wall structures building catalogues as well as experts were consulted
+- the physical properties of the materials for the wall layers were chosen to satisfy the insulation requirements of current and past German energy saving ordinances: WSchV 1984, WSchV1995, EnEV 2002 and EnEV 2009
+
+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
+
+- The ThermalZone reflects the VDI 6007 components (in ThermalZonePhysics) and adds some standards parts of the EBC library for easy simulation with persons, lights and maschines.
+- Inputs: real weather vector, as defined in EqAirTemp; vectorial solarRad_in, the solar radiation (diffuse and direct) for all n directions; real infiltration/ventilation as defined in ReducedOrderModel and real inner loads input for profiles.
+- Parameters: All parameters are collected in a ZoneRecord (see ZoneBaseRecord).
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Examples for some results.
+",
+ revisions="
+
+ - March, 2012
+ by Moritz Lauster:
+ Implemented
+
+"));
+ 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
+
+- This component computes the so called "equivalent outdoor air temperature". Basically, this includes a correction for the longwave and shortwave radiance (not on windows!).
+- The computed temperature is the temperature near the wall surface. The radiant and convective heat transfer is considered in the model. The next component connected to the heat port should be the description of the heat conductance through the wall.
+- This component was written for usage in combination with the ReducedOrderModel (see ThermalZonePhysics). As input it needs weather data, radiance (beam) by the radiance input and longwave sky radiation, longwave terrestric radiation and air temperature by the Real WeatherData input. There is the possibility to link a Sunblind by the sunblindsig input. This takes the changes in radiation on the windows through a closed shading into account.
+- Weightfactors: The different equivalent temperatures for the different directions (due to shortwave radiance and the ground) are weighted and summed up with the weightfactors. See VDI 6007 for more information about the weightfactors (equation: U_i*A_i/sum(U*A)). As the equivalent temperature is a weighted temperature for all surfaces and it was originally written for building zones, the temperature of the ground under the thermal zone can be considered (weightfactorgound > 0). The sum of all weightfactors should be 1.
+- Additionally, you need the coefficient of heat transfer and the coefficient of absorption on the outer side of the walls and windows for all directions (weighted scalars) . The coefficient of absorption is different to the emissivity due to the spectrum of the sunlight (0.6 might be a good choice).
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, Moritz; Remmen, Peter; Fuchs, Marcus; Teichmann, Jens; Streblow, Rita; Müller, Dirk (2014): Modelling long-wave radiation heat exchange for thermal network building simulations at urban scale using Modelica. In: the 10th International Modelica Conference, March 10-12, 2014, Lund, Sweden, March 10-12, 2014: Linköping University Electronic Press (Linköping Electronic Conference Proceedings), p. 125–133. DOI: 10.3384/ECP14096125.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Validation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"));
+ 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
+
+- ReducedOrderModel is a simple component to compute the air temperature, heating load, etc. for a thermal zone. The zone is simplified to one outer wall, one inner wall and one air node. It is build out of standard components and SimpleOuterWall and SimpleInnerWall.
+- The simplifications are based on the VDI 6007, which describes the thermal behaviour of a thermal zone with the equations for an electric circuit, hence they are equal. The heat transfer is described with resistances and the heat storage with capacitances.
+- The resolution of the model is very rough (only one air node), so the model is primarly thought for computing the air temperature of the room and with that, the heating and cooling load. It is more a heat load generator than a full building model. It is thought mainly for city district simulations, in which a lot of buildings has to be taken into account and the specific cirumstances in one building can be neglected.
+- Inputs: The model needs the outdoor air temperature and the Infiltration/VentilationRate for the Ventilation, the equivalent outdoor temperature (see EqAirTemp) for the heat conductance through the outer walls and the solar radiation through the windows. There are two ports, one thermal, one star, for inner loads, heating etc. .
+- Parameters: Inner walls: R and C for the heat conductance and storage in the wall, A, alpha and epsilon for the heat transfer. Outer walls: Similar to inner walls, but with two R's, as there is also a conductance through the walls. Windows: g, A, epsilon and a splitfac. Please see VDI 6007 for computing the R's and C's.
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Vadliation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"));
+ 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
+
+- This thermal model represents the one dimensional heat transfer into a simple wall with dynamic characteristics (heat storage, 1 capacitance). Therefore, this (inner) wall is only used as a heat storage with a heat resistance.
+- It is based on the VDI 6007, in which the heat transfer through inner walls is described by a comparison with an electric circuit.
+- Normally, it should be used together with the other parts of the VDI 6007 model library. It represents all walls with a heat transfer in only one zone. Make sure, you got the right R's and C's (e.g. like they are computed in VDI 6007).
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+
+Example Results
+The wall model is tested and validated in the context of the ReducedOrderModel. See Validation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"),
+ 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
+
+- This thermal model represents the one dimensional heat transfer of a simple wall with dynamic characteristics (heat storage, 1 capacitance)
+- It is based on the VDI 6007, in which the heat transfer through outer walls is described by a comparison with an electric circuit.
+- Normally, it should be used together with the other parts of the VDI 6007 model library. It represents all walls with a heat transfer. Make sure, you got the right R's and C's (e.g. like they are computed in VDI 6007).
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+
+Example Results
+The wall model is tested and validated in the context of the ReducedOrderModel. See Validation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"),
+ 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
+
+- Multiplies the scalar radiance input with a factor x
+- This component can be used to in- or decrease a scalar radiance, e.g. if you would like to split the radiance, use two blocks, one with x, one with 1-x.
+
+Level of Development
+
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"), 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
+
+- This component weights the n-vectorial radiant input with n weightfactors and has a scalar output.
+- There is one fundamental equation: input(n)*weightfactors(n)/sum(weightfactors).
+- You can use this component to weight a radiant input and sum it up to one scalar output, e.g. weight the radiance of the sun of n directions with the areas of windows in n directions and sum it up to one scalar radiance on a non-directional window
+
+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="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"));
+ 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
+
+- This model connects ReducedOrderModel with Sunblind and EqAirTemp. All this models have been developed in the context of VDI 6007 to have the whole VDI 6007 model in Dymola. ThermalZonePhysics reflects all components described in the standard.
+- Additionally some other parts are used, like SolarRadWeightedSum. They are necessary for an easy handling of the complex model.
+- Inputs: real weather vector, as defined in EqAirTemp; vectorial SolarRad_in, the solar radiation (diffuse and direct) for all n directions; real infiltration/ventilation as defined in ReducedOrderModel; one thermal and one star input for inner loads, heating, etc. .
+- Parameters: Most of the parameters are geometric and building pyhsic parameters and are used in the ReducedOrderModel or in the eqAirTemp component. See the documentation of the submodels or VDI 6007 for more information.
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Validation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+
+"));
+ 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="
+
+- March, 2012 by Moritz Lauster:
Implemented
+
+
+", info="
+Test Case 1 of the VDI6007: Calculation of the reaction indoor temperature to a convective heat source for Type room S
+
+- constant outdoor temperature 22°C
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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
+
+- constant outdoor temperature 22°C
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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
+
+- constant outdoor temperature 22°C
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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
+
+- constant outdoor temperature
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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
+
+- daily input for outdoor temperature
+- no shortwave radiation on the outer wall
+- shortwave radiation through the window
+- sunblind is closed at >100W/m², behind the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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:
+
+- constant outdoor temperature
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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.
+
+- constant outdoor temperature
+- no shortwave radiation on the outer wall
+- no shortwave radiation through the window
+- no longwave radiation exchange between outer wall, window and ambience
+
+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
+
+- Second outer wall to the west
+- shortwave radiation on the outer wall
+- shortwave radiation through the windows
+- Shutter cloeses >100W/m²
+- no longwave radiation heat exchange (special EqAirTemp see: EqAirTemp_TestCase_8)
+
+
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="
+
+ - March, 2012
+ by Moritz Lauster:
+ Implemented
+
+", 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
+
+- longwave radiation heat exchange is taken into account
+
+
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
+
+- The floor is a non adiabatic wall, this changes the parameter calculation. The floor is considered to be anouter wall for RC-Calculation. In order to calculate the weightfactors for EqAirTemp correctly the orientation of this element is not "floor". In the parameter calculation "West" is used. The weightfactor calculated for the west outer wall has to used as the weightfactor of the ground.
+- changed initial temperature(!!)
+
+
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
+
+- implementation of a cooling ceeling (only cooling)
+
+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
+
+- fixed ventialation day and night
+
+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
+
+- This component computes the so called "equivalent outdoor air temperature". Basically, this includes a correction for the longwave and shortwave radiance (not on windows!).
+- The computed temperature is the temperature near the wall surface. The radiant and convective heat transfer is considered in the model. The next component connected to the heat port should be the description of the heat conductance through the wall.
+- This component was written for usage in combination with the ReducedOrderModel (see ThermalZonePhysics). As input it needs weather data, radiance (beam) by the radiance input and longwave sky radiation, longwave terrestric radiation and air temperature by the Real WeatherData input. There is the possibility to link a Sunblind by the sunblindsig input. This takes the changes in radiation on the windows through a closed shading into account.
+- Weightfactors: The different equivalent temperatures for the different directions (due to shortwave radiance and the ground) are weighted and summed up with the weightfactors. See VDI 6007 for more information about the weightfactors (equation: U_i*A_i/sum(U*A)). As the equivalent temperature is a weighted temperature for all surfaces and it was originally written for building zones, the temperature of the ground under the thermal zone can be considered (weightfactorgound > 0). The sum of all weightfactors should be 1.
+- Additionally, you need the coefficient of heat transfer and the coefficient of absorption on the outer side of the walls and windows for all directions (weighted scalars) . The coefficient of absorption is different to the emissivity due to the spectrum of the sunlight (0.6 might be a good choice).
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, Moritz; Remmen, Peter; Fuchs, Marcus; Teichmann, Jens; Streblow, Rita; Müller, Dirk (2014): Modelling long-wave radiation heat exchange for thermal network building simulations at urban scale using Modelica. In: the 10th International Modelica Conference, March 10-12, 2014, Lund, Sweden, March 10-12, 2014: Linköping University Electronic Press (Linköping Electronic Conference Proceedings), p. 125–133. DOI: 10.3384/ECP14096125.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Validation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+- February 2014, by Peter Remmen: No calculation of longwave radiation heat exchange
+
+"));
+ 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
+
+- ReducedOrderModel is a simple component to compute the air temperature, heating load, etc. for a thermal zone. The zone is simplified to one outer wall, one inner wall and one air node. It is build out of standard components and SimpleOuterWall and SimpleInnerWall.
+- The simplifications are based on the VDI 6007, which describes the thermal behaviour of a thermal zone with the equations for an electric circuit, hence they are equal. The heat transfer is described with resistances and the heat storage with capacitances.
+- The resolution of the model is very rough (only one air node), so the model is primarly thought for computing the air temperature of the room and with that, the heating and cooling load. It is more a heat load generator than a full building model. It is thought mainly for city district simulations, in which a lot of buildings has to be taken into account and the specific cirumstances in one building can be neglected.
+- Inputs: The model needs the outdoor air temperature and the Infiltration/VentilationRate for the Ventilation, the equivalent outdoor temperature (see EqAirTemp) for the heat conductance through the outer walls and the solar radiation through the windows. There are two ports, one thermal, one star, for inner loads, heating etc. .
+- Parameters: Inner walls: R and C for the heat conductance and storage in the wall, A, alpha and epsilon for the heat transfer. Outer walls: Similar to inner walls, but with two R's, as there is also a conductance through the walls. Windows: g, A, epsilon and a splitfac. Please see VDI 6007 for computing the R's and C's.
+
+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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+
+Example Results
+See Vadliation for some results.
+", revisions="
+
+- January 2012, by Moritz Lauster:
Implemented.
+- Febraury 2014, by Moritz Lauster: Reduced model with cooling ceeling
+
+"));
+ 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="
+
+- June 24, 2014 by Moritz Lauster:
Implemented
+
+"));
+ 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
+
+- German Association of Engineers: Guideline VDI 6007-1, March 2012: Calculation of transient thermal response of rooms and buildings - Modelling of rooms.
+- Lauster, M.; Teichmann, J.; Fuchs, M.; Streblow, R.; Mueller, D. (2014): Low order thermal network models for dynamic simulations of buildings on city district scale. In: Building and Environment 73, p. 223–231. DOI: 10.1016/j.buildenv.2013.12.016.
+- Lauster, Moritz; Remmen, Peter; Fuchs, Marcus; Teichmann, Jens; Streblow, Rita; Müller, Dirk (2014): Modelling long-wave radiation heat exchange for thermal network building simulations at urban scale using Modelica. In: the 10th International Modelica Conference, March 10-12, 2014, Lund, Sweden, March 10-12, 2014: Linköping University Electronic Press (Linköping Electronic Conference Proceedings), p. 125–133. DOI: 10.3384/ECP14096125.
+- Lauster M, Constantin A, Fuchs M, Streblow R, Müller D. Comparison of two Standard Simplified Thermal Building Models. In: Proceedings CISBAT Conference; 2013.
+- Lauster, M., Fuchs, M., Teichmann, J., Streblow, R., and Müller, D. 2013. Energy Simulation of a Research Campus with Typical Building Setups. In Proceedings Building Simulation Conference, 769–775.
+- Teichmann, J., Lauster, M., Fuchs, M., Streblow, R., and Müller, D. 2013. Validation of a Simplified Building Model used for City District Simulation. In Proceedings Building Simulation Conference, 2807–2814.
+- Fuchs, M., Dixius, T., Teichmann, J., Lauster, M., Streblow, R., and Müller, D. 2013. Evaluation of Interactions between Buildings and District Heating Networks. In Proceedings Building Simulation Conference, 96–103.
+
+", revisions="
+2014-06-24: Version 1.0: by Moritz Lauster
+
+- Added documentation for all models and examples
+- Renaming according to the MSL naming conventions
+- Uses new MSL comform models from Building
+
+2014-05-19: Version 0.9: by Moritz Lauster
+
+- Collected existing models and libraries and created LowOrder-library
+- Inserted Vadliation package
+"));
+end LowOrder;
diff --git a/AixLib/Building/package.mo b/AixLib/Building/package.mo
new file mode 100644
index 0000000000..37968371f2
--- /dev/null
+++ b/AixLib/Building/package.mo
@@ -0,0 +1,10 @@
+within AixLib;
+package Building "Package contains models for components used in setting up the building envelope, along with high and low order building models."
+ extends Modelica.Icons.Package;
+
+
+ annotation (Documentation(info="
+Overview
+
This package contains models for components used in setting up the building envelope, along with high and low order building models.
+"));
+end Building;
diff --git a/AixLib/Building/package.order b/AixLib/Building/package.order
new file mode 100644
index 0000000000..26ea42fda5
--- /dev/null
+++ b/AixLib/Building/package.order
@@ -0,0 +1,3 @@
+Components
+HighOrder
+LowOrder
diff --git a/AixLib/DataBase/Boiler.mo b/AixLib/DataBase/Boiler.mo
new file mode 100644
index 0000000000..6f4662ac34
--- /dev/null
+++ b/AixLib/DataBase/Boiler.mo
@@ -0,0 +1,107 @@
+within AixLib.DataBase;
+package Boiler "Records describing boiler efficiencies"
+ extends Modelica.Icons.Package;
+ record BoilerEfficiencyBaseDataDefinition
+ "TYPE: Table with boiler efficiency depending on part-load factor"
+ extends Modelica.Icons.Record;
+ parameter Real[:,2] boilerEfficiency "part-load factor | boiler efficiency";
+
+ annotation (Documentation(info="
+Overview
+This base record defines the record structure for boiler efficiencies. Boiler efficiency is defined depending on the part-load factor.
+Concept
+1. Column: part-load factor Q(T)/Q_max
+2. Column: boiler efficiency
+References
+Base data definition for record to be used in model AixLib.HVAC.HeatGeneration.Boiler
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end BoilerEfficiencyBaseDataDefinition;
+
+ record BoilerConst
+ "Boiler efficency for a simple boiler with fixed temperature"
+ extends BoilerEfficiencyBaseDataDefinition(
+ boilerEfficiency=[0.0000, 0.78;
+ 0.2000, 0.78;
+ 0.4000, 0.82;
+ 0.6000, 0.84;
+ 0.8000, 0.86;
+ 1.0000, 0.88]);
+ annotation (Documentation(info="
+Overview
+This record defines the efficiencies of a standard boiler operating at a constant temperature. Boiler efficiency is defined depending on the part-load factor.
+Level of Development
+
+Concept
+1. Column: part-load factor Q(T)/Q_max
+2. Column: boiler efficiency
+References
+Record is used in model AixLib.HVAC.HeatGeneration.Boiler
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end BoilerConst;
+
+ record BoilerLT "Boiler efficency for a low-temperature boiler"
+ extends BoilerEfficiencyBaseDataDefinition(
+ boilerEfficiency=[0.0000, 1.0;
+ 0.2000, 1.0;
+ 0.4000, 0.98;
+ 0.6000, 0.96;
+ 0.8000, 0.95;
+ 1.0000, 0.94]);
+ annotation (Documentation(info="
+Overview
+This record defines the efficiencies of a low-temperature boiler operating at a variable temperature. Boiler efficiency is defined depending on the part-load factor.
+Level of Development
+
+Concept
+1. Column: part-load factor Q(T)/Q_max
+2. Column: boiler efficiency
+References
+Record is used in model AixLib.HVAC.HeatGeneration.Boiler
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end BoilerLT;
+
+ record BoilerCondensing "Boiler efficency for a condensing boiler"
+ extends BoilerEfficiencyBaseDataDefinition(
+ boilerEfficiency=[0.0000, 1.05;
+ 0.2000, 1.05;
+ 0.4000, 1.02;
+ 0.6000, 1.0;
+ 0.8000, 0.98;
+ 1.0000, 0.96]);
+ annotation (Documentation(info="
+Overview
+This record defines the efficiencies of a condensing boiler operating at a variable temperature. Boiler efficiency is defined depending on the part-load factor.
+Level of Development
+
+Concept
+1. Column: part-load factor Q(T)/Q_max
+2. Column: boiler efficiency
+References
+Record is used in model AixLib.HVAC.HeatGeneration.Boiler
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end BoilerCondensing;
+end Boiler;
diff --git a/AixLib/DataBase/Buildings.mo b/AixLib/DataBase/Buildings.mo
new file mode 100644
index 0000000000..c0d68439c9
--- /dev/null
+++ b/AixLib/DataBase/Buildings.mo
@@ -0,0 +1,261 @@
+within AixLib.DataBase;
+package Buildings "Parameter sets for zones and buildings."
+ extends Modelica.Icons.Package;
+
+ record ZoneBaseRecord "the used record standard"
+ extends Modelica.Icons.Record;
+ parameter String zoneID = "B1Z1" "unique identifier of the zone";
+ parameter String usage = "Einzelbuero" "typical usage of zone space";
+ parameter Modelica.SIunits.Temp_K T0all=273.15+20.1
+ "Initial temperature for all components" annotation(Dialog(descriptionLabel = false));
+ parameter Modelica.SIunits.HeatFlowRate Q_flow_heat=1 "Heat flow rate"
+ annotation(Dialog(tab="Heater", enable = Heater_on, descriptionLabel = false));
+ parameter Modelica.SIunits.HeatFlowRate Q_N=30000
+ "nominal heating power of zone"
+ annotation(Dialog(tab="Heater", enable = Heater_on, descriptionLabel = false));
+ parameter Real h_heater=30000 "Upper limit controller output"
+ annotation(Dialog(tab="Heater",group = "Controller", enable = Heater_on, descriptionLabel = false));
+ parameter Real l_heater=0 "Lower limit controller output"
+ annotation(Dialog(tab="Heater",group = "Controller", enable = Heater_on, descriptionLabel = false));
+ parameter Real KR_heater=10000 "Gain of the controller, h_heater/60"
+ annotation(Dialog(tab="Heater",group = "Controller", enable = Heater_on, descriptionLabel = false));
+ parameter Modelica.SIunits.Time TN_heater=1
+ "Time constant of the controller, KR_heater*0.15"
+ annotation(Dialog(tab="Heater",group = "Controller", enable = Heater_on, descriptionLabel = false));
+ parameter Real weightfactor_heater=1 "Weightfactor"
+ annotation(Dialog(tab="Heater", enable = Heater_on, descriptionLabel = false));
+ parameter Boolean Heater_on=true "if use heater component"
+ annotation(Dialog(tab="Heater",descriptionLabel = false));
+ parameter Modelica.SIunits.HeatFlowRate Q_flow_cooler=1 "Heat flow rate"
+ annotation(Dialog(tab="Cooler", enable = Cooler_on, descriptionLabel = false));
+ parameter Real h_cooler=0 "Upper limit controller output"
+ annotation(Dialog(tab="Cooler",group = "Controller", enable = Cooler_on, descriptionLabel = false));
+ parameter Real l_cooler=-30000 "Lower limit controller output"
+ annotation(Dialog(tab="Cooler",group = "Controller", enable = Cooler_on, descriptionLabel = false));
+ parameter Real KR_cooler=10000 "Gain of the controller, abs(l_cooler/80)"
+ annotation(Dialog(tab="Cooler",group = "Controller", enable = Cooler_on, descriptionLabel = false));
+ parameter Modelica.SIunits.Time TN_cooler=1
+ "Time constant of the controller, l_cooler*0.15"
+ annotation(Dialog(tab="Cooler",group = "Controller", enable = Cooler_on, descriptionLabel = false));
+ parameter Real weightfactor_cooler=1 "Weightfactor"
+ annotation(Dialog(tab="Cooler", enable = Cooler_on, descriptionLabel = false));
+ parameter Boolean Cooler_on=true "if use chiller component"
+ annotation(Dialog(tab="Cooler",descriptionLabel = false));
+ parameter Integer ActivityTypePeople = 3 "Physical activity"
+ annotation(Dialog(tab="Inner loads",group = "Persons", compact = true, descriptionLabel = false), choices(choice=2 "light", choice = 3
+ "moderate",choice = 4 "heavy ", radioButtons = true));
+ parameter Real NrPeople = 1 "Number of people in the room" annotation(Dialog(tab="Inner loads",group = "Persons",descriptionLabel = false));
+ parameter Real RatioConvectiveHeatPeople = 0.5
+ "Ratio of convective heat from overall heat output" annotation(Dialog(tab="Inner loads",group = "Persons", descriptionLabel = false));
+ parameter Integer ActivityTypeMachines = 2 "Machine activity"
+ annotation(Dialog(tab="Inner loads",group = "Machines", compact = true, descriptionLabel = false), choices(choice=1 "low", choice = 2 "middle", choice = 3 "high", radioButtons = true));
+ parameter Real NrPeopleMachines = 1 "Number of people with machines" annotation(Dialog(tab="Inner loads",group = "Machines",descriptionLabel = false));
+ parameter Real RatioConvectiveHeatMachines = 0.6
+ "Ratio of convective heat from overall heat output" annotation(Dialog(tab="Inner loads",group = "Machines", descriptionLabel = false));
+ parameter Modelica.SIunits.Area RoomArea = 20 "Area of room" annotation(Dialog(tab="Inner loads",group = "Lighting", descriptionLabel = false));
+ parameter Real LightingPower = 10 "Heating power of lighting in W/m2" annotation(Dialog(tab="Inner loads",group = "Lighting", descriptionLabel = false));
+ parameter Real RatioConvectiveHeatLighting = 0.5
+ "Ratio of convective heat from overall heat output" annotation(Dialog(tab="Inner loads",group = "Lighting", descriptionLabel = false));
+ parameter Boolean withInnerwalls = true "If inner walls are existent" annotation(Dialog(tab="Inner walls"));
+ parameter Modelica.SIunits.ThermalResistance R1i=0.000656956 "Resistor 1"
+ annotation(Dialog(tab="Inner walls", descriptionLabel = false, enable = withInnerwalls));
+ parameter Modelica.SIunits.HeatCapacity C1i=12049200 "Capacity 1"
+ annotation(Dialog(tab="Inner walls", descriptionLabel = false, enable = withInnerwalls));
+ parameter Modelica.SIunits.Area Ai=60.5 "Inner wall area"
+ annotation(Dialog(tab="Inner walls", descriptionLabel = false, enable = withInnerwalls));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaiwi=2.1
+ "Inner wall's coefficient of heat transfer"
+ annotation(Dialog(tab="Inner walls", descriptionLabel = false, enable = withInnerwalls));
+ parameter Modelica.SIunits.Emissivity epsi=0.9 "Emissivity"
+ annotation(Dialog(tab="Inner walls", descriptionLabel = false, enable = withInnerwalls));
+ 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"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.ThermalResistance R1o=0.02045808 "Resistor 1"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.HeatCapacity C1o=4896650 "Capacity 1"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.Area Ao=25.5 "Outer wall area"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowi=2.7
+ "Outer wall's coefficient of heat transfer (inner side)"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaowo=20
+ "Outer wall's coefficient of heat transfer (outer side)"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Modelica.SIunits.Emissivity epso=0.9 "Emissivity"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Real aowo=0.7
+ "Outer wall's coefficient of absorption (outer side)"
+ annotation(Dialog(tab="Outer walls", descriptionLabel = false, enable = withOuterwalls));
+ parameter Integer n=4 "Number of orientations (without ground)" annotation(Dialog(tab="Outer walls", enable = withOuterwalls));
+ parameter Real weightfactorswall[n]={0.5,0.2,0.2,0.1}
+ "Weightfactors of the walls (Aj/Atot)" annotation(Dialog(tab="Outer walls", enable = withOuterwalls));
+ parameter Real weightfactorground=0
+ "Weightfactor of the earth (0 if not considered)" annotation(Dialog(tab="Outer walls", enable = withOuterwalls));
+ parameter Modelica.SIunits.Temp_K temperatureground=286.15
+ "Temperature of the earth" annotation(Dialog(tab="Outer walls", enable = withOuterwalls));
+ parameter Boolean withWindows = true "If windows are existent" annotation(Dialog(tab="Windows", enable = withOuterwalls));
+ parameter Real splitfac = 0
+ "part of convective heat transfer through windows" annotation(Dialog(tab="Windows", enable = withOuterwalls));
+ parameter Modelica.SIunits.Area Aw[n]={1,1,1,1} "Area of the windows"
+ annotation(Dialog(tab="Windows", descriptionLabel = false,enable = if withWindows and withOuterwalls then true else false));
+ parameter Modelica.SIunits.TransmissionCoefficient gsunblind[n]={1,1,1,1}
+ "Energy transmittances if sunblind is closed"
+ annotation(Dialog(tab="Windows",group="Shading", descriptionLabel = false,enable = if withWindows and withOuterwalls then true else false));
+ parameter Modelica.SIunits.RadiantEnergyFluenceRate Imax=200
+ "Intensity at which the sunblind closes"
+ annotation(Dialog(tab="Windows",group="Shading", descriptionLabel = false,enable = if withWindows and withOuterwalls then true else false));
+ parameter Real weightfactorswindow[n]={0,0,0,0}
+ "Weightfactors of the windows" annotation(Dialog(tab="Windows",enable = if withWindows and withOuterwalls then true else false));
+ parameter Modelica.SIunits.Emissivity epsw=0.9 "Emissivity"
+ annotation(Dialog(tab="Windows", descriptionLabel = false,enable = if withWindows and withOuterwalls then true else false));
+ parameter Modelica.SIunits.TransmissionCoefficient g=0.7
+ "Total energy transmittance"
+ annotation(Dialog(tab="Windows", descriptionLabel = false,enable = if withWindows and withOuterwalls then true else false));
+ parameter Modelica.SIunits.Length Lchar=12
+ "characterisic length of building (longer side)";
+ parameter Modelica.SIunits.Length Bchar=11
+ "characterisic width of building (smaller side)";
+ parameter Modelica.SIunits.Length Hb=2.9 "height of one story";
+ parameter Real Nb=3 "number of stories";
+
+ parameter Modelica.SIunits.Volume Vair=52.5 "Volume"
+ annotation(Dialog(tab="Room air", descriptionLabel = false));
+ parameter Modelica.SIunits.Density rhoair=1.19 "Density"
+ annotation(Dialog(tab="Room air", descriptionLabel = false));
+ parameter Modelica.SIunits.SpecificHeatCapacity cair=1007 "Heat capacity"
+ annotation(Dialog(tab="Room air", descriptionLabel = false));
+ parameter Boolean withAHU = false
+ "Choose if zone is connected to central air handling unit"
+ annotation(Dialog(tab="Room air", descriptionLabel = false), choices(choice = true "yes", choice = false "no",radioButtons = true));
+ parameter Real minAHU(unit="m3/(h.m2)") = 0
+ "Minimum specific air flow supplied by the AHU" annotation(Dialog(tab="Room air"));
+ parameter Real maxAHU(unit="m3/(h.m2)") = 4
+ "Maximum specific air flow supplied by the AHU" annotation(Dialog(tab="Room air"));
+ parameter Boolean useConstantACHrate = false
+ "Choose if a constant infiltration rate is used" annotation(Dialog(tab="Room air", group="ACH", descriptionLabel = false), choices(choice = true "yes", choice = false "no",radioButtons = true));
+ parameter Real baseACH = 0.2 "base ACH rate for ventilation controller" annotation(Dialog(tab="Room air", group="ACH", descriptionLabel = false));
+ parameter Real maxUserACH = 1.0
+ "additional ACH value for max. user activity" annotation(Dialog(tab="Room air", group="ACH", descriptionLabel = false));
+ parameter Real maxOverheatingACH[2] = {3.0,2.0}
+ "additional ACH value when overheating appears, transition range in K" annotation(Dialog(tab="Room air", group="ACH", descriptionLabel = false));
+ parameter Real maxSummerACH[3] = {1.0,273.15 + 10,273.15 + 17}
+ "additional ACH in summer, Tmin, Tmax" annotation(Dialog(tab="Room air", group="ACH", descriptionLabel = false));
+
+ annotation (Documentation(info="
+Overview
+This is the base definition is zone records used in Cities.BuildingPhysics.ThermalZone. All necessary parameters are defined here. Most values should be overwritten for a specific building, some are default values that might be appropriate in most cases. However, fell free to overwrite them in your own records.
+Level of Development
+
+Concept
+Remark: The design heating power Q_N of the building is the sum of net design power according to transmission and ventilation losses at a given outdoor temperature and an additional re-heating power for early morning heat up after night set-back. Net design power can be simulated with constant boundary conditions (e. g.: no internal or external gains, Touside=-12 degC, ACH=0.5). The additional re-heating power is computed by a factor [f_RH]=W/m2 and the heated zone floor area.
+The factor f_RH in W/m2 can be chosen form the following table:
+
+ |
+1 K |
+2 K |
+3 K |
+
+
+re-heat time |
+light |
+medium |
+heavy |
+
+
+1 h |
+11 |
+22 |
+45 |
+
+
+2 h |
+6 |
+11 |
+22 |
+
+
+3 h |
+4 |
+9 |
+16 |
+
+
+4 h |
+2 |
+7 |
+13 |
+
+
+References
+Base data definition for record to be used in model Cities.BuildingPhysics.ThermalZone
+", revisions="
+
+ - February 4, 2014 by Ole Odendahl:
+ Added new parameters for the setup of the ACH. It is now possible to assign different values to the ACH for each zone based on this record.
+ - January 27, 2014 by Ole Odendahl:
+ Added new parameter withAHU to choose whether the zone is connected to a central air handling unit. Default false
+ - March, 2012
+ by Peter Matthes:
+ Implemented
+ - November, 2012
+ by Moritz Lauster:
+ Restored links
+
+"));
+ end ZoneBaseRecord;
+
+ package OfficePassiveHouse
+ extends Modelica.Icons.Package;
+
+ record OPH_1_Meeting
+ extends ZoneBaseRecord(
+ n=5,
+ aowo=0.7,
+ Heater_on=true,
+ Cooler_on=false,
+ l_cooler=0,
+ RatioConvectiveHeatLighting=0.5,
+ zoneID="Example_1_Besprechung_Sitzung_Seminar.mo",
+ usage="Besprechung, Sitzung, Seminar",
+ RoomArea=134.0,
+ Vair=536.0,
+ alphaiwi=2.27142857143,
+ alphaowi=2.19074074074,
+ alphaowo=25.0,
+ g=0.78,
+ NrPeople=32.16,
+ NrPeopleMachines=2.68,
+ LightingPower=15.9,
+ h_heater=13400,
+ gsunblind={1.0,1.0,1.0,1.0,1},
+ Aw={8.7,1.5,8.7,1.5,0},
+ withWindows=true,
+ weightfactorswindow={0.13786322498,0.0237695215482,0.13786322498,
+ 0.0237695215482,0},
+ weightfactorswall={0.129261167328,0.0225783698389,0.129261167328,
+ 0.0225783698389,0.11867896908},
+ weightfactorground=0.254376463531,
+ Ai=469.0,
+ withInnerwalls=true,
+ R1i=0.000141309044786,
+ C1i=112210241.118,
+ Ao=151.2,
+ withOuterwalls=true,
+ R1o=0.00017702091729,
+ RRest=0.00476430963748,
+ C1o=39369992.1342);
+ annotation (Documentation(info="
+Overview
+Zone "Meeting" of an example building according to an office building with passive house standard. The building is divided in six zones, this is a typical zoning for an office building.
+Level of Development
+
+References
+Record is used in model Cities.BuildingPhysics.ThermalZone and Cities.Cities_DataBase.Buildings.OfficePassiveHouse
+"));
+ end OPH_1_Meeting;
+ end OfficePassiveHouse;
+end Buildings;
diff --git a/AixLib/DataBase/Fans.mo b/AixLib/DataBase/Fans.mo
new file mode 100644
index 0000000000..11a105fd75
--- /dev/null
+++ b/AixLib/DataBase/Fans.mo
@@ -0,0 +1,42 @@
+within AixLib.DataBase;
+package Fans "Base definition and specific parameter definitions of fans"
+ extends Modelica.Icons.Package;
+ record FanCharacteristicsBaseDataDefinition
+ "Characteristics for simple fan model"
+ extends Modelica.Icons.Record;
+ parameter Real[:,:] dp "V_flow | dp | eta ";
+ annotation (Documentation(info="
+Overview
+
1. Column: Volume Flow in m^3 / h
+2. Column: Pressure Increase in Pa
+3. Column: efficiency of Fan
+References
+Base data definition for record to be used in model AixLib.HVAC.Fan.FanSimple
+", revisions="
+30.12.2013, by Mark Wesseling: implemented
+"));
+ end FanCharacteristicsBaseDataDefinition;
+
+ record Fan1 "Fan with Diameter of 250mm"
+ extends FanCharacteristicsBaseDataDefinition(
+ dp=[
+ 0,1100, 0.3;
+ 900, 1050, 0.4;
+ 1500, 1000, 0.6;
+ 2000,800, 0.7;
+ 2500,500, 0.5;
+ 2600, 400, 0.4;
+ 2700, 0, 0.3]);
+ annotation (Documentation(info="
+Level of Development
+
+Example for a small fan with a diameter of 250mm. Maximum volume flow of 2700 m^3/h and maximum pressure increase of 1100 Pa.
+References
+Record is used in model AixLib.HVAC.Fan.FanSimple
+", revisions="
+30.12.2013, by Mark Wesseling: implemented
+"));
+
+ end Fan1;
+
+end Fans;
diff --git a/AixLib/DataBase/Profiles.mo b/AixLib/DataBase/Profiles.mo
new file mode 100644
index 0000000000..ad3e145dd5
--- /dev/null
+++ b/AixLib/DataBase/Profiles.mo
@@ -0,0 +1,144 @@
+within AixLib.DataBase;
+package Profiles "Profiles for ventilation, set temperatures, internal gains"
+ extends Modelica.Icons.Package;
+record Profile_BaseDataDefinition "Ventilation profiles"
+ extends Modelica.Icons.Record;
+ parameter Real[:,:] Profile "First column time";
+
+ annotation (Documentation(info="
+Overview
+Profiles are to be understood as useage profiles.
+Concept
+For example:
+
+- Ventilation schedules
+- Schedules for set room temperature
+
+References
+Base data definition for record to be used in model Modelica.Blocks.Sources.CombiTimeTable
+",
+ revisions="
+
+- August 30, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- July 3, 2012 by Ana Constantin:
Implemented.
+
+"));
+end Profile_BaseDataDefinition;
+
+record Ventilation_2perDay_Mean05perH
+ "Ventilation two times a day, with a mean value of 0.5 1/h per day. For five rooms. "
+ extends Profile_BaseDataDefinition(Profile=[0,0,0,0,0,0; 3600,0,0,0,0,0; 7200,
+ 0,0,0,0,0; 10800,0,0,0,0,0; 14400,0,0,0,0,0; 18000,0,0,0,0,0; 21600,0,
+ 0,0,0,0; 25200,0,0,0,0,0; 26940,0,0,0,0,0; 27000,0,0,0,0,0; 28740,0,0,
+ 0,0,0; 28800,0,0,12,0,0; 30540,0,0,12,0,0; 30600,12,0,0,0,0; 32340,12,
+ 0,0,0,0; 32400,0,12,0,0,0; 34140,0,12,0,0,0; 34200,0,0,0,12,0; 35940,
+ 0,0,0,12,0; 36000,0,0,0,0,12; 37740,0,0,0,0,12; 37800,0,0,0,0,0;
+ 39540,0,0,0,0,0; 39600,0,0,0,0,0; 64740,0,0,0,0,0; 64800,0,0,12,0,0;
+ 66540,0,0,12,0,0; 66600,12,0,0,0,0; 68340,12,0,0,0,0; 68400,0,12,0,0,
+ 0; 70140,0,12,0,0,0; 70200,0,0,0,12,0; 71940,0,0,0,12,0; 72000,0,0,0,
+ 0,12; 73740,0,0,0,0,12; 73800,0,0,0,0,0; 75540,0,0,0,0,0; 82800,0,0,0,
+ 0,0; 86400,0,0,0,0,0]);
+ annotation (Documentation(info="
+Overview
+Mean value per day: 0.5 1/h.
+Two ventilation intervales, each 30 Min with an air exchange rate of 12 1/h.
+Model can be used for OFD and MFD. On each floor there is a delay in ventilation between rooms of 30 Min.
+One day is represented. Make sure you set the startTime - parameter when using in a table as the beginning of the day, regardless of the fact that the simulation starts at that moment.
+Level of Development
+
+Concept
+Table for Natural Ventilation:
+Column 1: Time
+Column 2: Ventilation rate for OFD-Livingroom / OFD-Bedroom / MFD-Bedroom
+Column 3: Ventilation rate for OFD-Hobby / OFD Children1 / MFD-Children
+Column 4: Ventilation rate for OFD-Kitchen / OFH-Children2 / MFD-Kitchen
+Column 5: Ventilation rate for OFH-Bathroom / OFH-WC / MFD- Bathroom
+Column 6: Ventilation rate for MFD-Livingroom
+References
+Record is used in model Modelica.Blocks.Sources.CombiTimeTable
+",
+ revisions="
+
+- August 30, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- July 3, 2012 by Ana Constantin:
Implemented.
+
+"));
+end Ventilation_2perDay_Mean05perH;
+
+record SetTemperatures_Ventilation2perDay
+ "Set temperature for ventilation two times a day"
+ extends Profile_BaseDataDefinition(Profile=[0,295.15,295.15,295.15,297.15,
+ 291.15,291.15,295.15; 3600,295.15,295.15,295.15,297.15,291.15,291.15,
+ 295.15; 7200,295.15,295.15,295.15,297.15,291.15,291.15,295.15; 10800,
+ 295.15,295.15,295.15,297.15,291.15,291.15,295.15; 14400,295.15,295.15,
+ 295.15,297.15,291.15,291.15,295.15; 18000,295.15,295.15,295.15,297.15,
+ 291.15,291.15,295.15; 21600,295.15,295.15,295.15,297.15,291.15,291.15,
+ 295.15; 25200,295.15,295.15,295.15,297.15,291.15,291.15,295.15; 26940,
+ 295.15,295.15,295.15,297.15,291.15,291.15,295.15; 27000,295.15,295.15,
+ 295.15,297.15,291.15,291.15,295.15; 28740,295.15,295.15,295.15,297.15,
+ 291.15,291.15,295.15; 28800,295.15,295.15,293.15,297.15,291.15,291.15,
+ 295.15; 29100,295.15,295.15,280.15,297.15,291.15,291.15,295.15; 30540,
+ 295.15,295.15,280.15,297.15,291.15,291.15,295.15; 30600,293.15,295.15,
+ 287.15,297.15,291.15,291.15,295.15; 30900,280.15,295.15,295.15,297.15,
+ 291.15,291.15,295.15; 32340,280.15,295.15,295.15,297.15,291.15,291.15,
+ 295.15; 32400,287.15,293.15,295.15,297.15,291.15,291.15,295.15; 32700,
+ 295.15,280.15,295.15,297.15,291.15,291.15,295.15; 34140,295.15,280.15,
+ 295.15,297.15,291.15,291.15,295.15; 34200,295.15,287.15,295.15,295.15,
+ 289.15,291.15,295.15; 34500,295.15,295.15,295.15,280.15,280.15,291.15,
+ 295.15; 35940,295.15,295.15,295.15,280.15,280.15,291.15,295.15; 36000,
+ 295.15,295.15,295.15,290.15,286.15,291.15,293.15; 36300,295.15,295.15,
+ 295.15,297.15,291.15,291.15,280.15; 37740,295.15,295.15,295.15,297.15,
+ 291.15,291.15,280.15; 37800,295.15,295.15,295.15,297.15,291.15,291.15,
+ 287.15; 39540,295.15,295.15,295.15,297.15,291.15,291.15,295.15; 39600,
+ 295.15,295.15,295.15,297.15,291.15,291.15,295.15; 64740,295.15,295.15,
+ 295.15,297.15,291.15,291.15,295.15; 64800,295.15,295.15,293.15,297.15,
+ 291.15,291.15,295.15; 65100,295.15,295.15,280.15,297.15,291.15,291.15,
+ 295.15; 66540,295.15,295.15,280.15,297.15,291.15,291.15,295.15; 66600,
+ 293.15,295.15,287.15,297.15,291.15,291.15,295.15; 66900,280.15,295.15,
+ 295.15,297.15,291.15,291.15,295.15; 68340,280.15,295.15,295.15,297.15,
+ 291.15,291.15,295.15; 68400,287.15,293.15,295.15,297.15,291.15,291.15,
+ 295.15; 68700,295.15,280.15,295.15,297.15,291.15,291.15,295.15; 70140,
+ 295.15,280.15,295.15,297.15,291.15,291.15,295.15; 70200,295.15,287.15,
+ 295.15,295.15,289.15,291.15,295.15; 70500,295.15,295.15,295.15,280.15,
+ 280.15,291.15,295.15; 71940,295.15,295.15,295.15,280.15,280.15,291.15,
+ 295.15; 72000,295.15,295.15,295.15,290.15,286.15,291.15,293.15; 72300,
+ 295.15,295.15,295.15,297.15,291.15,291.15,280.15; 73740,295.15,295.15,
+ 295.15,297.15,291.15,291.15,280.15; 73800,295.15,295.15,295.15,297.15,
+ 291.15,291.15,287.15; 75540,295.15,295.15,295.15,297.15,291.15,291.15,
+ 295.15; 82800,295.15,295.15,295.15,297.15,291.15,291.15,295.15; 86400,
+ 295.15,295.15,295.15,297.15,291.15,291.15,295.15]);
+ annotation (Documentation(info="
+Overview
+Mean value per day: 0.5 1/h.
+Two ventilation intervales, each 30 Min with an air exchange rate of 12 1/h.
+Model can be used for OFD and MFD. On each floor there is a delay in ventilation between rooms of 30 Min.
+One day is represented. Make sure you set the startTime - parameter when using in a table as the beginning of the day, regardless of the fact that the simulation starts at that moment.
+Level of Development
+
+Concept
+Table for Natural Ventilation:
+Column 1: Time
+Column 2: Ventilation rate for OFD-Livingroom / OFD-Bedroom / MFD-Bedroom
+Column 3: Ventilation rate for OFD-Hobby / OFD Children1 / MFD-Children
+Column 4: Ventilation rate for OFD-Kitchen / OFH-Children2 / MFD-Kitchen
+Column 5: Ventilation rate for OFH-Bathroom / OFH-WC / MFD- Bathroom
+Column 6: Ventilation rate for MFD-Livingroom
+References
+Record is used in model Modelica.Blocks.Sources.CombiTimeTable
+",
+ revisions="
+
+- August 30, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- July 3, 2012 by Ana Constantin:
Implemented.
+
+"));
+end SetTemperatures_Ventilation2perDay;
+annotation (Documentation(info="
+Profiles are to be understood as use profiles.
+For example:
+
+- Ventilation schedules
+- Schedules for set room temperature
+
+"));
+end Profiles;
diff --git a/AixLib/DataBase/Pumps.mo b/AixLib/DataBase/Pumps.mo
new file mode 100644
index 0000000000..33c56b3df2
--- /dev/null
+++ b/AixLib/DataBase/Pumps.mo
@@ -0,0 +1,57 @@
+within AixLib.DataBase;
+package Pumps "Base definition and parameter set for pumps"
+ extends Modelica.Icons.Package;
+ record MinMaxCharacteristicsBaseDataDefinition
+ "TYPE: Table with Head = f(V_flow) min amd max characteristics for the pump"
+ extends Modelica.Icons.Record;
+ parameter Real[:,:] minMaxHead "V_flow | min Head | max Head";
+
+ annotation (Documentation(info="
+Overview
+Record contains the mininmal and maximal characteristics of a pump.
+Concept
+The record contains just one table.
+Table structure:
+1. Column: Volume flow in m3/h
+2. Column: Head by maximal rotational speed in m
+3. Column: Head by maximall rotational speed in m
+References
+Base data definition for record to be used in model AixLib.HVAC.Pumps.Pump
+",
+ revisions="
+01.11.2013, by Ana Constantin: implemented
+"));
+ end MinMaxCharacteristicsBaseDataDefinition;
+
+ record Pump1 "Pump with maximum head of 5 m"
+ extends MinMaxCharacteristicsBaseDataDefinition(
+ minMaxHead=[0.0000, 0.6, 5.0;
+ 0.5000, 0.4, 4.5;
+ 0.7500, 0.3, 4.0;
+ 1.3000, 0.0, 3.0;
+ 1.5000, 0.0, 2.5;
+ 2.5000, 0.0, 1.5;
+ 3.0000, 0.0, 1.0;
+ 3.5000, 0.0, 0.5;
+ 4.0000, 0.0, 0.0;
+ 4.5000, 0.0, 0.0]);
+ annotation (Documentation(revisions="
+01.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Record for a pump with a maximum head of 5 m and a maximum volume flow of 4 m3/h.
+Values are assumptions.
+Level of Development
+
+Concept
+The record contains just one table.
+Table structure:
+1. Column: Volume flow in m3/h
+2. Column: Head by maximal rotational speed in m
+3. Column: Head by maximall rotational speed in m
+References
+Record is used in model AixLib.HVAC.Pumps.Pump
+"));
+ end Pump1;
+
+end Pumps;
diff --git a/AixLib/DataBase/Radiators.mo b/AixLib/DataBase/Radiators.mo
new file mode 100644
index 0000000000..9466cb2c12
--- /dev/null
+++ b/AixLib/DataBase/Radiators.mo
@@ -0,0 +1,584 @@
+within AixLib.DataBase;
+package Radiators
+ "Base record definition of radiators and some ready-to-use parameter sets"
+ extends Modelica.Icons.Package;
+ record RadiatiorBaseDataDefinition "Base Data Definition for Radiators"
+ extends Modelica.Icons.Record;
+ parameter Real NominalPower
+ "Nominal power of radiator at nominal temperatures in W ";
+ parameter Modelica.SIunits.Temperature T_flow_nom( displayUnit = "degC")
+ "Nominal temperatures T_flow according to DIN-EN 442. in degC";
+ parameter Modelica.SIunits.Temperature T_return_nom( displayUnit = "degC")
+ "Nominal temperatures T_return according to DIN-EN 442.in deg C";
+ parameter Modelica.SIunits.Temperature T_room_nom( displayUnit = "degC")
+ "Nominal temperatures T_room according to DIN-EN 442. in deg C";
+
+ parameter Real Exponent=1.29 annotation (Dialog(group="Geometry"));
+ parameter Real VolumeWater(unit="l") "Water volume inside radiator in l";
+ parameter Real MassSteel(unit="kg") "Material mass of radiator in kg";
+ parameter Real RadPercent "Percent of radiative heat";
+
+ parameter Modelica.SIunits.Length length "Length of radiator in m";
+ parameter Modelica.SIunits.Height height "Height of radiator in m";
+
+ annotation (Documentation(revisions="
+13.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Record for a radiator.
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Base data definition for record to be used in model AixLib.HVAC.Radiators.Radiator
+"));
+ end RadiatiorBaseDataDefinition;
+
+ record ThermX2_ProfilV_979W
+ "ThermX2, Profil V (Kermi) Power=979W, L=1000, H=600, Typ=11, {75,65,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 979,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 20,
+ Exponent=1.2721,
+ VolumeWater=3.15,
+ MassSteel=19.58,
+ RadPercent = 0.35,
+ length=1.0,
+ height=0.6);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end ThermX2_ProfilV_979W;
+
+ package StandardOFD_EnEV2009
+ "For a standard one family dweling after EnEV 2009"
+ extends Modelica.Icons.Package;
+ record Livingroom
+ "Standard OFD EnEV2009 Livingroom = ThermX2, Profil V (Kermi) Power=1288W, L=2600, H=300, Typ=22, {55,45,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 1288,
+ T_flow_nom= 55,
+ T_return_nom = 45,
+ T_room_nom = 20,
+ Exponent=1.2776,
+ VolumeWater=9.36,
+ MassSteel=44.23,
+ RadPercent = 0.3,
+ length=2.6,
+ height=0.3);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end Livingroom;
+
+ record Hobby
+ "Standard OFD EnEV2009 Hobby = ThermX2, Profil V (Kermi) Power=644W, L=1300, H=300, Typ=22, {55,45,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 644,
+ T_flow_nom= 55,
+ T_return_nom = 45,
+ T_room_nom = 20,
+ Exponent=1.2776,
+ VolumeWater=4.68,
+ MassSteel=22.11,
+ RadPercent = 0.3,
+ length=1.3,
+ height=0.3);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end Hobby;
+
+ record Corridor
+ "Standard OFD EnEV2009 Corridor = ThermX2, Profil V (Kermi) Power=318W, L=1000, H=300, Typ=11, {55,45,18}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 318,
+ T_flow_nom= 55,
+ T_return_nom = 45,
+ T_room_nom = 18,
+ Exponent=1.2196,
+ VolumeWater=1.8,
+ MassSteel=9.87,
+ RadPercent = 0.35,
+ length=1.0,
+ height=0.3);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end Corridor;
+
+ record WC
+ "Standard OFD EnEV2009 WC = ThermX2, Profil V (Kermi) Power=593W, L=1100, H=300, Typ=22, {55,45,18}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 593,
+ T_flow_nom= 55,
+ T_return_nom = 45,
+ T_room_nom = 18,
+ Exponent=1.2776,
+ VolumeWater=3.96,
+ MassSteel=18.71,
+ RadPercent = 0.3,
+ length=1.1,
+ height=0.3);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end WC;
+
+ record Kitchen
+ "Standard OFD EnEV2009 Kitchen = ThermX2, Profil V (Kermi) Power=970W, L=2600, H=300, Typ=12, {55,45,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower= 970,
+ T_flow_nom= 55,
+ T_return_nom = 45,
+ T_room_nom = 20,
+ Exponent=1.2731,
+ VolumeWater=9.36,
+ MassSteel=38.12,
+ RadPercent = 0.3,
+ length=2.6,
+ height=3.0);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end Kitchen;
+ end StandardOFD_EnEV2009;
+
+ package StandardMFD_WSchV1984_OneAppartment
+ extends Modelica.Icons.Package;
+
+ record Livingroom
+ "ThermX2, Profil V (Kermi) Power=1267W, L=0.5, H=300, Typ=11, {75,65,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower=1276,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 20,
+ Exponent=1.2196,
+ VolumeWater=1.80,
+ MassSteel=9.87,
+ RadPercent = 0.3,
+ length=2.3,
+ height=0.3);
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+
+- August 13, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- November 15, 2011 by Ana Constantin:
implemented
+
+"));
+ end Livingroom;
+
+ record Children
+ "ThermX2, Profil V (Kermi) Power=882W, L=1600, H=300, Typ=11, {75,65,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower=882,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 20,
+ Exponent=1.2196,
+ VolumeWater=1.80,
+ MassSteel=9.87,
+ RadPercent = 0.3,
+ length=2.3,
+ height=0.3);
+
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+
+- August 13, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- November 15, 2011 by Ana Constantin:
implemented
+
+"));
+ end Children;
+
+ record Bedroom
+ "ThermX2, Profil V (Kermi) Power=882W, L=1600, H=300, Typ=11, {75,65,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower=882,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 20,
+ Exponent=1.2196,
+ VolumeWater=1.80,
+ MassSteel=9.87,
+ RadPercent = 0.3,
+ length=1.6,
+ height=0.3);
+
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+
+- August 13, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- November 15, 2011 by Ana Constantin:
implemented
+
+"));
+ end Bedroom;
+
+ record Bathroom
+ "ThermX2, Profil V (Kermi) Power=603W, L=700, H=300, Typ=22, {75,65,24}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower=603,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 24,
+ Exponent=1.2776,
+ VolumeWater=3.6,
+ MassSteel=17.01,
+ RadPercent = 0.3,
+ length=0.7,
+ height=0.3);
+
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+
+- August 13, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- November 15, 2011 by Ana Constantin:
implemented
+
+"));
+ end Bathroom;
+
+ record Kitchen
+ "ThermX2, Profil V (Kermi) Power=576W, L=800, H=300, Typ=12, {75,65,20}"
+ extends RadiatiorBaseDataDefinition(
+ NominalPower=576,
+ T_flow_nom= 75,
+ T_return_nom = 65,
+ T_room_nom = 20,
+ Exponent=1.2731,
+ VolumeWater=3.6,
+ MassSteel=14.66,
+ RadPercent = 0.3,
+ length=0.8,
+ height=0.3);
+
+ annotation (Documentation(info="
+Overview
+Kermi radiator: Flachheizkoerper ThermX2, Profil V
+Level of Development
+
+Concept
+The record contains information about the:
+
+- Nominal power of radiator at nominal temperatures in W
+- Nominal temperatures T_flow according to DIN-EN 442 in degC
+- Nominal temperatures T_return according to DIN-EN 442 in degC
+- Nominal temperatures T_room according to DIN-EN 442 in degC
+- Exponent
+- Water volume inside radiator in l
+- Material mass of radiator in kg
+- Percent of radiative heat from total produced heat
+- Length of radiator in m
+- Height of radiator in m
+
+
Not all this information is used in the model, just the power, the temperatures, the exponent, the percentage and the volume.
+References
+Record is used in model AixLib.HVAC.Radiators.Radiator
+Source:
+
+- Manufacturer: Kermi
+- Product: Flachheizkoerper ThermX2 Profil V
+- Booklet: Flachheizkoerper, I/2010, Pages 44-52.
+
+", revisions="
+
+- August 13, 2013 by Ole Odendahl:
Formatted documentation appropriately
+- November 15, 2011 by Ana Constantin:
implemented
+
+"));
+ end Kitchen;
+ annotation (Documentation(info="
+Just one appartment, on the first floor, the middle antracne, which means adiabatic conditions on all walls towards neighbouring rooms, with the exception of the staircase.
+"));
+ end StandardMFD_WSchV1984_OneAppartment;
+end Radiators;
diff --git a/AixLib/DataBase/SolarThermal.mo b/AixLib/DataBase/SolarThermal.mo
new file mode 100644
index 0000000000..643f168f7c
--- /dev/null
+++ b/AixLib/DataBase/SolarThermal.mo
@@ -0,0 +1,129 @@
+within AixLib.DataBase;
+package SolarThermal "Properties of different solar thermal collectors"
+ extends Modelica.Icons.Package;
+ record SolarThermalBaseDataDefinition
+ "Base Data Definition for Solar thermal collectors"
+ extends Modelica.Icons.Record;
+
+ parameter Real eta_zero "Conversion factor/Efficiency at Q = 0" annotation (Dialog(group="Geometry"));
+ parameter Real c1(unit="W/(m.K)") "Loss coefficient c1";
+ parameter Real c2(unit="W/(m.m.K)") "Loss coefficient c2";
+
+ annotation (Documentation(revisions="
+October 2013, Marcus Fuchs
+
+April 2014, Mark Wesseling
+
+",
+ info="
+Overview
+This base record defines the values conversion factor and loss coefficients for solar thermal collectors.
+References
+Base data definition for record to be used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+"));
+ end SolarThermalBaseDataDefinition;
+
+ record SimpleAbsorber "Properties of a simple absorber"
+ extends SolarThermalBaseDataDefinition(
+ eta_zero = 0.94,
+ c1 = 23,
+ c2 = 0);
+ annotation (Documentation(info="
+Overview
+Simple Absorber; Values are assumptions; For real values of collectors see http://www.solarenergy.ch/index.php?id=111&no_cache=1
+Level of Development
+
+References
+Record is used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+", revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end SimpleAbsorber;
+
+ record AirCollector "Properties of an air collector"
+ extends SolarThermalBaseDataDefinition(
+ eta_zero = 0.8,
+ c1 = 7.5,
+ c2 = 0.01);
+ annotation (Documentation(info="
+Overview
+Simple Air Collector; Values are assumptions; For real values of collectors see http://www.solarenergy.ch/index.php?id=111&no_cache=1
+Level of Development
+
+References
+Record is used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+", revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end AirCollector;
+
+ record FlatCollector "Properties of a flat collector"
+ extends SolarThermalBaseDataDefinition(
+ eta_zero = 0.8,
+ c1 = 5,
+ c2 = 0.01);
+ annotation (Documentation(info="
+Overview
+Simple Flat collector; Values are assumptions; For real values of collectors see http://www.solarenergy.ch/index.php?id=111&no_cache=1
+Level of Development
+
+References
+Record is used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+", revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end FlatCollector;
+
+ record VacuumCollector "Properties of a vacuum collector"
+ extends SolarThermalBaseDataDefinition(
+ eta_zero = 0.75,
+ c1 = 2,
+ c2 = 0.005);
+ annotation (Documentation(info="
+Overview
+Simple Vacuum Tube Collector; Values are assumptions; For real values of collectors see http://www.solarenergy.ch/index.php?id=111&no_cache=1
+Level of Development
+
+References
+Record is used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+", revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end VacuumCollector;
+
+ record ConcentratingCollector "Properties of a CRC collector"
+ extends SolarThermalBaseDataDefinition(
+ eta_zero = 0.65,
+ c1 = 1,
+ c2 = 0.004);
+ annotation (Documentation(info="
+Overview
+Simple Concentrating Collector; Values are assumptions; For real values of collectors see http://www.solarenergy.ch/index.php?id=111&no_cache=1
+Level of Development
+
+References
+Record is used in model AixLib.HVAC.HeatGeneration.SolarThermal.
+", revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end ConcentratingCollector;
+end SolarThermal;
diff --git a/AixLib/DataBase/Surfaces.mo b/AixLib/DataBase/Surfaces.mo
new file mode 100644
index 0000000000..82a54e9a61
--- /dev/null
+++ b/AixLib/DataBase/Surfaces.mo
@@ -0,0 +1,68 @@
+within AixLib.DataBase;
+package Surfaces "Outside surfaces of walls"
+ extends Modelica.Icons.Package;
+
+ package RoughnessForHT "Roughness coefficents for heat transfer"
+ extends Modelica.Icons.Package;
+
+ record PolynomialCoefficients_ASHRAEHandbook
+ extends Modelica.Icons.Record;
+ parameter Real D = 11.58;
+ parameter Real E = 5.894;
+ parameter Real F = 0.0;
+
+ annotation (Documentation(info="
+Overview
+Calculate the heat transfer coeficient alpha at outside surfaces depending on wind speed and surface type
+Level of Development
+
+Assumptions
+Wind direction has no influence
+Concept
+alpha = D + E*V + R*V^2
+References
+Base data definition for record to be used in model AixLib.Utilities.HeatTransfer.HeatConv_outside
+Source
+
+- ASHRAE Handbook of Fundamentals. ASHRAE, 1989
+- As cited in EnergyPlus Engineering Reference. : EnergyPlus Engineering Reference, 2011 p.56
+
+", revisions="
+
+- August 30, 2013 by Ole Odendahl:
Awarded stars
+- March 21, 2012 by Ana Constantin:
Implemented.
+
+"));
+ end PolynomialCoefficients_ASHRAEHandbook;
+
+ record Brick_RoughPlaster
+ extends PolynomialCoefficients_ASHRAEHandbook(
+ D=12.49,
+ E=4.065,
+ F=0.028);
+
+ annotation (Documentation(info="
+Overview
+Material: Brick, Rough plaster
+Level of Development
+
+References
+Record is used in model AixLib.Utilities.HeatTransfer.HeatConv_outside
+Source
+
+- ASHRAE Handbook of Fundamentals. ASHRAE, 1989
+- As cited inEnergyPlus Engineering Reference. : EnergyPlus Engineering Reference, 2011 p.56
+
+", revisions="
+
+- August 30, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- March 21, 2012 by Ana Constantin:
Implemented.
+
+"));
+ end Brick_RoughPlaster;
+ annotation (Documentation(info="
+"));
+ end RoughnessForHT;
+end Surfaces;
diff --git a/AixLib/DataBase/Walls.mo b/AixLib/DataBase/Walls.mo
new file mode 100644
index 0000000000..a4d6203be3
--- /dev/null
+++ b/AixLib/DataBase/Walls.mo
@@ -0,0 +1,2978 @@
+within AixLib.DataBase;
+package Walls "Database for different types of walls"
+ extends Modelica.Icons.Package;
+
+ record WallBaseDataDefinition "Wall base data definition"
+ extends Modelica.Icons.Record;
+ // pma 2010-04-28: REMOVED THE BASE DEFINITIONS to get errors thrown when using unparameterised wall models
+ parameter Integer n(min=1) = 3 "Number of wall layers" annotation(Dialog(tab="Wall 1", group="Wall 1 parameters"));
+ parameter Modelica.SIunits.Length d[n] "Thickness of wall layers"
+ annotation(Dialog(tab="Wall 1", group="Layer 1 parameters"));
+ parameter Modelica.SIunits.Density rho[n] "Density of wall layers"
+ annotation(Dialog(tab="Wall 1", group="Layer 1 parameters"));
+ parameter Modelica.SIunits.ThermalConductivity lambda[n]
+ "Thermal conductivity of wall layers" annotation(Dialog(tab="Wall 1", group="Wall 1 parameters"));
+ parameter Modelica.SIunits.SpecificHeatCapacity c[n]
+ "Specific heat capacity of wall layers" annotation(Dialog(tab="Wall 1", group="Wall 1 parameters"));
+ parameter Modelica.SIunits.Emissivity eps=0.95
+ "Emissivity of inner wall surface" annotation(Dialog(tab="Wall 1", group="Wall 1 parameters"));
+ annotation (Documentation(info="
+Overview
+Wall BaseDataDefinition actually doesn't need predefined values and that is desirable to get errors thrown when using an unparameterised wall in a model.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Base data definition for record to be used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+", revisions="
+
+- September 3, 2013 by Ole Odendahl:
Formatted documentation appropriately
+
+"));
+ end WallBaseDataDefinition;
+
+ package WSchV1984
+ extends Modelica.Icons.Package;
+
+ package OW
+ extends Modelica.Icons.Package;
+
+ record OW_WSchV1984_S
+ "outer wall after WSchV1984, for building of type S (schwer)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.06,0.175,0.015} "Thickness of wall layers",
+ rho={1800,120,1600,1200} "Density of wall layers",
+ lambda={1.0,0.05,0.79,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end OW_WSchV1984_S;
+
+ record OW_WSchV1984_M
+ "outer wall after WSchV1984, for building of type M (mittel)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.04,0.18,0.015} "Thickness of wall layers",
+ rho={1800,120,800,1200} "Density of wall layers",
+ lambda={1.0,0.055,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end OW_WSchV1984_M;
+
+ record OW_WSchV1984_L
+ "outer wall after WSchV1984, for building of type L (leicht)"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0275} "Thickness of wall layers",
+ rho={1800,900,127,1018.2} "Density of wall layers",
+ lambda={1.0,0.18,0.14,0.346} "Thermal conductivity of wall layers",
+ c={1000,1700,1445,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 5 "Number of wall layers",
+ // d={0.03,0.02,0.18,0.0125,0.015} "Thickness of wall layers",
+ // rho={1800,900,127,800,1200} "Density of wall layers",
+ // lambda={1.0,0.18,0.14,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1000,1700,1445,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end OW_WSchV1984_L;
+ end OW;
+
+ package IW
+ extends Modelica.Icons.Package;
+
+ record IWsimple_WSchV1984_S_half
+ "Inner wall simple after WSchV1984, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1600,1200} "Density of wall layers",
+ lambda={0.79,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWsimple_WSchV1984_S_half;
+
+ record IWload_WSchV1984_S_half
+ "Inner wall load-bearing after WSchV1984, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1600,1200} "Density of wall layers",
+ lambda={0.79,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWload_WSchV1984_S_half;
+
+ record IWneighbour_WSchV1984_S_half
+ "Inner wall towards neighbour after WSchV1984, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={1.23,1600,1200} "Density of wall layers",
+ lambda={0.22,0.79,0.51} "Thermal conductivity of wall layers",
+ c={1008,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWneighbour_WSchV1984_S_half;
+
+ record IWsimple_WSchV1984_M_half
+ "Inner wall simple after WSchV1984, for building of type M (mittel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.315,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWsimple_WSchV1984_M_half;
+
+ record IWload_WSchV1984_M_half
+ "Inner wall load-bearing after WSchV1984, for building of type M (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.315,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWload_WSchV1984_M_half;
+
+ record IWneighbour_WSchV1984_M_half
+ "Inner wall towards neighbour after WSchV1984, for building of type S (mitel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={1.23,1000,1200} "Density of wall layers",
+ lambda={0.22,0.315,0.51} "Thermal conductivity of wall layers",
+ c={1008,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWneighbour_WSchV1984_M_half;
+
+ record IWsimple_WSchV1984_L_half
+ "Inner wall simple after WSchV1984, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.05,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.44,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 3 "Number of wall layers",
+ // d={0.05,0.0125,0.015} "Thickness of wall layers",
+ // rho={93,800,1200} "Density of wall layers",
+ // lambda={0.44,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWsimple_WSchV1984_L_half;
+
+ record IWload_WSchV1984_L_half
+ "Inner wall load-bearing after WSchV1984, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.09,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.78,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 3 "Number of wall layers",
+ // d={0.09,0.0125,0.015} "Thickness of wall layers",
+ // rho={93,800,1200} "Density of wall layers",
+ // lambda={0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWload_WSchV1984_L_half;
+
+ record IWneighbour_WSchV1984_L_half
+ "Inner wall towards neighbour after WSchV1984, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.0325,0.18,0.0275} "Thickness of wall layers",
+ rho={308.4,93,1018.2} "Density of wall layers",
+ lambda={0.23,0.35,0.346} "Thermal conductivity of wall layers",
+ c={1000,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 5 "Number of wall layers",
+ // d={0.02,0.0125,0.18,0.0125,0.015} "Thickness of wall layers",
+ // rho={1.23,800,93,800,1200} "Density of wall layers",
+ // lambda={0.22,0.25,0.35,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1008,1000,1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end IWneighbour_WSchV1984_L_half;
+ end IW;
+
+ package Floor
+ extends Modelica.Icons.Package;
+
+ record FLground_WSchV1984_SML
+ "Floor towards ground after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.02,0.25,0.04,0.06} "Thickness of wall layers",
+ rho={100,2300,120,2000} "Density of wall layers",
+ lambda={0.05,2.3,0.055,1.4} "Thermal conductivity of wall layers",
+ c={1000,1000,1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end FLground_WSchV1984_SML;
+
+ record FLpartition_WSchV1984_SM_upHalf
+ "Floor partition after WSchV1984, for building of type S (schwer) and M (mittel), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.055,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end FLpartition_WSchV1984_SM_upHalf;
+
+ record FLpartition_WSchV1984_L_upHalf
+ "Floor partition after WSchV1984, for building of typeL (leicht), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.055,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end FLpartition_WSchV1984_L_upHalf;
+
+ record FLcellar_WSchV1984_SML_upHalf
+ "Floor towards cellar after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht), upper half."
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.055,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end FLcellar_WSchV1984_SML_upHalf;
+ end Floor;
+
+ package Ceiling
+ extends Modelica.Icons.Package;
+
+ record CEpartition_WSchV1984_SM_loHalf
+ "Ceiling partition after WSchV1984, for building of type S (schwer) and M (mittel), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.015} "Thickness of wall layers",
+ rho={120,2300,1200} "Density of wall layers",
+ lambda={0.055,2.3,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end CEpartition_WSchV1984_SM_loHalf;
+
+ record CEpartition_WSchV1984_L_loHalf
+ "Ceiling partition after WSchV1984, for building of type L (leicht), lower half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.04,0.16,0.0275} "Thickness of wall layers",
+ rho={510,93,1018.2} "Density of wall layers",
+ lambda={0.084,0.73,0.346} "Thermal conductivity of wall layers",
+ c={1621,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.02,0.02,0.16,0.0125,0.015} "Thickness of wall layers",
+ rho={120,900,93,800,1200} "Density of wall layers",
+ lambda={0.055,0.18,0.73,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1030,1700,1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end CEpartition_WSchV1984_L_loHalf;
+
+ record CEattic_WSchV1984_SML_loHalf
+ "Ceiling towards attic after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.08,0.0125,0.015} "Thickness of wall layers",
+ rho={155,800,1200} "Density of wall layers",
+ lambda={0.09,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1367,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end CEattic_WSchV1984_SML_loHalf;
+
+ record CEcellar_WSchV1984_SML_loHalf
+ "Ceiling cellar after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.02} "Thickness of wall layers",
+ rho={120,2300,120} "Density of wall layers",
+ lambda={0.055,2.3,0.055} "Thermal conductivity of wall layers",
+ c={1030,1000,1030} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end CEcellar_WSchV1984_SML_loHalf;
+
+ record ROsaddleAttic_WSchV1984_SML
+ "Saddle roof in attic after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 1 "Number of wall layers",
+ d={0.18} "Thickness of wall layers",
+ rho={160} "Density of wall layers",
+ lambda={0.084} "Thermal conductivity of wall layers",
+ c={1358} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end ROsaddleAttic_WSchV1984_SML;
+
+ record ROsaddleRoom_WSchV1984_SML
+ "Saddle roof in room after WSchV1984, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={160,800,1200} "Density of wall layers",
+ lambda={0.084,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1358,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1984. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1984. 1984
+
+"));
+ end ROsaddleRoom_WSchV1984_SML;
+ end Ceiling;
+ end WSchV1984;
+
+ package WSchV1995
+ extends Modelica.Icons.Package;
+
+ package OW
+ extends Modelica.Icons.Package;
+
+ record OW_WSchV1995_S
+ "outer wall after WSchV1995, for building of type S (schwer)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.06,0.175,0.015} "Thickness of wall layers",
+ rho={1800,120,1400,1200} "Density of wall layers",
+ lambda={1,0.04,0.7,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end OW_WSchV1995_S;
+
+ record OW_WSchV1995_M
+ "outer wall after WSchV1995, for building of type M (mittel)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.04,0.18,0.015} "Thickness of wall layers",
+ rho={1800,120,700,1200} "Density of wall layers",
+ lambda={1,0.04,0.21,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end OW_WSchV1995_M;
+
+ record OW_WSchV1995_L
+ "outer wall after WSchV1995, for building of type L (leicht)"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0275} "Thickness of wall layers",
+ rho={1800,600,138,1018.2} "Density of wall layers",
+ lambda={1,0.14,0.105,0.346} "Thermal conductivity of wall layers",
+ c={1000,1700,1411,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={1800,600,138,800,1200} "Density of wall layers",
+ lambda={1,0.14,0.105,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1000,1700,1411,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ */
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end OW_WSchV1995_L;
+ end OW;
+
+ package IW
+ extends Modelica.Icons.Package;
+
+ record IWsimple_WSchV1995_S_half
+ "Inner wall simple after WSchV1995, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1400,1200} "Density of wall layers",
+ lambda={0.7,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWsimple_WSchV1995_S_half;
+
+ record IWload_WSchV1995_S_half
+ "Inner wall load-bearing after WSchV1995, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1400,1200} "Density of wall layers",
+ lambda={0.7,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWload_WSchV1995_S_half;
+
+ record IWneighbour_WSchV1995_S_half
+ "Inner wall towards neighbour after WSchV1995, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1400,1200} "Density of wall layers",
+ lambda={0.055,0.7,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWneighbour_WSchV1995_S_half;
+
+ record IWsimple_WSchV1995_M_half
+ "Inner wall simple after WSchV1995, for building of type M (mittel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.31,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWsimple_WSchV1995_M_half;
+
+ record IWload_WSchV1995_M_half
+ "Inner wall load-bearing after WSchV1995, for building of type M (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.31,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWload_WSchV1995_M_half;
+
+ record IWneighbour_WSchV1995_M_half
+ "Inner wall towards neighbour after WSchV1995, for building of type S (mitel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1000,1200} "Density of wall layers",
+ lambda={0.045,0.31,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWneighbour_WSchV1995_M_half;
+
+ record IWsimple_WSchV1995_L_half
+ "Inner wall simple after WSchV1995, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.05,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.44,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 3 "Number of wall layers",
+ d={0.05,0.0125,0.015} "Thickness of wall layers",
+ rho={93,800,1200} "Density of wall layers",
+ lambda={0.44,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWsimple_WSchV1995_L_half;
+
+ record IWload_WSchV1995_L_half
+ "Inner wall load-bearing after WSchV1995, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.09,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.78,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 3 "Number of wall layers",
+ d={0.09,0.0125,0.015} "Thickness of wall layers",
+ rho={93,800,1200} "Density of wall layers",
+ lambda={0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWload_WSchV1995_L_half;
+
+ record IWneighbour_WSchV1995_L_half
+ "Inner wall towards neighbour after WSchV1995, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.0325,0.18,0.0275} "Thickness of wall layers",
+ rho={382,93,1018.2} "Density of wall layers",
+ lambda={0.066,0.78,0.346} "Thermal conductivity of wall layers",
+ c={1006,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.02,0.0125,0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={120,800,93,800,1200} "Density of wall layers",
+ lambda={0.045,0.25,0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end IWneighbour_WSchV1995_L_half;
+ end IW;
+
+ package Floor
+ extends Modelica.Icons.Package;
+
+ record FLground_WSchV1995_SML
+ "Floor towards ground after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.04,0.25,0.04,0.06} "Thickness of wall layers",
+ rho={100,2300,120,2000} "Density of wall layers",
+ lambda={0.05,2.3,0.045,1.4} "Thermal conductivity of wall layers",
+ c={1000,1000,1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end FLground_WSchV1995_SML;
+
+ record FLpartition_WSchV1995_SM_upHalf
+ "Floor partition after WSchV1995, for building of type S (schwer) and M (mittel), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end FLpartition_WSchV1995_SM_upHalf;
+
+ record FLpartition_WSchV1995_L_upHalf
+ "Floor partition after WSchV1995, for building of typeL (leicht), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end FLpartition_WSchV1995_L_upHalf;
+
+ record FLcellar_WSchV1995_SML_upHalf
+ "Floor towards cellar after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht), upper half."
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.04,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end FLcellar_WSchV1995_SML_upHalf;
+ end Floor;
+
+ package Ceiling
+ extends Modelica.Icons.Package;
+
+ record CEpartition_WSchV1995_SM_loHalf
+ "Ceiling partition after WSchV1995, for building of type S (schwer) and M (mittel), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.015} "Thickness of wall layers",
+ rho={120,2300,1200} "Density of wall layers",
+ lambda={0.045,2.3,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end CEpartition_WSchV1995_SM_loHalf;
+
+ record CEpartition_WSchV1995_L_loHalf
+ "Ceiling partition after WSchV1995, for building of type L (leicht), lower half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.04,0.16,0.0275} "Thickness of wall layers",
+ rho={360,93,1018.2} "Density of wall layers",
+ lambda={0.068,0.53,0.346} "Thermal conductivity of wall layers",
+ c={1588,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.02,0.02,0.16,0.0125,0.015} "Thickness of wall layers",
+ rho={120,600,93,800,1200} "Density of wall layers",
+ lambda={0.045,0.14,0.53,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1030,1700,1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end CEpartition_WSchV1995_L_loHalf;
+
+ record CEattic_WSchV1995_SML_loHalf
+ "Ceiling towards attic after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.08,0.0125,0.015} "Thickness of wall layers",
+ rho={194,800,1200} "Density of wall layers",
+ lambda={0.054,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1301,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end CEattic_WSchV1995_SML_loHalf;
+
+ record CEcellar_WSchV1995_SML_loHalf
+ "Ceiling cellar after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.02} "Thickness of wall layers",
+ rho={120,2300,120} "Density of wall layers",
+ lambda={0.04,2.3,0.035} "Thermal conductivity of wall layers",
+ c={1030,1000,1030} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end CEcellar_WSchV1995_SML_loHalf;
+
+ record ROsaddleAttic_WSchV1995_SML
+ "Saddle roof in attic after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 1 "Number of wall layers",
+ d={0.18} "Thickness of wall layers",
+ rho={194} "Density of wall layers",
+ lambda={0.058} "Thermal conductivity of wall layers",
+ c={1301} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end ROsaddleAttic_WSchV1995_SML;
+
+ record ROsaddleRoom_WSchV1995_SML
+ "Saddle roof in room after WSchV1995, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={194,800,1200} "Density of wall layers",
+ lambda={0.058,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1301,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- August 15, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to WSchV 1995. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Wärmeschutzverordnung 1995. 1995
+
+"));
+ end ROsaddleRoom_WSchV1995_SML;
+ end Ceiling;
+ end WSchV1995;
+
+ package EnEV2002
+ extends Modelica.Icons.Package;
+
+ package OW
+ extends Modelica.Icons.Package;
+
+ record OW_EnEV2002_S
+ "outer wall after EnEV 2002, for building of type S (schwer)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.06,0.175,0.015} "Thickness of wall layers",
+ rho={1800,120,1200,1200} "Density of wall layers",
+ lambda={1,0.035,0.56,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end OW_EnEV2002_S;
+
+ record OW_EnEV2002_M
+ "outer wall after EnEV 2002, for building of type M (mittel)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.04,0.175,0.015} "Thickness of wall layers",
+ rho={1800,120,500,1200} "Density of wall layers",
+ lambda={1,0.04,0.16,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end OW_EnEV2002_M;
+
+ record OW_EnEV2002_L
+ "outer wall after EnEV 2002, for building of type L (leicht)"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0275} "Thickness of wall layers",
+ rho={1800,300,138,1018.2} "Density of wall layers",
+ lambda={1,0.1,0.097,0.346} "Thermal conductivity of wall layers",
+ c={1000,1700,1411,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={1800,300,138,800,1200} "Density of wall layers",
+ lambda={1,0.1,0.097,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1000,1700,1411,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end OW_EnEV2002_L;
+ end OW;
+
+ package IW
+ extends Modelica.Icons.Package;
+
+ record IWsimple_EnEV2002_S_half
+ "Inner wall simple after EnEV 2002, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1200,1200} "Density of wall layers",
+ lambda={0.56,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWsimple_EnEV2002_S_half;
+
+ record IWload_EnEV2002_S_half
+ "Inner wall load-bearing after EnEV 2002, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1200,1200} "Density of wall layers",
+ lambda={0.56,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWload_EnEV2002_S_half;
+
+ record IWneighbour_EnEV2002_S_half
+ "Inner wall towards neighbour after EnEV 2002, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1200,1200} "Density of wall layers",
+ lambda={0.035,0.56,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWneighbour_EnEV2002_S_half;
+
+ record IWsimple_EnEV2002_M_half
+ "Inner wall simple after EnEV, for building of type M (mittel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.31,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWsimple_EnEV2002_M_half;
+
+ record IWload_EnEV2002_M_half
+ "Inner wall load-bearing after EnEV 2002, for building of type M (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.31,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWload_EnEV2002_M_half;
+
+ record IWneighbour_EnEV2002_M_half
+ "Inner wall towards neighbour after EnEV 2002, for building of type S (mitel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1000,1200} "Density of wall layers",
+ lambda={0.035,0.31,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWneighbour_EnEV2002_M_half;
+
+ record IWsimple_EnEV2002_L_half
+ "Inner wall simple after EnEV, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.05,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.44,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 3 "Number of wall layers",
+ d={0.05,0.0125,0.015} "Thickness of wall layers",
+ rho={93,800,1200} "Density of wall layers",
+ lambda={0.44,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWsimple_EnEV2002_L_half;
+
+ record IWload_EnEV2002_L_half
+ "Inner wall load-bearing after EnEV 2002, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.09,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.78,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 3 "Number of wall layers",
+ d={0.09,0.0125,0.015} "Thickness of wall layers",
+ rho={93,800,1200} "Density of wall layers",
+ lambda={0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWload_EnEV2002_L_half;
+
+ record IWneighbour_EnEV2002_L_half
+ "Inner wall towards neighbour after EnEV 2002, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.0325,0.18,0.0275} "Thickness of wall layers",
+ rho={382,93,1018.2} "Density of wall layers",
+ lambda={0.052,0.78,0.346} "Thermal conductivity of wall layers",
+ c={1006,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.02,0.0125,0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={120,800,93,800,1200} "Density of wall layers",
+ lambda={0.035,0.25,0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ */
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end IWneighbour_EnEV2002_L_half;
+ end IW;
+
+ package Floor
+ extends Modelica.Icons.Package;
+
+ record FLground_EnEV2002_SML
+ "Floor towards ground after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.4,0.25,0.04,0.06} "Thickness of wall layers",
+ rho={100,2300,120,2000} "Density of wall layers",
+ lambda={0.055,2.3,0.04,1.4} "Thermal conductivity of wall layers",
+ c={1000,1000,1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end FLground_EnEV2002_SML;
+
+ record FLpartition_EnEV2002_SM_upHalf
+ "Floor partition after EnEV 2002, for building of type S (schwer) and M (mittel), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end FLpartition_EnEV2002_SM_upHalf;
+
+ record FLpartition_EnEV2002_L_upHalf
+ "Floor partition after EnEV 2002, for building of typeL (leicht), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end FLpartition_EnEV2002_L_upHalf;
+
+ record FLcellar_EnEV2002_SML_upHalf
+ "Floor towards cellar after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht), upper half."
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.035,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end FLcellar_EnEV2002_SML_upHalf;
+ end Floor;
+
+ package Ceiling
+ extends Modelica.Icons.Package;
+
+ record CEpartition_EnEV2002_SM_loHalf
+ "Ceiling partition after EnEV 2002, for building of type S (schwer) and M (mittel), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.015} "Thickness of wall layers",
+ rho={120,2300,1200} "Density of wall layers",
+ lambda={0.045,2.3,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end CEpartition_EnEV2002_SM_loHalf;
+
+ record CEpartition_EnEV2002_L_loHalf
+ "Ceiling partition after EnEV 2002, for building of type L (leicht), lower half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.04,0.16,0.0275} "Thickness of wall layers",
+ rho={210,93,1018.2} "Density of wall layers",
+ lambda={0.062,0.71,0.346} "Thermal conductivity of wall layers",
+ c={1509,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ /* n(min=1) = 5 "Number of wall layers",
+ d={0.02,0.02,0.16,0.0125,0.015} "Thickness of wall layers",
+ rho={120,300,93,800,1200} "Density of wall layers",
+ lambda={0.045,0.1,0.71,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1030,1700,1593,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+*/
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end CEpartition_EnEV2002_L_loHalf;
+
+ record CEattic_EnEV2002_SML_loHalf
+ "Ceiling towards attic after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.08,0.0125,0.015} "Thickness of wall layers",
+ rho={160,800,1200} "Density of wall layers",
+ lambda={0.058,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1358,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end CEattic_EnEV2002_SML_loHalf;
+
+ record CEcellar_EnEV2002_SML_loHalf
+ "Ceiling cellar after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.02} "Thickness of wall layers",
+ rho={120,2300,120} "Density of wall layers",
+ lambda={0.035,2.3,0.035} "Thermal conductivity of wall layers",
+ c={1030,1000,1030} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end CEcellar_EnEV2002_SML_loHalf;
+
+ record ROsaddleAttic_EnEV2002_SML
+ "Saddle roof in attic after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 1 "Number of wall layers",
+ d={0.18} "Thickness of wall layers",
+ rho={181} "Density of wall layers",
+ lambda={0.054} "Thermal conductivity of wall layers",
+ c={1320} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end ROsaddleAttic_EnEV2002_SML;
+
+ record ROsaddleRoom_EnEV2002_SML
+ "Saddle roof in room after EnEV 2002, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.18,0.0125,0.015} "Thickness of wall layers",
+ rho={181,800,1200} "Density of wall layers",
+ lambda={0.054,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1320,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2002. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Energieeinsparverordnung 2002. 2002
+
+"));
+ end ROsaddleRoom_EnEV2002_SML;
+ end Ceiling;
+ end EnEV2002;
+
+ package EnEV2009
+ extends Modelica.Icons.Package;
+
+ package OW
+ extends Modelica.Icons.Package;
+
+ record OW_EnEV2009_S
+ "outer wall after EnEV 2009, for building of type S (schwer)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.1,0.24,0.015} "Thickness of wall layers",
+ rho={1800,120,1000,1200} "Density of wall layers",
+ lambda={1,0.035,0.5,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end OW_EnEV2009_S;
+
+ record OW_EnEV2009_M
+ "outer wall after EnEV 2009, for building of type M (mittel)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.05,0.6,0.175,0.015} "Thickness of wall layers",
+ rho={1800,120,350,1200} "Density of wall layers",
+ lambda={1,0.035,0.11,0.51} "Thermal conductivity of wall layers",
+ c={1000,1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end OW_EnEV2009_M;
+
+ record OW_EnEV2009_L
+ "outer wall after EnEV 2009, for building of type L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.03,0.02,0.18,0.0275} "Thickness of wall layers",
+ rho={1800,300,172,1018.2} "Density of wall layers",
+ lambda={1,0.1,0.056,0.346} "Thermal conductivity of wall layers",
+ c={1000,1700,1337,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+
+ // n(min=1) = 5 "Number of wall layers",
+ // d={0.03,0.02,0.18,0.0125,0.015} "Thickness of wall layers",
+ // rho={1800,300,172,800,1200} "Density of wall layers",
+ // lambda={1,0.1,0.056,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1000,1700,1337,1000,1000} "Specific heat capacity of wall layers",
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end OW_EnEV2009_L;
+ end OW;
+
+ package IW
+ extends Modelica.Icons.Package;
+
+ record IWsimple_EnEV2009_S_half
+ "Inner wall simple after EnEV 2009, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.5,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWsimple_EnEV2009_S_half;
+
+ record IWload_EnEV2009_S_half
+ "Inner wall load-bearing after EnEV 2009, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.5,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWload_EnEV2009_S_half;
+
+ record IWneighbour_EnEV2009_S_half
+ "Inner wall towards neighbour after EnEV 2009, for building of type S (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1000,1200} "Density of wall layers",
+ lambda={0.035,0.5,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWneighbour_EnEV2009_S_half;
+
+ record IWsimple_EnEV2009_M_half
+ "Inner wall simple after EnEV, for building of type M (mittel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0575,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.315,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWsimple_EnEV2009_M_half;
+
+ record IWload_EnEV2009_M_half
+ "Inner wall load-bearing after EnEV 2009, for building of type M (schwer), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.0875,0.015} "Thickness of wall layers",
+ rho={1000,1200} "Density of wall layers",
+ lambda={0.315,0.51} "Thermal conductivity of wall layers",
+ c={1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWload_EnEV2009_M_half;
+
+ record IWneighbour_EnEV2009_M_half
+ "Inner wall towards neighbour after EnEV 2009, for building of type S (mitel), only half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.175,0.015} "Thickness of wall layers",
+ rho={120,1000,1200} "Density of wall layers",
+ lambda={0.035,0.315,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWneighbour_EnEV2009_M_half;
+
+ record IWsimple_EnEV2009_L_half
+ "Inner wall simple after EnEV, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.05,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.44,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 3 "Number of wall layers",
+ // d={0.05,0.0125,0.015} "Thickness of wall layers",
+ // rho={93,800,1200} "Density of wall layers",
+ // lambda={0.44,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface"
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWsimple_EnEV2009_L_half;
+
+ record IWload_EnEV2009_L_half
+ "Inner wall load-bearing after EnEV 2009, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.09,0.0275} "Thickness of wall layers",
+ rho={93,1018.2} "Density of wall layers",
+ lambda={0.78,0.346} "Thermal conductivity of wall layers",
+ c={1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ // n(min=1) = 3 "Number of wall layers",
+ // d={0.09,0.0125,0.015} "Thickness of wall layers",
+ // rho={93,800,1200} "Density of wall layers",
+ // lambda={0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface"
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWload_EnEV2009_L_half;
+
+ record IWneighbour_EnEV2009_L_half
+ "Inner wall towards neighbour after EnEV 2009, for building of type L (leicht), only half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.0325,0.18,0.0275} "Thickness of wall layers",
+ rho={382,93,1018.2} "Density of wall layers",
+ lambda={0.052,0.78,0.346} "Thermal conductivity of wall layers",
+ c={1006,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 5 "Number of wall layers",
+ // d={0.02,0.0125,0.18,0.0125,0.015} "Thickness of wall layers",
+ // rho={120,800,93,800,1200} "Density of wall layers",
+ // lambda={0.035,0.25,0.78,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1593,1000,1099,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface"
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end IWneighbour_EnEV2009_L_half;
+ end IW;
+
+ package Floor
+ extends Modelica.Icons.Package;
+
+ record FLground_EnEV2009_SML
+ "Floor towards ground after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 4 "Number of wall layers",
+ d={0.06,0.25,0.04,0.06} "Thickness of wall layers",
+ rho={140,2300,120,2000} "Density of wall layers",
+ lambda={0.040,2.3,0.035,1.4} "Thermal conductivity of wall layers",
+ c={1000,1000,1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end FLground_EnEV2009_SML;
+
+ record FLpartition_EnEV2009_SM_upHalf
+ "Floor partition after EnEV 2009, for building of type S (schwer) and M (mittel), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end FLpartition_EnEV2009_SM_upHalf;
+
+ record FLpartition_EnEV2009_L_upHalf
+ "Floor partition after EnEV 2009, for building of typeL (leicht), upper half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end FLpartition_EnEV2009_L_upHalf;
+
+ record FLcellar_EnEV2009_SML_upHalf
+ "Floor towards cellar after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht), upper half."
+ extends WallBaseDataDefinition(
+ n(min=1) = 2 "Number of wall layers",
+ d={0.02,0.06} "Thickness of wall layers",
+ rho={120,2000} "Density of wall layers",
+ lambda={0.045,1.4} "Thermal conductivity of wall layers",
+ c={1030,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end FLcellar_EnEV2009_SML_upHalf;
+ end Floor;
+
+ package Ceiling
+ extends Modelica.Icons.Package;
+
+ record CEpartition_EnEV2009_SM_loHalf
+ "Ceiling partition after EnEV 2009, for building of type S (schwer) and M (mittel), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.015} "Thickness of wall layers",
+ rho={120,2300,1200} "Density of wall layers",
+ lambda={0.045,2.3,0.51} "Thermal conductivity of wall layers",
+ c={1030,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end CEpartition_EnEV2009_SM_loHalf;
+
+ record CEpartition_EnEV2009_L_loHalf
+ "Ceiling partition after EnEV 2009, for building of type L (leicht), lower half"
+ // New Walls for Dymola 2012, the same number of layers as other mass clases
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.04,0.16,0.0275} "Thickness of wall layers",
+ rho={210,93,1018.2} "Density of wall layers",
+ lambda={0.062,0.71,0.346} "Thermal conductivity of wall layers",
+ c={1509,1593,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+
+ // n(min=1) = 5 "Number of wall layers",
+ // d={0.02,0.02,0.16,0.0125,0.015} "Thickness of wall layers",
+ // rho={120,300,93,800,1200} "Density of wall layers",
+ // lambda={0.045,0.1,0.71,0.25,0.51} "Thermal conductivity of wall layers",
+ // c={1030,1700,1593,1000,1000} "Specific heat capacity of wall layers",
+ // eps=0.95 "Emissivity of inner wall surface");
+
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end CEpartition_EnEV2009_L_loHalf;
+
+ record CEattic_EnEV2009_SML_loHalf
+ "Ceiling towards attic after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.1,0.0125,0.015} "Thickness of wall layers",
+ rho={194,800,1200} "Density of wall layers",
+ lambda={0.045,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1301,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end CEattic_EnEV2009_SML_loHalf;
+
+ record CEcellar_EnEV2009_SML_loHalf
+ "Ceiling cellar after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht), lower half"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.02,0.16,0.06} "Thickness of wall layers",
+ rho={120,2300,120} "Density of wall layers",
+ lambda={0.045,2.3,0.04} "Thermal conductivity of wall layers",
+ c={1030,1000,1030} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end CEcellar_EnEV2009_SML_loHalf;
+
+ record ROsaddleAttic_EnEV2009_SML
+ "Saddle roof in attic after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 1 "Number of wall layers",
+ d={0.22} "Thickness of wall layers",
+ rho={194} "Density of wall layers",
+ lambda={0.045} "Thermal conductivity of wall layers",
+ c={1301} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end ROsaddleAttic_EnEV2009_SML;
+
+ record ROsaddleRoom_EnEV2009_SML
+ "Saddle roof in room after EnEV 2009, for building of type S (schwer), M (mittel) and L (leicht)"
+ extends WallBaseDataDefinition(
+ n(min=1) = 3 "Number of wall layers",
+ d={0.22,0.0125,0.015} "Thickness of wall layers",
+ rho={194,800,1200} "Density of wall layers",
+ lambda={0.045,0.25,0.51} "Thermal conductivity of wall layers",
+ c={1301,1000,1000} "Specific heat capacity of wall layers",
+ eps=0.95 "Emissivity of inner wall surface");
+ annotation (Documentation(revisions="
+
+- September 5, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+- Juni 1, 2011 by Ana Constantin:
implemented
+
+",
+ info="
+Overview
+Wall definition according to EnEV 2009. For detailed wall type see above.
+Level of Development
+
+Concept
+Attention: The first element in each vector represents the layer connected to port_a
(outside), the last element represents the layer connected to port_b
(surface facing the room).
+References
+Record is used in model Building.Components.Walls.BaseClasses.ConvNLayerClearanceStar
+Norm:
+
+- Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end ROsaddleRoom_EnEV2009_SML;
+ end Ceiling;
+ end EnEV2009;
+ annotation (Documentation(info="
+
Selectable wall types for easy setup of room configurations.
+"));
+end Walls;
diff --git a/AixLib/DataBase/Weather.mo b/AixLib/DataBase/Weather.mo
new file mode 100644
index 0000000000..8d5edbe3b9
--- /dev/null
+++ b/AixLib/DataBase/Weather.mo
@@ -0,0 +1,331 @@
+within AixLib.DataBase;
+package Weather "Records describing weather conditions"
+ extends Modelica.Icons.Package;
+ record WeatherBaseDataDefinition "TYPE: Table with outdoor air tmeperature"
+ extends Modelica.Icons.Record;
+ parameter Real[:,3] temperature
+ "Time in s | Temperature in °C | Solar irradiation in W/m2";
+
+ annotation (Documentation(info="
+Overview
+Very simple source to output weather conditions in the form of outdoor air temperature and solar irraditation.
+Assumptions
+Values at a certain timestamp represent the average temperature for the time between this timestamp and the timestampt before. E.g. a value with timestamp 3600 expresses the average value for t = [0; 3600]
+Known Limitations
+Only included are outdoor air temperature and solar irradiation.
+Concept
+Column 1: Time in s
+Column 2: Temperature in C
+Column 3: Solar Irradiation in W/m2
+References
+Base data definition for record to be used in model AixLib.HVAC.Sources.TempAndRad
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end WeatherBaseDataDefinition;
+
+ record WinterDay
+ "Outdoor conditions on a cold winter day from TRY 2010_01_Wint.dat 08.01.2010"
+ extends WeatherBaseDataDefinition(
+ temperature=[0, -5.1, 0;
+ 3600, -5, 0;
+ 7200, -4.9, 0;
+ 10800, -4.9, 0;
+ 14400, -4.8, 0;
+ 18000, -4.8, 0;
+ 21600, -4.9, 0;
+ 25200, -4.9, 0;
+ 28800, -4.8, 0;
+ 32400, -4.6, 19;
+ 36000, -4.4, 39;
+ 39600, -4.3, 51;
+ 43200, -4, 51;
+ 46800, -4.1, 40;
+ 50400, -4.1, 21;
+ 54000, -4.1, 1;
+ 57600, -4.2, 0;
+ 61200, -4.7, 0;
+ 64800, -4.6, 0;
+ 68400, -4.7, 0;
+ 72000, -5.2, 0;
+ 75600, -6.1, 0;
+ 79200, -5.8, 0;
+ 82800, -5.5, 0]);
+ annotation (Documentation(info="
+Overview
+Very simple source to output weather conditions in the form of outdoor air temperature and solar irraditation. This record includes outdoor conditions for a cold winter day, taken from German Test Reference Year region 1 (TRY 2010_01_Wint.dat) for January 8 2010.
+Level of Development
+
+Assumptions
+Values at a certain timestamp represent the average temperature for the time between this timestamp and the timestampt before. E.g. a value with timestamp 3600 expresses the average value for t = [0; 3600]
+Known Limitations
+Only included are outdoor air temperature and solar irradiation.
+Concept
+Column 1: Time in s
+Column 2: Temperature in C
+Column 3: Solar Irradiation in W/m2
+References
+Record is used in model AixLib.HVAC.Sources.TempAndRad
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end WinterDay;
+
+ record SummerDay
+ "Outdoor air temperature and solar radiation on a hot summer day from TRY 2010_01_Somm.dat 20.07.2010"
+ extends WeatherBaseDataDefinition(
+ temperature=[0, 21, 0;
+ 3600, 20.6, 0;
+ 7200, 20.5, 0;
+ 10800, 20.4, 0;
+ 14400, 20, 6;
+ 18000, 20.5, 106;
+ 21600, 22.4, 251;
+ 25200, 24.1, 402;
+ 28800, 26.3, 540;
+ 32400, 28.4, 657;
+ 36000, 30, 739;
+ 39600, 31.5, 777;
+ 43200, 31.5, 778;
+ 46800, 32.5, 737;
+ 50400, 32.5, 657;
+ 54000, 32.5, 544;
+ 57600, 32.5, 407;
+ 61200, 32.5, 257;
+ 64800, 31.6, 60;
+ 68400, 30.8, 5;
+ 72000, 22.9, 0;
+ 75600, 21.2, 0;
+ 79200, 20.6, 0;
+ 82800, 20.3, 0]);
+ annotation (Documentation(info="
+Overview
+Very simple source to output weather conditions in the form of outdoor air temperature and solar irraditation. This record includes outdoor conditions for a hot summer day, taken from German Test Reference Year region 1 (TRY 2010_01_Somm.dat) for July 20 2010.
+Level of Development
+
+Assumptions
+Values at a certain timestamp represent the average temperature for the time between this timestamp and the timestampt before. E.g. a value with timestamp 3600 expresses the average value for t = [0; 3600]
+Known Limitations
+Only included are outdoor air temperature and solar irradiation.
+Concept
+Column 1: Time in s
+Column 2: Temperature in C
+Column 3: Solar Irradiation in W/m2
+References
+Record is used in model AixLib.HVAC.Sources.TempAndRad
+",
+ revisions="
+October 2013, Marcus Fuchs
+
+"));
+ end SummerDay;
+
+ package SurfaceOrientation "Collection of surface orientation data"
+ extends Modelica.Icons.Package;
+ record SurfaceOrientationBaseDataDefinition
+ extends Modelica.Icons.Record;
+ parameter Integer nSurfaces;
+ parameter String[nSurfaces] name;
+ parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg[nSurfaces] Azimut;
+ parameter Modelica.SIunits.Conversions.NonSIunits.Angle_deg[nSurfaces] Tilt;
+ annotation (Documentation(info="
+Overview
+Base data definition for the surface orientation
+Level of Development
+
+References
+Base data definition for record to be used in model AixLib.HVAC.Weather.Weather
+",
+ revisions="
+
+- May 07, 2013 by Ole Odendahl:
Added basic documentation
+
+
+"));
+ end SurfaceOrientationBaseDataDefinition;
+
+ record SurfaceOrientationData_N_E_S_W_Hor
+ "North, East, South, West, Horizontal"
+ extends SurfaceOrientationBaseDataDefinition(
+ nSurfaces=5,
+ name={"N","O","S","W","Hor"},
+ Azimut={180,-90,0,90,0},
+ Tilt={90,90,90,90,0});
+ annotation (Documentation(info="
+Overview
+Surface Orientation Data for N,E,S and W
+Level of Development
+
+Concept
+Data in this set:
+
+Orientation |
+Azimuth |
+Tilt |
+
+
+N |
+180 |
+90 |
+
+
+E |
+-90 |
+90 |
+
+
+S |
+0 |
+90 |
+
+
+W |
+90 |
+90 |
+
+
+Hor |
+0 |
+0 |
+
+
+
References
+Record is used in model AixLib.HVAC.Weather.Weather
+",
+ revisions="
+
+- May 07, 2013 by Ole Odendahl:
Added basic documentation
+
+
+"));
+ end SurfaceOrientationData_N_E_S_W_Hor;
+
+ record SurfaceOrientationData_NE_SE_SW_NW_Hor
+ "Northeast, Southeast, Southwest, Northwest, Horizontal"
+ extends SurfaceOrientationBaseDataDefinition(
+ nSurfaces=5,
+ name={"NE","SE","SW","NW","Hor"},
+ Azimut={-135,-45,45,135,0},
+ Tilt={90,90,90,90,0});
+ annotation (Documentation(info="
+Overview
+Surface Orientation Data for NE,SE,SW and NW
+Level of Development
+
+Concept
+Data in this set:
+
+Orientation |
+Azimuth |
+Tilt |
+
+
+NE |
+-135 |
+90 |
+
+
+SE |
+-45 |
+90 |
+
+
+SW |
+45 |
+90 |
+
+
+NW |
+135 |
+90 |
+
+
+Hor |
+0 |
+0 |
+
+
+
References
+Record is used in model AixLib.HVAC.Weather.Weather
+",
+ revisions="
+
+- May 07, 2013 by Ole Odendahl:
Added basic documentation
+
+
+"));
+ end SurfaceOrientationData_NE_SE_SW_NW_Hor;
+
+ record SurfaceOrientationData_N_E_S_W_RoofN_Roof_S
+ "North, East, South, West, Roof_N, Roof_S suitable to Standard OFD"
+ extends SurfaceOrientationBaseDataDefinition(
+ nSurfaces=6,
+ name={"N","O","S","W","Roof_N","Roof_S"},
+ Azimut={180,-90,0,90,180,0},
+ Tilt={90,90,90,90,45,45});
+ annotation (Documentation(info="
+Overview
+Surface Orientation Data for N,E,S,W,Roof_N and Roof_S suitable to standard OFD.
+Level of Development
+
+Concept
+Data in this set:
+
+Orientation |
+Azimuth |
+Tilt |
+
+
+N |
+180 |
+90 |
+
+
+E |
+-90 |
+90 |
+
+
+S |
+0 |
+90 |
+
+
+W |
+90 |
+90 |
+
+
+Roof_N |
+180 |
+45 |
+
+
+Roof_S |
+0 |
+45 |
+
+
+
References
+Record is used in model AixLib.HVAC.Weather.Weather
+",
+ revisions="
+
+- May 07, 2013 by Ole Odendahl:
Added basic documentation
+
+
+"));
+ end SurfaceOrientationData_N_E_S_W_RoofN_Roof_S;
+ end SurfaceOrientation;
+
+end Weather;
diff --git a/AixLib/DataBase/WindowsDoors.mo b/AixLib/DataBase/WindowsDoors.mo
new file mode 100644
index 0000000000..9e94e9f779
--- /dev/null
+++ b/AixLib/DataBase/WindowsDoors.mo
@@ -0,0 +1,151 @@
+within AixLib.DataBase;
+package WindowsDoors "Windows and doors definition package"
+ extends Modelica.Icons.Package;
+
+ package Simple "Collection of simple window records"
+ extends Modelica.Icons.Package;
+
+ record OWBaseDataDefinition_Simple
+ "Outer window base definition for simple model"
+ extends Modelica.Icons.Record;
+
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer Uw=2.875
+ "Thermal transmission coefficient of whole window: glass + frame";
+ parameter Real g=0.8 "coefficient of solar energy transmission";
+ parameter Modelica.SIunits.Emissivity Emissivity = 0.84
+ "Material emissivity";
+ parameter Real frameFraction=0.2
+ "frame fraction from total fenestration area";
+ annotation (Documentation(info="
+Overview
+Base data defintion for simple windows.
+Level of Development
+
+References
+Base data definition for record to be used in model Building.Components.WindowsDoors.WindowSimple
+", revisions="
+
+- September 11, 2013 by Ole Odendahl:
Added documentation and formatted appropriately
+
+"));
+ end OWBaseDataDefinition_Simple;
+
+ record WindowSimple_EnEV2009 "Window according to EnEV 2009"
+
+ extends OWBaseDataDefinition_Simple(
+ Uw=1.3,
+ g=0.6,
+ Emissivity=0.9,
+ frameFraction=0.2);
+ annotation (Documentation(revisions="
+
+- September 11, 2013 by Ole Odendahl:
Added reference
+- July 5, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Window definition according to EnEV 2009 for a simple window.
+Level of Development
+
+References
+References
+Record is used in model Building.Components.WindowsDoors.WindowSimple
+Source:
+
+- For EnEV see Bundesregierung (Veranst.): Verordnung über energiesparenden Wärmeschutz und energiesparende Anlagentechnik bei Gebäuden. Berlin, 2009
+
+"));
+ end WindowSimple_EnEV2009;
+
+ record WindowSimple_EnEV2002 "Window according to EnEv 2002"
+
+ extends OWBaseDataDefinition_Simple(
+ Uw=1.7,
+ g=0.6,
+ Emissivity=0.9,
+ frameFraction=0.2);
+ annotation (Documentation(revisions="
+
+- September 11, 2013 by Ole Odendahl:
Added reference
+- July 5, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Window definition according to EnEV 2002 for a simple window.
+Level of Development
+
+References
+Record is used in model Building.Components.WindowsDoors.WindowSimple
+Source:
+
+- For EnEV see Energieeinsparverordnung 2002. 2002
+
+"));
+ end WindowSimple_EnEV2002;
+
+ record WindowSimple_WSchV1995 "Window according to WSchV1995"
+
+ extends OWBaseDataDefinition_Simple(
+ Uw=1.8,
+ g=0.7,
+ Emissivity=0.9,
+ frameFraction=0.2);
+ annotation (Documentation(revisions="
+
+- September 11, 2013 by Ole Odendahl:
Added reference
+- July 5, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Window definition according to WSchV 1995 for a simple window.
+Level of Development
+
+References
+Record is used in model Building.Components.WindowsDoors.WindowSimple
+Source:
+
+- For EnEV see Wärmeschutzverordnung 1995. 1995
+
+"));
+ end WindowSimple_WSchV1995;
+
+ record WindowSimple_WSchV1984 "Window according to WSchV1984"
+
+ extends OWBaseDataDefinition_Simple(
+ Uw=2.5,
+ g=0.8,
+ Emissivity=0.9,
+ frameFraction=0.2);
+ annotation (Documentation(revisions="
+
+- September 11, 2013 by Ole Odendahl:
Added reference
+- July 5, 2011 by Ana Constantin:
implemented
+
+", info="
+Overview
+Window definition according to WSchV 1984 for a simple window.
+Level of Development
+
+References
+Record is used in model Building.Components.WindowsDoors.WindowSimple
+Source:
+
+- For EnEV see Wärmeschutzverordnung 1984. 1984
+
+"));
+ end WindowSimple_WSchV1984;
+ end Simple;
+ annotation (Documentation(info="
+Window types as well as shading types.
+
+- Main Author:
+
- Peter Matthes
+ RWTH Aachen University
+ E.ON Energy Research Center
+ EBC | Institute for Energy Efficient Buildings and Indoor Climate
+ Mathieustraße 6
+ 52074 Aachen
+ e-mail: pmatthes@eonerc.rwth-aachen.de
+
+"));
+end WindowsDoors;
diff --git a/AixLib/DataBase/package.mo b/AixLib/DataBase/package.mo
new file mode 100644
index 0000000000..34c54b42fe
--- /dev/null
+++ b/AixLib/DataBase/package.mo
@@ -0,0 +1,18 @@
+within AixLib;
+package DataBase "Package contains records for the models in the library."
+ extends Modelica.Icons.Package;
+
+
+ annotation (Icon,
+ Diagram,
+ conversion(noneFromVersion="0.1",
+ noneFromVersion="1.1",
+ from(version="2.0",script="modelica://DataBase/Conversions/ConvertFromDataBase_2.0_To_2.1.mos"),
+ from(version="2.1",script="Conversions/ConvertFromDataBase_2.1_To_2.2.mos")),
+ Documentation(info="
+Overview
+
This package contains records for the models in the library.
+", revisions="
+
+"), preferedView="diagram");
+end DataBase;
diff --git a/AixLib/DataBase/package.order b/AixLib/DataBase/package.order
new file mode 100644
index 0000000000..4af2c8c42f
--- /dev/null
+++ b/AixLib/DataBase/package.order
@@ -0,0 +1,11 @@
+Boiler
+Buildings
+Fans
+Profiles
+Pumps
+Radiators
+SolarThermal
+Surfaces
+Walls
+Weather
+WindowsDoors
diff --git a/AixLib/HVAC/BaseParameters.mo b/AixLib/HVAC/BaseParameters.mo
new file mode 100644
index 0000000000..4da663dd7c
--- /dev/null
+++ b/AixLib/HVAC/BaseParameters.mo
@@ -0,0 +1,79 @@
+within AixLib.HVAC;
+model BaseParameters
+ parameter Modelica.SIunits.AbsolutePressure p_ambient=101325
+ "Default ambient pressure"
+ annotation(Dialog(group="Environment"));
+ parameter Modelica.SIunits.Temperature T_ambient=293.15
+ "Default ambient temperature"
+ annotation(Dialog(group="Environment"));
+ parameter Modelica.SIunits.Acceleration g=9.81 "Gravity" annotation(Dialog(group="Environment"));
+ parameter Modelica.SIunits.DynamicViscosity mu_Water=1e-3
+ "Dynamic viscosity of water" annotation(Dialog(tab="Substance Properties",group="Water"));
+ parameter Modelica.SIunits.Density rho_Water=995.586 "Density of the fluid"
+ annotation(Dialog(tab="Substance Properties",group="Water"));
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Water=4184
+ "Specific heat capacity of water" annotation(Dialog(tab="Substance Properties",group="Water"));
+ parameter Modelica.SIunits.ThermalConductivity lambda_Water=0.6
+ "Thermal conductivity of water" annotation(Dialog(tab="Substance Properties",group="Water"));
+
+ parameter Modelica.SIunits.MolarMass M_Steam=0.01801 "Molar Mass of Steam" annotation(Dialog(tab="Substance Properties",group="Steam"));
+
+ parameter Modelica.SIunits.SpecificEnthalpy r_Steam=2500000
+ "Specific enthalpy of vaporisation for water/steam" annotation(Dialog(tab="Substance Properties",group="Steam"));
+
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Steam=1868
+ "Specific heat capacity of Steam" annotation(Dialog(tab="Substance Properties",group="Steam"));
+
+ parameter Modelica.SIunits.MolarMass M_Air=0.02897 "Molar Mass of Dry Air" annotation(Dialog(tab="Substance Properties",group="Air"));
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Air=1005
+ "Specific heat capacity of Dry Air" annotation(Dialog(tab="Substance Properties",group="Air"));
+
+ parameter Modelica.SIunits.Temperature T_ref=273.15
+ "Reference temperature at zero enthalpy" annotation(Dialog(tab="Substance Properties",group="Reference"));
+ parameter Modelica.SIunits.Temperature T0=T_ambient "Initial temperature"
+ annotation(Dialog(tab="Initialization"));
+
+parameter Boolean calcMFlow=true "Calculate m_flow from p" annotation(Dialog(group="Assumptions"));
+
+ annotation (defaultComponentName="baseParameters",
+ defaultComponentPrefixes="inner",
+ Icon(graphics={
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,255},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-150,150},{150,110}},
+ lineColor={0,0,255},
+ textString="%name"),
+ Line(points={{-86,-30},{82,-30}}, color={0,0,0}),
+ Line(points={{-82,-68},{-52,-30}}, color={0,0,0}),
+ Line(points={{-48,-68},{-18,-30}}, color={0,0,0}),
+ Line(points={{-14,-68},{16,-30}}, color={0,0,0}),
+ Line(points={{22,-68},{52,-30}}, color={0,0,0}),
+ Line(points={{74,56},{74,14}}, color={0,0,0}),
+ Polygon(
+ points={{60,14},{88,14},{74,-18},{60,14}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{16,20},{60,-18}},
+ lineColor={0,0,0},
+ textString="g"),
+ Text(
+ extent={{-94,94},{92,66}},
+ lineColor={0,0,0},
+ textString="Base Parameters"),
+ Line(
+ points={{-82,14},{-42,-20},{2,30}},
+ color={0,0,0},
+ thickness=0.5),
+ Ellipse(
+ extent={{-10,40},{12,18}},
+ pattern=LinePattern.None,
+ lineColor={0,0,0},
+ fillColor={255,0,0},
+ fillPattern=FillPattern.Solid)}));
+end BaseParameters;
diff --git a/AixLib/HVAC/Ductwork.mo b/AixLib/HVAC/Ductwork.mo
new file mode 100644
index 0000000000..6118a8dfc1
--- /dev/null
+++ b/AixLib/HVAC/Ductwork.mo
@@ -0,0 +1,622 @@
+within AixLib.HVAC;
+package Ductwork "Contains Ducts and other parts concerning ductwork"
+ extends Modelica.Icons.Package;
+
+ model Duct "Duct with pressure loss and storage of mass and energy"
+ extends Interfaces.TwoPortMoistAir;
+ outer BaseParameters baseParameters "System properties";
+ public
+ parameter Modelica.SIunits.Length D=0.05 "Diameter";
+ parameter Modelica.SIunits.Length l=1 "Length";
+ parameter Modelica.SIunits.Length e=2.5e-5 "Roughness";
+
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatport annotation (
+ Placement(transformation(extent={{-12,32},{8,52}}), iconTransformation(
+ extent={{-10,27},{10,47}})));
+ Volume.VolumeMoistAir volumeMoistAir(V=D*D/4*Modelica.Constants.pi*l,
+ X(start=0.005),
+ X_Steam(start=0.005))
+ annotation (Placement(transformation(extent={{18,-31},{80,31}})));
+ BaseClasses.DuctPressureLoss ductPressureLoss(
+ D=D, l=l, e=e,
+ X(start=0.005),
+ X_Steam(start=0.005))
+ annotation (Placement(transformation(extent={{-70,-28},{-8,28}})));
+ equation
+ connect(volumeMoistAir.portMoistAir_b, portMoistAir_b) annotation (Line(
+ points={{80,0},{100,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir.heatPort, heatport) annotation (Line(
+ points={{49,31},{44,31},{44,34},{-2,34},{-2,42}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(ductPressureLoss.portMoistAir_b, volumeMoistAir.portMoistAir_a)
+ annotation (Line(
+ points={{-8,-3.55271e-015},{-2,-3.55271e-015},{-2,0},{18,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(ductPressureLoss.portMoistAir_a, portMoistAir_a) annotation (Line(
+ points={{-70,-3.55271e-015},{-86,-3.55271e-015},{-86,0},{-100,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},
+ {100,40}}), graphics={ Rectangle(
+ extent={{-100,33},{100,-35}},
+ lineColor={0,0,0},
+ fillColor={95,95,95},
+ fillPattern=FillPattern.Solid), Rectangle(
+ extent={{-100,29},{100,-31}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.HorizontalCylinder)}),
+ Documentation(info="
+Overview
+Simple Duct Model with pressure loss and storage of mass and energy
+It consists of one pressure loss model and one Volume model.
+Level of Development
+
+Example Results
+AixLib.HVAC.Ductwork.Examples.DuctNetwork
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},{100,
+ 40}}),
+ graphics));
+ end Duct;
+
+ model PressureLoss "simple pressure loss model based on zeta value"
+ extends BaseClasses.SimplePressureLoss;
+ outer BaseParameters baseParameters "System properties";
+ parameter Real zeta = 1.0
+ "Pressure loss factor for flow of port_a -> port_b";
+
+ equation
+ zeta_var = zeta;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(graphics={
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.HorizontalCylinder),
+ Text(
+ extent={{88,44},{-88,-40}},
+ lineColor={0,0,255},
+ fillColor={255,255,0},
+ fillPattern=FillPattern.Solid,
+ textString="Zeta =%zeta
+d=%D")}), Documentation(info="
+Overview
+Simple pressure loss model based on a constant zeta value.
+Level of Development
+
+Example Results
+AixLib.HVAC.Ductwork.Examples.DuctPressureLoss
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},{100,
+ 40}}),
+ graphics));
+ end PressureLoss;
+
+ model VolumeFlowController
+
+ extends BaseClasses.SimplePressureLoss;
+ outer BaseParameters baseParameters annotation (Diagram(
+ coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics), Icon(graphics={Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.HorizontalCylinder)}));
+
+ Modelica.Blocks.Sources.RealExpression Volumeflow(y=Volflow)
+ annotation (Placement(transformation(extent={{-88,-38},{-56,-6}})));
+ Modelica.Blocks.Interfaces.RealInput VolumeFlowSet
+ annotation (Placement(transformation(extent={{-126,4},{-90,38}})));
+
+ Real angle "current angle of Flap";
+
+ Modelica.Blocks.Continuous.LimPID PID(
+ controllerType=Modelica.Blocks.Types.SimpleController.PI,
+ yMax=0,
+ yMin=-90,
+ k=100,
+ Ti=20,
+ Td=1) annotation (Placement(transformation(extent={{-22,2},{16,40}})));
+ equation
+ angle = -PID.y;
+ zeta_var = 0.25*exp(0.1*angle);
+ connect(VolumeFlowSet, PID.u_s) annotation (Line(
+ points={{-108,21},{-25.8,21}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(PID.u_m, Volumeflow.y) annotation (Line(
+ points={{-3,-1.8},{-3,-22},{-54.4,-22}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -50},{100,50}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-50},{100,50}}), graphics={
+ Rectangle(
+ extent={{-100,50},{100,-50}},
+ lineColor={0,0,0},
+ lineThickness=0.5,
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-4,4},{4,-4}},
+ lineColor={0,0,0},
+ lineThickness=0.5,
+ fillPattern=FillPattern.Solid),
+ Line(
+ points={{26,40},{-28,-40},{-28,-40}},
+ color={0,0,0},
+ thickness=0.5,
+ smooth=Smooth.None),
+ Line(
+ points={{-68,0},{-30,0}},
+ color={0,0,0},
+ thickness=0.5,
+ smooth=Smooth.None,
+ arrow={Arrow.None,Arrow.Filled})}), Documentation(info="
+Overview
+Volume Flow Controler which is based on a PI controller
+The Controller Influences the zeta-value of the component.
+Level of Development
+
+Example Results
+AixLib.HVAC.Ductwork.Examples.VolumeFlowController
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},{100,
+ 40}}),
+ graphics));
+ end VolumeFlowController;
+
+ package BaseClasses "BaseClasses for Ducts and other Ductwork"
+ extends Modelica.Icons.BasesPackage;
+ model DuctPressureLoss "Pressure Loss of a Duct"
+ extends Interfaces.TwoPortMoistAirTransportFluidprops;
+
+ import Modelica.Math;
+
+ parameter Modelica.SIunits.Length D=0.05 "Diameter";
+ parameter Modelica.SIunits.Length l=1 "Length";
+ parameter Modelica.SIunits.Length e=2.5e-5 "Roughness";
+
+ Modelica.SIunits.VolumeFlowRate Volflow "Volume Flow";
+
+ Real lambda;
+ Modelica.SIunits.ReynoldsNumber Re "Reynolds number";
+
+ equation
+ portMoistAir_a.m_flow = BaseClasses.m_flow_of_dp(dp,rho_MoistAir,dynamicViscosity,l,D,e/D)/(1+X_Steam);
+
+ Re = 4*rho_MoistAir*Volflow / dynamicViscosity / D / Modelica.Constants.pi;
+
+ Volflow = portMoistAir_a.m_flow*(1+X_Steam) / rho_MoistAir;
+
+ lambda = if Volflow > 0 then 1/8 * dp*D^5*Modelica.Constants.pi^2/l /rho_MoistAir / Volflow^2 else 0;
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+Pressure loss model for duct.
+It covers laminar and turbulent regime.
+The critical Reynolds Number is 2300.
+See function for Equations.
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},{100,
+ 40}}),
+ graphics),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={
+ Polygon(
+ points={{20,-70},{60,-85},{20,-100},{20,-70}},
+ lineColor={0,128,255},
+ smooth=Smooth.None,
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=showDesignFlowDirection),
+ Polygon(
+ points={{20,-75},{50,-85},{20,-95},{20,-75}},
+ lineColor={255,255,255},
+ smooth=Smooth.None,
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ visible=allowFlowReversal),
+ Line(
+ points={{55,-85},{-60,-85}},
+ color={0,128,255},
+ smooth=Smooth.None,
+ visible=showDesignFlowDirection),
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={240,240,240},
+ fillPattern=FillPattern.Solid),
+ Line(
+ points={{-76,72},{-76,-38},{76,-38}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ arrow={Arrow.Open,Arrow.Open}),
+ Text(
+ extent={{-98,88},{-62,78}},
+ lineColor={0,0,0},
+ textString="lambda"),
+ Text(
+ extent={{62,-44},{92,-58}},
+ lineColor={0,0,0},
+ textString="Re"),
+ Line(
+ points={{-68,62},{-66,46},{-58,12},{-48,-8}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-44,26},{-26,4},{6,-14},{64,-28}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-42,38},{-24,16},{8,-2},{66,-16}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-42,52},{-24,30},{8,12},{66,2}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-40,62},{-22,40},{10,22},{66,16}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5)}));
+ end DuctPressureLoss;
+
+ partial model SimplePressureLoss
+ extends Interfaces.TwoPortMoistAirTransportFluidprops;
+
+ parameter Modelica.SIunits.Length D=0.3 "Diameter of component";
+
+ Modelica.SIunits.VolumeFlowRate Volflow(min = 0) "Volume Flow";
+
+ Real zeta_var;
+
+ equation
+ Volflow = portMoistAir_a.m_flow*(1+X_Steam) / rho_MoistAir;
+
+ dp = 8* zeta_var * rho_MoistAir /D^4 / Modelica.Constants.pi^2 * abs(Volflow)*Volflow;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+Simple partial pressure loss model based on zeta value, which in this case given as a variable.
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-40},{100,
+ 40}}),
+ graphics));
+ end SimplePressureLoss;
+
+ function m_flow_of_dp
+ "Calculate mass flow rate as function of pressure drop due to friction"
+
+ input Modelica.SIunits.Pressure dp
+ "Pressure loss due to friction (dp = port_a.p - port_b.p)";
+ input Modelica.SIunits.Density rho "Density at port_a";
+ input Modelica.SIunits.DynamicViscosity mu "Dynamic viscosity at port_a";
+ input Modelica.SIunits.Length length "Length of pipe";
+ input Modelica.SIunits.Diameter diameter
+ "Inner (hydraulic) diameter of pipe";
+ input Real Delta "Relative roughness";
+ output Modelica.SIunits.MassFlowRate m_flow
+ "Mass flow rate from port_a to port_b";
+
+ protected
+ Real lambda2 "Modified friction coefficient (= lambda*Re^2)";
+ Modelica.SIunits.ReynoldsNumber Re "Reynolds number";
+
+ algorithm
+ // Positive mass flow rate
+ lambda2 := abs(dp)*2*diameter^3*rho/(length*mu*mu)
+ "Known as lambda2=f(dp)";
+
+ Re := lambda2/64 "Hagen-Poiseuille";
+
+ // Modify Re, if turbulent flow
+ if Re > 2300 then
+ Re := -2*sqrt(lambda2)*Modelica.Math.log10(2.51/sqrt(lambda2) + 0.27*Delta)
+ "Colebrook-White";
+ end if;
+
+ // Determine mass flow rate
+ m_flow := (Modelica.Constants.pi*diameter/4)*mu*(if dp >= 0 then Re else -Re);
+ annotation(smoothOrder=1,
+ Documentation(info="
+Overview
+Calculation of pressureloss according to the following equation:
+
dp = lambda * l / d * rho / 2 * u^2
+
For laminar regime (if Re ≤ 2300):
+
+lambda = 64 / Re
+
For turbulent regime (if Re > 2300):
+
+1/sqrt(lambda) = -2 log(2.51 / (Re *sqrt(lambda)) + epsilon / (3.71 * d)
+
+", revisions="
+30.12.2013, Mark Wesseling
+
+"));
+ end m_flow_of_dp;
+ end BaseClasses;
+
+ package Examples "Examples for Ducts and other Ductwork"
+ extends Modelica.Icons.ExamplesPackage;
+ model VolumeFlowController "Example for Volume Flow Controller"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1(use_p_in=false, p=
+ 100000) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={64,11})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ duration=100,
+ startTime=50,
+ offset=1.005e5,
+ height=40000)
+ annotation (Placement(transformation(extent={{-52,-58},{-32,-38}})));
+ Modelica.Blocks.Sources.Ramp ramp1(
+ offset=0,
+ startTime=150,
+ height=-5000,
+ duration=2)
+ annotation (Placement(transformation(extent={{-52,-88},{-32,-68}})));
+ Modelica.Blocks.Math.Add add
+ annotation (Placement(transformation(extent={{-4,-72},{16,-52}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX2(use_p_in=true, p=99900)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-62,11})));
+ Modelica.Blocks.Sources.RealExpression realExpression(y=1)
+ annotation (Placement(transformation(extent={{-88,34},{-68,54}})));
+ Anlagensimulation_WS1314.Ductwork.VolumeFlowController
+ volumeFlowControler(D=0.3)
+ annotation (Placement(transformation(extent={{-24,6},{-4,16}})));
+ equation
+
+ connect(ramp.y, add.u1) annotation (Line(
+ points={{-31,-48},{-24,-48},{-24,-56},{-6,-56}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(ramp1.y, add.u2) annotation (Line(
+ points={{-31,-78},{-23.5,-78},{-23.5,-68},{-6,-68}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX2.p_in, add.y) annotation (Line(
+ points={{-74,19},{-92,19},{-92,-32},{60,-32},{60,-62},{17,-62}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX2.portMoistAir_a, volumeFlowControler.portMoistAir_a)
+ annotation (Line(
+ points={{-52,11},{-24,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeFlowControler.portMoistAir_b, boundaryMoistAir_phX1.portMoistAir_a)
+ annotation (Line(
+ points={{-4,11},{54,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeFlowControler.VolumeFlowSet, realExpression.y) annotation (
+ Line(
+ points={{-24.8,13.1},{-24.8,43.2},{-67,43.2},{-67,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{
+ -100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example which shows how the volume flow controller works
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end VolumeFlowController;
+
+ model DuctPressureLoss "Example for Duct"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1(use_p_in=false, p=
+ 100000) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={46,20})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ duration=100,
+ startTime=50,
+ offset=1.005e5,
+ height=40000)
+ annotation (Placement(transformation(extent={{-52,-58},{-32,-38}})));
+ Modelica.Blocks.Sources.Ramp ramp1(
+ offset=0,
+ startTime=150,
+ height=-5000,
+ duration=2)
+ annotation (Placement(transformation(extent={{-52,-88},{-32,-68}})));
+ Modelica.Blocks.Math.Add add
+ annotation (Placement(transformation(extent={{-4,-72},{16,-52}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX2(use_p_in=true, p=99900)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-42,20})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct
+ annotation (Placement(transformation(extent={{-12,16},{8,24}})));
+ equation
+
+ connect(ramp.y, add.u1) annotation (Line(
+ points={{-31,-48},{-24,-48},{-24,-56},{-6,-56}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(ramp1.y, add.u2) annotation (Line(
+ points={{-31,-78},{-23.5,-78},{-23.5,-68},{-6,-68}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX2.p_in, add.y) annotation (Line(
+ points={{-54,28},{-92,28},{-92,-32},{60,-32},{60,-62},{17,-62}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX2.portMoistAir_a, duct.portMoistAir_a)
+ annotation (Line(
+ points={{-32,20},{-12,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct.portMoistAir_b, boundaryMoistAir_phX1.portMoistAir_a)
+ annotation (Line(
+ points={{8,20},{36,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{
+ -100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example which shows the use of the duct model
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end DuctPressureLoss;
+
+ model DuctNetwork "Duct Network Example"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1(use_p_in=false, p=98000)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={88,0})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX2(
+ use_p_in=false,
+ h=2e4,
+ p=100000)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-90,0})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct(D=0.1, l=10)
+ annotation (Placement(transformation(extent={{-60,-6},{-40,6}})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct1(D=0.1, l=50)
+ annotation (Placement(transformation(extent={{-26,26},{8,40}})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct2(D=0.1, l=100)
+ annotation (Placement(transformation(extent={{-2,-6},{62,8}})));
+ Anlagensimulation_WS1314.Ductwork.PressureLoss pressureLoss(D=0.1)
+ annotation (Placement(transformation(extent={{14,26},{34,40}})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct3(D=0.1, l=50)
+ annotation (Placement(transformation(extent={{42,26},{76,40}})));
+ Anlagensimulation_WS1314.Ductwork.PressureLoss pressureLoss1(D=0.1, zeta=5)
+ annotation (Placement(transformation(extent={{-58,-42},{-38,-28}})));
+ Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow(Q_flow=500)
+ annotation (Placement(transformation(extent={{-62,54},{-42,74}})));
+ equation
+
+ connect(duct.portMoistAir_b, duct1.portMoistAir_a) annotation (Line(
+ points={{-40,0},{-32,0},{-32,33},{-26,33}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct.portMoistAir_b, duct2.portMoistAir_a) annotation (Line(
+ points={{-40,0},{-2,0},{-2,1}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct1.portMoistAir_b, pressureLoss.portMoistAir_a) annotation (Line(
+ points={{8,33},{14,33}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss.portMoistAir_b, duct3.portMoistAir_a) annotation (Line(
+ points={{34,33},{42,33}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct3.portMoistAir_b, boundaryMoistAir_phX1.portMoistAir_a)
+ annotation (Line(
+ points={{76,33},{78,33},{78,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct2.portMoistAir_b, boundaryMoistAir_phX1.portMoistAir_a)
+ annotation (Line(
+ points={{62,1},{62,0},{78,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX2.portMoistAir_a, pressureLoss1.portMoistAir_a)
+ annotation (Line(
+ points={{-80,0},{-78,0},{-78,-2},{-72,-2},{-72,-35},{-58,-35}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss1.portMoistAir_b, duct2.portMoistAir_a) annotation (Line(
+ points={{-38,-35},{-10,-35},{-10,0},{0,0},{0,2},{-2,2},{-2,1}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(duct.portMoistAir_a, boundaryMoistAir_phX2.portMoistAir_a)
+ annotation (Line(
+ points={{-60,0},{-80,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fixedHeatFlow.port, duct1.heatport) annotation (Line(
+ points={{-42,64},{-9,64},{-9,39.475}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example which shows how to build a network of ducts
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end DuctNetwork;
+ end Examples;
+end Ductwork;
diff --git a/AixLib/HVAC/Fan.mo b/AixLib/HVAC/Fan.mo
new file mode 100644
index 0000000000..a66b9ab213
--- /dev/null
+++ b/AixLib/HVAC/Fan.mo
@@ -0,0 +1,320 @@
+within AixLib.HVAC;
+package Fan "Contains a Fan Model"
+ extends Modelica.Icons.Package;
+
+ model FanSimple "Simple Fan Model"
+ import AixLib;
+ extends Interfaces.TwoPortMoistAirFluidprops;
+
+ outer BaseParameters baseParameters "System properties";
+
+ parameter AixLib.DataBase.Fans.FanCharacteristicsBaseDataDefinition
+ Characteristics=AixLib.DataBase.Fans.Fan1()
+ "dp = f(V_flow) characteristics for the Fan (n = const)"
+ annotation (choicesAllMatching=true);
+
+ parameter Boolean UseRotationalSpeedInput = false
+ "If true, rotational speed (n/n_0) can be varied by real input" annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+
+ Modelica.SIunits.VolumeFlowRate Volflow(min=0) "Volume Flow before Fan";
+ Modelica.SIunits.Pressure PressureIncrease(min=0)
+ "Pressure Increase of Fan";
+ Real eta "efficieny of Fan";
+
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a in W";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b in W";
+
+ Modelica.SIunits.Power P_t "Technical Work of Fan";
+ Modelica.SIunits.Power P_t_rev "Reversible technical Work of Fan";
+
+ Modelica.Blocks.Tables.CombiTable1Ds table_Characteristics(
+ tableOnFile=false,
+ table=Characteristics.dp,
+ smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments,
+ columns={2,3})
+ "Table with dp = f(V_flow) and eta = f(V_flow) characteristics for the Fan (n = const)"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Interfaces.RealOutput Power
+ annotation (Placement(
+ transformation(
+ extent={{-12,-12},{12,12}},
+ rotation=270,
+ origin={0,-104})));
+
+ Modelica.Blocks.Interfaces.RealInput n_relative(min=0,max=1) if UseRotationalSpeedInput annotation (Placement(
+ transformation(
+ extent={{-14,-16},{14,16}},
+ rotation=270,
+ origin={0,106})));
+
+ protected
+ Modelica.Blocks.Interfaces.RealInput n_internal
+ "Needed to connect to conditional connector";
+
+ initial equation
+
+ equation
+ assert(Volflow>=0, "Backflow occurs through Fan, check Boundaries");
+ assert(PressureIncrease>=0, "Pressure behind Fan is lower than befor Fan, check Boundaries");
+ assert(0 <= n_internal and n_internal<= 1, "relative rotational Speed must be between 0 and 1, check input");
+
+ portMoistAir_a.m_flow + portMoistAir_b.m_flow = 0;
+
+ portMoistAir_b.X_outflow = actualStream(portMoistAir_a.X_outflow);
+ portMoistAir_a.X_outflow = actualStream(portMoistAir_b.X_outflow);
+ portMoistAir_a.h_outflow = inStream(portMoistAir_b.h_outflow); //nothing happens in case of backflow
+
+ // ENERGY BALANCE
+
+ connect(n_internal,n_relative);
+
+ if not UseRotationalSpeedInput then
+ n_internal = 1;
+ end if;
+
+ P_t_rev = Volflow*PressureIncrease;
+ P_t = P_t_rev/ eta;
+
+ H_flow_a = portMoistAir_a.m_flow*actualStream(portMoistAir_a.h_outflow);
+
+ //H_flow_b = portMoistAir_b.m_flow*portMoistAir_b.h_outflow;
+
+ portMoistAir_b.h_outflow = if portMoistAir_b.m_flow < 0 then H_flow_b /portMoistAir_b.m_flow else 0;
+
+ H_flow_a + H_flow_b + P_t = 0;
+
+ dp = - PressureIncrease;
+
+ table_Characteristics.u = Volflow/n_internal *3600;
+
+ eta = table_Characteristics.y[2];
+ PressureIncrease = n_internal*n_internal*table_Characteristics.y[1];
+
+ Volflow = portMoistAir_a.m_flow / rho_MoistAir;
+ Power=P_t;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}),
+ graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillPattern=FillPattern.Solid,
+ fillColor={170,255,255}),
+ Line(
+ points={{-78,60},{92,40},{90,40}},
+ color={0,0,0},
+ smooth=Smooth.None),
+ Line(
+ points={{-80,-60},{92,-40},{92,-40}},
+ color={0,0,0},
+ smooth=Smooth.None)}),
+ Documentation(info="
+Overview
+A simple fan model with variation of rotational speed. The properties of the fan are table based.
+Level of Development
+
+Example Results
+AixLib.HVAC.Fan.Examples.SpeedControlOfFan
+AixLib.HVAC.Fan.Examples.FansSerialAndParallel
+", revisions="
+30.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics));
+ end FanSimple;
+
+ package Examples "Examples for Fan Model"
+ extends Modelica.Icons.ExamplesPackage;
+
+ model SpeedControlOfFan "Fan Speed Control Example"
+ extends Modelica.Icons.Example;
+ inner BaseParameters baseParameters(T0=298.15)
+ annotation (Placement(transformation(extent={{80,80},{100,100}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX2(use_p_in=false, p=
+ 100000)
+ annotation (Placement(transformation(extent={{-10,10},{10,-10}},
+ rotation=180,
+ origin={50,0})));
+ FanSimple fanSimple(UseRotationalSpeedInput=true)
+ annotation (Placement(transformation(extent={{-30,10},{-10,30}})));
+ Ductwork.VolumeFlowController volumeFlowController(D=0.3)
+ annotation (Placement(transformation(extent={{6,25},{26,15}})));
+ Modelica.Blocks.Sources.RealExpression V_dot_set(y=0.4) annotation (
+ Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={16,0})));
+ Modelica.Blocks.Sources.RealExpression n_relative(y=0.6)
+ annotation (Placement(transformation(extent={{-52,26},{-32,46}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1(
+ use_p_in=false, h=1e3)
+ annotation (Placement(transformation(extent={{-72,-12},{-52,8}})));
+ FanSimple fanSimple1(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-30,-30},{-10,-10}})));
+ Ductwork.VolumeFlowController volumeFlowController1(D=0.3)
+ annotation (Placement(transformation(extent={{6,-25},{26,-15}})));
+ equation
+ connect(V_dot_set.y, volumeFlowController.VolumeFlowSet) annotation (Line(
+ points={{5,1.33227e-015},{2,1.33227e-015},{2,17.9},{5.2,17.9}},
+ color={0,0,127},
+ smooth=Smooth.None));
+
+ connect(fanSimple.portMoistAir_b, volumeFlowController.portMoistAir_a)
+ annotation (Line(
+ points={{-10,20},{6,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeFlowController.portMoistAir_b, boundaryMoistAir_phX2.portMoistAir_a)
+ annotation (Line(
+ points={{26,20},{32,20},{32,1.33227e-015},{40,1.33227e-015}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(n_relative.y, fanSimple.n_relative) annotation (Line(
+ points={{-31,36},{-20,36},{-20,30.6}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1.portMoistAir_a, fanSimple1.portMoistAir_a)
+ annotation (Line(
+ points={{-52,-2},{-40,-2},{-40,-20},{-30,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fanSimple1.portMoistAir_b, volumeFlowController1.portMoistAir_a)
+ annotation (Line(
+ points={{-10,-20},{6,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1.portMoistAir_a, fanSimple.portMoistAir_a)
+ annotation (Line(
+ points={{-52,-2},{-40,-2},{-40,20},{-30,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeFlowController1.portMoistAir_b, boundaryMoistAir_phX2.portMoistAir_a)
+ annotation (Line(
+ points={{26,-20},{32,-20},{32,1.33227e-015},{40,1.33227e-015}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(V_dot_set.y, volumeFlowController1.VolumeFlowSet) annotation (
+ Line(
+ points={{5,1.33227e-015},{2,1.33227e-015},{2,-17.9},{5.2,-17.9}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A simple Simulation Model which shows the effect of rotational Speed control of a Fan
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end SpeedControlOfFan;
+
+ model FansSerialAndParallel "Serial and Parallel Fan Example"
+ extends Modelica.Icons.Example;
+ inner BaseParameters baseParameters(T0=298.15)
+ annotation (Placement(transformation(extent={{80,80},{100,100}})));
+ FanSimple fanSimple_parallel1(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-54,52},{-34,72}})));
+ FanSimple fanSimple_parallel2(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-54,24},{-34,44}})));
+ FanSimple fanSimple_serial1(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-54,-10},{-34,10}})));
+ FanSimple fanSimple_serial2(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-16,-10},{4,10}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1_in(use_p_in=false, h=1e3)
+ annotation (Placement(transformation(extent={{-102,10},{-82,30}})));
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX2_out(use_p_in=false, p=120000)
+ annotation (Placement(transformation(extent={{-10,10},{10,-10}},
+ rotation=180,
+ origin={82,20})));
+ Ductwork.PressureLoss pressureLoss_parallel(D=0.1, zeta=5)
+ annotation (Placement(transformation(extent={{24,38},{44,58}})));
+ Ductwork.PressureLoss pressureLoss_serial(D=0.1, zeta=5)
+ annotation (Placement(transformation(extent={{24,-10},{44,10}})));
+ Ductwork.PressureLoss pressureLoss_single(D=0.1, zeta=5)
+ annotation (Placement(transformation(extent={{24,-56},{44,-36}})));
+ FanSimple fanSimple_single(UseRotationalSpeedInput=false)
+ annotation (Placement(transformation(extent={{-54,-56},{-34,-36}})));
+ equation
+
+ connect(fanSimple_parallel1.portMoistAir_b, pressureLoss_parallel.portMoistAir_a)
+ annotation (Line(
+ points={{-34,62},{-12,62},{-12,48},{24,48}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fanSimple_parallel2.portMoistAir_b, pressureLoss_parallel.portMoistAir_a)
+ annotation (Line(
+ points={{-34,34},{-12,34},{-12,48},{24,48}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fanSimple_serial1.portMoistAir_b, fanSimple_serial2.portMoistAir_a)
+ annotation (Line(
+ points={{-34,0},{-16,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fanSimple_serial2.portMoistAir_b, pressureLoss_serial.portMoistAir_a)
+ annotation (Line(
+ points={{4,0},{24,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss_serial.portMoistAir_b, boundaryMoistAir_phX2_out.portMoistAir_a)
+ annotation (Line(
+ points={{44,0},{58,0},{58,20},{72,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss_parallel.portMoistAir_b, boundaryMoistAir_phX2_out.portMoistAir_a)
+ annotation (Line(
+ points={{44,48},{58,48},{58,20},{72,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1_in.portMoistAir_a, fanSimple_parallel1.portMoistAir_a)
+ annotation (Line(
+ points={{-82,20},{-68,20},{-68,62},{-54,62}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1_in.portMoistAir_a, fanSimple_parallel2.portMoistAir_a)
+ annotation (Line(
+ points={{-82,20},{-68,20},{-68,34},{-54,34}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1_in.portMoistAir_a, fanSimple_serial1.portMoistAir_a)
+ annotation (Line(
+ points={{-82,20},{-68,20},{-68,0},{-54,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(fanSimple_single.portMoistAir_b, pressureLoss_single.portMoistAir_a)
+ annotation (Line(
+ points={{-34,-46},{24,-46}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundaryMoistAir_phX1_in.portMoistAir_a, fanSimple_single.portMoistAir_a)
+ annotation (Line(
+ points={{-82,20},{-68,20},{-68,-46},{-54,-46}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss_single.portMoistAir_b, boundaryMoistAir_phX2_out.portMoistAir_a)
+ annotation (Line(
+ points={{44,-46},{58,-46},{58,20},{72,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A simple Simulation Model which compares a single fan to two fans in serial and parallel
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end FansSerialAndParallel;
+
+ end Examples;
+
+end Fan;
diff --git a/AixLib/HVAC/HeatExchanger.mo b/AixLib/HVAC/HeatExchanger.mo
new file mode 100644
index 0000000000..47432c179b
--- /dev/null
+++ b/AixLib/HVAC/HeatExchanger.mo
@@ -0,0 +1,1412 @@
+within AixLib.HVAC;
+package HeatExchanger "Simple heat exchanger models for HVAC applications"
+ extends Modelica.Icons.Package;
+ model RecuperatorNoMedium
+ "recuperator model with selectable flow arrangement"
+
+ parameter Integer flowType = 3 "Flow type" annotation (choices( choice = 1 "counter", choice = 2 "co", choice = 3 "cross", radioButtons = true));
+
+ parameter Modelica.SIunits.Temperature T1in0 = 273.15 + 5
+ "Medium 1 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T1out0 = 296.558
+ "Medium 1 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T2in0 = 273.15 + 26
+ "Medium 2 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T2out0 = 281.0248
+ "Medium 2 inlet temperature at design point";
+ parameter Modelica.SIunits.MassFlowRate m_flow10 = 0.029949
+ "mass flow rate at design point";
+ parameter Modelica.SIunits.MassFlowRate m_flow20 = 0.029954
+ "mass flow rate at design point";
+ final parameter Modelica.SIunits.ThermalConductance C10 = m_flow10*1011
+ "Heat capacity flow rate of medium 1 at design point";
+ final parameter Modelica.SIunits.ThermalConductance C20 = m_flow20*1011
+ "Heat capacity flow rate of medium 2 at design point";
+
+ final parameter Real epsilon0 = C10/min(C10,C20)*(T1out0 - T1in0)/(T2in0 - T1in0)
+ "Heat exchanger characterisic in design point";
+ final parameter Real Z0 = min(C10, C20) / max(C10, C20)
+ "heat capacity flow ratio";
+
+ parameter Real expo = 0.78
+ "exponent. h = 7.2 * v^0.78 [W/(m2.K)]. 5 <= v <= 30 m/s. See Jurges 1924.";
+ final parameter Real r = (m_flow10 * (T1in0+T1out0)/2 / (m_flow20 * (T2in0+T2out0)/2)) ^expo
+ "(hA)10/(hA)20 ";
+
+ Real NTU0(start=6.71699) "Number of transfer units at design point";
+ discrete Modelica.SIunits.ThermalConductance UA0
+ "U * A value at design condition";
+
+ Real NTU(nominal=7) "Number of transfer units";
+ Real epsilon(nominal=epsilon0, start=epsilon0)
+ "Heat exchanger characteristic";
+ Real Z "Ratio of heat capacity flow rates";
+ Modelica.SIunits.Power Q "transfered thermal power";
+
+ Modelica.SIunits.ThermalConductance UA "U * A value";
+ Modelica.SIunits.ThermalConductance C1
+ "Heat capacity flow rate of medium 1";
+ Modelica.SIunits.ThermalConductance C2
+ "Heat capacity flow rate of medium 2";
+
+ Modelica.Blocks.Interfaces.RealInput T1in(nominal=T1in0)
+ "standard: colder medium"
+ annotation (Placement(transformation(extent={{120,60},{80,100}})));
+ Modelica.Blocks.Interfaces.RealOutput T1out(nominal=T1out0) annotation (Placement(
+ transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={100,-60})));
+ Modelica.Blocks.Interfaces.RealInput T2in(nominal=T2in0)
+ "standard: warmer medium" annotation (Placement(
+ transformation(
+ extent={{20,20},{-20,-20}},
+ rotation=180,
+ origin={-100,-80})));
+ Modelica.Blocks.Interfaces.RealOutput T2out(nominal=T2out0) annotation (Placement(
+ transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=0,
+ origin={-100,80})));
+ Modelica.Blocks.Interfaces.RealInput m1in(nominal=m_flow10)
+ annotation (Placement(transformation(extent={{120,20},{80,60}})));
+ Modelica.Blocks.Interfaces.RealInput m2in(nominal=m_flow20) annotation (Placement(
+ transformation(
+ extent={{20,20},{-20,-20}},
+ rotation=180,
+ origin={-100,-40})));
+ equation
+ when initial() then
+ UA0 = NTU0*min(C10, C20);
+ end when;
+
+ if flowType == 1 then
+ NTU0 = if abs(1 - Z0) < Modelica.Constants.eps then epsilon0/(1 - epsilon0) else 1/(
+ Z0-1)*log((1 - epsilon0)/(1 - epsilon0*Z0)) "counter-current flow";
+ elseif flowType == 2 then
+ NTU0 = -(log(-epsilon0 - epsilon0*Z0 + 1)/(Z0 + 1)) "co-current flow";
+ else
+ exp((exp(-NTU0^0.78*Z0) - 1)/(Z0*NTU0^(-0.22))) = 1 - epsilon0
+ "cross flow (no explicit formula available)";
+ end if;
+
+ UA = UA0 * (1+r) / ( (m_flow10 * T1in0 / (m1in * T1in)) ^expo + r*(m_flow20 * T2in0 / (m2in * T2in))^expo);
+ C1 = m1in*1011;
+ C2 = m2in*1011;
+ Z = min(C1, C2) / max(C1, C2);
+
+ NTU = UA / min(C1, C2);
+
+ if flowType == 1 then
+ epsilon = if abs(1-Z) < Modelica.Constants.eps then 1 / (1 + 1/NTU) else (1 - exp(-NTU * (1-Z)))/(1 - Z * exp(-NTU * (1-Z)))
+ "counter-current flow";
+ elseif flowType == 2 then
+ epsilon = (1 - exp(-NTU * (1+Z)))/(1 + Z) "co-current flow";
+ else
+ epsilon = 1 - exp((exp(-NTU * Z * NTU^(-0.22)) - 1) / (Z * NTU^(-0.22)))
+ "cross flow";
+ end if;
+
+ T1out = T1in + epsilon * min(C1, C2)/C1 * (T2in - T1in);
+
+ Q = C1 * (T1out - T1in);
+
+ T2out = T2in - Q/C2;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Polygon(
+ points={{-80,80},{-80,-80},{80,80},{-80,80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={255,85,85},
+ fillPattern=FillPattern.Solid), Polygon(
+ points={{-80,-80},{80,-80},{80,80},{-80,-80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={85,170,255},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-80,80},{80,-80}},
+ lineColor={0,0,0},
+ textString="%flowType%")}), Diagram(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+Simple heat exchanger modell based on calculation of the characteristic value for counter current flow, co current flow and cross flow arrangement (Wetter1999).
+Level of Development
+
+Concept
+Note that the initial values (index 0) will determin the characteristic of the heat exchanger. Think of the initial values as the design point (working point) of the heat exchanger. Changes from this working point will result in a change of heat exchanger efficiency (it's characteristic). Therefore, you need no geometrical data for this heat exchanger model, just give the condions in a working point you know - all other operating points can be calculated from there.
+
The (U*A)_avg value will be output. It is an assumption that the (UA)_wall value is much smaller than the coefficient of heat transfer on either side of the heat exchanger wall. Therefore, (UA)_wall will not be used in the calaculation of (UA)_avg. Also, heat storage inside the heat exchanger is not considered in this model.
+Example Results
+AixLib.HVAC.HeatExchanger.Examples.NoMedium
+
References
+
+[Wetter1999] |
+Wetter, M.: Simulation Model -- Air-to-Air Plate Heat Exchanger, Techreport, Ernest Orlando Lawrence Berkeley National Laboratory, Berkeley, CA (US), 1999, URL: http://simulationresearch.lbl.gov/dirpubs/42354.pdf |
+
+
+[Jurges1924] |
+Jurges, W.: Gesundheitsingenieur, Nr. 19. (1) 1924 |
+
+
+[McAdams1954] |
+McAdams, W. H.: Heat Transmission, 3rd ed., McGraw-Hill, New York 1954 |
+
+
+", revisions="
+02.01.2014, Peter Matthes
+
+"), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics));
+ end RecuperatorNoMedium;
+
+ partial model RecuperatorNoMediumVarcp
+ "recuperator model with selectable flow arrangement and variable cp for integration with media model."
+
+ parameter Integer flowType = 3 "Flow type" annotation (choices( choice = 1 "counter", choice = 2 "co", choice = 3 "cross", radioButtons = true));
+
+ parameter Modelica.SIunits.Temperature T1in0 = 273.15 + 5
+ "Medium 1 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T1out0 = 295.495
+ "Medium 1 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T2in0 = 273.15 + 26
+ "Medium 2 inlet temperature at design point";
+ parameter Modelica.SIunits.Temperature T2out0 = 282.0586
+ "Medium 2 inlet temperature at design point";
+ parameter Modelica.SIunits.MassFlowRate m_flow10 = 0.079866
+ "mass flow rate at design point";
+ parameter Modelica.SIunits.MassFlowRate m_flow20 = 0.079883
+ "mass flow rate at design point";
+ final parameter Modelica.SIunits.ThermalConductance C10 = m_flow10*1011
+ "Heat capacity flow rate of medium 1 at design point";
+ final parameter Modelica.SIunits.ThermalConductance C20 = m_flow20*1011
+ "Heat capacity flow rate of medium 2 at design point";
+
+ final parameter Real epsilon0 = C10/min(C10,C20)*(T1out0 - T1in0)/(T2in0 - T1in0)
+ "Heat exchanger characterisic in design point";
+ final parameter Real Z0 = min(C10, C20) / max(C10, C20)
+ "heat capacity flow ratio";
+
+ parameter Real expo = 0.78
+ "exponent. h = 7.2 * v^0.78 [W/(m2.K)]. 5 <= v <= 30 m/s. See Jurges 1924.";
+ final parameter Real r = (m_flow10 * (T1in0+T1out0)/2 / (m_flow20 * (T2in0+T2out0)/2)) ^expo
+ "(hA)10/(hA)20 ";
+
+ Real NTU0(start=4.57158) "Number of transfer units at design point";
+ discrete Modelica.SIunits.ThermalConductance UA0
+ "U * A value at design condition";
+
+ Real NTU(nominal=4.57158) "Number of transfer units";
+ Real epsilon(nominal=epsilon0, start=epsilon0)
+ "Heat exchanger characteristic";
+ Real Z "Ratio of heat capacity flow rates";
+ Modelica.SIunits.Power Q "transfered thermal power";
+
+ Modelica.SIunits.ThermalConductance UA "U * A value";
+ Modelica.SIunits.ThermalConductance C1
+ "Heat capacity flow rate of medium 1";
+ Modelica.SIunits.ThermalConductance C2
+ "Heat capacity flow rate of medium 2";
+
+ Modelica.SIunits.Temperature T1in(nominal=T1in0) "standard: colder medium";
+ Modelica.SIunits.Temperature T1out(nominal=T1out0);
+ Modelica.SIunits.Temperature T2in(nominal=T2in0) "standard: warmer medium";
+ Modelica.SIunits.Temperature T2out(nominal=T2out0);
+ Modelica.SIunits.MassFlowRate m1in(nominal=m_flow10);
+ Modelica.SIunits.MassFlowRate m2in(nominal=m_flow20);
+
+ Modelica.SIunits.SpecificHeatCapacity cp1(min=900, max=1300, start=1011, nominal=1011)
+ "Specific heat capacity of medium 1. Will be provided by media model";
+ Modelica.SIunits.SpecificHeatCapacity cp2(min=900, max=1300, start=1011, nominal=1011)
+ "Specific heat capacity of medium 2. Will be provided by media model";
+
+ equation
+ when initial() then
+ UA0 = NTU0*min(C10, C20);
+ end when;
+
+ if flowType == 1 then
+ NTU0 = if abs(1 - Z0) < Modelica.Constants.eps then epsilon0/(1 - epsilon0) else 1/(
+ Z0-1)*log((1 - epsilon0)/(1 - epsilon0*Z0)) "counter-current flow";
+ elseif flowType == 2 then
+ NTU0 = -(log(-epsilon0 - epsilon0*Z0 + 1)/(Z0 + 1)) "co-current flow";
+ else
+ exp((exp(-NTU0^0.78*Z0) - 1)/(Z0*NTU0^(-0.22))) = 1 - epsilon0
+ "cross flow (no explicit formula available)";
+ end if;
+
+ UA = UA0 * (1+r) / ( (m_flow10 * T1in0 / abs(m1in * T1in)) ^expo + r*(m_flow20 * T2in0 / abs(m2in * T2in))^expo);
+ C1 = m1in*cp1;
+ C2 = m2in*cp2;
+ Z = min(C1, C2) / max(C1, C2);
+
+ NTU = UA / min(C1, C2);
+
+ if flowType == 1 then
+ epsilon = if abs(1-Z) < Modelica.Constants.eps then 1 / (1 + 1/NTU) else (1 - exp(-NTU * (1-Z)))/(1 - Z * exp(-NTU * (1-Z)))
+ "counter-current flow";
+ elseif flowType == 2 then
+ epsilon = (1 - exp(-NTU * (1+Z)))/(1 + Z) "co-current flow";
+ else
+ epsilon = 1 - exp((exp(-NTU * Z * NTU^(-0.22)) - 1) / (Z * NTU^(-0.22)))
+ "cross flow";
+ end if;
+
+ T1out = T1in + epsilon * min(C1, C2)/C1 * (T2in - T1in);
+
+ Q = C1 * (T1out - T1in);
+
+ T2out = T2in - Q/C2;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Polygon(
+ points={{-80,80},{-80,-80},{80,80},{-80,80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={255,85,85},
+ fillPattern=FillPattern.Solid), Polygon(
+ points={{-80,-80},{80,-80},{80,80},{-80,-80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={85,170,255},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-80,80},{80,-80}},
+ lineColor={0,0,0},
+ textString="%flowType%")}), Diagram(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+This model will be used as computational core of the heat exchanger model with a medium model. The difference to RecuperatorNoMedium is that the specific heat capacities are variable here and the input and output connectors have been replaced by normal variables with the correct unit.
+Level of Development
+
+Concept
+The design point has been increased to a larger mass flow rate.
+
References
+
+[Wetter1999] |
+Wetter, M.: Simulation Model -- Air-to-Air Plate Heat Exchanger, Techreport, Ernest Orlando Lawrence Berkeley National Laboratory, Berkeley, CA (US), 1999, URL: http://simulationresearch.lbl.gov/dirpubs/42354.pdf |
+
+
+[Jurges1924] |
+Jurges, W.: Gesundheitsingenieur, Nr. 19. (1) 1924 |
+
+
+[McAdams1954] |
+McAdams, W. H.: Heat Transmission, 3rd ed., McGraw-Hill, New York 1954 |
+
+
+", revisions="
+10.01.2014, Peter Matthes
+
+"), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics));
+ end RecuperatorNoMediumVarcp;
+
+ model Recuperator "recuperator model with selectable flow arrangement"
+ extends Interfaces.FourPortMoistAir;
+ outer BaseParameters baseParameters "System properties";
+
+ // Pressure loss
+ parameter Modelica.SIunits.Area Aflow[2] = {0.193 * 0.300/2, 0.193 * 0.300/2}
+ "flow area for media";
+ parameter Real zeta[2](each min=0)={2*130/1.225/(400/3600/Aflow[1])^2, 2*130/1.225/(400/3600/Aflow[2])^2}
+ "pressure loss coefficients";
+
+ extends RecuperatorNoMediumVarcp;
+
+ Volume.VolumeMoistAir volume1(useTstart=false, V=1e-4)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-40,0})));
+ Sensors.PropertySensorMoistAir sensor1
+ annotation (Placement(transformation(extent={{-84,50},{-64,70}})));
+ Sensors.PropertySensorMoistAir sensor2
+ annotation (Placement(transformation(extent={{84,-70},{64,-50}})));
+ Volume.VolumeMoistAir volume2(useTstart=false, V=1e-4)
+ annotation (Placement(transformation(extent={{10,10},{-10,-10}},
+ rotation=270,
+ origin={40,0})));
+ BaseClasses.SimpleHeatTransfer simpleHeatTransfer annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={0,0})));
+ Ductwork.PressureLoss pressureLoss1(D=2*sqrt(Aflow[1]/Modelica.Constants.pi),
+ zeta=zeta[1]) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-40,40})));
+ Ductwork.PressureLoss pressureLoss2(D=2*sqrt(Aflow[2]/Modelica.Constants.pi),
+ zeta=zeta[2]) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={40,-40})));
+ Sensors.PropertySensorMoistAir sensor3
+ annotation (Placement(transformation(extent={{60,50},{80,70}})));
+ equation
+ m1in = port_1a.m_flow "reverse flow not handled yet";
+ m2in = port_2a.m_flow;
+
+ T1in = sensor1.Temperature "medium temperature";
+ T2in = sensor2.Temperature "medium temperature";
+ // T2out = sensor3.Temperature;
+
+ cp1 = baseParameters.cp_Air "constant property";
+ cp2 = baseParameters.cp_Air;
+
+ simpleHeatTransfer.Q = Q;
+
+ connect(port_1a, sensor1.portMoistAir_a) annotation (Line(
+ points={{-100,60},{-84,60}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(port_2a, sensor2.portMoistAir_a) annotation (Line(
+ points={{100,-60},{84,-60}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume1.portMoistAir_b, port_1b) annotation (Line(
+ points={{-40,-10},{-40,-60},{-100,-60}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sensor1.portMoistAir_b, pressureLoss1.portMoistAir_a)
+ annotation (Line(
+ points={{-64,60},{-40,60},{-40,50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss1.portMoistAir_b, volume1.portMoistAir_a)
+ annotation (Line(
+ points={{-40,30},{-40,10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sensor2.portMoistAir_b,pressureLoss2. portMoistAir_a) annotation (
+ Line(
+ points={{64,-60},{40,-60},{40,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pressureLoss2.portMoistAir_b, volume2.portMoistAir_a) annotation (
+ Line(
+ points={{40,-30},{40,-10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume2.portMoistAir_b, sensor3.portMoistAir_a) annotation (Line(
+ points={{40,10},{40,60},{60,60}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sensor3.portMoistAir_b, port_2b) annotation (Line(
+ points={{80,60},{100,60}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume2.heatPort, simpleHeatTransfer.port_a) annotation (Line(
+ points={{30,0},{10,0}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(simpleHeatTransfer.port_b, volume1.heatPort) annotation (Line(
+ points={{-10,0},{-30,0}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Polygon(
+ points={{-80,80},{-80,-80},{80,80},{-80,80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={85,170,255},
+ fillPattern=FillPattern.Solid), Polygon(
+ points={{-80,-80},{80,-80},{80,80},{-80,-80}},
+ lineColor={175,175,175},
+ smooth=Smooth.None,
+ fillColor={255,85,85},
+ fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics),
+ Documentation(revisions="
+12.01.2014, Peter Matthes
+
+", info="
+Overview
+This model extends RecuperatorNoMediumVarcp as computational core (heat exchange model).
+Level of Development
+
+Concept
+The hydraulic components are taken from other packages to facilitate heat exchange (Volume.VolumeMoistAir), sensors for medium temperature (Sensors.PropertySensorMoistAir) and pressure loss (Ductwork.PressureLoss). The necessary inputs for the heat exchange model will be taken from the medium components. The heat transfer from one medium to the other will be calculated by the heat exchange model. The heat flow occurs through the HeatExchanger.BaseClasses.SimpleHeatTransfer model.
+References
+
+[Wetter1999] |
+Wetter, M.: Simulation Model -- Air-to-Air Plate Heat Exchanger, Techreport, Ernest Orlando Lawrence Berkeley National Laboratory, Berkeley, CA (US), 1999, URL: http://simulationresearch.lbl.gov/dirpubs/42354.pdf |
+
+
+[Jurges1924] |
+Jurges, W.: Gesundheitsingenieur, Nr. 19. (1) 1924 |
+
+
+[McAdams1954] |
+McAdams, W. H.: Heat Transmission, 3rd ed., McGraw-Hill, New York 1954 Example ResultsAixLib.HVAC.HeatExchanger.Examples.Medium |
+
+
+"));
+ end Recuperator;
+
+ package Examples "examples and tests of heat exchanger models"
+ extends Modelica.Icons.ExamplesPackage;
+ package NoMedium
+ "Testing without medium to check heat exchanger priciple first."
+ extends Modelica.Icons.ExamplesPackage;
+
+ model Test_RecuperatorNoMedium
+ extends Modelica.Icons.Example;
+ Modelica.Blocks.Sources.Ramp m1flow(
+ duration=1,
+ offset=1,
+ startTime=1.5,
+ height=-0.5)
+ annotation (Placement(transformation(extent={{-72,0},{-52,20}})));
+ Modelica.Blocks.Sources.Ramp m2flow(
+ duration=1,
+ offset=1,
+ startTime=1.5,
+ height=-0.9)
+ annotation (Placement(transformation(extent={{66,-20},{46,0}})));
+ Modelica.Blocks.Sources.Ramp T1in(
+ duration=1,
+ offset=273.15 + 5,
+ height=10) annotation (Placement(transformation(extent={{66,10},{46,30}})));
+ Modelica.Blocks.Sources.Ramp T2in(
+ height=0,
+ duration=1,
+ offset=273.15 + 26)
+ annotation (Placement(transformation(extent={{-72,-30},{-52,-10}})));
+ RecuperatorNoMedium recuperatorNoMedium1(flowType=1)
+ annotation (Placement(transformation(extent={{-10,50},{10,70}})));
+ RecuperatorNoMedium recuperatorNoMedium2(flowType=2)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ RecuperatorNoMedium recuperatorNoMedium3(
+ T1in0=273.15 + 5,
+ T1out0=273.15 + 22.123622,
+ T2in0=273.15 + 26,
+ m_flow10=0.3,
+ m_flow20=0.3,
+ NTU0(start=4.3815))
+ annotation (Placement(transformation(extent={{-10,-70},{10,-50}})));
+ equation
+ connect(m2flow.y, recuperatorNoMedium3.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,-56},{10,-56}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium3.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,-52},{10,-52}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium3.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-68},{-10,-68}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium3.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-64},{-10,-64}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium2.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-8},{-10,-8}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium2.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-4},{-10,-4}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium1.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,52},{-10,52}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium1.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,56},{-10,56}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium2.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,8},{10,8}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium2.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,4},{10,4}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium1.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,68},{10,68}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium1.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,64},{10,64}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Text(
+ extent={{30,-74},{98,-96}},
+ lineColor={135,135,135},
+ textString="1: counter-current flow
+2: co-current flow
+3: cross flow", horizontalAlignment=TextAlignment.Left)}),
+ experiment(StopTime=3),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Testing each flow arrangement.
+Take care of initial conditions! Parallel flow cannot have an efficiency above 0.5.
+"));
+ end Test_RecuperatorNoMedium;
+
+ model Test_RecuperatorNoMedium_temperatureSwitch
+ extends Modelica.Icons.Example;
+ Modelica.Blocks.Sources.Ramp m1flow(
+ duration=1,
+ offset=1,
+ startTime=1.5,
+ height=-0.5)
+ annotation (Placement(transformation(extent={{-72,0},{-52,20}})));
+ Modelica.Blocks.Sources.Ramp m2flow(
+ duration=1,
+ offset=1,
+ startTime=1.5,
+ height=-0.9)
+ annotation (Placement(transformation(extent={{66,-20},{46,0}})));
+ Modelica.Blocks.Sources.Ramp T1in(
+ duration=1,
+ offset=273.15 + 5,
+ height=10) annotation (Placement(transformation(extent={{66,10},{46,30}})));
+ Modelica.Blocks.Sources.Ramp T2in(
+ height=0,
+ duration=1,
+ offset=273.15 + 26)
+ annotation (Placement(transformation(extent={{-72,-30},{-52,-10}})));
+ RecuperatorNoMedium recuperatorNoMedium1(flowType=1)
+ annotation (Placement(transformation(extent={{-10,50},{10,70}})));
+ RecuperatorNoMedium recuperatorNoMedium2(flowType=3)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ RecuperatorNoMedium recuperatorNoMedium3
+ annotation (Placement(transformation(extent={{-10,-70},{10,-50}})));
+ equation
+ connect(m2flow.y, recuperatorNoMedium3.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,-56},{10,-56}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium3.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,-52},{10,-52}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium3.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-68},{-10,-68}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium3.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-64},{-10,-64}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium2.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-8},{-10,-8}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium2.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-4},{-10,-4}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium1.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,52},{-10,52}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m1flow.y, recuperatorNoMedium1.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,56},{-10,56}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium2.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,8},{10,8}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium2.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,4},{10,4}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium1.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,68},{10,68}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium1.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,64},{10,64}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Text(
+ extent={{30,-74},{98,-96}},
+ lineColor={135,135,135},
+ textString="1: counter-current flow
+2: co-current flow
+3: cross flow", horizontalAlignment=TextAlignment.Left)}),
+ experiment(StopTime=3),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Testing the heat exchanger models with changing temperature.
+
+- Increase of medium 1 temperature (T medium 2 stays constant)
+- Reduce mass flow rate of both media differently
+
+"));
+ end Test_RecuperatorNoMedium_temperatureSwitch;
+
+ model Test_RecuperatorNoMedium_crossflow
+ extends Modelica.Icons.Example;
+ Modelica.Blocks.Sources.Ramp m2flow(
+ duration=1,
+ startTime=1.5,
+ offset=recuperatorNoMedium3.m_flow20,
+ height=0.19306019 - 0.053254238)
+ annotation (Placement(transformation(extent={{-72,0},{-52,20}})));
+ Modelica.Blocks.Sources.Ramp m1flow(
+ duration=1,
+ startTime=1.5,
+ offset=recuperatorNoMedium3.m_flow10,
+ height=0.193011111 - 0.0532444444444444)
+ annotation (Placement(transformation(extent={{66,-20},{46,0}})));
+ Modelica.Blocks.Sources.Ramp T1in(
+ duration=1,
+ offset=recuperatorNoMedium3.T1in0,
+ height=0) annotation (Placement(transformation(extent={{66,10},{46,30}})));
+ Modelica.Blocks.Sources.Ramp T2in(
+ height=0,
+ duration=1,
+ offset=recuperatorNoMedium3.T2in0)
+ annotation (Placement(transformation(extent={{-72,-30},{-52,-10}})));
+ RecuperatorNoMedium recuperatorNoMedium3(
+ T1in0=273.15 + 5,
+ T2in0=273.15 + 26,
+ T1out0=273.15 + 22.76911287,
+ m_flow10=0.0532444444444444,
+ m_flow20=0.0532542382284563,
+ NTU0(start=5.280922181))
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Sources.Ramp T1out_ideal(
+ duration=1,
+ offset=22.76911287 + 273.15,
+ startTime=1.5,
+ height=21.44346553 - 22.76911287)
+ annotation (Placement(transformation(extent={{-10,-58},{10,-38}})));
+ Modelica.Blocks.Math.Add subtract(k2=-1)
+ annotation (Placement(transformation(extent={{22,-50},{32,-40}})));
+ Modelica.Blocks.Math.Division division
+ annotation (Placement(transformation(extent={{44,-50},{54,-40}})));
+ Modelica.Blocks.Sources.Ramp T2out_ideal(
+ duration=1,
+ offset=8.47730010108955 + 273.15,
+ startTime=1.5,
+ height=9.790807952 - 8.47730010108955)
+ annotation (Placement(transformation(extent={{10,40},{-10,60}})));
+ Modelica.Blocks.Math.Add subtract2(k1=-1)
+ annotation (Placement(transformation(extent={{-22,42},{-32,52}})));
+ Modelica.Blocks.Math.Division division2
+ annotation (Placement(transformation(extent={{-42,42},{-52,52}})));
+ equation
+ connect(m1flow.y, recuperatorNoMedium3.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,4},{10,4}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium3.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,8},{10,8}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium3.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-8},{-10,-8}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium3.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-4},{-10,-4}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T1out, subtract.u1) annotation (Line(
+ points={{10,-6},{16,-6},{16,-42},{21,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, subtract.u2) annotation (Line(
+ points={{11,-48},{21,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract.y, division.u1) annotation (Line(
+ points={{32.5,-45},{37.25,-45},{37.25,-42},{43,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, division.u2) annotation (Line(
+ points={{11,-48},{16,-48},{16,-56},{38,-56},{38,-48},{43,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, subtract2.u1) annotation (Line(
+ points={{-11,50},{-21,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T2out, subtract2.u2) annotation (Line(
+ points={{-10,8},{-16,8},{-16,44},{-21,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, division2.u2) annotation (Line(
+ points={{-11,50},{-16,50},{-16,60},{-36,60},{-36,44},{-41,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract2.y, division2.u1) annotation (Line(
+ points={{-32.5,47},{-38.25,47},{-38.25,50},{-41,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Text(
+ extent={{30,-74},{98,-96}},
+ lineColor={135,135,135},
+ textString="1: counter-current flow
+2: co-current flow
+3: cross flow", horizontalAlignment=TextAlignment.Left)}),
+ experiment(StopTime=3),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Testing cross flow charakteristic (no explicit formua available). Provide means to compare with manufacturer data. Manufacturer data is stored in files in the Examples package. You can also switch to co-current flow and observe the differences.
+"));
+ end Test_RecuperatorNoMedium_crossflow;
+
+ model Test_RecuperatorNoMedium_counterflow_switchTemperature
+ extends Modelica.Icons.Example;
+ Modelica.Blocks.Sources.Ramp m2flow(
+ duration=1,
+ startTime=1.5,
+ offset=recuperatorNoMedium3.m_flow20,
+ height=0)
+ annotation (Placement(transformation(extent={{-72,0},{-52,20}})));
+ Modelica.Blocks.Sources.Ramp m1flow(
+ duration=1,
+ offset=recuperatorNoMedium3.m_flow10,
+ startTime=0,
+ height=0)
+ annotation (Placement(transformation(extent={{66,-20},{46,0}})));
+ Modelica.Blocks.Sources.Ramp T1in(
+ duration=1,
+ offset=recuperatorNoMedium3.T1in0,
+ height=recuperatorNoMedium3.T2in0 - recuperatorNoMedium3.T1in0,
+ startTime=0.5)
+ annotation (Placement(transformation(extent={{66,10},{46,30}})));
+ Modelica.Blocks.Sources.Ramp T2in(
+ duration=1,
+ offset=recuperatorNoMedium3.T2in0,
+ height=recuperatorNoMedium3.T1in0 - recuperatorNoMedium3.T2in0,
+ startTime=2)
+ annotation (Placement(transformation(extent={{-72,-30},{-52,-10}})));
+ RecuperatorNoMedium recuperatorNoMedium3(
+ T1in0=273.15 + 5,
+ T2in0=273.15 + 26,
+ T1out0=273.15 + 22.76911287,
+ m_flow10=0.0532444444444444,
+ m_flow20=0.0532542382284563,
+ NTU0(start=5.280922181),
+ expo=0.55,
+ flowType=3)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Sources.Ramp T1out_ideal(
+ duration=1,
+ offset=22.76911287 + 273.15,
+ startTime=1.5,
+ height=21.44346553 - 22.76911287)
+ annotation (Placement(transformation(extent={{-10,-58},{10,-38}})));
+ Modelica.Blocks.Math.Add subtract(k2=-1)
+ annotation (Placement(transformation(extent={{22,-50},{32,-40}})));
+ Modelica.Blocks.Math.Division division
+ annotation (Placement(transformation(extent={{44,-50},{54,-40}})));
+ Modelica.Blocks.Sources.Ramp T2out_ideal(
+ duration=1,
+ offset=8.47730010108955 + 273.15,
+ startTime=1.5,
+ height=9.790807952 - 8.47730010108955)
+ annotation (Placement(transformation(extent={{10,40},{-10,60}})));
+ Modelica.Blocks.Math.Add subtract2(k1=-1)
+ annotation (Placement(transformation(extent={{-22,42},{-32,52}})));
+ Modelica.Blocks.Math.Division division2
+ annotation (Placement(transformation(extent={{-42,42},{-52,52}})));
+ equation
+ connect(m1flow.y, recuperatorNoMedium3.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,4},{10,4}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium3.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,8},{10,8}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium3.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-8},{-10,-8}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium3.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-4},{-10,-4}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T1out, subtract.u1) annotation (Line(
+ points={{10,-6},{16,-6},{16,-42},{21,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, subtract.u2) annotation (Line(
+ points={{11,-48},{21,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract.y, division.u1) annotation (Line(
+ points={{32.5,-45},{37.25,-45},{37.25,-42},{43,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, division.u2) annotation (Line(
+ points={{11,-48},{16,-48},{16,-56},{38,-56},{38,-48},{43,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, subtract2.u1) annotation (Line(
+ points={{-11,50},{-21,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T2out, subtract2.u2) annotation (Line(
+ points={{-10,8},{-16,8},{-16,44},{-21,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, division2.u2) annotation (Line(
+ points={{-11,50},{-16,50},{-16,60},{-36,60},{-36,44},{-41,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract2.y, division2.u1) annotation (Line(
+ points={{-32.5,47},{-38.25,47},{-38.25,50},{-41,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Text(
+ extent={{30,-74},{98,-96}},
+ lineColor={135,135,135},
+ textString="1: counter-current flow
+2: co-current flow
+3: cross flow", horizontalAlignment=TextAlignment.Left)}),
+ experiment(StopTime=3.5),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Test the model with the extreme case of temperature difference between the media becomes zero. This kind of test is important for dynamic simulations to understand how the model can be used or improved. No temeprature difference seems to be no problem for the model (in contrast to the case where the mass flow rate will go to zero).
+"));
+ end Test_RecuperatorNoMedium_counterflow_switchTemperature;
+
+ model Test_RecuperatorNoMedium_counterflow_stopMassFlow
+ "Switching is too complicated to take care of for now and practically not needed. So we use the case of stopping the mass flow."
+ extends Modelica.Icons.Example;
+ Modelica.Blocks.Sources.Ramp m2flow(
+ duration=1,
+ startTime=1.5,
+ offset=recuperatorNoMedium3.m_flow20,
+ height=-recuperatorNoMedium3.m_flow20)
+ annotation (Placement(transformation(extent={{-72,0},{-52,20}})));
+ Modelica.Blocks.Sources.Ramp m1flow(
+ duration=1,
+ offset=recuperatorNoMedium3.m_flow10,
+ startTime=0,
+ height=-recuperatorNoMedium3.m_flow10)
+ annotation (Placement(transformation(extent={{66,-20},{46,0}})));
+ Modelica.Blocks.Sources.Ramp T1in(
+ duration=1,
+ offset=recuperatorNoMedium3.T1in0,
+ startTime=0.5,
+ height=0) annotation (Placement(transformation(extent={{66,10},{46,30}})));
+ Modelica.Blocks.Sources.Ramp T2in(
+ duration=1,
+ offset=recuperatorNoMedium3.T2in0,
+ startTime=2,
+ height=0)
+ annotation (Placement(transformation(extent={{-72,-30},{-52,-10}})));
+ RecuperatorNoMedium recuperatorNoMedium3(
+ T1in0=273.15 + 5,
+ T2in0=273.15 + 26,
+ T1out0=273.15 + 22.76911287,
+ m_flow10=0.0532444444444444,
+ m_flow20=0.0532542382284563,
+ NTU0(start=5.280922181),
+ expo=0.55,
+ flowType=3)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Sources.Ramp T1out_ideal(
+ duration=1,
+ offset=22.76911287 + 273.15,
+ startTime=1.5,
+ height=21.44346553 - 22.76911287)
+ annotation (Placement(transformation(extent={{-10,-58},{10,-38}})));
+ Modelica.Blocks.Math.Add subtract(k2=-1)
+ annotation (Placement(transformation(extent={{22,-50},{32,-40}})));
+ Modelica.Blocks.Math.Division division
+ annotation (Placement(transformation(extent={{44,-50},{54,-40}})));
+ Modelica.Blocks.Sources.Ramp T2out_ideal(
+ duration=1,
+ offset=8.47730010108955 + 273.15,
+ startTime=1.5,
+ height=9.790807952 - 8.47730010108955)
+ annotation (Placement(transformation(extent={{10,40},{-10,60}})));
+ Modelica.Blocks.Math.Add subtract2(k1=-1)
+ annotation (Placement(transformation(extent={{-22,42},{-32,52}})));
+ Modelica.Blocks.Math.Division division2
+ annotation (Placement(transformation(extent={{-42,42},{-52,52}})));
+ equation
+ connect(m1flow.y, recuperatorNoMedium3.m1in) annotation (Line(
+ points={{45,-10},{26,-10},{26,4},{10,4}},
+ color={128,0,255},
+ smooth=Smooth.None));
+ connect(T1in.y, recuperatorNoMedium3.T1in) annotation (Line(
+ points={{45,20},{28,20},{28,8},{10,8}},
+ color={0,127,0},
+ smooth=Smooth.None));
+ connect(T2in.y, recuperatorNoMedium3.T2in) annotation (Line(
+ points={{-51,-20},{-30,-20},{-30,-8},{-10,-8}},
+ color={255,85,85},
+ smooth=Smooth.None));
+ connect(m2flow.y, recuperatorNoMedium3.m2in) annotation (Line(
+ points={{-51,10},{-32,10},{-32,-4},{-10,-4}},
+ color={0,128,255},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T1out, subtract.u1) annotation (Line(
+ points={{10,-6},{16,-6},{16,-42},{21,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, subtract.u2) annotation (Line(
+ points={{11,-48},{21,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract.y, division.u1) annotation (Line(
+ points={{32.5,-45},{37.25,-45},{37.25,-42},{43,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T1out_ideal.y, division.u2) annotation (Line(
+ points={{11,-48},{16,-48},{16,-56},{38,-56},{38,-48},{43,-48}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, subtract2.u1) annotation (Line(
+ points={{-11,50},{-21,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(recuperatorNoMedium3.T2out, subtract2.u2) annotation (Line(
+ points={{-10,8},{-16,8},{-16,44},{-21,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T2out_ideal.y, division2.u2) annotation (Line(
+ points={{-11,50},{-16,50},{-16,60},{-36,60},{-36,44},{-41,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(subtract2.y, division2.u1) annotation (Line(
+ points={{-32.5,47},{-38.25,47},{-38.25,50},{-41,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Text(
+ extent={{30,-74},{98,-96}},
+ lineColor={135,135,135},
+ textString="1: counter-current flow
+2: co-current flow
+3: cross flow", horizontalAlignment=TextAlignment.Left)}),
+ experiment(StopTime=3.5),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Going to zero with mass flow will lead to singularities in several equations and therefore, the solver will fail at a specific point. To overcome this problem the equations must be switched to non-singular representations at a specific condition or formulated in a different way for the whole range. For the time being the valid variable range (for mass flow rate for example) can be limited to a lower value above zero. In a more advanced model the flow direction of both media streams should be taken care of automatically.
+"));
+ end Test_RecuperatorNoMedium_counterflow_stopMassFlow;
+ end NoMedium;
+
+ package Medium
+ extends Modelica.Icons.ExamplesPackage;
+ model SingleHX_mflow
+ "Testing single HX model changing the mass flow rate"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX Medium1out(
+ use_p_in=false,
+ X=0,
+ p=101325) annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-60,-20})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium1in(
+ m=0.075,
+ X=0,
+ use_m_in=true,
+ h=5.03e3)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-60,20})));
+ Anlagensimulation_WS1314.HeatExchanger.Recuperator HX(flowType=1)
+ annotation (Placement(transformation(extent={{-20,-20},{20,20}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium2in(
+ m=0.075,
+ X=0,
+ use_m_in=true,
+ h=26.13e3)
+ annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=0,
+ origin={62,-20})));
+ Sources.BoundaryMoistAir_phX Medium2out(
+ use_p_in=false,
+ X=0,
+ p=101325) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={60,20})));
+ Modelica.Blocks.Sources.Ramp mflow(
+ duration=1,
+ startTime=1,
+ height=0.01 - HX.m_flow10,
+ offset=HX.m_flow10)
+ annotation (Placement(transformation(extent={{-100,40},{-80,60}})));
+ equation
+
+ connect(Medium2in.portMoistAir_a, HX.port_2a) annotation (Line(
+ points={{52,-20},{36,-20},{36,-12},{20,-12}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_2b, Medium2out.portMoistAir_a) annotation (Line(
+ points={{20,12},{36,12},{36,20},{50,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Medium1in.portMoistAir_a, HX.port_1a) annotation (Line(
+ points={{-50,20},{-36,20},{-36,12},{-20,12}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_1b, Medium1out.portMoistAir_a) annotation (Line(
+ points={{-20,-12},{-36,-12},{-36,-20},{-50,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(mflow.y, Medium1in.m_in) annotation (Line(
+ points={{-79,50},{-72,50},{-72,28}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(mflow.y, Medium2in.m_in) annotation (Line(
+ points={{-79,50},{74,50},{74,-12}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example of an heat exchanger with varying mass flow rate of both media.
+", revisions="
+12.01.2014, Peter Matthes
+
+"),experiment(StopTime=3),
+ __Dymola_experimentSetupOutput);
+ end SingleHX_mflow;
+
+ model SingleHX_Temperature "Changing outdoor air temperature"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX Medium1out(
+ use_p_in=false,
+ X=0,
+ p=101325) annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-60,-20})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium1in(
+ X=0,
+ h=5.03e3,
+ m=0.07987,
+ use_m_in=false,
+ use_h_in=true)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-60,20})));
+ Anlagensimulation_WS1314.HeatExchanger.Recuperator HX(flowType=1)
+ annotation (Placement(transformation(extent={{-20,-20},{20,20}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium2in(
+ X=0,
+ h=26.13e3,
+ use_m_in=false,
+ m=0.07987)
+ annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=0,
+ origin={62,-20})));
+ Sources.BoundaryMoistAir_phX Medium2out(
+ use_p_in=false,
+ X=0,
+ p=101325) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={60,20})));
+ Modelica.Blocks.Sources.Ramp Toda(
+ duration=1,
+ startTime=1,
+ height=20e3,
+ offset=5.03e3) "outdoor air temperature"
+ annotation (Placement(transformation(extent={{-100,40},{-80,60}})));
+ equation
+
+ connect(Medium2in.portMoistAir_a, HX.port_2a) annotation (Line(
+ points={{52,-20},{36,-20},{36,-12},{20,-12}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_2b, Medium2out.portMoistAir_a) annotation (Line(
+ points={{20,12},{36,12},{36,20},{50,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Medium1in.portMoistAir_a, HX.port_1a) annotation (Line(
+ points={{-50,20},{-36,20},{-36,12},{-20,12}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_1b, Medium1out.portMoistAir_a) annotation (Line(
+ points={{-20,-12},{-36,-12},{-36,-20},{-50,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Toda.y, Medium1in.h_in) annotation (Line(
+ points={{-79,50},{-76,50},{-76,20},{-72,20}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example of an heat exchanger with varying temperature of the cold medium.
+", revisions="
+12.01.2014, Peter Matthes
+
+"),experiment(StopTime=3),
+ __Dymola_experimentSetupOutput);
+ end SingleHX_Temperature;
+
+ model DoubleHX_mflow
+ "Testing double HX configuration and changing the mass flow rate"
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ Sources.BoundaryMoistAir_phX Medium1out(
+ use_p_in=false,
+ X=0,
+ p=101325,
+ h=25e3) annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-60,-40})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium1in(
+ m=0.075,
+ X=0,
+ use_m_in=true,
+ h=5.03e3)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-60,20})));
+ Anlagensimulation_WS1314.HeatExchanger.Recuperator HX(flowType=1,
+ pressureLoss1(dp(start=40)),
+ pressureLoss2(dp(start=40)),
+ port_2a(m_flow(start=0.079866)),
+ volume1(T(start=273.15 + 15), T0=273.15 + 15))
+ annotation (Placement(transformation(extent={{-16,-4},{16,26}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX Medium2in(
+ m=0.075,
+ X=0,
+ use_m_in=true,
+ h=26.13e3)
+ annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=0,
+ origin={60,-40})));
+ Sources.BoundaryMoistAir_phX Medium2out(
+ use_p_in=false,
+ X=0,
+ p=101325,
+ h=6e3) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={60,20})));
+ Modelica.Blocks.Sources.Ramp mflow(
+ duration=1,
+ startTime=1,
+ height=0.01 - HX.m_flow10,
+ offset=HX.m_flow10)
+ annotation (Placement(transformation(extent={{-100,40},{-80,60}})));
+ Anlagensimulation_WS1314.HeatExchanger.Recuperator HX1(
+ flowType=1,
+ pressureLoss1(dp(start=40)),
+ pressureLoss2(dp(start=40)),
+ port_1a(m_flow(start=0.079866)),
+ volume2(T(start=273.15 + 16), T0=273.15 + 16))
+ annotation (Placement(transformation(extent={{-16,-46},{16,-16}})));
+ equation
+
+ connect(Medium1in.portMoistAir_a, HX.port_1a) annotation (Line(
+ points={{-50,20},{-16,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(mflow.y, Medium1in.m_in) annotation (Line(
+ points={{-79,50},{-72,50},{-72,28}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(mflow.y, Medium2in.m_in) annotation (Line(
+ points={{-79,50},{72,50},{72,-32}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Medium2in.portMoistAir_a, HX1.port_2a) annotation (Line(
+ points={{50,-40},{16,-40}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_2b, Medium2out.portMoistAir_a) annotation (Line(
+ points={{16,20},{50,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX1.port_1b, Medium1out.portMoistAir_a) annotation (Line(
+ points={{-16,-40},{-50,-40}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX1.port_2b, HX.port_2a) annotation (Line(
+ points={{16,-22},{24,-22},{24,2},{16,2}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_1b, HX1.port_1a) annotation (Line(
+ points={{-16,2},{-24,2},{-24,-22},{-16,-22}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example of two coupled heat exchangers with varying mass flow rate of both media.
+", revisions="
+12.01.2014, Peter Matthes
+
+"),experiment(StopTime=3),
+ __Dymola_experimentSetupOutput);
+ end DoubleHX_mflow;
+
+ model SingleHX_room
+ "heat recovery in simple ventilation system with internal room sources."
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters
+ annotation (Placement(transformation(extent={{60,66},{80,86}})));
+ Anlagensimulation_WS1314.HeatExchanger.Recuperator HX(flowType=1)
+ annotation (Placement(transformation(extent={{-20,-20},{20,20}},
+ rotation=90,
+ origin={-10,0})));
+ Sources.BoundaryMoistAir_phX Medium2out(
+ use_p_in=false,
+ X=0,
+ p=101325) annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-50,20})));
+ Modelica.Blocks.Sources.Ramp Toda(
+ duration=1,
+ startTime=1,
+ height=20e3,
+ offset=5.03e3) "outdoor air temperature"
+ annotation (Placement(transformation(extent={{-90,-30},{-70,-10}})));
+ Anlagensimulation_WS1314.Volume.VolumeMoistAir volumeMoistAir(V=0.0001)
+ annotation (Placement(transformation(
+ extent={{-10,10},{10,-10}},
+ rotation=90,
+ origin={30,0})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX
+ Medium2out1(
+ X=0,
+ use_h_in=true,
+ m=0.07987) annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-50,-20})));
+ Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow(Q_flow=500,
+ T_ref=baseParameters.T_ref)
+ annotation (Placement(transformation(extent={{68,-10},{48,10}})));
+ equation
+
+ connect(HX.port_1b, volumeMoistAir.portMoistAir_a) annotation (Line(
+ points={{2,-20},{30,-20},{30,-10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir.portMoistAir_b, HX.port_2a) annotation (Line(
+ points={{30,10},{30,20},{2,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HX.port_2b, Medium2out.portMoistAir_a) annotation (Line(
+ points={{-22,20},{-40,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Toda.y, Medium2out1.h_in) annotation (Line(
+ points={{-69,-20},{-62,-20}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(fixedHeatFlow.port, volumeMoistAir.heatPort) annotation (Line(
+ points={{48,0},{40,0}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(Medium2out1.portMoistAir_a, HX.port_1a) annotation (Line(
+ points={{-40,-20},{-22,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+A small example of an heat exchanger in combination with a room model with a heat load (ventilation system with heat recovery). The outdoor air temperature will be varied.
+", revisions="
+03.02.2014, Peter Matthes
+
+"),experiment(StopTime=3),
+ __Dymola_experimentSetupOutput);
+ end SingleHX_room;
+ end Medium;
+ end Examples;
+
+ package BaseClasses
+ extends Modelica.Icons.BasesPackage;
+
+ model SimpleHeatTransfer "Just passing heat flow through"
+
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a
+ annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b
+ annotation (Placement(transformation(extent={{-10,90},{10,110}})));
+ Modelica.Blocks.Interfaces.RealInput Q "Heat flow from port a to port b"
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}})));
+
+ equation
+ port_a.Q_flow = Q;
+ port_b.Q_flow = -Q;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Line(
+ points={{0,-60},{0,60}},
+ color={0,0,255},
+ smooth=Smooth.None), Line(
+ points={{-20,40},{0,60},{20,40}},
+ color={0,0,255},
+ smooth=Smooth.None)}), Documentation(revisions="
+12.01.2014, Peter Matthes
+
+", info="
+Overview
+Model transfers a given power from one thermal port to a second.
+"));
+ end SimpleHeatTransfer;
+ end BaseClasses;
+end HeatExchanger;
diff --git a/AixLib/HVAC/HeatGeneration.mo b/AixLib/HVAC/HeatGeneration.mo
new file mode 100644
index 0000000000..c4ec61f10c
--- /dev/null
+++ b/AixLib/HVAC/HeatGeneration.mo
@@ -0,0 +1,1560 @@
+within AixLib.HVAC;
+package HeatGeneration "Contains models for heat generation equipment"
+ model Boiler "Model of a boiler for space heating"
+ import AixLib;
+
+ parameter AixLib.DataBase.Boiler.BoilerEfficiencyBaseDataDefinition
+ boilerEfficiencyB=AixLib.DataBase.Boiler.BoilerConst()
+ "boiler efficiency as a function of part-load factor"
+ annotation (choicesAllMatching=true);
+
+ parameter Modelica.SIunits.Power Q_flow_max = 20000
+ "Maximum heat output of boiler at full load";
+ parameter Modelica.SIunits.Volume Volume = 0.01
+ "Fluid volume inside the heat generation unit";
+
+ extends BaseClasses.PartialHeatGen(volume(V=Volume));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={0,50})));
+ Utilities.HeatDemand heatDemand
+ annotation (Placement(transformation(extent={{-64,60},{-44,80}})));
+ Utilities.FuelCounter fuelCounter
+ annotation (Placement(transformation(extent={{80,60},{100,80}})));
+ Modelica.Blocks.Nonlinear.Limiter limiter(uMax=Q_flow_max, uMin=0)
+ annotation (Placement(transformation(extent={{-30,60},{-10,80}})));
+ Utilities.BoilerEfficiency boilerEfficiency(
+ boilerEfficiencyBE=boilerEfficiencyB)
+ annotation (Placement(transformation(extent={{40,60},{60,80}})));
+ Modelica.Blocks.Interfaces.RealInput T_set
+ annotation (Placement(transformation(extent={{-128,50},{-88,90}})));
+ equation
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{0,40},{0,10}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(T_in.signal, heatDemand.T_in) annotation (Line(
+ points={{-70,10},{-70,38},{-60,38},{-60,60}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(massFlowSensor.signal, heatDemand.m_flow_in) annotation (Line(
+ points={{-40,10},{-40,30},{-52,30},{-52,60}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(heatDemand.Q_flow_out, limiter.u) annotation (Line(
+ points={{-43.4,70},{-32,70}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(limiter.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-9,70},{0,70},{0,60}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(limiter.y, boilerEfficiency.heatDemand) annotation (Line(
+ points={{-9,70},{40,70}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boilerEfficiency.fuelUse, fuelCounter.fuel_in) annotation (Line(
+ points={{60.6,70},{80,70}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(heatDemand.T_set, T_set) annotation (Line(
+ points={{-64,70},{-108,70}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(info="
+Overview
+
This basic boiler model calculates the heat demand in order to reach the fluid set temperature. The heat input to the fluid is limited between 0 and the maximum heat output of the boiler.
+Level of Development
+
+Concept
+The idea is to have a very simple heating mechanism, which heats the fluid to a given set temperature using any amount of heat flow between 0 and the boiler's maximum heat output. As the model should be able to answer interesting questions for the students, one important value is fuel consumption. Therefore the model calculates fuel consumption as the integral of heat intput to the fluid divided by the boiler efficiency. This efficiency part is replaceable and can be either a fixed value or a table with part load efficiencies.
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTConst
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTVar
+",
+ revisions="
+09.10.2013, Marcus Fuchs
+
+- included the unit's volume as a parameter
+
+07.10.2013, Marcus Fuchs
+
+"),
+ Icon(graphics={
+ Rectangle(
+ extent={{-40.5,74.5},{53.5,-57.5}},
+ lineColor={0,0,0},
+ fillPattern=FillPattern.VerticalCylinder,
+ fillColor={170,170,255}),
+ Polygon(
+ points={{-12.5,-19.5},{-20.5,-3.5},{1.5,40.5},{9.5,14.5},{31.5,18.5},
+ {21.5,-23.5},{3.5,-19.5},{-2.5,-19.5},{-12.5,-19.5}},
+ lineColor={0,0,0},
+ fillPattern=FillPattern.Sphere,
+ fillColor={255,127,0}),
+ Rectangle(
+ extent={{-20.5,-17.5},{33.5,-25.5}},
+ lineColor={0,0,0},
+ fillPattern=FillPattern.HorizontalCylinder,
+ fillColor={192,192,192}),
+ Polygon(
+ points={{-10.5,-17.5},{-0.5,2.5},{25.5,-17.5},{-0.5,-17.5},{-10.5,
+ -17.5}},
+ lineColor={255,255,170},
+ fillColor={255,255,170},
+ fillPattern=FillPattern.Solid)}));
+ end Boiler;
+ extends Modelica.Icons.Package;
+ model HeatPump
+
+ Interfaces.Port_a port_a_source
+ annotation (Placement(transformation(extent={{-100,60},{-80,80}})));
+ Interfaces.Port_b port_b_source
+ annotation (Placement(transformation(extent={{-100,-80},{-80,-60}})));
+ Interfaces.Port_a port_a_sink
+ annotation (Placement(transformation(extent={{80,-80},{100,-60}})));
+ Interfaces.Port_b port_b_sink
+ annotation (Placement(transformation(extent={{80,60},{100,80}})));
+ Volume.Volume volumeEvaporator(V=VolumeEvaporator)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-80,-50})));
+ Volume.Volume volumeCondenser(V=VolumeCondenser)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={80,-40})));
+ Sensors.TemperatureSensor temperatureSinkOut
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={80,50})));
+ Modelica.Blocks.Interfaces.BooleanInput OnOff annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={0,80})));
+ Sensors.TemperatureSensor temperatureSourceIn
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-80,36})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow HeatFlowCondenser
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={56,-40})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow HeatFlowEvaporator
+ annotation (Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=0,
+ origin={-56,-50})));
+ Modelica.Blocks.Tables.CombiTable2D PowerTable(table=tablePower)
+ annotation (Placement(transformation(extent={{-52,20},{-32,40}})));
+ Modelica.Blocks.Tables.CombiTable2D HeatFlowCondenserTable(table=
+ tableHeatFlowCondenser)
+ annotation (Placement(transformation(extent={{-52,-12},{-32,8}})));
+ Modelica.Blocks.Logical.Switch SwitchHeatFlowCondenser
+ annotation (Placement(transformation(extent={{14,-20},{34,0}})));
+ Modelica.Blocks.Sources.Constant constZero2(k=0)
+ annotation (Placement(transformation(extent={{-26,-28},{-6,-8}})));
+ Modelica.Blocks.Logical.Switch SwitchPower
+ annotation (Placement(transformation(extent={{14,12},{34,32}})));
+ Modelica.Blocks.Sources.Constant constZero1(k=0)
+ annotation (Placement(transformation(extent={{-26,4},{-6,24}})));
+ Modelica.Blocks.Math.Feedback feedbackHeatFlowEvaporator
+ annotation (Placement(transformation(extent={{10,-60},{-10,-40}})));
+ Modelica.Blocks.Interfaces.RealOutput Power
+ "Connector of Real output signal" annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={0,-90})));
+ parameter Modelica.SIunits.Volume VolumeEvaporator=0.01 "Volume im m3";
+ parameter Modelica.SIunits.Volume VolumeCondenser=0.01 "Volume im m3";
+ parameter Real tablePower[:,:]=fill(
+ 0.0,
+ 0,
+ 2)
+ "table matrix (grid u1 = first column, grid u2 = first row; e.g., table=[0,0;0,1])";
+ parameter Real tableHeatFlowCondenser[:,:]=fill(
+ 0.0,
+ 0,
+ 2)
+ "table matrix (grid u1 = first column, grid u2 = first row; e.g., table=[0,0;0,1])";
+ Modelica.Blocks.Math.Gain gain(k=-1)
+ annotation (Placement(transformation(extent={{-18,-60},{-38,-40}})));
+ equation
+ connect(temperatureSourceIn.port_b, volumeEvaporator.port_a)
+ annotation (
+ Line(
+ points={{-80,26},{-80,-40}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeEvaporator.port_b, port_b_source) annotation (Line(
+ points={{-80,-60},{-80,-70},{-90,-70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSourceIn.port_a, port_a_source)
+ annotation (Line(
+ points={{-80,46},{-80,70},{-90,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSinkOut.port_b, port_b_sink)
+ annotation (Line(
+ points={{80,60},{80,70},{90,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSinkOut.port_a, volumeCondenser.port_b)
+ annotation (
+ Line(
+ points={{80,40},{80,-30}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeCondenser.port_a, port_a_sink) annotation (Line(
+ points={{80,-50},{80,-70},{90,-70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(HeatFlowEvaporator.port, volumeEvaporator.heatPort) annotation (
+ Line(
+ points={{-66,-50},{-70,-50}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(HeatFlowCondenser.port, volumeCondenser.heatPort) annotation (
+ Line(
+ points={{66,-40},{70,-40}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(OnOff, SwitchHeatFlowCondenser.u2) annotation (Line(
+ points={{0,80},{0,-10},{12,-10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(HeatFlowCondenserTable.y, SwitchHeatFlowCondenser.u1) annotation (
+ Line(
+ points={{-31,-2},{12,-2}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(constZero2.y, SwitchHeatFlowCondenser.u3) annotation (Line(
+ points={{-5,-18},{12,-18}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(SwitchHeatFlowCondenser.y, HeatFlowCondenser.Q_flow) annotation (
+ Line(
+ points={{35,-10},{40,-10},{40,-40},{46,-40}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(constZero1.y, SwitchPower.u3) annotation (Line(
+ points={{-5,14},{12,14}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(SwitchPower.u2, SwitchHeatFlowCondenser.u2) annotation (Line(
+ points={{12,22},{0,22},{0,-10},{12,-10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(PowerTable.y, SwitchPower.u1) annotation (Line(
+ points={{-31,30},{12,30}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(SwitchPower.y, Power) annotation (Line(
+ points={{35,22},{38,22},{38,-70},{0,-70},{0,-90}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(SwitchPower.y, feedbackHeatFlowEvaporator.u2)
+ annotation (Line(
+ points={{35,22},{38,22},{38,-70},{0,-70},{0,-58}},
+ color={0,0,127},
+ smooth=Smooth.None));
+
+ connect(SwitchHeatFlowCondenser.y, feedbackHeatFlowEvaporator.u1)
+ annotation (Line(
+ points={{35,-10},{40,-10},{40,-50},{8,-50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(gain.y, HeatFlowEvaporator.Q_flow) annotation (Line(
+ points={{-39,-50},{-46,-50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(gain.u, feedbackHeatFlowEvaporator.y) annotation (Line(
+ points={{-16,-50},{-9,-50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperatureSourceIn.signal, PowerTable.u2) annotation (Line(
+ points={{-70,36},{-64,36},{-64,24},{-54,24}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperatureSourceIn.signal, HeatFlowCondenserTable.u2)
+ annotation (Line(
+ points={{-70,36},{-64,36},{-64,-8},{-54,-8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperatureSinkOut.signal, PowerTable.u1) annotation (Line(
+ points={{70,50},{-60,50},{-60,36},{-54,36}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperatureSinkOut.signal, HeatFlowCondenserTable.u1) annotation (
+ Line(
+ points={{70,50},{-60,50},{-60,4},{-54,4}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={
+ Rectangle(
+ extent={{-80,80},{80,-80}},
+ lineColor={0,0,255},
+ fillColor={249,249,249},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-80,80},{-60,-80}},
+ lineColor={0,0,255},
+ fillColor={170,213,255},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{60,80},{80,-80}},
+ lineColor={0,0,255},
+ fillColor={255,170,213},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-100,20},{100,-20}},
+ lineColor={0,0,255},
+ textString="%name")}),Documentation(info="
+Overview
+Simple model of an on/off-controlled heat pump. The refrigerant circuit is a black-box model represented by tables which calculate the electric power and heat flows of the condenser depending on the source and sink temperature.
+Level of Development
+
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.HeatPumpSystem
+AixLib.HVAC.HeatGeneration.Examples.HeatPumpSystem2
+",
+ revisions="
+25.11.2013, Kristian Huchtemann
+
+"));
+ end HeatPump;
+
+ model SolarThermal "Model of a solar thermal panel"
+ import AixLib;
+ extends BaseClasses.PartialHeatGen;
+
+ parameter Real A = 1 "Area of solar thermal collector in m2";
+
+ parameter AixLib.DataBase.SolarThermal.SolarThermalBaseDataDefinition
+ Collector=AixLib.DataBase.SolarThermal.SimpleAbsorber()
+ "Properties of Solar Thermal Collector"
+ annotation (choicesAllMatching=true);
+
+ Modelica.Blocks.Interfaces.RealInput T_air "Outdoor air temperature in K"
+ annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-60,108})));
+ Modelica.Blocks.Interfaces.RealInput Irradiation
+ "Solar irradiation on a horizontal plane in W/m2"
+ annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={10,108})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={0,34})));
+ Utilities.SolarThermalEfficiency solarThermalEfficiency(Collector=Collector)
+ annotation (Placement(transformation(extent={{-76,48},{-56,68}})));
+ Modelica.Blocks.Math.Max max1
+ annotation (Placement(transformation(extent={{-46,40},{-26,60}})));
+ Modelica.Blocks.Sources.Constant const(k=0)
+ annotation (Placement(transformation(extent={{-66,30},{-58,38}})));
+ Modelica.Blocks.Math.Gain gain(k=A)
+ annotation (Placement(transformation(extent={{-16,44},{-4,56}})));
+ equation
+ connect(T_in.signal, solarThermalEfficiency.T_col) annotation (Line(
+ points={{-70,10},{-70,26},{-71,26},{-71,47.4}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(T_air, solarThermalEfficiency.T_air) annotation (Line(
+ points={{-60,108},{-60,78},{-71,78},{-71,68.6}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(solarThermalEfficiency.G, Irradiation) annotation (Line(
+ points={{-65,68.6},{-65,74},{10,74},{10,108}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{0,24},{0,10}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(solarThermalEfficiency.Q_flow, max1.u1) annotation (Line(
+ points={{-55.2,58},{-52,58},{-52,56},{-48,56}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(const.y, max1.u2) annotation (Line(
+ points={{-57.6,34},{-54,34},{-54,44},{-48,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(max1.y, gain.u) annotation (Line(
+ points={{-25,50},{-17.2,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(gain.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-3.4,50},{0,50},{0,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(info="
+Overview
+
Model of a solar thermal collector. Inputs are outdoor air temperature and solar irradiation. Based on these values and the collector properties from database, this model creates a heat flow to the fluid circuit.
+Level of Development
+
+Concept
+The model maps solar collector efficiency based on the equation
+
+Known Limitations
+
+- Connected directly with Sources.TempAndRad, this model only represents a horizontal collector. There is no calculation for radiation on tilted surfaces.
+- With the standard BaseParameters, this model uses water as working fluid
+
+
Example Results
+AixLib.HVAC.HeatGeneration.Examples.SolarThermalCollector
+", revisions="
+19.11.2013, Marcus Fuchs: implemented
+"),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={
+ Rectangle(
+ extent={{-80,80},{88,-80}},
+ lineColor={255,128,0},
+ fillPattern=FillPattern.Solid,
+ fillColor={255,128,0}),
+ Rectangle(
+ extent={{-70,70},{-64,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-70,70},{-40,64}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-40,70},{-46,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-44,-72},{-22,-66}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-4,-72},{22,-66}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{2,70},{-4,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-24,70},{2,64}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-24,70},{-18,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{40,-72},{62,-66}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{44,70},{38,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{18,70},{44,64}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{18,70},{24,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{76,-72},{96,-66}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{82,70},{76,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{56,70},{82,64}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{56,70},{62,-72}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-88,-72},{-64,-66}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid)}));
+ end SolarThermal;
+
+ package Utilities "Utility models for heat generation models"
+ extends Modelica.Icons.Package;
+ model HeatDemand
+ "Calculates heat demand to heat m_flow_in from T_in to T_set"
+
+ outer BaseParameters baseParameters "System properties";
+
+ Modelica.Blocks.Interfaces.RealInput T_set
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}})));
+ Modelica.Blocks.Interfaces.RealInput T_in annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=90,
+ origin={-60,-100})));
+ Modelica.Blocks.Interfaces.RealInput m_flow_in annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=90,
+ origin={20,-100})));
+ Modelica.Blocks.Interfaces.RealOutput Q_flow_out
+ annotation (Placement(transformation(extent={{96,-10},{116,10}})));
+ protected
+ parameter Modelica.SIunits.SpecificHeatCapacity cp=baseParameters.cp_Water
+ "Specific heat capacity";
+
+ equation
+ Q_flow_out = m_flow_in * cp * (T_set - T_in);
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(info="
+Overview
+
This control is very simple. Its inputs are a given set temperature T_set, the temperature of the fluid T_in and the mass flow rate of the fluid m_flow_in. The model then calculates which Q_flow would be necessary to heat the fluid to the set temperature by equation
+Q_flow_out = m_flow_in * cp * (T_set - T_in)
+Should T_in > T_set, this would result in a negative Q_flow_out (i.e. a cooling load). A limiter after this model can be used to ensure Q_flow is always >= 0.
+",
+ revisions="
+07.10.2013, Marcus Fuchs
+
+"));
+ end HeatDemand;
+
+ model HeatCurve
+ "Given a reference temperature, this heat curve calculates a set-point temperature"
+
+ parameter Modelica.SIunits.Temp_C T_fwd_max = 80
+ "Maximum forward temperature of the heating system at lowest reference temperature, both in Celcius";
+ parameter Modelica.SIunits.Temp_C T_ref_min = -12
+ "Lowest reference temperature in Celcius";
+
+ Modelica.Blocks.Interfaces.RealInput T_ref
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}})));
+ Modelica.Blocks.Interfaces.RealOutput T_set
+ annotation (Placement(transformation(extent={{98,-10},{118,10}})));
+
+ protected
+ Modelica.SIunits.Temp_C TAtZero
+ "T_set of the heat curve at 0 degrees Celcius";
+
+ equation
+ TAtZero = (T_fwd_max - 20) * 20 / (20 - T_ref_min);
+ T_set = (20 + TAtZero - (T_ref - 273.15) / 20 * TAtZero) + 273.15;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(info="
+Overview
+
This model calculates a set-point temperature for the forward flow of a heating system as a funktion of a reference temperature. In most cases this reference temperature will be the outside air temperature.
+The heating curve is defined so that a given maximum forward temperature of the heating system is reached at a given lowest design reference temperature. At a reference temperature of 20 °C, the heating curve also reaches 20 °C for the set-point temperature.
+",
+ revisions="
+09.10.2013, Marcus Fuchs
+
+"));
+ end HeatCurve;
+
+ model FuelCounter
+ "Fuel counter monitoring fuel consumption in a boiler model"
+ extends Modelica.Icons.TranslationalSensor;
+ Modelica.SIunits.Conversions.NonSIunits.Energy_kWh counter;
+
+ Modelica.Blocks.Interfaces.RealInput fuel_in
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}})));
+
+ equation
+ der(counter) = fuel_in/3600/1000;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Text(
+ extent={{-76,76},{76,42}},
+ lineColor={135,135,135},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ textString="Fuel Counter")}), Documentation(info="
+Overview
+
This fuel counter integrates the actual fuel use to arrive at the overall fuel consumption.
+",
+ revisions="
+09.10.2013, Marcus Fuchs
+
+- corrected error in equation
+
+07.10.2013, Marcus Fuchs
+
+- implemented (similar to HVAC.Meter.EEnergyMeter)
+
+"));
+ end FuelCounter;
+
+ model BoilerEfficiency
+ "Boiler efficiency as a linear interpolation between table values for a basic boiler model"
+ import AixLib;
+
+ parameter AixLib.DataBase.Boiler.BoilerEfficiencyBaseDataDefinition
+ boilerEfficiencyBE=AixLib.DataBase.Boiler.BoilerConst()
+ "boiler efficiency as a function of part-load factor"
+ annotation (choicesAllMatching=true);
+
+ parameter Modelica.SIunits.Power Q_flow_max = 20000
+ "Maximum heat output of boiler at full load";
+
+ Modelica.Blocks.Interfaces.RealInput heatDemand
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}})));
+ Modelica.Blocks.Interfaces.RealOutput fuelUse
+ annotation (Placement(transformation(extent={{96,-10},{116,10}})));
+ Modelica.Blocks.Math.Division division
+ annotation (Placement(transformation(extent={{40,30},{60,50}})));
+
+ Modelica.Blocks.Tables.CombiTable1Ds tableBoilerEff(columns={2}, table=
+ boilerEfficiencyBE.boilerEfficiency)
+ annotation (Placement(transformation(extent={{0,10},{20,30}})));
+ Modelica.Blocks.Math.Division division1
+ annotation (Placement(transformation(extent={{-30,-16},{-10,4}})));
+ Modelica.Blocks.Sources.Constant const1(k=Q_flow_max)
+ annotation (Placement(transformation(extent={{-78,-50},{-58,-30}})));
+ equation
+
+ connect(const1.y, division1.u2) annotation (Line(
+ points={{-57,-40},{-52,-40},{-52,-12},{-32,-12}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(heatDemand, division1.u1) annotation (Line(
+ points={{-100,0},{-32,0}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(heatDemand, division.u1) annotation (Line(
+ points={{-100,0},{-60,0},{-60,46},{38,46}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(division.y, fuelUse) annotation (Line(
+ points={{61,40},{74,40},{74,0},{106,0}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(division1.y, tableBoilerEff.u) annotation (Line(
+ points={{-9,-6},{-8,-6},{-8,20},{-2,20}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(tableBoilerEff.y[1], division.u2) annotation (Line(
+ points={{21,20},{28,20},{28,34},{38,34}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(revisions="
+09.10.2013, Marcus Fuchs
+
+- Changed table values to be calculated according to a given value of eta at full load operation
+
+07.10.2013, Marcus Fuchs
+
+",
+ info="
+Overview
+
This boiler efficiency specifies a table for eta at different part load conditions. The values are somewhat similar to the lowest curve in Recknagel, Sprenger 2009 DVD p. 822. This describes a simple boiler (no low temperature operation, no flue gas condensation)
+"));
+ end BoilerEfficiency;
+
+ model SolarThermalEfficiency
+ "Calculates the efficiency of a solar thermal collector"
+ import AixLib;
+
+ parameter AixLib.DataBase.SolarThermal.SolarThermalBaseDataDefinition
+ Collector=AixLib.DataBase.SolarThermal.SimpleAbsorber()
+ "Properties of Solar Thermal Collector"
+ annotation (choicesAllMatching=true);
+
+ Modelica.Blocks.Interfaces.RealInput T_air "Air temperature in K" annotation (
+ Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-50,106})));
+ Modelica.Blocks.Interfaces.RealInput G "Solar irradiation in W/m2"
+ annotation (Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={10,106})));
+ Modelica.Blocks.Interfaces.RealInput T_col "Collector temperature in K"
+ annotation (Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=90,
+ origin={-50,-106})));
+ Modelica.Blocks.Interfaces.RealOutput Q_flow
+ "Useful heat flow from solar collector in W/m2"
+ annotation (Placement(transformation(extent={{98,-10},{118,10}})));
+
+ protected
+ Real eta "Efficiency of solar thermal collector";
+ Modelica.SIunits.TemperatureDifference dT
+ "Temperature difference between collector and air in K";
+
+ equation
+ dT = T_col - T_air;
+ eta = Collector.eta_zero - (Collector.c1 * dT / G) - (Collector.c2 * dT * dT / G);
+ Q_flow = G * eta;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Documentation(info="
+Overview
+
Model for the efficiency of a solar thermal collector. Inputs are outdoor air temperature, fluid temperature and solar irradiation. Based on these values and the collector properties from database, this model calculates the heat flow to the fluid circuit. We assume that the fluid temperature is equal to the collector temperature.
+", revisions="
+19.11.2013, Marcus Fuchs: implemented
+"));
+ end SolarThermalEfficiency;
+ end Utilities;
+
+ package BaseClasses
+ "Contains base classes for the modelling of heat generation equipment"
+ extends Modelica.Icons.BasesPackage;
+ partial model PartialHeatGen
+ "Base Class for modelling heat generation equipment of different types"
+
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Modelica.SIunits.Temperature T_ref = baseParameters.T_ref;
+
+ Volume.Volume volume
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Interfaces.Port_a port_a
+ annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
+ Interfaces.Port_b port_b
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ Sensors.TemperatureSensor T_in(T_ref=T_ref)
+ annotation (Placement(transformation(extent={{-80,-10},{-60,10}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{-50,-10},{-30,10}})));
+ equation
+ connect(volume.port_b, port_b) annotation (Line(
+ points={{10,0},{100,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(port_a, T_in.port_a) annotation (Line(
+ points={{-100,0},{-80,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(T_in.port_b, massFlowSensor.port_a) annotation (Line(
+ points={{-60,0},{-50,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, volume.port_a) annotation (Line(
+ points={{-30,0},{-10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Documentation(info="
+Overview
+
This partial model is a base class for modelling all heat generation equipment. It includes the necessary fluid port and a fluid volume with a thermal connector for heating the fluid.
+This model is just a start and is likely to change in order to be suitable for all heat generation equipment within the lecture.
+", revisions="
+27.11.2013, Marcus Fuchs
+
+- removed input for T_set as this is not applicable with solar thermal collectors
+
+02.10.2013, Marcus Fuchs
+
+"), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics));
+ end PartialHeatGen;
+
+ annotation (Documentation(info="
+This package is currently in development. One open question is how many base classes are needed. Is is feasable to have a general base class for all heat generation equipment? And should we extend another base class for each type of equipment like boilers, heat pumps, etc. ?
+"));
+ end BaseClasses;
+
+ package Examples "Illustrating the use of models from HeatGeneration package"
+ extends Modelica.Icons.ExamplesPackage;
+ model BoilerSystemTConst
+ "Test case for boiler model with constant supply temperature"
+
+ extends Modelica.Icons.Example;
+
+ Pumps.Pump pumpSimple(Head_max=1)
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-50,10})));
+ Sources.Boundary_p staticPressure annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-90,-10})));
+ Pipes.StaticPipe
+ pipe(l=25, D=0.01)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={70,10})));
+ Pipes.StaticPipe
+ pipe1(l=25, D=0.01)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={10,-50})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{80,80},{100,100}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{-40,60},{-20,80}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{0,60},{20,80}})));
+ Boiler boiler annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-50,50})));
+ Modelica.Blocks.Sources.Constant const(k=80 + 273.15)
+ annotation (Placement(transformation(extent={{-100,26},{-80,46}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow
+ prescribedHeatFlow
+ annotation (Placement(transformation(extent={{12,-90},{32,-70}})));
+ Modelica.Blocks.Sources.Sine sine(
+ amplitude=1000,
+ startTime=60,
+ freqHz=0.0002,
+ offset=-1000)
+ annotation (Placement(transformation(extent={{-28,-90},{-8,-70}})));
+ Volume.Volume volume annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={50,-50})));
+ Modelica.Blocks.Sources.BooleanExpression Source_IsNight
+ annotation (Placement(transformation(extent={{-96,0},{-76,20}})));
+ equation
+ connect(staticPressure.port_a, pumpSimple.port_a) annotation (Line(
+ points={{-90,-20},{-90,-24},{-50,-24},{-50,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, pumpSimple.port_a) annotation (Line(
+ points={{0,-50},{-50,-50},{-50,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, temperatureSensor.port_a) annotation (
+ Line(
+ points={{-20,70},{0,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, pipe.port_a) annotation (Line(
+ points={{20,70},{70,70},{70,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pumpSimple.port_b, boiler.port_a) annotation (Line(
+ points={{-50,20},{-50,40}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boiler.port_b, massFlowSensor.port_a) annotation (Line(
+ points={{-50,60},{-50,70},{-40,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(const.y, boiler.T_set) annotation (Line(
+ points={{-79,36},{-57,36},{-57,39.2}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(sine.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-7,-80},{12,-80}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe.port_b, volume.port_a) annotation (Line(
+ points={{70,0},{70,-50},{60,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume.port_b, pipe1.port_a) annotation (Line(
+ points={{40,-50},{20,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{32,-80},{50,-80},{50,-60}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, pumpSimple.IsNight) annotation (Line(
+ points={{-75,10},{-60.2,10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=82800, Interval=60),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+
This example models a simple fluid circuit in order to test the boiler model for plausibility
+",
+ revisions="
+07.10.2013, Marcus Fuchs
+
+"));
+ end BoilerSystemTConst;
+
+ model BoilerSystemTVar "Test case for boiler model with heating curve"
+ import AixLib;
+
+ extends Modelica.Icons.Example;
+
+ Pumps.Pump pumpSimple(Head_max=1)
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-50,10})));
+ Sources.Boundary_p staticPressure annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-90,-10})));
+ Pipes.StaticPipe
+ pipe(l=25, D=0.01)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={70,10})));
+ Pipes.StaticPipe
+ pipe1(l=25, D=0.01)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={10,-50})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{80,80},{100,100}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{-40,60},{-20,80}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{0,60},{20,80}})));
+ Boiler boiler(boilerEfficiencyB=AixLib.DataBase.Boiler.BoilerCondensing())
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-50,50})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow
+ prescribedHeatFlow
+ annotation (Placement(transformation(extent={{12,-90},{32,-70}})));
+ Modelica.Blocks.Sources.Sine sine(
+ amplitude=1000,
+ startTime=60,
+ freqHz=0.0002,
+ offset=-1000)
+ annotation (Placement(transformation(extent={{-28,-90},{-8,-70}})));
+ Volume.Volume volume annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={50,-50})));
+ Modelica.Blocks.Sources.BooleanExpression Source_IsNight
+ annotation (Placement(transformation(extent={{-96,0},{-76,20}})));
+ Utilities.HeatCurve heatCurve
+ annotation (Placement(transformation(extent={{-90,26},{-70,46}})));
+ Sources.OutdoorTemp outdoorTemp annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-80,82})));
+ equation
+ connect(staticPressure.port_a, pumpSimple.port_a) annotation (Line(
+ points={{-90,-20},{-90,-24},{-50,-24},{-50,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, pumpSimple.port_a) annotation (Line(
+ points={{0,-50},{-50,-50},{-50,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, temperatureSensor.port_a) annotation (
+ Line(
+ points={{-20,70},{0,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, pipe.port_a) annotation (Line(
+ points={{20,70},{70,70},{70,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pumpSimple.port_b, boiler.port_a) annotation (Line(
+ points={{-50,20},{-50,40}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boiler.port_b, massFlowSensor.port_a) annotation (Line(
+ points={{-50,60},{-50,70},{-40,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sine.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-7,-80},{12,-80}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe.port_b, volume.port_a) annotation (Line(
+ points={{70,0},{70,-50},{60,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume.port_b, pipe1.port_a) annotation (Line(
+ points={{40,-50},{20,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{32,-80},{50,-80},{50,-60}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, pumpSimple.IsNight) annotation (Line(
+ points={{-75,10},{-60.2,10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(heatCurve.T_set, boiler.T_set) annotation (Line(
+ points={{-69.2,36},{-64,36},{-64,39.2},{-57,39.2}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(outdoorTemp.T_out, heatCurve.T_ref) annotation (Line(
+ points={{-80,71.4},{-80,60},{-96,60},{-96,36},{-90,36}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=82800, Interval=60),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+
This example models a simple fluid circuit in order to test the boiler model for plausibility
+",
+ revisions="
+07.10.2013, Marcus Fuchs
+
+"),
+ Icon(coordinateSystem(extent={{-100,-100},{100,100}})));
+ end BoilerSystemTVar;
+
+ model TestCombiTable2D "Test case for boiler model"
+
+ extends Modelica.Icons.Example;
+
+ Modelica.Blocks.Tables.CombiTable2D HeatFlowCondenserTable(table=[0.0,
+ 273.15,283.15; 308.15,4800,6300; 328.15,4400,5750])
+ annotation (Placement(transformation(extent={{0,40},{20,60}})));
+ Modelica.Blocks.Sources.Ramp rampSourceTemp(
+ height=20,
+ duration=1000,
+ offset=-5)
+ annotation (Placement(transformation(extent={{-80,20},{-60,40}})));
+ Modelica.Blocks.Sources.Constant constSinkTemp(k=55)
+ annotation (Placement(transformation(extent={{-80,60},{-60,80}})));
+ Modelica.Blocks.Math.UnitConversions.From_degC from_degC
+ annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
+ Modelica.Blocks.Math.UnitConversions.From_degC from_degC1
+ annotation (Placement(transformation(extent={{-40,60},{-20,80}})));
+ equation
+ connect(from_degC.u, rampSourceTemp.y) annotation (Line(
+ points={{-42,30},{-59,30}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(constSinkTemp.y, from_degC1.u) annotation (Line(
+ points={{-59,70},{-42,70}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(from_degC.y, HeatFlowCondenserTable.u2) annotation (Line(
+ points={{-19,30},{-14,30},{-14,44},{-2,44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(from_degC1.y, HeatFlowCondenserTable.u1) annotation (Line(
+ points={{-19,70},{-14,70},{-14,56},{-2,56}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=1000, Interval=1),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+Example to test the tables used within the HeatPump model
+",
+ revisions="
+25.11.2013, Kristian Huchtemann
+
+"),
+ Icon(coordinateSystem(extent={{-100,-100},{100,100}})));
+ end TestCombiTable2D;
+
+ model HeatPumpSystem "Test case for boiler model"
+ import AixLib;
+
+ extends Modelica.Icons.Example;
+
+ Pumps.Pump Pump2(Head_max=1) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={10,10})));
+ Sources.Boundary_p staticPressure annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-10,-10})));
+ Pipes.StaticPipe
+ pipe( D=0.01, l=15)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={90,10})));
+ Pipes.StaticPipe
+ pipe1( D=0.01, l=15)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={30,-50})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{100,80},{120,100}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{20,60},{40,80}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{60,60},{80,80}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow
+ prescribedHeatFlow
+ annotation (Placement(transformation(extent={{32,-90},{52,-70}})));
+ Modelica.Blocks.Sources.Sine sine(
+ amplitude=1000,
+ startTime=60,
+ freqHz=0.0002,
+ offset=-1000)
+ annotation (Placement(transformation(extent={{0,-90},{20,-70}})));
+ Volume.Volume volume annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={70,-50})));
+ HeatPump heatPump(tablePower=[0.0,273.15,283.15; 308.15,1100,1150; 328.15,
+ 1600,1750], tableHeatFlowCondenser=[0.0,273.15,283.15; 308.15,4800,
+ 6300; 328.15,4400,5750])
+ annotation (Placement(transformation(extent={{-18,40},{2,60}})));
+ Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=5)
+ annotation (Placement(transformation(extent={{-36,74},{-16,94}})));
+ Modelica.Blocks.Sources.Constant const(k=273.15 + 40)
+ annotation (Placement(transformation(extent={{-80,80},{-60,100}})));
+ Pumps.Pump Pump1(MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ ControlStrategy=1) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-38,58})));
+ Sources.Boundary_ph boundary_ph(h=4184*8)
+ annotation (Placement(transformation(extent={{-100,52},{-80,72}})));
+ Pipes.StaticPipe
+ pipe2( D=0.01, l=2)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-64,58})));
+ Sources.Boundary_ph boundary_ph1
+ annotation (Placement(transformation(extent={{-100,24},{-80,44}})));
+ Modelica.Blocks.Sources.BooleanExpression Source_IsNight
+ annotation (Placement(transformation(extent={{-102,4},{-82,24}})));
+ Utilities.FuelCounter electricityCounter
+ annotation (Placement(transformation(extent={{-14,16},{6,36}})));
+ equation
+ connect(staticPressure.port_a, Pump2.port_a) annotation (Line(
+ points={{-10,-20},{10,-20},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, Pump2.port_a) annotation (Line(
+ points={{20,-50},{10,-50},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, temperatureSensor.port_a) annotation (
+ Line(
+ points={{40,70},{60,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, pipe.port_a) annotation (Line(
+ points={{80,70},{90,70},{90,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sine.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{21,-80},{32,-80}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe.port_b, volume.port_a) annotation (Line(
+ points={{90,0},{90,-50},{80,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume.port_b, pipe1.port_a) annotation (Line(
+ points={{60,-50},{40,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{52,-80},{70,-80},{70,-60}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(Pump2.port_b, heatPump.port_a_sink) annotation (Line(
+ points={{10,20},{10,43},{1,43}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(heatPump.port_b_sink, massFlowSensor.port_a) annotation (Line(
+ points={{1,57},{6,57},{6,56},{10,56},{10,70},{20,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(onOffController.y, heatPump.OnOff) annotation (Line(
+ points={{-15,84},{-8,84},{-8,58}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.signal, onOffController.u) annotation (Line(
+ points={{70,80},{70,100},{-46,100},{-46,78},{-38,78}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(const.y, onOffController.reference) annotation (Line(
+ points={{-59,90},{-38,90}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundary_ph.port_a, pipe2.port_a) annotation (Line(
+ points={{-80,62},{-78,62},{-78,58},{-74,58}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, heatPump.port_b_source) annotation (Line(
+ points={{-80,34},{-30,34},{-30,42},{-24,42},{-24,43},{-17,43}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe2.port_b, Pump1.port_a) annotation (Line(
+ points={{-54,58},{-48,58}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Pump1.port_b, heatPump.port_a_source) annotation (Line(
+ points={{-28,58},{-20,58},{-20,57},{-17,57}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, Pump2.IsNight) annotation (Line(
+ points={{-81,14},{-40,14},{-40,10},{-0.2,10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, Pump1.IsNight) annotation (Line(
+ points={{-81,14},{-68,14},{-68,68.2},{-38,68.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(electricityCounter.fuel_in, heatPump.Power) annotation (Line(
+ points={{-14,26},{-22,26},{-22,36},{-8,36},{-8,41}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=10800, Interval=1),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+This example models a simple fluid circuit in order to test the heat pump model for plausibility
+",
+ revisions="
+25.11.2013, Kristian Huchtemann
+
+- changed BoilerSystem to HeatPumpSystem
+
+"),
+ Icon(coordinateSystem(extent={{-100,-100},{100,100}})));
+ end HeatPumpSystem;
+
+ model HeatPumpSystem2 "Test case for boiler model"
+ import AixLib;
+
+ extends Modelica.Icons.Example;
+
+ Pumps.Pump Pump2(
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ ControlStrategy=1,
+ Head_max=1) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={10,10})));
+ Sources.Boundary_p staticPressure annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-10,-10})));
+ Pipes.StaticPipe
+ pipe( D=0.01, l=15)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={90,10})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{100,80},{120,100}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{20,60},{40,80}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{60,60},{80,80}})));
+ HeatPump heatPump(tablePower=[0.0,273.15,283.15; 308.15,1100,1150; 328.15,
+ 1600,1750], tableHeatFlowCondenser=[0.0,273.15,283.15; 308.15,4800,
+ 6300; 328.15,4400,5750])
+ annotation (Placement(transformation(extent={{-18,40},{2,60}})));
+ Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=5)
+ annotation (Placement(transformation(extent={{-36,74},{-16,94}})));
+ Pumps.Pump Pump1(MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ ControlStrategy=1) annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-38,58})));
+ Sources.Boundary_ph boundary_ph(h=4184*8)
+ annotation (Placement(transformation(extent={{-100,52},{-80,72}})));
+ Pipes.StaticPipe
+ pipe2( D=0.01, l=2)
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=0,
+ origin={-64,58})));
+ Sources.Boundary_ph boundary_ph1
+ annotation (Placement(transformation(extent={{-100,24},{-80,44}})));
+ Modelica.Blocks.Sources.BooleanExpression Source_IsNight
+ annotation (Placement(transformation(extent={{-102,4},{-82,24}})));
+ Utilities.FuelCounter electricityCounter
+ annotation (Placement(transformation(extent={{-14,16},{6,36}})));
+ Modelica.Blocks.Sources.Constant Source_Temp(k=273.15 + 20)
+ annotation (Placement(transformation(extent={{4,-94},{24,-74}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature AirTemp
+ annotation (Placement(transformation(extent={{92,-78},{80,-66}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature RadTemp
+ annotation (Placement(transformation(extent={{42,-78},{54,-66}})));
+ Radiators.Radiator radiator(RadiatorType=
+ AixLib.DataBase.Radiators.ThermX2_ProfilV_979W()) annotation (
+ Placement(transformation(
+ extent={{-11,-10},{11,10}},
+ rotation=180,
+ origin={69,-50})));
+ Pipes.StaticPipe
+ pipe1(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{40,-60},{20,-40}})));
+ Modelica.Blocks.Sources.Constant const(k=273.15 + 55)
+ annotation (Placement(transformation(extent={{-80,80},{-60,100}})));
+ equation
+ connect(staticPressure.port_a, Pump2.port_a) annotation (Line(
+ points={{-10,-20},{10,-20},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, temperatureSensor.port_a) annotation (
+ Line(
+ points={{40,70},{60,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, pipe.port_a) annotation (Line(
+ points={{80,70},{90,70},{90,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Pump2.port_b, heatPump.port_a_sink) annotation (Line(
+ points={{10,20},{10,43},{1,43}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(heatPump.port_b_sink, massFlowSensor.port_a) annotation (Line(
+ points={{1,57},{6,57},{6,56},{10,56},{10,70},{20,70}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(onOffController.y, heatPump.OnOff) annotation (Line(
+ points={{-15,84},{-8,84},{-8,58}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.signal, onOffController.u) annotation (Line(
+ points={{70,80},{70,100},{-46,100},{-46,78},{-38,78}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundary_ph.port_a, pipe2.port_a) annotation (Line(
+ points={{-80,62},{-78,62},{-78,58},{-74,58}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, heatPump.port_b_source) annotation (Line(
+ points={{-80,34},{-30,34},{-30,42},{-24,42},{-24,43},{-17,43}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe2.port_b, Pump1.port_a) annotation (Line(
+ points={{-54,58},{-48,58}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Pump1.port_b, heatPump.port_a_source) annotation (Line(
+ points={{-28,58},{-20,58},{-20,57},{-17,57}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, Pump2.IsNight) annotation (Line(
+ points={{-81,14},{-40,14},{-40,10},{-0.2,10}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(Source_IsNight.y, Pump1.IsNight) annotation (Line(
+ points={{-81,14},{-68,14},{-68,68.2},{-38,68.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(electricityCounter.fuel_in, heatPump.Power) annotation (Line(
+ points={{-14,26},{-22,26},{-22,36},{-8,36},{-8,41}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_Temp.y,RadTemp. T) annotation (Line(
+ points={{25,-84},{38,-84},{38,-72},{40.8,-72}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_Temp.y,AirTemp. T) annotation (Line(
+ points={{25,-84},{93.2,-84},{93.2,-72}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe1.port_a, radiator.port_b) annotation (Line(
+ points={{40,-50},{58.88,-50},{58.88,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, Pump2.port_a) annotation (Line(
+ points={{20,-50},{10,-50},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(RadTemp.port, radiator.radPort) annotation (Line(
+ points={{54,-72},{64,-72},{64,-57.8},{64.6,-57.8}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(AirTemp.port, radiator.convPort) annotation (Line(
+ points={{80,-72},{73.62,-72},{73.62,-57.6}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(const.y, onOffController.reference) annotation (Line(
+ points={{-59,90},{-38,90}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe.port_b, radiator.port_a) annotation (Line(
+ points={{90,0},{92,0},{92,-50},{79.12,-50}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=10800, Interval=1),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+This example models a simple fluid circuit with a heat pump and a radiator in order to test the heat pump model for plausibility.
+",
+ revisions="
+25.11.2013, Kristian Huchtemann
+
+- changed HeatPumpSystem to new example HeatPumpSystem2 by adding a radiator as heat sink
+
+"),
+ Icon(coordinateSystem(extent={{-100,-100},{100,100}})));
+ end HeatPumpSystem2;
+
+ model SolarThermalCollector
+ "Example to demonstrate the function of the solar thermal collector model"
+ import AixLib;
+ extends Modelica.Icons.Example;
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_ph boundary_ph(
+ h=125823,
+ use_p_in=false,
+ p=100020)
+ annotation (Placement(transformation(extent={{-80,-10},{-60,10}})));
+ Sources.Boundary_ph boundary_ph1(use_p_in=false)
+ annotation (Placement(transformation(extent={{100,-10},{80,10}})));
+ Sensors.MassFlowSensor massFlowSensor
+ annotation (Placement(transformation(extent={{-54,-10},{-34,10}})));
+ Sensors.TemperatureSensor T1
+ annotation (Placement(transformation(extent={{-28,-10},{-8,10}})));
+ SolarThermal solarThermal(A=2, Collector=
+ AixLib.DataBase.SolarThermal.VacuumCollector())
+ annotation (Placement(transformation(extent={{0,-10},{20,10}})));
+ Sources.TempAndRad tempAndRad(temperatureOT=
+ AixLib.DataBase.Weather.SummerDay()) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={8,86})));
+ Pipes.StaticPipe
+ pipe(l=100)
+ annotation (Placement(transformation(extent={{54,-10},{74,10}})));
+ Sensors.TemperatureSensor T2
+ annotation (Placement(transformation(extent={{28,-10},{48,10}})));
+ equation
+ connect(boundary_ph.port_a, massFlowSensor.port_a) annotation (Line(
+ points={{-60,0},{-54,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(massFlowSensor.port_b, T1.port_a) annotation (Line(
+ points={{-34,0},{-28,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(T1.port_b, solarThermal.port_a) annotation (Line(
+ points={{-8,0},{0,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(solarThermal.port_b, T2.port_a) annotation (Line(
+ points={{20,0},{28,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(T2.port_b, pipe.port_a) annotation (Line(
+ points={{48,0},{54,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_b, boundary_ph1.port_a) annotation (Line(
+ points={{74,0},{80,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(tempAndRad.Rad, solarThermal.Irradiation) annotation (Line(
+ points={{12,75.4},{12,10.8},{11,10.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(tempAndRad.T_out, solarThermal.T_air) annotation (Line(
+ points={{4,75.4},{4,75.4},{4,10.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics),
+ experiment(StopTime=82600, Interval=3600),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+
This test demonstrates the solar thermal collector model. Different types of collectors can be tested at fixed boundary conditions. To test the collectors at different fluid temperatures, adjust h at left boundary accordung to this table:
+T in °C | h in J/kg
+20 | 84007
+30 | 125823
+40 | 167616
+50 | 209418
+60 | 251249
+70 | 293123
+80 | 335055
+90 | 377063
+(values are according to wolframalpha.com for water at p = 1 atm )
+", revisions="
+26.11.2013, Marcus Fuchs
+
+"));
+ end SolarThermalCollector;
+ end Examples;
+ annotation (Documentation(info="
+This package can contain different heat generation equipment like boilers, heat pumps, solar thermal, and chp units. The package is currently in development
+",
+ revisions=""));
+end HeatGeneration;
diff --git a/AixLib/HVAC/HumidifierAndDehumidifier.mo b/AixLib/HVAC/HumidifierAndDehumidifier.mo
new file mode 100644
index 0000000000..edaa6e6060
--- /dev/null
+++ b/AixLib/HVAC/HumidifierAndDehumidifier.mo
@@ -0,0 +1,384 @@
+within AixLib.HVAC;
+package HumidifierAndDehumidifier "Models for Humidifier and Dehumidifier"
+ extends Modelica.Icons.Package;
+
+ model SteamHumidifier "Steam humidifier, with consideration of saturation"
+ extends Interfaces.TwoPortMoistAirFluidprops;
+ outer BaseParameters baseParameters "System properties";
+
+ Modelica.SIunits.Pressure p_Saturation_portb
+ "Saturation Pressure of Steam portb";
+ Real X_Saturation_portb(min=0)
+ "saturation mass fractions of water to dry air m_w/m_a at portb";
+ Real Massflow_steamOut(start = 0) "steam flow which remains unused";
+ Real Massflow_steamUseful "used steam flow";
+ Real Dummy_portb_Xout "Xout if all the mass flow is used)";
+
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a in W";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b in W";
+
+ Modelica.Blocks.Interfaces.RealInput Massflow_steamIn
+ annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-40,100}), iconTransformation(
+ extent={{-14,-14},{14,14}},
+ rotation=270,
+ origin={-40,94})));
+ Modelica.Blocks.Interfaces.RealInput Temperature_steamIn
+ annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={34,100}), iconTransformation(
+ extent={{-14,-14},{14,14}},
+ rotation=270,
+ origin={40,94})));
+
+ equation
+ assert(portMoistAir_b.X_outflow < X_Saturation_portb, "
+Oversaturation X_outflow at port_b = " + String(portMoistAir_b.X_outflow) + " while X_saturation at port_b =" + String(X_Saturation_portb)+ ".", level=AssertionLevel.warning);
+ assert(inStream(portMoistAir_a.X_outflow) < X_Saturation, "
+Oversaturation X_outflow at port_a = " + String(inStream(portMoistAir_a.X_outflow)) + " while X_saturation at port_a =" + String(X_Saturation)+ ".", level=AssertionLevel.warning);
+
+ // No pressure loss
+ dp = 0;
+
+ // Mass balance air
+ 0 = portMoistAir_a.m_flow + portMoistAir_b.m_flow;
+
+ // Mass balance water
+ portMoistAir_b.X_outflow = inStream(portMoistAir_a.X_outflow) + Massflow_steamUseful / portMoistAir_a.m_flow;
+ portMoistAir_a.X_outflow = inStream(portMoistAir_b.X_outflow) + Massflow_steamUseful / portMoistAir_b.m_flow;
+
+ //Energy balance
+ portMoistAir_b.h_outflow = inStream(portMoistAir_a.h_outflow) + Massflow_steamUseful * ((r_Steam + cp_Steam*(Temperature_steamIn - T_ref)))/portMoistAir_a.m_flow;
+ portMoistAir_a.h_outflow = inStream(portMoistAir_b.h_outflow) + Massflow_steamUseful * ((r_Steam + cp_Steam*(Temperature_steamIn - T_ref)))/portMoistAir_b.m_flow;
+
+ //Calculate help variables
+ H_flow_a = portMoistAir_a.m_flow*actualStream(portMoistAir_a.h_outflow);
+ H_flow_b = portMoistAir_b.m_flow*actualStream(portMoistAir_b.h_outflow);
+
+ //Saturation pressure and humidity
+ p_Saturation_portb = HVAC.Volume.BaseClasses.SaturationPressureSteam(T); // because almost isothermal
+ X_Saturation_portb = M_Steam/M_Air*p_Saturation/(portMoistAir_b.p - p_Saturation_portb);
+ Dummy_portb_Xout = inStream(portMoistAir_a.X_outflow) + Massflow_steamIn / portMoistAir_a.m_flow;
+
+ if Dummy_portb_Xout > X_Saturation_portb then
+ Massflow_steamUseful = portMoistAir_a.m_flow*(X_Saturation_portb - inStream(portMoistAir_a.X_outflow));
+ else
+ Massflow_steamUseful = Massflow_steamIn;
+ end if;
+
+ Massflow_steamOut = Massflow_steamIn - Massflow_steamUseful;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={
+ Rectangle(
+ extent={{-80,80},{80,-80}},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid,
+ pattern=LinePattern.None),
+ Line(
+ points={{-32,54},{-64,-48}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{-12,54},{-44,-48}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{12,54},{-20,-48}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{36,52},{4,-50}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{62,52},{30,-50}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{-50,56},{-20,-44}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{-18,56},{12,-44}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None),
+ Line(
+ points={{16,56},{46,-44}},
+ color={0,0,0},
+ pattern=LinePattern.Dot,
+ smooth=Smooth.None)}),
+ Documentation(info="
+Overview
+Model for a steam humidifier.
+Level of Development
+
+Concept
+Model functions in both directions as a humidifier.
+Model inputs: Massflow and temperature for steam.
+Assumptions: all the possible steam is absorbed. Saturation is considered.
+Example Results
+AixLib.HVAC.HumidifierAndDehumidifier.SteamHumidifier
+",
+ revisions="
+21.01.2014, by Ana Constantin: implemented
+"));
+ end SteamHumidifier;
+
+ model CoolerDehumidifier "Dehumidifier through cooling"
+ extends Interfaces.TwoPortMoistAirFluidprops;
+ outer BaseParameters baseParameters "System properties";
+
+ Modelica.SIunits.Pressure p_Saturation_CoolSurface
+ "Saturation Pressure of Steam at Sensor";
+ Real X_Saturation_CoolSurface(min=0)
+ "saturation mass fractions of water to dry air m_w/m_a in Sensor";
+ Real Massflow_waterOut "dehumidified water flow";
+
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a in W";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b in W";
+
+ Modelica.Blocks.Interfaces.RealInput BypassFactor annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={46,100}), iconTransformation(
+ extent={{-14,-14},{14,14}},
+ rotation=270,
+ origin={-60,94})));
+ Modelica.Blocks.Interfaces.RealInput CoolSurfaceTemperature
+ annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-66,100}),iconTransformation(
+ extent={{-14,-14},{14,14}},
+ rotation=270,
+ origin={52,94})));
+
+ equation
+ // No pressure loss
+ dp = 0;
+
+ // Calculate saturation mass fraction at cooling temperature
+ p_Saturation_CoolSurface =
+ HVAC.Volume.BaseClasses.SaturationPressureSteam(
+ CoolSurfaceTemperature);
+ X_Saturation_CoolSurface = M_Steam/M_Air*p_Saturation_CoolSurface/(portMoistAir_a.p - p_Saturation_CoolSurface);
+
+ // Mass balance air
+ 0 = portMoistAir_a.m_flow + portMoistAir_b.m_flow;
+
+ // Mass balance water
+ portMoistAir_b.X_outflow = inStream(portMoistAir_a.X_outflow)*BypassFactor + X_Saturation_CoolSurface*(1-BypassFactor);
+ portMoistAir_a.X_outflow = inStream(portMoistAir_b.X_outflow)*BypassFactor + X_Saturation_CoolSurface*(1-BypassFactor);
+
+ Massflow_waterOut = (actualStream(portMoistAir_a.X_outflow)-actualStream(portMoistAir_b.X_outflow))/abs(portMoistAir_a.m_flow);
+
+ //Energy balance
+ portMoistAir_b.h_outflow = inStream(portMoistAir_a.h_outflow)*BypassFactor + (1-BypassFactor)*(cp_Air*(CoolSurfaceTemperature-T_ref) + X_Saturation_CoolSurface*(cp_Steam*(CoolSurfaceTemperature-T_ref)+r_Steam));
+ portMoistAir_a.h_outflow = inStream(portMoistAir_b.h_outflow)*BypassFactor + (1-BypassFactor)*(cp_Air*(CoolSurfaceTemperature-T_ref) + X_Saturation_CoolSurface*(cp_Steam*(CoolSurfaceTemperature-T_ref)+r_Steam));
+
+ //Calculate help variables
+ H_flow_b = portMoistAir_b.m_flow *actualStream(portMoistAir_b.h_outflow);
+ H_flow_a = portMoistAir_a.m_flow*actualStream(portMoistAir_a.h_outflow);
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={
+ Rectangle(
+ extent={{-80,80},{80,-80}},
+ fillColor={85,170,255},
+ fillPattern=FillPattern.HorizontalCylinder,
+ pattern=LinePattern.None,
+ lineColor={0,0,0}),
+ Line(
+ points={{-50,-56},{-50,-34}},
+ color={0,0,0},
+ pattern=LinePattern.Dash,
+ smooth=Smooth.None),
+ Line(
+ points={{-20,-56},{-20,-34}},
+ color={0,0,0},
+ pattern=LinePattern.Dash,
+ smooth=Smooth.None),
+ Line(
+ points={{12,-56},{12,-34}},
+ color={0,0,0},
+ pattern=LinePattern.Dash,
+ smooth=Smooth.None),
+ Line(
+ points={{46,-56},{46,-34}},
+ color={0,0,0},
+ pattern=LinePattern.Dash,
+ smooth=Smooth.None)}), Diagram(coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+Model for a cooling dehumidfier.
+Level of Development
+
+Concept
+Model inputs: temperature of cooling temperature and bypass factor.
+Model functions in both directions as a dehumidifier.
+Assumption: Model does not check to see if the water fraction dropped under 0.
+Example Results
+AixLib.HVAC.HumidifierAndDehumidifier.Examples.CoolerDehumidifier
+",
+ revisions="
+21.01.2014, by Ana Constantin: implemented
+"));
+ end CoolerDehumidifier;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+
+ model SteamHumidifier
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+
+ Anlagensimulation_WS1314.HumidifierAndDehumidifier.SteamHumidifier
+ steamHumidifier
+ annotation (Placement(transformation(extent={{-30,-2},{-6,20}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX
+ source(
+ h=56e3,
+ m=2.78e-4,
+ X=0.013)
+ annotation (Placement(transformation(extent={{-102,0},{-82,20}})));
+ Anlagensimulation_WS1314.Sources.BoundaryMoistAir_phX sink(
+ X=0.04,
+ h=1e5,
+ p=100000)
+ annotation (Placement(transformation(extent={{102,0},{80,22}})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters(T0=303.15)
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Modelica.Blocks.Sources.Constant massFlow_steamIn(k=2.78e-6)
+ annotation (Placement(transformation(extent={{-60,40},{-40,60}})));
+ Modelica.Blocks.Sources.Constant temperature_steamIn(k=273.15 + 100)
+ annotation (Placement(transformation(extent={{40,40},{20,60}})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct(l=10)
+ annotation (Placement(transformation(extent={{30,4},{52,18}})));
+ equation
+ connect(massFlow_steamIn.y, steamHumidifier.Massflow_steamIn) annotation (
+ Line(
+ points={{-39,50},{-22.8,50},{-22.8,19.34}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperature_steamIn.y, steamHumidifier.Temperature_steamIn)
+ annotation (Line(
+ points={{19,50},{-13.2,50},{-13.2,19.34}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(duct.portMoistAir_b, sink.portMoistAir_a) annotation (Line(
+ points={{52,11},{80,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(source.portMoistAir_a, steamHumidifier.portMoistAir_a)
+ annotation (Line(
+ points={{-82,10},{-58,10},{-58,9},{-30,9}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(steamHumidifier.portMoistAir_b, duct.portMoistAir_a) annotation (
+ Line(
+ points={{-6,9},{14,9},{14,11},{30,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(
+ StopTime=1000,
+ Interval=1,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Example shows how the steam humidifier works.
+In this particular set-up not all of the steam is absorbed because it would lead to over saturation.
+", revisions="
+21.01.2014, by Ana Constantin: implemented
+"));
+ end SteamHumidifier;
+
+ model CoolerDehumidifier
+ import Anlagensimulation_WS1314 = AixLib.HVAC;
+ extends Modelica.Icons.Example;
+
+ Anlagensimulation_WS1314.HumidifierAndDehumidifier.CoolerDehumidifier coolingDehumidifier
+ annotation (Placement(transformation(extent={{-30,-2},{-6,20}})));
+ Anlagensimulation_WS1314.Sources.MassflowsourceMoistAir_mhX
+ source(
+ h=56e3,
+ m=2.78e-4,
+ X=0.02)
+ annotation (Placement(transformation(extent={{-102,0},{-82,20}})));
+ Anlagensimulation_WS1314.Sources.BoundaryMoistAir_phX sink(
+ X=0.01,
+ h=1e4,
+ p=100000)
+ annotation (Placement(transformation(extent={{102,0},{80,22}})));
+ inner Anlagensimulation_WS1314.BaseParameters
+ baseParameters(T0=303.15)
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Modelica.Blocks.Sources.Constant bypassFactor(k=0.01)
+ annotation (Placement(transformation(extent={{-60,40},{-40,60}})));
+ Modelica.Blocks.Sources.Constant temperature_coolingSurface(k=273.15 + 15)
+ annotation (Placement(transformation(extent={{40,40},{20,60}})));
+ Anlagensimulation_WS1314.Ductwork.Duct duct(l=10)
+ annotation (Placement(transformation(extent={{30,4},{52,18}})));
+ equation
+ connect(duct.portMoistAir_b, sink.portMoistAir_a) annotation (Line(
+ points={{52,11},{80,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(source.portMoistAir_a, coolingDehumidifier.portMoistAir_a)
+ annotation (Line(
+ points={{-82,10},{-58,10},{-58,9},{-30,9}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(coolingDehumidifier.portMoistAir_b, duct.portMoistAir_a)
+ annotation (
+ Line(
+ points={{-6,9},{14,9},{14,11},{30,11}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(coolingDehumidifier.CoolSurfaceTemperature,
+ temperature_coolingSurface.y) annotation (Line(
+ points={{-11.76,19.34},{-11.76,50},{19,50}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(bypassFactor.y, coolingDehumidifier.BypassFactor) annotation (
+ Line(
+ points={{-39,50},{-25.2,50},{-25.2,19.34}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(
+ StopTime=1000,
+ Interval=1,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Example shows how the cooling dehumidifier works.
+", revisions="
+21.01.2014, by Ana Constantin: implemented
+"));
+ end CoolerDehumidifier;
+ end Examples;
+
+end HumidifierAndDehumidifier;
diff --git a/AixLib/HVAC/HydraulicResistances.mo b/AixLib/HVAC/HydraulicResistances.mo
new file mode 100644
index 0000000000..d5f1aae1c3
--- /dev/null
+++ b/AixLib/HVAC/HydraulicResistances.mo
@@ -0,0 +1,42 @@
+within AixLib.HVAC;
+package HydraulicResistances "Models for hydraulic resistances"
+ extends Modelica.Icons.Package;
+ model HydraulicResistance
+ "Simple model for a hydraulic resistance using a pressure loss factor"
+ extends Interfaces.TwoPort;
+
+ parameter Real zeta = 1.0
+ "Pressure loss factor for flow of port_a -> port_b";
+ parameter Modelica.SIunits.Length D=0.05 "Diameter of component";
+
+ equation
+ port_a.h_outflow = inStream(port_b.h_outflow);
+ port_b.h_outflow = inStream(port_a.h_outflow);
+ p = 8 * zeta / (Modelica.Constants.pi^2 * D^4 * rho) * m_flow^2;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(graphics={Rectangle(
+ extent={{-80,46},{80,-34}},
+ lineColor={0,0,255},
+ fillColor={255,255,0},
+ fillPattern=FillPattern.Solid,
+ radius=45), Text(
+ extent={{32,26},{-30,-10}},
+ lineColor={0,0,255},
+ fillColor={255,255,0},
+ fillPattern=FillPattern.Solid,
+ textString="Zeta")}),
+ Documentation(revisions="
+01.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Very simple model for a hydraulic resistance with the pressureloss modelled with a pressure loss factor, zeta.
+Level of Development
+
+Concept
+Values for pressure loss factor zeta can be easily found in tables.
+Example Results
+AixLib.HVAC.Pumps.Examples.PumpHydraulicResistance_closedLoop
+"));
+ end HydraulicResistance;
+end HydraulicResistances;
diff --git a/AixLib/HVAC/Interfaces.mo b/AixLib/HVAC/Interfaces.mo
new file mode 100644
index 0000000000..3bc5036e6f
--- /dev/null
+++ b/AixLib/HVAC/Interfaces.mo
@@ -0,0 +1,555 @@
+within AixLib.HVAC;
+package Interfaces "Special interfaces for hyraulic applications"
+ extends Modelica.Icons.InterfacesPackage;
+
+ connector Port_a
+ Modelica.SIunits.Pressure p "Pressure at the port";
+ flow Modelica.SIunits.MassFlowRate m_flow "Mass flowing into the port";
+ stream Modelica.SIunits.SpecificEnthalpy h_outflow
+ "Specific enthalpy close to the connection point if m_flow < 0";
+ annotation (defaultComponentName="port_a",
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={Ellipse(
+ extent={{-40,40},{40,-40}},
+ lineColor={0,0,0},
+ fillColor={85,85,255},
+ fillPattern=FillPattern.Solid), Text(extent={{-150,110},{150,50}},
+ textString="%name")}),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics={Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,127,255},
+ fillColor={0,127,255},
+ fillPattern=FillPattern.Solid), Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={85,85,255},
+ fillPattern=FillPattern.Solid)}),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+", info="
+Overview
+Interface for quasi one-dimensional fluid flow in a hydraulic component. Only for fluid with constant properties.
+Pressure, mass flow and enthalpy flow are transported in this interface.
+"));
+ end Port_a;
+
+ connector Port_b
+ Modelica.SIunits.Pressure p "Pressure at the port";
+ flow Modelica.SIunits.MassFlowRate m_flow "Mass flowing into the port";
+ stream Modelica.SIunits.SpecificEnthalpy h_outflow
+ "Specific enthalpy close to the connection point if m_flow < 0";
+ annotation (defaultComponentName="port_b",
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={
+ Ellipse(
+ extent={{-40,40},{40,-40}},
+ lineColor={0,0,0},
+ fillColor={85,85,255},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-30,30},{30,-30}},
+ lineColor={0,127,255},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid),
+ Text(extent={{-150,110},{150,50}}, textString="%name")}),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,127,255},
+ fillColor={0,127,255},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={85,85,255},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-80,80},{80,-80}},
+ lineColor={0,127,255},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid)}),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+", info="
+Overview
+Interface for quasi one-dimensional fluid flow in a hydraulic component. Only for fluid with constant properties.
+Pressure, mass flow and enthalpy flow are transported in this interface.
+"));
+ end Port_b;
+
+ partial model TwoPort
+ "Component with two hydraulic ports and mass flow rate from a to b"
+ Modelica.SIunits.Pressure p
+ "Pressure drop between the two ports (= port_a.p - port_b.p)";
+ Modelica.SIunits.MassFlowRate m_flow "Mass flowing from port a to port b";
+ outer BaseParameters baseParameters "System properties";
+
+ protected
+ parameter Modelica.SIunits.DynamicViscosity mu=baseParameters.mu_Water
+ "Dynamic viscosity";
+ parameter Modelica.SIunits.Density rho=baseParameters.rho_Water
+ "Density of the fluid";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp=baseParameters.cp_Water
+ "Specific heat capacity";
+ public
+ Port_a port_a annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
+ Port_b port_b annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ equation
+ p = port_a.p - port_b.p;
+ 0 = port_a.m_flow + port_b.m_flow;
+ m_flow = port_a.m_flow;
+ annotation (Icon(graphics), Diagram(coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}}),
+ graphics),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+",
+ info="
+Overview
+
+This component transports fluid between its two ports, without storing mass or energy.
+Energy may be exchanged with the environment though, e.g., in the form of heat transfer.
+TwoPort
is intended as base class for devices like pipes, valves and simple fluid machines.
+
+
Concept
+Three equations need to be added by an extending class using this component:
+
+
+- the momentum balance specifying the relationship between the pressure drop
dp
and the mass flow rate m_flow
+port_b.h_outflow
for flow in design direction
+port_a.h_outflow
for flow in reverse direction
+
+"));
+ end TwoPort;
+
+ connector RadPort "Port for radiative heat transfer 1-dim"
+ extends Modelica.Thermal.HeatTransfer.Interfaces.HeatPort;
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={
+ Line(
+ points={{-100,100},{100,-100}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-100,0},{100,0}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{-98,-96},{100,100}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5),
+ Line(
+ points={{0,-100},{0,100}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=0.5)}), Diagram(graphics={
+ Text(
+ extent={{-80,114},{82,72}},
+ lineColor={0,0,0},
+ lineThickness=1,
+ textString="%name"),
+ Line(
+ points={{-60,58},{60,-60}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=1),
+ Line(
+ points={{-80,0},{80,0}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=1),
+ Line(
+ points={{-60,-60},{58,60}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=1),
+ Line(
+ points={{0,-80},{0,80}},
+ color={0,0,0},
+ smooth=Smooth.None,
+ thickness=1)}),
+ Documentation(revisions="
+13.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Connector for radiative heat transfer.
+Concept
+Same functionality as HeatPort.
+Is used for components with radiative heat transfer (NOT air).
+"));
+ end RadPort;
+
+ connector PortMoistAir_a
+ Modelica.SIunits.Pressure p "Pressure at the port";
+ flow Modelica.SIunits.MassFlowRate m_flow
+ "Massflow of Dry Air flowing into the port";
+ stream Modelica.SIunits.SpecificEnthalpy h_outflow
+ "Specific enthalpy (in kJ / kg_dry-air) close to the connection point, when the mass flow flows OUT of the port";
+ stream Real X_outflow(min=0)
+ "mass fractions of water to dry air m_w/m_a close to the connection point, when the mass flow flows OUT of the port";
+ annotation (defaultComponentName="portMoistAir_a",
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={Ellipse(
+ extent={{-40,40},{40,-40}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid), Text(extent={{-150,110},{150,50}},
+ textString="%name")}),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics={Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,127,255},
+ fillColor={0,127,255},
+ fillPattern=FillPattern.Solid), Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid)}),
+ Documentation(info="
+Overview
+Port Model for Moist Air
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end PortMoistAir_a;
+
+ connector PortMoistAir_b
+ Modelica.SIunits.Pressure p "Pressure at the port";
+ flow Modelica.SIunits.MassFlowRate m_flow
+ "Massflow of Dry Air flowing into the port";
+ stream Modelica.SIunits.SpecificEnthalpy h_outflow
+ "Specific enthalpy (in kJ / kg_dry-air) close to the connection point";
+ stream Real X_outflow(min=0)
+ "mass fractions of water to dry air m_w/m_a close to the connection point";
+ annotation (defaultComponentName="portMoistAir_b",
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={Ellipse(
+ extent={{-40,40},{40,-40}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid), Text(extent={{-150,110},{150,50}},
+ textString="%name"),
+ Ellipse(
+ extent={{-30,30},{30,-30}},
+ lineColor={0,127,255},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid)}),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics={Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,127,255},
+ fillColor={0,127,255},
+ fillPattern=FillPattern.Solid), Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-80,80},{80,-80}},
+ lineColor={0,127,255},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid)}),
+ Documentation(info="
+Overview
+Port Model for Moist Air
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end PortMoistAir_b;
+
+ partial model TwoPortMoistAir "Component with two moist air ports"
+ Modelica.SIunits.Pressure dp
+ "Pressure drop between the two ports (= port_a.p - port_b.p)";
+
+ PortMoistAir_a portMoistAir_a
+ annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
+ PortMoistAir_b portMoistAir_b
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ equation
+ dp = portMoistAir_a.p - portMoistAir_b.p;
+
+ annotation (Icon(graphics), Diagram(coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}}),
+ graphics),
+ Documentation(info="
+Overview
+Two Port Model for Moist Air
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end TwoPortMoistAir;
+
+ partial model TwoPortMoistAirTransport
+ "Base class for moist air transport models without influence on fluid"
+ extends TwoPortMoistAir;
+
+ equation
+ // Mass Equation
+ 0 = portMoistAir_a.m_flow + portMoistAir_b.m_flow;
+
+ // Enthalpy Equations
+ inStream(portMoistAir_a.h_outflow) = portMoistAir_b.h_outflow;
+ inStream(portMoistAir_b.h_outflow) = portMoistAir_a.h_outflow;
+
+ // Water Equations
+ inStream(portMoistAir_b.X_outflow) = portMoistAir_a.X_outflow;
+ inStream(portMoistAir_a.X_outflow) = portMoistAir_b.X_outflow;
+
+ annotation (Documentation(info="
+Overview
+Two Port Model for Moist Air with transport equations, no influence of fluid
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics));
+ end TwoPortMoistAirTransport;
+
+ partial model TwoPortMoistAirFluidprops
+ "Base class for Moist Air with all fluid properties at port a"
+ extends Interfaces.TwoPortMoistAir;
+ import Modelica.Constants.R;
+ outer BaseParameters baseParameters "System properties";
+
+ // PARAMETERS FOR WATER:
+
+ protected
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Water=baseParameters.cp_Water
+ "Specific heat capacity of liquid water";
+
+ // PARAMETERS FOR STEAM:
+
+ parameter Modelica.SIunits.MolarMass M_Steam = baseParameters.M_Steam
+ "Molar Mass of Steam";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Steam=baseParameters.cp_Steam
+ "Specific heat capacity of Steam";
+ parameter Modelica.SIunits.SpecificEnthalpy r_Steam=baseParameters.r_Steam
+ "Specific enthalpy of vaporisation";
+
+ // PARAMETERS FOR DRY AIR:
+
+ parameter Modelica.SIunits.MolarMass M_Air=baseParameters.M_Air
+ "Molar Mass of Dry Air";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Air=baseParameters.cp_Air
+ "Specific heat capacity of Dry Air";
+
+ public
+ parameter Modelica.SIunits.Temperature T_ref=baseParameters.T_ref
+ "Reference temperature in K";
+ Modelica.SIunits.Temperature T "Temperature close to the sensor in K";
+ Modelica.SIunits.Pressure p "Pressure at Sensor";
+ Modelica.SIunits.Pressure p_Steam "Pressure of Steam at Sensor";
+ Modelica.SIunits.Pressure p_Air "Pressure of Air at Sensor";
+ Modelica.SIunits.Pressure p_Saturation
+ "Saturation Pressure of Steam at Sensor";
+ Modelica.SIunits.Density rho_MoistAir(start = 1) "Density of Moist Air";
+ Modelica.SIunits.Density rho_Air(start = 1) "Density of Dry Air";
+ Modelica.SIunits.Density rho_Steam(start = 1) "Density of Steam";
+
+ Real X(min=0)
+ "mass fractions of water (liquid and steam) to dry air m_w/m_a in Sensor";
+ Real X_Steam(min=0) "mass fractions of steam to dry air m_w/m_a in Sensor";
+ Real X_Water(min=0)
+ "mass fractions of liquid water to dry air m_w/m_a in Sensor";
+ Real X_Saturation(min=0)
+ "saturation mass fractions of water to dry air m_w/m_a in Sensor";
+
+ Modelica.SIunits.DynamicViscosity dynamicViscosity
+ "dynamic viscosity of moist air";
+
+ equation
+ // Pressure
+ p = portMoistAir_a.p;
+
+ p = p_Steam + p_Air;
+
+ p_Steam = R/M_Steam*rho_Steam*T;
+ p_Air = R/M_Air*rho_Air*T;
+
+ p_Saturation = HVAC.Volume.BaseClasses.SaturationPressureSteam(T);
+
+ rho_MoistAir = rho_Air*(1 + X_Steam + X_Water);
+
+ // X
+
+ X_Steam = rho_Steam/rho_Air;
+
+ X_Saturation = M_Steam/M_Air*p_Saturation/(p - p_Saturation);
+
+ X_Steam = min(X_Saturation, X);
+
+ X_Water = max(X - X_Saturation, 0);
+
+ // ENTHALPY
+
+ actualStream(portMoistAir_a.h_outflow) = cp_Air*(T - T_ref) + X_Steam*(r_Steam + cp_Steam*(T -
+ T_ref)) + X_Water*cp_Water*(T - T_ref);
+
+ X = actualStream(portMoistAir_a.X_outflow);
+
+ dynamicViscosity = HVAC.Volume.BaseClasses.DynamicViscosityMoistAir(T,
+ X_Steam);
+
+ annotation (Documentation(info="
+Overview
+Two Port Model for Moist Air with fluid propoerties at port a
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics));
+ end TwoPortMoistAirFluidprops;
+
+ partial model TwoPortMoistAirTransportFluidprops
+ "Base class for tranport of Moist Air with all fluid properties"
+ extends Interfaces.TwoPortMoistAirTransport;
+ import Modelica.Constants.R;
+ outer BaseParameters baseParameters "System properties";
+
+ // PARAMETERS FOR WATER:
+
+ protected
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Water=baseParameters.cp_Water
+ "Specific heat capacity of liquid water";
+
+ // PARAMETERS FOR STEAM:
+
+ parameter Modelica.SIunits.MolarMass M_Steam = baseParameters.M_Steam
+ "Molar Mass of Steam";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Steam=baseParameters.cp_Steam
+ "Specific heat capacity of Steam";
+ parameter Modelica.SIunits.SpecificEnthalpy r_Steam=baseParameters.r_Steam
+ "Specific enthalpy of vaporisation";
+
+ // PARAMETERS FOR DRY AIR:
+
+ parameter Modelica.SIunits.MolarMass M_Air=baseParameters.M_Air
+ "Molar Mass of Dry Air";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Air=baseParameters.cp_Air
+ "Specific heat capacity of Dry Air";
+
+ public
+ parameter Modelica.SIunits.Temperature T_ref=baseParameters.T_ref
+ "Reference temperature in K";
+ Modelica.SIunits.Temperature T "Temperature close to the sensor in K";
+ Modelica.SIunits.Pressure p "Pressure at Sensor";
+ Modelica.SIunits.Pressure p_Steam "Pressure of Steam at Sensor";
+ Modelica.SIunits.Pressure p_Air "Pressure of Air at Sensor";
+ Modelica.SIunits.Pressure p_Saturation
+ "Saturation Pressure of Steam at Sensor";
+ Modelica.SIunits.Density rho_MoistAir "Density of Moist Air";
+ Modelica.SIunits.Density rho_Air(start = 1) "Density of Dry Air";
+ Modelica.SIunits.Density rho_Steam(start = 1) "Density of Steam";
+
+ Real X(min=0)
+ "mass fractions of water (liquid and steam) to dry air m_w/m_a in Sensor";
+ Real X_Steam(min=0) "mass fractions of steam to dry air m_w/m_a in Sensor";
+ Real X_Water(min=0)
+ "mass fractions of liquid water to dry air m_w/m_a in Sensor";
+ Real X_Saturation(min=0)
+ "saturation mass fractions of water to dry air m_w/m_a in Sensor";
+
+ Modelica.SIunits.DynamicViscosity dynamicViscosity
+ "dynamic viscosity of moist air";
+
+ equation
+ // Pressure
+ p = portMoistAir_a.p;
+
+ p = p_Steam + p_Air;
+
+ p_Steam = R/M_Steam*rho_Steam*T;
+ p_Air = R/M_Air*rho_Air*T;
+
+ p_Saturation = HVAC.Volume.BaseClasses.SaturationPressureSteam(T);
+
+ rho_MoistAir = rho_Air*(1 + X_Steam + X_Water);
+
+ // X
+
+ X_Steam = rho_Steam/rho_Air;
+
+ X_Saturation = M_Steam/M_Air*p_Saturation/(p - p_Saturation);
+
+ X_Steam = min(X_Saturation, X);
+
+ X_Water = max(X - X_Saturation, 0);
+
+ // ENTHALPY
+
+ actualStream(portMoistAir_a.h_outflow) = cp_Air*(T - T_ref) + X_Steam*(r_Steam + cp_Steam*(T -
+ T_ref)) + X_Water*cp_Water*(T - T_ref);
+
+ X = actualStream(portMoistAir_a.X_outflow);
+
+ dynamicViscosity = HVAC.Volume.BaseClasses.DynamicViscosityMoistAir(T,
+ X_Steam);
+
+ annotation (Documentation(info="
+Overview
+Two Port Model for Moist Air with transport equations and fluid properties at port a, no influence of fluid.
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics));
+ end TwoPortMoistAirTransportFluidprops;
+
+ partial model FourPortMoistAir "Component with four moist air ports"
+ Modelica.SIunits.Pressure dp[2]
+ "Pressure drop between the two ports (= port_a.p - port_b.p)";
+
+ Interfaces.PortMoistAir_a port_1a
+ annotation (Placement(transformation(extent={{-110,50},{-90,70}})));
+ Interfaces.PortMoistAir_b port_1b
+ annotation (Placement(transformation(extent={{-110,-70},{-90,-50}})));
+ Interfaces.PortMoistAir_a port_2a annotation (Placement(transformation(extent=
+ {{90,-70},{110,-50}}), iconTransformation(extent={{90,-70},{110,-50}})));
+ Interfaces.PortMoistAir_b port_2b annotation (Placement(transformation(
+ extent={{90,50},{110,70}}), iconTransformation(extent={{90,50},{110,70}})));
+
+ equation
+ dp[1] = port_1a.p - port_1b.p;
+ dp[2] = port_2a.p - port_2b.p;
+
+ annotation (Icon(graphics), Diagram(coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}}),
+ graphics),
+ Documentation(info="
+Overview
+Two Port Model for Moist Air
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end FourPortMoistAir;
+
+end Interfaces;
diff --git a/AixLib/HVAC/OFD.mo b/AixLib/HVAC/OFD.mo
new file mode 100644
index 0000000000..439a7e4ceb
--- /dev/null
+++ b/AixLib/HVAC/OFD.mo
@@ -0,0 +1,1212 @@
+within AixLib.HVAC;
+package OFD "One family dweling as example application"
+ extends Modelica.Icons.Package;
+
+ package Hydraulics
+ extends Modelica.Icons.Package;
+ model GroundFloor
+ import AixLib;
+
+ //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_thWC=2.5 "L2 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true));
+ parameter Modelica.SIunits.Length Length_thCo1=2.3 "L3 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true,joinNext = true));
+ parameter Modelica.SIunits.Length Length_thCo2=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_toWC=2 "l4 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true));
+ parameter Modelica.SIunits.Length Length_toCo=0.5 "l3 " annotation (Dialog(group = "Pipe lengths", descriptionLabel = true, joinNext = true));
+ parameter Modelica.SIunits.Length Length_toHo=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.StandardOFD_EnEV2009.Livingroom()
+ "Livingroom"
+ annotation (Dialog(group="Radiators", descriptionLabel=true));
+
+ parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition
+ Type_Radiator_Hobby=
+ AixLib.DataBase.Radiators.StandardOFD_EnEV2009.Hobby() "Hobby"
+ annotation (Dialog(group="Radiators", descriptionLabel=true));
+ parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition
+ Type_Radiator_Corridor=
+ AixLib.DataBase.Radiators.StandardOFD_EnEV2009.Corridor() "Corridor"
+ annotation (Dialog(group="Radiators", descriptionLabel=true));
+ parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition
+ Type_Radiator_WC=AixLib.DataBase.Radiators.StandardOFD_EnEV2009.WC() "WC"
+ annotation (Dialog(group="Radiators", descriptionLabel=true));
+ parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition
+ Type_Radiator_Kitchen=
+ AixLib.DataBase.Radiators.StandardOFD_EnEV2009.Kitchen() "Kitchen"
+ annotation (Dialog(group="Radiators", descriptionLabel=true));
+
+ Radiators.Radiator radiatorKitchen(RadiatorType=Type_Radiator_Kitchen)
+ annotation (Placement(transformation(extent={{-89,-83},{-106,-66}})));
+
+ Radiators.Radiator radiatorWC(RadiatorType=
+ Type_Radiator_WC)
+ annotation (Placement(transformation(extent={{83,-48},{100,-31}})));
+
+ HVAC.Valves.ThermostaticValve valveKitchen(Kvs=0.41, Kv_setT=0.262)
+ annotation (Placement(transformation(extent={{-67,-82.5},{-82,-66.5}})));
+
+ Radiators.Radiator radiatorLiving(RadiatorType=
+ Type_Radiator_Livingroom)
+ annotation (Placement(transformation(extent={{-95,-5},{-113,13}})));
+ Radiators.Radiator radiatorHobby(RadiatorType=Type_Radiator_Hobby)
+ annotation (Placement(transformation(extent={{78,72},{94,88}})));
+ Radiators.Radiator radiatorCorridor(RadiatorType=
+ Type_Radiator_Corridor)
+ annotation (Placement(transformation(extent={{86,33},{101,48}})));
+
+ Valves.ThermostaticValve valveWC(Kvs=0.24,
+ Kv_setT=0.162)
+ annotation (Placement(transformation(extent={{38,-47},{50,-31}})));
+ Valves.ThermostaticValve valveLiving(Kvs=1.43,
+ Kv_setT=0.4)
+ annotation (Placement(transformation(extent={{-67,-4},{-79,12}})));
+
+ HVAC.Valves.ThermostaticValve valveCorridor(Kvs=0.16, Kv_setT=0.088)
+ annotation (Placement(transformation(extent={{64,32},{76,48}})));
+
+ HVAC.Valves.ThermostaticValve valveHobby(Kvs=0.24, Kv_setT=0.182)
+ annotation (Placement(transformation(extent={{49,74},{60,87}})));
+ Pipes.StaticPipe thStF(D=Diam_Main, l=Length_thSt)
+ "through the storage room, flow stream"
+ annotation (Placement(transformation(extent={{57,-85},{40,-74}})));
+ 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})));
+ Pipes.StaticPipe thStR(D=Diam_Main, l=Length_thSt)
+ "through the storage room, return stream"
+ annotation (Placement(transformation(extent={{40,-102},{58,-90}})));
+ Pipes.StaticPipe toKiR(D=Diam_Sec, l=Length_toKi)
+ "to kitchen, return stream" annotation (Placement(transformation(
+ extent={{-72,-102},{-56,-90}})));
+ Pipes.StaticPipe thWCF(D=Diam_Main, l=Length_thWC)
+ "through WC, flow stream"
+ annotation (Placement(transformation(
+ extent={{8,4.5},{-8,-4.5}},
+ rotation=270,
+ origin={-4.5,-62})));
+ Pipes.StaticPipe thWCR(D=Diam_Main, l=Length_thWC)
+ "through WC, return stream" annotation (Placement(transformation(
+ extent={{8.75,-4.25},{-8.75,4.25}},
+ rotation=90,
+ origin={-18.25,-62.75})));
+ Pipes.StaticPipe thCo1R(D=Diam_Main, l=Length_thCo1)
+ "through corridor 1, return stream" annotation (Placement(
+ transformation(
+ extent={{6.5,-5},{-6.5,5}},
+ rotation=90,
+ origin={-18,-27.5})));
+ Pipes.StaticPipe thCo1F(D=Diam_Main, l=Length_thCo1)
+ "through Corridor 1, flow stream" annotation (Placement(
+ transformation(
+ extent={{6.5,5},{-6.5,-5}},
+ rotation=270,
+ origin={-5,-26.5})));
+ Pipes.StaticPipe toWCF(D=Diam_Sec, l=Length_toWC)
+ "to WC, flow stream"
+ annotation (Placement(transformation(
+ extent={{-8.5,4.5},{8.5,-4.5}},
+ rotation=0,
+ origin={18.5,-38.5})));
+ Pipes.StaticPipe toWCR(D=Diam_Sec, l=Length_toWC)
+ "to WC, return stream"
+ annotation (Placement(transformation(
+ extent={{8.5,4.5},{-8.5,-4.5}},
+ rotation=0,
+ origin={18.5,-48.5})));
+ 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}})));
+ 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}})));
+ Pipes.StaticPipe toCoF(D=Diam_Sec, l=Length_toCo)
+ "to corridor , flow stream" annotation (Placement(transformation(
+ extent={{-8.5,4.5},{8.5,-4.5}},
+ rotation=0,
+ origin={45.5,40.5})));
+ Pipes.StaticPipe toCoR(D=Diam_Sec, l=Length_toCo)
+ "to corridor, return stream" annotation (Placement(transformation(
+ extent={{7.5,4.5},{-7.5,-4.5}},
+ rotation=0,
+ origin={47.5,27})));
+ Pipes.StaticPipe thCo2F(D=Diam_Main, l=Length_thCo2)
+ "through Corridor 2, flow stream" annotation (Placement(
+ transformation(
+ extent={{7,5},{-7,-5}},
+ rotation=270,
+ origin={-5,13})));
+ Pipes.StaticPipe thCoR2(D=Diam_Main, l=Length_thCo2)
+ "through corridor 2, return stream" annotation (Placement(
+ transformation(
+ extent={{7.5,-5},{-7.5,5}},
+ rotation=90,
+ origin={-19,12.5})));
+ Pipes.StaticPipe toHoF(D=Diam_Sec, l=Length_toHo)
+ "to hobby , flow stream" annotation (Placement(transformation(
+ extent={{-6.5,4.5},{6.5,-4.5}},
+ rotation=0,
+ origin={23.5,80.5})));
+ Pipes.StaticPipe toHoR(D=Diam_Sec, l=Length_toHo)
+ "to hobby, return stream" annotation (Placement(transformation(
+ extent={{6.5,4.5},{-6.5,-4.5}},
+ rotation=0,
+ origin={20.5,66})));
+ 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})));
+ 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})));
+ 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}})));
+ 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}})));
+ Interfaces.RadPort Rad_Hobby
+ annotation (Placement(transformation(extent={{128,88},{146,106}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a
+ Con_Hobby
+ annotation (Placement(transformation(extent={{130,64},{146,82}})));
+ Interfaces.RadPort Rad_Corridor
+ annotation (Placement(transformation(extent={{130,39},{150,59}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a
+ Con_Corridor
+ annotation (Placement(transformation(extent={{131,17},{146,34}})));
+ Interfaces.RadPort Rad_WC
+ annotation (Placement(transformation(extent={{128,-38},{148,-18}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a Con_WC
+ annotation (Placement(transformation(extent={{129,-59},{148,-41}})));
+ Modelica.Blocks.Interfaces.RealInput TSet_GF[5] annotation (Placement(
+ transformation(extent={{-123,78},{-95,108}}),iconTransformation(extent={{-10.5,
+ -12},{10.5,12}},
+ rotation=270,
+ origin={-105.5,96})));
+ HydraulicResistances.HydraulicResistance HydRes_InFl(
+ zeta=zeta_bend, D=Diam_Main) "hydraulic resistance in floor"
+ annotation (Placement(transformation(extent={{24,-84},{10,-75}})));
+ HydraulicResistances.HydraulicResistance HydRes_RadKi(zeta=3*
+ zeta_bend, D=Diam_Sec) annotation (Placement(transformation(
+ extent={{-113,-100.5},{-99,-91.5}})));
+ 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})));
+ HydraulicResistances.HydraulicResistance HydRes_RadWC(
+ zeta=2*zeta_bend, D=Diam_Sec)
+ annotation (Placement(transformation(extent={{67,-53},{57,-44}})));
+ HydraulicResistances.HydraulicResistance HydRes_RadLi(
+ zeta=3*zeta_bend, D=Diam_Sec)
+ annotation (Placement(transformation(extent={{-116,-21},{-102,-12}})));
+ HydraulicResistances.HydraulicResistance HydRes_RadCor(zeta=2*
+ zeta_bend, D=Diam_Sec) annotation (Placement(transformation(
+ extent={{84,22.5},{74,31.5}})));
+ HydraulicResistances.HydraulicResistance HydRes_RadHo(zeta=3*
+ zeta_bend, D=Diam_Sec) annotation (Placement(transformation(
+ extent={{74,61.5},{60,70.5}})));
+
+ public
+ Modelica.Blocks.Interfaces.RealInput TIs_GF[5] annotation (Placement(
+ transformation(extent={{-29,80},{-58,109}}), iconTransformation(extent={{-10.5,
+ -12},{10.5,12}},
+ rotation=270,
+ origin={-41.5,96})));
+ equation
+ connect(radiatorLiving.port_a, valveLiving.port_b) annotation (Line(
+ points={{-95.72,4},{-79,4}},
+ color={255,0,0},
+ smooth=Smooth.None,
+ thickness=0.5));
+
+ connect(valveWC.port_b, radiatorWC.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(valveCorridor.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(valveHobby.port_b, radiatorHobby.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(toWCF.port_b, valveWC.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(toCoF.port_b, valveCorridor.port_a) annotation (Line(
+ points={{54,40.5},{56,40},{64,40}},
+ color={255,0,0},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(toHoF.port_b, valveHobby.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, valveLiving.port_a) annotation (Line(
+ points={{-53.5,3},{-53.5,4},{-67,4}},
+ color={255,0,0},
+ thickness=0.5,
+ smooth=Smooth.None));
+
+ connect(valveKitchen.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, valveKitchen.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(toWCR.port_a, HydRes_RadWC.port_b) annotation (Line(
+ points={{27,-48.5},{57,-48.5}},
+ color={0,128,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(HydRes_RadWC.port_a, radiatorWC.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, radiatorLiving.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(toCoR.port_a, HydRes_RadCor.port_b) annotation (Line(
+ points={{55,27},{74,27}},
+ color={0,128,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(HydRes_RadCor.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(toHoR.port_a, HydRes_RadHo.port_b) annotation (Line(
+ points={{27,66},{60,66}},
+ color={0,128,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(HydRes_RadHo.port_a, radiatorHobby.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, thWCF.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(radiatorWC.convPort, Con_WC) annotation (Line(
+ points={{87.93,-33.04},{88,-33.04},{88,-33},{99,-33},{119,-33},{119,
+ -50},{138.5,-50}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(radiatorWC.radPort, Rad_WC) annotation (Line(
+ points={{94.9,-32.87},{94.9,-28},{138,-28}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(radiatorCorridor.radPort, Rad_Corridor) annotation (Line(
+ points={{96.5,46.35},{96.5,49},{140,49}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(radiatorCorridor.convPort, Con_Corridor) annotation (Line(
+ points={{90.35,46.2},{90,46.2},{90,46},{113,46},{113,25.5},{126,25.5},
+ {138.5,25.5}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(radiatorHobby.convPort, Con_Hobby) annotation (Line(
+ points={{82.64,86.08},{82.64,87},{82.64,91},{98,91},{119,91},{119,73},
+ {138,73}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(radiatorHobby.radPort, Rad_Hobby) annotation (Line(
+ points={{89.2,86.24},{89.2,97},{137,97}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(radiatorLiving.radPort, Rad_Livingroom) annotation (Line(
+ points={{-107.6,11.02},{-107.6,11},{-108,11},{-108,11},{-131,11},{
+ -131,40},{-131,40},{-131,46},{-136,46},{-136,46.5},{-140,46.5}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(radiatorLiving.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(thWCR.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(thCo1R.port_b, thWCR.port_a) annotation (Line(
+ points={{-18,-34},{-18,-54},{-18.25,-54}},
+ color={0,127,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(thCoR2.port_b, thCo1R.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, thCo1R.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(toHoR.port_b, thCoR2.port_a) annotation (Line(
+ points={{14,66},{-19,66},{-19,20}},
+ color={0,127,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(toCoR.port_b, thCoR2.port_a) annotation (Line(
+ points={{40,27},{-19,27},{-19,20}},
+ color={0,127,255},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(toWCR.port_b, thWCR.port_a) annotation (Line(
+ points={{10,-48.5},{-18,-48.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(thWCF.port_b, toWCF.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(thWCF.port_b, thCo1F.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(thCo1F.port_b, thCo2F.port_a) annotation (Line(
+ points={{-5,-20},{-5,6}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(thCo2F.port_b, toCoF.port_a) annotation (Line(
+ points={{-5,20},{-5,40.5},{37,40.5}},
+ color={255,0,0},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(thCo2F.port_b, toHoF.port_a) annotation (Line(
+ points={{-5,20},{-5,80.5},{17,80.5}},
+ color={255,0,0},
+ smooth=Smooth.None,
+ thickness=0.5));
+ connect(thCo1F.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(valveHobby.T_setRoom, TSet_GF[2]) annotation (Line(
+ points={{57.58,86.87},{57.58,87},{-109,87}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(valveCorridor.T_setRoom, TSet_GF[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(valveWC.T_setRoom, TSet_GF[4]) annotation (Line(
+ points={{47.36,-31.16},{47.36,-7},{18,-7},{18,29},{-76,29},{-76,99},{
+ -93,99},{-93,99},{-109,99}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(valveKitchen.T_setRoom, TSet_GF[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(valveLiving.T_setRoom, TSet_GF[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(valveHobby.T_room, TIs_GF[2]) annotation (Line(
+ points={{50.98,86.87},{50.98,87},{-76,87},{-76,95},{-43.5,95},{-43.5,
+ 88.7}},
+ color={0,0,127},
+ smooth=Smooth.None));
+
+ connect(valveCorridor.T_room, TIs_GF[3]) annotation (Line(
+ points={{66.16,47.84},{66.16,57},{-76,57},{-76,95},{-60,95},{-60,94.5},
+ {-43.5,94.5}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(valveWC.T_room, TIs_GF[4]) annotation (Line(
+ points={{40.16,-31.16},{40.16,-7},{18,-7},{18,29},{-76,29},{-76,100.3},
+ {-43.5,100.3}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(valveKitchen.T_room, TIs_GF[5]) annotation (Line(
+ points={{-69.7,-66.66},{-69.7,-62},{-76,-62},{-76,106},{-56,106},{-56,
+ 106.1},{-43.5,106.1}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(TIs_GF[1], valveLiving.T_room) annotation (Line(
+ points={{-43.5,82.9},{-76,82.9},{-76,20},{-69.16,20},{-69.16,11.84}},
+ color={0,0,127},
+ smooth=Smooth.None));
+
+ annotation (__Dymola_Images(Parameters(source="Images/OFD/GroundFloor_Hydraulics.png")),
+ 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={{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="WC/Storage"),
+ Text(
+ extent={{-27,56},{80,43}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid,
+ textString="Corridor"),
+ Text(
+ extent={{-34,100},{73,87}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid,
+ textString="Hobby")}),Icon(coordinateSystem(
+ preserveAspectRatio=false,
+ 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={{-124,119},{-84,111}},
+ lineColor={0,0,0},
+ lineThickness=0.5,
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid,
+ textString="Set"),
+ Text(
+ extent={{-61,118},{-21,110}},
+ lineColor={0,0,0},
+ lineThickness=0.5,
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid,
+ textString="Is")}),
+ Documentation(revisions="
+
+- November 25, 2013 by Ana Constantin:
Implemented
+
+", info="
+Overview
+This model reflects the heat distribution and transfer of a full floor for a one-family-dwelling. It focuses on thermohydraulics, building physics can be connected via heat ports.
+Level of Development
+
+Concept
+The model is based on a specific one-family-dwelling and thus only reflects the thermohydraulic behavior of this specific building. The building hydraulics are thought as a reference example for model and technology comparisons.
+Example Results
+AixLib.HVAC.OFD.Examples.GroundfloorBoiler
+AixLib.HVAC.OFD.Examples.GroundfloorHeatPump
+"));
+ end GroundFloor;
+
+ end Hydraulics;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+ model GroundfloorBoiler
+ import AixLib;
+ extends Modelica.Icons.Example;
+ Pumps.Pump pump(
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ V_flow_max=2,
+ ControlStrategy=2,
+ V_flow(fixed=false, start=0.01),
+ Head(fixed=false, start=1))
+ annotation (Placement(transformation(extent={{86,-16},{66,-36}})));
+ Pipes.StaticPipe
+ Flow(
+ D=0.016,
+ l=2,
+ p(start=4000))
+ annotation (Placement(transformation(extent={{20,-18},{40,2}})));
+ Pipes.StaticPipe
+ Return(
+ D=0.016,
+ l=2,
+ p(start=4000))
+ annotation (Placement(transformation(extent={{40,-36},{20,-16}})));
+ Modelica.Blocks.Sources.BooleanConstant
+ nightSignal(k=false)
+ annotation (Placement(transformation(extent={{42,-58},{62,-38}})));
+ inner BaseParameters baseParameters(T0=298.15)
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_p pointFixedPressure(use_p_in=false)
+ annotation (Placement(transformation(extent={{-7,-7},{7,7}},
+ rotation=90,
+ origin={112,-39})));
+ Modelica.Blocks.Sources.Constant roomsSetTemp[5](k={293.15,293.15,293.15,291.15,
+ 293.15})
+ annotation (Placement(transformation(extent={{18,28},{38,48}})));
+ HeatGeneration.Boiler boiler(volume(T(start=328.15, fixed=true)))
+ annotation (Placement(transformation(extent={{-42,-18},{-22,2}})));
+ Modelica.Blocks.Sources.Constant sourceSetTemp_Boiler(k=273.15 + 55)
+ annotation (Placement(transformation(extent={{-16,14},{-36,34}})));
+ Hydraulics.GroundFloor groundFloor(
+ toWCF(p(start=100)),
+ toWCR(p(start=100)),
+ thCo2F(p(start=100)),
+ thCoR2(p(start=100)),
+ valveWC(p(start=1000)),
+ valveLiving(p(start=1000)),
+ valveHobby(p(start=1000)),
+ toHoF(p(start=100)),
+ toHoR(p(start=100)),
+ thCo1F(p(start=100)),
+ thCo1R(p(start=100)),
+ toCoR(p(start=100)),
+ toKiR(p(start=100)),
+ thWCF(p(start=100)),
+ thWCR(p(start=100)),
+ toLiF(p(start=100)),
+ toLiR(p(start=100)),
+ valveKitchen(p(start=1000)),
+ valveCorridor(p(start=1000)),
+ thStR(p(start=100)))
+ annotation (Placement(transformation(extent={{94,10},{130,38}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature prescribedHeatFlow_conv[5]
+ annotation (Placement(transformation(extent={{109,66},{129,86}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature prescribedHeatFlow_rad[5]
+ annotation (Placement(transformation(extent={{33,66},{53,86}})));
+ Modelica.Blocks.Sources.CombiTimeTable roomTemperaturesConv(
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
+ tableOnFile=true,
+ tableName="TemperaturesConv",
+ columns={2,3,4,5,6},
+ offset={0},
+ fileName=
+ "modelica://AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesConv.mat")
+ annotation (Placement(transformation(extent={{71,66},{91,86}})));
+ Modelica.Blocks.Sources.CombiTimeTable roomTemperaturesRad(
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
+ tableOnFile=true,
+ tableName="TemperaturesRad",
+ columns={2,3,4,5,6},
+ offset={0},
+ fileName=
+ "modelica://AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesRad.mat")
+ annotation (Placement(transformation(extent={{1,66},{21,86}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{48,-18},{68,2}})));
+ equation
+ connect(boiler.port_b,Flow. port_a) annotation (Line(
+ points={{-22,-8},{20,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(sourceSetTemp_Boiler.y, boiler.T_set) annotation (Line(
+ points={{-37,24},{-50,24},{-50,-2},{-42.8,-2},{-42.8,-1}},
+ color={0,0,127},
+ smooth=Smooth.None));
+
+ connect(roomTemperaturesConv.y, prescribedHeatFlow_conv.T) annotation (
+ Line(
+ points={{92,76},{107,76}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Flow.port_b, temperatureSensor.port_a) annotation (Line(
+ points={{40,-8},{48,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, groundFloor.FLOW) annotation (Line(
+ points={{68,-8},{126.123,-8},{126.123,9.44}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Return.port_a, pump.port_b) annotation (Line(
+ points={{40,-26},{66,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Return.port_b, boiler.port_a) annotation (Line(
+ points={{20,-26},{-54,-26},{-54,-8},{-42,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(roomTemperaturesRad.y, prescribedHeatFlow_rad.T) annotation (Line(
+ points={{22,76},{31,76}},
+ color={0,0,127},
+ smooth=Smooth.Bezier));
+ connect(nightSignal.y, pump.IsNight) annotation (Line(
+ points={{63,-48},{76,-48},{76,-36.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(roomsSetTemp.y, groundFloor.TSet_GF) annotation (Line(
+ points={{39,38},{56,38},{56,46},{97.3923,46},{97.3923,37.44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(groundFloor.RETURN, pump.port_a) annotation (Line(
+ points={{122.523,9.44},{122.523,-26},{86,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pointFixedPressure.port_a, pump.port_a) annotation (Line(
+ points={{112,-32},{112,-26},{86,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(roomTemperaturesConv.y, groundFloor.TIs_GF) annotation (Line(
+ points={{92,76},{98,76},{98,60},{106.254,60},{106.254,37.44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[1].port, groundFloor.Rad_Livingroom)
+ annotation (Line(
+ points={{53,76},{64,76},{64,30.51},{92.6154,30.51}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[2].port, groundFloor.Rad_Hobby) annotation (
+ Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,37.58},{130.969,37.58}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[3].port, groundFloor.Rad_Corridor) annotation (
+ Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,30.86},{131.385,30.86}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[4].port, groundFloor.Rad_WC) annotation (Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,20.08},{131.108,20.08}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[5].port, groundFloor.Rad_Kitchen) annotation (
+ Line(
+ points={{53,76},{64,76},{64,18.12},{92.9615,18.12}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[1].port, groundFloor.Con_Livingroom)
+ annotation (Line(
+ points={{129,76},{140,76},{140,52},{64,52},{64,28.41},{92.6846,28.41}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[2].port, groundFloor.Con_Hobby) annotation (
+ Line(
+ points={{129,76},{140,76},{140,34.22},{131.108,34.22}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[3].port, groundFloor.Con_Corridor)
+ annotation (Line(
+ points={{129,76},{140,76},{140,27.57},{131.177,27.57}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[4].port, groundFloor.Con_WC) annotation (Line(
+ points={{129,76},{140,76},{140,17},{131.177,17}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[5].port, groundFloor.Con_Kitchen) annotation (
+ Line(
+ points={{129,76},{140,76},{140,52},{64,52},{64,15.81},{92.8923,15.81}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(extent={{-100,-100},{160,100}},
+ preserveAspectRatio=false), graphics={Text(
+ extent={{-40,-42},{98,-128}},
+ 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.
+In order for the over temperature calculation (if using logaritmic mean value) for the radiator to work we need: flow temperature > return temperature > room temperature.
+Initialize temperature of boiler water volume (e.g. 55 °C) and set the value as fixed -> flow temperature. Lower initialisation temperatures also work, as long as they are higher than the initialization for the return temperature.
+Set initial temperature for system over room temperature, in order to calculate a correct over temperature (e.g. baseParameters.T0 = 25°C) -> return temperature.
+"), Rectangle(extent={{-58,42},{-8,-30}}, lineColor={255,0,0},
+ fillColor={255,255,85},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-48,46},{-18,42}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ textString="Heating System
+", fontSize=11),
+ Rectangle(extent={{-6,4},{132,-64}}, lineColor={255,0,0},
+ fillColor={170,255,170},
+ fillPattern=FillPattern.Solid),
+ Rectangle(extent={{-6,92},{150,6}}, lineColor={255,0,0},
+ fillColor={170,213,255},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{44,-70},{74,-74}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fontSize=11,
+ textString="Supply
+"), Text(
+ extent={{54,96},{84,92}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fontSize=11,
+ textString="Distribution and Consumption
+")}), Icon(coordinateSystem(extent={{-100,-100},{160,100}})),
+ experiment(
+ StopTime=86400,
+ Interval=60,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(revisions="
+04.11.2013, Moritz Lauster
+
+- Implemented full example
+
+26.11.2013, Ana Constantin
+
+- Implemented first draft
+
+", info="
+Overview
+This example illustrates the usage of the OFD-hydraulics model in combination with heating systems, e.g. a boiler.
+As the hydraulics correspond to a specific building, all boundray conditions have to be chosen accordingly. The heat demand and temperatures in the building have been pre-simulated in a building-physics simulation.
+"));
+ end GroundfloorBoiler;
+
+ model GroundfloorHeatPump
+ import AixLib;
+ extends Modelica.Icons.Example;
+ Pumps.Pump pump(
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ V_flow_max=2,
+ ControlStrategy=2,
+ V_flow(fixed=false, start=0.01),
+ Head(fixed=false, start=1))
+ annotation (Placement(transformation(extent={{86,-16},{66,-36}})));
+ Pipes.StaticPipe Flow(
+ D=0.016,
+ l=2,
+ p(start=4000))
+ annotation (Placement(transformation(extent={{20,-18},{40,2}})));
+ Pipes.StaticPipe Return(
+ D=0.016,
+ l=2,
+ p(start=4000))
+ annotation (Placement(transformation(extent={{40,-36},{20,-16}})));
+ Modelica.Blocks.Sources.BooleanConstant
+ nightSignal(k=false)
+ annotation (Placement(transformation(extent={{42,-58},{62,-38}})));
+ inner BaseParameters baseParameters(T0=298.15) annotation (Placement(
+ transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_p pointFixedPressure(use_p_in=false) annotation (
+ Placement(transformation(
+ extent={{-7,-7},{7,7}},
+ rotation=90,
+ origin={112,-39})));
+ Modelica.Blocks.Sources.Constant roomsSetTemp[5](k={293.15,293.15,293.15,291.15,
+ 293.15})
+ annotation (Placement(transformation(extent={{18,28},{38,48}})));
+ Modelica.Blocks.Sources.Constant sourceSetTemp_HeatPump(k=273.15 + 55)
+ annotation (Placement(transformation(extent={{-94,28},{-74,48}})));
+ Hydraulics.GroundFloor groundFloor(
+ toWCF(p(start=100)),
+ toWCR(p(start=100)),
+ thCo2F(p(start=100)),
+ thCoR2(p(start=100)),
+ valveWC(p(start=1000)),
+ valveLiving(p(start=1000)),
+ valveHobby(p(start=1000)),
+ toHoF(p(start=100)),
+ toHoR(p(start=100)),
+ thCo1F(p(start=100)),
+ thCo1R(p(start=100)),
+ toCoR(p(start=100)),
+ toKiR(p(start=100)),
+ thWCF(p(start=100)),
+ thWCR(p(start=100)),
+ toLiF(p(start=100)),
+ toLiR(p(start=100)),
+ valveKitchen(p(start=1000)),
+ valveCorridor(p(start=1000)),
+ thStR(p(start=100)))
+ annotation (Placement(transformation(extent={{94,10},{130,38}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature prescribedHeatFlow_conv[5]
+ annotation (Placement(transformation(extent={{109,66},{129,86}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature prescribedHeatFlow_rad[5]
+ annotation (Placement(transformation(extent={{33,66},{53,86}})));
+ Modelica.Blocks.Sources.CombiTimeTable roomTemperaturesConv(
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
+ tableOnFile=true,
+ tableName="TemperaturesConv",
+ columns={2,3,4,5,6},
+ offset={0},
+ fileName=
+ "modelica://AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesConv.mat")
+ annotation (Placement(transformation(extent={{71,66},{91,86}})));
+ Modelica.Blocks.Sources.CombiTimeTable roomTemperaturesRad(
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
+ tableOnFile=true,
+ tableName="TemperaturesRad",
+ columns={2,3,4,5,6},
+ offset={0},
+ fileName=
+ "modelica://AixLib/Resources/HVAC_OFD_ExampleData/TemperaturesRad.mat")
+ annotation (Placement(transformation(extent={{1,66},{21,86}})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{48,-18},{68,2}})));
+ HeatGeneration.HeatPump heatPump(
+ volumeCondenser(T(start=323.15, fixed=true)),
+ tablePower=[0.0,273.15,283.15; 308.15,1100,1150; 328.15,1600,1750],
+ tableHeatFlowCondenser=[0.0,273.15,283.15; 308.15,4800,6300; 328.15,
+ 4400,5750])
+ annotation (Placement(transformation(extent={{-38,-30},{-14,-4}})));
+
+ HeatGeneration.Utilities.FuelCounter fuelCounter
+ annotation (Placement(transformation(extent={{-23,-46},{-7,-34}})));
+ Pumps.Pump pump1
+ annotation (Placement(transformation(extent={{-56,-1},{-42,-15}})));
+ Pipes.StaticPipe pipe(D=0.01, l=2)
+ annotation (Placement(transformation(extent={{-80,-17},{-62,1}})));
+ Sources.Boundary_ph boundary_ph(h=4184*8) annotation (Placement(
+ transformation(extent={{-100,-15},{-86,-1}})));
+ Sources.Boundary_ph boundary_ph1 annotation (Placement(transformation(
+ extent={{-100,-33},{-86,-19}})));
+ Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=5)
+ annotation (Placement(transformation(extent={{-52,14},{-32,34}})));
+ equation
+
+ connect(roomTemperaturesConv.y, prescribedHeatFlow_conv.T) annotation (
+ Line(
+ points={{92,76},{107,76}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Flow.port_b, temperatureSensor.port_a) annotation (Line(
+ points={{40,-8},{48,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, groundFloor.FLOW) annotation (Line(
+ points={{68,-8},{126.123,-8},{126.123,9.44}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Return.port_a, pump.port_b) annotation (Line(
+ points={{40,-26},{66,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(roomTemperaturesRad.y, prescribedHeatFlow_rad.T) annotation (Line(
+ points={{22,76},{31,76}},
+ color={0,0,127},
+ smooth=Smooth.Bezier));
+ connect(nightSignal.y, pump.IsNight) annotation (Line(
+ points={{63,-48},{76,-48},{76,-36.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(roomsSetTemp.y, groundFloor.TSet_GF) annotation (Line(
+ points={{39,38},{56,38},{56,46},{97.3923,46},{97.3923,37.44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(groundFloor.RETURN, pump.port_a) annotation (Line(
+ points={{122.523,9.44},{122.523,-26},{86,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pointFixedPressure.port_a, pump.port_a) annotation (Line(
+ points={{112,-32},{112,-26},{86,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(roomTemperaturesConv.y, groundFloor.TIs_GF) annotation (Line(
+ points={{92,76},{98,76},{98,60},{106.254,60},{106.254,37.44}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[1].port, groundFloor.Rad_Livingroom)
+ annotation (Line(
+ points={{53,76},{64,76},{64,30.51},{92.6154,30.51}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[2].port, groundFloor.Rad_Hobby) annotation (
+ Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,37.58},{130.969,37.58}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[3].port, groundFloor.Rad_Corridor) annotation (
+ Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,30.86},{131.385,30.86}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[4].port, groundFloor.Rad_WC) annotation (Line(
+ points={{53,76},{64,76},{64,52},{140,52},{140,20.08},{131.108,20.08}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_rad[5].port, groundFloor.Rad_Kitchen) annotation (
+ Line(
+ points={{53,76},{64,76},{64,18.12},{92.9615,18.12}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[1].port, groundFloor.Con_Livingroom)
+ annotation (Line(
+ points={{129,76},{140,76},{140,52},{64,52},{64,28.41},{92.6846,28.41}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[2].port, groundFloor.Con_Hobby) annotation (
+ Line(
+ points={{129,76},{140,76},{140,34.22},{131.108,34.22}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[3].port, groundFloor.Con_Corridor)
+ annotation (Line(
+ points={{129,76},{140,76},{140,27.57},{131.177,27.57}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[4].port, groundFloor.Con_WC) annotation (Line(
+ points={{129,76},{140,76},{140,17},{131.177,17}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow_conv[5].port, groundFloor.Con_Kitchen) annotation (
+ Line(
+ points={{129,76},{140,76},{140,52},{64,52},{64,15.81},{92.8923,15.81}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(Flow.port_a, heatPump.port_b_sink) annotation (Line(
+ points={{20,-8},{0,-8},{0,-7.9},{-15.2,-7.9}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Return.port_b, heatPump.port_a_sink) annotation (Line(
+ points={{20,-26},{-8,-26},{-8,-26.1},{-15.2,-26.1}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(heatPump.Power, fuelCounter.fuel_in) annotation (Line(
+ points={{-26,-28.7},{-26,-40},{-23,-40}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pump1.port_b, heatPump.port_a_source) annotation (Line(
+ points={{-42,-8},{-40,-8},{-40,-7.9},{-36.8,-7.9}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_b, pump1.port_a) annotation (Line(
+ points={{-62,-8},{-56,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph.port_a, pipe.port_a) annotation (Line(
+ points={{-86,-8},{-80,-8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(heatPump.port_b_source, boundary_ph1.port_a) annotation (Line(
+ points={{-36.8,-26.1},{-80,-26.1},{-80,-26},{-86,-26}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(nightSignal.y, pump1.IsNight) annotation (Line(
+ points={{63,-48},{76,-48},{76,-66},{-49,-66},{-49,-15.14}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(sourceSetTemp_HeatPump.y, onOffController.reference) annotation (Line(
+ points={{-73,38},{-62,38},{-62,30},{-54,30}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(temperatureSensor.signal, onOffController.u) annotation (Line(
+ points={{58,2},{58,10},{-62,10},{-62,18},{-54,18}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(onOffController.y, heatPump.OnOff) annotation (Line(
+ points={{-31,24},{-26,24},{-26,-6.6}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(extent={{-100,-100},{160,100}},
+ preserveAspectRatio=false), graphics={Text(
+ extent={{-38,-42},{100,-128}},
+ 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.
+In order for the over temperature calculation (if using logaritmic mean value) for the radiator to work we need: flow temperature > return temperature > room temperature.
+Initialize temperature of heat pump condenser water volume (e.g. 55 °C) and set the value as fixed -> flow temperature. Lower initialisation temperatures also work, as long as they are higher than the initialization for the return temperature.
+Set initial temperature for system over room temperature, in order to calculate a correct over temperature (e.g. baseParameters.T0 = 25°C) -> return temperature.
+"), Rectangle(extent={{-100,56},{-8,-46}}, lineColor={255,0,0},
+ fillColor={255,255,85},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-70,61},{-40,57}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ textString="Heating System
+", fontSize=11),
+ Rectangle(extent={{-6,4},{132,-64}}, lineColor={255,0,0},
+ fillColor={170,255,170},
+ fillPattern=FillPattern.Solid),
+ Rectangle(extent={{-6,92},{150,6}}, lineColor={255,0,0},
+ fillColor={170,213,255},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{44,-70},{74,-74}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ textString="Hydraulics
+", fontSize=11),
+ Text(
+ extent={{54,96},{84,92}},
+ lineColor={255,0,0},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fontSize=11,
+ textString="Distribution and Consumption
+")}), Icon(coordinateSystem(extent={{-100,-100},{160,100}})),
+ experiment(
+ StopTime=86400,
+ Interval=60,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(revisions="
+04.11.2013, Moritz Lauster
+
+- Implemented full example
+
+", info="
+Overview
+This example illustrates the usage of the OFD-hydraulics model in combination with heating systems, e.g. a heat pump.
+As the hydraulics correspond to a specific building, all boundray conditions have to be chosen accordingly. The heat demand and temperatures in the building have been pre-simulated in a building-physics simulation.
+"));
+ end GroundfloorHeatPump;
+ end Examples;
+end OFD;
diff --git a/AixLib/HVAC/Office.mo b/AixLib/HVAC/Office.mo
new file mode 100644
index 0000000000..ff15ee1048
--- /dev/null
+++ b/AixLib/HVAC/Office.mo
@@ -0,0 +1,292 @@
+within AixLib.HVAC;
+package Office "Example application in an office building"
+ extends Modelica.Icons.Package;
+ package Room
+ extends Modelica.Icons.Package;
+ // use call to external cfd program to calulate air flow in a room
+
+ model ExternalCInterfaceModelica_NoChange
+ "Reads and writes Data from/to external C routine"
+ ////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////
+ public
+ parameter Real Rate=20.0 "Sampling rate"
+ annotation (Dialog(descriptionLabel=true, group="Connection"));
+ parameter Integer LENGTH=1
+ "Number of Variables to Send to External C Routine" annotation(Dialog(descriptionLabel=true,group="Connection"));
+ parameter String Stringer= "Connected to External C Code!"
+ "String to be sent to External C Code"
+ annotation (Dialog(descriptionLabel=true, group="Connection"));
+ parameter Modelica.SIunits.Time T_C=0.01
+ annotation (Dialog(descriptionLabel=true, group="Relaxation"));
+
+ parameter Real[ LENGTH] Initials "Initial values of output";
+
+ Modelica.Blocks.Interfaces.RealInput[LENGTH] u annotation (Placement(
+ transformation(extent={{-120,-20},{-80,20}}, rotation=0),
+ iconTransformation(extent={{-120,20},{-80,-20}})));
+ Modelica.Blocks.Interfaces.IntegerOutput Return
+ annotation (Placement(
+ transformation(
+ origin={0,-100},
+ extent={{-20,-20},{20,20}},
+ rotation=270)));
+
+ Modelica.Blocks.Interfaces.RealOutput y annotation (Placement(
+ transformation(extent={{80,40},{120,80}}, rotation=0),
+ iconTransformation(extent={{80,-80},{120,-40}})));
+ Modelica.Blocks.Interfaces.RealOutput[LENGTH] yArray annotation (Placement(
+ transformation(extent={{80,-80},{120,-40}},rotation=0),
+ iconTransformation(extent={{80,40},{120,80}})));
+
+ protected
+ Boolean Trigger "Boolean Trigger acivating external function call";
+ Real[LENGTH] PTYArray_raw
+ "Real value array received by external function or program";
+ Real PTY_raw "Real value received by external function or program";
+ //////////////////////////////////////////////////////////
+
+ Modelica.Blocks.Continuous.FirstOrder[LENGTH] PTYArray(each T=T_C,each initType=
+ Modelica.Blocks.Types.Init.InitialOutput,
+ y_start=Initials)
+ annotation (Placement(transformation(extent={{40,-70},{60,-50}})));
+ Modelica.Blocks.Continuous.FirstOrder PTY(each T=T_C,each initType=Modelica.Blocks.Types.Init.InitialOutput,
+ y_start=Initials[1])
+ annotation (Placement(transformation(extent={{40,50},{60,70}})));
+
+ initial algorithm
+
+ // initializing the variables of external function or program
+ (Return):=Functions.Starter(0.1,LENGTH,Stringer);
+
+ algorithm
+ when Trigger then
+ // call of external function, writing the value u
+ (Return):=Functions.Writer_NoChange(
+ u,LENGTH,Stringer);
+ // call of external function, reading the array PTYArray_raw
+ PTYArray_raw:=Functions.ReaderArray(u);
+
+ // call of external function, reading the single value of PTY_raw
+ PTY_raw:=Functions.Reader(1);
+
+ end when;
+ //////////////////////////////////////////////////////////
+ equation
+ Trigger = sample(0, Rate);
+
+ // relaxation of output, preventing unnecessary function calls of internal time steps
+ for i in 1:LENGTH loop
+ PTYArray[i].u= PTYArray_raw[i];
+ end for;
+
+ PTY.u=PTY_raw;
+
+ connect(PTYArray.y, yArray) annotation (Line(
+ points={{61,-60},{100,-60}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(PTY.y, y) annotation (Line(
+ points={{61,60},{100,60}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation ( Diagram(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics),
+ Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,255},
+ fillColor={175,175,175},
+ fillPattern=FillPattern.Solid), Text(
+ extent={{-74,66},{70,-74}},
+ lineColor={0,0,0},
+ fillColor={175,175,175},
+ fillPattern=FillPattern.Solid,
+ textString="C")}),
+ conversion(noneFromVersion=""),
+ Documentation(info="
+Overview
+Supplies access to external C functions.
+Level of Development
+
+Concept
+Input: Arbitrary real array.
+Output: Input value with no change according to sampling rate Rate
+The output can be supplied individually (reader) or in a vector (readerArray).
+reader(i) supplies value of array with index i
+readerArray supplies the complete array
+Corresponding code in ./Office/Code
+Known Limitations
+Interface requires a relaxation model to control the sampling rate.
+References
+Example Results
+AixLib.HVAC.Office.Examples.ExternalC
+",
+ revisions="
+
+ - Feb 26, 2014 by Bjoern Flieger:
Implemented
+
+
+"));
+ end ExternalCInterfaceModelica_NoChange;
+
+ package Functions
+ extends Modelica.Icons.Package;
+ function Starter
+ input Real dou "Real value to be sent to external program";
+ input Integer LENGTH "Integer value to be sent to external program";
+ input String Stringer "String to be sent to external program";
+ output Integer LengthOut
+ "Integer value to be received from external program";
+ external "C" LengthOut = starter(dou,LENGTH,Stringer);
+ annotation (Include="#include ",Library="ExternalC",
+ Documentation(revisions="
+
+ - Feb 26, 2014 by Bjoern Flieger:
Implemented
+
+
+", info="
+Overview
+Function for sending and receivings a value.
+"));
+ end Starter;
+ ////////////////////////////////////////////////////////////////////////////////
+ function Writer_NoChange
+ input Real[:] V "Real value to be sent to external program";
+ input Integer LENGTH "Integer value to be sent to external program";
+ input String Stringer "String to be sent to external program";
+ output Integer Const
+ "Integer value to be received from external program";
+ external "C" Const = writerNoChange(V, LENGTH, Stringer);
+ annotation (Include="#include ",Library="ExternalC",
+ Documentation(revisions="
+
+ - Feb 26, 2014 by Bjoern Flieger:
Implemented
+
+
+", info="
+Overview
+Function for wirting a value.
+"));
+ end Writer_NoChange;
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ function Reader
+ input Integer index "Integer value to be sent to external program";
+ output Real W "Real value to be received from external program";
+ external "C" W = reader(index);
+ annotation (Include="#include ",Library="ExternalC",
+ Documentation(revisions="
+
+ - Feb 26, 2014 by Bjoern Flieger:
Implemented
+
+
+", info="
+Overview
+Function for reading a value.
+"));
+ end Reader;
+ ////////////////////////////////////////////////////////////////////////////////
+ function ReaderArray
+ input Real H[:] "Integer array to be sent to external program";
+ output Real HBack[ size(H,1)]
+ "Real array to be received from external program";
+ external "C" readerArray(H,HBack,size(H,1));
+ annotation (Include="#include ",Library="ExternalC",
+ Documentation(revisions="
+
+ - Feb 26, 2014 by Bjoern Flieger:
Implemented
+
+
+", info="
+Overview
+Function for reading an array.
+"));
+ end ReaderArray;
+
+ end Functions;
+
+ end Room;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+
+ model ExternalC
+ extends Modelica.Icons.Example;
+
+ parameter Real Rate=1;
+
+ Room.ExternalCInterfaceModelica_NoChange externalC(
+ Stringer="Hello External C, I am Modelica",
+ Rate=Rate,
+ LENGTH=3,
+ Initials={0,1,-2})
+ annotation (Placement(transformation(extent={{0,-20},{40,20}})));
+ Modelica.Blocks.Sources.Sine sine(amplitude=3, freqHz=0.01)
+ annotation (Placement(transformation(extent={{-80,30},{-60,50}})));
+ Modelica.Blocks.Sources.Clock clock
+ annotation (Placement(transformation(extent={{20,60},{40,80}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ height=4,
+ duration=30,
+ startTime=40,
+ offset=1)
+ annotation (Placement(transformation(extent={{-80,-10},{-60,10}})));
+ Modelica.Blocks.Sources.Step step(
+ height=2,
+ startTime=50,
+ offset=-2)
+ annotation (Placement(transformation(extent={{-80,-50},{-60,-30}})));
+ equation
+
+ connect(sine.y, externalC.u[1]) annotation (Line(
+ points={{-59,40},{-30,40},{-30,2.66667},{0,2.66667}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(ramp.y, externalC.u[2]) annotation (Line(
+ points={{-59,0},{-30.5,0},{-30.5,-2.22045e-016},{0,-2.22045e-016}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(step.y, externalC.u[3]) annotation (Line(
+ points={{-59,-40},{-30,-40},{-30,-2},{0,-2},{0,-2.66667}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(extent={{-120,-100},{100,100}},
+ preserveAspectRatio=false), graphics={
+ Text(
+ extent={{-38,-36},{76,-66}},
+ lineColor={0,0,255},
+ textString="Send 3 different signals to external function/program"), Text(
+ extent={{-120,-68},{100,-108}},
+ lineColor={0,0,255},
+ textString="Header.h and ExternalC.lib from library directory Office\\Libs\\
+must be present in the current working directory!
+Alternatively the PATH and INCLUDE variables can be adjusted according to the specified location.
+")}), Icon(coordinateSystem(extent={{-120,-100},{100,100}})),
+ experiment(
+ StopTime=100,
+ Interval=0.1,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(revisions="
+24.01.14, Bjoern Flieger
+
+- Implemented full example
+
+23.01.14, Bjoern Flieger
+
+- Implemented first draft
+
+", info="
+Overview
+This example illustrates the usage of external C functions.
+"));
+ end ExternalC;
+
+ end Examples;
+end Office;
diff --git a/AixLib/HVAC/Pipes.mo b/AixLib/HVAC/Pipes.mo
new file mode 100644
index 0000000000..e2faebc0a0
--- /dev/null
+++ b/AixLib/HVAC/Pipes.mo
@@ -0,0 +1,222 @@
+within AixLib.HVAC;
+package Pipes "Models of pipes"
+ extends Modelica.Icons.Package;
+ model StaticPipe
+ extends Interfaces.TwoPort;
+
+ import Modelica.Math;
+
+ parameter Modelica.SIunits.Length D=0.05 "Diameter";
+ parameter Modelica.SIunits.Length l=1 "Length";
+ parameter Modelica.SIunits.Length e=2.5e-5 "Roughness";
+
+ Modelica.SIunits.ReynoldsNumber Re(nominal=1e5) "Reynolds number";
+ Real lambda2 "Modified friction factor";
+
+ equation
+ port_a.h_outflow = inStream(port_b.h_outflow);
+ port_b.h_outflow = inStream(port_a.h_outflow);
+
+ lambda2 = abs(p)*2*D^3*rho/(l*mu*mu);
+ Re = -2*sqrt(lambda2)*Math.log10(2.51/sqrt(lambda2+1e-10) + 0.27*(e/D));
+ m_flow = sign(p)*Modelica.Constants.pi/4*D*mu*Re;
+
+ annotation (Icon(graphics={ Rectangle(
+ extent={{-100,40},{100,-40}},
+ lineColor={0,0,0},
+ fillColor={95,95,95},
+ fillPattern=FillPattern.Solid), Rectangle(
+ extent={{-100,30},{100,-30}},
+ lineColor={0,0,0},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.HorizontalCylinder)}),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+",
+ info="
+Overview
+Model of a straight pipe with constant cross section and with steady-state mass, momentum and energy balances, i.e., the model does not store mass or energy.
+Level of Development
+
+Concept
+The model uses a modified friction factor to estimate the Reynolds number. Using Hagen–Poiseuille equation, the pressure drop and mass flow rate are calculated using the Reynolds number. The model is only valid for turbulent flow.
+Numerical Issues
+With the stream connectors the thermodynamic states on the ports are generally defined by models with storage or by sources placed upstream and downstream of the static pipe. Other non storage components in the flow path may yield to state transformation. Note that this generally leads to nonlinear equation systems if multiple static pipes, or other flow models without storage, are directly connected.
+Example Results
+AixLib.HVAC.Pipes.Examples.StaticPipe_Validation
+"));
+ end StaticPipe;
+
+ model Pipe
+ extends Interfaces.TwoPort;
+
+ import Modelica.Math;
+
+ parameter Modelica.SIunits.Length D=0.05 "Diameter";
+ parameter Modelica.SIunits.Length l=1 "Length";
+ parameter Modelica.SIunits.Length e=2.5e-5 "Roughness";
+
+ parameter Modelica.SIunits.Temperature T0=baseParameters.T0
+ "Initial temperature" annotation(Dialog(tab="Initialization"));
+
+ Modelica.SIunits.Temperature T "Temperature inside the CV";
+
+ protected
+ Modelica.SIunits.ReynoldsNumber Re(nominal=1e5) "Reynolds number";
+ Real lambda2 "Modified fanning friction factor";
+
+ parameter Modelica.SIunits.Temperature T_ref=baseParameters.T_ref;
+ parameter Modelica.SIunits.Mass m=Modelica.Constants.pi*D^2/4*l*rho
+ "Mass of the fluid in CV";
+ Modelica.SIunits.Energy U(start=m*cp*(T0 - T_ref)) "Internal energy";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b";
+
+ public
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatport annotation (
+ Placement(transformation(extent={{-10,40},{10,60}}), iconTransformation(
+ extent={{-10,40},{10,60}})));
+ equation
+ port_a.h_outflow = cp*(T-T_ref);
+ port_b.h_outflow = cp*(T-T_ref);
+ H_flow_a = port_a.m_flow*actualStream(port_a.h_outflow);
+ H_flow_b = port_b.m_flow*actualStream(port_b.h_outflow);
+
+ U = m * cp * (T-T_ref);
+ der(U) = heatport.Q_flow + H_flow_a + H_flow_b;
+ heatport.T = T;
+
+ lambda2 = abs(p)*2*D^3*rho/(l*mu*mu);
+ Re = -2*sqrt(lambda2)*Math.log10(2.51/sqrt(lambda2+1e-10) + 0.27*(e/D));
+ m_flow = sign(p)*Modelica.Constants.pi/4*D*mu*Re;
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}),
+ graphics={ Rectangle(
+ extent={{-100,40},{100,-40}},
+ lineColor={0,0,0},
+ fillColor={95,95,95},
+ fillPattern=FillPattern.Solid), Rectangle(
+ extent={{-100,30},{100,-30}},
+ lineColor={0,0,0},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.HorizontalCylinder)}),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+",
+ info="
+Overview
+Model of a straight pipe with mass, energy and momentum balances. It provides the complete balance equations for one-dimensional fluid flow.
+Level of Development
+
+Concept
+The model uses a modified friction factor to estimate the Reynolds number. Using Hagen–Poiseuille equation, the pressure drop and mass flow rate are calculated using the Reynolds number. The model is only valid for turbulent flow.
+For the energy balance, a differential equation is implemented for the whole pipe volume. Temperature of the volume is equal to the temperature at the heat port.
+Example Results
+AixLib.HVAC.Pipes.Examples.Pipe_Validation
+"));
+ end Pipe;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+ model StaticPipe_Validation
+ extends Modelica.Icons.Example;
+ StaticPipe
+ pipe(
+ l=10,
+ D=0.02412,
+ e=0.03135)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_ph boundary_ph(use_p_in=true)
+ annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
+ Sources.Boundary_ph boundary_ph1(use_p_in=false)
+ annotation (Placement(transformation(extent={{60,-10},{40,10}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ duration=1000,
+ offset=1.2e5,
+ height=6e6)
+ annotation (Placement(transformation(extent={{-100,-4},{-80,16}})));
+ equation
+ connect(boundary_ph.port_a, pipe.port_a) annotation (Line(
+ points={{-40,0},{-10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, pipe.port_b) annotation (Line(
+ points={{40,0},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(ramp.y, boundary_ph.p_in) annotation (Line(
+ points={{-79,6},{-62,6}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=1000, Interval=1),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+", info="
+Overview
+Simple example of the static pipe connected to two boundaries.
+
Concept
+The first boundary has a changing pressure and the second boundary has a fixed pressure. This results in changing of the mass flow and pressure drop in the pipe which can be observed in the results.
+"));
+ end StaticPipe_Validation;
+
+ model Pipe_Validation
+ extends Modelica.Icons.Example;
+ Pipe pipe(
+ l=10,
+ D=0.02412,
+ e=0.03135)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{-10,50},{10,70}})));
+ Sources.Boundary_ph boundary_ph(use_p_in=false, h=1e6)
+ annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
+ Sources.Boundary_ph boundary_ph1(use_p_in=false)
+ annotation (Placement(transformation(extent={{60,-10},{40,10}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow
+ prescribedHeatFlow
+ annotation (Placement(transformation(extent={{-38,20},{-18,40}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ height=1000,
+ duration=1000,
+ startTime=200)
+ annotation (Placement(transformation(extent={{-80,20},{-60,40}})));
+ equation
+ connect(boundary_ph.port_a, pipe.port_a) annotation (Line(
+ points={{-40,0},{-10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, pipe.port_b) annotation (Line(
+ points={{40,0},{10,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, pipe.heatport) annotation (Line(
+ points={{-18,30},{0,30},{0,5}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(ramp.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-59,30},{-38,30}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=1500, Interval=1),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+", info="
+Overview
+Simple example of the pipe connected to two boundaries and a heat source.
+
Concept
+The boundaries have different pressures resulting in a mass flow in the pipe. The pipe is connected to a heat source with variable heat flow. The change in internal energy and the temperature of the pipe can be observed.
+"));
+ end Pipe_Validation;
+ end Examples;
+end Pipes;
diff --git a/AixLib/HVAC/Pumps.mo b/AixLib/HVAC/Pumps.mo
new file mode 100644
index 0000000000..10fcdbff53
--- /dev/null
+++ b/AixLib/HVAC/Pumps.mo
@@ -0,0 +1,168 @@
+within AixLib.HVAC;
+package Pumps "Pump models"
+ extends Modelica.Icons.Package;
+ model Pump
+ import AixLib;
+
+ extends Interfaces.TwoPort;
+
+ parameter AixLib.DataBase.Pumps.MinMaxCharacteristicsBaseDataDefinition
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1()
+ "Head = f(V_flow) for minimal and maximal rotational speed"
+ annotation (choicesAllMatching=true);
+
+ parameter Integer ControlStrategy = 1 "Control Strategy" annotation (Dialog(group = "Control strategy"), choices( choice = 1
+ "dp-const", choice = 2 "dp-var", radioButtons = true));
+ parameter Modelica.SIunits.Height Head_max = 3
+ "Set head for the control strategy" annotation (Dialog(group = "Control strategy"));
+
+ parameter Real V_flow_max = 2 "Vmax in m3/h for the control strategy" annotation (Dialog(group = "Control strategy", enable = if ControlStrategy == 2 then true else false));
+
+ Modelica.SIunits.VolumeFlowRate V_flow( start = 0, min = 0)
+ "Volume flow rate through the pump";
+ Modelica.SIunits.Height Head( start = 0, min = 0) "Pumping head";
+
+ Modelica.Blocks.Tables.CombiTable1Ds table_minMaxCharacteristics(
+ tableOnFile=false,
+ columns={2,3},
+ table=MinMaxCharacteristics.minMaxHead)
+ "Table with Head = f(V_flow) min amd max characteristics for the pump"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Interfaces.BooleanInput IsNight annotation (Placement(
+ transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-2,100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={0,102})));
+ equation
+ // Enthalpie flow
+ port_a.h_outflow = inStream(port_b.h_outflow);
+ port_b.h_outflow = inStream(port_a.h_outflow);
+
+ // Set input to min max characteristics table
+ table_minMaxCharacteristics.u = V_flow * 3600;
+
+ if IsNight then //night mode active
+ Head = table_minMaxCharacteristics.y[1]; // minimal characteristic
+ else
+ if ControlStrategy == 1 then
+ Head = min(max(Head_max,table_minMaxCharacteristics.y[1]), table_minMaxCharacteristics.y[2]);//Set Head according to the control strategy
+ else
+ Head = min(max(0.5*Head_max + 0.5*Head_max/V_flow_max*V_flow*3600,table_minMaxCharacteristics.y[1]), table_minMaxCharacteristics.y[2]);//Set Head according to the control strategy
+ end if;
+ end if;
+
+ // Connect the pump variables with the variables of the two port model
+ V_flow = m_flow / rho;
+ Head = - p / (rho * Modelica.Constants.g_n);
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}),
+ graphics={
+ Ellipse(
+ extent={{-100,96},{100,-104}},
+ lineColor={0,0,0},
+ fillColor={0,127,0},
+ fillPattern=FillPattern.Solid), Polygon(
+ points={{-42,70},{78,-4},{-42,-78},{-42,70}},
+ lineColor={0,0,0},
+ smooth=Smooth.None,
+ fillColor={175,175,175},
+ fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics),
+ Documentation(revisions="
+01.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Simple table based pump model.
+Level of Development
+
+Concept
+Simple table based pump model with the following features:
+
+- Table for minimal and maximal characteristic
+- Choice between two control strategies: 1. dp-const; 2. dp-var
+- Input for switching to night mode. During night mode, the pump follows the minimal characteristic
+
+
Example Results
+AixLib.HVAC.Pumps.Examples.PumpHydraulicResistance_closedLoop
+"));
+ end Pump;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+
+ model PumpHydraulicResistance_closedLoop
+ "Example with pump, hydraulic resistance and pipes in a closed loop"
+ import AixLib;
+ extends Modelica.Icons.Example;
+ Pump pump(
+ V_flow(fixed=false),
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ V_flow_max=2,
+ ControlStrategy=2)
+ annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
+ HydraulicResistances.HydraulicResistance hydraulicResistance(zeta=2)
+ annotation (Placement(transformation(extent={{26,20},{46,40}})));
+ Pipes.StaticPipe
+ pipe(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{-4,20},{16,40}})));
+ Pipes.StaticPipe
+ pipe1(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{-12,-20},{-32,0}})));
+ Modelica.Blocks.Sources.BooleanPulse NightSignal(period=86400)
+ annotation (Placement(transformation(extent={{-60,60},{-40,80}})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{80,80},{100,100}})));
+ Sources.Boundary_p PointFixedPressure(use_p_in=false)
+ annotation (Placement(transformation(extent={{-100,20},{-80,40}})));
+ equation
+ connect(pump.port_b, pipe.port_a) annotation (Line(
+ points={{-20,30},{-4,30}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_b, hydraulicResistance.port_a) annotation (Line(
+ points={{16,30},{26,30}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(hydraulicResistance.port_b, pipe1.port_a) annotation (Line(
+ points={{46,30},{66,30},{66,-10},{-12,-10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, pump.port_a) annotation (Line(
+ points={{-32,-10},{-62,-10},{-62,30},{-40,30}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(NightSignal.y, pump.IsNight) annotation (Line(
+ points={{-39,70},{-30,70},{-30,40.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(PointFixedPressure.port_a, pump.port_a) annotation (Line(
+ points={{-80,30},{-40,30}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Text(
+ extent={{-124,74},{-62,44}},
+ lineColor={0,0,255},
+ textString="Always have
+a point of fixed pressure
+before a pump
+when building a closed loop")}),
+ experiment(StopTime=86400, Interval=60),
+ __Dymola_experimentSetupOutput,
+ Documentation(revisions="
+01.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Simple example with a pump, a hydraulic resistance, two pipes in a loop.
+
Concept
+Always have a point of fixed pressure before the pump in order to be able to solve the equation for the closed loop.
+With different control strategies for the pump, you have different dependecies of the head from the volume flow. For visualisation plot the head as a function of the volume flow.
+"));
+ end PumpHydraulicResistance_closedLoop;
+ end Examples;
+
+end Pumps;
diff --git a/AixLib/HVAC/Radiators.mo b/AixLib/HVAC/Radiators.mo
new file mode 100644
index 0000000000..fc48a2e3e1
--- /dev/null
+++ b/AixLib/HVAC/Radiators.mo
@@ -0,0 +1,439 @@
+within AixLib.HVAC;
+package Radiators "Contains a radiator model"
+ extends Modelica.Icons.Package;
+
+ model Radiator
+ import AixLib;
+
+ parameter AixLib.DataBase.Radiators.RadiatiorBaseDataDefinition
+ RadiatorType=AixLib.DataBase.Radiators.ThermX2_ProfilV_979W()
+ annotation (choicesAllMatching=true);
+
+ Sensors.TemperatureSensor T_flow
+ annotation (Placement(transformation(extent={{-78,-10},{-58,10}})));
+ Sensors.TemperatureSensor T_return
+ annotation (Placement(transformation(extent={{54,-10},{74,10}})));
+ Volume.Volume volume(V=RadiatorType.VolumeWater*0.001)
+ annotation (Placement(transformation(extent={{-8,-10},{12,10}})));
+ Interfaces.RadPort radPort
+ annotation (Placement(transformation(extent={{30,68},{50,88}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a convPort
+ annotation (Placement(transformation(extent={{-52,66},{-32,86}})));
+ // Variablen
+ Modelica.SIunits.Power Power "current power of radiator";
+ Modelica.SIunits.TemperatureDifference OverTemperature
+ "current over temperature";
+
+ protected
+ parameter Modelica.SIunits.TemperatureDifference OverTemperature_Norm = (RadiatorType.T_flow_nom - RadiatorType.T_return_nom) / Modelica.Math.log((RadiatorType.T_flow_nom - RadiatorType.T_room_nom)/(RadiatorType.T_return_nom - RadiatorType.T_room_nom))
+ "over temperature according to norm";
+
+ public
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow
+ annotation (Placement(transformation(extent={{-34,2},{-14,22}})));
+ Interfaces.Port_a port_a
+ annotation (Placement(transformation(extent={{-102,-10},{-82,10}})));
+ Interfaces.Port_b port_b
+ annotation (Placement(transformation(extent={{82,-10},{102,10}})));
+ equation
+
+ // Calculate the current over temperature
+
+ //This equation works well for educational purposes. The oevrtemperature calculation only works by correct initailization of the system tzemperatures.
+
+ // if (T_flow.signal - convPort.T) > 1e-5 or (T_return.signal - convPort.T) > 1e-5 then
+ // OverTemperature = (T_flow.signal - T_return.signal)
+ // / Modelica.Math.log((T_flow.signal - convPort.T)/(T_return.signal - convPort.T));
+ // else // for nummerical reasons
+ // OverTemperature = (T_flow.signal + T_return.signal)*0.5 - convPort.T;
+ // end if;
+
+ // This equation works better for stable equations, because the overtemperature can actually be directly calculated
+ OverTemperature = max(volume.heatPort.T - convPort.T,0.0); //the average radiator temperature is assumed to be the temperature of the volume, this avoids any division by zero and improves stability
+
+ //Calculate the current power
+ Power = RadiatorType.NominalPower * (OverTemperature/OverTemperature_Norm)^RadiatorType.Exponent;
+
+ // Distribute the power to the convective and radiative ports
+
+ //Extract the power from the water volume
+ prescribedHeatFlow.Q_flow = - Power;
+
+ //Set the convective power
+ convPort.Q_flow = - Power * (1 - RadiatorType.RadPercent);
+
+ //Set the radiative power
+ radPort.Q_flow = - Power * RadiatorType.RadPercent;
+
+ connect(prescribedHeatFlow.port, volume.heatPort) annotation (Line(
+ points={{-14,12},{2,12},{2,10}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(port_a, T_flow.port_a) annotation (Line(
+ points={{-92,0},{-78,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(T_flow.port_b, volume.port_a) annotation (Line(
+ points={{-58,0},{-8,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volume.port_b, T_return.port_a) annotation (Line(
+ points={{12,0},{54,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(T_return.port_b, port_b) annotation (Line(
+ points={{74,0},{92,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics={Text(
+ extent={{-80,-10},{-54,-18}},
+ lineColor={0,0,0},
+ lineThickness=1,
+ fillColor={255,0,0},
+ fillPattern=FillPattern.Solid,
+ textString="T_flow"), Text(
+ extent={{54,-10},{76,-18}},
+ lineColor={0,0,0},
+ lineThickness=1,
+ fillColor={255,0,0},
+ fillPattern=FillPattern.Solid,
+ textString="T_return"),
+ Rectangle(
+ extent={{-40,54},{40,26}},
+ lineColor={255,0,0},
+ lineThickness=1),
+ Text(
+ extent={{-34,52},{36,28}},
+ lineColor={255,0,0},
+ lineThickness=1,
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ textString="Heat transfer equations"),
+ Line(
+ points={{0,16},{0,24},{-2,22},{0,24},{2,22}},
+ color={255,0,0},
+ thickness=1,
+ smooth=Smooth.None),
+ Line(
+ points={{28,58},{34,68},{30,66},{34,68},{34,64}},
+ color={255,0,0},
+ thickness=1,
+ smooth=Smooth.None),
+ Line(
+ points={{-32,60},{-38,68},{-38,64},{-38,68},{-34,66}},
+ color={255,0,0},
+ thickness=1,
+ smooth=Smooth.None)}), Icon(graphics={
+ Rectangle(
+ extent={{-68,56},{-60,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-48,56},{-40,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-28,56},{-20,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-8,56},{0,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{12,56},{20,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{32,56},{40,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{52,56},{60,-74}},
+ lineColor={95,95,95},
+ fillColor={215,215,215},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-74,-60},{62,-70}},
+ lineColor={95,95,95},
+ fillColor={230,230,230},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-72,50},{64,40}},
+ lineColor={95,95,95},
+ fillColor={230,230,230},
+ fillPattern=FillPattern.Solid)}),
+ Documentation(revisions="
+13.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Simple model for a radiator with one water volume.
+Level of Development
+
+Concept
+The power is calculated according to the flow and return temperatures, the power and temperatures in the design case and the radiator exponent.
+The power is split between convective and radiative heat transfer.
+Example Results
+AixLib.HVAC.Radiators.Examples.PumpRadiatorValve
+AixLib.HVAC.Radiators.Examples.PumpRadiatorThermostaticValve
+"));
+ end Radiator;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+ model PumpRadiatorValve
+ import AixLib;
+ extends Modelica.Icons.Example;
+ Pumps.Pump pump(
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ V_flow_max=2,
+ ControlStrategy=2,
+ V_flow(fixed=false),
+ Head_max=2)
+ annotation (Placement(transformation(extent={{-54,10},{-34,30}})));
+ Pipes.StaticPipe
+ pipe(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{4,10},{24,30}})));
+ Pipes.StaticPipe
+ pipe1(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{-10,-30},{-30,-10}})));
+ Modelica.Blocks.Sources.BooleanConstant
+ NightSignal(k=false)
+ annotation (Placement(transformation(extent={{-76,50},{-56,70}})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_p PointFixedPressure(use_p_in=false)
+ annotation (Placement(transformation(extent={{-98,10},{-78,30}})));
+ Valves.SimpleValve simpleValve(Kvs=0.4)
+ annotation (Placement(transformation(extent={{30,10},{50,30}})));
+ Radiator radiator(RadiatorType=
+ AixLib.DataBase.Radiators.ThermX2_ProfilV_979W())
+ annotation (Placement(transformation(extent={{112,10},{134,30}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature AirTemp
+ annotation (Placement(transformation(extent={{100,58},{112,70}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature RadTemp
+ annotation (Placement(transformation(extent={{148,58},{136,70}})));
+ Modelica.Blocks.Sources.Constant Source_Temp(k=273.15 + 20)
+ annotation (Placement(transformation(extent={{60,80},{80,100}})));
+ Modelica.Blocks.Sources.Sine Source_opening(
+ freqHz=1/86400,
+ offset=0.5,
+ startTime=-21600,
+ amplitude=0.49)
+ annotation (Placement(transformation(extent={{10,60},{30,80}})));
+ HeatGeneration.Boiler boiler
+ annotation (Placement(transformation(extent={{-26,10},{-6,30}})));
+ Modelica.Blocks.Sources.Constant Source_TempSet_Boiler(k=273.15 + 75)
+ annotation (Placement(transformation(extent={{0,60},{-20,80}})));
+ equation
+ connect(pipe1.port_b,pump. port_a) annotation (Line(
+ points={{-30,-20},{-60,-20},{-60,20},{-54,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(NightSignal.y,pump. IsNight) annotation (Line(
+ points={{-55,60},{-44,60},{-44,30.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(PointFixedPressure.port_a,pump. port_a) annotation (Line(
+ points={{-78,20},{-54,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_b, simpleValve.port_a) annotation (Line(
+ points={{24,20},{30,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(simpleValve.port_b, radiator.port_a) annotation (Line(
+ points={{50,20},{112.88,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(radiator.port_b, pipe1.port_a) annotation (Line(
+ points={{133.12,20},{160,20},{160,-20},{-10,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(AirTemp.port, radiator.convPort) annotation (Line(
+ points={{112,64},{118.38,64},{118.38,27.6}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(radiator.radPort, RadTemp.port) annotation (Line(
+ points={{127.4,27.8},{127.4,64},{136,64}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(Source_Temp.y, AirTemp.T) annotation (Line(
+ points={{81,90},{98.8,90},{98.8,64}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_Temp.y, RadTemp.T) annotation (Line(
+ points={{81,90},{150,90},{150,64},{149.2,64}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_opening.y, simpleValve.opening) annotation (Line(
+ points={{31,70},{40,70},{40,28}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pump.port_b, boiler.port_a) annotation (Line(
+ points={{-34,20},{-26,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boiler.port_b, pipe.port_a) annotation (Line(
+ points={{-6,20},{4,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Source_TempSet_Boiler.y, boiler.T_set) annotation (Line(
+ points={{-21,70},{-34,70},{-34,26},{-26.8,26},{-26.8,27}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(extent={{-100,-100},{160,100}},
+ preserveAspectRatio=false), graphics),
+ Icon(coordinateSystem(extent={{-100,-100},{160,100}})),
+ experiment(
+ StopTime=86400,
+ Interval=60,
+ __Dymola_Algorithm="Rkfix2"),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+Pump, boiler, valve and radiator in a closed loop.
+Concept
+The example ilustrates how the radiator power depends on the mass flow, i.e. the valve opening.
+The valve doesn't fully close, because as the radiator it is connected to fixed temperatures the temperature difference between flow and return become infinite at zero mass flow in order to satisfy the power equation.
+Make sure you initialise the temperatures correctly in order to have flow temperature > return temperature > room temperature in order for the equation for over temperature to be correctly calculated.
+"));
+ end PumpRadiatorValve;
+
+ model PumpRadiatorThermostaticValve
+ import AixLib;
+ extends Modelica.Icons.Example;
+ Pumps.Pump pump(
+ MinMaxCharacteristics=AixLib.DataBase.Pumps.Pump1(),
+ V_flow_max=2,
+ ControlStrategy=2,
+ V_flow(fixed=false))
+ annotation (Placement(transformation(extent={{-54,10},{-34,30}})));
+ Pipes.StaticPipe
+ pipe(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{4,10},{24,30}})));
+ Pipes.StaticPipe
+ pipe1(l=10, D=0.01)
+ annotation (Placement(transformation(extent={{-10,-30},{-30,-10}})));
+ Modelica.Blocks.Sources.BooleanConstant
+ NightSignal(k=false)
+ annotation (Placement(transformation(extent={{-76,50},{-56,70}})));
+ inner BaseParameters baseParameters
+ annotation (Placement(transformation(extent={{-100,80},{-80,100}})));
+ Sources.Boundary_p PointFixedPressure(use_p_in=false)
+ annotation (Placement(transformation(extent={{-98,10},{-78,30}})));
+ Valves.ThermostaticValve simpleValve(
+ Influence_PressureDrop=0.15,
+ Kvs=0.4,
+ Kv_setT=0.12,
+ p(start=20000),
+ leakageOpening=0)
+ annotation (Placement(transformation(extent={{32,10},{52,30}})));
+ Radiator radiator(RadiatorType=
+ AixLib.DataBase.Radiators.ThermX2_ProfilV_979W())
+ annotation (Placement(transformation(extent={{112,10},{134,30}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature AirTemp
+ annotation (Placement(transformation(extent={{100,58},{112,70}})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature RadTemp
+ annotation (Placement(transformation(extent={{148,58},{136,70}})));
+ Modelica.Blocks.Sources.Constant Source_Temp(k=273.15 + 20)
+ annotation (Placement(transformation(extent={{56,80},{76,100}})));
+ Modelica.Blocks.Sources.Sine Source_opening(
+ freqHz=1/86400,
+ amplitude=1,
+ startTime=0,
+ offset=273.15 + 18.5)
+ annotation (Placement(transformation(extent={{10,60},{30,80}})));
+ HeatGeneration.Boiler boiler
+ annotation (Placement(transformation(extent={{-26,10},{-6,30}})));
+ Modelica.Blocks.Sources.Constant Source_TempSet_Boiler(k=273.15 + 75)
+ annotation (Placement(transformation(extent={{0,60},{-20,80}})));
+ equation
+ connect(pipe1.port_b,pump. port_a) annotation (Line(
+ points={{-30,-20},{-60,-20},{-60,20},{-54,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(NightSignal.y,pump. IsNight) annotation (Line(
+ points={{-55,60},{-44,60},{-44,30.2}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(PointFixedPressure.port_a,pump. port_a) annotation (Line(
+ points={{-78,20},{-54,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_b, simpleValve.port_a) annotation (Line(
+ points={{24,20},{32,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(simpleValve.port_b, radiator.port_a) annotation (Line(
+ points={{52,20},{112.88,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(radiator.port_b, pipe1.port_a) annotation (Line(
+ points={{133.12,20},{160,20},{160,-20},{-10,-20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(AirTemp.port, radiator.convPort) annotation (Line(
+ points={{112,64},{118.38,64},{118.38,27.6}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(radiator.radPort, RadTemp.port) annotation (Line(
+ points={{127.4,27.8},{127.4,64},{136,64}},
+ color={0,0,0},
+ smooth=Smooth.None));
+ connect(Source_Temp.y, AirTemp.T) annotation (Line(
+ points={{77,90},{98.8,90},{98.8,64}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_Temp.y, RadTemp.T) annotation (Line(
+ points={{77,90},{150,90},{150,64},{149.2,64}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pump.port_b, boiler.port_a) annotation (Line(
+ points={{-34,20},{-26,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boiler.port_b, pipe.port_a) annotation (Line(
+ points={{-6,20},{4,20}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(Source_TempSet_Boiler.y, boiler.T_set) annotation (Line(
+ points={{-21,70},{-34,70},{-34,26},{-26.8,26},{-26.8,27}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_Temp.y, simpleValve.T_room) annotation (Line(
+ points={{77,90},{80,90},{80,44},{35.6,44},{35.6,29.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(Source_opening.y, simpleValve.T_setRoom) annotation (Line(
+ points={{31,70},{47.6,70},{47.6,29.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(extent={{-100,-100},{160,100}},
+ preserveAspectRatio=false), graphics),
+ Icon(coordinateSystem(extent={{-100,-100},{160,100}})),
+ experiment(
+ StopTime=86400,
+ Interval=60,
+ __Dymola_Algorithm="Lsodar"),
+ __Dymola_experimentSetupOutput(events=false),
+ Documentation(info="
+Overview
+Pump, boiler, thernostatic valve and radiator in a closed loop.
+Concept
+The example ilustrates how the thermostatic valve reacts.
+The valve doesn't fully close, because as the radiator it is connected to fixed temperatures the temperature difference between flow and return become infinite at zero mass flow in order to satisfy the power equation.
+Make sure you initialise the temperatures correctly in order to have flow temperature > return temperature > room temperature in order for the equation for over temperature to be correctly calculated.
+"));
+ end PumpRadiatorThermostaticValve;
+ end Examples;
+end Radiators;
diff --git a/AixLib/HVAC/Sensors.mo b/AixLib/HVAC/Sensors.mo
new file mode 100644
index 0000000000..ef2efb7857
--- /dev/null
+++ b/AixLib/HVAC/Sensors.mo
@@ -0,0 +1,325 @@
+within AixLib.HVAC;
+package Sensors "Contains sensors "
+ extends Modelica.Icons.SensorsPackage;
+ model TemperatureSensor "Sensor which outputs the fluid temperature"
+ extends BaseClasses.PartialSensor;
+
+ parameter Modelica.SIunits.Temperature T_ref = baseParameters.T_ref;
+
+ equation
+ signal = actualStream(port_a.h_outflow) / cp + T_ref;
+
+ annotation (Icon(graphics={
+ Line(points={{0,100},{0,50}}, color={0,0,127}),
+ Line(points={{-92,0},{100,0}}, color={0,128,255}),
+ Ellipse(
+ extent={{-20,-68},{20,-30}},
+ lineColor={0,0,0},
+ lineThickness=0.5,
+ fillColor={191,0,0},
+ fillPattern=FillPattern.Solid),
+ Rectangle(
+ extent={{-12,50},{12,-34}},
+ lineColor={191,0,0},
+ fillColor={191,0,0},
+ fillPattern=FillPattern.Solid),
+ Polygon(
+ points={{-12,50},{-12,70},{-10,76},{-6,78},{0,80},{6,78},{10,76},{12,
+ 70},{12,50},{-12,50}},
+ lineColor={0,0,0},
+ lineThickness=0.5),
+ Line(
+ points={{-12,50},{-12,-35}},
+ color={0,0,0},
+ thickness=0.5),
+ Line(
+ points={{12,50},{12,-34}},
+ color={0,0,0},
+ thickness=0.5),
+ Line(points={{-40,-10},{-12,-10}}, color={0,0,0}),
+ Line(points={{-40,20},{-12,20}}, color={0,0,0}),
+ Line(points={{-40,50},{-12,50}}, color={0,0,0})}), Documentation(
+ info="
+Overview
+
This component monitors the temperature of the mass flow flowing from port_a to port_b. The sensor is ideal, i.e., it does not influence the fluid.
+
This model is based on the simple assumption of h = c_p * (T - T_ref) with a constant c_p from BaseParameters.
+
Example Results
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTConst
+",
+ revisions="
+02.10.2013, Marcus Fuchs
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics));
+ end TemperatureSensor;
+
+ model MassFlowSensor "Sensor which outputs the fluid mass flow rate"
+ extends BaseClasses.PartialSensor;
+ extends Modelica.Icons.RotationalSensor;
+
+ equation
+ signal = port_a.m_flow;
+
+ annotation (Icon(graphics={
+ Line(
+ points={{-70,0},{-94,0},{-96,0}},
+ color={0,127,255},
+ smooth=Smooth.None),
+ Line(
+ points={{0,38},{0,90}},
+ color={135,135,135},
+ smooth=Smooth.None),
+ Line(
+ points={{70,0},{100,0}},
+ color={0,127,255},
+ smooth=Smooth.None)}), Documentation(
+ info="
+Overview
+
This component monitors the mass flow rate from port_a to port_b. The sensor is ideal, i.e., it does not influence the fluid.
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTConst
+",
+ revisions="
+07.10.2013, Marcus Fuchs
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics));
+ end MassFlowSensor;
+
+ model ComfortSensor "calculates the operative temperature"
+
+ Interfaces.RadPort radPort
+ annotation (Placement(transformation(extent={{-90,-54},{-70,-34}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a convPort
+ annotation (Placement(transformation(extent={{-90,50},{-70,70}})));
+ Modelica.Blocks.Interfaces.RealOutput OperativeTemperature annotation (
+ Placement(transformation(extent={{80,0},{100,20}}), iconTransformation(
+ extent={{80,0},{100,20}})));
+
+ equation
+ // No influence on system
+ convPort.Q_flow = 0;
+ radPort.Q_flow = 0;
+
+ // Calculate the output
+ OperativeTemperature = (convPort.T + radPort.T) * 0.5;
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Ellipse(
+ extent={{-60,66},{66,-58}},
+ lineThickness=1,
+ fillColor={170,255,255},
+ fillPattern=FillPattern.Solid,
+ pattern=LinePattern.None,
+ lineColor={0,0,0})}), Documentation(info="
+Overview
+Simple model for a comfort sensor, by computing the operative temperature.
+Concept
+The operative temperature is the mean value between the air temperature and the radiative (walls) temperature.
+Example Results
+", revisions="
+13.11.2013, by Ana Constantin: implemented
+"));
+ end ComfortSensor;
+
+ model RelativeHumiditySensor
+ "Sensor which outputs the relative Humidity of Moist Air"
+ extends Interfaces.TwoPortMoistAirTransportFluidprops;
+ outer BaseParameters baseParameters "System properties";
+ Modelica.Blocks.Interfaces.RealOutput Humidity "Output signal from sensor"
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={0,100})));
+ equation
+
+ dp = 0;
+ Humidity = p_Steam/p_Saturation;
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}),
+ graphics={
+ Line(points={{0,100},{0,50}}, color={0,0,127}),
+ Line(points={{-92,0},{100,0}}, color={0,128,255}),
+ Ellipse(
+ extent={{-54,4},{46,-96}},
+ lineColor={0,128,255},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid),
+ Polygon(
+ points={{-51,-28},{0,84},{42,-28},{-51,-28}},
+ lineColor={0,0,255},
+ smooth=Smooth.None,
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid)}), Documentation(
+ info="
+Overview
+This component monitors the relative Humidity of the mass flow flowing from port_a to port_b. The sensor is ideal, i.e., it does not influence the fluid.
+
If there is liquid water in the air, the relative humidity is limited to 1.
+Example Results
+AixLib.HVAC.Volume.Examples.MoistAirWithHeatTransfer
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics));
+ end RelativeHumiditySensor;
+
+ model PropertySensorMoistAir
+ "Sensor which outputs some properties of Moist Air"
+ extends Interfaces.TwoPortMoistAirTransportFluidprops;
+ outer BaseParameters baseParameters "System properties";
+
+ Modelica.Blocks.Interfaces.RealOutput X_S annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-90,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-90,-90})));
+ Modelica.Blocks.Interfaces.RealOutput X_W annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-58,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-60,-90})));
+ Modelica.Blocks.Interfaces.RealOutput Temperature annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-20,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-30,-90})));
+ Modelica.Blocks.Interfaces.RealOutput rho annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={14,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={0,-90})));
+
+ Modelica.Blocks.Interfaces.RealOutput DynamicViscosity
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={40,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={30,-90})));
+ Modelica.Blocks.Interfaces.RealOutput VolumeFlow
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={94,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={60,-90})));
+ Modelica.Blocks.Interfaces.RealOutput MassFlow
+ annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={94,-100}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={90,-90})));
+ equation
+
+ dp = 0;
+
+ rho = rho_MoistAir;
+ Temperature = T;
+ X_S = X_Steam;
+ X_W = X_Water;
+ DynamicViscosity = dynamicViscosity;
+ VolumeFlow = abs(portMoistAir_a.m_flow/rho_Air);
+ MassFlow= abs(portMoistAir_a.m_flow);
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}),
+ graphics={
+ Line(points={{0,68},{0,50}}, color={0,0,127}),
+ Line(points={{-92,0},{100,0}}, color={0,128,255}),
+ Ellipse(
+ extent={{-70,68},{70,-72}},
+ lineColor={0,0,0},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid),
+ Line(points={{0,68},{0,38}}, color={0,0,0}),
+ Line(points={{22.9,30.8},{40.2,55.3}}, color={0,0,0}),
+ Line(points={{-22.9,30.8},{-40.2,55.3}}, color={0,0,0}),
+ Line(points={{37.6,11.7},{65.8,21.9}}, color={0,0,0}),
+ Line(points={{-37.6,11.7},{-65.8,21.9}}, color={0,0,0}),
+ Line(points={{0,-2},{9.02,26.6}},color={0,0,0}),
+ Polygon(
+ points={{-0.48,29.6},{18,24},{18,55.2},{-0.48,29.6}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid),
+ Ellipse(
+ extent={{-5,3},{5,-7}},
+ lineColor={0,0,0},
+ fillColor={0,0,0},
+ fillPattern=FillPattern.Solid)}), Documentation(
+ info="
+Overview
+This component monitors some properties of the mass flow flowing from port_a to port_b. The sensor is ideal, i.e., it does not influence the fluid.
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics));
+ end PropertySensorMoistAir;
+
+ package BaseClasses "Contains base classes for sensors"
+ extends Modelica.Icons.BasesPackage;
+ partial model PartialSensor "Base class for sensors"
+ extends Interfaces.TwoPort;
+
+ Modelica.Blocks.Interfaces.RealOutput signal "Output signal from sensor"
+ annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={0,100})));
+ equation
+ port_a.p = port_b.p;
+
+ inStream(port_a.h_outflow) = port_b.h_outflow;
+ inStream(port_b.h_outflow) = port_a.h_outflow;
+ annotation (Documentation(info="
+Overview
+
This sensor base class defines a fluid model which does not affect the fluid properties. The signal output can be used to generate a signal of the measured value.
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics));
+ end PartialSensor;
+
+ end BaseClasses;
+end Sensors;
diff --git a/AixLib/HVAC/Sources.mo b/AixLib/HVAC/Sources.mo
new file mode 100644
index 0000000000..efeb655e09
--- /dev/null
+++ b/AixLib/HVAC/Sources.mo
@@ -0,0 +1,406 @@
+within AixLib.HVAC;
+package Sources "Contains hydraulic sources"
+ extends Modelica.Icons.Package;
+ model Boundary_ph
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Boolean use_p_in = false
+ "Get the pressure from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+ parameter Boolean use_h_in= false
+ "Get the specific enthalpy from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+
+ parameter Modelica.SIunits.Pressure p = 1e5 "Fixed value of pressure"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_p_in));
+ parameter Modelica.SIunits.SpecificEnthalpy h = 1e5
+ "Fixed value of specific enthalpy"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_h_in));
+
+ protected
+ Modelica.Blocks.Interfaces.RealInput p_in_internal
+ "Needed to connect to conditional connector";
+ Modelica.Blocks.Interfaces.RealInput h_in_internal
+ "Needed to connect to conditional connector";
+
+ public
+ Interfaces.Port_a port_a
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ Modelica.Blocks.Interfaces.RealInput p_in if use_p_in
+ annotation (Placement(transformation(extent={{-140,40},{-100,80}})));
+ Modelica.Blocks.Interfaces.RealInput h_in if use_h_in
+ annotation (Placement(transformation(extent={{-140,-60},{-100,-20}})));
+ equation
+ connect(p_in, p_in_internal);
+ connect(h_in, h_in_internal);
+
+ if not use_p_in then
+ p_in_internal = p;
+ end if;
+ if not use_h_in then
+ h_in_internal = h;
+ end if;
+
+ port_a.p = p_in_internal;
+ port_a.h_outflow = h_in_internal;
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(graphics={Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,255},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Sphere)}),
+ Documentation(revisions="
+01.10.2013, by Pooyan Jahangiri: implemented
+",
+ info="
+Overview
+Defines prescribed values for boundary conditions:
+
+- Prescribed boundary pressure.
+- Prescribed boundary temperature.
+
+Concept
+If use_p_in
is false (default option), the p
parameter is used as boundary pressure, and the p_in
input connector is disabled; if use_p_in
is true, then the p
parameter is ignored, and the value provided by the input connector is used instead.
+The same thing goes for the specific enthalpy
+Note, that boundary temperature has only an effect if the mass flow is from the boundary into the port. If mass is flowing from the port into the boundary, the boundary definitions, with exception of boundary pressure, do not have an effect.
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.HeatPumpSystem
+"));
+ end Boundary_ph;
+
+ model Boundary_p "Pressure boundary, no enthapy, no massflow"
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Boolean use_p_in = false
+ "Get the pressure from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+
+ parameter Modelica.SIunits.Pressure p = 1e5 "Fixed value of pressure"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_p_in));
+
+ protected
+ Modelica.Blocks.Interfaces.RealInput p_in_internal;
+
+ public
+ Interfaces.Port_a port_a
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ Modelica.Blocks.Interfaces.RealInput p_in if use_p_in
+ annotation (Placement(transformation(extent={{-140,40},{-100,80}})));
+
+ equation
+ connect(p_in, p_in_internal);
+
+ if not use_p_in then
+ p_in_internal = p;
+ end if;
+
+ port_a.p = p_in_internal;
+ port_a.h_outflow = 0;
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(graphics={Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,255},
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Sphere)}),
+ Documentation(revisions="
+01.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+
Boundary of fixed pressure. To be used in a loop before a pump.
+Example Results
+AixLib.HVAC.Pumps.Examples.PumpHydraulicResistance_closedLoop
+"));
+ end Boundary_p;
+
+ model OutdoorTemp "Outdoor Temperature"
+ import AixLib;
+
+ parameter AixLib.DataBase.Weather.WeatherBaseDataDefinition temperatureOT=
+ AixLib.DataBase.Weather.WinterDay() "outdoor air tmeperature"
+ annotation (choicesAllMatching=true);
+
+ Modelica.Blocks.Sources.CombiTimeTable temperature(
+ table=temperatureOT.temperature,
+ offset={273.15},
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic)
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Interfaces.RealOutput T_out
+ "Connector of Real output signals"
+ annotation (Placement(transformation(extent={{96,-10},{116,10}})));
+ equation
+ connect(temperature.y[1], T_out) annotation (Line(
+ points={{11,0},{106,0}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics),
+ Documentation(info="
+Overview
+This source outputs the outdoor air temperature in K from a table given in database.
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTVar
+", revisions="
+04.11.2013, Marcus Fuchs: implemented
+"),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Ellipse(
+ extent={{-54,50},{54,-56}},
+ lineColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fillColor={213,255,170}), Text(
+ extent={{-38,44},{38,-46}},
+ lineColor={0,0,255},
+ fillColor={213,255,170},
+ fillPattern=FillPattern.Solid,
+ textString="T_out")}));
+ end OutdoorTemp;
+
+ model TempAndRad "Outdoor Temperature and solar irradiation"
+ import AixLib;
+
+ parameter AixLib.DataBase.Weather.WeatherBaseDataDefinition temperatureOT=
+ AixLib.DataBase.Weather.WinterDay() "outdoor air tmeperature"
+ annotation (choicesAllMatching=true);
+
+ Modelica.Blocks.Sources.CombiTimeTable OutdoorConditions(
+ table=temperatureOT.temperature,
+ extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
+ offset={0.01})
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Modelica.Blocks.Interfaces.RealOutput T_out "Outdoor air temperature in C"
+ annotation (Placement(transformation(extent={{96,-50},{116,-30}}),
+ iconTransformation(extent={{96,-50},{116,-30}})));
+ Modelica.Blocks.Interfaces.RealOutput Rad "Solar Irradiation in W/m2"
+ annotation (Placement(transformation(extent={{96,30},{116,50}})));
+ Modelica.Blocks.Math.UnitConversions.From_degC from_degC
+ annotation (Placement(transformation(extent={{66,-50},{86,-30}})));
+ equation
+ connect(OutdoorConditions.y[2], Rad) annotation (Line(
+ points={{11,0},{54,0},{54,40},{106,40}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(OutdoorConditions.y[1], from_degC.u) annotation (Line(
+ points={{11,0},{54,0},{54,-40},{64,-40}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(from_degC.y, T_out) annotation (Line(
+ points={{87,-40},{106,-40}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
+ 100,100}}), graphics),
+ Documentation(info="
+Overview
+This source outputs the outdoor air temperature in K from a table given in database.
+Example Results
+", revisions="
+19.11.2013, Marcus Fuchs: implemented
+"),
+ Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics={Ellipse(
+ extent={{-54,20},{54,-86}},
+ lineColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fillColor={213,255,170}), Text(
+ extent={{-38,16},{38,-74}},
+ lineColor={0,0,255},
+ fillColor={213,255,170},
+ fillPattern=FillPattern.Solid,
+ textString="T_out"),Ellipse(
+ extent={{-56,92},{52,-14}},
+ lineColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ fillColor={213,255,170}), Text(
+ extent={{-28,64},{22,18}},
+ lineColor={0,0,255},
+ fillColor={213,255,170},
+ fillPattern=FillPattern.Solid,
+ textString="G")}));
+ end TempAndRad;
+
+ model BoundaryMoistAir_phX
+ "boundary for Moist Air, pressure, enthalpy, water fraction"
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Boolean use_p_in = false
+ "Get the pressure from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+ parameter Boolean use_h_in= false
+ "Get the specific enthalpy from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+ parameter Boolean use_X_in= false
+ "Get the water mass fraction per mass dry air from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+
+ parameter Modelica.SIunits.Pressure p = 1e5 "Fixed value of pressure"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_p_in));
+ parameter Modelica.SIunits.SpecificEnthalpy h = 1e4
+ "Fixed value of specific enthalpy as energy per mass dry air"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_h_in));
+
+ parameter Real X(min=0,max=1) = 2e-3
+ "Fixed value of water mass fraction per mass dry air"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_X_in));
+
+ protected
+ Modelica.Blocks.Interfaces.RealInput p_in_internal
+ "Needed to connect to conditional connector";
+ Modelica.Blocks.Interfaces.RealInput h_in_internal
+ "Needed to connect to conditional connector";
+ Modelica.Blocks.Interfaces.RealInput X_in_internal
+ "Needed to connect to conditional connector";
+
+ public
+ Interfaces.PortMoistAir_a
+ portMoistAir_a
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ Modelica.Blocks.Interfaces.RealInput p_in if use_p_in
+ annotation (Placement(transformation(extent={{-140,60},{-100,100}})));
+ Modelica.Blocks.Interfaces.RealInput h_in if use_h_in
+ annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
+ Modelica.Blocks.Interfaces.RealInput X_in if use_X_in
+ annotation (Placement(transformation(extent={{-140,-100},{-100,-60}})));
+
+ equation
+ connect(p_in, p_in_internal);
+ connect(h_in, h_in_internal);
+ connect(X_in, X_in_internal);
+
+ if not use_p_in then
+ p_in_internal = p;
+ end if;
+ if not use_h_in then
+ h_in_internal = h;
+ end if;
+
+ if not use_X_in then
+ X_in_internal = X;
+ end if;
+
+ portMoistAir_a.p = p_in_internal;
+ portMoistAir_a.h_outflow = h_in_internal;
+ portMoistAir_a.X_outflow = X_in_internal;
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={170,255,255},
+ fillPattern=FillPattern.Sphere,
+ fillColor={170,213,255}), Text(
+ extent={{-66,14},{76,-10}},
+ lineColor={0,0,255},
+ textString="p boundary")}),
+ Documentation(info="
+Overview
+Boundary Model for Moist Air. Defines absolute pressure, specific enthalpy per mass dry air and water fraction per mass dry air.
+Example Results
+AixLib.HVAC.Volume.Examples.MoistAirWithHeatTransfer
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end BoundaryMoistAir_phX;
+
+ model MassflowsourceMoistAir_mhX
+ "boundary for Moist Air, massflow, enthalpy, water fraction"
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Boolean use_m_in = false
+ "Get the massflow of dry air from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+ parameter Boolean use_h_in= false
+ "Get the specific enthalpy per mass dry air from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+ parameter Boolean use_X_in= false
+ "Get the water mass fraction per mass dry air from the input connector"
+ annotation(Evaluate=true, HideResult=true, choices(__Dymola_checkBox=true));
+
+ parameter Modelica.SIunits.MassFlowRate m = 0.01
+ "Fixed value of mass flow of dry air "
+ annotation (Evaluate = true,
+ Dialog(enable = not use_p_in));
+ parameter Modelica.SIunits.SpecificEnthalpy h = 1e4
+ "Fixed value of specific enthalpy per mass dry air"
+ annotation (Evaluate = true,
+ Dialog(enable = not use_h_in));
+
+ parameter Real X(min=0,max=1) = 2e-3
+ "Fixed value of water mass fraction per mass dry air "
+ annotation (Evaluate = true,
+ Dialog(enable = not use_X_in));
+
+ protected
+ Modelica.Blocks.Interfaces.RealInput m_in_internal
+ "Needed to connect to conditional connector";
+ Modelica.Blocks.Interfaces.RealInput h_in_internal
+ "Needed to connect to conditional connector";
+ Modelica.Blocks.Interfaces.RealInput X_in_internal
+ "Needed to connect to conditional connector";
+
+ public
+ Interfaces.PortMoistAir_a
+ portMoistAir_a
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ Modelica.Blocks.Interfaces.RealInput m_in if use_m_in
+ annotation (Placement(transformation(extent={{-140,60},{-100,100}})));
+ Modelica.Blocks.Interfaces.RealInput h_in if use_h_in
+ annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
+ Modelica.Blocks.Interfaces.RealInput X_in if use_X_in
+ annotation (Placement(transformation(extent={{-140,-100},{-100,-60}})));
+
+ equation
+ connect(m_in, m_in_internal);
+ connect(h_in, h_in_internal);
+ connect(X_in, X_in_internal);
+
+ if not use_m_in then
+ m_in_internal = m;
+ end if;
+ if not use_h_in then
+ h_in_internal = h;
+ end if;
+
+ if not use_X_in then
+ X_in_internal = X;
+ end if;
+
+ portMoistAir_a.m_flow = -m_in_internal;
+ portMoistAir_a.h_outflow = h_in_internal;
+ portMoistAir_a.X_outflow = X_in_internal;
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}),
+ graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={170,255,255},
+ fillPattern=FillPattern.Sphere,
+ fillColor={170,213,255}), Text(
+ extent={{-68,12},{74,-12}},
+ lineColor={0,0,255},
+ textString="m_flow boundary")}),
+ Documentation(info="
+Overview
+Boundary Model for Moist Air. Defines mass flow of dry air, specific enthalpy per mass dry air and water fraction per mass dry air.
+Example Results
+AixLib.HVAC.Volume.Examples.MoistAirWithHeatTransfer
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end MassflowsourceMoistAir_mhX;
+end Sources;
diff --git a/AixLib/HVAC/Storage.mo b/AixLib/HVAC/Storage.mo
new file mode 100644
index 0000000000..32b990c0ca
--- /dev/null
+++ b/AixLib/HVAC/Storage.mo
@@ -0,0 +1,627 @@
+within AixLib.HVAC;
+package Storage "Hydraulic heat storages"
+ extends Modelica.Icons.Package;
+
+ model Storage
+
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Integer n(min=3) "number of layers";
+ parameter Modelica.SIunits.Length d "storage diameter";
+ parameter Modelica.SIunits.Length h "storage height";
+
+ parameter Modelica.SIunits.ThermalConductivity lambda_ins
+ "thermal conductivity of insulation" annotation (Dialog(group = "Heat losses"));
+ parameter Modelica.SIunits.Length s_ins "thickness of insulation" annotation(Dialog(group = "Heat losses"));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_in
+ "internal heat transfer coefficient" annotation (Dialog(group = "Heat losses"));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer alpha_out
+ "external heat transfer coefficient" annotation (Dialog(group = "Heat losses"));
+
+ parameter Modelica.SIunits.Volume V_HE "heat exchanger volume" annotation (Dialog(group = "Heat exchanger"));
+ parameter Modelica.SIunits.CoefficientOfHeatTransfer k_HE
+ "heat exchanger heat transfer coefficient" annotation (Dialog(group = "Heat exchanger"));
+ parameter Modelica.SIunits.Area A_HE "heat exchanger area" annotation (Dialog(group = "Heat exchanger"));
+
+ parameter Modelica.SIunits.RelativePressureCoefficient beta=350e-6 annotation (Dialog(group = "Bouyancy"));
+ parameter Real kappa=0.4 annotation (Dialog(group = "Bouyancy"));
+
+ protected
+ parameter Modelica.SIunits.Volume V=A*h;
+ parameter Modelica.SIunits.Area A=Modelica.Constants.pi*d^2/4;
+ parameter Modelica.SIunits.Length dx=V/A/n;
+ parameter Modelica.SIunits.ThermalConductance G_middle=2*Modelica.Constants.pi*h/n/(1/(alpha_in*d/2) + 1/lambda_ins*log((d/2 + s_ins)/(d/2)) + 1/(alpha_out*(d/2 +s_ins)));
+ parameter Modelica.SIunits.ThermalConductance G_top_bottom=G_middle+lambda_ins/s_ins*A;
+ public
+ Interfaces.Port_a port_a_consumer
+ annotation (Placement(transformation(extent={{-10,-108},{10,-88}}),
+ iconTransformation(extent={{-10,-110},{10,-90}})));
+ Interfaces.Port_b port_b_consumer
+ annotation (Placement(transformation(extent={{-10,82},{10,102}}),
+ iconTransformation(extent={{-10,90},{10,110}})));
+ HVAC.Volume.Volume layer[n](each V=V/n) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={0,0})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
+ "connect to ambient temperature around the storage"
+ annotation (Placement(transformation(extent={{-116,-10},{-96,10}}),
+ iconTransformation(extent={{-90,-10},{-70,10}})));
+ Interfaces.Port_b port_b_heatGenerator
+ annotation (Placement(transformation(extent={{74,-98},{94,-78}}),
+ iconTransformation(extent={{74,-90},{94,-70}})));
+ Interfaces.Port_a port_a_heatGenerator
+ annotation (Placement(transformation(extent={{74,78},{94,98}}),
+ iconTransformation(extent={{74,78},{94,98}})));
+ HVAC.Volume.Volume layer_HE[n](each V=V_HE/n) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={84,0})));
+ Modelica.Thermal.HeatTransfer.Components.ThermalConductor heatTransfer_HE[n](each G=k_HE*A_HE/n)
+ annotation (Placement(transformation(extent={{32,-10},{52,10}})));
+ Modelica.Thermal.HeatTransfer.Components.ThermalConductor heatTransfer[n](G=cat(1,{G_top_bottom},
+ {G_middle for k in 2:n - 1},{G_top_bottom})) annotation (Placement(transformation(extent={{-80,-10},{-60,10}})));
+ BaseClasses.Bouyancy
+ bouyancy[n - 1](
+ each rho=baseParameters.rho_Water,
+ each lambda=baseParameters.lambda_Water,
+ each g=baseParameters.g,
+ each cp=baseParameters.cp_Water,
+ each A=A,
+ each beta=beta,
+ each dx=dx,
+ each kappa=kappa)
+ annotation (Placement(transformation(extent={{-38,-10},{-18,10}})));
+ equation
+
+ //Connect layers to the upper and lower ports
+ connect(layer[1].port_a, port_a_consumer);
+ connect(layer[n].port_b, port_b_consumer);
+
+ //Connect layers
+ for k in 1:n-1 loop
+ connect(layer[k].port_b,layer[k+1].port_a);
+ end for;
+
+ //Connect Heat Transfer to the Outside
+ for k in 1:n loop
+ connect(heatTransfer[k].port_a,layer[k].heatPort);
+ connect(heatTransfer[k].port_b,heatPort);
+ end for;
+
+ //Connect layers of Heat Exchanger
+ connect(layer_HE[1].port_a, port_b_heatGenerator);
+ connect(layer_HE[n].port_b, port_a_heatGenerator);
+ for k in 1:n-1 loop
+ connect(layer_HE[k].port_b,layer_HE[k+1].port_a);
+ end for;
+
+ //Connect heat exchanger to storage layers
+ for k in 1:n loop
+ connect(heatTransfer_HE[k].port_a,layer[k].heatPort);
+ connect(heatTransfer_HE[k].port_b,layer_HE[k].heatPort);
+ end for;
+
+ //Connect bouyancy element
+ for k in 1:n-1 loop
+ connect(bouyancy[k].port_a,layer[k+1].heatPort);
+ connect(bouyancy[k].port_b,layer[k].heatPort);
+
+ end for;
+
+ connect(heatPort, heatPort) annotation (Line(
+ points={{-106,0},{-106,0}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={
+ Polygon(
+ points={{-154,3},{-136,-7},{-110,-3},{-84,-7},{-48,-5},{-18,-9},{6,-3},
+ {6,-41},{-154,-41},{-154,3}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ smooth=Smooth.None,
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ origin={78,-59},
+ rotation=360),
+ Polygon(
+ points={{-154,3},{-134,-3},{-110,1},{-84,-1},{-56,-5},{-30,-11},{6,-3},
+ {6,-41},{-154,-41},{-154,3}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ smooth=Smooth.None,
+ fillColor={14,110,255},
+ fillPattern=FillPattern.Solid,
+ origin={78,-27},
+ rotation=360),
+ Rectangle(
+ extent={{-80,-71},{80,71}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ fillColor={85,170,255},
+ fillPattern=FillPattern.Solid,
+ origin={4,1},
+ rotation=360),
+ Polygon(
+ points={{-24,-67},{-16,-67},{-8,-67},{4,-67},{12,-67},{36,-67},{76,
+ -67},{110,-67},{136,-67},{136,39},{-24,35},{-24,-67}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ smooth=Smooth.None,
+ fillColor={170,213,255},
+ fillPattern=FillPattern.Solid,
+ origin={-52,33},
+ rotation=360),
+ Polygon(
+ points={{-39,-30},{-31,-30},{-11,-30},{23,-30},{67,-30},{93,-30},{121,
+ -30},{121,24},{-39,26},{-39,-30}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ smooth=Smooth.None,
+ fillColor={255,170,170},
+ fillPattern=FillPattern.Solid,
+ origin={-37,38},
+ rotation=360),
+ Polygon(
+ points={{-80,100},{-80,54},{-62,54},{-30,54},{32,54},{80,54},{80,82},
+ {80,100},{-80,100}},
+ lineColor={0,0,255},
+ pattern=LinePattern.None,
+ smooth=Smooth.None,
+ fillColor={255,62,62},
+ fillPattern=FillPattern.Solid,
+ origin={4,0},
+ rotation=360),
+ Rectangle(
+ extent={{-76,100},{84,-100}},
+ lineColor={0,0,0},
+ lineThickness=1),
+ Line(
+ points={{-21,94},{-21,132}},
+ color={0,0,0},
+ smooth=Smooth.Bezier,
+ thickness=1,
+ arrow={Arrow.Filled,Arrow.None},
+ origin={-56,67},
+ rotation=270,
+ visible=use_heatingCoil1),
+ Line(
+ points={{-54,88},{68,56}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{68,56},{-48,44}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{-48,44},{62,6}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{62,6},{-44,-16}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{76,-81},{-26,-81}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{0,-9},{0,9}},
+ color={0,0,0},
+ smooth=Smooth.Bezier,
+ thickness=1,
+ arrow={Arrow.Filled,Arrow.None},
+ origin={-34,-81},
+ rotation=90,
+ visible= use_heatingCoil1),
+ Line(
+ points={{62,-42},{-44,-16}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{62,-42},{-42,-80}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible= use_heatingCoil1),
+ Line(
+ points={{48,88},{-54,88}},
+ color={0,0,0},
+ thickness=1,
+ smooth=Smooth.Bezier,
+ visible=use_heatingCoil1)}),
+ Documentation(info="
+Overview
+Simple model for a buffer storage.
+Level of Development
+
+Concept
+The water volume can be discretised in several layers.
+The following physical processes are modelled
+
+- heat exchange with the environment
+- heat exchange over the heat exchanger
+- a bouyancy model for the heat transfer between the layers
+
+
Example Results
+AixLib.HVAC.Storage.Examples.StorageBoiler
+AixLib.HVAC.Storage.Examples.StorageSolarCollector
+", revisions="
+13.12.2013, by Sebastian Stinner: implemented
+"));
+ end Storage;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+
+ model StorageBoiler
+ extends Modelica.Icons.Example;
+ import AixLib;
+
+ Storage storage(
+ n=10,
+ V_HE=0.05,
+ kappa=0.4,
+ beta=350e-6,
+ A_HE=20,
+ lambda_ins=0.04,
+ s_ins=0.1,
+ alpha_in=1500,
+ alpha_out=15,
+ d=1,
+ h=2,
+ k_HE=1500)
+ annotation (Placement(transformation(extent={{-56,14},{-36,34}})));
+ Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemperature(T=
+ 283.15)
+ annotation (Placement(transformation(extent={{-94,14},{-74,34}})));
+ Pumps.Pump pump annotation (Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-32,62})));
+ HeatGeneration.Boiler boiler(Q_flow_max=50000, boilerEfficiencyB=
+ AixLib.DataBase.Boiler.BoilerCondensing()) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={-16,76})));
+ Sources.Boundary_p boundary_p
+ annotation (Placement(transformation(extent={{-86,70},{-66,90}})));
+ Modelica.Blocks.Sources.BooleanExpression booleanExpression annotation (
+ Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={6,60})));
+ Modelica.Blocks.Sources.Constant const(k=273.15 + 80) annotation (Placement(
+ transformation(
+ extent={{-3,-3},{3,3}},
+ rotation=180,
+ origin={13,69})));
+ inner BaseParameters baseParameters(T_ref=273.15)
+ annotation (Placement(transformation(extent={{60,76},{80,96}})));
+ Pipes.StaticPipe pipe(D=0.05, l=5)
+ annotation (Placement(transformation(extent={{-26,-10},{-6,10}})));
+ HydraulicResistances.HydraulicResistance hydraulicResistance(zeta=1000)
+ annotation (Placement(transformation(extent={{8,-10},{28,10}})));
+ Sources.Boundary_ph boundary_ph1(use_p_in=true, h=0.8e5)
+ annotation (Placement(transformation(extent={{-104,-20},{-84,0}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ duration=1000,
+ offset=1e5,
+ height=0.00001e5)
+ annotation (Placement(transformation(extent={{-136,-14},{-116,6}})));
+ Sources.Boundary_ph boundary_ph2(use_p_in=false) annotation (
+ Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-72,46})));
+ Pipes.StaticPipe pipe1(D=0.05, l=5)
+ annotation (Placement(transformation(extent={{-66,-20},{-46,0}})));
+ equation
+ connect(fixedTemperature.port, storage.heatPort) annotation (Line(
+ points={{-74,24},{-54,24}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(pump.port_a, boiler.port_b) annotation (Line(
+ points={{-32,72},{-32,76},{-26,76}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_p.port_a, pump.port_a) annotation (Line(
+ points={{-66,80},{-32,80},{-32,72}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(booleanExpression.y, pump.IsNight) annotation (Line(
+ points={{-5,60},{-14,60},{-14,62},{-21.8,62}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(const.y, boiler.T_set) annotation (Line(
+ points={{9.7,69},{-5.2,69}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pipe.port_b, hydraulicResistance.port_a) annotation (Line(
+ points={{-6,0},{8,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(hydraulicResistance.port_b, boiler.port_a) annotation (Line(
+ points={{28,0},{52,0},{52,76},{-6,76}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pump.port_b, storage.port_a_heatGenerator) annotation (Line(
+ points={{-32,52},{-32,32.8},{-37.6,32.8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_a, storage.port_b_heatGenerator) annotation (Line(
+ points={{-26,0},{-32,0},{-32,16},{-37.6,16}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(ramp.y, boundary_ph1.p_in) annotation (Line(
+ points={{-115,-4},{-106,-4}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundary_ph2.port_a, storage.port_b_consumer) annotation (Line(
+ points={{-62,46},{-46,46},{-46,34}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, pipe1.port_a) annotation (Line(
+ points={{-84,-10},{-66,-10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, storage.port_a_consumer) annotation (Line(
+ points={{-46,-10},{-46,14}},
+ color={0,127,255},
+ 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 is a simple example of a storage and a boiler.
+", revisions="
+13.12.2013, by Sebastian Stinner: implemented
+"));
+ end StorageBoiler;
+
+ model StorageSolarCollector
+ extends Modelica.Icons.Example;
+ import AixLib;
+
+ Storage storage(
+ n=10,
+ V_HE=0.05,
+ kappa=0.4,
+ beta=350e-6,
+ A_HE=20,
+ lambda_ins=0.04,
+ s_ins=0.1,
+ alpha_in=1500,
+ alpha_out=15,
+ k_HE=1500,
+ d=1.5,
+ h=2.5)
+ annotation (Placement(transformation(extent={{-56,14},{-36,34}})));
+ Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemperature(T=
+ 283.15)
+ annotation (Placement(transformation(extent={{-94,14},{-74,34}})));
+ Pumps.Pump pump(ControlStrategy=1) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-38,64})));
+ Sources.Boundary_p boundary_p
+ annotation (Placement(transformation(extent={{-86,70},{-66,90}})));
+ Modelica.Blocks.Sources.BooleanExpression booleanExpression annotation (
+ Placement(transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=180,
+ origin={-10,64})));
+ inner BaseParameters baseParameters(T_ref=273.15)
+ annotation (Placement(transformation(extent={{60,76},{80,96}})));
+ Pipes.StaticPipe pipe(D=0.05, l=5)
+ annotation (Placement(transformation(extent={{-34,-10},{-14,10}})));
+ Sources.Boundary_ph boundary_ph1(use_p_in=true, h=42e3)
+ annotation (Placement(transformation(extent={{-112,-20},{-92,0}})));
+ Sources.Boundary_ph boundary_ph2(use_p_in=false) annotation (
+ Placement(transformation(
+ extent={{10,-10},{-10,10}},
+ rotation=180,
+ origin={-72,46})));
+ Pipes.StaticPipe pipe1(D=0.05, l=5)
+ annotation (Placement(transformation(extent={{-68,-20},{-48,0}})));
+ Sources.TempAndRad tempAndRad(temperatureOT=
+ AixLib.DataBase.Weather.SummerDay()) annotation (Placement(
+ transformation(
+ extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={32,34})));
+ HeatGeneration.SolarThermal solarThermal(Collector=
+ AixLib.DataBase.SolarThermal.FlatCollector(), A=20)
+ annotation (Placement(transformation(extent={{24,-10},{44,10}})));
+ Modelica.Blocks.Sources.Pulse pulse(
+ period=3600,
+ offset=1e5,
+ width=1,
+ amplitude=60)
+ annotation (Placement(transformation(extent={{-142,-14},{-122,6}})));
+ Valves.SimpleValve simpleValve(Kvs=2) annotation (Placement(
+ transformation(
+ extent={{-10,9},{10,-9}},
+ rotation=90,
+ origin={79,42})));
+ Sensors.TemperatureSensor temperatureSensor
+ annotation (Placement(transformation(extent={{58,-10},{78,10}})));
+ Modelica.Blocks.Continuous.LimPID PI(
+ controllerType=Modelica.Blocks.Types.SimpleController.PI,
+ k=0.05,
+ Ti=60,
+ yMax=0.999,
+ yMin=0) annotation (Placement(transformation(
+ extent={{-6,6},{6,-6}},
+ rotation=90,
+ origin={100,12})));
+ Modelica.Blocks.Sources.Constant const(k=273.15 + 70)
+ annotation (Placement(transformation(extent={{84,-10},{90,-4}})));
+ Modelica.Blocks.Math.Add add(k2=-1) annotation (Placement(transformation(
+ extent={{-4,-4},{4,4}},
+ rotation=90,
+ origin={98,30})));
+ Modelica.Blocks.Sources.Constant const1(k=1)
+ annotation (Placement(transformation(extent={{82,22},{88,28}})));
+
+ Modelica.SIunits.Conversions.NonSIunits.Energy_kWh Q_ges;
+ equation
+ der(Q_ges)=(solarThermal.volume.heatPort.Q_flow-fixedTemperature.port.Q_flow)/3.6e6;
+ connect(fixedTemperature.port, storage.heatPort) annotation (Line(
+ points={{-74,24},{-54,24}},
+ color={191,0,0},
+ smooth=Smooth.None));
+ connect(boundary_p.port_a, pump.port_a) annotation (Line(
+ points={{-66,80},{-38,80},{-38,74}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(booleanExpression.y, pump.IsNight) annotation (Line(
+ points={{-21,64},{-27.8,64}},
+ color={255,0,255},
+ smooth=Smooth.None));
+ connect(pump.port_b, storage.port_a_heatGenerator) annotation (Line(
+ points={{-38,54},{-38,32.8},{-37.6,32.8}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe.port_a, storage.port_b_heatGenerator) annotation (Line(
+ points={{-34,0},{-38,0},{-38,16},{-37.6,16}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(boundary_ph2.port_a, storage.port_b_consumer) annotation (Line(
+ points={{-62,46},{-46,46},{-46,34}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(pipe1.port_b, storage.port_a_consumer) annotation (Line(
+ points={{-48,-10},{-46,-10},{-46,14}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(tempAndRad.Rad,solarThermal. Irradiation) annotation (Line(
+ points={{36,23.4},{36,10.8},{35,10.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(tempAndRad.T_out,solarThermal. T_air) annotation (Line(
+ points={{28,23.4},{28,10.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(pulse.y, boundary_ph1.p_in) annotation (Line(
+ points={{-121,-4},{-114,-4}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(simpleValve.port_b, pump.port_a) annotation (Line(
+ points={{79,52},{78,52},{78,74},{-38,74}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(solarThermal.port_b, temperatureSensor.port_a) annotation (Line(
+ points={{44,0},{58,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(solarThermal.port_a, pipe.port_b) annotation (Line(
+ points={{24,0},{-14,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.port_b, simpleValve.port_a) annotation (Line(
+ points={{78,0},{78,32},{79,32}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(temperatureSensor.signal, PI.u_m) annotation (Line(
+ points={{68,10},{68,12},{92.8,12}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(const.y, PI.u_s) annotation (Line(
+ points={{90.3,-7},{100,-7},{100,4.8}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(PI.y, add.u2) annotation (Line(
+ points={{100,18.6},{100,25.2},{100.4,25.2}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(add.y, simpleValve.opening) annotation (Line(
+ points={{98,34.4},{98,42},{86.2,42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(const1.y, add.u1) annotation (Line(
+ points={{88.3,25},{92.15,25},{92.15,25.2},{95.6,25.2}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ connect(boundary_ph1.port_a, pipe1.port_a) annotation (Line(
+ points={{-92,-10},{-68,-10}},
+ color={0,127,255},
+ smooth=Smooth.None));
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=172800, Interval=60),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+This is a simple example of a storage and a solar collector.
+", revisions="
+13.12.2013, by Sebastian Stinner: implemented
+"));
+ end StorageSolarCollector;
+ end Examples;
+
+ package BaseClasses
+ extends Modelica.Icons.BasesPackage;
+ model Bouyancy
+ outer BaseParameters baseParameters "System properties";
+ parameter Modelica.SIunits.Area A=1;
+ parameter Modelica.SIunits.RelativePressureCoefficient beta=350e-6;
+ parameter Modelica.SIunits.Length dx=0.2;
+ parameter Real kappa=0.4;
+
+ Modelica.SIunits.TemperatureDifference dT;
+ Modelica.SIunits.ThermalConductivity lambda_eff;
+
+ parameter Modelica.SIunits.Acceleration g=baseParameters.g;
+ parameter Modelica.SIunits.SpecificHeatCapacity cp=baseParameters.cp_Water;
+ parameter Modelica.SIunits.ThermalConductivity lambda=baseParameters.lambda_Water;
+ parameter Modelica.SIunits.Density rho=baseParameters.rho_Water;
+
+ public
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a
+ annotation (Placement(transformation(extent={{-16,86},{4,106}})));
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b
+ annotation (Placement(transformation(extent={{-16,-104},{4,-84}})));
+ equation
+ dT=port_a.T-port_b.T;
+ if dT>0 then
+ lambda_eff=lambda;
+ else
+ lambda_eff=lambda+2/3*rho*cp*kappa*dx^2*sqrt(abs(-g*beta*dT/dx));
+ end if;
+ port_a.Q_flow=lambda_eff*A/dx*dT;
+ port_a.Q_flow+port_b.Q_flow=0;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics),
+ Documentation(info="
+Overview
+Bouyancy model for the heat transfer between the layers in a buffer storage.
+", revisions="
+13.12.2013, by Sebastian Stinner: implemented
+"));
+ end Bouyancy;
+ end BaseClasses;
+end Storage;
diff --git a/AixLib/HVAC/Valves.mo b/AixLib/HVAC/Valves.mo
new file mode 100644
index 0000000000..eb0f427b80
--- /dev/null
+++ b/AixLib/HVAC/Valves.mo
@@ -0,0 +1,123 @@
+within AixLib.HVAC;
+package Valves "Models for valves"
+ extends Modelica.Icons.Package;
+ model SimpleValve
+ extends AixLib.HVAC.Interfaces.TwoPort;
+
+ parameter Real Kvs = 1.4 "Kv value at full opening (=1)";
+
+ Modelica.Blocks.Interfaces.RealInput opening "valve opening" annotation (
+ Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={0,80})));
+
+ equation
+ // Enthalpie flow
+ port_a.h_outflow = inStream(port_b.h_outflow);
+ port_b.h_outflow = inStream(port_a.h_outflow);
+
+ //Calculate the pressure drop
+
+ //m_flow = rho * 1/3600 * Kvs * opening * sqrt(p / 100000); //This is educational purposes equatioan, can be used to show the functionality of a valve when the flow direction is correct
+
+ m_flow = rho * 1/3600 * Kvs * opening * Modelica.Fluid.Utilities.regRoot2(p,Modelica.Constants.small,1e-4, 1e-4); //This equation is better suited for stable simulations as it works for both flow directions and is continuous at flow zero
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Polygon(
+ points={{-78,50},{-78,-60},{82,50},{82,-62},{-78,50}},
+ lineThickness=1,
+ smooth=Smooth.None,
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ pattern=LinePattern.None,
+ lineColor={0,0,0})}), Diagram(graphics),
+ Documentation(revisions="
+13.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Model for a simple valve.
+Level of Development
+
+Concept
+Simple valve model which describes the relationship between mass flow and pressure drop acoordinh to the Kvs Value.
+Example Results
+AixLib.HVAC.Radiators.Examples.PumpRadiatorValve
+"));
+ end SimpleValve;
+
+ model ThermostaticValve
+ extends AixLib.HVAC.Interfaces.TwoPort;
+
+ parameter Real Kvs = 1.4 "Kv value at full opening (=1)" annotation (Dialog(group = "Valve"));
+ parameter Real Kv_setT = 0.8
+ "Kv value when set temperature = measured temperature" annotation (Dialog(group = "Thermostatic head"));
+ parameter Real P = 2 "Deviation of P-controller when valve is closed" annotation (Dialog(group = "Thermostatic head"));
+ parameter Real Influence_PressureDrop = 0.14
+ "influence of the pressure drop in K" annotation (Dialog(group = "Thermostatic head"));
+ parameter Real leakageOpening = 0.0001
+ "may be useful for simulation stability. Always check the influence it has on your results";
+
+ //Variable
+ Real opening "valve opening";
+ Real TempDiff "Difference between measured temperature and set temperature";
+ Real Influence_PressureDrop_inK "Influence of pressure drop in Kelvin.";
+
+ Modelica.Blocks.Interfaces.RealInput T_room "temperature in room"
+ annotation (
+ Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={-64,98})));
+ Modelica.Blocks.Interfaces.RealInput T_setRoom "set temperature in room"
+ annotation (
+ Placement(transformation(
+ extent={{-20,-20},{20,20}},
+ rotation=270,
+ origin={56,98})));
+ equation
+ // Enthalpie flow
+ port_a.h_outflow = inStream(port_b.h_outflow);
+ port_b.h_outflow = inStream(port_a.h_outflow);
+
+ //Calculate the pressure drop
+ m_flow = rho * 1/3600 * Kvs * opening * Modelica.Fluid.Utilities.regRoot2(p,Modelica.Constants.small,1e-4, 1e-4); //original equation valve
+
+ //calculate the influence of the pressure drop
+ Influence_PressureDrop_inK = Influence_PressureDrop*(p / 100000 - 0.1)/0.5;
+
+ //calculate the measured temperature difference
+ TempDiff = T_room - T_setRoom - Influence_PressureDrop_inK;
+
+ //Calculating the valve opening depending on the temperature deviation
+ if TempDiff > P then
+ opening = leakageOpening;
+ else
+ opening = min(1, (P-TempDiff)*(Kv_setT/Kvs)/P);
+ end if;
+
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
+ {100,100}}), graphics={Polygon(
+ points={{-78,50},{-78,-60},{82,50},{82,-62},{-78,50}},
+ lineThickness=1,
+ smooth=Smooth.None,
+ fillColor={0,0,255},
+ fillPattern=FillPattern.Solid,
+ pattern=LinePattern.None,
+ lineColor={0,0,0})}), Diagram(coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}}), graphics),
+ Documentation(revisions="
+13.11.2013, by Ana Constantin: implemented
+", info="
+Overview
+Model for a simple thermostatic valve.
+Level of Development
+
+Concept
+Development of SimpleValve by incorporating the behaviour of a thermostatic head as a P controller with a maximum deviation of P and an influence of the pressure drop on the sensed temperature.
+It is possible to not close the valve completely by allowing for some minimal leakage. Use this option carefully and always check the influence it might have on your results.
+Example Results
+AixLib.HVAC.Radiators.Examples.PumpRadiatorThermostaticValve
+"));
+ end ThermostaticValve;
+end Valves;
diff --git a/AixLib/HVAC/Volume.mo b/AixLib/HVAC/Volume.mo
new file mode 100644
index 0000000000..0b75fe6293
--- /dev/null
+++ b/AixLib/HVAC/Volume.mo
@@ -0,0 +1,477 @@
+within AixLib.HVAC;
+package Volume
+ "Contains volume models for modelling components which use a fluid volume"
+ extends Modelica.Icons.Package;
+ model Volume "Model of a fluid volume with heat port"
+
+ parameter Modelica.SIunits.Volume V = 0.01 "Volume in m3";
+ Modelica.SIunits.Temperature T "Temperature inside the CV in K";
+ outer BaseParameters baseParameters "System properties";
+
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
+ annotation (Placement(transformation(extent={{-10,90},{10,110}})));
+
+ protected
+ parameter Modelica.SIunits.DynamicViscosity mu=baseParameters.mu_Water
+ "Dynamic viscosity";
+ parameter Modelica.SIunits.Density rho=baseParameters.rho_Water
+ "Density of the fluid";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp=baseParameters.cp_Water
+ "Specific heat capacity";
+ parameter Modelica.SIunits.Temperature T0=baseParameters.T0
+ "Initial temperature in K";
+ parameter Modelica.SIunits.Temperature T_ref = baseParameters.T_ref
+ "Reference temperature in K";
+ parameter Modelica.SIunits.Mass m = V*rho
+ "Mass of the fluid inside the volume in kg";
+ Modelica.SIunits.Energy U(start = m * cp * (T0-T_ref))
+ "Internal energy in J";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a in W";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b in W";
+
+ public
+ Interfaces.Port_a port_a
+ annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
+ Interfaces.Port_b port_b
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+ equation
+ port_a.p = port_b.p; //no pressure difference between the two ports
+
+ port_a.h_outflow = cp*(T-T_ref);
+ port_b.h_outflow = cp*(T-T_ref);
+ H_flow_a = port_a.m_flow*actualStream(port_a.h_outflow);
+ H_flow_b = port_b.m_flow*actualStream(port_b.h_outflow);
+
+ U = m * cp * (T-T_ref);
+ der(U) = heatPort.Q_flow + H_flow_a + H_flow_b; // Dynamic energy balance
+ heatPort.T = T;
+ 0 = port_a.m_flow + port_b.m_flow;
+
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,255},
+ fillPattern=FillPattern.Sphere,
+ fillColor={85,170,255})}),
+ Documentation(info="
+Overview
+This model represents a simple fluid volume with two fluid ports and one heat port. It has no pressure difference between the two fluid ports.
+The model uses the same energy balance as the pipe model.
+Level of Development
+
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.BoilerSystemTConst
+", revisions="
+02.10.2013, Marcus Fuchs
+
+"));
+ end Volume;
+
+ model VolumeMoistAir "Model of a moist Air volume with heat port"
+
+ extends Interfaces.TwoPortMoistAir;
+ import Modelica.Constants.R;
+
+ outer BaseParameters baseParameters "System properties";
+
+ parameter Modelica.SIunits.Volume V=0.01 "Volume in m3";
+ Modelica.SIunits.Temperature T(start=T0, nominal=T0)
+ "Temperature inside the CV in K";
+
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
+ annotation (Placement(transformation(extent={{-10,90},{10,110}})));
+
+ // PARAMETERS FOR LIQUID WATER:
+
+ protected
+ parameter Modelica.SIunits.Density rho_Water=baseParameters.rho_Water
+ "Density of water";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Water=baseParameters.cp_Water
+ "Specific heat capacity";
+
+ // PARAMETERS FOR STEAM:
+
+ parameter Modelica.SIunits.MolarMass M_Steam = baseParameters.M_Steam
+ "Molar Mass of Steam";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Steam=baseParameters.cp_Steam
+ "Specific heat capacity of Steam";
+ parameter Modelica.SIunits.SpecificEnthalpy r_Steam=baseParameters.r_Steam
+ "Specific enthalpy of vapoisation";
+
+ // PARAMETERS FOR AIR:
+
+ parameter Modelica.SIunits.MolarMass M_Air=baseParameters.M_Air
+ "Molar Mass of Dry Air";
+ parameter Modelica.SIunits.SpecificHeatCapacity cp_Air=baseParameters.cp_Air
+ "Specific heat capacity of Dry Air";
+
+ // REF AND INITIAL TEMPERATURE
+
+ public
+ parameter Modelica.SIunits.Temperature T0=baseParameters.T0
+ "Initial temperature in K";
+ parameter Modelica.SIunits.Temperature T_ref=baseParameters.T_ref
+ "Reference temperature in K";
+
+ Modelica.SIunits.Pressure p "Pressure in CV";
+ Modelica.SIunits.Pressure p_Steam "Pressure of Steam in CV";
+ Modelica.SIunits.Pressure p_Air "Pressure of Air in CV";
+ Modelica.SIunits.Pressure p_Saturation
+ "Saturation Pressure of Steam in Air in CV";
+ Modelica.SIunits.Density rho_MoistAir "Density of Moist Air";
+ Modelica.SIunits.Density rho_Air(start = 1) "Density of Dry Air";
+ Modelica.SIunits.Density rho_Steam(start = 1) "Density of Steam";
+ Modelica.SIunits.Energy U "Internal energy in J";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_a "Enthalpy at port a in W";
+ Modelica.SIunits.EnthalpyFlowRate H_flow_b "Enthalpy at port b in W";
+ Modelica.SIunits.MassFlowRate mX_flow_a "Mass Flow of Water at Port a";
+ Modelica.SIunits.MassFlowRate mX_flow_b "Mass Flow of Water at Port b";
+ Modelica.SIunits.Mass mX "Mass of Water in CV";
+
+ Real X(min=0)
+ "mass fractions of water (liquid and steam) to dry air m_w/m_a in CV";
+ Real X_Steam(min=0) "mass fractions of steam to dry air m_w/m_a in CV";
+ Real X_Water(min=0)
+ "mass fractions of liquid water to dry air m_w/m_a in CV";
+ Real X_Saturation(min=0)
+ "saturation mass fractions of water to dry air m_w/m_a in CV";
+
+ parameter Boolean useTstart=true
+ "true if volume temperature should be initialized";
+ initial equation
+
+ if useTstart then
+ T = T0;
+ end if;
+ X = 0.005;
+
+ equation
+ assert(T >= 273.15 and T <= 373.15, "
+Temperature T is not in the allowed range
+273.15 K <= (T =" + String(T) + " K) <= 373.15 K
+required from used moist air medium model.", level=AssertionLevel.warning);
+
+ // Pressure
+
+ portMoistAir_a.p = portMoistAir_b.p;
+
+ p = portMoistAir_a.p;
+
+ p = p_Steam + p_Air;
+
+ p_Steam = R/M_Steam*rho_Steam*T;
+ p_Air = R/M_Air*rho_Air*T;
+
+ p_Saturation = BaseClasses.SaturationPressureSteam(T);
+
+ // Storage of Air Mass
+
+ der(rho_Air)*V = portMoistAir_a.m_flow + portMoistAir_b.m_flow;
+ rho_MoistAir = rho_Air*(1 + X_Steam + X_Water);
+
+ // X
+
+ X_Steam = rho_Steam/rho_Air;
+
+ X_Saturation = M_Steam/M_Air*p_Saturation/(p - p_Saturation);
+
+ X_Steam = min(X_Saturation, X);
+
+ X_Water = max(X - X_Saturation, 0);
+
+ // WATER MASS BALANCE
+
+ portMoistAir_a.X_outflow = X;
+ portMoistAir_b.X_outflow = X;
+
+ // ENTHALPY
+
+ portMoistAir_a.h_outflow = cp_Air*(T - T_ref) + X_Steam*(r_Steam + cp_Steam*(T - T_ref)) + X_Water*cp_Water*(T - T_ref);
+ portMoistAir_b.h_outflow = cp_Air*(T - T_ref) + X_Steam*(r_Steam + cp_Steam*(T - T_ref)) + X_Water*cp_Water*(T - T_ref);
+
+ H_flow_a = portMoistAir_a.m_flow*actualStream(portMoistAir_a.h_outflow);
+ H_flow_b = portMoistAir_b.m_flow*actualStream(portMoistAir_b.h_outflow);
+
+ U = V*rho_Air*(cp_Air*(T - T_ref) + X_Steam*(r_Steam + cp_Steam*(T - T_ref)) + X_Water*cp_Water*(T - T_ref));
+
+ der(U) = heatPort.Q_flow + H_flow_a + H_flow_b; // Dynamic energy balance
+
+ mX_flow_a = portMoistAir_a.m_flow*actualStream(portMoistAir_a.X_outflow)
+ "water mass flow";
+ mX_flow_b = portMoistAir_b.m_flow*actualStream(portMoistAir_b.X_outflow)
+ "water mass flow";
+
+ mX = V*rho_Air*X;
+
+ der(mX) = mX_flow_a + mX_flow_b;
+
+ heatPort.T = T;
+
+ annotation (
+ Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
+ 100}}), graphics), Icon(coordinateSystem(
+ preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={
+ Ellipse(
+ extent={{-100,100},{100,-100}},
+ lineColor={170,255,255},
+ fillPattern=FillPattern.Sphere,
+ fillColor={170,255,255})}),
+ Documentation(info="
+Overview
+Volume Model for Moist Air without any pressure difference.
+Level of Development
+
+Concept
+Includes storage of mass and energy. c_p is constant for every substance. Volume is also Constant.
+The Volume of liquid Water does not influence the pressure calculation, because it is assumed to be very small.
+Example Results
+AixLib.HVAC.Volume.Examples.MoistAirWithHeatTransfer
+", revisions="
+10.12.2013, Mark Wesseling
+
+"));
+ end VolumeMoistAir;
+
+package BaseClasses "Contains base classes for Volume"
+ extends Modelica.Icons.BasesPackage;
+
+function SaturationPressureSteam
+import degc = Modelica.SIunits.Conversions.to_degC;
+input Modelica.SIunits.Temperature T "Temperature of Steam";
+
+output Modelica.SIunits.Pressure p_Saturation "Saturation Pressure of Steam";
+
+algorithm
+ p_Saturation :=611.657*exp(17.2799 - 4102.99/(degc(T) + 237.431));
+annotation (
+Documentation(info="
+Overview
+Function to calculate Saturation pressure for water / steam according to actual temperature.
+Equation according to Baehr – Thermodynamik 15. edition, ISBN: 3642241603:
+ p_saturation = 611.657*e^(17.2799 - 4102.99/(T + 237.431));
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"));
+end SaturationPressureSteam;
+
+function DynamicViscosityAir
+import degc = Modelica.SIunits.Conversions.to_degC;
+input Modelica.SIunits.Temperature T "Temperature of Steam";
+
+output Modelica.SIunits.DynamicViscosity DynamicViscosity
+ "Saturation Pressure of Steam";
+
+algorithm
+ DynamicViscosity := 1.72436e-5 + 5.04587e-8*degc(T) - 3.923361e-11 * degc(T)^2 + 4.046118e-14 * degc(T)^3;
+annotation (
+Documentation(info="
+Overview
+Function to calculate Dynamic viscosity of dry Air.
+Equation according to Bernd Glück – Zustands- und Stoffwerte, ISBN: 3-345-00487-9:
+ DynamicViscosity = 1.72436e-5 + 5.04587e-8*T - 3.923361e-11 * T^2 + 4.046118e-14 * T^3;
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"));
+end DynamicViscosityAir;
+
+function DynamicViscositySteam
+import degc = Modelica.SIunits.Conversions.to_degC;
+input Modelica.SIunits.Temperature T "Temperature of Steam";
+
+output Modelica.SIunits.DynamicViscosity DynamicViscosity
+ "Saturation Pressure of Steam";
+
+algorithm
+ DynamicViscosity := 9.1435e-6 + 2.81979e-8 * degc(T) + 4.486993e-11 * degc(T)^2 - 4.928814e-14 * degc(T)^3;
+annotation (
+Documentation(info="
+Overview
+Function to calculate Dynamic viscosity of Steam.
+Equation according to Bernd Glück – Zustands- und Stoffwerte, ISBN: 3-345-00487-9:
+ DynamicViscosity = 9.1435e-6 + 2.81979e-8 * T + 4.486993e-11 * T^2 - 4.928814e-14 * T^3;
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"));
+end DynamicViscositySteam;
+
+function DynamicViscosityMoistAir
+
+input Modelica.SIunits.Temperature T "Temperature of Steam";
+input Real X_Steam "mass fractions of steam to dry air m_s/m_a";
+
+output Modelica.SIunits.DynamicViscosity DynamicViscosity
+ "Saturation Pressure of Steam";
+
+algorithm
+ DynamicViscosity := X_Steam / (1 + X_Steam) * DynamicViscositySteam(T) + 1 / (1 + X_Steam) * DynamicViscosityAir(T);
+
+annotation (
+Documentation(info="
+Overview
+Function to calculate Dynamic viscosity of moist Air.
+Equation according to Bernd Glück – Zustands- und Stoffwerte, ISBN: 3-345-00487-9:
+ DynamicViscosityMoistAir = X_Steam / (1 + X_Steam) * DynamicViscositySteam + 1 / (1 + X_Steam) * DynamicViscosityAir
+",
+ revisions="
+10.12.2013, Mark Wesseling
+
+"));
+end DynamicViscosityMoistAir;
+end BaseClasses;
+
+ package Examples
+ extends Modelica.Icons.ExamplesPackage;
+ model MoistAirWithHeatTransfer
+ extends Modelica.Icons.Example;
+
+ Sources.BoundaryMoistAir_phX boundaryMoistAir_phX1(X=0.001, p=100000)
+ annotation (Placement(transformation(extent={{-100,-97},{-70,-67}})));
+ Sources.MassflowsourceMoistAir_mhX massflowsourceMoistAir_mhX_1(
+ h=7e3,
+ X=2e-3,
+ m=0.1)
+ annotation (Placement(transformation(extent={{-100,40},{-70,71}})));
+ HVAC.Volume.VolumeMoistAir volumeMoistAir_1(V=1)
+ annotation (Placement(transformation(extent={{44,36},{84,76}})));
+ inner BaseParameters baseParameters(T0=298.15)
+ annotation (Placement(transformation(extent={{78,74},{98,94}})));
+ HVAC.Volume.VolumeMoistAir volumeMoistAir_M(V=1) annotation (
+ Placement(transformation(
+ extent={{-20,20},{20,-20}},
+ rotation=180,
+ origin={66,-82})));
+ HVAC.Volume.VolumeMoistAir volumeMoistAir_2(V=2)
+ annotation (Placement(transformation(extent={{40,-20},{80,20}})));
+ Sensors.RelativeHumiditySensor humiditySensor_1
+ annotation (Placement(transformation(extent={{-56,46},{-36,66}})));
+ Sensors.RelativeHumiditySensor humiditySensor_2
+ annotation (Placement(transformation(extent={{-52,-10},{-32,10}})));
+ Sensors.RelativeHumiditySensor humiditySensor_M
+ annotation (Placement(transformation(extent={{-10,10},{10,-10}},
+ rotation=180,
+ origin={26,-82})));
+ Sources.MassflowsourceMoistAir_mhX massflowsourceMoistAir_mhX_2(
+ h=39e3,
+ X=7.5e-3,
+ m=0.2) annotation (Placement(transformation(extent={{-103,-15},{-73,
+ 16}})));
+ Sensors.RelativeHumiditySensor humiditySensor_C
+ annotation (Placement(transformation(extent={{-10,10},{10,-10}},
+ rotation=180,
+ origin={-50,-82})));
+ Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow
+ prescribedHeatFlow
+ annotation (Placement(transformation(extent={{-40,-52},{-20,-32}})));
+ HVAC.Volume.VolumeMoistAir volumeMoistAir_M1(V=1) annotation (
+ Placement(transformation(
+ extent={{-20,20},{20,-20}},
+ rotation=180,
+ origin={-12,-82})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ startTime=100,
+ duration=100,
+ height=-2000)
+ annotation (Placement(transformation(extent={{-80,-52},{-60,-32}})));
+ equation
+ connect(massflowsourceMoistAir_mhX_1.portMoistAir_a, humiditySensor_1.portMoistAir_a)
+ annotation (Line(
+ points={{-70,55.5},{-63,55.5},{-63,56},{-56,56}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(humiditySensor_1.portMoistAir_b, volumeMoistAir_1.portMoistAir_a)
+ annotation (Line(
+ points={{-36,56},{44,56}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(humiditySensor_2.portMoistAir_b, volumeMoistAir_2.portMoistAir_a)
+ annotation (Line(
+ points={{-32,0},{40,0}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(humiditySensor_2.portMoistAir_a, massflowsourceMoistAir_mhX_2.portMoistAir_a)
+ annotation (Line(
+ points={{-52,0},{-66,0},{-66,0.5},{-73,0.5}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(humiditySensor_C.portMoistAir_b, boundaryMoistAir_phX1.portMoistAir_a)
+ annotation (Line(
+ points={{-60,-82},{-70,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir_2.portMoistAir_b, volumeMoistAir_M.portMoistAir_a)
+ annotation (Line(
+ points={{80,0},{98,0},{98,-82},{86,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir_1.portMoistAir_b, volumeMoistAir_M.portMoistAir_a)
+ annotation (Line(
+ points={{84,56},{98,56},{98,-82},{86,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(humiditySensor_M.portMoistAir_b, volumeMoistAir_M1.portMoistAir_a)
+ annotation (Line(
+ points={{16,-82},{8,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir_M1.portMoistAir_b, humiditySensor_C.portMoistAir_a)
+ annotation (Line(
+ points={{-32,-82},{-40,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(volumeMoistAir_M.portMoistAir_b, humiditySensor_M.portMoistAir_a)
+ annotation (Line(
+ points={{46,-82},{36,-82}},
+ color={0,127,255},
+ smooth=Smooth.None));
+ connect(prescribedHeatFlow.port, volumeMoistAir_M1.heatPort) annotation (
+ Line(
+ points={{-20,-42},{-12,-42},{-12,-62}},
+ color={191,0,0},
+ smooth=Smooth.None));
+
+ connect(ramp.y, prescribedHeatFlow.Q_flow) annotation (Line(
+ points={{-59,-42},{-40,-42}},
+ color={0,0,127},
+ smooth=Smooth.None));
+ annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
+ -100},{100,100}}), graphics),
+ experiment(StopTime=1000, Interval=1),
+ __Dymola_experimentSetupOutput,
+ Documentation(info="
+Overview
+Example to show mixing of fluid flows and heat transfer for moist air model
+", revisions="
+10.12.2013, Mark Wesseling
+
+"),
+ Icon(coordinateSystem(extent={{-100,-100},{100,100}})));
+ end MoistAirWithHeatTransfer;
+
+ end Examples;
+
+ annotation (Documentation(info="
+This package is a first implementation and will probalby contain only one volume model - if anyone has a better idea where to put this volume model: feel free to move it around if you make sure other models will still work.
+"));
+end Volume;
diff --git a/AixLib/HVAC/package.mo b/AixLib/HVAC/package.mo
new file mode 100644
index 0000000000..ed262cb946
--- /dev/null
+++ b/AixLib/HVAC/package.mo
@@ -0,0 +1,10 @@
+within AixLib;
+package HVAC "Package contains simple models for heating, ventilation and air cooling"
+ extends Modelica.Icons.Package;
+
+
+ annotation (conversion(noneFromVersion=""), Documentation(info="
+Overview
+
This package contains simple models for heating, ventilation and air cooling. Most of the models wehere developed as a part of a course on modelling of technical equipment with Modelica. Some models are just used to show diffrenet particularities of the Modelica language, while other languages aggrate several concepts and are also improved in regard to simulation stability.
+"));
+end HVAC;
diff --git a/AixLib/HVAC/package.order b/AixLib/HVAC/package.order
new file mode 100644
index 0000000000..899aa21450
--- /dev/null
+++ b/AixLib/HVAC/package.order
@@ -0,0 +1,18 @@
+BaseParameters
+Ductwork
+Fan
+HeatExchanger
+HeatGeneration
+HumidifierAndDehumidifier
+HydraulicResistances
+Interfaces
+OFD
+Office
+Pipes
+Pumps
+Radiators
+Sensors
+Sources
+Storage
+Valves
+Volume
diff --git a/AixLib/Images/House/1OW_2IWl_2IWs_1Gr_Pa.png b/AixLib/Images/House/1OW_2IWl_2IWs_1Gr_Pa.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2ff11a50fc1236e0f403e9f97164c6c04fcf096
GIT binary patch
literal 11148
zcmY*fcOcaN|GztDXN$7;$n4_~8JE3RMFak#Tk^Dnw)yAz7zv86_OD
zvWfe>PM`1Z`}_Uj?e2ZA@q9h!$2%@CV>hQe
zw|u}iKGPdF+?-s(m*u@-Fo_fTS{E(_j4e-u#tFHGPJ7exM>-qMF%TWKHAX)F`OrxC
zxPaw2@ql6}qVnBY8Jf5j>TXBtR%?o`ex>BM*&Xj5aa~!9B+t(7+m&wbe67afF?IK~
zf94jg#OITNUe#+cdGpH1TMy5fgY<6C3`J>TSfbVZr?I)&%!9^f9na_V
zX{f=vNY<|>@og&JaUZc8HG#E>TJrpW1PHp$3RivCVfZ>kTjPR`r;6=XT*wnD5rQx6W*Me9R@4)55rDs1>P
z^Bmd-wy5&qGR4;Po8?FcJ*A13D|nNV+~VK9l^eK~mr8|6Aheeq3c!tZoP`B50&6>u
z>|duI^Tt5@cv1g{H&5q$lx$g)^PwAssexr1FQB>N
z-VLp@iYXkbet&{pcyGQIs#NxuuYk#Z2y_yW|LrpW)Ap>3FCkft8S!z*
zBl8RO%90ATvr<$uG=wO^tiriLKHN;vbf*XuXfxC0KABMyz+1(NZ_B0_`7-6H1-JY5
zEa@Ip5C)f8)ah#~vx*Ag;8wD@!sx~o*w3kn)^*q5aN#F|C@R)(j*9b|L)YB853+-3
z)OyY0_ur-GOcjjhUYcS6q|;&~-A5-9hhmT(%FIry#
z+oq12yDe-(69u_Yas<3p=jZGv2MbFc#+=fa8y96fw*Dv>W>UcKYmY{d;d*XP==C=`
z3eJfz;#<%klg3}1u&vVFn=tst%G+njOrIQ14zxC|X-I0$T&ga~
zj)4#`$Q_BjR6KY*kYzCf2m9{T?AN;nPnhdoQit1wBpf6ROY
zdAXs(%yVvxt|}BjS!94d7+SX|pq$Uwo|U}ZrK6y-14%N^Wfpvq#}Q_3`+o2Tt4)=G
zaAy4I+Do;{gKovV=7T83JmP}$&5*^C+M{<9x9-RSQ?J~eE$%Q}k}br{T4?tCIe`TM)-q!^n1V^x+U1LXDP=Ls43#Po#Kq`X|%QVf|~XvnppqF9&h;2+{(
zdJgYTYC@bKZr*-hJ%!uqh3M*T!D-QRaLg9^DP4lB
zli1QBprxqpz0pdR(T2!k=Lb5Ttp`7$$pUOjSWA8?cyK~=FyIC`ig7p^fviqZ#+$@B
zW@V%@KtV&~V7jS*mi$Kjw+$qAimcDWuakw95kGdUo8ZTB2^@b`;0M>HbcwV;1P7H<
zX2sqjQv?E`9JpDf9_6N~V^wh0$Y(rK3k_#9L)aK3^)mKI8kDh96AlxJC`A_rpft1u
z16Dd?VzVTI27;LJmb&QXw@1$3eYFuBZ}+AdsKux-zKHtlhfzQnwm%x|mRy<55X!^0
z-U$LY7(C~ShN8CIScII*wFg278eH7eNaN8M_jAewd2J19F}N@e?E}2-B(0je0mlgU
zLkMxIJt5~n{dDi>dCTEjf;b>waPBQevuiaTH8eBxJ-gAq#}^S-74FDgQf-O{ZrUrpxY
z6)`0ceVpUxtF9+lp!`U&`R&15->Od2O)%o$Z|5upBLL;wf$MuSoqfc0-jpSE;wrTm
z8h8!pHC2C4QV>IbuL|65^375GuPrc?*$je8#CPuo^-T_ss@kVSP@3sPd##Mrg?WZp
zOX32VED&QBaJoB6pV@&UBt&^g1L|H~*0>}WXZLvsXh^lpGxK;7LrG^Hjh?^ySrkrw
zgYod{VY_Oe-3pNZjffJv-^l7>L=a(m^5<-ZgGp}4FE#N12=b#q&={TFud64jI*x?o
zn$1yTh`(h;H)FQ!NaHyIHV>9MWy1GjorzXEjDS+WE1F9>;lC^}l4taQzF_JvenEBo
z!-N;7eR|di2A8@z@R_pDwV#}UPbMqS{JSqXqMk`9RQ+G_kZDG+!Ow0FAq7V}zGD$v
ztdYq6mk)o8gXL9WGnMYJ&cqw@N
z_PyaqBAkS(mU@$7KVl%)v
z@ktADezrh@Z3}oP5p@ZB>B5>=Rv>j$O=R1SJ(_;y-E*$V{k}3Hc-MWu*cqx3MD|
zWAEXK&E&v0#r-AStBzWHb;)+;n;uv($UrEEHaRJ3HF5i#lf6mM@jQ
zK*)*D%)3AHC`*=-WNc|rZyCg)1#F*d?`rqxPUy8?B!wp}L(!kg$cR5fj+K%-kegs~
zyGSx&;IiQI(YcYpTT0=`?u;G;0e%+PC4<+0f8yc8ZBb)Hm^s`vfbtxl%bgyW!gFT)
z>^X7=zI^I`mnU)NGBt*4A>?xJmg`Qy!(*#pHoHfFBfyN~&D+~DdJzW8iTh2X#6HpM6*}Si>Q*oY%%X}M_3)aSM$>Yqwn$O1m
zU3xhQK)1;b<7S{R69^lDBESmZd#>uS->EcYaZR4HKzI3}X&eFzGl9A-P!VkG@_vxi
zb6fmclp%U>y`Zx${rboSaf4f5@bS4sQgR4bFmTmO*i3-
zTBNV_W@Pmv#T~NQcsRelL6AebA8V~pu!||nKw~^!#w%cZN0@Z_9YegUe>2&6xb0H
zz4(zVpeV@dhlnih*6QzJ68)!278Ln=Y|zUUMf5Q}T#EGCDi_!ZX1x
zSdL>m>n)+c3O4#yWA2IqLNFF|m~rI5DG>-7631C*bcx^0dK>3fBE$8s?!e%lMUZrR
z@CV&uW8LSUWI>pw!RAv`Cu=T{MD*kg&R4Ft#opTUdBZy}eu#U5-^$c{F!b
z+d*CV=+C3V!k-8}oR1(*xb5h#=IOwt#>G4Nf`DZuMesh|iHnH)YWl&dPD%Cn3_01a
z4DA3oYr#+EDa*)=gT7nrPYa5
z39eXe^ab>|IBr3#WIk-$zs^{12KzCU7L1RF9!1`yCa{v!n;GOLE7VU#gs?dUUdvA(
z-uQ7Nvx16{bi#l3-KWdq*#bDZILJO^VO7*rWkVnn4qwJWbA$Jo%^2}bkY&?^G(0C6
zN_fR$F`K8*ekhoh+<2%m3{BoSm^d6hsyN^gkmJK~Gvf=Ca5LR7Vcg@3>qaHZLKbUs
z1|R0*9H0I9N)DHr&sy^0+G2?rP@%#YlA}1cxU7_^#cZT;w3pQt;5j*vJ=ZGj*iUr?
zU?m^U^Q2ku2eR4o+XLjJy%pTx6!@#E;2@%-c7UTy&F*z}w#QE%AaAj?=vpoDwYLM3wODw3yH
zHZc~<{J{0uwZT;hULGb|G+V#uF8VNpr)MbQhT45eCj2PvQx3okKN`$fWSZh_HEaiG
zYh;49dg&13M1JG+@G~lur8w@U3k6pXIk(#;9L{Zu?y8xJV}g@|;~-hNqahPdq%%7b
z#e8u0+KiBTcLL*@93^t{e5*rC1=E
zVDf5%PjqNBrvy$=tus0A6ujILJu{Ig-9Sh=+6mt;woScgdfr%*8Mr)Q9L5%fq6?8a
zdA0em;+qGM!t^bx54@oTLm>zoPdW_8R>MZ_!GY7`FI}zMIXeH`g?ekDM|8P;VG9wu
z9Y|DXLUi}2Y-x&!Fhbc0?&*ZY(aGa>c$B{-`T>9)E&ea_q}cI2k{&39JL8t^ntpa@
zIqQ{F`zpsC0?CbM(Pt-4h2+ztqA`qLt3^;nGb8}~&SI@BsohxD&GpYRC2w+sZUz!7
z%(C^zm6IjVQlRWv5r0_^!sb;^kRKcA7&3HPst-=maSkF8V?1zU%6`}R(2|V{+UWkX
zaJ#WxHP5tO8iD|vdtr-f#6#>BAIaQp4fydeNCdAQN)XoAt4zn5dpIIKEh0Tb}pEW;F07sYzBHS|sNqzt`7VS(g2KFl#
zLj-xJztizGL2Ei5or_&<7=ohg5`JybBgUlQ#vM|pwHS;t65<@saA}#MsR?KrdpfZ(
zKHNr%vU|&ZhK_oN^%BYF(ju|mpM>rf_tIcSN0Rl`4@oY&*A|I7ADs&o#5xQ38;)`V
zd@%CzW`Fea6?uMRTXZvar@x6Wp({O@_fGT5@F9KO6gFRFHoS4<0hG{u67Yy})<;Rk
zpq9Tly)^0Fx5$A7>0N9_Vx^M*<&tUY2M4~*r0{1m1Qk)Ra;NkKc;Ig;`u(zw`FM%N
z!Z&%=OBYQRyc#lHv^-z`Et2)^T7jVgLtJC+x7V3jwZ!vt;vnu(i^-Ni(%QB03eN`+w+|lfV06vF^NBe2S2!bNl
zC7PztkMhmdi_Z=we8vk8owjBaLo!GkRuLj<*;PPk;L-T1bXqcsBW61(>}|jyXRkri
z#;4akU8}0tb4pv)U)>)DO%ZoZQ+Mor{fSo^r{$&$wpG_oz&%IzNq}4Vx^vw)6J9oQ
zFTW$N%mcR3;QyiY_t|o+TYnITVz&1kIJo&B*JQH!
zU^0vj6ZC?DzcFlz1&O6ta`2O*KhK{(^E=b;gDA54(OIMP<}e=_T&tfphpV{=?r~{U
zp_@lDN0FS?dCdViHOuC}-GE{`eZWPZq^_pV3JZKVjQ3`hg8AZO$o|_*T-l%HIcs!R
z%;vaCbeQEo5x@qb@7M=T9M*L#4mv1(djR$N9U2a+80!%Nkk!8f^XyphWk<_nuVC}q
zBxK*_97(vL*Z2VAI{7+iw~XDSJ{RiUCfhCIZK0-{y9Asy*E=m>AbR8YbkBZq^27>l
zW6?brbHS6mw|n2eILUMJ3*)}B;|nZ=5HW1D^S_^7I3^G(ayo5I?(5iQ3V2(jEI+!G!BUE3V-g?-&!mGMR#~Z^~GZMM@+)
z+#geCfl32@fre0&s!p;<*X;`hbmC7dU@|4jO_;xm~?4obJo%f=q4ktpX?c330b?uZ=EK5ng<~Q)NSpY5%9}81R?7
z!KI(w=kS-6gWsnj7;)MqL&(SN|c>MoRf6>
z9KfI`W_;m#&7H=VRlyCYK17z3>NEEf0MnDa7>;xE+0qV^*)@}d!7Ph4myKVRS+8J;
zRV%7T165AppGZhg7{@|`Q6@uit{Vv!%oOEQiOt=Akf)NH9k#zz(sa0}LQRN@oRb%k
zFF2}-Il*|maL#W;wgUew-F15LGft23mI;3br$pu(4?^#APa?5lpqLMq1-|xrMM0i#
z%nd_}H8*ZdX*)o=q>Pt?eL8@%_wA${x4r;*VvR0ZrfG90RWvs+8DgU)*s#w7nAf@C7esLA=g9wC_BkdFD8&hW?$*r*R^egOzumAMPe_GQAl~z$IBg9MMegF9
z^}m@#4y&0wuFf1^XKRw@1m7sno4gc0Z<{75|ZsD!)
zJwpE$2R@jAdqwwr6^I$tONcQMlF3qI$VgB#A?ldZ-fHwU_X^*@9jE@AFy3*JwI
z{H~&V;M!K5H-XNQYy$x|E=-ZgjCP)M2^H_&JCY}l$n>~?-UzGlexd_XGXr#fdzDB(
zY4sdtJl5Vz{c>(*-jl``GLcG%EPGyEE%qw;VNHv**K4`ha1yCT=$B3F=-PN_Qy*7rx?P_9cr1vE9gUt9lE)cW&>ov>K~w67ibLhR#jBatleo}%sYjaXv4l9ksuI4ZZxi|o;i-ZvF=ouE*kS|xeONihq2Jo`h
zXzXzjHMQMLORV&$k<)VHY(mdK$lyV9Uo12hLn;{nAZUz^jZ6c!RAjgI8Y;1{nGX;F
zQ;#cc7!%{CRAOT$91AB3_6V<=7y6LK0Ew506!~c!k8l;kX}2gn
z#3S~nolH4fwLV7CSOvZNPX_YjVCwuNwRi&5p4=}Dz}sKrFE>UrsD>CJt2OUfi^SWV
z#J`uSowB-`$G5+PK3#9g(#V#d}Jt+50d{dbi&M0)=n&BhGij
z4u;AQ(6m4BS35inr8_(-%$1DD>bsy6hS|`czuazd#m_qW$E?1S&B5c(ZR}nRffvyX
z#Oarm6|sU5>!A}t9gR=SH8sZ6;PDha9nQ5gLb&@2&0DcGFIUu?oaXOx28q6x>!gt7
zgd0>GspeIW=d{fAFrt=9{xmNa-m0!4xsQrzPVnSYphmt(4{~4
zrVv@J_JiOOtw)hb^J6E$bDr)hTdb2M`r>Gu;G@(5=ou}@Wo`)M=Zj!XhsmpX&Fij*
zS~d4p?YvYr#qA-om@8TNZJBlzCBik(rNTI04fImtbm)5c(Q41>N8#&l$evW5T2${s
zCId&$M2=N5`M|D+DXsl+!q@rmlKtu}>T5?zJ1OeGi>5*JhONY2O0{o9#iEvr)J8I0
zsa@cz=*$!F6PuQ@L%Po)sP``hA+h5XTZ;GT$E&}p4uCs~_*eA3o9kAqV{AG__jgw7
zc;B53+;}hq>{uA5?aX;sV@!4YO4^X?9QBV^B1JEtc1>`b?2oMO889c~So~yyQh4F;
ze2E(qMx(YI!|(?8UG+HyNYwC5dL5Fp+GndY2fB*RHii1FZoGKP7LOIcmB)jcNa9ri
zT&qK?)#8O<0rwSAydK=RifvT?Bp{ZQ%+I0tg;#oM@6<4c()F^)iOK3SB?tPKe_hr
zvJ^v*jExqKF`E$;#3kS+Fm%5
z3war9O+BtWX4~;{gr=h*$
zIDS*Ksg^MV7p*uJxY-Uid?CXzMdvfmQ#3P^~$){?=;=w-jqUD86AYEHj+%VQe`$S%1SAmkL%zI>EYMg`JG#Kk@
zl0GF<`Q`$UuP5c33lcGQd>UWg1&w=g6yoJdq@sN?tX~g`5QLFsNT*$Y0(C1Qt5G
z?5fyJTj^bo%4PMbe)ZRg$7&As2LzPAM%H+_63CM|TPm(OIz_3#>9|+<4eHbT^?{~%
z{T`xysW08Qa#S`L5(5=qC0N5!gEToSI
zCWzW$U^R)zU-3yxm?&qq*w3%QW~T<7f~S{=-wkBPS4*gI4PVfDUIAYYwFB9kLM{?e
z&?-jg-BP`K1?~T$BK(||?vom6Mm)e@m)JD9G1eU`=OPL29LuM-ijI0(I}ZAs#^lS;
zgNQ7XN6|}auKlDN)wtG&I)#TFnkdwZdv5nEcEODU-T;Z3J?aS03i%VYYFV>kekRp>
zz;#4lHTzZRXgtFuDcpkdL&sG?Ah^3FEQ{z?6J1B{IKcvNc*`@m(S!*zL1niyDn;9x
zi{5FeL6~kT^NU~Z1+wB%sj`dC55+w}hR5@MWV0|gl92q^j~<=`6~12E5KwSMHTw*9~!7JpI9TmB%5v2r5~h6yaXlw
zOI>vte*&HIIN_dUP)X#akf%)C^GKe8C*P6W!>w(iTeqk9gD%ZaZlJjl90|+iF`{5o
z(3S+xVZNZIY3F9c&Ym}*Idd^OC55{?rjj|;5uv>Dk%9yq0E$y4zus?Ty2xM7TTs|8
z?PwY4B$M`-ReL%XK-yo4?~=*>vlxPZFgKUbs;{bgH__IX=92c)3r%-cHEo&k4P!SD
zV<+I;HEf8-rlfs$wRlYyzXK8rkW|Le5p2eepIGo~{AarNvYp-kcfsEe)v^a#n`aah
z;Fm9=9w?ZiTPe#L_G*BHK=GdBrLsu-g#vfO%!`U?$a!0du&Dt>w7;kGdX;6G-~qt}N867R
z*Y1$|Gdj1scD9IgQ^L*H<
z1jyMo`#Dp>4|s1?9KL>7Do>9-KiqFA-K(*Ie)DJOBxQ=fT_8>d_x)gVs{W$k$BmP0
z>bqr>IY!42-7_vHXUkn#Ext&Z@e$!#|=e-x`paFSrE52B?F6zNk(580Wwf6rS)?lDRjnwdV
z{9rT#pN=08skMhibnl{xQhCRQY67@;)#-Dr)BWP))^eZ(I?+@s7T3>&JCLT`5cGe!
z;Qcjfx^45m&k%w`^=K!!At-X5)1f)ZC;X=NFlZP68*t=K{b=8?KE1w2&w{^uKt^iT
zsXB>QaeVRys%Tr-Vai>7we%GgqF%6giVyc*h<2d+W*Q7DajVXy3{^gQ5TTa5dz0DkGamAb205@70Tm?N7u>IYYw?Qlge0@lmi)rbdckYicAqC>PrgMUU|(7A
z1eMe@sv8TQG`;fH@Sfmb`sCG{L5yZ`GPqdsTR-2ZlQj?aM2j`pKyM
zcwk)D+!4x>pI)PWct%x>gZ?Su4j5e97hxk(tiS#B#;E8AmCT;Hp6mAYz{$ldh4ywX
zT)oZWqHIale6>%YF%8xhpE
z+tYZ?eP31ALyvkCBi(^0vEbX{PE>d{+zppn
z5$hg5DWHo^E$}|6v@zOp-FuV@w190~S%{9GMI^`HVu@YV=tP{3^$p4#y#FTm^39DICD2$no^g(YR2e?4?$3c#23bEzdi!FR)?p*z=r&-15
z+do@RwC^tgdwn&yakcn7yY{@qs4OBzS*=dzR;BtGJqJqbcT%NCatYVlcbY9;$^KM8
z{ikIQ*1Z$BQnc|ga;Fsj5GuFx%-v?<9mAW|03%{(`f{D+D3
Ov%a>8R)xm3i2nhS|E!+?
literal 0
HcmV?d00001
diff --git a/AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa.png b/AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089e54435c708ce4b37bee624c06989eeba93d7
GIT binary patch
literal 10428
zcma*NXIN9&7cY$15Ja$0r0SrkC`Bbm6$wg_7A7ZxATSKl5)cIf0zxbV6e)uU2vQ7D
z2#2OZ=tV(9K{_ErXew$Tl+a5c$vuhA{O5h%`{91bbCQ$2_FiqT^;>K22MB9ZQDGTj
z0RaI~bF=fm3kV2;0s@eyD41o+?()b=*N!hW|sp51f=%xKASwV
zdms{l{ec(k1Cf3nfx)i+?gCccZvK7&(60kF9v9>$SJuzbb*xy;(}MEM;hRX>=Xv74mA+)l?;FTgIjI9rjAgXXyY`-zSpzISEB!GivLwP?)!
zc0+rGgVWKT`*I5UOVw~YiTMyuuHOhU36HbN<5+k7he9B2#TitWE-Roy%6Vg5UGe`bf
zI2rd`@HPV9`YL^x>=HW8ooA-C>y;VO&vEfF*)8KL(BvQDD7D61k>D}UEEi35x&abJ
zf=IRspjTb%yT=w=wO;I6n-jKiGlERjeqm(h)2H@EnFuDRA-_18KDPQCc{zqN=%3<}
zSr%I`WpY9YCGc$IT)SiI<3jhVuayY8PfPn778{EGBz4gGRDeylgW%ZU5#9Cg-iuWS
z4L!z?+_|bg6nAj`T0rK)4GX5(eT2KHb6viR|ufq=3Tk-qd}GsgOC7)P+rQw80^_;c@au&K6hxra(gVR7!wEXM)Cju6G?*W5oDqr
zMmkpUD$yg$FyxpTmSu<8Md|^QS2)Suh7vQpcqMGn8Z!cB5kL
zj1pg3g79=);Vv4Y4~+PX362!|A-!H
z3_GUR09)7y+!FL$DO>CJ9jHhUA@LM0@nPGaBW1THbi2J41FoGfas6y^>KD-_aS%>+
z@*7?L{tZ8-uG|nYQ}Hpo1Lpv#lJ^((q|QcZUeavPXTp(72KC(fCU#5doV4lpFm9V2
zi^~mGm$T^@zA^kap7FGkb7g+9BqHgZU+NX?f_)@|TD;*kzY)->9O9RtA81#wDQ$&T
zk86R!$(uP8)1X?0sAKRIc2tqx-rL>Pi?lQBb@>u0Fjf;-8CoPpnCVA+^O|qLMSL{h
z^fazwb&Xm78GI#5Sq$(P?Oz}5!6QWd8g!Qd|7LoHmO?(&IoxRe>%$hCP=l6)hQFrR
z{qAtGd#Pja$mgfW5UB&DY6b@YOx=CvYVSZ%>e<)j4Nsgt%66bv6yJw_^`^oql-0Ae
zU#WDx-W@zvziuPr9j7SUlFyyhNnrN|9M4u~2S_jB98avTXn}}0)8mSj!TFR#ia5yK
z*eFRVs9$}{DOq6-CS}-j0_2w__fJr}FYDo0xhu?D%;(Xd-}7_Bk?1(BYjunCri~Xq
z8*f&l(E9Am_>A}6DNd4q#g|3VbMK^?Tw_gY&{)$<`4e(4K3P{queOU&G-G-zR@oDi
z_ld8kUKt@-a~K&qLNsD|b#oOFoESTfQ*Q{5IDE7~|A@S*sN%|pBr%jsRh)~b9USY{
zZT6<$B6}|=0H<82H72B2Si>?$I=5X7`c`@rSQzPfu{C58-Ucrl*YSRrTcX1m8fXD6
z>GZf02^dl?@yT4^`YWQTKUaTDTz)a5)|+iaNMCW#)ybiK5%I~SRt7uYl6_Mxgd#YE
zkvypRQD!^emM;`out}CTflokvGXYPepblHcea;>n|hXYXR(c{Fs1g5rDEG)ZL)m6eA(OMw>VRe@Uyf=
z`fA?j#sb&^zVqzmh8(rA`2U!2yP>r^qw
zbiZOOkKZ8pQk-J7B`@NFh^^3P+MX2gNAT;3hHy`(S1N+gPzfl`^J0<4xrq4%&uISv
zQL#ggXR97xxw(`O&5=Hbg~EHIwsydJPXR>l3j>&E7u&uKrw)yXQA!P0*x!CA8XP+W
zErxpHk1KbZkZ_drGZ=bdF99N@LDzjt^Gy9dF^V7O^Q)_0M1pthfYy@89ZGq)9HCtH
zHl_K6EN|AsKtmn(!MAX|8B2v*U+oQn-s^RYAJNTQAQu-#qI;L0I+upbrFfR0?47r?fhdvmh3ZX;V17=#I$0e4ag_bd+h`MyY0datHMQZc09UVjRu98Q
z$!mKpw(}O#1e!<_Yj#6*^OKsuJ*QFazmFW{^IvXO=iB?Exz3b@0m6L$iki%Aevz;P
zMWC6HqPlxDzAKv8EWnpOyLDzPM(_!I4q7*jdrM!K-p=qRU8B`6vebME_keEVV8{y5
z1;eAV!LjR63C)D`Ghc;y!X&B2reAZe{T`p(P5F)x)p98dynFz_ql*YKCgx2yfB_h3
z03rGnR(Kn-j7C+Xm-mx-F=Ac_LAN1%B6(m%gy)0e1k_0XUeNWirk@?onG|&z)r;Kp
zZYzKO$jC5Zo;hb;&z@x?E3s^lB3j3s>RaGoW8W&~a
ziLJ#(?NMk$FCwfEj%|fwe?{fQp-Ltv(S{wZElMO_K(1XNq>og!-azpw$GsR|RfE4x
zGde{m*K^UKDz_1tuMwilPzw3>Pj>o1B}HH-5*t?}@aWm4aP9%Xi03Eoy8D{zn8ML4
zI^NTnw5%vbFO2Z_u0dorB79krAd2sh63RAQZSbWL_=ifvQJ`1P4i+d3*6dr_U^PLzntpwO*{VpXEom#92Ie;Maxy$?O*FyptG3`aFUz_SYydoER
zYHiH0;r!1L{J*S8_2Gl5NmB6*m5jf*o5c(c^4aC@BV%lr6R2S5zxcfS5W
z9@60bC86eL&EMuEpu}DY|USQ+x{^W;2%P(>C
z|FFW&se@35dH3L9yWtajMev7f;kvCm5$*BMa+L~0Fqi%#3{9Oj;Q`j(V>fvV#ODeA
z!#IRkf9e25NDp4`yJ>(9^@Kw1e;M}--Wasp`Y$i1rKSV7U=h#xoc$8F&P#;H=RcMd
z2Su+e#Aqe_Wd6&;pn*-?fipE6o_qb0>Kv*6db`MO-KiyOzEr9SYR|vO_+?$R5v;s1
z%Fg}YSS>|x;tqFU;rHGJR2(!`eg)$k3Yw3IjqnFiP6|;*>#pnT1h-(1IQi{Q87C-896=b9v~+w?RG7No@=@m1y^#9I1VnflJ$8JKx~zX3q6bR1bAnF-iW?J#
z%AWNL2KZ4qo)(tmS}IZ|pF!?d-I327K1}Vx^SBeHk1te1z(L0sEDufZy^sEv|8B-JI&_jf5j&h9Q=b=PU>gD=bhM4jak`Tlt2=
z#)F8WDVD4sll$(*pwr5IaW6vvbJ+!AxMV!kE(pW3H#s+-yQs^!3Entsx@2K@1&OuF
zIJ~KAst@NoS&%M7aW%2wF&x!T3OWs>x-6!?$YaSb5Ki}5eg|a)
zydutH--t7-qr&hiU5)>&Te}1$yGXPJK{tE9Q|1gpJ};kZAF5Bu3kttM8MEGeyQ9cf
zz9s;O)-mRJwtVx6(7-YmH06Pc6&_tJ8&o`<&;8uxW+PhHMlK+r<5V>Fg4mK0@HkLP
zBsIOyhg7e7cXHh4mLztui3|1uG9r}m3ljCWm5pI~VApp&Wb&{U%;UU-j2OkC-;N>y
zx++l&qO-09XYh7Thi%bXPG<1m*o`0vdbg+nnMJ}yc!n93H}V42kQWYom4JZU4XQ!9
z?n#0}*;}yfX?_f(gZ_R}|Lc0N1KKHVGsQRtv8FnL#bk9P3QACInj
zTI96!F44(sab5QsPOo9-)G*s)aLAHeQ@lIcHqyJ>`fs%;G|N-k)H@V|Y7=;thLCT$
z{5Qk!7B-Q7Zt@SoUnjI-`ORXK^9n@$0?n(9eeuh3Com}0#0MXF6MFU*l8xde{b}0
zWg5we2-QJE*V1lEU>qZJU2NIZrj#Hfc!>lL=lgv%9NYEah!*mo{XGU5Q+o?Fq!4xdU|Sb>qm`5Uc%|u
zsHvZ^owSXfsP;Rfty;qwv+XnL-5dW>kU-mV=j~(F%`el?zl&{jMl#Hz`|`faQ9z5$
zvAJ+JB$r%RvIp#Pc>dmHkdFoGEtJ4}(E8>1&k6{_kOQ_+%LZ=z4ZTpn6-_SSRgjwL
z4wHo+G@}@|cgcB6#WNI}e4b)}(iUXVcfnx~Qp&J3#Y{z03QXJG_x?8&39h6Bk~?CA
zcyaZSNQ4q0bo^CbRDA_DRSUTT<)sb`o{DiKy?>h5vp-jMW!R6Q_$s|>G6RwMD4!dn
zw7Up`<#_?X)?>T?w3_Widz@8*KA(I{wD-LUD-s=TOm57~k5cf+PC;0i0>fD0bTLZt
zt<$m>NSqn`Sb@jmR%@NzAe2#c<7zmjtW*P4f=pzMHQumcaHiTc@-{+#Vwy+|O+5?6
z73?E8*3oI@O;&k64g3;9YT79pVNb$jKi@?!#;-ry*=Pz3@Vxajw(kq5-WIxPoum_Qoo<(9bBx|8!?&MyQ2Z6o
z(rc3|M+4Zwb}3tKp{Y{%9YPfN#7SV+M)VzmZpFsr;?Z^=Qim|*9>UR|+;@XiAORv_B7yW?sfd?&
zcaeceGU-G1y}
zz&h>$t$iCx(xJAm1AsfZaI#3G$`h6%72*3WI>CI+)OIoTuOsVMcrGFLFFfuZo#4)h
z6rWlW<3SfnHy*t_)ORX~Z9I(uDkQAzcA%cfrCAvU4Cr0jK_O5{TK=NEVk;L0l@gHQ63&ELO=hCgNf+n>tTF23WD1%Ay!kw-u%7>6Jl6Fl8|VsN*sd
zKN+dAlOvOm(0Z$Rer+be_6^OFTn}+6!-I+T#LycP@;YSo!TOAQcGH30}T>huQs;r;-VL29k-Xd2p}0+7(M
zJoltSO!|AN2{w>G`@kRd(gYg|hlS}=LeC)h{lMvYERR|oblV3;D}<@=@Z?7lwfq;%
z6&!XVrpGqvfY?0{2&oC;`^rDC9Rh}ykWk{_m?CJ!>&*V=59lkuO8E8oSzT=9SI+;G
zACRJXF8cGqD~tHu3}`z3*Z&W${x$V~SKt>8DiC02u;leZ53LRRW!n_9zHa{)$?_(K
zEZorjEv?*87MhOSOOW}kto13MF&_NK^T>a4#&6bX-}o)$8==OMeGl?7{#w)4q-|nD
zHIL;CIq=sjj;TB}%lA|XaCir*1$pP6fxpJ{ni)TfL4GCiFOQHGekmkR87Qe^-Tl@q
zm5@5ak%Hg}p9?ewszY`r|I3=A2<5Y9f?-#K2x{O96iOg!d`jckW2Dxi+;mk1{kufg
zidW};h!^Wm_d!Q~Edfuyq*SJ%_N#ls=OosO#7Fa4I*_WcD~$hdrNtwo}{za
znLS`)-)p1*za9{-GOE%$qR^)B^y9;}k->Zes+!@Eo2L7~Jok~*eYXm6!wXaM>$-}?
z5cRGh%jA`1wqEgWz7PP^gnArs@N{F^ioKyiKtwp&=)N*Wh*CQmX5QHbaU)-VVAGNn
zt+H@414$-`-rfB!@?k1fUl$ztHW0pNyhLszK4BkYjZ@7#+}PKlM6$@96PondIC;u8
zL9rTOQiLcX>;ogZC6J2#oZ2)sgN3kQMo68-u&g`soda$
zG0n%vyt#J~?N3?RE@OQSkTWFh21E2XzPULw2zHMIbx~@CS;eX06Dq3$rLyTB{#s_L
z`+@ac;rE%0Q`+o)WYH
z-bI0%xoZ$?%-omYo-iClHK@9=_SuGeQfDEPd3o&^w-r-gzX#lon}3L6TDTkbpJ@p5
zPEPQOwWb3hRl`on>S4%3OsX=UvYotHIO}s5Cwb$gkR*s39D)T=6_(_F~d>0q)=B
z0s4?~;V&UxbaxO!e=NVC`Z^4S^;#rWuQ&;AsXm=UTTj0=%InH$xdgV6>q;ngJ0R$Y
z+RjNzRxnIHqmup}lWg0yy7tBGJt19`mP0J&ZGluo=4kz5YrB-HQ#r452sMnHRz3An
zoDZIT<_ICal6F<8X|^R7vy@~p_^|#G9v#h786+rU7N=FGVQ?h2$ERw%zhHY@kHB;k
zqjj7CH6eS~X>|mzWn)s%2}l-R-Y=f+%$0iKw*xa0N-b+Bs-6)YHz9d6#Gg?g@i%2o
zt}el`G4Q3q^=z~985-|=rU@=#GR2IT51gN|xMowoShPK9d$zVRAiI;IftKm7#M}10
z{9$z!I;UW?3Qd0PX=(Jo{W9{%iSN5X`5lznW8Bx?TonTAUIR|0>a#l6&+zw#wR
zh(*Z;*%N90B*|f{N|@5^96cnyJH5F?emo&3B7D@aa6&d8foHwIG>>vz{47T{5*x%p
zrI97>`Vv_82lkputS>1Fo3EZ(Afsi<;aK~_v9ZQWMRYdm#qfK$1WoEU*gMAH*@*D@
zT<$DXf`1JFwr4gA1)c%gJWM0eEym<29ZCD9)%5iQ+%W)Cc^dUZWhXMqRTNVh2hQG}
zi9&0yXlLNA1Z{hbm_A3k6w)R_!L4We+4rUcN?=#kOSh%bTRt{WmmYT}ZE#sa354Mp
zOjEB*+094KJ%f%qO{|*azkwNdP5>?1K$DB5eX2}<-us$|c$Gj4?X3s4FdRF%F2_v^
zg(#uMODm&0Q`K-2fwu>>9`KqcO+6W@xoayCxvgS}aPoJk>yVk>$m)A(4cmelsLF>+
zq$g*+->rpor@j!Tu#92C{Zu@x@V6~AF$y`tK$rs67eI2&7*uz=g|xymU7=%d02
z!huHsQ!E>TH_~AKY~0*bXLtiHIODozJOb|#IS|`+?dE~tAYObLzspIy_RvC1QvUlT
zN${!U$_P+4VGd=RRzkXPbZqokK_g-8%j^w;@RB+8q13R1HIFE!U253h*IubQ1uqA%oi71kuJX
zoQ1(u=VQ>cZZ({y;rzxTpbfrM;)g5415wh|Dg8
zs4TIOgqC)Kj#>l9P#ZswRMh+om?gSwRwUzz(>v;X+^Irj-7G_q9)*_n6(ttm6@-F2
z58?Uh^G;24RgQC?gA5*#L!DDx-mJVpjOCxI~m=tfL=c--+Y
zHI21M#$!BMF83h+(1~M>Yq8~_OJ3)`D4HS0;pB4woDfAk|KKJ3KQNjWO4{bS06^g`
zK!OK>pbvVIAhU}*T8(kRDJ9?MX_|+0^~g%gah|x5UGVXLUTuPkdyL%evHVCr3Wi9*
zhuQ~#ho7>r6Ps|IZ_1oZ@hYDM^|onU8(vE}Q;Va2A#bGlEHVYfLHYf@e}_&4a1!5M
z9bCP0cO{d&&}=S-y6xb3wWE6RKB8zr{R>;qP%EszLn>D5&10R(p1q}tm4OLpFh8A|`pH-&!Q9NN1c$Nh-A(J#1rT^xKfD>cz?a$0~ugRZZrHDuvq
zN`eujV%AL|lyq}*fbv4pEc{2+L>Yp6WCq4LboTT+3}&iP6{^8Y$WGPUE>PK35JlH|
z?*tb$sxA&{#2~D2dz{JjN2~uTs@8DN!m;L?wN~=36ND@KFNsmSZXft4dsKQcV|*-X
zav@BlczOckxHhCDgrWijVKN@gO1gfloA%d^uBwcO--hNFX6~y!nrLxY5ez2?TOvsw
z+qTER%NBKXs57;Q_VuAjQA*E>65wh;aF8r954wDAAZP7UOZxGfqNO2iTV6|be){m{
zeFhA<5F+*U6LVdv8)xc#-_!JTP)YEP&F4O*clsc5sij7nx1E;A-pdUod?sgVTDg2#
z+O^YG7K~KsTSi6%Wuo^bF+UWVI+4$kzX?9k`#o*%o8yU>_kiXXM0BKPE{-1B77J94
z3u2=g&koxMNMxVBUQW7$n4a>HfhW(2QU)wFXPoQ1*haM}`BSyEu=w2fwjoA%MEkbD
z+8uw?AGkS2e|JY8c`E&eU&pC!HTHKBuV9EP!8$;6I_*r33P9+9E>>K$ag4BLB?aEv
zeM0|0_4wlLyAJ~f9*2LKQw>q79=KVoQDkU0Z}nS(ap9e6V{9Li>(1*(!;@c$P*&%x
z=FI-o7nb>Xohms;t+c+(3p!gA?A-%iKr-iiY?JB04$8$aiHi|7^bY(5(y6UdoktZ6
z9W{Iv)XtsxmQkR4{SYj4#;5yzp$r`RBp+uhtf>I%P~SZtuXb3@0N+-21ON+g3a@lW
zi&1ihR|iCZTehDDu5vQ$X4MttKiyI|Y=d!`_-P4@rmy+V`phgmOgO
z<`SrxC7!%vZhdj2a_8Kf&+|Rt8yWRC{TDaw
zb2&~ooolLmf#jV>Lifvf_qX5@0#FbZ_`g0QRerwz@3WV|-5lv3wn{gAHx6Ak6fnPF
LeZCm}$KC$}joEI@
literal 0
HcmV?d00001
diff --git a/AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa_icon.png b/AixLib/Images/House/2OW_1IWl_1IWs_1Gr_Pa_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fbe4e51ff76aefdc17a813c8e179b221a74420e
GIT binary patch
literal 3466
zcma)9dpuO>8=s3wMrcVEp>2sqsa;K%NwFoOjgmQz`w=NlLs5!iT)Ii2u~cJSDqS>(
zj%A3*OtutTayzz>C@InW>`){tzxPb-?eqElKA-*L%)IY&p7;Ac&-;9z=Xp=^W*0{d
zrU8>ep=da5uy>bs%@5z)nEzZoNuF(?QC9G{)MJZ#I;6SF-Yqg+uhOLaXDH?JvLeB}^GnaVCAS?e
z;Drih4lBOjcIwOH1+x~Y-O5URC_VC^YSpTdUxv;#N%gF5X1s_f9l0ObWMjPw_Vm=>
zAUM&u{5ye!<%DFK;?DnXz>F!;n$}z}pJy!}GoP$<;-?MS!k3=rb2RQ0bmys{!rFC6
zCg;ci_Uc6ZKH@k8CUjKxDkCl@>aaS5J0lE{ge9g!R};Ck!5JG`ZM3-K^QU8G5+)aS
zu8C(iKK|(0SkO|eJrlm<*CPx*6=H!AB}^<4OBYGckb*Z`*{)3IjRaXAiUg|FnuI2?v5+Am^qlZ
zuf@?D+4SM6VGZlne7wBC=%7d1FLK{i`Yo@H+4|)i43Z~vSoAW}omDin#ZjN%{XWi8
zhv4if8bFyVq1i_bEuHEWdd8ioKYX)7cVfLgGpne8Ss^$
zA)Au6*2NW5$-$)Pa`#4$4u!N;T2BFAs3n{?{e)jA}7EP!a
zz*5;xct_4o=a^e+_~qE@|Flo%N`*_8d+B1^FM?A~6c_0Dgk+_#LyS;Q{2}L=``!DZ
z`B)%8^QNN&Z!NNDTcs{sO3wWpGKeIE8mK@I)@cK(n$mja}bZ+Qxhx^R~y*x?&^KOTP0^
zt@IoJuj(7txf*Xgyf0u#)`;+^SV#Ee!B9t6{;bu%wPiPd5M?KKKKQ%#V7UKATIq%*2I$^x3mt~U-!L1RkBbcfo+_#X6mlEs3{Qco*1kx-)vM|tLs}6tx5t+
z(9wH+slBVB<~-uTy-i~#6FpWpl+-1DP~AG?)u3MZ)5&)hm|~W+!IJ+_yw*+|Hl(9j
zX&17*Pt~!25e$(Eguk5FVuERt%y&ZM9cD#HCg47qaF(zcNCClLGZ3RtIOULG5cw9p
z&4o!-f)-x=TmS*IMXw)%v;`93D{m@uyo-wfwOGe}kO6H@Fu
zcdi;{6{57FN-YK00x{4ntyCq*tnecmO4R-?FC`k12^5@ZqLrVj0hbDF4mA>)lEKx6
z4{D->)*n`j_06xh*i2LIl*;{VfYnS2>28&s9S{@+l4ziohzco@r1t|aK=mr$Rhd~x
zQNzZ1mVasQNki2GHp$Lw0^?7e3*@O|rBPRtoUaA55bb==E$n*P64=PbEf#k%JZDe>
zph(msqPB(bgOc)D1eWnqlT}!?lBm9#rHS6t%Nz^h8eXPJSZo~v0<;E(XO&I+#XY`Y
znJdG6S-s2@9(iJb-xtxoXKZMf%FbqZlzzO;K^8q+pgYOD6?H`NNXbv``}-8rpQmo2!AI
z&L?8`iwX*9s%Is#40V--6|C6=&+baBRf71+nKCFg!A{Qs3$Z;Tk(FlSFEVcpMS|T2
zj)=dh(Aaf*4yp$+;5f4c@#f7FH&XW*6g!CATmyKm5tjQa1QJ=*K}Or^ZM=yZnrXWh
z+6#eMy==4(Dt+l`;`hgNb+Zh#Za
zl@8FTgYc#DI$6p_uXWzAPwnato1Tgf&6Cwc1aDh)CiO|_IzO9tagS1`0ZUx!I2GYy
zHXdB#doIbDHT44Y4q#{^mx>q_pJS#=ykz$ekOV^$JbXbeXv6A$@*oz490-|9>Y0F?
z>?9cs=XrPPu+4DiuA}1RjYSgH{o}fr-&+A-Il1^c#E9p*b>UHAMj##8+W`RZXTT5S
zNZTAh02-k5n37B&3*3fY0pCawSSu)`kO*Y*k&Wy#-TyxQl$pwx$`hiYSCFoc$|OnT
zYQv&q>_%1Cj7%?q#H-0&vT((pP>n^Vf35qYQYh2*$&RVdTA&bwUZI`1P5LesJ|F(G
zrnFz9I4ReFy10u&o`^Iw6>OM&GgYZe79xhIsvBAI>$R(L6$r#$zFG)GTq?x48U$aN
zG{zI#IS|g8>94Hpa``>$2Z2tVyKL9I9#QZF<)wT{C^)H_qx-af^aMHVfb1J)Vl_wD
zP40F=9s>gBEaUiOIAovSO8<(a7C08!0@%?+6%3eAAGm=$F(*fnSi{N=VV`2Dd43DV
zq<{=3f5JD}s$~Wnelp@yp#-JzTR27Nt*m92SA=X=mL2*Qjc8-iKLgwWgr{+C%>ipp
z+~^SSrQkx!JtEL&vA5ZjH3sI`D5CQU_6TcVApHUeW)o?$w2Q{%BZPZ}Sci8>jVU
z(Y;Y`ll=Wo8n5_mqCcg3a^KS08&rbj>Ze=z?cAeV-9|nPYw^eU7d`ND6{3~@VaGOw
z<{HJQZE%?R0={d_-VpTXs=*2Ki#h&$;&^+ehhS|=TFGSnn&YE$I67TpMgC_2iwYhU
zKdshTeQ+T3ZO{4AW^3~)?Hn6Eh!^hMaMNI}abcKAV3v0R*G&qd|BuG-Z>Aus=yVKp
zw=ZH3OtvQDclSTnkL|T4#Y{LY_oIbZ+_M&YxWm8eNtI3--HwL#A{xAaJ(HvT%cDDn
zlXs3aoJ*Gba3Y#CqZMrvg;Bd~SfC$@*%3xZ*m2A6zt25=@uDXQ*N|g)vFh#HRo?f)
z>I~A{dku$U6dQq@g6&D0`n{$oB;iZqeQ>qHV%bq5#UJDdJz#b1xPr*jsWYhU9v^Ls
z2VI3dleqCdh&yAj|NcS}R1@yi;VO2rjca0>NiZsYw{itAvLe8!c*=Yhaox(~6u4BJ
zY3nhL8HVR!>IXagrlHaYS{=6PN4Rbi*_{=8w8=yyqNG(LC3*H^u_NQj4;F_V_=;?&
zkh0r;ZgS|AfE>eO-)wK68l9Hgx7sa7>e?d(!p^DG_QvFTMTaKe5EHaDAJS1?X#c#~
z{*OUnlIl}r=ACiBcrI(s52lE~IPdL_lf>RPfL4VOa7Ox^*hAXa&hJbhFS1uohIYo!
z1{EWd>8xGud0De1%$gUJ{c`Z^GREm(d*3^IkAj;rq={-HA^1k?cj?=+FI=%!ffB^K
z;Srm>V0+=d0>k0(rCbVBxEWrTtEK-S_|D>453tr54#0B*Iy(FK+Ly2>zI~96xdq@Z
z6JM;7kE~yGJ=6fh86tOe%#(job7izHQk7(zO;?v}10F<3%O$)TW}R1Lm^u<-KAk8|>s{=N*CL7k1$y8#v;Y7A
literal 0
HcmV?d00001
diff --git a/AixLib/Images/House/2OW_2IWl_1IWs_1Gr_Pa.png b/AixLib/Images/House/2OW_2IWl_1IWs_1Gr_Pa.png
new file mode 100644
index 0000000000000000000000000000000000000000..526eb7c7f49b6f3dd8d02f0566c94d3bb746e4b4
GIT binary patch
literal 12123
zcmZvCc|4TS_y3^CmNp~_*(z&;iIjcG9#Pqqna4H=86jIrN%nQDrBK!wjh#08pa?zI
zWGe<`&HlZQ`h35i-|O}J!-JXU-h0kH=e*AvcG*CSmFXB03WZ|TzNBu9LeY{?D4KKo
z=)otI5-pd&FB(r{Emd0OxBd;_AI4jk%sf#j&O^u#jeTYpSc2lZt#SSK6*uU%_YDsm
zO5f4W!_5=?$7cvZj&``fSy^`!N@74;UB%>1|LjoU6G3~QZ@&}R%`REDY>p~rT{?LE
zTwt{25%=@y^dhQiFUG%G5d~;9Z!x8QR5@(M%n@_9l5~<@vWwPvJ}89$H`mAw%IOv2
zhn4iRUuS+xUj0_UCbC_!0z2FFz6)*8uCYE&OEX~6=jP|MNzga-^78ibHeJolE+$l0
zRaNCwuNS&0E!T9CX6<-4zG49NPb2Oe2EUXc8t_CjgGaR4e;z>;TJR^913dV^#r%Ds
zha0NjI^;mmeh6+seJ=VkG8o`97RM7ngk7VnBht
zKIq`jq-oP^oKGW{%-tlIMeYMHjxBeJ-AT_qpEdzbKwfI5nrE13e(u#*nH}ty`*pL%
zHIhYg0&nMNS6kiP>{3=Je$W=7H~7p+?(iR~VLyuSgHhdkI6PjIiR|U~4Hzbmxx@e#
zn#H7EQ*uuB$ITqOSeF*(6wN*;lkkm)xcN2XE*#sJ2muC&dqZR4hMF)7e=J$VjiBZl
z620A}`QnXeZcM?-c%Lg?%>*!yX4cby#vaXZaT}*-+Vy1}hbK;&iRV53djpRsjcY~B
z#HQ~*e(Jni;NkA<%sF15esF-qq)yQN2$n~i*&ZN9G{{&85Gr5ZzPj`^_xlfLVYZc=
zG?&NCvK(Zf7^wNXm#qVYl>6!fY2c<2fNRQj-Ea3Li5ragW2=iQgU_kZ`Cz0k(LrB
z@eP92+fQTQ9|6r87js`8zo{+%A%RktZCtgsc_z?8gP5+fE!iwa+)ET9q1M~**)Q!P
zo1xSO7E#gz+47A7QkS7z{-%qNBYo=Oy1aeh)!mo(<_M6&eIjhu8Qse8+4MxK7QD2T
z{n^Dk$J;L!zE`}uHn84`*PLwmyD=Y0xeZGwdC}vId3^pQWios3i3
zJ;v}v8%oM&!oFL{+jKD%4r&2x@R6__SPlp6+k`gt{Ks#uH}R9gO@#v!7^md6F-Uxz=l~nRd|
ziTbV615mG_K;;|F%lg|V{~h>N>JTxB_Hs)3F%6?6r~Zd^aU;tA)&RSTg`vfji
zZ7mO10xP}H8@-E)=@)jM2O4}IsLOYCuAv0{T;$aYSdZh3s~L!k8c{HXDFfwh!~U!Q
zCZf%rXhFrb%iBe_?#}-S8^1R4#w~mt+AC?jGsJ1#V@}k!k@n+Wb|aE0p#xC{ibBgYf2ad#8~$>%7pw%5!v}El3JWp$L6);GL{I-O|Sh>
zo4FG4iJrKXl({WeIlZ9tV_50#kN)v5jeh2R+kff|LmP&YhR5$S+ggg%?Zh%PQ?E1p
z-m0&w*oYO$4?M*XTV4}b#h_u8)Ze`iFGhfm+?Tn@-K#Go!#=tc@TfmvnOlqLc{<#-
zp%T4_#jsB;aVTZXX^Cav+Saq#K5m$lQzrePv1s`1YW=E%>urox-5PO|nw#2XhD(>3
zK1TN2gquV)g2uKAbfGDs^HMHpc$z2NXa&s<*uRC1eoMJyZEK|!Z#|4p(TPr=;PD~NX6EB+;GYl?`u?W#S58dg
zlwJDe{&YkQF`@*37E`a|Fp(7*e(%_=N^~Dc)!oi)PZE!XFEHvSP3X(DY2Mw?*I_Qs
z)Q{S?!C^g?xxHrNn`nCQOV;E4E|HX+gFP})7;X)Hff5y&{DQcI@qmqF#q!6040NDy
zdea3Rh~`U^f}*d*f(7s9ynnZJ3pH6pgH=GZ`@*ehF{9-|hRkVAY0_zi(STzm;)i;)
zTk&aE{8q~|f6N7@<#YG8%()SpSHg!QRfp{{uhL-0X8d}MyNT&hp<~Lx0E2!nk{6Y1
zPG5`zCS{JpaD13D+^*0%I;OkLKg~7uX1@T*=ky*pg>2fz^4;HWv>_AEbf?O?szA@U
zi6jspBUUT%
zfs4X-m;EAg+VJ(~Nw}Gu8B?>|$CSqGibm57u+j{LMb_8p?;PTnWH4NH%`AI?{BV?C0p4i71zKn7nv+0>wO?ROA
z62fSUCEP@Zue{)*NMo-8Cj#&cpjjd%(p@=XoWO5Rt|-Af_6i5R8Qrtjc72S2=n_mZ
zIQ;%AenCj$&8R
zhBi8R+k%pnP8YDRl>)rwoSL)R(E$56$0W>eertGELCw*Mv*NWfl&D&F3mv8py4i~D
z4U4AGx=fa@7T3G>P4hIR2$o?99oUt+=R46gej`>^#EbLYBYLjYJ7x}b+N@u=@WU}lparW9028ZOHB=H~fYv?;M-%5=b@jY+0MyVaAbEu~jwVS7#p_yf(
zc>LV_$2xijY`#XrO&vqk+ZeD+2@5a>On)ys>R=uI^D9*p`8H5tsHA#R0RD^jGI
z?YPeNib7}Hfu}?0>O&fi-8+)u6xx?s*!jT{&*g8wT|4ki{Kl0-B~{xZKn@1#klNDn
zhik*-K1vDj+u-8kKUGzOh|%zbUObT1(J;Q({7l?gC01cW(J+r+-^k$o7N8dUu^4qL
zHD8rS?g6dY@Ry6?{HDZZyO|$ra-kmfRZH|L4dtwR+
z%9nx&EqDW873VBOH-!27kLkGMJa3ZF0|~>YauJK^2mF|++1#ZS^oNevlW-Y~wV(ytst$>Dh~Y?T*I!B|33{yS^`>#<*Er@OEd_aaCn
zH9|GFQmX$|LQ5Qa^rJ2cu`lLmSOtsGm;TWbwHrKV$K|z%BT(Lla
z;M2crYIFbM3-ScKWUWxhpGIGd(1kryZqfJ`y7&Ag2ifbfio)$Z
zZNtrC$UPGGf|FgSPt%j6xm|HCt}Woxa||C`2FTuWpFid>BG-jr1V)kxp?W|I>PzXT
z0oo2u?+B*kOjKsWX~3S8-vT?
zw>Lg7r2+2o;5{P7CYWl_WsRZI$Ym9eC@AUBN#2!{|j#I8{HOA@Y63)FxsM6NM1@KeWCv=j{sABp`wp`;*jcQM%DFi%5&Xw
z5M_n?Znv>jVUaYV2MR7k@tA=JX+iHV1&0u0;4(*5at7W!5I9Xfl0dUdJ{D6r9lI)E
zjj${t4vt*eFH-u-GJODe#lyt*W@@L6ul(AlZAmw-FNl7KvQ#*ex@g2K6Ivr5BAZ-E
zgfmixz4o#|n$U)od7HDRE)-nZNwjiyVjie!)IjbVP*Er~T=YaHu``y!q0b~*^#zfg
zMV~E*gQDR&ySW89;r@>0r}|)N5{!#MRB1QM2r>g6HZ37-SGR;)@bTyJWv(S?+fF0q
zBV6f%lchu8gua!Ua-QUWN%xjx3Mv{tHtr>Sl61rJ?yn!DixW%;-GDc^%aZ$M^`V4G
zG>uqf>waS=V4I$q(gVeG*9H0qdVSuUDK2FOIzhdUB?vw4%Gt5uAhxSRB>lrFXGm;H
zJ{RN{DScBJ$|Fmn^@+!~h8b1q&EA>mQ-ZkTOv6u+T+}f{9VZ#f4u@xv_qGLDB
zQZ4>o9`}J@2eovV+qE*E+q`~pm?4b$Q(79ViMjkz4SE>%9#Np)K^n1C>t7~3udK(;
zjvtKmu{VX3{3c|z8{%@7fG+i7BoY(EkLQ%qFw!(rqsLs#ni?KdCcw83sU^p3%rO@`
z-AKsF?vBLJ^Z$jrzP1GaRj-iNj_`4CVV&+@g-h+
zmF-obfi!6VyaqQd#qy*T^!@^f8Bo%pF=O7*^hcBv{_B;`>?aJWW%`=fEQd*!2?$N6
zNw5R;H7%mv7FSYK3*{u(Ww#V%bw9)S0W}z1JyW>#prGO0!0vD
z-UXltFKFN_4L%lt8UL?8gtli|#{@_?alD;6vfo1rM?@T=T!bzFkso`7OQrcq8gcJa
zg-$bWi0ToYQl#drC*#Cay32qc!;(AP&la9djrf=o(|^Om
zL3^JvWUqo)wx&*hp#>BU&0&l{wmCXe8TD|^wth48obX7%_|aE107wK3QEkqV2O4#<
zE2ZX-w3kK+i}g&)EeewSQv|>CCqv0>0VSRL#q~WtNyPS@kv)6c;C|5FijTJ3tynY}P2i3K
zh)llm%8Iz;90#9n#b*-80#k_;HQA6ddDYF~2Q@I?8x@c40%?$TwI}x1{PpxYelk1`S1J1OOJcSAD)PTP%-e?b6R|)*+&$EHyzYd
zGJic0erW7wzYKq>YeH`(h=P2Jq$Kqgyr%S_CSvM^)`yCTv>z7vNFF!Aj@ra65TvYH
zzB`k@pbDL3SU6wOVS*)3`P(=fD-67G5BRirgxE90%tsnK!P#aWz}7DtL%9d;{^0Y{
zp`fWy-6D0z69T49$DoHRx8?G~LI|lIkeYY#FOAAwgI9){&Pz<{GjR*sAU=$sPP7W6
zeJ=VrD!fG#N>y|yKi#g}0njlO1N;faEFP0kkbSR7&1vGw*uL-Wl@tm4tg`MHICc<@
zIrQ?MJKrlTM*1m#=ZdB0h1_1oo1Q7s0|~uptArP8SD#Zan?<&Ks$^S?MdB)8*m@$t
zucVnxVqw8UMPIxKcoUbrH+TDvx8e0bHnc)jg+xL%LP;Eim6{Q
z<4{DzfgU68;RC>t}n`gcGQ!6-G4f{Dmt00`
z6c0G8mmSeAVzhnULcN)Z8a5Ws6aa?<-y%+|UFqG3D;)sV$4^o&rbuY;=#2pq3(wk<
zUks!;(IY+*OWt`Qb@*+NxJLpL-VjUp;+lgc*jD}vAPKj?U&a@LTt2je&+le|%pf+UyLwoTmx>%O
z;%bH0hcdgZYSIjC@u*lwpMQZ|9lu$1{Fq3?-5
zE}LR*k_Ytf5fzdRxlhT1Koy^BGXG(w_Hg-5#(0Unf$ND?71!db*)Wh;XQ3~A4l6Q^
zG3#Lo3a;Ncyc3x(EsAI)i@kfE#UNE(vf%u(waFMt74C
z63{(2SU*WhKI`N1alBJL2EO>ar>Mj~2i*Hj!XIivAD-*Ue9h{+XXTt(MVS@bqg`W)
z+?6gQ3MN72!QzkZP9cyUPP~}21R)b(lzWW`a++}X8{L%6WjVgU&9@VDZj$O2YNw0v
z2KZrj-l;ESxpvz#6F!anq_O)fG~k?Av!{d;0Sk9LCW*y{0c)&odUadPCG8Wd#}#9N
zkM&!~u~~aF{$tgErL6scOMCv+Xz#&?NR}SL)ede3QP^cN$+R653@mVj&WAfPKHuTK
z`wJ!Y8%^Vb-gWl2L{_8TPe=I;4Zbx)mdf1S!0T`2d-XwRdl+Asw0ESMPggTrVWG!glmlY#H-Y(sJ6+*`i!
zGs|BDrv-QOlE105LR>V!f`56m!lm07M;(*Dsnl-j2%kA=(aY{|BgIbOUnYj!2JU2P
zZ`^FyN6i@X!*BnSK{aak%c;nQJj0T6Wv)%0&93~fFMjGeO6&rhE|Ml|I6p7-(wRxi
z;aVDRBDjJIo)HqE{tb@yoFw@vZsxWe?#vJ*ePEo;0)<2bF#u6lzK2@OO+W5SUsb#W
zJ>=|{IW%xIrf>`!uf=U}c{lw8Iu-i41N2OG7sQ(FqV<1j1Ie6_2DBlg-Hh(}heCu7
z+zO~;w{!-sbdTq??EnGqs>{C%`7GGgWyz~_%cpa}-9$bbhyjU0ES^*7jS4*kNFduw
z014b~MvkPJ4h0`qs`U^)|0d~bxRqbeoa3(K8VDIG1{4F|0n<(wTtvP`Iwj8W@Z0BX
zg(8ymo5mi$Cfl0DUT{5GdxM}klIXUh^JO@jsrhKXSyr1){|mPnHYU#1oLyTHXllm8
zLCH3w0FM7wLu_Mz(w9`^xVX;f$b(RRcCc5+SoSLD$nBCM^==R@yZ4TvqyDMi4s)QF
zok!!!tbieXss?xysZ5N%+HbGX);aep3ncOXgy0FP{M174kv{SE1PM0rTUz4XvSaA#
z;t!6W7rGTJwE*C>wK$Kobj@3TW;5D7hp5r^|3;J+cZ@ANCYuSa;oNPB{kJ>>Ne;x9
z989OcRe7E!{iidNbXAs*lx*5Hxz9aCr8$+=m|O5%`!m+l3|K;Vjg!4D^qH0zQAg4R
zg6RM??}TpvOBlKw@JeU7-`wQ{d%fNBAPGbjYcYRYAmszs%;@%_!+i|YUOq1@JP%Cn
z5!ORoOR6nVe4NoCJ~LxG=&qI^$sT(`mx;VQj}gWTyF^<67MKM{{V?s=17Hn&Q%p@d
z!p14(1)|CFtA>)%Jy;a6-Osi2zQI3Ub+d|nLVS4+?uG-$iL<9|IEM^961^tST2Ob>
z*rnNf3$hjvrzrNSEFDGK2eB7GbaD`-(WvJE>nO`1pDPfYbAPg#dJ_|S
zUZ(?ZvETq~M11`7!(P9WrMMo}X0h>)z!+yPHZ-fI>P*h#AGt(#c^dy7Y)%r7*GK5V
zckFpxGjMLcE|hX}Qh@ZFuzHeIDKae!oJ80BC110hMedysxrV38&?2ZyGU!Po
zUU&<=k=+?6wf57{dhk$~zQ7x$^J|tK6PfeEBXbM!a%!Qv~31zES
zJE)hl@;ZR!`;TPT{BR|=RowY-!PELz2AGF@B3BtcY`$~uoWU@^_$!)`J6UCW*(tK!B
z#7{4;ITww@!vZ5~H(V=UQOT~G>lag9EL+5hJgN?y8%vJ>L;`uFKcO_nd<_6)%NZhm
z={H@HTO}pkDv=3V2{3c{l7~)R9n_}$a9fXhvZST4u9%$(5)_wRc%!m37vwO;jb?n%
zs`~s%hKH|~cgjAe&A5`%ieJBTT)%cSv6?)7Co!Ar<3d__tTR%FWbY4|uTJ
zx##sgnp*?pi~1R}dLV8Dtvx+RRzKN5@K^ZG;trmJx?^KgYj@>>n)+)!ObdPs%{}~l
z>7nLvaOwkeY9aL6>}&ephDa7V-|_vDG3)S#U*OlRbCz?4*=MX0Me=Zt^sg#Ff8^u@
z+>Ae7k^n`6Fx_9rLp%n4EHc@n;7v8J9s3&Dv#i8_=Is)WOxmhdP%7Pi8(BN!#!nKD
z0i~f_PSz(P5KhFa;cygvIw~;%t_jn}uE=&>@;>pK4P^3X${k-xctN5bbHmH$X0Kno
zGn0SP@0YhW)2Fm%{FK64U3xx4)O^jKm6`J+JvM@f6WD%wXXUQ-ZP@|yH+srr%cP_R
zQkR9vr0y)t=_mYs!k->XaHtd_aV3J{f5243Owz1n?bZXU{29)zmF?xegGZj4p}F^s
zv|DlVZemxf*FP`UYK)ko2T;Tw8Jc7k=@Ue&ZkmGk+IPIRHV@3gUcY&+t%k3ll8Y#=
znvSc(>x~`Wt2tTur?6xiaB;NC0LJ@z_fZ9LWPu_#X8AkmcHfHgCr4=<3)2a_du*%<2-{VjW4sp8HwJqY(eUxg^cg35
z{!EGSo@{nz)gqoC-+gwDYAbg0MLh$7>k2zRMO)m`R;Nyqx?|ze4x7=$Yeo5bP}GGj
zRgZ6?S{MN>(6cg5p^?fNQ+$L!(9cI!xs`jIXljo+S3cKco=`1eU9Y-KYpdx2oy+Gg
zP~u3*XeOp-Q5p}z_#ieHwb`Yqoaqs`
z74k-={#8X!x6&!e?empm!Mrj~Ct0M}fYvDSDY{!&Rzn&6LagCV#@n>(D
zKGarJ8jVy-jJ%8S(hsus+m4P`u4gk;iFATct^BNrm+c80W&-rs40WK@+j7oV4I<;H
zC=LnT(6%`KTufP+kO(pi^5wz)Tz&lE7i^Fmr|8aNoMU@$@`k?p!zXY;r4zH
zXvqq7bz9_jO`&A8K>JPh_H@3nKnewO9ct?}3Z-+9z>;~;8~u!)TaT~hpBSwCU{9lG
z1F0SRlz)0JgOb_ALt$ciDdlSAL<_Zkr}G?Zynra0nPRG7(ZfQY)PL?lnt2v2SirEQ
z7z?Pt|GBK1fp1P?jWbv`l>|c`2yXTBk-Q>!u>@MQg%-o>Xi4q`DCA3GPXchpf1)+RZLc!PGTkWR6iA+uw8iLUPWpwHxgM!gL+y-T%_d$l_3n&}29`=3$yqGP=
z*Hbp$-s~W5AH2-qut_Hk(Y#;iV$H(xLM@NA2`|z_7zDD{Y
zn@jVi*Z%n?;%$9*!>fc6`sLn%H!jnEkkOw{I;vj5QC1t@l$-otZXcZfr~|GMwZLff
zHKNPHjnVFBes;BWcrS4F3LHf76vrV$=)?VzDv5I1?nfP=v1UF^fgsV!s?eB;14X%S
zvV?*YcWs)ZSnYlmh0j-1EzS=MNAY6G6X;ZH*Y>MtUwTx^rhRQYCV|qQDxUK_121w0
zTK%kGiy2f-F9wnllghup-{yuGt5JW&d!)o_7e=xE{idl}+?62)?i}8{KI$2SIp|?q
zth6))vO{&d4^ic%+I9$&kFrS5a`5(I?Y$WwXdsB8xw8sD7rVbp>KWC;86M|)s(-)5
zQpIE}o=A1)J;rN>9l&nb0q8-G
zlid%5LrK&+wpvmz@M#QU<-GSCI053PEcESY%2>N%X
zCGZ7F&rP5vBfG;6Cr78%iz}a*}W?=71oknOfn5r(Hx$
z0*PP>f8AhhbKCxGA8VD*5Ldqa+vdzD&69&@g-yAAC>_rj*m!uoX{U#V4a9l7hx}|Q
z&}CL8N&3XV)4L;4Y4>TK90sZkii;)g9do)PD~Ti3OJDg!ay--0b_>6@n{fwI6q9M+
zQfy!!Fxk<9r}J#MME6N=xN0E@%$6MUz~u^5OQw(34M-j_@#9=uRjl%Hn^4QqDi%H
zvYK|cCKmebaGYDQ&;Gu>5(j6@27^J&AUFoTu$D@u6g8ZtXJ08F8FS22IoCCF6dA0u
z-H*ex+Udh5AL3@z2Uyqg=ZEgph$PAOm$&y7sX)0IbSwbF-?x0QWqSGs&8?vucgRfK
zN~GU)^ZHe2(b~_1DDDpiIgj4?^n|`9;hxRX#rhRd1N!SnZ;l8HCu2F3)tV;IKlMC~
zyW5sZY#VP@U3O3Zv#s;4&PAK?n)!=3DSU5zbKk<~r~W;bi$
zdM#>27Cm65%KS78ZE>5Zbiy#d;EDz$x>s2zqr0N25~QG3L@Nr5hch=_yJQ2-tkwMB
z{-X&I4U6xY(5VU3ipf!rcPO6X!@5hV+AqeQrNuKosHKt7ggoyZ(Ecn~RO*$dGx5j^
zTEt#OW_F(ZoARA`VMLK@%6qNkZDe}?o=TqRx3go9m%Tp~I>zue
zE#sWi>{s@5tv#Rzayg&U*yjE5V9Oo8@RMYF_D6W3-)-a79PM9$!AWf`YC8JD2L`0q
zz+}#H8(vdN$@Es3;-e9Lc`y6EyzSQE=*GbotX(vGql@K{DC!6UU!vwy@BdA6|Cjyz-yAq7uI!Fw1JgrBivN2A
fe0OC|>kh-+Zy!6tqu!^1uTk0>2I@tsw)g%Ac;8D*
literal 0
HcmV?d00001
diff --git a/AixLib/Images/House/Attic_2Ro_5Rooms.png b/AixLib/Images/House/Attic_2Ro_5Rooms.png
new file mode 100644
index 0000000000000000000000000000000000000000..19004b7cf79b23bbb5b33af5a25848e9abdb7e50
GIT binary patch
literal 16183
zcma*Oc|4SF^gm20Q4&HT`#zRR$ew*ScG-)NJ%o%I6v~q9WSz1vF=fp*N@U;nb+Q|4
z7-o#^xraXA-}m);p6B&Ee;Bjg_c`Y}=UngWoc9UW)lsD&zfDd=L`0#krle0qbOA<0
zM9g^QGVl&U>^?p4kJw9JRpG*;AFvkS1=$NVQ!gSSdTPQSu>*Vn_z4liOXbHe4czTt
z`abovBhq%X^>p_FUa^Ah?Hz6H0yjiGh=^pX)s^H8UrlUez+9M?VV^>?u7r${VN_39
zFFdxp__?2rw`rtAUBU5}m{UcL5sQD3O%b>2NXf;bC`y;xqguICqu0Ysh=kPi?%%nI3Y;D;NHehG!$N=GqZZpnYB>c~zBs|8*5*{Dn36Df*62jyE{^0p_
zblvuoyj)vWk@0&m-6RiW=MAK=4in#B5EDHbRJT5St8W@?|a_+&HY)(
zbJakB0#CPei4!o}R)&`eQmpFZ_0hW}(>?1&!Z1z$ff}J4N;C=KliON&&f4Ys>;o~L
z_K>>h1$Lf14wxFt04Z>%;DOQkuH4#;6k6f@-o(pXulaby-(%QdLBJg!k*LALGL`m#
zAGc=;!wO%P3OebL0>ZEXen2G34WsT}^RZtZ%??0f$fmPvXf6;0C0y2907l&s?`j#o
zdPyCHeCZZ>;P;;}tAH>OqavwkeR6r4*1DWG(2971ErTTEWW#6FBk4pOdJ|;9*DKTI
z{^uuZcuoktVFn{7Y@i%$gk=YWXN3_ZewyFkuBfY8l5*?RS(p4c-sOKm%{qY>E;0zB
z_!!J7q=v7L)?{hSu6b}SSImPA-)E|&mbUW-^}<1z&}Qd;_7(=^D(6Ubc)BV)BrmouNj-~*
zUx0Rc^YpCfWMmwQxNaPegI*6T56H%#%Q3sY?Y$evN1LaLCvr?C&(+W%z7Vb)ghh-j
zLBHo}{cAh5vJdH#>{{Evhufu6i%Zbtn@FkXN}s7DOCfG(CZq?ZH
z9Qo}I?gZ|fSZ|*8CjGd;3ak~dAl|RTV%Ps--dlZ4z%UE*i%E)bPqQ3-%eXq7U2foE
zUx_$1ClyJXJZz=!_V(`O5MGiyco*ok0a;_Qrjmbu=-$yQs2sIZjLF^O*1OZ4dmN4E
zI5j^x6$_yQR)-*ILFIF+$Q+_V-b|3p@?vk?sB7CFKPpZ{vU5ngHuna}xTBZ$oy?DW
zBNOfAh)XWJ_Q@7{Q`DOH`T{#QCH!#2k5y0K?n728`K{5Z8-76qp#dL!hmoJ=(4Tjm
zbh|Mdw~`5s!un2GPdAF+T1IU!wS7ogL;v{ZP-^O)ZJhyn>?Ka|9v;2B1<}(oSsFT3
zR1#Y`UDtHmGHV{39ATb=5}&PKjBLs{vF={@~pePJ{`>`#d`RQl1;{a6n7+KST32Wc7Nt?|H8oN2@c>yvKcsc~1CNkgp!
zN_Jr572fZkY#YHS)PMd?iQG!E@D)ZP=faE#mr6G4sT0jG0+{hxZ7adL{uK^?R5SGzBx_PkIFExK!4-@KBq9^z`)8LG0x6MMWb
zR;I_EZkcT%Un%ng7a-{I=#CO@NxvloEGjOR9mqJt0tDGd=jB~WSr$hM`^;AoPYlg{
zgMp-QE4-`m>Ko}A9xGmDe6BQvd+gV9_2p!AoBE(;p_h8^c
z`wxw2PpYQ^=~MS)X_uDc!g7_4B2MH+mwJ3XtO)t;%sEIYLc2aE8gsWOwZ*gXh%@DN
zRC=)vI+rr=wY@@jV{H*FKQV?+ckNB?b|xYFr^59Q{Hf8qsA#bs%13AS2gLX!&kl|2
zOfsK%t~m(Tz4y2WJ5?h$XkTR?tMJ~Y#I%Wh?p5dC!l1%CDaf*uUOPj!&QY~yVI8mn
zpansNPu#jj#fxp}qpLaBh--oL-tuKAaYP{B0rjnxS()`J2vTk`fpw7V2y>}Q7=)j$G9+xc|Vrtt<|a+r{v)IdZaR2g!?tWH&<
zQGuuWW>wIo|AI|&EuL3EoYRe^O($(_Ayd^#>!oF;^r6|T7y^{})VwC49{i!_{iQv@
zi~lqwDR6vNkvjhAp-=|N_&u*Eric4l$|Fm&;p1=i{04vE{ED$1{a54hYLfpgPf)7L
zg7Q}ZXz&t#3Wzy48d|nZdWTk~9n33On43pA^`FyE+1!(Rsr7>Q@5RWQKQdsPlb{Vfb#JTiVr8
z^7}Sydyf`D|H-s}EuyfJjL}Lq=jIP!Tl26Y{6B-gG{0QVX!RY#HzG`A&4oe;As_rU78#k0>fNgKa}OBI(_WL7sSCppbAq5&
z2#L<7>Tyew-KEs;?mITxUxr(IEQOeceawBv?UlF84AyoaOhDZB84ie7qO|_yl(VhH6&J+sE(H^)>`nY
zHKOKv&I<+m*^#+aTBMaP{yR`_!OlFAiV%KBZ
zR7OgBvz!}EF5RAx{fyejbps;07l&OI2Y~J9smakuguTnME@9J`pVmN~NNw$exGx~z
zt*tJr;6Ejqx^vjnqz)AiHOSOG$vka^n-vuAf!;V(d7@WXtYfW$lUm%>n%%*YqfLHf
zK(?yH@XazxV?vL7lZ*j%8Ex`zUzVz&nncyXSfyMu53$laHkMW*;7nM_-9{jA`t6kw
zf!5lSn~_(}ymUAbGwd7!c!L=|V7tc`qTWc6mf0@(35QbcL8qmq@0ov1a=(2`&i$|<
zKGt{hp6OQ!;!9`Awm1@Ql)04ZVpb*UX|
z(+zj6OeW$`Ox!I
z+|c&ROJ5^*8PD(|fZC|(LkQT*-kB~%?{FO?x8HM6chX6D!LEHF$$we;8#Q;&vF-54
z3I=Pep^@1h?tXGC8hDy3j_O6-hw>LBYPx&Injf;WXsU?078Sxtf$M(p+TJ-luoT}a
z0dPIRKv6=_IFclD4I9wk-@z$#e2?#%mrMI>?%*Zl4wp{bPG`O)cTn@rmIofYZfzNg
zl<{0JD=oNu{AD0gw|UfMk^PO!F-}sXp=>y9c!K8SM7op;cys!#2&SH^ra`>o$iN7v`{15!dT{Qu90O(>r$etVMr-muRDT$2*f6D0LeHyWU~d$i5E`dgO&)HK+$Wv
za#byMT2)Zfr$e6(;zu#K6MI?0@4pMG`eFRfjJw!BbnJ~o7UfTEYVgU
zwQMS^7zV^QuA=+`(|pJ5hEK=%V+kh^0+121cyb6?pTUIoHC6LWmsKAA-4XVY@_V|r
z$q~u^dh`nFMC+Yt;bF>WVgJypi>1Wv!B^vWV;kh8x2N|mkR8-|Ax?9$)(j%}?ZD=ip|(>5_4%us9W02ZsV%Tz-hV<&g!M;T+GUEB6gXz6@og
z9zHD)Wi5NAF$9P0Rqpj_?tPhAQogu8lYcS-x~!g6WD>x9Fta1FQWH8*rL4@_`>A807I+2&HVGN(DsP7)?r?2t4=iIE(etT
zP01JV|FP7TWO|Y`60j7g+_cI|dv=gLpt!NZ0V6&^TBf;l;J>r(96Rz;1a-VMS|LLg
zu@e3qw!JOBL(du(
zZWgzkjE1ZaYXNaNuvyKDUOO)Vr!?ugR@)`}
z-s!r@BxSOCx!Q-NMt^mzV*jD?p>V0m3sv5g@ULQK30;m2c)CiP511;ky{s=QG`Qb~q|voUHeoFM@>hZuM93WH^%@`d05hjJLZ2kBfv(mN?J(
z@_LPQR28|*t3;)$E9qpxsK3!H_+JXoRJy#_OFbNqi08FV*Lxurp{4ZkssqM;dCypA
z^BV(b`Fq$+z;tdP{G&gj%Q|@`wy~mR|!^jICij>%rpm#6~)=3GQXU;U5mGrx(^FnBjqc4?cyVLg--|K6y<{G{RU<
zaBXe^&ToDqJq1brCH9V)A>z?~#l|15jonpju!Y0)5=ESYa3Ps}(9uDZ0M
zl2OO+DwlNyKG(}4*$er=h<@2pbJ`X^YC-8%>neTPpP9X-EWvG+mO)M1;B?|iJ&(IE
zqG27g&cH`ql&JZxu`21fajhifYZkw4cxMOg>IKj>ZC+$O}M8j+^qo#8~_t@q}pKNmJ
zlH$!Xv>Jqwe~n`ZWbXHmZTCT(9){-xT&^^t=dzh6w?}1Tp4bRDwMT1H65rYOAQf&9D5_|6uIF=Yu
zoQ_o2Cfc*_3AXU(XN7I9L6YH@X*s{wqjz?J7$8-%j&HN-Ky`FGi|75MwwC(>vt*~b
z>Db7o%&1p%H@CL@F+!XXitkf8X=0Rn8ujjx(n0ix4E2RqVN-Q;qehZ*$&3+Zdv~77
z6f%unDkPa;ym@!t?|
zT7KGtMxV*!Fx2Jrnu_!-CTYFcdA97yXU$fHUOD~`d=!CHd$0H2dG>ofj4bfG&)nr{esE3H
zJdTq+?RLYW#y0*fhz8um=<(ccyu5gEb4YIkLnJ1Y4oR_uHdZ*|Mjl)qeH`^|5Y_G8
zxHwb96kRg?PW%hEbtLz@!0%z-dy=}}f#yFuS;?p!nE#45-2a^*i>*W`&5%pLT(&Mu
z)^+p3ikiNbH18uuZ3X;h(-*J6)#U_c+JC?Iwo18<}f|lf&UpSnTQq*RLRQVy~E#
zm--g=O&`+dJ1;#}o6OW-{&4f9lHjd~noaIXAE7jHT(=zAcC+Z489CEAQPd*G|u?@mNN4
zM`3cDle~pO1>iWBJnraVLofHqcp=jppHqWW(PRuBf;z6OFx!dLoR1u(7)L?#>$g~h
zi;L*baAvW{>>$s@g>Gj5-`d>n4;*zk^H)}1ec^3dzBXL;S9EZ!>RoSr>hqt!tz~yC
zkcVLKZ#=X9Lb;yu);Z*jy1yyh1X(ACeA?lF^1MkEKP;sCr7jaBT8D`pBot3apPPRN
zolqznQ48I&9-UprmEg6w#H|EJ>AabX-cJ>g&K3`iRn@d$cUbU$la5r~o_E6!XX@5i
zP=U*qYdZlu;q=r8)v7v6)UYkc>AInnmD~aPwCi+d>(r=zt9mj;2wM-}=Hd%$o(ks4
zjw}t
zWlqyLKFnK4N;R@_-TEZ2!!*(?$bd9M3juvc$*p!Z!5?!wR7OsT1aoa7u
znkkl9vSKWJwxA{sbEA2C$JF}7=33!O2RXB4*S<#&5RIng1Hf+l2HCOqTzfLVSf*g<
zU%o<-Q0;aLi2+~x&5}42M^7&{w^hg#){8t|rM$X>OISxEP_j7PsUswpL}SO;`0nj@
zCJIMKtJ9(P_4|w?wEN}p9r4ILJ|>~oVdefs2YKZ?=j(hY%&HhzU;86d<)h2-Ck%7%
zYvbq`&3#!+D{3qYB7emTAF+DO#-Dhre*qb#fMRP4ChPFnu*2Q4+jZOv*~8
z7~A}z7?4?~cU6V8R2Zmk>ESV=lJ2Y$-xa$js#?r+;B?c6-y1hR%OZsfU{}x8CmqP=
zC!w#5cJ0q2=9HZ)^ndBY-=XV2x%*NizC2Sv%?f3L^l-Ff&OF>V_gP?javk9UGwXz>
zofmK@r!oai@ER~mM!D>Yyzt#j^@YvAQ~2rf9eTdGK0EiN#A+FJaMoAFyxIhqkW>wt
z{EPYVtjkAd(+d*7-kTj@*qea#0gx0)4nil_J+dlS%0-E$hbM!cv%jIBp9&B|nHqC+
zm+SRT+=ddB+`(tS>h($psew%U{JuG8BWN03e`Ibk{Pm-b(%*T(1@LH5^$2Iw~^jQSg*
zsJSUGTJ)Xgdb69d!@r!ZMBVpxgUBV1ctQ=ORkWc9jP!J`U8Yqu>v$OZ@qyxU3F0#(
z9K)y6E6`H3B3kXnr2rC+-LVP1qrU-ak@PUHQ4?;9>d`X_XU@IL*96hwk|6(9n1krr
zK>hG=Id`=v4OG2{L9!gyX|g_C<(i?p2)do#45#1oBKL4PTXprsNh4YwKMmz6S2bbO|VKMH`x_;Oso*XgJHA0L0>GVL`ctd{9
zc!yimH9Iq0D%oUflxMP`c0IgcP0y4{X0OsCO+vHfl>~riYqdI396Kbw?|pADcj7dE
z5^~;cDwgkG8;)-{PP*>b2&wK2JBi}tg6b_N8hd4KHk|HR$dml}sy58;Eb|fh%Q~71
zh99YO8qU(pFtm-l7D1%(?Hv;sG(1+9QKru}#DwOxz4ZCbfJsga$+_g>v(AHgE&`x~
z-C{4qa~XVXT+szXaaru>hp&OY=BqDMWqJoUkZTDhl^tf3Dl?3J(Q^wHfQ@k`clV?e_vob%UaMewOO$L9$@%RPolg-<=CxxpwXf;TsXo
zg@25Ok)B;#Sa20|L)1;yvxT;?v}`1}?t0czg@Tn*mcD=!%rh&_$v;+k14%6ZdAM9vxDH42>U;RRlomV@v#BFy|
zwv3;WZ&CRu%LJilSLNG&W?$!L2hQpWxU7A?-H_e^>1i9m$AG_k_py+R!
z#uIBRE#mt1pRLLkK?i|V(Z?gq4(dJA_k$JC1u%Z%^P^1a>?&{3Um7x(-a#XFR-ht7
zcD<-NE$VHSVKY
za$bj2`OXu{l0g_z4iEci4aRGevEp7<#clA4%^SpD`vbwMRXnDHJ~3kA9v?y%HVT;|
z%Swu|>+$mlS+|C)>chWEq`i`p`M;eNFPWs0bsc*c5{we}IXY`l>b-sj29XJr?i$7S`eaVX!5U1mC@
zNQtC{v~9&h`d+jk#4RM1+}^CICFX*QXDpLtwJ&N`d7cA+RPH8vj(ak|RpW9HOQl7w
zGKpQMiS8C=(HFxn{%+Vt?fs~J+)CyNvFGzqMs#dIHz(aouEJ$iO?M?j7>eHriaK_HgV;AAM|GNTOsW4^iRv#T;a@2w;#7jVVQFlyrK
zkirNn(SF5&3x;0HVKPT_oh2(q-Cfz3su0{jK6v4AG=_odQI&5j;TZLxsanj~2`pL7
zp#T)K_oXfQe(PRhWcTI=3#*;v6p57ny$7z|!Q454eA!i8#G+}ZsizGl>pW))yi{oq
z)I#p=UyPpac{xt0KQq<@05IFDYympf{^7DP_ylX~rSlNzx&jw}Bs;;>&$)!|(6&Hy
ziDrw{9;p{6Jv=b)8Z2REpMc9gpgM%=nK$VFED5yOk=ff-3+Xd1MFCzV(2RH5Whtor
zK4Ykhhi)GhboO4GoqQp{cy5(XP0Q0USxW5nezk=hAhA$z)?KGHovMX}-nbn1CHL{v
z{K&sX^nRy{51S=EII&006sa!g^d1ggl@Tz;BsI8#n&|g_lB0`%j}SNx00e%~#A6Po
z3Uvq9a`i}C*6?ZOmedUA?X5dMwQLe@`pRBvBI^$3BrjJo7i9
zeW{is>~8{
zHhL54YKvK2oRxY7pQ{!ZOcE1>#s7Y?ucL0DnvEB%`@Z`!*M!NravwKfoBSoifErEH
zZa`(1ILSkKy{Z}l)RQ!KSPgwbrY(K-CfNy{S3+h@h|;iQ;E$DLYrdGhG?Rj@yz8DL6GOH&%W@c8xVXl0-@>w$4
zrRO=_f_%Z0u@KTg$t~yuW_WzRH10-$fQ4?XYzR0iEJBR&0T6~ofvMDT!@k?abEh-O~)A~Crs*lr%1`wbLI%pt>Pq592Ash8OsHs
z18yx)bU4W8
zE#N5cSPG^P08YwffK}yN5KlL|xtt7tHpE7aAtj0!5eqAYEANF~^WV2!L_t=hoy&V-
zI#$6@F}3i9nOE5%FKePi29
zw`2B8;&Ja7_Qo`4GEa!u`~vU?ToO5Pq`VSARjFdd#zF%X((iHJQsujZGNuJ0M)vuA
zbecI-`1CWSdre;73VK{Qhce5uE`3UEC}f*+8C_&U!MD)o{+<5nx3|r=s)86m~`#
z&-&%B@+KK~lY@U|>9{X=I>s*2#H|nVl6wM7_3XTcltTV6;vJ-vtYU-zYW%=y)JhFtk23@r{
zoet58G$TFgeqVJbk^Crd)hjN%OGBb&vN
zuj5LNxW6qxQoY7EqAPfRXul+4r4TBsUX+~XnjQiHY$3+J>-l~@Gumkg?sP?{EPwfs
zkE+6~e{%j>sCDc8eDR}TLSkZr0c5DA{b(2z)=7^Jrk0SG%2K)F(lsc$``55CXG)1H
zHJ{$OpbhSVohV38@T+wY67=eJez9^V+}^cH)Bed+&su)k
zZv;QfL0k{?k;y0YTw`U`IO(6eW^VR}e)j?|UgnQ;FrF*opLRAYWRhqI_%(d0Gqmkw
zAbd&(;
z1B|~+31d6W$TiBLB#-f-3>Ze~-kdGJ2R0$gG!0=B*V~Jmf#&gQIMa!GCHvLt3Ry!0
zAhvd~5)$-Ao0$`viTu{#lA0}u9Coz_6Z`M25Q&{gOwtRg#!7x@;ifX6$#Yh8e2Jyy
zrjS*D9O2}vg#VQDw*|drXPdbRoWmDst=p}6RSuGGfN`64^(3QXy8!-7b;IOniY#wZ%gYYb%(jjow
zVnYy<5>K;fBWIqOx`(ofYb7r8^xsTu%@35mPQ5XEdvr=oPK7c4DMsPC1bA`YgT2pA
z>4;mwzip-K@ldo%kE3I>-zm57{h!XSDPk#famqeo<-2TY+ufLoHG1#)EVCez_JmwI8|!d&fS+r
z6=1jvtDjyRB44Gb9iDjOx9i(O)z+S`BTw!)4(^8c+S`P~pNMR*hT!(zS{>@RNv{54
zK65t!yE2qzfJi2?r8hdYxx>?v`Nv|Oy@Fj#a;g{5yU93dcR%H|_hs&Uhot(fObyMn
zC}W}f#5@{is=d$M&d)H4_}dZyI{G~MTiTNLCryfhh}N(eg1WvDx=`bc&ng_x_W-e_
zeI#HCNgRJet)L#vk1t2Cm9qNNdk
z+7V?fpn?qxu8^`^#^ohmKl3XrF3oN27A-konXa*0)7(-0zl%`l|9ov}LgLjM!1Ki7F6fe><10Tgzj>zJ
ztYba4q4mykvWTzFg5?}d<{;QY++CUC-{-s7~DFiCAuQ~y*EemZN;SaLHkFVCdX`E!^p$HG#6k&oRq
z^YksQ*jpo%oZ%QqLT0pHZ$F_V0p}9b+am8>iMn}^92@0n8GgTv>YsbZ)&6d~;Z1Lj
z0yl%J-tv1WM);G|%N$dTTsORkKEMGX$__6cc&G1q7}qunQapliSej3fs;7<80VXAo
zUL(C=9>N{!(oz0K^+2P^jQL@&v}M5qLST|_n_1CUar=zTD4+AYVvw&!>4dkq+c%Pd
z1NJk)ndWCs7n(?i{{RPx(Zs*X-D`E+)?+CdTMQWt=iIv(2xNQ%C(Ryr-U+5sfBC*<)XIb>2Gwx~)l{H;t%dm(U6&9-G71
z`W3H|E2#6%zIrvMpUhZ%&qkQ!D1q!jNC+K}rk+XwA{F1i)i7}C)9N}-cKm(nd!Rt$
zvF{*lUF&H&4B~=Lx-swR3t~k1DV-9daV6d~fE6mw
zIHo|!Txqu0*!l~Bpe5B=Mm>qTt^Q;S2q6XJs@;dUFV7d;M%|r
zqJt}vSSurNx0v7gGy8o5iq%bYzL`SK#H)AOeYLat&_F+t4_B=N5W4#+nvRqY2tEpbH*CI
zU)fas!4p`H2Tm5hYE>Qbi}w1?^%{=-yU6{_y!v+2D8R-RL7g`E%B419eET^CT(~#@
zov8ettR5QQj+cWj4O5(!05mVY?{9ssPX%THRl!6sSpH0#RYlx~rGa6M5WsDGQW9(7
z40z9z1C}GrFY|mG#vS1=)h6jvTz=dRQsH!3FfWPn~sar39ZIPBT^G<0fuOWr&g|`E8li}Jr6y~h_ISw4hv$i!n?c`4e&CYjtTjc1Ew1XXIu~^4Xheh_C0MYMNLrWS%Z$=P
zJ8Oxib#lOr5|EHsX~GWm<*$+Z`&h$$^{ncHOq96ay;xh2XFhlsZMJHz^!F5JbBKFKu$5>t;QNh-Zuh5eK4bsT#NsT|r$GZs7
zyZa6_mSFst7$B60=hA@ZlOc1NE8|R39|6*t!Zu@Dk4bi7q{Xt*(LyZ{zO(zA?L1bG
z@ShxW!Ingz;|2f97aSrkRtETJX@(ko@oV~@&2_lgA7!&sO3N2sS64#HopCFZQ@#v%
zBeLV97}cyP)U6xBSSIUSwz$iO@73`KcNB9##}f`@HRrIJ?#Nz=E4pl$B$fLO9ECRA
zelhW+wQrWXfv7G@8;FBm7a1_IrGEHo6wfKnXic7dx)>(oss?V!Y9bZhF+==-?0>Pz8YGJsR2ao_lGmJuNbLXwFn|S^todM;2Njqa
z@Rz}sDqqA0&Y~HCjt{T5`F0x`mSgE9mWfi|lfqBrp9WZ;;%r3uA&EnYsiH!oMhDUZ
zCaOFsd;ybk``Z9HcC=O38}KO*7%wES1q{JNkbTxIftPr(O4%b3!Dzl7@gVNSzs)Y6
zaTL#reWKz>=WIsRgav=6SSsTmdH~*purKmZ#z$CoX~?v2YZItnP%uFK;!Uh2((ZX}
z+k5e*4j32;v>hrheguD$qUgjZ<`S2;@~>zZ)?*tjIYiAzQ6%!Xt}t8R`g
zZ9*wqi@?Z)#|PpcqUkj_H+f}*^j+g(fa=`4Znvs^*Ar2GR*|tbiWLlJcG!=YXiC&5
zuk@=Orjnh_d%eB8bodIjpxh%&bY)@4%l+mDr#itp0m_)+uK1*(l)ZP(*xK7Z%NNgz
z$K?^%D1CdQLo2VqZwnhr&yG3I3BdBHQ)||&3V6D(e|47xmg$HRl$fubafRZaFS3tn
z*Ie&Fa3SsA$-<>I;_c5k0KJ4jFqlImF|h&(Wm_FM5@gE_1AybU8nPSRVMDQJaMf}S-lFfXgkoP
zoM{2lYXFstbZb}=5v9Gn{tN=rYyNEZ#BWrua3OK6XdO74{~y8J^wxEk-*MjINhvlV
zN9XivlMzwp210Xpr1-oFE7w*-?Yv7U26GtBt)2Q_V3L|WaQH~#nH#q_7m*tExOTz5
zVpU+n#`!LpO4q(@>rYQaJu`EssM?u>K%gWHP-zqW_l)rR{Jpay=h=AG|Bq*9BUu~|?a_$xNu3jqHc7_$TF0z~LRkWcU{hz}KE
z+zv<>XQN1G&lK^i*QZQi|4~(${DWeVgt4UNA1XpY`!!8{ikSON}u_)l*oNV4p
zhR;8gSJboy_*;?eFv473GT{IKDDp`QeOSO^xm)$LQf`?wqEw<6;*#FiW
zhKhz_P5Yl%U_=Z(nb_{S>0@uKkG4>~g{Bz?#_miEfMGv^g#l?(2J%(WRfjg*WumT7
z7t4_gIf&`^T`lcsj$X=Cp@C5tXZ0-=JVeEdhEVxfga!il2Q2f5MwrXCasKM3HuHSy
z2Xb&kK?1=bElN3v)^>^{4#LErc2+Po7lCgIOg$=Sz$bKM7Ed9MXb=YY5jQII)rpyD
zdQZTn!Aprq8+Lk5*k&u;n~UcsBtXGyXpu<1D$<({OuXDqb~img4kV9eg%RwW*%f8=
z@j