Buildings.ThermalZones.ReducedOrder.Validation.VDI6007

Validation according to VDI 6007-1

Information

This package contains validation cases for Reduced Order Models according to Guideline VDI 6007 Part 1 (VDI, 2012). The guideline defines twelve test cases that consecutively test different aspects of building pyhsics behaviour. All tests are based on a simple test room, either in a lightweight version (L) or as heavyweight (S). A third version changes one interior wall into a second exterior wall for the heavyweight construction.

Comparative results are supplied with the guideline and have been calculated using two different programs for electrical circuit calculations (for day 1, 10 and 60 in hourly steps). The validation procedure is originally thought to verifiy the correct implementation of an analytical calculation algorithm defined in the guideline. For that, a range of max 0.1 K or max 1 W deviation is allowed. As the implementation cannot reflect all aspects of the algorithm, the implemented model exceeds these values in some cases.

References

VDI. German Association of Engineers Guideline VDI 6007-1 March 2012. Calculation of transient thermal response of rooms and buildings - modelling of rooms.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase1 TestCase1 VDI 6007 Test Case 1 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase10 TestCase10 VDI 6007 Test Case 10 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase11 TestCase11 VDI 6007 Test Case 11 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase12 TestCase12 VDI 6007 Test Case 12 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase2 TestCase2 VDI 6007 Test Case 2 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase3 TestCase3 VDI 6007 Test Case 3 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase4 TestCase4 VDI 6007 Test Case 4 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase5 TestCase5 VDI 6007 Test Case 5 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase6 TestCase6 VDI 6007 Test Case 6 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase7 TestCase7 VDI 6007 Test Case 7 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase8 TestCase8 VDI 6007 Test Case 8 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase9 TestCase9 VDI 6007 Test Case 9 model
Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.BaseClasses BaseClasses Base classes for VDI 6007 validation cases

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase1 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase1

VDI 6007 Test Case 1 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase1

Information

Test Case 1 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a convective heat source for room version S.

Boundary conditions

This test validates basic functionalities.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase1 "VDI 6007 Test Case 1 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, VAir=0, nOrientations=1, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), intWallRC(thermCapInt(each der_T(fixed=true))), T_start=295.15) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, offset={273.15}, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 25200, 27.7; 28800, 27.9; 32400, 28.1; 36000, 28.4; 39600, 28.6; 43200, 28.8; 46800, 29; 50400, 29.2; 54000, 29.4; 57600, 29.6; 61200, 29.8; 64800, 30; 68400, 24.5; 72000, 24.5; 75600, 24.5; 79200, 24.5; 82800, 24.5; 86400, 24.5; 781200, 37.7; 784800, 37.6; 788400, 37.5; 792000, 37.5; 795600, 37.4; 799200, 37.3; 802800, 43; 806400, 43.2; 810000, 43.3; 813600, 43.5; 817200, 43.6; 820800, 43.8; 824400, 43.9; 828000, 44.1; 831600, 44.3; 835200, 44.4; 838800, 44.6; 842400, 44.7; 846000, 39.1; 849600, 39.1; 853200, 39; 856800, 38.9; 860400, 38.9; 864000, 38.8; 5101200, 49.9; 5104800, 49.8; 5108400, 49.7; 5112000, 49.6; 5115600, 49.4; 5119200, 49.3; 5122800, 54.9; 5126400, 55.1; 5130000, 55.2; 5133600, 55.3; 5137200, 55.4; 5140800, 55.5; 5144400, 55.6; 5148000, 55.7; 5151600, 55.8; 5155200, 55.9; 5158800, 56.1; 5162400, 56.2; 5166000, 50.6; 5169600, 50.4; 5173200, 50.3; 5176800, 50.2; 5180400, 50.1; 5184000, 50]) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], macConv.Q_flow); connect(thermalZoneTwoElements.intGainsConv, macConv.port); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase1;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase10 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase10

VDI 6007 Test Case 10 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase10

Information

Test Case 10 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative and convective heat source for room version S. It is based on Test Case 5, but with a non-adiabatic floor plate to an adjacent room with a fixed temperature.

Boundary conditions

This test validates linking to ajdacent rooms with fixed temperature.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase10 "VDI 6007 Test Case 10 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare final package Medium = Modelica.Media.Air.SimpleAir, gWin=1, nExt=1, alphaRad=5, nInt=1, RWin=0.00000001, ratioWinConRad=0.09, AInt=58, alphaWin=2.7, VAir=0, nOrientations=1, AWin={0}, ATransparent={7}, AExt={28}, RExtRem=0.011638548, RExt={0.00171957697767797}, CExt={4338751.41}, RInt={0.000779671554640369}, CInt={12333949.4129606}, intWallRC(thermCapInt(each T(fixed=true))), extWallRC(thermCapExt(each T(fixed=true))), alphaInt=2.398, T_start=290.75, alphaExt=2.4); Buildings.HeatTransfer.Sources.PrescribedTemperature preTem "Outdoor air temperature"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0, 0, 0; 3600, 0, 0, 0; 7200, 0, 0, 0; 10800, 0, 0, 0; 14400, 0, 0, 0; 18000, 0, 0, 0; 21600, 0, 0, 0; 25200, 0, 0, 0; 25200, 80, 80, 200; 28800, 80, 80, 200; 32400, 80, 80, 200; 36000, 80, 80, 200; 39600, 80, 80, 200; 43200, 80, 80, 200; 46800, 80, 80, 200; 50400, 80, 80, 200; 54000, 80, 80, 200; 57600, 80, 80, 200; 61200, 80, 80, 200; 61200, 0, 0, 0; 64800, 0, 0, 0; 72000, 0, 0, 0; 75600, 0, 0, 0; 79200, 0, 0, 0; 82800, 0, 0, 0; 86400, 0, 0, 0], columns={2,3,4}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 17.6; 3600, 17.6; 7200, 17.6; 10800, 17.5; 14400, 17.5; 18000, 17.6; 21600, 17.8; 25200, 18; 28800, 20; 32400, 19.7; 36000, 20; 39600, 20.3; 43200, 20.5; 46800, 20.6; 50400, 20.7; 54000, 20.8; 57600, 21.5; 61200, 21.4; 64800, 19.8; 68400, 19.7; 72000, 19.6; 75600, 19.6; 79200, 19.5; 82800, 19.5; 86400, 19.5; 781200, 24.7; 784800, 24.6; 788400, 24.5; 792000, 24.4; 795600, 24.4; 799200, 24.5; 802800, 24.6; 806400, 26.6; 810000, 26.2; 813600, 26.4; 817200, 26.6; 820800, 26.8; 824400, 26.9; 828000, 26.9; 831600, 26.9; 835200, 27.5; 838800, 27.4; 842400, 25.7; 846000, 25.5; 849600, 25.3; 853200, 25.3; 856800, 25.2; 860400, 25.1; 864000, 25; 5101200, 25.5; 5104800, 25.3; 5108400, 25.2; 5112000, 25.1; 5115600, 25.1; 5119200, 25.2; 5122800, 25.3; 5126400, 27.3; 5130000, 26.9; 5133600, 27.1; 5137200, 27.3; 5140800, 27.4; 5144400, 27.5; 5148000, 27.5; 5151600, 27.5; 5155200, 28.1; 5158800, 28; 5162400, 26.3; 5166000, 26.1; 5169600, 26; 5173200, 25.9; 5176800, 25.8; 5180400, 25.7; 5184000, 25.6], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perRad "Radiative heat flow persons"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perCon "Convective heat flow persons"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWindow( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, table=[0, 0; 3600, 0; 10800, 0; 14400, 0; 14400, 17; 18000, 17; 18000, 38; 21600, 38; 21600, 59; 25200, 59; 25200, 98; 28800, 98; 28800, 186; 32400, 186; 32400, 287; 36000, 287; 36000, 359; 39600, 359; 39600, 385; 43200, 385; 43200, 359; 46800, 359; 46800, 287; 50400, 287; 50400, 186; 54000, 186; 54000, 98; 57600, 98; 57600, 59; 61200, 59; 61200, 38; 64800, 38; 64800, 17; 68400, 17; 68400, 0; 72000, 0; 82800, 0; 86400, 0], columns={2}) "Solar radiation"; Modelica.Blocks.Sources.Constant g_sunblind(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold1(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product1 "Solar radiation times g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.Switch switch1 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Sources.CombiTimeTable outdoorTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 291.95; 3600, 291.95; 3600, 290.25; 7200, 290.25; 7200, 289.65; 10800, 289.65; 10800, 289.25; 14400, 289.25; 14400, 289.65; 18000, 289.65; 18000, 290.95; 21600, 290.95; 21600, 293.45; 25200, 293.45; 25200, 295.95; 28800, 295.95; 28800, 297.95; 32400, 297.95; 32400, 299.85; 36000, 299.85; 36000, 301.25; 39600, 301.25; 39600, 302.15; 43200, 302.15; 43200, 302.85; 46800, 302.85; 46800, 303.55; 50400, 303.55; 50400, 304.05; 54000, 304.05; 54000, 304.15; 57600, 304.15; 57600, 303.95; 61200, 303.95; 61200, 303.25; 64800, 303.25; 64800, 302.05; 68400, 302.05; 68400, 300.15; 72000, 300.15; 72000, 297.85; 75600, 297.85; 75600, 296.05; 79200, 296.05; 79200, 295.05; 82800, 295.05; 82800, 294.05; 86400, 294.05]) "Outdoor air temperature"; EquivalentAirTemperature.VDI6007 eqAirTemp( aExt=0.7, alphaWallOut=20, alphaRad=5, withLongwave=false, n=1, wfWall={0.04646093176283288}, wfWin={0.32441554918476245}, wfGro=0.6291235190524047, TGro=288.15) "Equivalent air temperature"; Modelica.Blocks.Sources.Constant const(k=273.15) "Dummy black body sky temperature"; Modelica.Blocks.Sources.Constant HSol(k=0) "Solar radiation on walls"; Modelica.Blocks.Sources.Constant sunblind(k=0) "Dummy for g value of sunblinds (open)"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.Constant alphaWall(k=28*9.75) "Outdoor coefficient of heat transfer for walls"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(perRad.port, thermalZoneTwoElements.intGainsRad); connect(intGai.y[1], perRad.Q_flow); connect(intGai.y[2], perCon.Q_flow); connect(intGai.y[3], macConv.Q_flow); connect(tableSolRadWindow.y[1], greaterThreshold1.u); connect(sunblind_open.y, switch1.u3); connect(g_sunblind.y, switch1.u1); connect(tableSolRadWindow.y[1], product1.u1); connect(greaterThreshold1.y, switch1.u2); connect(switch1.y, product1.u2); connect(outdoorTemp.y[1], eqAirTemp.TDryBul); connect(const.y, eqAirTemp.TBlaSky); connect(eqAirTemp.TEqAir, preTem.T); connect(HSol.y, eqAirTemp.HSol[1]); connect(sunblind.y, eqAirTemp.sunblind[1]); connect(alphaWall.y, theConWall.Gc); connect(preTem.port, theConWall.fluid); connect(theConWall.solid, thermalZoneTwoElements.extWall); connect(perCon.port, thermalZoneTwoElements.intGainsConv); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(product1.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase10;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase11 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase11

VDI 6007 Test Case 11 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase11

Information

Test Case 11 of the VDI 6007 Part 1: Calculation of heat load excited with a given radiative heat source and a setpoint profile for room version S. It is based on Test Case 7, but with a cooling ceiling for cooling purposes instead of a pure convective ideal cooler.

Boundary conditions

This test validates implementation of cooling ceiling or floor heating.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase11 "VDI 6007 Test Case 11 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, nInt=1, ratioWinConRad=0, AInt=75.5, RWin=0.00000001, alphaRad=5, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, alphaInt=3, indoorPortIntWalls=true, VAir=0, nOrientations=1, redeclare final package Medium = Modelica.Media.Air.SimpleAir, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), T_start=295.15, intWallRC(thermCapInt(each der_T(fixed=true)))) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, columns={2,3,4}, table=[0, 22, 0, 0; 3600, 22, 0, 0; 7200, 22, 0, 0; 10800, 22, 0, 0; 14400, 22, 0, 0; 18000, 22, 0, 0; 21600, 22, 0, 500; 25200, 24.9, 500, 500; 28800, 25.2, 500, 500; 32400, 25.6, 500, 500; 36000, 25.9, 500, 500; 39600, 26.2, 500, 500; 43200, 26.5, 500, 500; 46800, 26.8, 500, 464; 50400, 27, 464, 397; 54000, 27, 397, 333; 57600, 27, 333, 272; 61200, 27, 272, 215; 64800, 27, 215, -500; 68400, 25.3, -500, -500; 72000, 25.2, -500, -500; 75600, 25.1, -500, -500; 79200, 24.9, -500, -500; 82800, 24.8, -500, -500; 86400, 24.7, -500, -500; 781200, 26.2, -500, -500; 784800, 26.1, -500, -500; 788400, 26, -500, -500; 792000, 25.8, -500, -500; 795600, 25.7, -500, -500; 799200, 25.6, -500, 126; 802800, 27, 126, 76; 806400, 27, 76, 28; 810000, 27, 28, 100; 813600, 27, -121, -391; 817200, 27, -391, -500; 820800, 27, -500, -500; 824400, 27.1, -500, -500; 828000, 27.2, -500, -500; 831600, 27.3, -500, -500; 835200, 27.4, -500, -500; 838800, 27.5, -500, -500; 842400, 27.6, -500, -500; 846000, 27, -500, -500; 849600, 26.9, -500, -500; 853200, 26.7, -500, -500; 856800, 26.6, -500, -500; 860400, 26.5, -500, -500; 864000, 26.4, -500, -500; 5101200, 26.2, -500, -500; 5104800, 26.1, -500, -500; 5108400, 26, -500, -500; 5112000, 25.8, -500, -500; 5115600, 25.7, -500, -500; 5119200, 25.6, -500, 126; 5122800, 27, 126, 76; 5126400, 27, 76, 28; 5130000, 27, 28, 100; 5133600, 27, -122, -391; 5137200, 27, -391, -500; 5140800, 27, -500, -500; 5144400, 27.1, -500, -500; 5148000, 27.2, -500, -500; 5151600, 27.3, -500, -500; 5155200, 27.4, -500, -500; 5158800, 27.5, -500, -500; 5162400, 27.6, -500, -500; 5166000, 27, -500, -500; 5169600, 26.9, -500, -500; 5173200, 26.7, -500, -500; 5176800, 26.6, -500, -500; 5180400, 26.5, -500, -500; 5184000, 26.4, -500, -500]) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machinesRad "Radiative heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow heat "Ideal heater with limit"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow cool "Ideal cooler with limit"; Modelica.Blocks.Sources.CombiTimeTable setTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 21600.1, 27; 28800, 27; 32400, 27; 36000, 27; 39600, 27; 43200, 27; 46800, 27; 50400, 27; 54000, 27; 57600, 27; 61200, 27; 64800, 27; 64800.1, 22; 72000, 22; 75600, 22; 79200, 22; 82800, 22; 86400, 22]) "Set temperature for ideal heater/cooler"; Modelica.Blocks.Math.UnitConversions.From_degC from_degC "Convert set temperature from degC to Kelvin"; Modelica.Blocks.Math.Gain gainHea(k=500) "Gain for heating"; Controls.Continuous.LimPID conHeaCoo( yMin=-1, Td=5, controllerType=Modelica.Blocks.Types.SimpleController.PI, yMax=1, k=0.1, Ti=1.2) "Heating and cooling controller"; Modelica.Blocks.Math.Gain gainCoo(k=500) "Gain for cooling"; Modelica.Blocks.Logical.Switch switchCoo "Switch to limit cooling power"; Modelica.Blocks.Logical.Hysteresis hysteresis( uLow=-0.0000001, uHigh=0.0000001, y(start=true)) "Threshold for switching between heating and cooling"; Modelica.Blocks.Sources.Constant DefPow(k=0) "Default power"; Modelica.Blocks.Logical.Switch switchHea "Switch to limit heating power"; Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor heatFlowSensor "Sensor for ideal heater"; Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor coolFlowSensor "Sensor for ideal cooler"; Modelica.Blocks.Math.Add add(k1=1, k2=-1) "Addition for mean of results"; BaseClasses.VerifyDifferenceThreePeriods assEqu( endTime=86400, endTime2=864000, endTime3=5184000, threShold=1.5, startTime=3600, startTime2=781200, startTime3=5101200) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; Modelica.Blocks.Logical.Switch switchMea "Switch to guess values"; Modelica.Blocks.Logical.Not not1 "Logical not"; Modelica.Blocks.Logical.Timer timer "Timer since the control mode changed"; Modelica.Blocks.Logical.LessEqualThreshold thr(threshold=60) "Threshold to measure 60 seconds"; Modelica.Blocks.Logical.Change cha "Outputs true if the input changes"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], machinesRad.Q_flow); connect(machinesRad.port, thermalZoneTwoElements.intGainsRad); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(setTemp.y[1], from_degC.u); connect(gainHea.y, heat.Q_flow); connect(gainCoo.y, cool.Q_flow); connect(switchHea.y, gainHea.u); connect(DefPow.y, switchHea.u3); connect(from_degC.y, conHeaCoo.u_s); connect(switchCoo.y, gainCoo.u); connect(hysteresis.y, switchCoo.u2); connect(DefPow.y, switchCoo.u1); connect(hysteresis.y, switchHea.u2); connect(conHeaCoo.y, switchHea.u1); connect(thermalZoneTwoElements.TAir, conHeaCoo.u_m); connect(heat.port, heatFlowSensor.port_b); connect(heatFlowSensor.port_a, thermalZoneTwoElements.intGainsConv); connect(cool.port, coolFlowSensor.port_a); connect(coolFlowSensor.port_b, thermalZoneTwoElements.intWallIndoorSurface); connect(coolFlowSensor.Q_flow, add.u1); connect(heatFlowSensor.Q_flow, add.u2); connect(hysteresis.u, switchHea.u1); connect(conHeaCoo.y, switchCoo.u3); connect(add.y, switchMea.u3); connect(reference.y[3], switchMea.u1); connect(timer.y, thr.u); connect(cha.y, not1.u); connect(not1.y, timer.u); connect(thr.y, switchMea.u2); connect(cha.u, hysteresis.y); connect(switchMea.y, mean.u); connect(reference.y[2], assEqu.u2); connect(mean.y, assEqu.u1); end TestCase11;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase12 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase12

VDI 6007 Test Case 12 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase12

Information

Test Case 12 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative and convective heat source for room version S. It is based of Test Case 5 and adds ventilation.

Boundary conditions

This test validates infiltration and ventilation.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase12 "VDI 6007 Test Case 12 model" extends Modelica.Icons.Example; package Medium = Modelica.Media.Air.SimpleAir "Medium model"; RC.TwoElements thermalZoneTwoElements( alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, AInt=75.5, alphaInt=2.24, RWin=0.00000001, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, ratioWinConRad=0.09, nPorts=2, nOrientations=1, VAir=0.1, redeclare final package Medium = Modelica.Media.Air.SimpleAir, AWin={0}, ATransparent={7}, AExt={10.5}, extWallRC(thermCapExt(each T(fixed=true))), intWallRC(thermCapInt(each T(fixed=true))), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=295.15) "Thermal zone"; Buildings.HeatTransfer.Sources.PrescribedTemperature preTem(port(T(start=300))) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0, 0, 0; 3600, 0, 0, 0; 7200, 0, 0, 0; 10800, 0, 0, 0; 14400, 0, 0, 0; 18000, 0, 0, 0; 21600, 0, 0, 0; 25200, 0, 0, 0; 25200, 80, 80, 200; 28800, 80, 80, 200; 32400, 80, 80, 200; 36000, 80, 80, 200; 39600, 80, 80, 200; 43200, 80, 80, 200; 46800, 80, 80, 200; 50400, 80, 80, 200; 54000, 80, 80, 200; 57600, 80, 80, 200; 61200, 80, 80, 200; 61200, 0, 0, 0; 64800, 0, 0, 0; 72000, 0, 0, 0; 75600, 0, 0, 0; 79200, 0, 0, 0; 82800, 0, 0, 0; 86400, 0, 0, 0], columns={2,3,4}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 21.5; 3600, 21.5; 7200, 21.2; 10800, 21; 14400, 20.9; 18000, 21; 21600, 21.3; 25200, 21.9; 28800, 24.1; 32400, 24; 36000, 24.4; 39600, 24.8; 43200, 25.1; 46800, 25.3; 50400, 25.5; 54000, 25.6; 57600, 26.3; 61200, 26.3; 64800, 25.2; 68400, 25; 72000, 24.6; 75600, 24.2; 79200, 24; 82800, 23.8; 86400, 23.6; 781200, 29.1; 784800, 28.7; 788400, 28.4; 792000, 28.2; 795600, 28.3; 799200, 28.5; 802800, 29; 806400, 31.8; 810000, 31.6; 813600, 32; 817200, 32.3; 820800, 32.5; 824400, 32.7; 828000, 32.9; 831600, 32.9; 835200, 33.5; 838800, 33.5; 842400, 31.7; 846000, 31.5; 849600, 31; 853200, 30.6; 856800, 30.3; 860400, 30; 864000, 29.8; 5101200, 30.5; 5104800, 30; 5108400, 29.8; 5112000, 29.6; 5115600, 29.6; 5119200, 29.9; 5122800, 30.3; 5126400, 33.2; 5130000, 33; 5133600, 33.4; 5137200, 33.7; 5140800, 33.9; 5144400, 34.1; 5148000, 34.2; 5151600, 34.3; 5155200, 34.9; 5158800, 34.8; 5162400, 33; 5166000, 32.7; 5169600, 32.2; 5173200, 31.8; 5176800, 31.4; 5180400, 31.2; 5184000, 30.9], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.CombiTimeTable outdoorTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 291.95; 3600, 291.95; 3600, 290.25; 7200, 290.25; 7200, 289.65; 10800, 289.65; 10800, 289.25; 14400, 289.25; 14400, 289.65; 18000, 289.65; 18000, 290.95; 21600, 290.95; 21600, 293.45; 25200, 293.45; 25200, 295.95; 28800, 295.95; 28800, 297.95; 32400, 297.95; 32400, 299.85; 36000, 299.85; 36000, 301.25; 39600, 301.25; 39600, 302.15; 43200, 302.15; 43200, 302.85; 46800, 302.85; 46800, 303.55; 50400, 303.55; 50400, 304.05; 54000, 304.05; 54000, 304.15; 57600, 304.15; 57600, 303.95; 61200, 303.95; 61200, 303.25; 64800, 303.25; 64800, 302.05; 68400, 302.05; 68400, 300.15; 72000, 300.15; 72000, 297.85; 75600, 297.85; 75600, 296.05; 79200, 296.05; 79200, 295.05; 82800, 295.05; 82800, 294.05; 86400, 294.05]) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perRad "Radiative heat flow persons"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perCon "Convective heat flow persons"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWindow( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, table=[0, 0; 3600, 0; 10800, 0; 14400, 0; 14400, 17; 18000, 17; 18000, 38; 21600, 38; 21600, 59; 25200, 59; 25200, 98; 28800, 98; 28800, 186; 32400, 186; 32400, 287; 36000, 287; 36000, 359; 39600, 359; 39600, 385; 43200, 385; 43200, 359; 46800, 359; 46800, 287; 50400, 287; 50400, 186; 54000, 186; 54000, 98; 57600, 98; 57600, 59; 61200, 59; 61200, 38; 64800, 38; 64800, 17; 68400, 17; 68400, 0; 72000, 0; 82800, 0; 86400, 0], columns={2}) "Solar radiation"; Modelica.Blocks.Sources.Constant g_sunblind(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold1(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product1 "Solar radiation times g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.Switch switch1 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Sources.CombiTimeTable ventRate( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 100; 3600, 100; 7200, 100; 10800, 100; 14400, 100; 18000, 100; 21600, 100; 25200, 100; 25200, 50; 28800, 50; 32400, 50; 36000, 50; 39600, 50; 43200, 50; 46800, 50; 50400, 50; 54000, 50; 57600, 50; 61200, 50; 61200, 100; 64800, 100; 72000, 100; 75600, 100; 79200, 100; 82800, 100; 86400, 100]) "Ventilation rate"; Modelica.Blocks.Math.Gain gain(k=0.000330375898) "Conversion to kg/s"; Fluid.Sources.MassFlowSource_T ventilationIn( use_m_flow_in=true, use_T_in=true, nPorts=1, redeclare package Medium = Medium) "Fan"; Fluid.Sources.MassFlowSource_T ventilationOut( redeclare package Medium = Medium, use_m_flow_in=true, nPorts=1, use_T_in=false) "Fan"; Modelica.Blocks.Math.Gain gain1(k=-1) "Reverses ventilation rate"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(outdoorTemp.y[1], preTem.T); connect(perRad.port, thermalZoneTwoElements.intGainsRad); connect(intGai.y[1], perRad.Q_flow); connect(intGai.y[2], perCon.Q_flow); connect(intGai.y[3], macConv.Q_flow); connect(tableSolRadWindow.y[1], greaterThreshold1.u); connect(sunblind_open.y, switch1.u3); connect(g_sunblind.y, switch1.u1); connect(tableSolRadWindow.y[1], product1.u1); connect(greaterThreshold1.y, switch1.u2); connect(switch1.y, product1.u2); connect(ventRate.y[1], gain.u); connect(ventilationIn.ports[1], thermalZoneTwoElements.ports[1]); connect(gain.y, ventilationIn.m_flow_in); connect(outdoorTemp.y[1], ventilationIn.T_in); connect(gain.y, gain1.u); connect(gain1.y, ventilationOut.m_flow_in); connect(ventilationOut.ports[1], thermalZoneTwoElements.ports[2]); connect(perCon.port, thermalZoneTwoElements.intGainsConv); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(product1.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase12;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase2 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase2

VDI 6007 Test Case 2 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase2

Information

Test Case 2 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative heat source for room version S.

Boundary conditions

This test validates basic functionalities.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase2 "VDI 6007 Test Case 2 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, alphaRad=5, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, VAir=0, nOrientations=1, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), T_start=295.15, intWallRC(thermCapInt(each der_T(fixed=true)))) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, offset={273.15}, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 25200, 22.6; 28800, 22.9; 32400, 23.1; 36000, 23.3; 39600, 23.5; 43200, 23.7; 46800, 23.9; 50400, 24.1; 54000, 24.3; 57600, 24.6; 61200, 24.8; 64800, 25; 68400, 24.5; 72000, 24.5; 75600, 24.5; 79200, 24.5; 82800, 24.5; 86400, 24.5; 781200, 37.7; 784800, 37.7; 788400, 37.6; 792000, 37.5; 795600, 37.5; 799200, 37.4; 802800, 38; 806400, 38.2; 810000, 38.3; 813600, 38.5; 817200, 38.6; 820800, 38.8; 824400, 38.9; 828000, 39.1; 831600, 39.2; 835200, 39.4; 838800, 39.5; 842400, 39.7; 846000, 39.2; 849600, 39.1; 853200, 39.1; 856800, 39; 860400, 38.9; 864000, 38.9; 5101200, 50; 5104800, 49.9; 5108400, 49.8; 5112000, 49.7; 5115600, 49.6; 5119200, 49.5; 5122800, 50; 5126400, 50.1; 5130000, 50.2; 5133600, 50.3; 5137200, 50.5; 5140800, 50.6; 5144400, 50.7; 5148000, 50.8; 5151600, 50.9; 5155200, 51; 5158800, 51.1; 5162400, 51.2; 5166000, 50.7; 5169600, 50.6; 5173200, 50.4; 5176800, 50.3; 5180400, 50.2; 5184000, 50.1]) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machinesRad "Radiative heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], machinesRad.Q_flow); connect(machinesRad.port, thermalZoneTwoElements.intGainsRad); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase2;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase3 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase3

VDI 6007 Test Case 3 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase3

Information

Test Case 3 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a convective heat source for room version L.

Boundary conditions

This test validates basic functionalities.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase3 "VDI 6007 Test Case 3 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, RExt={0.00404935160802}, VAir=0, nOrientations=1, CExt={47900}, RInt={0.003237138}, CInt={7297100}, RExtRem=0.039330865, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), T_start=295.15, intWallRC(thermCapInt(each der_T(fixed=true)))) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 25200, 30.2; 28800, 30.8; 32400, 31.2; 36000, 31.6; 39600, 32; 43200, 32.4; 46800, 32.8; 50400, 33.2; 54000, 33.6; 57600, 34; 61200, 34.3; 64800, 34.7; 68400, 26.9; 72000, 26.7; 75600, 26.7; 79200, 26.6; 82800, 26.6; 86400, 26.6; 781200, 43.7; 784800, 43.5; 788400, 43.4; 792000, 43.2; 795600, 43; 799200, 42.9; 802800, 50.9; 806400, 51.3; 810000, 51.6; 813600, 51.8; 817200, 52.1; 820800, 52.3; 824400, 52.5; 828000, 52.8; 831600, 53; 835200, 53.3; 838800, 53.5; 842400, 53.7; 846000, 45.8; 849600, 45.4; 853200, 45.3; 856800, 45.1; 860400, 44.9; 864000, 44.7; 5101200, 48.7; 5104800, 48.5; 5108400, 48.3; 5112000, 48.1; 5115600, 47.9; 5119200, 47.7; 5122800, 55.7; 5126400, 56; 5130000, 56.3; 5133600, 56.5; 5137200, 56.7; 5140800, 56.9; 5144400, 57.1; 5148000, 57.3; 5151600, 57.5; 5155200, 57.7; 5158800, 57.9; 5162400, 58.1; 5166000, 50.1; 5169600, 49.8; 5173200, 49.5; 5176800, 49.3; 5180400, 49.1; 5184000, 48.9], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], macConv.Q_flow); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase3;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase4 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase4

VDI 6007 Test Case 4 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase4

Information

Test Case 4 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative heat source for room version L.

Boundary conditions

This test validates basic functionalities.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase4 "VDI 6007 Test Case 4 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, alphaRad=5, RExt={0.00404935160802}, VAir=0, nOrientations=1, CExt={47900}, RInt={0.003237138}, CInt={7297100}, RExtRem=0.039330865, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), T_start=295.15, intWallRC(thermCapInt(each der_T(fixed=true)))) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 25200, 25.1; 28800, 25.7; 32400, 26.1; 36000, 26.5; 39600, 26.9; 43200, 27.3; 46800, 27.7; 50400, 28.1; 54000, 28.5; 57600, 28.9; 61200, 29.3; 64800, 29.7; 68400, 26.9; 72000, 26.7; 75600, 26.7; 79200, 26.7; 82800, 26.6; 86400, 26.6; 781200, 43.8; 784800, 43.6; 788400, 43.5; 792000, 43.3; 795600, 43.1; 799200, 43; 802800, 45.9; 806400, 46.3; 810000, 46.6; 813600, 46.8; 817200, 47.1; 820800, 47.3; 824400, 47.6; 828000, 47.8; 831600, 48.1; 835200, 48.3; 838800, 48.5; 842400, 48.8; 846000, 45.9; 849600, 45.6; 853200, 45.4; 856800, 45.2; 860400, 45; 864000, 44.8; 5101200, 48.8; 5104800, 48.6; 5108400, 48.4; 5112000, 48.2; 5115600, 48; 5119200, 47.8; 5122800, 50.7; 5126400, 51.1; 5130000, 51.3; 5133600, 51.5; 5137200, 51.7; 5140800, 51.9; 5144400, 52.1; 5148000, 52.4; 5151600, 52.6; 5155200, 52.8; 5158800, 53; 5162400, 53.2; 5166000, 50.2; 5169600, 49.9; 5173200, 49.7; 5176800, 49.5; 5180400, 49.2; 5184000, 49], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machinesRad "Radiative heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], machinesRad.Q_flow); connect(machinesRad.port, thermalZoneTwoElements.intGainsRad); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase4;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase5 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase5

VDI 6007 Test Case 5 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase5

Information

Test Case 5 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative and convective heat source for room version S.

Boundary conditions

This test validates reaction of indoor air temperature at mixed internal gains and outdoor impacts.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase5 "VDI 6007 Test Case 5 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, AInt=75.5, alphaInt=2.24, RWin=0.00000001, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, ratioWinConRad=0.09, VAir=0, nOrientations=1, AWin={0}, ATransparent={7}, AExt={10.5}, extWallRC(thermCapExt(each T(fixed=true))), T_start=295.15, intWallRC(thermCapInt(each T(fixed=true)))) "Thermal zone"; Buildings.HeatTransfer.Sources.PrescribedTemperature preTem "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0, 0, 0; 3600, 0, 0, 0; 7200, 0, 0, 0; 10800, 0, 0, 0; 14400, 0, 0, 0; 18000, 0, 0, 0; 21600, 0, 0, 0; 25200, 0, 0, 0; 25200, 80, 80, 200; 28800, 80, 80, 200; 32400, 80, 80, 200; 36000, 80, 80, 200; 39600, 80, 80, 200; 43200, 80, 80, 200; 46800, 80, 80, 200; 50400, 80, 80, 200; 54000, 80, 80, 200; 57600, 80, 80, 200; 61200, 80, 80, 200; 61200, 0, 0, 0; 64800, 0, 0, 0; 72000, 0, 0, 0; 75600, 0, 0, 0; 79200, 0, 0, 0; 82800, 0, 0, 0; 86400, 0, 0, 0], columns={2,3,4}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 21.9; 14400, 21.9; 18000, 22; 21600, 22.2; 25200, 22.4; 28800, 24.4; 32400, 24.1; 36000, 24.4; 39600, 24.7; 43200, 24.9; 46800, 25.1; 50400, 25.2; 54000, 25.3; 57600, 26; 61200, 25.9; 64800, 24.3; 68400, 24.2; 72000, 24.1; 75600, 24.1; 79200, 24.1; 82800, 24.1; 86400, 24.1; 781200, 34.9; 784800, 34.8; 788400, 34.7; 792000, 34.6; 795600, 34.7; 799200, 34.8; 802800, 34.9; 806400, 36.9; 810000, 36.6; 813600, 36.8; 817200, 37; 820800, 37.2; 824400, 37.3; 828000, 37.4; 831600, 37.4; 835200, 38.1; 838800, 38; 842400, 36.4; 846000, 36.2; 849600, 36.1; 853200, 36.1; 856800, 36; 860400, 35.9; 864000, 35.9; 5101200, 44.9; 5104800, 44.8; 5108400, 44.7; 5112000, 44.6; 5115600, 44.6; 5119200, 44.6; 5122800, 44.8; 5126400, 46.7; 5130000, 46.3; 5133600, 46.5; 5137200, 46.7; 5140800, 46.8; 5144400, 46.9; 5148000, 47; 5151600, 47; 5155200, 47.6; 5158800, 47.5; 5162400, 45.8; 5166000, 45.6; 5169600, 45.4; 5173200, 45.4; 5176800, 45.3; 5180400, 45.2; 5184000, 45.1], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.CombiTimeTable outdoorTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 291.95; 3600, 291.95; 3600, 290.25; 7200, 290.25; 7200, 289.65; 10800, 289.65; 10800, 289.25; 14400, 289.25; 14400, 289.65; 18000, 289.65; 18000, 290.95; 21600, 290.95; 21600, 293.45; 25200, 293.45; 25200, 295.95; 28800, 295.95; 28800, 297.95; 32400, 297.95; 32400, 299.85; 36000, 299.85; 36000, 301.25; 39600, 301.25; 39600, 302.15; 43200, 302.15; 43200, 302.85; 46800, 302.85; 46800, 303.55; 50400, 303.55; 50400, 304.05; 54000, 304.05; 54000, 304.15; 57600, 304.15; 57600, 303.95; 61200, 303.95; 61200, 303.25; 64800, 303.25; 64800, 302.05; 68400, 302.05; 68400, 300.15; 72000, 300.15; 72000, 297.85; 75600, 297.85; 75600, 296.05; 79200, 296.05; 79200, 295.05; 82800, 295.05; 82800, 294.05; 86400, 294.05]) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perRad "Radiative heat flow persons"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perCon "Convective heat flow persons"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWindow( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, table=[0, 0; 3600, 0; 10800, 0; 14400, 0; 14400, 17; 18000, 17; 18000, 38; 21600, 38; 21600, 59; 25200, 59; 25200, 98; 28800, 98; 28800, 186; 32400, 186; 32400, 287; 36000, 287; 36000, 359; 39600, 359; 39600, 385; 43200, 385; 43200, 359; 46800, 359; 46800, 287; 50400, 287; 50400, 186; 54000, 186; 54000, 98; 57600, 98; 57600, 59; 61200, 59; 61200, 38; 64800, 38; 64800, 17; 68400, 17; 68400, 0; 72000, 0; 82800, 0; 86400, 0], columns={2}) "Solar radiation"; Modelica.Blocks.Sources.Constant g_sunblind(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold1(threshold=100) "Threshold for sunblind"; Modelica.Blocks.Math.Product product1 "solar radiation times g value for sunblind (open or closed)"; Modelica.Blocks.Logical.Switch switch1 "Determines g value for sunblind (open or closed)"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(outdoorTemp.y[1], preTem.T); connect(perRad.port, thermalZoneTwoElements.intGainsRad); connect(intGai.y[1], perRad.Q_flow); connect(intGai.y[2], perCon.Q_flow); connect(intGai.y[3], macConv.Q_flow); connect(tableSolRadWindow.y[1], greaterThreshold1.u); connect(sunblind_open.y, switch1.u3); connect(g_sunblind.y, switch1.u1); connect(tableSolRadWindow.y[1], product1.u1); connect(greaterThreshold1.y, switch1.u2); connect(switch1.y, product1.u2); connect(perCon.port, thermalZoneTwoElements.intGainsConv); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(product1.y, thermalZoneTwoElements.solRad[1]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase5;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase6 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase6

VDI 6007 Test Case 6 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase6

Information

Test Case 6 of the VDI 6007 Part 1: Calculation of heat load excited with a given radiative heat source and a setpoint profile for room version S. Is based on Test Case 2.

Boundary conditions

This test validates heat load calculation without maximum heating power.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase6 "VDI 6007 Test Case 6 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, alphaRad=5, VAir=0, nOrientations=1, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), intWallRC(thermCapInt(each der_T(fixed=true))), RExt={0.004367913}, CExt={1600800}, RInt={0.000595515}, CInt={14836200}, RExtRem=0.038959197, T_start=295.15) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 25200, -764; 28800, -696; 32400, -632; 36000, -570; 39600, -511; 43200, -455; 46800, -402; 50400, -351; 54000, -302; 57600, -255; 61200, -210; 64800, -167; 68400, 638; 72000, 610; 75600, 583; 79200, 557; 82800, 533; 86400, 511; 781200, 774; 784800, 742; 788400, 711; 792000, 682; 795600, 654; 799200, 627; 802800, -163; 806400, -120; 810000, -79; 813600, -40; 817200, -2; 820800, 33; 824400, 67; 828000, 99; 831600, 130; 835200, 159; 838800, 187; 842400, 214; 846000, 1004; 849600, 960; 853200, 919; 856800, 880; 860400, 843; 864000, 808; 5101200, 774; 5104800, 742; 5108400, 711; 5112000, 682; 5115600, 654; 5119200, 627; 5122800, -163; 5126400, -120; 5130000, -78; 5133600, -39; 5137200, -2; 5140800, 33; 5144400, 67; 5148000, 99; 5151600, 130; 5155200, 159; 5158800, 187; 5162400, 214; 5166000, 1004; 5169600, 960; 5173200, 919; 5176800, 880; 5180400, 843; 5184000, 808]) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machinesRad "Radiative heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor heatFlowSensor "Sensor for ideal heater/cooler"; Buildings.HeatTransfer.Sources.PrescribedTemperature preTem1 "Prescribed temperature for ideal heater/cooler"; Modelica.Blocks.Sources.CombiTimeTable setTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 21600.1, 27; 28800, 27; 32400, 27; 36000, 27; 39600, 27; 43200, 27; 46800, 27; 50400, 27; 54000, 27; 57600, 27; 61200, 27; 64800, 27; 64800.1, 22; 72000, 22; 75600, 22; 79200, 22; 82800, 22; 86400, 22]) "Set temperature for ideal heater/cooler"; Modelica.Blocks.Math.UnitConversions.From_degC from_degC "Convert set temperature from degC to Kelvin"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=1.5) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], machinesRad.Q_flow); connect(machinesRad.port, thermalZoneTwoElements.intGainsRad); connect(preTem1.port, heatFlowSensor.port_b); connect(heatFlowSensor.port_a, thermalZoneTwoElements.intGainsConv); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(preTem.port, theConWall.fluid); connect(from_degC.y, preTem1.T); connect(setTemp.y[1], from_degC.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); connect(heatFlowSensor.Q_flow, mean.u); end TestCase6;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase7 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase7

VDI 6007 Test Case 7 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase7

Information

Test Case 7 of the VDI 6007 Part 1: Calculation of heat load excited with a given radiative heat source and a setpoint profile for room version S. Is similar with Test Case 6, but with a maximum heating/cooling power.

Boundary conditions

This test validates heat load calculation with maximum heating power.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase7 "VDI 6007 Test Case 7 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, nInt=1, ratioWinConRad=0, AInt=75.5, alphaInt=2.24, RWin=0.00000001, alphaRad=5, RExt={0.00436791293674}, RExtRem=0.03895919557, CExt={1600848.94}, RInt={0.000595693407511}, CInt={14836354.6282}, VAir=0, nOrientations=1, AWin={0}, ATransparent={0}, AExt={10.5}, extWallRC(thermCapExt(each der_T(fixed=true))), intWallRC(thermCapInt(each der_T(fixed=true))), T_start=295.15) "Thermal zone"; Buildings.HeatTransfer.Sources.FixedTemperature preTem(T=295.15) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 21600, 1000; 25200, 1000; 28800, 1000; 32400, 1000; 36000, 1000; 39600, 1000; 43200, 1000; 46800, 1000; 50400, 1000; 54000, 1000; 57600, 1000; 61200, 1000; 64800, 1000; 64800, 0; 68400, 0; 72000, 0; 75600, 0; 79200, 0; 82800, 0; 86400, 0], columns={2}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 0; 3600, 0; 7200, 0; 10800, 0; 14400, 0; 18000, 0; 21600, 0; 25200, 500; 28800, 500; 32400, 500; 36000, 500; 39600, 500; 43200, 481; 46800, 426; 50400, 374; 54000, 324; 57600, 276; 61200, 230; 64800, 186; 68400, -500; 72000, -500; 75600, -500; 79200, -500; 82800, -500; 86400, -500; 781200, -500; 784800, -500; 788400, -500; 792000, -500; 795600, -500; 799200, -500; 802800, -142; 806400, -172; 810000, -201; 813600, -228; 817200, -254; 820800, -278; 824400, -302; 828000, -324; 831600, -345; 835200, -366; 838800, -385; 842400, -404; 846000, -500; 849600, -500; 853200, -500; 856800, -500; 860400, -500; 864000, -500; 5101200, -500; 5104800, -500; 5108400, -500; 5112000, -500; 5115600, -500; 5119200, -500; 5122800, -149; 5126400, -179; 5130000, -207; 5133600, -234; 5137200, -259; 5140800, -284; 5144400, -307; 5148000, -329; 5151600, -350; 5155200, -371; 5158800, -390; 5162400, -408; 5166000, -500; 5169600, -500; 5173200, -500; 5176800, -500; 5180400, -500; 5184000, -500]) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow machinesRad "Radiative heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*10.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.Constant const(k=0) "Solar radiation"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow heaCoo "Ideal heater/cooler with limit"; Modelica.Blocks.Sources.CombiTimeTable setTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments, table=[0, 22; 3600, 22; 7200, 22; 10800, 22; 14400, 22; 18000, 22; 21600, 22; 21600.1, 27; 28800, 27; 32400, 27; 36000, 27; 39600, 27; 43200, 27; 46800, 27; 50400, 27; 54000, 27; 57600, 27; 61200, 27; 64800, 27; 64800.1, 22; 72000, 22; 75600, 22; 79200, 22; 82800, 22; 86400, 22]) "Set temperature for ideal heater/cooler"; Modelica.Blocks.Math.UnitConversions.From_degC from_degC "Convert set temperature from degC to Kelvin"; Controls.Continuous.LimPID conHeaCoo( controllerType=Modelica.Blocks.Types.SimpleController.PI, yMax=1, yMin=-1, k=0.1, Ti=4) "Heating and cooling controller"; Modelica.Blocks.Math.Gain gainHeaCoo(k=500) "Gain for heating and cooling controller"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=1.5) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor heatFlowSensor "Sensor for ideal heater/cooler"; Modelica.Blocks.Math.Gain gainMea(k=-1) "Gain for mean block"; equation connect(theConWall.fluid, preTem.port); connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(intGai.y[1], machinesRad.Q_flow); connect(machinesRad.port, thermalZoneTwoElements.intGainsRad); connect(const.y, thermalZoneTwoElements.solRad[1]); connect(from_degC.y, conHeaCoo.u_s); connect(thermalZoneTwoElements.TAir, conHeaCoo.u_m); connect(conHeaCoo.y, gainHeaCoo.u); connect(gainHeaCoo.y, heaCoo.Q_flow); connect(setTemp.y[1], from_degC.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); connect(heaCoo.port, heatFlowSensor.port_b); connect(heatFlowSensor.port_a, thermalZoneTwoElements.intGainsConv); connect(mean.u, gainMea.y); connect(gainMea.u, heatFlowSensor.Q_flow); end TestCase7;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase8 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase8

VDI 6007 Test Case 8 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase8

Information

Test Case 8 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative and convective heat source for room version S with two exterior walls. It is based on Test Case 5.

Boundary conditions

This test validates reaction of indoor air temperature at mixed internal gains and outdoor impacts including solar radiation on exterior walls.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase8 "VDI 6007 Test Case 8 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, RWin=0.00000001, ratioWinConRad=0.09, RExt={0.0017362530106}, CExt={5259932.23}, AInt=60.5, alphaInt=2.12, RInt={0.000668895639141}, CInt={12391363.8631}, RExtRem=0.01913729904, VAir=0, nOrientations=2, AWin={0,0}, ATransparent={7,7}, AExt={10.5,15}, T_start=295.15, extWallRC(thermCapExt(each T(fixed=true))), intWallRC(thermCapInt(each T(fixed=true)))) "Thermal zone"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0, 0, 0; 3600, 0, 0, 0; 7200, 0, 0, 0; 10800, 0, 0, 0; 14400, 0, 0, 0; 18000, 0, 0, 0; 21600, 0, 0, 0; 25200, 0, 0, 0; 25200, 80, 80, 200; 28800, 80, 80, 200; 32400, 80, 80, 200; 36000, 80, 80, 200; 39600, 80, 80, 200; 43200, 80, 80, 200; 46800, 80, 80, 200; 50400, 80, 80, 200; 54000, 80, 80, 200; 57600, 80, 80, 200; 61200, 80, 80, 200; 61200, 0, 0, 0; 64800, 0, 0, 0; 72000, 0, 0, 0; 75600, 0, 0, 0; 79200, 0, 0, 0; 82800, 0, 0, 0; 86400, 0, 0, 0], columns={2,3,4}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 22; 3600, 22; 7200, 21.9; 10800, 21.9; 14400, 21.8; 18000, 22; 21600, 22.3; 25200, 22.7; 28800, 24.8; 32400, 24.7; 36000, 25.2; 39600, 25.6; 43200, 26.1; 46800, 25.9; 50400, 26.3; 54000, 26.6; 57600, 27.5; 61200, 27.6; 64800, 26; 68400, 25.8; 72000, 25.6; 75600, 25.6; 79200, 25.5; 82800, 25.5; 86400, 25.5; 781200, 37.6; 784800, 37.5; 788400, 37.3; 792000, 37.1; 795600, 37.1; 799200, 37.3; 802800, 37.5; 806400, 39.6; 810000, 39.4; 813600, 39.7; 817200, 40; 820800, 40.3; 824400, 40; 828000, 40.3; 831600, 40.5; 835200, 41.3; 838800, 41.3; 842400, 39.6; 846000, 39.2; 849600, 38.9; 853200, 38.8; 856800, 38.7; 860400, 38.5; 864000, 38.4; 5101200, 40.9; 5104800, 40.7; 5108400, 40.5; 5112000, 40.2; 5115600, 40.3; 5119200, 40.4; 5122800, 40.6; 5126400, 42.6; 5130000, 42.4; 5133600, 42.7; 5137200, 43; 5140800, 43.3; 5144400, 43; 5148000, 43.2; 5151600, 43.4; 5155200, 44.2; 5158800, 44.1; 5162400, 42.4; 5166000, 42; 5169600, 41.7; 5173200, 41.6; 5176800, 41.4; 5180400, 41.2; 5184000, 41.1], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*25.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.CombiTimeTable outdoorTemp1( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 291.95; 3600, 291.95; 3600, 290.25; 7200, 290.25; 7200, 289.65; 10800, 289.65; 10800, 289.25; 14400, 289.25; 14400, 289.65; 18000, 289.65; 18000, 290.95; 21600, 290.95; 21600, 293.45; 25200, 293.45; 25200, 295.95; 28800, 295.95; 28800, 297.95; 32400, 297.95; 32400, 299.85; 36000, 299.85; 36000, 301.25; 39600, 301.25; 39600, 302.15; 43200, 302.15; 43200, 302.85; 46800, 302.85; 46800, 303.55; 50400, 303.55; 50400, 304.05; 54000, 304.05; 54000, 304.15; 57600, 304.15; 57600, 303.95; 61200, 303.95; 61200, 303.25; 64800, 303.25; 64800, 302.05; 68400, 302.05; 68400, 300.15; 72000, 300.15; 72000, 297.85; 75600, 297.85; 75600, 296.05; 79200, 296.05; 79200, 295.05; 82800, 295.05; 82800, 294.05; 86400, 294.05]) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perRad "Radiative heat flow persons"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perCon "Convective heat flow persons"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWindow( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, table=[0, 0, 0; 3600, 0, 0; 10800, 0, 0; 14400, 0, 0; 14400, 17, 17; 18000, 17, 17; 18000, 38, 36; 21600, 38, 36; 21600, 59, 51; 25200, 59, 51; 25200, 98, 64; 28800, 98, 64; 28800, 186, 74; 32400, 186, 74; 32400, 287, 84; 36000, 287, 84; 36000, 359, 92; 39600, 359, 92; 39600, 385, 100; 43200, 385, 100; 43200, 359, 180; 46800, 359, 180; 46800, 287, 344; 50400, 287, 344; 50400, 186, 475; 54000, 186, 475; 54000, 98, 528; 57600, 98, 528; 57600, 59, 492; 61200, 59, 492; 61200, 38, 359; 64800, 38, 359; 64800, 17, 147; 68400, 17, 147; 68400, 0, 0; 72000, 0, 0; 82800, 0, 0; 86400, 0, 0], columns={2,3}) "Solar radiation"; Modelica.Blocks.Sources.Constant g_sunblind(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold1(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product1 "Solar radiation times g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.Switch switch1 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold2(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product "Solar radiation times g value for sunblind (open or closed) for one direction"; EquivalentAirTemperature.VDI6007 eqAirTemp( n=2, wfGro=0, aExt=0.7, alphaWallOut=20, alphaRad=5, withLongwave=false, wfWall={0.05796831135677373,0.13249899738691134}, wfWin={0.4047663456281575,0.4047663456281575}, TGro=285.15) "Equivalent air temperature"; Modelica.Blocks.Sources.Constant const(k=273.15) "Dummy black body sky temperature"; Modelica.Blocks.Math.Add add(k1=-1) "Computes 1 - g_sunblind for one direction"; Modelica.Blocks.Sources.Constant const1(k=1) "Constant for 1 - g_sunblind"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWall( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, columns={2,3}, table=[0, 0, 0; 3600, 0, 0; 10800, 0, 0; 14400, 0, 0; 14400, 24, 23; 18000, 24, 23; 18000, 58, 53; 21600, 58, 53; 21600, 91, 77; 25200, 91, 77; 25200, 203, 97; 28800, 203, 97; 28800, 348, 114; 32400, 348, 114; 32400, 472, 131; 36000, 472, 131; 36000, 553, 144; 39600, 553, 144; 39600, 581, 159; 43200, 581, 159; 43200, 553, 372; 46800, 553, 372; 46800, 472, 557; 50400, 472, 557; 50400, 348, 685; 54000, 348, 685; 54000, 203, 733; 57600, 203, 733; 57600, 91, 666; 61200, 91, 666; 61200, 58, 474; 64800, 58, 474; 64800, 24, 177; 68400, 24, 177; 68400, 0, 0; 72000, 0, 0; 82800, 0, 0; 86400, 0, 0]) "Solar radiation on walls"; Modelica.Blocks.Sources.Constant g_sunblind1(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open1(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.Switch switch2 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Math.Add add1(k1=-1) "Computes 1 - g_sunblind for one direction"; Modelica.Blocks.Sources.Constant const2(k=1) "Constant for 1 - g_sunblind"; Buildings.HeatTransfer.Sources.PrescribedTemperature preTem "Outdoor air temperature"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(perRad.port, thermalZoneTwoElements.intGainsRad); connect(intGai.y[1], perRad.Q_flow); connect(intGai.y[2], perCon.Q_flow); connect(intGai.y[3], macConv.Q_flow); connect(tableSolRadWindow.y[1], greaterThreshold1.u); connect(sunblind_open.y, switch1.u3); connect(g_sunblind.y, switch1.u1); connect(tableSolRadWindow.y[1], product1.u1); connect(tableSolRadWindow.y[2], greaterThreshold2.u); connect(tableSolRadWindow.y[2], product.u1); connect(outdoorTemp1.y[1], eqAirTemp.TDryBul); connect(const.y, eqAirTemp.TBlaSky); connect(const1.y, add.u2); connect(tableSolRadWall.y, eqAirTemp.HSol); connect(switch1.y, add.u1); connect(greaterThreshold1.y, switch1.u2); connect(sunblind_open1.y, switch2.u3); connect(g_sunblind1.y, switch2.u1); connect(const2.y, add1.u2); connect(switch2.y, add1.u1); connect(greaterThreshold2.y, switch2.u2); connect(switch2.y, product.u2); connect(switch1.y, product1.u2); connect(eqAirTemp.TEqAir, preTem.T); connect(preTem.port, theConWall.fluid); connect(add.y, eqAirTemp.sunblind[1]); connect(add1.y, eqAirTemp.sunblind[2]); connect(perCon.port, thermalZoneTwoElements.intGainsConv); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(product1.y, thermalZoneTwoElements.solRad[1]); connect(product.y, thermalZoneTwoElements.solRad[2]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase8;

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase9 Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase9

VDI 6007 Test Case 9 model

Buildings.ThermalZones.ReducedOrder.Validation.VDI6007.TestCase9

Information

Test Case 9 of the VDI 6007 Part 1: Calculation of indoor air temperature excited by a radiative and convective heat source for room version S with two exterior walls. It is based on Test Case 8.

Boundary conditions

This test validates reaction of indoor air temperature at mixed internal gains and outdoor impacts including solar radiation and long-wave radiation on exterior walls.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Modelica definition

model TestCase9 "VDI 6007 Test Case 9 model" extends Modelica.Icons.Example; RC.TwoElements thermalZoneTwoElements( redeclare final package Medium = Modelica.Media.Air.SimpleAir, alphaExt=2.7, alphaWin=2.7, gWin=1, nExt=1, alphaRad=5, nInt=1, RWin=0.00000001, ratioWinConRad=0.09, RExt={0.0017362530106}, CExt={5259932.23}, AInt=60.5, alphaInt=2.12, RInt={0.000668895639141}, CInt={12391363.8631}, RExtRem=0.01913729904, VAir=0, nOrientations=2, AWin={0,0}, ATransparent={7,7}, AExt={10.5,15}, T_start=295.15, extWallRC(thermCapExt(each T(fixed=true))), intWallRC(thermCapInt(each T(fixed=true)))) "Thermal zone"; Modelica.Thermal.HeatTransfer.Components.Convection theConWall "Outdoor convective heat transfer"; Modelica.Blocks.Sources.CombiTimeTable intGai( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, 0, 0, 0; 3600, 0, 0, 0; 7200, 0, 0, 0; 10800, 0, 0, 0; 14400, 0, 0, 0; 18000, 0, 0, 0; 21600, 0, 0, 0; 25200, 0, 0, 0; 25200, 80, 80, 200; 28800, 80, 80, 200; 32400, 80, 80, 200; 36000, 80, 80, 200; 39600, 80, 80, 200; 43200, 80, 80, 200; 46800, 80, 80, 200; 50400, 80, 80, 200; 54000, 80, 80, 200; 57600, 80, 80, 200; 61200, 80, 80, 200; 61200, 0, 0, 0; 64800, 0, 0, 0; 72000, 0, 0, 0; 75600, 0, 0, 0; 79200, 0, 0, 0; 82800, 0, 0, 0; 86400, 0, 0, 0], columns={2,3,4}) "Table with internal gains"; Modelica.Blocks.Sources.CombiTimeTable reference( tableOnFile=false, columns={2}, extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, table=[0, 22; 3600, 22; 7200, 21.9; 10800, 21.9; 14400, 21.8; 18000, 22; 21600, 22.3; 25200, 22.7; 28800, 24.8; 32400, 24.7; 36000, 25.2; 39600, 25.6; 43200, 26.1; 46800, 25.9; 50400, 26.3; 54000, 26.6; 57600, 27.5; 61200, 27.6; 64800, 26; 68400, 25.8; 72000, 25.6; 75600, 25.6; 79200, 25.5; 82800, 25.5; 86400, 25.5; 781200, 37.6; 784800, 37.4; 788400, 37.3; 792000, 37.1; 795600, 37.1; 799200, 37.3; 802800, 37.5; 806400, 39.6; 810000, 39.4; 813600, 39.7; 817200, 40; 820800, 40.3; 824400, 40; 828000, 40.3; 831600, 40.5; 835200, 41.3; 838800, 41.3; 842400, 39.6; 846000, 39.2; 849600, 38.9; 853200, 38.8; 856800, 38.7; 860400, 38.5; 864000, 38.4; 5101200, 40.8; 5104800, 40.6; 5108400, 40.4; 5112000, 40.2; 5115600, 40.2; 5119200, 40.4; 5122800, 40.5; 5126400, 42.6; 5130000, 42.3; 5133600, 42.6; 5137200, 42.9; 5140800, 43.2; 5144400, 42.9; 5148000, 43.2; 5151600, 43.4; 5155200, 44.1; 5158800, 44.1; 5162400, 42.3; 5166000, 42; 5169600, 41.6; 5173200, 41.5; 5176800, 41.3; 5180400, 41.2; 5184000, 41], offset={273.15}) "Reference results"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow macConv "Convective heat flow machines"; Modelica.Blocks.Sources.Constant alphaWall(k=25*25.5) "Outdoor coefficient of heat transfer for walls"; Modelica.Blocks.Sources.CombiTimeTable outdoorTemp( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 291.95; 3600, 291.95; 3600, 290.25; 7200, 290.25; 7200, 289.65; 10800, 289.65; 10800, 289.25; 14400, 289.25; 14400, 289.65; 18000, 289.65; 18000, 290.95; 21600, 290.95; 21600, 293.45; 25200, 293.45; 25200, 295.95; 28800, 295.95; 28800, 297.95; 32400, 297.95; 32400, 299.85; 36000, 299.85; 36000, 301.25; 39600, 301.25; 39600, 302.15; 43200, 302.15; 43200, 302.85; 46800, 302.85; 46800, 303.55; 50400, 303.55; 50400, 304.05; 54000, 304.05; 54000, 304.15; 57600, 304.15; 57600, 303.95; 61200, 303.95; 61200, 303.25; 64800, 303.25; 64800, 302.05; 68400, 302.05; 68400, 300.15; 72000, 300.15; 72000, 297.85; 75600, 297.85; 75600, 296.05; 79200, 296.05; 79200, 295.05; 82800, 295.05; 82800, 294.05; 86400, 294.05]) "Outdoor air temperature"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perRad "Radiative heat flow persons"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow perCon "Convective heat flow persons"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWindow( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, table=[0, 0, 0; 3600, 0, 0; 10800, 0, 0; 14400, 0, 0; 14400, 17, 17; 18000, 17, 17; 18000, 38, 36; 21600, 38, 36; 21600, 59, 51; 25200, 59, 51; 25200, 98, 64; 28800, 98, 64; 28800, 186, 74; 32400, 186, 74; 32400, 287, 84; 36000, 287, 84; 36000, 359, 92; 39600, 359, 92; 39600, 385, 100; 43200, 385, 100; 43200, 359, 180; 46800, 359, 180; 46800, 287, 344; 50400, 287, 344; 50400, 186, 475; 54000, 186, 475; 54000, 98, 528; 57600, 98, 528; 57600, 59, 492; 61200, 59, 492; 61200, 38, 359; 64800, 38, 359; 64800, 17, 147; 68400, 17, 147; 68400, 0, 0; 72000, 0, 0; 82800, 0, 0; 86400, 0, 0], columns={2,3}) "Solar radiation"; Modelica.Blocks.Sources.Constant g_sunblind(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold1(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product1 "Solar radiation times g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.Switch switch1 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Logical.GreaterThreshold greaterThreshold2(threshold=100) "Threshold for sunblind for one direction"; Modelica.Blocks.Math.Product product "Solar radiation times g value for sunblind (open or closed) for one direction"; EquivalentAirTemperature.VDI6007 eqAirTemp( n=2, wfGro=0, aExt=0.7, alphaWallOut=20, alphaRad=5, wfWall={0.05796831135677373,0.13249899738691134}, wfWin={0.4047663456281575,0.4047663456281575}, withLongwave=true, TGro=285.15) "Equivalent air temperature"; Modelica.Blocks.Math.Add add(k1=-1) "Computes 1 - g_sunblind for one direction"; Modelica.Blocks.Sources.Constant const1(k=1) "Constant for 1 - g_sunblind"; Modelica.Blocks.Sources.CombiTimeTable tableSolRadWall( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, tableOnFile=false, columns={2,3}, table=[0, 0, 0; 3600, 0, 0; 10800, 0, 0; 14400, 0, 0; 14400, 24, 23; 18000, 24, 23; 18000, 58, 53; 21600, 58, 53; 21600, 91, 77; 25200, 91, 77; 25200, 203, 97; 28800, 203, 97; 28800, 348, 114; 32400, 348, 114; 32400, 472, 131; 36000, 472, 131; 36000, 553, 144; 39600, 553, 144; 39600, 581, 159; 43200, 581, 159; 43200, 553, 372; 46800, 553, 372; 46800, 472, 557; 50400, 472, 557; 50400, 348, 685; 54000, 348, 685; 54000, 203, 733; 57600, 203, 733; 57600, 91, 666; 61200, 91, 666; 61200, 58, 474; 64800, 58, 474; 64800, 24, 177; 68400, 24, 177; 68400, 0, 0; 72000, 0, 0; 82800, 0, 0; 86400, 0, 0]) "Solar radiation on walls"; Modelica.Blocks.Sources.Constant g_sunblind1(k=0.15) "g value for sunblind closed"; Modelica.Blocks.Sources.Constant sunblind_open1(k=1) "g value for sunblind open"; Modelica.Blocks.Logical.Switch switch2 "Determines g value for sunblind (open or closed) for one direction"; Modelica.Blocks.Math.Add add1(k1=-1) "Computes 1 - g_sunblind for one direction"; Modelica.Blocks.Sources.Constant const2(k=1) "Constant for 1 - g_sunblind"; Buildings.HeatTransfer.Sources.PrescribedTemperature preTem "Outdoor air temperature"; Modelica.Blocks.Sources.CombiTimeTable HSky( extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, columns={2}, table=[0, 362.5; 0.36, 362.5; 3600, 364; 7200, 364; 7200, 364.5; 10800, 364.5; 10800, 364; 14400, 364; 14400, 380.5; 18000, 380.5; 18000, 390.5; 21600, 390.5; 21600, 400.5; 25200, 400.5; 25200, 414; 28800, 414; 28800, 427.5; 32400, 427.5; 32400, 439; 36000, 439; 36000, 448.5; 39600, 448.5; 39600, 457; 43200, 457; 43200, 459.5; 46800, 459.5; 46800, 460; 50400, 460; 50400, 457.5; 54000, 457.5; 54000, 452.5; 57600, 452.5; 57600, 445; 61200, 445; 61200, 438.5; 64800, 438.5; 64800, 437; 68400, 437; 68400, 420; 72000, 420; 72000, 412.5; 75600, 412.5; 75600, 405; 79200, 405; 79200, 397.5; 82800, 397.5; 82800, 390; 86400, 390]) "Long-wave radiation from sky"; Modelica.Blocks.Math.Sqrt sqrt "Root of H_sky for black body sky temperature"; Modelica.Blocks.Math.Sqrt sqrt1 "Root of H_sky for black body sky temperature"; Modelica.Blocks.Math.Gain gain(k=65.99081593) "Convert long-wave radiation into black body sky temperature"; BaseClasses.VerifyDifferenceThreePeriods assEqu( startTime=3600, endTime=86400, startTime2=781200, endTime2=864000, startTime3=5101200, endTime3=5184000, threShold=0.15) "Checks validation criteria"; Modelica.Blocks.Math.Mean mean(f=1/3600) "Hourly mean of indoor air temperature"; equation connect(thermalZoneTwoElements.extWall, theConWall.solid); connect(alphaWall.y, theConWall.Gc); connect(perRad.port, thermalZoneTwoElements.intGainsRad); connect(intGai.y[1], perRad.Q_flow); connect(intGai.y[2], perCon.Q_flow); connect(intGai.y[3], macConv.Q_flow); connect(tableSolRadWindow.y[1], greaterThreshold1.u); connect(sunblind_open.y, switch1.u3); connect(g_sunblind.y, switch1.u1); connect(tableSolRadWindow.y[1], product1.u1); connect(tableSolRadWindow.y[2], greaterThreshold2.u); connect(tableSolRadWindow.y[2], product.u1); connect(const1.y, add.u2); connect(tableSolRadWall.y, eqAirTemp.HSol); connect(switch1.y, add.u1); connect(greaterThreshold1.y, switch1.u2); connect(sunblind_open1.y, switch2.u3); connect(g_sunblind1.y, switch2.u1); connect(const2.y, add1.u2); connect(switch2.y, add1.u1); connect(greaterThreshold2.y, switch2.u2); connect(switch2.y, product.u2); connect(switch1.y, product1.u2); connect(eqAirTemp.TEqAir, preTem.T); connect(preTem.port, theConWall.fluid); connect(add.y, eqAirTemp.sunblind[1]); connect(add1.y, eqAirTemp.sunblind[2]); connect(outdoorTemp.y[1], eqAirTemp.TDryBul); connect(HSky.y[1], sqrt.u); connect(sqrt.y, sqrt1.u); connect(sqrt1.y, gain.u); connect(gain.y, eqAirTemp.TBlaSky); connect(perCon.port, thermalZoneTwoElements.intGainsConv); connect(macConv.port, thermalZoneTwoElements.intGainsConv); connect(product1.y, thermalZoneTwoElements.solRad[1]); connect(product.y, thermalZoneTwoElements.solRad[2]); connect(thermalZoneTwoElements.TAir, mean.u); connect(mean.y, assEqu.u2); connect(reference.y[1], assEqu.u1); end TestCase9;