diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse1.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse1.mo new file mode 100644 index 0000000000..af96c3bf7f --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse1.mo @@ -0,0 +1,208 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse1 "First example model of a one-zone building" + extends Modelica.Icons.Example; + package MediumAir = IDEAS.Media.Air "Air medium"; + + parameter Modelica.Units.SI.Length l=8 "Zone length"; + parameter Modelica.Units.SI.Length w=4 "Zone width"; + parameter Modelica.Units.SI.Length h=zon.hZone "Zone height (Default)"; + + //SimInfoManager must be 'inner' at the top level + inner IDEAS.BoundaryConditions.SimInfoManager sim + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + IDEAS.Buildings.Components.Zone zon( + redeclare package Medium = MediumAir, + nSurf=7, + V=l*h*w) + "Zone model" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + IDEAS.Buildings.Components.OuterWall outWalWes( + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall + constructionType, + inc=IDEAS.Types.Tilt.Wall, + azi=IDEAS.Types.Azimuth.W, + A=l*h) "Western outer wall model" + annotation (Placement(transformation(extent={{-60,10},{-48,30}}))); + IDEAS.Buildings.Components.OuterWall outWalEas( + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall + constructionType, + inc=IDEAS.Types.Tilt.Wall, + azi=IDEAS.Types.Azimuth.E, + A=l*h) "Eastern outer wall model" + annotation (Placement(transformation(extent={{40,0},{28,20}}))); + IDEAS.Buildings.Components.OuterWall outWalNor( + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall + constructionType, + inc=IDEAS.Types.Tilt.Wall, + azi=IDEAS.Types.Azimuth.N, + A=w*h) "Northern outer wall model" + annotation (Placement(transformation( + extent={{6,-10},{-6,10}}, + rotation=90, + origin={-10,54}))); + IDEAS.Buildings.Components.OuterWall outWalSou( + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall + constructionType, + inc=IDEAS.Types.Tilt.Wall, + azi=IDEAS.Types.Azimuth.S, + A=w*h - win.A) "Southern outer wall model" + annotation (Placement(transformation( + extent={{-6,-10},{6,10}}, + rotation=90, + origin={-10,-34}))); + IDEAS.Buildings.Components.Window win( + inc=IDEAS.Types.Tilt.Wall, + A=3*1.4, + azi=IDEAS.Types.Azimuth.S, + redeclare IDEAS.Buildings.Data.Glazing.Ins2Ar2020 glazing) + "Window model" annotation (Placement(transformation(extent={{-6,-10},{6,10}}, + rotation=0, + origin={-54,-10}))); + + Buildings.Components.SlabOnGround slaOnGro( + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyFloor + constructionType, + inc=IDEAS.Types.Tilt.Floor, + azi=IDEAS.Types.Azimuth.S, + A=l*w) "Floor model" annotation (Placement(transformation( + extent={{-6,-11},{6,11}}, + rotation=90, + origin={30,-35}))); + Buildings.Components.OuterWall cei( + redeclare IDEAS.Buildings.Validation.Data.Constructions.LightRoof + constructionType, + inc=IDEAS.Types.Tilt.Ceiling, + A=w*l) "Ceiling model" annotation (Placement(transformation( + extent={{6,-10},{-6,10}}, + rotation=90, + origin={30,54}))); +equation + connect(outWalWes.propsBus_a, zon.propsBus[1]) annotation (Line( + points={{-49,22},{-30,22},{-30,14},{-20,14},{-20,13.1429}}, + color={255,204,51}, + thickness=0.5)); + connect(zon.propsBus[2], outWalNor.propsBus_a) annotation (Line( + points={{-20,13.4286},{-22,13.4286},{-22,30},{-12,30},{-12,49}}, + color={255,204,51}, + thickness=0.5)); + connect(zon.propsBus[3], outWalEas.propsBus_a) annotation (Line( + points={{-20,13.7143},{-20,14},{-22,14},{-22,30},{20,30},{20,12},{29,12}}, + color={255,204,51}, + thickness=0.5)); + connect(outWalSou.propsBus_a, zon.propsBus[4]) annotation (Line( + points={{-12,-29},{-12,-10},{-20,-10},{-20,14}}, + color={255,204,51}, + thickness=0.5)); + connect(win.propsBus_a, zon.propsBus[5]) annotation (Line( + points={{-49,-8},{-30,-8},{-30,14},{-20,14},{-20,14.2857}}, + color={255,204,51}, + thickness=0.5)); + connect(slaOnGro.propsBus_a, zon.propsBus[6]) annotation (Line( + points={{27.8,-30},{28,-30},{28,-10},{-20,-10},{-20,14.5714}}, + color={255,204,51}, + thickness=0.5)); + connect(cei.propsBus_a, zon.propsBus[7]) annotation (Line( + points={{28,49},{28,30},{-22,30},{-22,14.8571},{-20,14.8571}}, + color={255,204,51}, + thickness=0.5)); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false)), + Diagram(coordinateSystem(preserveAspectRatio=false)), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse1.mos" + "Simulate and plot"), + Documentation(info=" +

+This first example file instantiates a simple building model that consists of one zone, four walls, +a window, a floor and a ceiling. The zone dimensions are 8 m (with walls oriented +north and south) by 4 m, and the window measures 3 m by 1.4 m. Use the default +zone height of 2.8 m. Apply double glazing and a heavy wall, which provide high thermal mass. +

+

Required models

+ +

Connection instructions

+

+Each yellow bus connector of a surface (Window, OuterWall +or SlabOnGround) has to be connected to exactly one zone bus connector. +To support multiple connections, the zone has an array of bus connectors with size +nSurf, where nSurf is a parameter of Zone, +which has to be set by the user. It is the user’s responsibility to ensure that each +element of this array is connected to exactly one surface and that there is a total +of nSurf connections to the zone. +

+

+In addition to connecting each surface, the parameters of each component have to be set. Components typically +have many default values that are appropriate for many purposes. When a parameter does not have a default +value, it must be set by the user. Notable examples are the dimensions and orientation of the zone, walls +and windows. The surface orientation can be set using the parameters incOpt, which automatically sets the +inclination depending on the type of outer wall (wall, floor, ceiling), and aziOpt, which automatically sets the +azimuth (north, east, south, west). Furthermore, the zone Medium must be set to +IDEAS.Media.Air. Glazing and wall types must also be specified. This example uses the BESTEST Heavy Wall for the +walls, the BESTEST Heavy Floor for the floor, the BESTEST light roof for the roof and the double glazing +type Saint Gobain Planitherm and a south orientation for the window. +

+

+The SimInfoManager by default has the modifier inner in its declaration. All IDEAS building components +have the modifier outer in their respective declarations of the SimInfoManager. This causes the component +declarations to point towards the higher level SimInfoManager declaration. This way all model equations for +the weather data have to be generated only once, instead of for each surface. +

+

Reference result

+

+This model is simulated with the following settings: +

+
    +
  1. Lsodar as the solver with tolerance = 1e-06
  2. +
  3. Start time = 1e7,
  4. +
  5. Stop time = 1.1e7,
  6. +
  7. Number of intervals = 5000.
  8. +
+

+The simulation starts 107 seconds after New Year and ends 106 seconds later, covering a period of 11.6 days. +The figure below shows the operative zone temperature, zon.TSensor, +which represents the mean of the air temperature and the mean radiative temperature of all surfaces. +

+

+\"Zone +

+", revisions=" + +")); +end DetailedHouse1; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse10.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse10.mo new file mode 100644 index 0000000000..709f5da6d2 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse10.mo @@ -0,0 +1,123 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse10 "Speeding up the code" + extends DetailedHouse9( + pumSec( + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + use_riseTime=false), + pumPri( + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + use_riseTime=false), + recZon1( + redeclare Buildings.Components.InterzonalAirFlow.n50FixedPressure interzonalAirFlow, + redeclare HeavyWall conTypA, + redeclare HeavyWall conTypB, + redeclare HeavyWall conTypC, + redeclare HeavyWall conTypD), + recZon( + redeclare Buildings.Components.InterzonalAirFlow.n50FixedPressure interzonalAirFlow, + redeclare HeavyWall conTypA, + redeclare HeavyWall conTypB, + redeclare HeavyWall conTypC, + redeclare HeavyWall conTypD), + fanRet( + allowFlowReversal=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + use_riseTime=false), + fanSup( + allowFlowReversal=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + use_riseTime=false), + val(allowFlowReversal=false, from_dp=true), + val1(allowFlowReversal=false, from_dp=true), + rad(allowFlowReversal=false, nEle=2), + rad1(allowFlowReversal=false, nEle=2), + heaPum( + allowFlowReversal1=false, + allowFlowReversal2=false, + from_dp1=true, + from_dp2=true), + senTemSup(tau=0), + tan(allowFlowReversal=false, tau=60), + vavSup(allowFlowReversal=false, use_strokeTime=false), + vavRet(allowFlowReversal=false, use_strokeTime=false), + vavSup1(allowFlowReversal=false, use_strokeTime=false), + vavRet1(allowFlowReversal=false, use_strokeTime=false), + hex(allowFlowReversal1=false, allowFlowReversal2=false)); +protected +record HeavyWall "BESTEST heavy wall with idealized wood layer" + extends IDEAS.Buildings.Data.Interfaces.Construction( + final mats={ + IDEAS.Buildings.Validation.Data.Materials.WoodSiding(d=0), + IDEAS.Buildings.Validation.Data.Insulation.FoamInsulation(d=0.0615), + IDEAS.Buildings.Validation.Data.Materials.ConcreteBlock(d=0.10)}); + +end HeavyWall; + annotation ( + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse10.mos" + "Simulate and plot"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + __Dymola_Algorithm="Euler", + __Dymola_fixedstepsize=20, + Tolerance=1e-6), + __Dymola_experimentFlags( + Advanced( + EvaluateAlsoTop=true, + GenerateVariableDependencies=false, + OutputModelicaCode=false), + Evaluate=true, + OutputCPUtime=true, + OutputFlatModelica=false), + Documentation(info=" +

+The created models tend to exhibit slow performance, with computation time significantly increasing due to +controller oscillations or frequent on/off switching of the heat pump. These effects cause a lot of fast +transients that force the solver to take small steps, which takes a lot of time. +

+Fortunately, there are many tricks that can be used to speed up the solver. The fundamental principle is to +remove small time constants from the problem. +The example in +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse10 implements changes +that cause the simulation to become 2 times faster. By systematically removing fast time constants, the solver can be +switched to a simpler method, such as Euler integration, the simulation time also becomes 2 times smaller +when using a fixed time step of 20 seconds. These are modest improvements since this small example model +behaves rather well. However, for large models, the difference in computation time when using Euler integration +can become a factor 1000. The modifications however require a bit of knowledge about solvers and the models +that you are using, including some of the more advanced parameters. To learn more about this, we refer to +[1, 2, 3]. +

+

References

+

+[1] F. Jorissen, M. Wetter, and L. Helsen. Simulation Speed Analysis and Improvements of Modelica Models for Building Energy Simulation. In 11th International Modelica Conference, Paris, 2015. doi: 10.3384/ecp1511859 +

+

+[2] F. Jorissen, M. Wetter, and L. Helsen. Simplifications for hydronic system models in Modelica. Journal of Building Performance Simulation, 11:6, 639-654, 2018. doi: 10.1080/19401493.2017.1421263 +

+

+[3] F. Jorissen. Toolchain for Optimal Control and Design of Energy Systems in Buildings. PhD Thesis, KU Leuven, 2018. +

+", revisions=" + +")); +end DetailedHouse10; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse2.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse2.mo new file mode 100644 index 0000000000..c420485089 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse2.mo @@ -0,0 +1,70 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse2 "Adding solar screens" + extends DetailedHouse1(win(redeclare Buildings.Components.Shading.Screen shaType)); + Modelica.Blocks.Sources.Constant con(k=1) + "Solar screen's external control signal" + annotation (Placement(transformation(extent={{-90,-60},{-70,-40}}))); +equation + connect(con.y, win.Ctrl) + annotation (Line(points={{-69,-50},{-58,-50},{-58,-20}}, color={0,0,127})); + annotation ( + Documentation(info=" +

+This model extends from +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse1 +and adds a solar shading screen to the window model. +Compare the simulation outputs to see the impact on the zone temperature. +

+

Required models

+ +

Connection instructions

+

+Solar shading is a property of the window and can be selected using the replaceable model shaType. +A drop-down menu lists all available options. Each option may include custom parameters, which can be configured by pressing the Edit button next to the drop-down menu. +

+

+The Screen model requires an external control signal to determine whether the screen is extended or retracted. +An input appears on the Window icon for this purpose. Ensure that this input is connected to the appropriate control signal. +See the window input comment for more information on how to choose the control signal. +

+

Reference result

+

+The figure below shows the operative zone temperature with (red) and without (blue) the shading model. +

+

+\"The +

+", revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse2.mos" + "Simulate and plot")); +end DetailedHouse2; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse3.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse3.mo new file mode 100644 index 0000000000..6c9d16a33f --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse3.mo @@ -0,0 +1,73 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse3 "Adding occupancy and lighting" + extends DetailedHouse2( + zon( + redeclare replaceable Buildings.Components.Occupants.Fixed occNum(nOccFix=1), + redeclare Buildings.Components.OccupancyType.OfficeWork occTyp, + redeclare Buildings.Components.RoomType.Office rooTyp, + redeclare Buildings.Components.LightingType.LED ligTyp, + redeclare Buildings.Components.LightingControl.OccupancyBased ligCtr)); + annotation ( + Documentation(info=" +

+This example extends the second example by adding an occupancy and lighting model. +Based on the selected options, the system automatically calculates the zone's internal heat gains, +relative humidity, and CO2 concentration. The model implements a continuous occupancy schedule +of one person and LED lighting for the zone. The lighting operates when occupants are present. +

+

Required models

+ +

+Similar to the +IDEAS.Buildings.Components.Shading.Screen model used in +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse2, these model are utilized internally and can be set in the parameter windows. +They should not be dragged and dropped. +

+

Connection instructions

+

+Set the appropriate replaceable models in the dialogue window of the zone model. +

+

Reference result

+

+The figure below shows the operative zone temperature without (blue) and with (red) occupant and lighting. +

+

+\"The +

+", revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse3.mos" + "Simulate and plot")); +end DetailedHouse3; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse4.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse4.mo new file mode 100644 index 0000000000..e5b15b04d7 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse4.mo @@ -0,0 +1,83 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse4 "Including custom occupant schedule" + extends DetailedHouse3(zon(redeclare OccSch occNum(k=2))); +protected + model OccSch "Simple occupancy schedule" + extends IDEAS.Buildings.Components.Occupants.BaseClasses.PartialOccupants(final useInput=false); + + parameter Real k "Number of occupants"; + Utilities.Time.CalendarTime calTim(zerTim=IDEAS.Utilities.Time.Types.ZeroTime.NY2019) + annotation (Placement(transformation(extent={{-20,20},{0,40}}))); + Modelica.Blocks.Sources.RealExpression occ(y= + if calTim.weekDay < 6 and (calTim.hour > 7 and calTim.hour < 18) then k else 0) + "Number of occupants present" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + equation + connect(occ.y, nOcc) + annotation (Line(points={{1,0},{120,0}}, color={0,0,127})); + end OccSch; + annotation ( + Documentation(info=" +

+This example extends the third example by adding a +custom occupancy model that uses an occupancy schedule that returns an +occupancy of two during office hours and zero otherwise. +

+

Required models

+ +

Connection instructions

+

+Create a new model that extends the occupancy partial model. This partial model contains an input, +which is not used, and an output, which must be set. Create an occupancy signal using a +RealExpression that returns the parameter value k during office hours (7–19 h on weekdays) +and zero otherwise. Implement this model by extending the previous example, redeclaring the +occupancy model, and setting parameter k. +Use the year 2019 ( +IDEAS.Utilities.Time.Types.ZeroTime.NY2019) to define the reference time in the calendar model. +Use an if-then-else statement with +logical checks for the calendar outputs weekDay and hour. +

+

Reference result

+

+The figure below shows the operative zone temperature with the old (blue) and new (red) occupancy model. +Note the much more peaked behaviour of the zone temperature during the weekdays when there are occupants present. +

+

+\"The +

+", revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse4.mos" + "Simulate and plot")); +end DetailedHouse4; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse5.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse5.mo new file mode 100644 index 0000000000..d53a41474d --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse5.mo @@ -0,0 +1,125 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse5 "New building model with two connected zones" + extends Modelica.Icons.Example; + + replaceable package MediumAir = IDEAS.Media.Air "Air medium"; + parameter Modelica.Units.SI.Length l=8 "Zone length"; + parameter Modelica.Units.SI.Length w=4 "Zone width"; + parameter Modelica.Units.SI.Length h=2.8 "Zone height"; + + inner BoundaryConditions.SimInfoManager sim + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Buildings.Components.RectangularZoneTemplate recZon( + redeclare package Medium = MediumAir, + bouTypCei=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + aziA=IDEAS.Types.Azimuth.N, + h=h, + bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + bouTypD=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypA, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypB, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypC, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypD, + bouTypC=IDEAS.Buildings.Components.Interfaces.BoundaryType.InternalWall, + bouTypFlo=IDEAS.Buildings.Components.Interfaces.BoundaryType.SlabOnGround, + l=w, + w=l/2, + hasWinA=true, + A_winA=1.5*1.4, + redeclare IDEAS.Buildings.Validation.Data.Constructions.LightRoof conTypCei, + redeclare IDEAS.Buildings.Data.Glazing.Ins2Ar2020 glazingA, + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyFloor conTypFlo) + "Northern part of the zone" annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + Buildings.Components.RectangularZoneTemplate recZon1( + redeclare package Medium = MediumAir, + aziA=IDEAS.Types.Azimuth.N, + h=h, + bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + bouTypC=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + bouTypD=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + bouTypFlo=IDEAS.Buildings.Components.Interfaces.BoundaryType.SlabOnGround, + bouTypCei=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypB, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypC, + redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypD, + redeclare IDEAS.Buildings.Validation.Data.Constructions.LightRoof conTypCei, + redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyFloor conTypFlo, + bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.External, + l=w, + w=l/2, + hasWinC=true, + A_winC=1.5*1.4, + redeclare IDEAS.Buildings.Data.Glazing.Ins2Ar2020 glazingC) + "Southern part of the zone" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); +equation + connect(recZon1.proBusA, recZon.proBusC) annotation (Line( + points={{-6,-21},{-6,2},{6.8,2},{6.8,20.2}}, + color={255,204,51}, + thickness=0.5)); + annotation (Documentation(info=" +

+This example demonstrates the use of the RectangularZoneTemplate. +The one-zone implementation with one window of +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse1 is replaced by +a two-zone implementation with a north and a south-oriented window. +Note the different temperature responses of the zones. +

+

Required models

+ +

Connection instructions

+

+The model consists of two RectangularZoneTemplates and a SimInfoManager. The required parameters are set in +the templates, with careful attention to all tabs. The internal wall is defined in only one of the two +templates, while an external connection is used for the other template. The InternalWall and +External options cause a yellow bus connector to appear on each template, which must then be connected to each other. +The northern and southern wall both have a window of 1.5 m by 1.4 m (double glazing type Saint Gobain Planitherm). +

+

Reference result

+

+The figure below shows the operative zone temperatures of the zone with north oriented window (blue) and the zone with the south-oriented window (red). +Note the large effect that the window placement has on the zone dynamics! +

+

+\"Zone +

+", +revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse5.mos" + "Simulate and plot")); +end DetailedHouse5; diff --git a/IDEAS/Examples/Tutorial/Example6.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse6.mo similarity index 50% rename from IDEAS/Examples/Tutorial/Example6.mo rename to IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse6.mo index 216aa0ca38..4163ef5016 100644 --- a/IDEAS/Examples/Tutorial/Example6.mo +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse6.mo @@ -1,12 +1,13 @@ -within IDEAS.Examples.Tutorial; -model Example6 "Extension of example 5 that adds a heating system" - extends Example5; +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse6 + "Extension of DetailedHouse5 that adds a heating system" + extends DetailedHouse5; package MediumWater = IDEAS.Media.Water "Water Medium"; Fluid.HeatPumps.ScrollWaterToWater heaPum( - m2_flow_nominal=pumpPrim.m_flow_nominal, + m2_flow_nominal=pumPri.m_flow_nominal, enable_variable_speed=false, - m1_flow_nominal=pumpSec.m_flow_nominal, + m1_flow_nominal=pumSec.m_flow_nominal, redeclare package Medium1 = MediumWater, redeclare package Medium2 = MediumWater, datHeaPum= @@ -15,8 +16,7 @@ model Example6 "Extension of example 5 that adds a heating system" dp1_nominal=10000, dp2_nominal=10000, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) - "Heat pump model, rescaled for low thermal powers" - annotation (Placement( + "Heat pump model, rescaled for low thermal powers" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=90, @@ -52,7 +52,7 @@ model Example6 "Extension of example 5 that adds a heating system" extent={{10,-10},{-10,10}}, rotation=90, origin={50,30}))); - Fluid.Movers.FlowControlled_dp pumpSec( + Fluid.Movers.FlowControlled_dp pumSec( dp_nominal=20000, inputType=IDEAS.Fluid.Types.InputType.Constant, m_flow_nominal=rad.m_flow_nominal + rad1.m_flow_nominal, @@ -77,7 +77,7 @@ model Example6 "Extension of example 5 that adds a heating system" extent={{10,-10},{-10,10}}, rotation=90, origin={90,30}))); - Fluid.Movers.FlowControlled_dp pumpPrim( + Fluid.Movers.FlowControlled_dp pumPri( inputType=IDEAS.Fluid.Types.InputType.Constant, dp_nominal=10000, m_flow_nominal=rad.m_flow_nominal + rad1.m_flow_nominal, @@ -85,13 +85,13 @@ model Example6 "Extension of example 5 that adds a heating system" energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Circulation pump at primary side" annotation (Placement(transformation(extent={{240,50},{220,70}}))); - Modelica.Blocks.Sources.IntegerConstant HPOn(k=1) "Heat pump is on" + Modelica.Blocks.Sources.IntegerConstant heaPumOn(k=1) "Heat pump is on" annotation (Placement(transformation(extent={{160,-62},{180,-42}}))); Modelica.Blocks.Continuous.Integrator EEl(k=1/3600000) "Electrical energy meter with conversion to kWh" annotation (Placement(transformation(extent={{280,40},{300,60}}))); Fluid.Sensors.TemperatureTwoPort senTemSup(redeclare package Medium = - MediumWater, m_flow_nominal=pumpSec.m_flow_nominal) + MediumWater, m_flow_nominal=pumSec.m_flow_nominal) "Supply water temperature sensor" annotation (Placement(transformation(extent={{146,70},{126,50}}))); Fluid.Sources.Boundary_pT bou1( @@ -104,7 +104,7 @@ model Example6 "Extension of example 5 that adds a heating system" origin={110,90}))); Fluid.Storage.Stratified tan( redeclare package Medium = MediumWater, - m_flow_nominal=pumpSec.m_flow_nominal, + m_flow_nominal=pumSec.m_flow_nominal, VTan=0.1, hTan=0.5, dIns=0.1) "Buffer tank for avoiding excessive heat pump on/off switches" @@ -114,67 +114,148 @@ equation annotation (Line(points={{50,20},{50,0}}, color={0,127,255})); connect(val1.port_b, rad1.port_a) annotation (Line(points={{90,20},{90,0}}, color={0,127,255})); - connect(val.port_a, pumpSec.port_b) + connect(val.port_a, pumSec.port_b) annotation (Line(points={{50,40},{50,60},{100,60}}, color={0,127,255})); - connect(val1.port_a, pumpSec.port_b) + connect(val1.port_a, pumSec.port_b) annotation (Line(points={{90,40},{90,60},{100,60}}, color={0,127,255})); - connect(heaPum.port_a2, pumpPrim.port_b) + connect(heaPum.port_a2, pumPri.port_b) annotation (Line(points={{196,20},{196,60},{220,60}}, color={0,127,255})); connect(heaPum.port_b2, bou.ports[1]) annotation (Line(points={{196,0},{196, - -30},{248,-30},{248,8},{260,8}}, color={0,127,255})); - connect(pumpPrim.port_a, bou.ports[2]) annotation (Line(points={{240,60},{248, - 60},{248,12},{260,12}}, color={0,127,255})); - connect(rad.heatPortCon, rectangularZoneTemplate.gainCon) annotation (Line( - points={{42.8,-8},{20,-8},{20,27},{10,27}}, color={191,0,0})); - connect(rad.heatPortRad, rectangularZoneTemplate.gainRad) annotation (Line( - points={{42.8,-12},{16,-12},{16,24},{10,24}}, color={191,0,0})); - connect(rad1.heatPortCon, rectangularZoneTemplate1.gainCon) annotation (Line( - points={{82.8,-8},{66,-8},{66,-33},{10,-33}}, color={191,0,0})); - connect(rad1.heatPortRad, rectangularZoneTemplate1.gainRad) annotation (Line( - points={{82.8,-12},{70,-12},{70,-36},{10,-36}}, color={191,0,0})); - connect(HPOn.y, heaPum.stage) annotation (Line(points={{181,-52},{187,-52},{ - 187,-2}}, - color={255,127,0})); + -30},{248,-30},{248,11},{260,11}}, color={0,127,255})); + connect(pumPri.port_a, bou.ports[2]) annotation (Line(points={{240,60},{248,60}, + {248,9},{260,9}}, color={0,127,255})); + connect(rad.heatPortCon, recZon.gainCon) annotation (Line(points={{42.8,-8},{20,-8},{20,27},{10,27}}, color={191,0,0})); + connect(rad.heatPortRad, recZon.gainRad) annotation (Line(points={{42.8,-12},{16,-12},{16,24},{10,24}}, color={191,0,0})); + connect(rad1.heatPortCon,recZon1.gainCon) annotation (Line(points={{82.8,-8}, + {66,-8},{66,-33},{10,-33}}, color={191,0,0})); + connect(rad1.heatPortRad,recZon1.gainRad) annotation (Line(points={{82.8,-12}, + {70,-12},{70,-36},{10,-36}}, color={191,0,0})); + connect(heaPumOn.y, heaPum.stage) annotation (Line(points={{181,-52},{187,-52}, + {187,-2}}, color={255,127,0})); connect(heaPum.P, EEl.u) annotation (Line(points={{190,21},{190,50},{278,50}}, color={0,0,127})); - connect(rectangularZoneTemplate.TSensor, val.T) annotation (Line(points={{11, - 32},{26,32},{26,30},{39.4,30}}, color={0,0,127})); - connect(rectangularZoneTemplate1.TSensor, val1.T) annotation (Line(points={{ - 11,-28},{32,-28},{32,12},{79.4,12},{79.4,30}}, color={0,0,127})); - connect(bou1.ports[1], pumpSec.port_b) + connect(recZon.TSensor, val.T) annotation (Line(points={{11,32},{26,32},{26,30},{39.4,30}}, color={0,0,127})); + connect(recZon1.TSensor, val1.T) annotation (Line(points={{11,-28},{32,-28},{32, + 12},{79.4,12},{79.4,30}}, color={0,0,127})); + connect(bou1.ports[1], pumSec.port_b) annotation (Line(points={{110,80},{100,80},{100,60}}, color={0,127,255})); - connect(senTemSup.port_b, pumpSec.port_a) + connect(senTemSup.port_b, pumSec.port_a) annotation (Line(points={{126,60},{120,60}}, color={0,127,255})); connect(senTemSup.port_a, tan.port_b) - annotation (Line(points={{146,60},{158,60}}, color={0,127,255})); + annotation (Line(points={{146,60},{158,60},{158,50},{168,50}}, + color={0,127,255})); connect(tan.port_a, heaPum.port_b1) - annotation (Line(points={{178,60},{184,60},{184,20}}, color={0,127,255})); + annotation (Line(points={{168,70},{184,70},{184,20}}, color={0,127,255})); connect(rad1.port_b, heaPum.port_a1) annotation (Line(points={{90,-20},{90, -30},{184,-30},{184,0}}, color={0,127,255})); connect(rad.port_b, heaPum.port_a1) annotation (Line(points={{50,-20},{50,-30}, {184,-30},{184,0}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(extent={{-100,-100},{300,100}}, + annotation (Diagram(coordinateSystem(extent={{-100,-100},{280,100}}, initialScale=0.1), graphics={Text( extent={{138,98},{224,90}}, lineColor={28,108,200}, textString="This sets the absolute pressure only"), Line(points={{126, 86},{134,92}}, color={28,108,200})}), Icon(coordinateSystem( - extent={{-100,-100},{300,100}}, initialScale=0.1)), + extent={{-100,-100},{100,100}}, initialScale=0.1)), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse6.mos" + "Simulate and plot"), experiment( StartTime=10000000, StopTime=11000000, __Dymola_NumberOfIntervals=5000, Tolerance=1e-06, __Dymola_Algorithm="Lsodar"), - Documentation(revisions=" + Documentation(info=" +

+This model extends +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse5 by adding an HVAC system. +The system consists of a water-water heat pump, radiators, a storage tank, circulation +pumps and a heat source at a constant temperature of 10°C for the heat pump. The model includes constant +control setpoints for the heat pump and pumps. An integrator block is incorporated to measure +the electrical energy consumption of the heat pump. +

+

Required models

+ +

Connection instructions

+

+A reference implementation for this example is shown in the figure below. +

+

+\" +

+

+One notable example is that in each fluid loop the absolute pressure of that loop has to be +defined somewhere: pumps and valves only provide information about differential pressures. For this purpose +use IDEAS.Fluid.Sources.Boundary_pT and connect it to the loop, +which will set the absolute pressure at the connection point. +

+

+

Reference result

+

+The figures below show the operative zone temperatures recZon.TSensor and recZon1.TSensor, +the radiator heat flow rates rad.Q_flow and rad1.Q_flow, the heat pump condenser temperature +heaPum.con.T and the heat pump heat flow rate heaPum.QCon_flow. +

+

+\" +

+

+

+\" +

+

+This example illustrates the importance of control, which is currently not modelled. All pumps and the heat +pump are assumed to be active continuously, which is detrimental for the system performance. The COP +(heaPum.com.COP) is only about 2.9. +

+", revisions=" -"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example6.mos" - "Simulate and plot")); -end Example6; +")); +end DetailedHouse6; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse7.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse7.mo new file mode 100644 index 0000000000..bc069aa5b7 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse7.mo @@ -0,0 +1,90 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse7 "Adding a controller" + extends DetailedHouse6(heaPum(enable_variable_speed=true)); + Modelica.Blocks.Logical.Hysteresis hys(uLow=273.15 + 40, uHigh=273.15 + 45) + "Hysteresis controller" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + Modelica.Blocks.Math.BooleanToReal booToRea(realTrue=0, realFalse=1) + "Conversion to real control signal" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + +equation + connect(hys.y, booToRea.u) annotation (Line(points={{81,-70},{88,-70},{88,-70}, + {98,-70}}, color={255,0,255})); + connect(booToRea.y, heaPum.y) + annotation (Line(points={{121,-70},{187,-70},{187,-2}}, color={0,0,127})); + connect(senTemSup.T, hys.u) annotation (Line(points={{136,49},{136,4},{120,4}, + {120,-40},{40,-40},{40,-70},{58,-70}}, color={0,0,127})); + annotation ( + Documentation(info=" +

+This step adds a controller that disables the heat pump when the supply water +temperature exceeds 45°C. The simple controller has a large impact on the heat pump's COP. +

+

Required models

+ +

Connection instructions

+

+The temperature sensor between the storage tank and the secondary circulation pump serves as an input to the hysteresis controller. +The controller is configured such that it switches to a false signal below 40°C and to true above 45°C. +

+

+The output of the hysteresis controller is thus true when the supply temperature is high enough and false +otherwise. This Boolean signal has to be converted in a real control signal that can be accepted by the heat +pump model using the BooleanToReal block. The heat pump already has a control signal. +Since blocks cannot be removed from an extension of a model, the heat pump model input type is set to +enable_variable_speed=true. This configuration allows the model to accept any real signal while ignoring +connections to the other control signal. +

+

Reference result

+

+The figure below shows the operative zone temperature recZon.TSensor, the heat pump condenser temperatureheaPum.con.T +and the radiator heat flow rate rad.Q_flow in the north-oriented zone with (red) and without (blue) hysteresis control. +We see that the supply temperature is indeed reduced significantly. +This causes the zone temperature to be slightly lower, up to about 0.25°C. +The electrical energy use however decreases from 22.0 kWh to 16.1 kWh. +Note that this heating system configuration is still not efficient since +the small flow rates still cause large temperatures to occur within the heat pump and thus cause a small COP. +COPs of more than 5 are obtainable when using a bypass and a separate pump to charge the storage tank. +

+

+\"Comparison +

+", revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse7.mos" + "Simulate and plot")); +end DetailedHouse7; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse8.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse8.mo new file mode 100644 index 0000000000..83753a246e --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse8.mo @@ -0,0 +1,67 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse8 "JSON writer" + extends DetailedHouse7; + Utilities.IO.Files.JSONWriter jsonWri( + nin=1, + fileName="EEl.json", + varKeys={"Electrical energy [kWh]"}, + outputTime=IDEAS.Utilities.IO.Files.BaseClasses.OutputTime.Terminal) + annotation (Placement(transformation(extent={{308,70},{328,90}}))); +equation + connect(jsonWri.u[1], EEl.y) annotation (Line(points={{308,80},{304,80},{304,50},{301,50}}, + color={0,0,127})); + annotation (Documentation(info=" +

+Extracting results from Dymola can be tedious. Therefore, several custom tools have been developed to facilitate +exporting simulation results. For time-series data, a generic CSV writer can be found in +IDEAS.Utilities.IO.Files.JSONWriter. This model generates a CSV file at a user-defined location that contains data for +each of the inputs of the block. The delimiter can be modified in the advanced parameter tab. The model + IDEAS.Utilities.IO.Files.CombiTimeTableWriter, +does the same, albeit using a slightly different file format which can be read directly back into Modelica using the file reader + Modelica.Blocks.Sources.CombiTimeTable. +

+

+In this example we will not output time series data, only a single value: the total electricity consumption at the end +of the simulation, using the JSON file format. Note that the external library ExternData can be used to read +JSON files. +

+

Required models

+ +

Connection instructions

+

+Add the model, choose a file path and indicate the appropriate time when the result should be +saved. Connect the appropriate signal to the input of the block. +

+

Reference result

+

+Check the contents of the generated file. Depending on the chosen value for the parameter +varKeys, the result should be similar to: {\"Electrical energy [kWH]\"}: 1.2577137592e+01 +

+", revisions=" + +"), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse8.mos" + "Simulate and plot")); +end DetailedHouse8; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse9.mo b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse9.mo new file mode 100644 index 0000000000..8de265d8b7 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/DetailedHouse9.mo @@ -0,0 +1,241 @@ +within IDEAS.Examples.Tutorial.DetailedHouse; +model DetailedHouse9 "Adding CO2-controlled ventilation" + extends DetailedHouse7( + pumSec(nominalValuesDefineDefaultPressureCurve=true), + pumPri(nominalValuesDefineDefaultPressureCurve=true), + recZon1( + redeclare Buildings.Components.Occupants.Fixed occNum(nOccFix=1), + redeclare Buildings.Components.OccupancyType.OfficeWork occTyp), + recZon( + redeclare OccSched occNum(k=2), + redeclare Buildings.Components.OccupancyType.OfficeWork occTyp), + redeclare package MediumAir = IDEAS.Media.Air (extraPropertiesNames={"CO2"})); + + Fluid.Actuators.Dampers.PressureIndependent vavSup( + redeclare package Medium = MediumAir, + m_flow_nominal=100*1.2/3600, + dpDamper_nominal=50, + dpFixed_nominal=50) "Supply VAV for first zone" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + Fluid.Actuators.Dampers.PressureIndependent vavSup1( + redeclare package Medium = MediumAir, + m_flow_nominal=100*1.2/3600, + dpDamper_nominal=50, + dpFixed_nominal=50) "Supply VAV for second zone" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + Fluid.Actuators.Dampers.PressureIndependent vavRet( + redeclare package Medium = MediumAir, + m_flow_nominal=100*1.2/3600, + dpDamper_nominal=50, + dpFixed_nominal=50) "Return VAV for first zone" + annotation (Placement(transformation(extent={{-100,20},{-120,40}}))); + Fluid.Actuators.Dampers.PressureIndependent vavRet1( + redeclare package Medium = MediumAir, + m_flow_nominal=100*1.2/3600, + dpDamper_nominal=50, + dpFixed_nominal=50) "Return VAV for second zone" + annotation (Placement(transformation(extent={{-100,-60},{-120,-40}}))); + Fluid.Movers.FlowControlled_dp fanSup( + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = MediumAir, + dp_nominal=200, + m_flow_nominal=vavSup.m_flow_nominal + vavSup1.m_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Supply fan" + annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); + Fluid.Movers.FlowControlled_dp fanRet( + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = MediumAir, + dp_nominal=200, + m_flow_nominal=vavRet.m_flow_nominal + vavRet1.m_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Return fan" + annotation (Placement(transformation(extent={{-200,-30},{-220,-10}}))); + Fluid.HeatExchangers.ConstantEffectiveness hex( + redeclare package Medium1 = MediumAir, + redeclare package Medium2 = MediumAir, + m1_flow_nominal=fanSup.m_flow_nominal, + m2_flow_nominal=fanRet.m_flow_nominal, + dp1_nominal=100, + dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" + annotation (Placement(transformation(extent={{-250,-10},{-230,10}}))); + Controls.Continuous.LimPID conPID( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + yMin=0.1, + k=0.005, + reverseActing=false, + Ti=300) annotation (Placement(transformation(extent={{-40,80},{-60,100}}))); + Controls.Continuous.LimPID conPID1( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + yMin=0.1, + k=0.005, + reverseActing=false, + Ti=300) annotation (Placement(transformation(extent={{-40,0},{-60,20}}))); + Modelica.Blocks.Sources.Constant ppmSet(k=1000) + annotation (Placement(transformation(extent={{40,80},{20,100}}))); + Fluid.Sources.OutsideAir outAir( + redeclare package Medium = MediumAir, + azi=0, + nPorts=2) "Source model that takes properties from SimInfoManager" + annotation (Placement(transformation(extent={{-280,10},{-260,-10}}))); +protected + model OccSched "Simple occupancy schedule" + extends IDEAS.Buildings.Components.Occupants.BaseClasses.PartialOccupants(final useInput=false); + + parameter Real k "Number of occupants"; + Utilities.Time.CalendarTime calTim(zerTim=IDEAS.Utilities.Time.Types.ZeroTime.NY2019) + annotation (Placement(transformation(extent={{-20,20},{0,40}}))); + Modelica.Blocks.Sources.RealExpression occ(y=if calTim.weekDay < 6 and ( + calTim.hour > 7 and calTim.hour < 18) then k else 0) + "Number of occupants present" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + equation + connect(occ.y, nOcc) + annotation (Line(points={{1,0},{120,0}}, color={0,0,127})); + end OccSched; + +equation + connect(vavSup.port_a, fanSup.port_b) annotation (Line(points={{-120,60},{-180, + 60},{-180,20},{-200,20}}, color={0,127,255})); + connect(vavSup1.port_a, fanSup.port_b) annotation (Line(points={{-120,-10},{-180, + -10},{-180,20},{-200,20}}, color={0,127,255})); + connect(fanRet.port_a, vavRet1.port_b) annotation (Line(points={{-200,-20},{-160, + -20},{-160,-50},{-120,-50}}, color={0,127,255})); + connect(fanRet.port_a, vavRet.port_b) annotation (Line(points={{-200,-20},{-160, + -20},{-160,30},{-120,30}}, color={0,127,255})); + connect(hex.port_b1, fanSup.port_a) annotation (Line(points={{-230,6},{-230,20}, + {-220,20}}, color={0,127,255})); + connect(hex.port_a2, fanRet.port_b) annotation (Line(points={{-230,-6},{-230,-20}, + {-220,-20}}, color={0,127,255})); + connect(conPID.y, vavSup.y) + annotation (Line(points={{-61,90},{-110,90},{-110,72}}, color={0,0,127})); + connect(vavRet.y, vavSup.y) + annotation (Line(points={{-110,42},{-110,72},{-110,72}}, color={0,0,127})); + connect(vavRet1.y, vavSup1.y) + annotation (Line(points={{-110,-38},{-110,2}}, color={0,0,127})); + connect(vavSup1.y, conPID1.y) + annotation (Line(points={{-110,2},{-110,10},{-61,10}}, color={0,0,127})); + connect(recZon1.ppm, conPID1.u_m) annotation (Line(points={{11,-30},{14,-30}, + {14,-2},{-50,-2}}, color={0,0,127})); + connect(recZon.ppm, conPID.u_m) annotation (Line(points={{11,30},{14,30},{14,78},{-50,78}}, color={0,0,127})); + connect(ppmSet.y, conPID.u_s) + annotation (Line(points={{19,90},{-38,90}}, color={0,0,127})); + connect(ppmSet.y, conPID1.u_s) annotation (Line(points={{19,90},{-20,90},{-20, + 10},{-38,10}}, color={0,0,127})); + connect(outAir.ports[1], hex.port_b2) annotation (Line(points={{-260,1},{-250, + 1},{-250,-6}}, color={0,127,255})); + connect(outAir.ports[2], hex.port_a1) annotation (Line(points={{-260,-1},{-252, + -1},{-252,6},{-250,6}}, color={0,127,255})); + connect(vavSup.port_b, recZon.ports[1]) annotation (Line(points={{-100,60},{-2,60},{-2,40},{0,40}}, color={0,127,255})); + connect(vavRet.port_a, recZon.ports[2]) annotation (Line(points={{-100,30},{-14,30},{-14,40},{0,40}}, color={0,127,255})); + connect(vavSup1.port_b,recZon1.ports[1]) + annotation (Line(points={{-100,-10},{0,-10},{0,-20}}, color={0,127,255})); + connect(vavRet1.port_a,recZon1.ports[2]) annotation (Line(points={{-100,-50}, + {-34,-50},{-34,-20},{0,-20}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(extent={{-280,-100},{280,100}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}})), + experiment( + StartTime=10000000, + StopTime=11000000, + __Dymola_NumberOfIntervals=5000, + Tolerance=1e-06, + __Dymola_Algorithm="Lsodar"), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse9.mos" + "Simulate and plot"), + Documentation(info=" +

+Adding CO2-controlled ventilation system. The occupancy model +from +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse4 is added to one zone and a +fixed occupancy of 1 person to the other zone. The ventilation system +consists of two fans, two supply and two return air VAVs (Variable Air Volume), a heat recovery unit and an +outdoor air source. The control consists of PI controllers with a setpoint of 1000 ppm. +

+

Required models

+ +

Connection instructions

+

+This model extends from +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse8 where its existing medium declaration is modified to add CO2. +For one zone, add the occupancy model from +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse4. For the other zone, a fixed occupancy of 1 person is added. +For making a connection with the outside air +IDEAS.Fluid.Sources.OutsideAir is used, which is similar to +IDEAS.Fluid.Sources.Boundary_pT except that it automatically sets the outdoor dry bulb temperature and humidity. +

+

+For this exercise, assume that the VAV has a nominal flow rate of 100 m3/h, which equals 0.033 kg/s. A nominal pressure drop of 50 Pa +is assumed and also dpFixed_nominal=50, which causes the VAV model to include a pressure drop of ducts, grills, +filters or bends that are connected at the inlet or outlet of the VAV. The fan pressure head is constant at 200 Pa and its nominal flow +rate is the sum of the VAV flow rates. The heat recovery heat exchanger has a constant effectiveness of 80 %. +

+

+The model includes two PI controllers, with their outputs connected to the VAVs. The zone ppm +outputs are connected to the measurement inputs u_m of the PI controllers, and a constant set point +of 1000 ppm is provided at the input u_s. The VAVs have a minimum opening of 10 %. +The PI controllers are configured with the following parameters: k = 0.005, T_i = 300, reverseAction=false, +and controllerType=PI. The schematic representation of the model is shown in the figure below. +

+

+\"The +

+

Reference result

+

+The figures below show the operative zone temperature, CO2 concentrations and PI control signals in both zones. +Note the small overshoot of the PI controller outputs and the exponential decay towards the outdoor CO2 +concentration when there are no occupants. +

+

+\"The +

+", revisions=" + +")); +end DetailedHouse9; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/package.mo b/IDEAS/Examples/Tutorial/DetailedHouse/package.mo new file mode 100644 index 0000000000..0b027a8912 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/package.mo @@ -0,0 +1,128 @@ +within IDEAS.Examples.Tutorial; +package DetailedHouse "Package with example for how to built an office building + (using the detailed building envelope component models within IDEAS.Buildings) + with occupants, a radiator heating system connected to a heat pump, and a ventilation system." + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

+This package contains examples with step-by-step instructions for how to build a system model +for an office building (using the detailed building envelope component models within IDEAS.Buildings) +with occupants, a radiator heating system connected to a heat pump, and a ventilation system. +It serves as a demonstration case of how the IDEAS library can be used. +

+

+The goal of this exercise is to become familiar with Modelica and the IDEAS library. +Since the IDEAS library components are typically used by combining several components graphically, +the use of equations falls outside of the scope of this exercise. +

+

+Firstly, develop a single-zone (office) building using the component models of the IDEAS.Buildings package, +then add occupants. Secondly, move to a two-zone (office) building and add a heating system +and a ventilation system (including their control). +This exercise will extend from the single-zone ( +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse1) or two-zone ( +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse5) model in several steps, adding complexity. +In between each step the user should be able to simulate the model, +i.e., no errors should be produced and simulation results may be compared. +

+

+The model has been created in the following stages: +

+
    +
  1. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse1 +represents a basic building model that includes a single zone, four walls, a window, a floor, and a ceiling +and serves as a starting model to implement the single-zone DetailedHouse model. +
  2. +
  3. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse2 +implements solar shading extensions by adding a screen to the window model. +
  4. +
  5. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse3 +adds continuous occupancy of 1 person and LED lighting for the zone. +
  6. +
  7. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse4 +adds an occupancy schedule that assigns two occupants during office hours and +zero otherwise. This schedule will be created using extensions of the IDEAS +templates and replaceable models. +
  8. +
  9. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse5 +This example shows the use of the RectangularZoneTemplate . +
  10. +
  11. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse6 +adds a heating system. The system consists of a water-water heat pump, radiators, a storage tank, circulation +pumps, and a low-temperature heat source at constant temperature. +
  12. +
  13. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse7 +adds a controller that disables the heat pump when the supply water +temperature exceeds 45◦C. +
  14. +
  15. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse8 +adds workflow automation, generating a CSV file at a userdefined location that contains data +for each of the inputs of the block. +
  16. +
  17. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse9 +adds a CO2-controlled ventilation system. The occupancy model from +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse4 is added to one zone and a +fixed occupancy of 1 person to the other zone. The ventilation system +consists of two fans, two supply and two return air VAVs (Variable Air Volume), a heat recovery unit and an +outdoor air source. The control consists of PI controllers with a setpoint of 1000 ppm. +
  18. +
  19. + +IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse10 +removes small time constants from the model to decrease computation time. +
  20. +
+

+For each stage, firstly the model part is qualitatively explained. +Next, the names of the required Modelica models (from the Modelica Standard Library and/or IDEAS library) are listed. +Finally, we provide high-level instructions of how to set up the model. +If these instructions are not clear immediately, have a look at the model documentation and at the type of connectors the model has, +try out some things, make an educated guess, etc. +Finally, we provide reference results that allow you to check if your implementation is correct. +Depending on the parameter values that you choose, results may differ. +

+

+The graphical representation of the final model is given below. +

+

+\"Graphical +

+

+A more detailed explanation and step-by-step approach are provided in Exercises 3 and 4 +of the Modelica Crash Course, developed by The SySi Team at KU Leuven. Links to these +additional resources are available below. +

+ +")); +end DetailedHouse; diff --git a/IDEAS/Examples/Tutorial/DetailedHouse/package.order b/IDEAS/Examples/Tutorial/DetailedHouse/package.order new file mode 100644 index 0000000000..98918c2648 --- /dev/null +++ b/IDEAS/Examples/Tutorial/DetailedHouse/package.order @@ -0,0 +1,10 @@ +DetailedHouse1 +DetailedHouse2 +DetailedHouse3 +DetailedHouse4 +DetailedHouse5 +DetailedHouse6 +DetailedHouse7 +DetailedHouse8 +DetailedHouse9 +DetailedHouse10 diff --git a/IDEAS/Examples/Tutorial/Example1.mo b/IDEAS/Examples/Tutorial/Example1.mo deleted file mode 100644 index 8847f0045a..0000000000 --- a/IDEAS/Examples/Tutorial/Example1.mo +++ /dev/null @@ -1,130 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example1 "First example model containing one zone" - extends Modelica.Icons.Example; - package Medium = IDEAS.Media.Air "Air medium"; - - parameter Modelica.Units.SI.Length l=8 "Zone length"; - parameter Modelica.Units.SI.Length w=4 "Zone width"; - parameter Modelica.Units.SI.Length h=2.7 "Zone height"; - - - //SimInfoManager must be 'inner' at the top level - inner IDEAS.BoundaryConditions.SimInfoManager sim - annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - IDEAS.Buildings.Components.Zone zone( - redeclare package Medium = Medium, - nSurf=7, - V=l*h*w) - "Zone model" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); - IDEAS.Buildings.Components.OuterWall outerWall( - redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall - constructionType, - inc=IDEAS.Types.Tilt.Wall, - azi=IDEAS.Types.Azimuth.W, - A=l*h) - "Outer wall model" - annotation (Placement(transformation(extent={{-56,0},{-44,20}}))); - IDEAS.Buildings.Components.OuterWall outerWall1( - redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall - constructionType, - inc=IDEAS.Types.Tilt.Wall, - azi=IDEAS.Types.Azimuth.E, - A=l*h) - "Outer wall model" - annotation (Placement(transformation(extent={{36,0},{24,20}}))); - IDEAS.Buildings.Components.OuterWall outerWall2( - redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall - constructionType, - inc=IDEAS.Types.Tilt.Wall, - azi=IDEAS.Types.Azimuth.N, - A=w*h) - "Outer wall model" - annotation (Placement(transformation( - extent={{6,-10},{-6,10}}, - rotation=90, - origin={-10,52}))); - IDEAS.Buildings.Components.OuterWall outerWall3( - redeclare IDEAS.Buildings.Validation.Data.Constructions.HeavyWall - constructionType, - inc=IDEAS.Types.Tilt.Wall, - azi=IDEAS.Types.Azimuth.S, - A=w*h - window.A) - "Outer wall model" - annotation (Placement(transformation( - extent={{-6,-10},{6,10}}, - rotation=90, - origin={-10,-30}))); - IDEAS.Buildings.Components.Window window( - inc=IDEAS.Types.Tilt.Wall, - A=3*1.4, - azi=IDEAS.Types.Azimuth.S, - redeclare TwinHouses.BaseClasses.Data.Materials.Glazing glazing) - "Window model" annotation (Placement(transformation(extent={{-6,-10},{6,10}}, - rotation=90, - origin={-36,-30}))); - - Buildings.Components.InternalWall floor( - redeclare Buildings.Validation.Data.Constructions.HeavyFloor - constructionType, - inc=IDEAS.Types.Tilt.Floor, - azi=IDEAS.Types.Azimuth.S, - A=l*w) - "Floor modelled using internal wall with both the ceiling and roof side connected to the zone" - annotation (Placement(transformation( - extent={{-6,-10},{6,10}}, - rotation=90, - origin={70,10}))); -equation - connect(outerWall.propsBus_a, zone.propsBus[1]) annotation (Line( - points={{-45,12},{-38.5,12},{-38.5,15.7143},{-20,15.7143}}, - color={255,204,51}, - thickness=0.5)); - connect(zone.propsBus[2], outerWall2.propsBus_a) annotation (Line( - points={{-20,15.1429},{-22,15.1429},{-22,47},{-12,47}}, - color={255,204,51}, - thickness=0.5)); - connect(zone.propsBus[3], outerWall1.propsBus_a) annotation (Line( - points={{-20,14.5714},{-20,28},{25,28},{25,12}}, - color={255,204,51}, - thickness=0.5)); - connect(outerWall3.propsBus_a, zone.propsBus[4]) annotation (Line( - points={{-12,-25},{-12,-6},{-20,-6},{-20,14}}, - color={255,204,51}, - thickness=0.5)); - connect(window.propsBus_a, zone.propsBus[5]) annotation (Line( - points={{-38,-25},{-38,14},{-20,14},{-20,13.4286}}, - color={255,204,51}, - thickness=0.5)); - connect(floor.propsBus_a, zone.propsBus[6]) annotation (Line( - points={{68,15},{68,28},{-20,28},{-20,12.8571}}, - color={255,204,51}, - thickness=0.5)); - connect(floor.propsBus_b, zone.propsBus[7]) annotation (Line( - points={{68,5},{68,-6},{-20,-6},{-20,12.2857}}, - color={255,204,51}, - thickness=0.5)); - annotation ( - Icon(coordinateSystem(preserveAspectRatio=false)), - Diagram(coordinateSystem(preserveAspectRatio=false)), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_Algorithm="Lsodar"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example1.mos" - "Simulate and plot"), - Documentation(info=" -

-This first example file instantiates a simple building model. -

-", revisions=" - -")); -end Example1; diff --git a/IDEAS/Examples/Tutorial/Example10.mo b/IDEAS/Examples/Tutorial/Example10.mo deleted file mode 100644 index c06a8db00a..0000000000 --- a/IDEAS/Examples/Tutorial/Example10.mo +++ /dev/null @@ -1,87 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example10 "Speeding up the code" - extends Example9( - fanRet( - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, use_riseTime= - false), - fanSup( - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, use_riseTime= - false), - val(allowFlowReversal=false, from_dp=true), - val1(allowFlowReversal=false, from_dp=true), - pumpSec( - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, - allowFlowReversal=false, - use_riseTime=false), - pumpPrim( - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, - allowFlowReversal=false, - use_riseTime=false), - rectangularZoneTemplate1( - redeclare Buildings.Components.InterzonalAirFlow.n50FixedPressure interzonalAirFlow, - redeclare HeavyWall conTypA, - redeclare HeavyWall conTypB, - redeclare HeavyWall conTypC, - redeclare HeavyWall conTypD, - redeclare HeavyWall conTypFlo), - rectangularZoneTemplate( - redeclare Buildings.Components.InterzonalAirFlow.n50FixedPressure interzonalAirFlow, - redeclare HeavyWall conTypA, - redeclare HeavyWall conTypB, - redeclare HeavyWall conTypC, - redeclare HeavyWall conTypD, - redeclare HeavyWall conTypFlo), - rad(nEle=2), - rad1(nEle=2), - heaPum(from_dp1=true, from_dp2=true), - senTemSup(tau=0), - tan(tau=60), - vavSup(use_strokeTime=false), - vavRet(use_strokeTime=false), - vavSup1(use_strokeTime=false), - vavRet1(use_strokeTime=false)); -protected -record HeavyWall "BESTEST heavy wall with idealized wood layer" - extends IDEAS.Buildings.Data.Interfaces.Construction( - final mats={ - IDEAS.Buildings.Validation.Data.Materials.WoodSiding(d=0), - IDEAS.Buildings.Validation.Data.Insulation.FoamInsulation(d=0.0615), - IDEAS.Buildings.Validation.Data.Materials.ConcreteBlock(d=0.10)}); - -end HeavyWall; - annotation (experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=0.00011, - __Dymola_fixedstepsize=20, - __Dymola_Algorithm="Euler"), __Dymola_experimentFlags( - Advanced( - EvaluateAlsoTop=true, - GenerateVariableDependencies=false, - OutputModelicaCode=false), - Evaluate=true, - OutputCPUtime=true, - OutputFlatModelica=false), - Documentation(revisions=" - -", info=" -

-Tuning model and solver for computation time -

-"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example10.mos" - "Simulate and plot")); -end Example10; diff --git a/IDEAS/Examples/Tutorial/Example2.mo b/IDEAS/Examples/Tutorial/Example2.mo deleted file mode 100644 index ab9f392e7a..0000000000 --- a/IDEAS/Examples/Tutorial/Example2.mo +++ /dev/null @@ -1,32 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example2 "Adding closed screens" - extends Example1(window(redeclare Buildings.Components.Shading.Screen shaType)); - Modelica.Blocks.Sources.Constant const(k=1) - annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); -equation - connect(const.y, window.Ctrl) - annotation (Line(points={{-79,-50},{-26,-50},{-26,-34}}, color={0,0,127})); - annotation ( - Documentation(info=" -

-This second example file extends the first example and adds a solar shading screen to the window model. -Compare the simulation outputs to see the impact on the zone temperature. -

-", revisions=" - -"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example2.mos" - "Simulate and plot"), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_Algorithm="Lsodar")); -end Example2; diff --git a/IDEAS/Examples/Tutorial/Example3.mo b/IDEAS/Examples/Tutorial/Example3.mo deleted file mode 100644 index 2e074a6264..0000000000 --- a/IDEAS/Examples/Tutorial/Example3.mo +++ /dev/null @@ -1,31 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example3 "Adding occupant and lighting" - extends Example2(zone( - redeclare replaceable Buildings.Components.Occupants.Fixed occNum(nOccFix=1), - redeclare Buildings.Components.OccupancyType.OfficeWork occTyp, - redeclare Buildings.Components.RoomType.Office rooTyp, - redeclare Buildings.Components.LightingType.LED ligTyp, - redeclare Buildings.Components.LightingControl.OccupancyBased ligCtr)); - annotation ( - Documentation(revisions=" - -", info=" -

-This example extends the second example by adding an occupant and lighting model. -

-"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example3.mos" - "Simulate and plot"), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_Algorithm="Lsodar")); -end Example3; diff --git a/IDEAS/Examples/Tutorial/Example4.mo b/IDEAS/Examples/Tutorial/Example4.mo deleted file mode 100644 index 89b39502df..0000000000 --- a/IDEAS/Examples/Tutorial/Example4.mo +++ /dev/null @@ -1,42 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example4 "Including custom occupant schedule" - extends Example3(zone(redeclare OccSched occNum(k=2))); - -protected - model OccSched "Simple occupancy schedule" - extends IDEAS.Buildings.Components.Occupants.BaseClasses.PartialOccupants(final useInput=false); - - parameter Real k "Number of occupants"; - Utilities.Time.CalendarTime calTim(zerTim=IDEAS.Utilities.Time.Types.ZeroTime.NY2019) - annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Modelica.Blocks.Sources.RealExpression occ(y=if calTim.weekDay < 6 and ( - calTim.hour > 7 and calTim.hour < 18) then k else 0) - "Number of occupants present" - annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - equation - connect(occ.y, nOcc) - annotation (Line(points={{1,0},{120,0}}, color={0,0,127})); - end OccSched; - annotation ( - Documentation(revisions=" - -", info=" -

-This example extends the third example by adding a -custom occupancy model that uses an occupancy schedule. -

-"), - __Dymola_Commands(file="Resources/Scripts/Dymola/Examples/Tutorial/Example4.mos" - "Simulate and plot"), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_Algorithm="Lsodar")); -end Example4; diff --git a/IDEAS/Examples/Tutorial/Example5.mo b/IDEAS/Examples/Tutorial/Example5.mo deleted file mode 100644 index 238f7bffec..0000000000 --- a/IDEAS/Examples/Tutorial/Example5.mo +++ /dev/null @@ -1,91 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example5 "New model with 2 coupled zones" - extends Modelica.Icons.Example; - replaceable package Medium = IDEAS.Media.Air "Air medium"; - - parameter Modelica.Units.SI.Length l=8 "Zone length"; - parameter Modelica.Units.SI.Length w=4 "Zone width"; - parameter Modelica.Units.SI.Length h=2.7 "Zone height"; - - inner BoundaryConditions.SimInfoManager sim - annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - Buildings.Components.RectangularZoneTemplate rectangularZoneTemplate( - redeclare package Medium = Medium, - aziA=IDEAS.Types.Azimuth.N, - h=h, - bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - bouTypD=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypA, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypB, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypC, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypD, - bouTypC=IDEAS.Buildings.Components.Interfaces.BoundaryType.InternalWall, - bouTypFlo=IDEAS.Buildings.Components.Interfaces.BoundaryType.InternalWall, - bouTypCei=IDEAS.Buildings.Components.Interfaces.BoundaryType.External, - l=w, - w=l/2, - hasWinA=true, - A_winA=2*1.3, - redeclare TwinHouses.BaseClasses.Data.Materials.Glazing glazingA, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypFlo) - "North part of the zone" - annotation (Placement(transformation(extent={{-10,20},{10,40}}))); - Buildings.Components.RectangularZoneTemplate rectangularZoneTemplate1( - redeclare package Medium = Medium, - aziA=IDEAS.Types.Azimuth.N, - h=h, - bouTypB=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - bouTypC=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - bouTypD=IDEAS.Buildings.Components.Interfaces.BoundaryType.OuterWall, - bouTypFlo=IDEAS.Buildings.Components.Interfaces.BoundaryType.InternalWall, - bouTypCei=IDEAS.Buildings.Components.Interfaces.BoundaryType.External, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypB, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypC, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypD, - redeclare Buildings.Validation.Data.Constructions.HeavyWall conTypFlo, - bouTypA=IDEAS.Buildings.Components.Interfaces.BoundaryType.External, - l=w, - w=l/2, - hasWinC=true, - A_winC=2*1.3, - redeclare TwinHouses.BaseClasses.Data.Materials.Glazing glazingC) - "South part of the zone" - annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); -equation - connect(rectangularZoneTemplate.proBusFlo, rectangularZoneTemplate.proBusCei) - annotation (Line( - points={{0,24},{28,24},{28,36},{-0.2,36}}, - color={255,204,51}, - thickness=0.5)); - connect(rectangularZoneTemplate1.proBusA, rectangularZoneTemplate.proBusC) - annotation (Line( - points={{-6,-21},{-6,2},{6.8,2},{6.8,20.2}}, - color={255,204,51}, - thickness=0.5)); - connect(rectangularZoneTemplate1.proBusCei, rectangularZoneTemplate1.proBusFlo) - annotation (Line( - points={{-0.2,-24},{28,-24},{28,-36},{0,-36}}, - color={255,204,51}, - thickness=0.5)); - annotation (Documentation(revisions=" - -", info=" -

-This example demonstrates the use of the RectangularZoneTemplate. -The one-zone implementation with one window of example 1 is repeated here as -a two-zone implementation with two windows that are north and south oriented. -Note the different temperature responses of the zones. -

-"), experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_Algorithm="Lsodar")); -end Example5; diff --git a/IDEAS/Examples/Tutorial/Example7.mo b/IDEAS/Examples/Tutorial/Example7.mo deleted file mode 100644 index 1eeb42ea43..0000000000 --- a/IDEAS/Examples/Tutorial/Example7.mo +++ /dev/null @@ -1,41 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example7 "Adding a controller" - extends Example6(heaPum(enable_variable_speed=true)); - Modelica.Blocks.Logical.Hysteresis hys(uLow=273.15 + 40, uHigh=273.15 + 45) - "Hysteresis controller" - annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); - Modelica.Blocks.Math.BooleanToReal booToRea(realTrue=0, realFalse=1) - "Conversion to real control signal" - annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); - -equation - connect(hys.y, booToRea.u) annotation (Line(points={{81,-70},{88,-70},{88,-70}, - {98,-70}}, color={255,0,255})); - connect(booToRea.y, heaPum.y) - annotation (Line(points={{121,-70},{167,-70},{167,-2}}, color={0,0,127})); - connect(senTemSup.T, hys.u) annotation (Line(points={{140,49},{140,4},{120,4}, - {120,-40},{40,-40},{40,-70},{58,-70}}, color={0,0,127})); - annotation ( - Documentation(revisions=" - -", info=" -

-The simple controller has a large impact on the heat pump COP. -

-"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example7.mos" - "Simulate and plot"), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_fixedstepsize=20, - __Dymola_Algorithm="Lsodar")); -end Example7; diff --git a/IDEAS/Examples/Tutorial/Example8.mo b/IDEAS/Examples/Tutorial/Example8.mo deleted file mode 100644 index 86203ebe50..0000000000 --- a/IDEAS/Examples/Tutorial/Example8.mo +++ /dev/null @@ -1,31 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example8 "JSOn writer" - extends Example7; - Utilities.IO.Files.JSONWriter jsonWri( - nin=1, - fileName="EEl.json", - varKeys={"Electrical energy [kWh]"}, - outputTime=IDEAS.Utilities.IO.Files.BaseClasses.OutputTime.Terminal) - annotation (Placement(transformation(extent={{280,-42},{260,-22}}))); -equation - connect(jsonWri.u[1], EEl.y) annotation (Line(points={{280,-32},{286,-32},{ - 286,50},{281,50}}, color={0,0,127})); - annotation (Documentation(revisions=" - -", info=" -

-This model outputs the main model result to a json file. -

-"), experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=1e-06, - __Dymola_fixedstepsize=20, - __Dymola_Algorithm="Lsodar")); -end Example8; diff --git a/IDEAS/Examples/Tutorial/Example9.mo b/IDEAS/Examples/Tutorial/Example9.mo deleted file mode 100644 index b329cd9c47..0000000000 --- a/IDEAS/Examples/Tutorial/Example9.mo +++ /dev/null @@ -1,171 +0,0 @@ -within IDEAS.Examples.Tutorial; -model Example9 "Adding CO2-controlled ventilation" - extends Example7( - redeclare package Medium = IDEAS.Media.Air(extraPropertiesNames={"CO2"}), - rectangularZoneTemplate( - redeclare OccSched occNum(k=2), - redeclare Buildings.Components.OccupancyType.OfficeWork occTyp), - rectangularZoneTemplate1( - redeclare Buildings.Components.Occupants.Fixed occNum(nOccFix=1), - redeclare Buildings.Components.OccupancyType.OfficeWork occTyp), - pumpSec(nominalValuesDefineDefaultPressureCurve=true), - pumpPrim(nominalValuesDefineDefaultPressureCurve=true)); - - - Fluid.Actuators.Dampers.PressureIndependent vavSup( - redeclare package Medium = Medium, - m_flow_nominal=100*1.2/3600, - dpDamper_nominal=50, - dpFixed_nominal=50) "Supply VAV for first zone" - annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Fluid.Actuators.Dampers.PressureIndependent vavSup1( - redeclare package Medium = Medium, - m_flow_nominal=100*1.2/3600, - dpDamper_nominal=50, - dpFixed_nominal=50) "Supply VAV for second zone" - annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); - Fluid.Actuators.Dampers.PressureIndependent vavRet( - redeclare package Medium = Medium, - m_flow_nominal=100*1.2/3600, - dpDamper_nominal=50, - dpFixed_nominal=50) "Return VAV for first zone" - annotation (Placement(transformation(extent={{-100,20},{-120,40}}))); - Fluid.Actuators.Dampers.PressureIndependent vavRet1( - redeclare package Medium = Medium, - m_flow_nominal=100*1.2/3600, - dpDamper_nominal=50, - dpFixed_nominal=50) "Return VAV for second zone" - annotation (Placement(transformation(extent={{-100,-60},{-120,-40}}))); - Fluid.Movers.FlowControlled_dp fanSup( - inputType=IDEAS.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=vavSup.m_flow_nominal + vavSup1.m_flow_nominal, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Supply fan" - annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Fluid.Movers.FlowControlled_dp fanRet( - inputType=IDEAS.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=vavRet.m_flow_nominal + vavRet1.m_flow_nominal, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Return fan" - annotation (Placement(transformation(extent={{-200,-30},{-220,-10}}))); - Fluid.HeatExchangers.ConstantEffectiveness hex( - redeclare package Medium1 = Medium, - redeclare package Medium2 = Medium, - m1_flow_nominal=fanSup.m_flow_nominal, - m2_flow_nominal=fanRet.m_flow_nominal, - dp1_nominal=100, - dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" - annotation (Placement(transformation(extent={{-250,-10},{-230,10}}))); - Controls.Continuous.LimPID conPID( - controllerType=Modelica.Blocks.Types.SimpleController.PI, - yMin=0.1, - k=0.005, - reverseActing=false, - Ti=300) annotation (Placement(transformation(extent={{-40,80},{-60,100}}))); - Controls.Continuous.LimPID conPID1( - controllerType=Modelica.Blocks.Types.SimpleController.PI, - yMin=0.1, - k=0.005, - reverseActing=false, - Ti=300) annotation (Placement(transformation(extent={{-40,0},{-60,20}}))); - Modelica.Blocks.Sources.Constant ppmSet(k=1000) - annotation (Placement(transformation(extent={{40,80},{20,100}}))); - Fluid.Sources.OutsideAir outsideAir(redeclare package Medium = Medium, - azi=0, - nPorts=2) "Source model that takes properties from SimInfoManager" - annotation (Placement(transformation(extent={{-280,10},{-260,-10}}))); -protected - model OccSched "Simple occupancy schedule" - extends IDEAS.Buildings.Components.Occupants.BaseClasses.PartialOccupants(final useInput=false); - - parameter Real k "Number of occupants"; - Utilities.Time.CalendarTime calTim(zerTim=IDEAS.Utilities.Time.Types.ZeroTime.NY2019) - annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Modelica.Blocks.Sources.RealExpression occ(y=if calTim.weekDay < 6 and ( - calTim.hour > 7 and calTim.hour < 18) then k else 0) - "Number of occupants present" - annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - equation - connect(occ.y, nOcc) - annotation (Line(points={{1,0},{120,0}}, color={0,0,127})); - end OccSched; - - -equation - connect(vavSup.port_a, fanSup.port_b) annotation (Line(points={{-120,60},{-180, - 60},{-180,20},{-200,20}}, color={0,127,255})); - connect(vavSup1.port_a, fanSup.port_b) annotation (Line(points={{-120,-10},{-180, - -10},{-180,20},{-200,20}}, color={0,127,255})); - connect(fanRet.port_a, vavRet1.port_b) annotation (Line(points={{-200,-20},{-160, - -20},{-160,-50},{-120,-50}}, color={0,127,255})); - connect(fanRet.port_a, vavRet.port_b) annotation (Line(points={{-200,-20},{-160, - -20},{-160,30},{-120,30}}, color={0,127,255})); - connect(hex.port_b1, fanSup.port_a) annotation (Line(points={{-230,6},{-230,20}, - {-220,20}}, color={0,127,255})); - connect(hex.port_a2, fanRet.port_b) annotation (Line(points={{-230,-6},{-230,-20}, - {-220,-20}}, color={0,127,255})); - connect(conPID.y, vavSup.y) - annotation (Line(points={{-61,90},{-110,90},{-110,72}}, color={0,0,127})); - connect(vavRet.y, vavSup.y) - annotation (Line(points={{-110,42},{-110,72},{-110,72}}, color={0,0,127})); - connect(vavRet1.y, vavSup1.y) - annotation (Line(points={{-110,-38},{-110,2}}, color={0,0,127})); - connect(vavSup1.y, conPID1.y) - annotation (Line(points={{-110,2},{-110,10},{-61,10}}, color={0,0,127})); - connect(rectangularZoneTemplate1.ppm, conPID1.u_m) annotation (Line(points={{11, - -30},{14,-30},{14,-2},{-50,-2}}, color={0,0,127})); - connect(rectangularZoneTemplate.ppm, conPID.u_m) annotation (Line(points={{11,30}, - {14,30},{14,78},{-50,78}}, color={0,0,127})); - connect(ppmSet.y, conPID.u_s) - annotation (Line(points={{19,90},{-38,90}}, color={0,0,127})); - connect(ppmSet.y, conPID1.u_s) annotation (Line(points={{19,90},{-20,90},{-20, - 10},{-38,10}}, color={0,0,127})); - connect(outsideAir.ports[1], hex.port_b2) annotation (Line(points={{-260,-2}, - {-250,-2},{-250,-6}}, color={0,127,255})); - connect(outsideAir.ports[2], hex.port_a1) annotation (Line(points={{-260,2},{ - -252,2},{-252,6},{-250,6}}, color={0,127,255})); - connect(vavSup.port_b, rectangularZoneTemplate.ports[1]) annotation (Line( - points={{-100,60},{-2,60},{-2,40},{0,40}}, color={0,127,255})); - connect(vavRet.port_a, rectangularZoneTemplate.ports[2]) annotation (Line( - points={{-100,30},{-14,30},{-14,40},{0,40}}, color={0,127,255})); - connect(vavSup1.port_b, rectangularZoneTemplate1.ports[1]) - annotation (Line(points={{-100,-10},{0,-10},{0,-20}}, color={0,127,255})); - connect(vavRet1.port_a, rectangularZoneTemplate1.ports[2]) annotation (Line( - points={{-100,-50},{-34,-50},{-34,-20},{0,-20}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(extent={{-280,-100},{280,100}})), Icon( - coordinateSystem(extent={{-280,-100},{280,100}})), - experiment( - StartTime=10000000, - StopTime=11000000, - __Dymola_NumberOfIntervals=5000, - Tolerance=0.00011, - __Dymola_Algorithm="Lsodar"), - __Dymola_Commands(file= - "Resources/Scripts/Dymola/Examples/Tutorial/Example9.mos" - "Simulate and plot"), - Documentation(revisions=" - -", info=" -

-Adding CO2-controlled ventilation system. -

-")); -end Example9; diff --git a/IDEAS/Examples/Tutorial/package.order b/IDEAS/Examples/Tutorial/package.order index c9a1100ac4..f3afc73b5f 100644 --- a/IDEAS/Examples/Tutorial/package.order +++ b/IDEAS/Examples/Tutorial/package.order @@ -1,11 +1,2 @@ -Example1 -Example10 -Example2 -Example3 -Example4 -Example5 -Example6 -Example7 -Example8 -Example9 +DetailedHouse SimpleHouse diff --git a/IDEAS/Examples/package.order b/IDEAS/Examples/package.order index 3f3df43834..e394dff8c7 100644 --- a/IDEAS/Examples/package.order +++ b/IDEAS/Examples/package.order @@ -1,7 +1,7 @@ Tutorial +DetailedResidentialNoHeating SimpleHouse Benchmark -DetailedResidentialNoHeating IBPSA PPD12 TwinHouses diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse1.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse1.png new file mode 100644 index 0000000000..6f01d6ec19 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse1.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse10.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse10.png new file mode 100644 index 0000000000..c481103a0a Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse10.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse2.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse2.png new file mode 100644 index 0000000000..96504742c1 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse2.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse3.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse3.png new file mode 100644 index 0000000000..269ad5d705 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse3.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse4.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse4.png new file mode 100644 index 0000000000..560ebec1ac Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse4.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse5.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse5.png new file mode 100644 index 0000000000..d17cdd4e2d Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse5.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6.png new file mode 100644 index 0000000000..de2cbd72ae Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_bis.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_bis.png new file mode 100644 index 0000000000..327e7d8ac2 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_bis.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_schematic.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_schematic.png new file mode 100644 index 0000000000..7c77959c49 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse6_schematic.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7.png new file mode 100644 index 0000000000..b7067a9663 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7_schematic.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7_schematic.png new file mode 100644 index 0000000000..7132322573 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse7_schematic.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9.png new file mode 100644 index 0000000000..4e677529db Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_bis.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_bis.png new file mode 100644 index 0000000000..7d229f2acd Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_bis.png differ diff --git a/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_schematic.png b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_schematic.png new file mode 100644 index 0000000000..3c41122b70 Binary files /dev/null and b/IDEAS/Resources/Images/Examples/Tutorial/DetailedHouse/DetailedHouse9_schematic.png differ diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example1.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse1.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example1.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse1.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example10.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse10.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example10.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse10.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example2.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse2.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example2.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse2.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example3.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse3.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example3.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse3.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example4.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse4.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example4.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse4.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example5.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse5.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example5.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse5.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example6.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse6.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example6.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse6.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example7.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse7.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example7.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse7.txt diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example9.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse9.txt similarity index 100% rename from IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_Example9.txt rename to IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Examples_Tutorial_DetailedHouse_DetailedHouse9.txt diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse1.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse1.mos new file mode 100644 index 0000000000..f028fb30b8 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse1.mos @@ -0,0 +1,4 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse1", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse1"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"zon.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse10.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse10.mos new file mode 100644 index 0000000000..51570f1e17 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse10.mos @@ -0,0 +1,7 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse10", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="Euler", fixedstepsize=20, resultFile="DetailedHouse10"); + +createPlot(id=1, position={0, 0, 965, 656}, y={"recZon.ppm", "recZon1.ppm"}, range={10000000.0, 11000000.0, 200.0, 1200.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={0, 0, 965, 326}, y={"conPID1.y", "conPID.y"}, range={10000000.0, 11000000.0, 0.0, 1.0}, erase=false, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); + + + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse2.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse2.mos new file mode 100644 index 0000000000..a54a280c07 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse2.mos @@ -0,0 +1,4 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse2", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse2"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"zon.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse3.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse3.mos new file mode 100644 index 0000000000..f528621115 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse3.mos @@ -0,0 +1,4 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse3", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse3"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"zon.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse4.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse4.mos new file mode 100644 index 0000000000..d3d655cd44 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse4.mos @@ -0,0 +1,4 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse4", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse4"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"zon.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse5.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse5.mos new file mode 100644 index 0000000000..de4f6948ff --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse5.mos @@ -0,0 +1,4 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse5", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse5"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"recZon.TSensor", "recZon1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse6.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse6.mos new file mode 100644 index 0000000000..0c717ce5d2 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse6.mos @@ -0,0 +1,7 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse6", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse6"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"recZon.TSensor", "recZon1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); +createPlot(id=1, position={0, 0, 851, 175}, y={"heaPum.con.T", "senTemSup.T"}, range={10000000.0, 11000000.0, 0.0, 80.0}, erase=false, grid=true, subPlot=2, colors={{238,46,47}, {28,108,200}}, displayUnits={"degC", "degC"}); +createPlot(id=1, position={0, 0, 1421, 337}, y={"heaPum.QCon_flow"}, range={10000000.0, 11000000.0, -100.0, 800.0}, erase=false, grid=true, subPlot=3, colors={{28,108,200}}); + + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse7.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse7.mos new file mode 100644 index 0000000000..5c71547e40 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse7.mos @@ -0,0 +1,7 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse7", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse7"); + +createPlot(id=1, position={0, 0, 851, 533}, y={"recZon.TSensor", "recZon1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); +createPlot(id=1, position={0, 0, 851, 175}, y={"heaPum.con.T", "senTemSup.T"}, range={10000000.0, 11000000.0, 0.0, 80.0}, erase=false, grid=true, subPlot=2, colors={{238,46,47}, {28,108,200}}, displayUnits={"degC", "degC"}); +createPlot(id=1, position={0, 0, 1421, 337}, y={"heaPum.QCon_flow"}, range={10000000.0, 11000000.0, -100.0, 800.0}, erase=false, grid=true, subPlot=3, colors={{28,108,200}}); + + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse9.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse9.mos new file mode 100644 index 0000000000..69a72b57e1 --- /dev/null +++ b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/DetailedHouse/DetailedHouse9.mos @@ -0,0 +1,7 @@ +simulateModel("IDEAS.Examples.Tutorial.DetailedHouse.DetailedHouse9", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="DetailedHouse9"); + +createPlot(id=1, position={0, 0, 965, 656}, y={"recZon.ppm", "recZon1.ppm"}, range={10000000.0, 11000000.0, 200.0, 1200.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={0, 0, 965, 326}, y={"conPID1.y", "conPID.y"}, range={10000000.0, 11000000.0, 0.0, 1.0}, erase=false, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); + + + diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example1.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example1.mos deleted file mode 100644 index 5e417d88fe..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example1.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example1", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial1"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"zone.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, filename="Example1.mat", colors={{28,108,200}}, displayUnits={"degC"}); - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example10.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example10.mos deleted file mode 100644 index cfd44799d3..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example10.mos +++ /dev/null @@ -1,7 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example10", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="Euler", fixedstepsize=20, resultFile="Tutorial10"); - -createPlot(id=1, position={0, 0, 965, 656}, y={"rectangularZoneTemplate.ppm", "rectangularZoneTemplate1.ppm"}, range={10000000.0, 11000000.0, 200.0, 1200.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}); -createPlot(id=1, position={0, 0, 965, 326}, y={"conPID1.y", "conPID.y"}, range={10000000.0, 11000000.0, 0.0, 1.0}, erase=false, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); - - - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example2.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example2.mos deleted file mode 100644 index 7f9e50cce7..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example2.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example2", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial2"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"zone.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example3.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example3.mos deleted file mode 100644 index 1983abc9c8..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example3.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example3", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial3"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"zone.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example4.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example4.mos deleted file mode 100644 index 503dca2324..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example4.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example4", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial4"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"zone.TSensor"}, range={10000000.0, 11000000.0, 13.0, 21.0}, erase=false, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example5.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example5.mos deleted file mode 100644 index 5f1d5e9c90..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example5.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example5", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial5"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"rectangularZoneTemplate.TSensor", "rectangularZoneTemplate1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example6.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example6.mos deleted file mode 100644 index 903a4914a7..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example6.mos +++ /dev/null @@ -1,7 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example6", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial6"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"rectangularZoneTemplate.TSensor", "rectangularZoneTemplate1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); -createPlot(id=1, position={0, 0, 851, 175}, y={"heaPum.con.T", "senTemSup.T"}, range={10000000.0, 11000000.0, 0.0, 80.0}, erase=false, grid=true, subPlot=2, colors={{238,46,47}, {28,108,200}}, displayUnits={"degC", "degC"}); -createPlot(id=1, position={0, 0, 1421, 337}, y={"heaPum.QCon_flow"}, range={10000000.0, 11000000.0, -100.0, 800.0}, erase=false, grid=true, subPlot=3, colors={{28,108,200}}); - - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example7.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example7.mos deleted file mode 100644 index 32dcabb203..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example7.mos +++ /dev/null @@ -1,7 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example7", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-6, resultFile="Tutorial7"); - -createPlot(id=1, position={0, 0, 851, 533}, y={"rectangularZoneTemplate.TSensor", "rectangularZoneTemplate1.TSensor"}, range={10000000.0, 11000000.0, 13.0, 22.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); -createPlot(id=1, position={0, 0, 851, 175}, y={"heaPum.con.T", "senTemSup.T"}, range={10000000.0, 11000000.0, 0.0, 80.0}, erase=false, grid=true, subPlot=2, colors={{238,46,47}, {28,108,200}}, displayUnits={"degC", "degC"}); -createPlot(id=1, position={0, 0, 1421, 337}, y={"heaPum.QCon_flow"}, range={10000000.0, 11000000.0, -100.0, 800.0}, erase=false, grid=true, subPlot=3, colors={{28,108,200}}); - - diff --git a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example9.mos b/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example9.mos deleted file mode 100644 index 9e42025f8a..0000000000 --- a/IDEAS/Resources/Scripts/Dymola/Examples/Tutorial/Example9.mos +++ /dev/null @@ -1,7 +0,0 @@ -simulateModel("IDEAS.Examples.Tutorial.Example9", startTime=10000000, stopTime=11000000, numberOfIntervals=5000, method="LSodar", tolerance=1e-4, resultFile="Tutorial9"); - -createPlot(id=1, position={0, 0, 965, 656}, y={"rectangularZoneTemplate.ppm", "rectangularZoneTemplate1.ppm"}, range={10000000.0, 11000000.0, 200.0, 1200.0}, erase=false, grid=true, colors={{28,108,200}, {238,46,47}}); -createPlot(id=1, position={0, 0, 965, 326}, y={"conPID1.y", "conPID.y"}, range={10000000.0, 11000000.0, 0.0, 1.0}, erase=false, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); - - -