Popolo Reference Manual: BY SA
Popolo Reference Manual: BY SA
BY
SA
Contents
Chapter 1 Introduction..................................................................................................................................................5
1.1 What is Popolo...................................................................................................................................................5
1.2 Where to Download Popolo..............................................................................................................................5
1.3 Making the first simple program.......................................................................................................................5
Chapter 2 Calculating Thermodynamic Properties......................................................................................................8
2.1 Name space for calculating thermodynamic properties....................................................................................8
2.2 Calculating thermodynamic properties of moist air..........................................................................................8
2.2.1 The members of the MoistAir class..........................................................................................................8
2.2.2 How to calculate thermodynamic properties of the moist air................................................................10
2.2.3 Calculation of saturated moist air...........................................................................................................12
2.2.4 Immutable interface for MoistAir class..................................................................................................12
2.2.5 Other methods defined in MoistAIr class...............................................................................................13
1) BlendAir method....................................................................................................................................13
2) GetDynamicViscosity method...............................................................................................................13
3) GetSpecificHeat method........................................................................................................................13
4) GetThermalConductivity method..........................................................................................................13
5) GetWaterVaporPressure method............................................................................................................13
Chapter 3 Calculating Circuit Network......................................................................................................................14
3.1 Name space for calculating circuit network....................................................................................................14
3.2 General descriptions of classes in CircuitNetwork namespace......................................................................14
3.2.1 Node class...............................................................................................................................................14
3.2.2 Channel class...........................................................................................................................................15
3.2.3 Circuit class.............................................................................................................................................16
3.2.4 CircuitSolver class..................................................................................................................................16
3.3 Sample programs calculating circuit networks...............................................................................................17
3.3.1 Calculating a water pipe network...........................................................................................................17
3.3.2 Calculating heat flow through a wall......................................................................................................18
Chapter 4 Calculating Thermal Comfort....................................................................................................................20
4.1 Name space for calculating thermal comfort..................................................................................................20
4.2 General descriptions of classes in ThermalComfort name space...................................................................20
4.2.1 PMVCalculator class..............................................................................................................................20
1) Tasks.......................................................................................................................................................20
2) GetMet....................................................................................................................................................20
3) GetPMVFromPPD.................................................................................................................................21
4) GetPPDFromPMV.................................................................................................................................21
5) TryCalculateDryBulbTemperature.........................................................................................................21
6) TryCalculateHeatLossFromBody..........................................................................................................22
7) TryCalculatePMV..................................................................................................................................22
4.2.2 SETStarCalculator class.........................................................................................................................22
4.2.3 HumanBody class...................................................................................................................................23
Chapter 5 Calculating Weather State..........................................................................................................................28
5.1 Name space for calculating weather state.......................................................................................................28
5.2 Descriptions of classes....................................................................................................................................28
5.2.1 Incline class.............................................................................................................................................28
5.2.2 Sky class..................................................................................................................................................30
5.2.3 Sun class..................................................................................................................................................30
1) Constructor.............................................................................................................................................30
2) Static methods........................................................................................................................................31
3) Other properties and methods defined in Sun class...............................................................................33
5.3 Sample programs of calculating weather state................................................................................................34
Chapter 6 Calculating Thermal Load of Building......................................................................................................35
6.1 Name space for calculating thermal load of building.....................................................................................35
6.2 General descriptions of classes defined in Popolo.ThermalLoad name space...............................................36
6.2.1 GlassPanes class......................................................................................................................................36
-3-
-4-
Chapter 1 Introduction
1.1 What is Popolo
Popolo is a collection of classes for calculating various heat transfer phenomena. The routines have been
written from scratch in C#, and present a modern Applications Programming Interface (API) for .NET Framework
programmers, allowing wrappers to be written for very high level languages. It contains classes to calculate solid
conduction, convective heat transfer near wall surfaces, air ventilation, radiative heat balance of wall surfaces,
transmitted solar radiation through a window, and so on. Users should build up these classes to simulate a whole
complex building system. A sample source code to build test cases of BESTEST are provided. Since all the source
code is distributed under the GNU General Public License, they can be freely downloaded from the Web site.
This manual describes how to use Popolo in your program. Some example codes are also provided.
1) You may also use some other languages which support .NET Framework such as C++.NET or Basic.NET.
-5-
Chapter 1 Introduction
As shown in figure 1.3, a simple program is automatically generated by Visual Studio. In Solution
Explorer, right-click on the project node and click Add Reference. In the Add Reference dialog box (Figure 1.4),
select the Browse tab to browse for Popolo.dll in the file system (Figure 1.5). You can find that the reference
to the Popolo.dll is added in the Solution Explorer (Figure 1.6).
Popolo.dll includes various types of classes to execute building environmental simulation. They are
divided into some name spaces. C# programs are organized using namespaces. using directives are provided to
facilitate the use of namespaces.
The following example (Figure 1.7) shows how to define a using directive. In line 3,
Popolo.ThermophysicalProperty namespace is referenced. It is the namespace that provides classes to calculate
thermo-physical property of water or moist air. In line 11, MoistAir class which belongs to
Popolo.ThermophysicalProperty is called.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using Popolo.ThermophysicalProperty;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
double cpAir = MoistAir.GetSpecificHeat(0.018);
Console.WriteLine("Specific heat of moist air at humidity ratio of 0.018 kg/kg(DA) is" + cpAir.ToString(F3) + "kJ/K");
Console.Read();
}
}
}
Either by hitting F5 key or choosing "Start Debugging" from the menu, the executable will start. Figure
1.8 is the result of the program. You can find that the specific heat of moist air is successfully calculated
-7-
Type
General function
MoistAir
class
A class which express the moist air. The functions which calculates
thermodynamic properties of the moist air is also defined in this class.
ImmutableMoistAir
interface
Water
static class
There are 7 primary variables which characterize a moist air, Drybulb temperature, Wetbulb
temperature, Enthalpy, Relative humidity, Humidity ratio, Specific volume and Atmospheric pressure.
These variables are defined as properties of the MoistAir class as shown in the table 2.2.
Table 2.2 Properties of the MoistAir class
Name
Mean
Unit
Type
DryBulbTemperature
Drybulb temperature
yes
double
WetBulbTemperature
Wetbulb temperature
yes
double
Enthalpy
yes
kJ/kg
double
Relative humidity
yes
double
Humidity ratio
yes
kg/kg(DA)
double
Enthalpy
RelativeHumidity
HumidityRatio
SpecificVolume
AtmosphericPressure
Specific volume
yes
m /kg
double
Atmospheric pressure
yes
kPa
double
Figure 2.1 is the sample code which edits the values of the properties of MoistAir object. In the line 11, an
instance of the MoistAir class is created. From line 13 to line 20, values are set to the properties. From line 22 to
line 29, the values of the MoistAir object is written to the standard output stream.
-8-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using Popolo.ThermophysicalProperty;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//Creating instance of MoistAir class
MoistAir mAir = new MoistAir();
//Set values to property
mAir.DryBulbTemperature = 25.6;
mAir.HumidityRatio = 0.018;
mAir.RelativeHumidity = 50.0;
mAir.WetBulbTemperature = 22;
mAir.SpecificVolume = 0.86;
mAir.Enthalpy = 58.0;
mAir.AtmosphericPressure = 101.325;
//Output values of properties
Console.WriteLine("Drybulb Temperature:" + mAir.DryBulbTemperature);
Console.WriteLine("Humidity Ratio:" + mAir.HumidityRatio);
Console.WriteLine("Relative Humidity:" + mAir.RelativeHumidity);
Console.WriteLine("Wetbulb Temperature:" + mAir.WetBulbTemperature);
Console.WriteLine("Specific Volume:" + mAir.SpecificVolume);
Console.WriteLine("Enthalpy:" + mAir.Enthalpy);
Console.WriteLine("Atmospheric Pressure:" + mAir.AtmosphericPressure);
Console.Read();
Fig.2.1 The sample code to edit the values of the MoistAir property
-9-
2.2.2
An enumeration type Property which expresses the moist air properties is defined in MoistAir class.
Table 2.3 shows a list of MoistAir.Property enumerator.
For each atmospheric pressure, two known properties allow determination of all other properties of the
moist air. To calculate thermodynamic properties from two known properties, user can use static methods shown
in table 2.4. The static methods are named as GetAirStateFromXXYY, where XX and YY represent two known
properties. DB is Dry-Bulb temperature, HR is Humidity Ratio, RH is Relative Humidity, EN is ENthalpy, WB is
Wet-Bulb temperature, SV is Specific Volume.
Table 2.3 A list of MoistAir.Property enumerator
Name
Meaning
DryBulbTemperature
Drybulb Temperature[C]
WetBulbTemperature
HumidityRatio
RelativeHumidity
Enthalpy
Enthalpy [kJ/kg]
WaterPartialPressure
SpecificVolume
SaturatedTemperature
Table 2.4 Static methods to calculate thermodynamic properties of the moist air
Name
General function
GetAirStateFromAHEN
Calculate thermodynamic properties from humidity ratio [kg/kg] and enthalpy [kJ/kg]
GetAirStateFromAHRH
Calculate thermodynamic properties from humidity ratio [kg/kg] and relative humidity [%]
GetAirStateFromAHSV
Calculate thermodynamic properties from humidity ratio [kg/kg] and specific volume [m3/kg]
GetAirStateFromDBAH
Calculate thermodynamic properties from dry bulb temperature [C] and humidity ratio [kg/kg]
GetAirStateFromDBEN
Calculate thermodynamic properties from dry bulb temperature [C] and enthalpy [kJ/kg]
GetAirStateFromDBRH
Calculate thermodynamic properties from dry bulb temperature [C] and relative humidity [%]
GetAirStateFromDBSV
Calculate thermodynamic properties from dry bulb temperature [C] and specific volume [m3/kg]
GetAirStateFromDBWB
Calculate thermodynamic properties from dry bulb temperature [C] and wet bulb temperature [C]
GetAirStateFromRHEN
Calculate thermodynamic properties from relative humidity [%] and enthalpy [kJ/kg]
GetAirStateFromRHSV
Calculate thermodynamic properties from relative humidity [%] and specific volume [m3/kg]
GetAirStateFromWBAH
Calculate thermodynamic properties from wet bulb temperature [C] and humidity ratio [kg/kg]
GetAirStateFromWBEN
Calculate thermodynamic properties from wet bulb temperature [C] and enthalpy [kJ/kg]
GetAirStateFromWBRH
Calculate thermodynamic properties from wet bulb temperature [C] and relative humidity [%]
GetAirStateFromWBSV
Calculate thermodynamic properties from wet bulb temperature [C] and specific volume [m3/kg]
Each method is over loaded and have 4 combinations of parameters. Table 2.5 shows return value and 4
combinations of parameters.
The first and the second method calculates all the thermodynamic properties of the moist air from given
two state. It returns MoistAir object whose Properties are correctly set upped. The second method request a value
of atmospheric pressure as third parameter. By contrast, the first method suppose the value of the atmospheric
pressure as 101.325 kPa.
The third and the fourth method calculates value of only one specific property of the moist air. They need
shorter calculating time than the first and the second method.
-10-
Return value
param 1
param 2
param 3
param 4
MoistAir object
value of specific
property 1
value of specific
property 2
N/A
N/A
MoistAir object
value of specific
property 1
value of specific
property 2
atmospheric pressure
[kPa]
N/A
value of specific
property 1
value of specific
property 2
MoistAir.Property
N/A
value of specific
property 1
value of specific
property 2
MoistAir.Property
atmospheric pressure
[kPa]
Figure 2.3 shows the sample code which calculates the values of the properties of MoistAir. In the line 14,
using GetAirStateFromDBHR method, state of the moist air is calculated from the value of dry bulb temperature
and humidity ratio. The value of the moist air are written to the standard output stream. In the line 27,
MoistAir.Property enumerator is given as third parameter of the GetAirStateFromDBEN method. Therefore,
only the value of humidity ratio is calculated.
Figure 2.4 shows the result.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using Popolo.ThermophysicalProperty;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//Create an instance of the MoistAIr class
MoistAir mAir;
//Calculate state of the moist air from given two properties (DB 25 C, AH 0.012 kg/kg)
mAir = MoistAir.GetAirStateFromDBAH(25, 0.012);
//Write value of the moist air to standard output stream.
Console.WriteLine("Dry bulb temperature:" + mAir.DryBulbTemperature.ToString("F1"));
Console.WriteLine("Humidity ratio:" + mAir.HumidityRatio.ToString("F3"));
Console.WriteLine("Relative humidity:" + mAir.RelativeHumidity.ToString("F1"));
Console.WriteLine("Wet bulb temperature:" + mAir.WetBulbTemperature.ToString("F1"));
Console.WriteLine("Specific volume:" + mAir.SpecificVolume.ToString("F3"));
Console.WriteLine("Enthalpy:" + mAir.Enthalpy.ToString("F1"));
Console.WriteLine("Atmospheric pressure:" + mAir.AtmosphericPressure.ToString("F1"));
Console.WriteLine();
//Calculate relative humidity from dry bulb temperature and enthalpy.
double rHumid = MoistAir.GetAirStateFromDBEN(25, 58, MoistAir.Property.RelativeHumidity);
Console.WriteLine("Relative Humidity:" + rHumid.ToString("F1"));
Console.Read();
Fig.2.3 The sample code calculating the values of the properties of moist air
-11-
2.2.3
Table 2.6 shows the lists of static method to calculate saturated moist air state. They take two or three
arguments. The first argument is value of a specific property of the moist air (ex. dry-bulb temperature, humidity
ratio). The second argument is MoistAir.Property, the enumerating object. The third object is value of
atmospheric pressure.
Table 2.6 The lists of static method to calculate saturated moist air state
Name
General function
GetSaturatedDrybulbTemperature
Calculate saturated dry-bulb temperature from one of value of moist air property.
GetSaturatedHumidityRatio
Calculate saturated humidity ratio from one of value of moist air property.
GetSaturatedEnthalpy
GetSaturatedVaporPressure
Calculate saturated vapor pressure from one of value of moist air property.
2.2.4
As described above, MoistAir object has double type properties which contains values of the moist air
states (ex. dry-bulb temperature, humidity ratio). Therefore, MoistAir object could be an argument or return value
of some other method. For example, when we calculate an air handling unit, a cooling coil need state of inlet
moist air which is outlet state of a fan. In this case, a MoistAir object will be given from a Fan object to a
CoolingCoil object. Since the cooling coil has no ability to alter the value of inlet moist air state, the access for
properties of MoistAir objects should be denied from the CoolingCoil object.
To enable this access control, ImmutableMoistAir interface is provided. ImmutableMoistAir interface has
exactly same properties as MoistAir class, but only get accessors are defined. Therefore, we can't set values to
ImmutableMoistAir properties. They are read-only properties. MoistAir object can be treated as
ImmutableMoistAir object, since it implements ImmutableMoistAir interface. Figure 2.5 is the UML diagrams.
ImmutableMoistAir
MoistAir
using System;
using Popolo.ThermophysicalProperty;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//Create an instance of ImmutableMoistAir
ImmutableMoistAir mAir;
//Create MoistAir object and set it to ImmutableMoistAir object
mAir = MoistAir.GetAirStateFromDBAH(25, 0.012);
//Compile error occurs since ImmutableMoistAir interface doesn't have set accessors
//mAir.DryBulbTemperature = 27;
//mAir.Enthalpy = 56;
-12-
2.2.5
1)
BlendAir method
To calculate blended moist air state, BlendAir method is defined. Table 2.7 shows arguments of BlendAir
method. Figure 2.7 is a sample code which uses BlendAir method. It creates two ImmutableMoistAir objects and
blend them (mixing ratio is 3:7).
Table 2.7 Arguments of BlendAir method
No.
Argument 1
Argument 2
Argument 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Argument 4
Blend rate of moist air 2
(double)
using System;
using Popolo.ThermophysicalProperty;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//Create an instance of MoistAir class
ImmutableMoistAir mAir1, mAir2, blendAir;
//Calculate moist air state (DB 25C, AH 0.012kg/kgDA)
mAir1 = MoistAir.GetAirStateFromDBAH(25, 0.012);
//Calculate moist air state (DB 30C, AH 0.014kg/kgDA)
mAir2 = MoistAir.GetAirStateFromDBAH(30, 0.014);
//Blend moist air. (Blend rate is 3:7)
blendAir = MoistAir.BlendAir(mAir1, mAir2, 0.3, 0.7);
2)
GetDynamicViscosity method
Method to calculate dynamic viscosity [m2/s] of moist air. An argument is dry bulb temperature.
3)
GetSpecificHeat method
Method to calculate specific heat [kJ/(kg K)] of moist air. An argument is humidity ratio.
4)
GetThermalConductivity method
Method to calculate thermal conductivity [W/(m K)] of moist air. An argument is dry bulb temperature.
5)
GetWaterVaporPressure method
Method to calculate water vapor pressure [kPa] of moist air. An argument is humidity ratio (and
atmospheric pressure).
-13-
Type
General function
Channel
class
Circuit
class
CircuitSolver
class
ImmutableChannel
interface
ImmutableCircuit
interface
ImmutableNode
interface
Node
class
A potential at each node in circuit network can be expressed in equation 3.1 . To solve a circuit network,
user should make a Circuit object with a Channel and a Node object, which expresses equation 3.1. Then, solve
the Circuit object with a CircuitSolver object.
N
dp
1
m = p i p G
dt i=0 Ri
(3.1)
m : Capacity of node p : Potential of node N : Number of nodes which are connected to target node
Ri : Resistance between nodes G : Energy flow from the outside to node : resistive index (1 2)
Node class
Node is a class which expresses a node. A principal parameters of node are potential and capacity. A
variable p and m in equation 3.1 represent potential and capacity. If the capacity is very small, value of the
potential changes rapidly with the energy flow. User can initialize these value in constructor. For example, to
make Node object whose capacity and potential are 5 and 10, user should write code like below. The first
argument is a name of the node, the second is value of the capacity, and the third is value of the potential.
Node sampleNode = new Node("SampleNode", 5, 10)
To get the list of the channels which are connected to the node, use GetChannels method. To get the total
energy flow to node, use GetTotalFlow method. If the returned value of GetTotalFlow method is less than 0,
energy flows to outside of the node.
If the node is the boundary node (the node whose potential should be kept constant value), set value of the
IsBoundaryNode property to true. To make constant energy flow to the node, set the energy flow to the
ExternalFlow property. If the ExternalFlow is positive value, it means that energy flows from node to outside. If
negative, energy flows from outside to node. A variable G in equation 3.1 represent the ExternalFlow.
These properties are used when user make boundary condition. Fig.3.1 shows how to set the boundary
conditions.
-14-
p1
g1
p2
P
g2
As same as the MoistAir class, an immutable interface (ImmutableNode) for the Node class is defined.
The Node class implements the ImmutableNode interface.
3.2.2
Channel class
Channel is a class which expresses a channel. It connects two node objects and represent their connection
weight with resistance and resistive index. A variable R and in equation 3.1 represent resistance and resistive
index. User can initialize these value in constructor. For example, to make Channel object whose resistance and
resistive index are 3 and 1.2, user should write code like below. The first argument is a name of the channel, the
second is value of the resistance, and the third is value of the resistive index.
Channel sampleChannel = new Channel("SampleChannel", 3, 1.2);
To connect two nodes with Channel object, use Connect method.
sampleChannel.Connect(node1, node2);
The first and the second arguments are Node objects to connect.
To get the energy flow in the channel, use GetFlow method. Figure 3.2 is a sample program which
calculate energy flow between two nodes. The potential of the first and the second node are 10 and 0. The
(1/1.2)
resistance and resistive index of channel are 2 and 1.2. Energy flow of this channel is 1 / 2 (10 0)
= 3.4.
As same as the Node class, an immutable interface (ImmutableChannel) for the Channel class is defined.
The Channel class implements the ImmutableChannel interface.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Fig.3.2 A sample program which calculate energy flow between two nodes
-15-
3.2.3
Circuit class
A circuit consists of nodes and channels. To define the circuit, Add Node objects to Circuit object and
connect them with Channel objects. To add Node objects to a Circuit object, use AddNode method.
ImmutableNode iNode = sampleCircuit.AddNode(sampleNode);
The return value of AddNode method is the ImmutableNode object which was added to the Circuit object
by AddNode method. To remove Node objects from a Circuit object, use RemoveNode method.
sampleCircuit.RemoveNode(iNode);
The first argument is the removing ImmutableNode object.
To connect nodes, use ConnectNodes method.
ImmutableChannel iChannel = sampleCircuit.ConnectNodes(iNode1, iNode2, sampleChannel);
The first and the second arguments are ImmutableNode objects, and the third argument is a Channel
object which connects two nodes. The two nodes should be added before calling ConnectNodes method. The
returned value of ConnectNodes method is the ImmutableChannel object which connects two nodes.
To disconnect nodes, use DisconnectNodes method.
sampleCircuit.DisconnectNodes(iChannel);
The first argument is the Channel object which connects nodes.
The boundary conditions described at section 3.2.1 could be also set in Circuit class. Table 3.2 shows
lists of the method to set boundary conditions which defined in Circuit class.
Table 3.2 The method to set boundary conditions
Name
Function
Argument 1
Argument 2
SetPotential
SetExternalFlow
SetBoundaryNode
Set whether node is boundary node or not. Whether node is boundary node or
not (bool)
3.2.4
CircuitSolver class
The CircuitSolver class has a function to solve a circuit network. It takes a Circuit object as an argument
of constructor.
CircuitSolver cSolver = new CircuitSolver(sampleCircuit);
To solve a circuit network, use Solve method.
cSolver.Solve();
All the value of energy flows and potentials are updated when the Solve method is called. There are two
kinds of circuit network, circuit network who has a capacity or not. The capacity is a variable m in equation 3.1. If
all the capacities in a network are equal to 0, the network is a static network. In contrast, a network whose
capacities takes positive value, is a dynamic network. If a network is a static network, the value of potentials or
energy flows will not change unless boundary conditions change. If a network is a dynamic network, the value of
potentials or energy flows depends on time. Therefore, user should set time step when a network is a dynamic
network. To set time step, use TimeStep property as below. In this case, time step is set to 10 seconds.
cSolver.TimeStep = 10;
-16-
Figure 3.3 shows a water pipe network to solve . The network has three nodes (1, 2 and 3) and four
channels (A, B, C and D). The resistance of each channel are shown in figure (RA ~ RD).
A:RA=167
7.06
2 C:RC=840
B:
RB=192
7.06
D:RD=4950
//Create solver
CircuitSolver cSolver = new CircuitSolver(circuit);
cSolver.Solve();
Console.WriteLine("Water flow A is " + channelA.GetFlow().ToString("F2"));
Console.WriteLine("Water flow B is " + channelB.GetFlow().ToString("F2"));
Console.WriteLine("Water flow C is " + channelC.GetFlow().ToString("F2"));
Console.WriteLine("Water flow D is " + channelD.GetFlow().ToString("F2"));
Console.Read();
1)
-17-
3.3.2
Room 1
18
kJ/(m2 K)
174
(m2K)/kW
232
kJ/(m2 K)
109
(m2K)/kW
Rock Wool
Concrete
Air gap
Plywood
Figure 3.6 is a wall to calculate a heat transfer. The wall has four layers; plywood, concrete, air gap and
rock wool. The temperatures of Room 1 and Room 2 take constant value 20C and 10C. The temperatures of
each layer are treated as potentials of node in this case.
4.2
kJ/(m2 K)
86
638
Room 2
703
Figure 3.7 is a sample program which solve the heat transfer of this wall.
In the line 8 to 14, new instances of Node class are created. In this case, each nodes has heat capacity.
Since the room temperatures take constant value, edge nodes is set to boundary nodes in line 17 and 18.
As same as water pipe network, a CircuitSolver object is used to solve the network. In this case, time step
should be set since the network has heat capacity and is a dynamic network. In the line 32, TimeStep is set to 3600
seconds (= 1 hour). Update method is called 24 times. The temperatures (potentials) of layers are written to the
standard output stream in each iteration.
Figure 3.8 is a wall temperature distribution made from the result of the program.
-18-
Fig.3.7 A sample program which solve the heat transfer of the wall.
22
20
18
Temperature [C]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
16
14
12
10
13:00
2:00
14:00
3:00
15:00
4:00
16:00
5:00
17:00
6:00
18:00
7:00
19:00
8:00
20:00
9:00
21:00
10:00
22:00
11:00
23:00
12:00
8
Room 1
1:00
Plyw ood
Concrete
Air gap
Rock w ool
-19-
Room 2
Type
General function
PMVCalculator
static class
SETStarCalculator
static class
HumanBody
class
BodyPart
class
PMVCalculator class
PMV represents the predicted mean vote of a large population of people exposed to a certain
environment. PPD is the predicted percent of dissatisfied people at each PMV. As PMV changes away from zero
in either the positive or negative direction, PPD increases. These indices are proposed by P. O. Fanger.
To calculate value of PMV and PPD, use PMVCalculator class. Table 4.2 shows a list of principal
members of PMVCalculator class.
Table 4.2 Principal members of PMVCalculator class
Name
Type
Description
Tasks
enumerator
GetMet
method
GetPMVFromPPD
method
GetPPDFromPMV
method
TryCalculateDryBulbTemperature
method
TryCalculateHeatLossFromBody
method
TryCalculatePMV
method
TryCalculateRelativeHumidity
method
1)
Tasks
Tasks is an enumerator which expresses a kind of work. Some typical tasks (rest, office work, sleeping,
exercise and so on) exemplified in ASHRAE Standard 55 is defined.
2)
GetMet
GetMet method calculates metabolic rate for a task. It takes Tasks object as an argument.
-20-
3)
GetPMVFromPPD
GetPMVFromPPD method calculates PMV value from PPD value. Since the curve of PPD is bilaterally
symmetric as shown in figure 4.1, 2 PMV value corresponds to 1 PPD value. This method calculate positive
value. You can get negative value by reversing a sign.
100
90
80
70
PPD [%]
60
50
40
GetPMVFromPPD
method calculates
positive value
30
20
10
0
-4
-3
-2
-1
PMV
4)
GetPPDFromPMV
GetPPDFromPMV method calculate PPD value from PMV value. An argument is a value of PMV.
5)
TryCalculateDryBulbTemperature
TryCalculateDryBulbTemperature method calculate dry-bulb temperature from PMV value and other
thermal conditions. Table 4.3 shows a list of arguments. The arguments 1 to 7 are the inputs. Figure 4.2 shows a
sample program which calculate dry-bulb temperature from PMV and other thermal conditions.
Table 4.3 The arguments of TryCalculateDryBulbTemperature method
No.
1
2
3
4
5
6
7
8
Description
No.
Description
Velocity [m/s]
Fig.4.2 A sample program which calculate dry-bulb temperature from PMV and other thermal conditions
-21-
6)
TryCalculateHeatLossFromBody
TryCalculateHeatLossFromBody method calculates a heat loss from a body. Table 4.4 shows a list of
arguments. The arguments 1 to 7 are the inputs. The PMV value is calculated from heat loss from body.
Table 4.4 The arguments of TryCalculateHeatLossFromBody nethod
No.
7)
Description
No.
Description
Velocity [m/s]
TryCalculatePMV
TryCalculatePMV method calculates PMV value from 6 thermal conditions. Table 4.5 shows a list of
arguments. The method is overloaded, and could be called with arguments listed in table 4.6.
Table 4.5 The arguments of TryCalculatePMV methods 1
No.
Description
No.
Description
Velocity [m/s]
4.2.2
Description
No.
3
Description
Heat loss from body [W]
SETStarCalculator class
The ET* and the SET* (Standard effective temperature) are the predictive index of human response to the
4)
thermal environment proposed by Gagge . To calculate the value of ET* and the value SET*, use
th
TryCalculateSET method. Table 4.7 shows a list of arguments. The arguments 1 to 10 are the inputs, and the 11
th
and 12 arguments are the outputs.
Table 4.7 The arguments of the TryCalculateSET methodz
No.
Description
No.
Description
Velocity [m/s]
Weight [kg]
10
11
12
-22-
4.2.3
HumanBody class
During the past 50 years of thermal comfort research, PMV and standard new effective temperature SET*
have gained support as indoor thermal comfort indices that are still the most widely utilized indices in the field
today. Both indices modeled the human body as a uniform heating element and clothing as the uniform heat
resistance on human body surface, limiting the application of these indices to fairly uniform condition with few
distributions. However, people are often exposed to very non-uniform thermal environments, each human body
segment has physiological and geometric characteristic and clothing insulation of each segment is various.
HumanBody class and BodyPart class are developed to calculate human body model proposed by
5)
S.Tanabe . It enables detailed consideration of non-uniform conditions is required to assess such environments as
car cabins, task air-conditioned spaces and outdoors. The conceptual figure of heat exchange is illustrated in
Fig.4.3.
Next blood
pool
Last blood
pool
Bloodstream
Last blood
pool
Conduction
Next blood
pool
Next blood
pool
Segment n
Convection
Radiation
Evaporation
Environment
Next blood
pool
Convection
Radiation
Evaporation
Skin
Conduction
Clothing
Conduction
Core
Clothing
Skin
Countercurrent heat
exchange
Core
Environment
Respiration
(chest)
Next blood
pool
Bloodstream
AVA
(hands and feet)
Last blood
pool
Last blood
pool
Last blood
pool
Segment n
<Except limbs>
<Limbs>
Figure.4.3 The conceptual figure of heat exchange
HumanBody class has two constructors. An instance of HumanBody is initialized to body of standard
2
adult male. The standard man represents the body surface area of 1.87 m ;the body weight of 74.43 kg; age of 25;
2
cardiac index at rest of 2.58 L/(min m ); fat percentage of 15 %. These parameters can be initialized when given
as an arguments as below.
public HumanBody(double weight, double height, double age, bool isMale,
double cardiacIndexAtRest, double fatPercentage)
To specify the part of the body, Nodes enumerator is defined in HumanBody class. Table 4.8 shows
members of the Nodes enumerator.
Table 4.8 The members of the Nodes enumerator
Name
Description
Name
Description
Head
Head
LeftLeg
Left leg
Neck
Neck
LeftFoot
Left foot
Chest
Chest
RightShoulder
Right shoulder
Back
Back
RightArm
Right arm
Pelvis
Pelvis
RightHand
Right hand
LeftShoulder
Left shoulder
RightThigh
Right thigh
LeftArm
Left arm
RightLeg
Right leg
LeftHand
Left hand
RightFoot
Right foot
LeftThigh
Left thigh
-23-
Table 4.9 shows methods defined in HumanBody class. A temperature of whole body can be initialized
with InitializeTemperature method. However, the initialization of the body temperatures is not necessary, since
they are initialized to steady state at operative temperature of 28.8 C when the object is instantiated.
The state of the human body can be updated by the Update method. User can give the time step as an
argument.
HumanBody object consists of 17 BodyPart objects. The each BodyPart object can be obtained by calling
GetBodyPart method. BodyPart object has detailed information of the body (temperatures of the core, muscle, fat
and skin, etc.).
Table 4.9 The methods defined in HumanBody class
Name
Description
Function Update body state.
Update
Return
Arg.1
Return
Arg.1
Return
Arg.1
Table 4.10 shows methods to set the boundary conditions. By giving Nodes enumerating object as an first
argument, different boundary condition can be given to different body part (only methods which has *).
-24-
Description
2
SetCardiacIndex
Arg. 1
SetPosture
Arg. 1
SetWorkLoad
Arg. 1
SetContactPortionRate
SetHeatConductance
ToMaterial
Arg. 1
SetDrybulbTemperature
Arg. 2
SetRelativeHumidity
Arg. 1
SetMeanRadiant
Temperature
Arg. 1
Arg. 1
SetClothingIndex
Arg. 1
SetVelocity
Arg. 1
Table 4.11 shows methods to get a state of the human body. These are the methods to get information
about whole body. To get detailed information of particular body part, get BodyPart object by GetBodyPart
method, and use methods defined in BodyPart class.
Table 4.11 Members of the HumanBody class : Methods to get state of human body
Name
GetBloodFlow
GetSensibleHeatLossFromSkin
GetLatentHeatLossFromSkin
GetMetabolicRate
Description
Function
Return
Function
Return
Function
Return
Function
Return
GetAverageSkinTemperature
Function
Return
-25-
Table 4.12 shows method to get a state of body part. To specify detailed position of body part, use
Segments enumerator. Table 4.13 shows members of Segment enumerator.
Table 4.12 The methods defined in BodyPart class
Name
Description
Description Calculate sensible heat loss [W] from the skin.
GetSensibleHeatLoss
Return
Return
Arg.1
Return
Arg.1
Description
GetHeatConductance
Return
Arg.1
Get heat conductance [W/K] between the segments. If the segments are not contacted, 0 is
returned.
Heat conductance [W/K] between the segments.
Segment 1 (Segments object)
Arg.2
Return
Arg.1
Return
Arg.1
Return
Arg.1
Arg.2
Description
Name
Description
Core
Core layer
Artery
Artery
Muscle
Muscle layer
SuperficialVein
Superficial vein
Fat
Fat layer
DeepVein
Deep vein
Skin
Skin layer
AVA
AVA blood
Figure 4.4 shows a sample program which calculates thermal state of human body.
In the line 8, HumanBody object is initialized. It is the model of female and the weight, height, age and
cardiac index are 70kg, 1.6m, 35, 2.58 L/(min m2) respectively.
In the line 10 to 19, the boundary conditions are given. This is the code to set boundary conditions
simultaneously to whole body parts. To set boundary conditions individually to each body part, give BodyParts
object as a first argument as line 22. In this case, dry-bulb temperature just around right hand settled at 20 C.
The state of body is updated in the line 28. The time step is 120 seconds. The elapse of the time is 30
minutes, since the Update method is called 16 times. Of course, the boundary conditions can be changed at each
iteration.
-26-
In the line 29 and 30, the left and the right shoulder objects are taken out to get information. The
temperatures of the core layer and the skin layer is calculated. They are written to the standard output stream.
Figure 4.5 shows the result of the simulation. The body temperature became higher as the time past. Since
the dry-bulb temperature around the right hand settled at 20C, the temperature of the right shoulder was lower
than that of the left shoulder.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Console.Read();
Figure 4.4 The sample program which calculates thermal state of human body
Time | R.Shoulder C temp | R.Shoulder S temp | L.Shoulder C temp | L.Shoulder S temp
120sec | 35.89 | 35.70 | 35.89 | 35.74 |
240sec | 35.91 | 36.07 | 35.92 | 36.17 |
360sec | 35.93 | 36.20 | 35.96 | 36.35 |
480sec | 35.96 | 36.21 | 36.02 | 36.38 |
600sec | 35.99 | 36.17 | 36.07 | 36.36 |
720sec | 36.02 | 36.13 | 36.12 | 36.32 |
840sec | 36.05 | 36.10 | 36.17 | 36.28 |
960sec | 36.08 | 36.08 | 36.22 | 36.26 |
1080sec | 36.11 | 36.06 | 36.27 | 36.24 |
1200sec | 36.14 | 36.05 | 36.31 | 36.22 |
1320sec | 36.17 | 36.04 | 36.35 | 36.21 |
1440sec | 36.19 | 36.03 | 36.38 | 36.20 |
1560sec | 36.21 | 36.03 | 36.41 | 36.20 |
1680sec | 36.24 | 36.03 | 36.44 | 36.19 |
1800sec | 36.26 | 36.02 | 36.47 | 36.19 |
-27-
Description
Incline
Sky
Sun
WeatherData
WeatherDataTable
WeatherRecord
Incline class
To calculates nocturnal radiation or radiation from sun, 3 dimensional positioning between plane and
point should be clearly defined. An incline can be defined with horizontal vertical angle. The Incline class takes
these 2 value as an arguments of constructor. The constructor of Incline is overloaded, and there are 3 kinds of
arguments as shown in Table 5.2.
Table 5.2 The arguments of Incline constructors
No.
Argument 1
Argument 2
Orientation
(Orientation object)
Incline to copy
(ImmutableIncline object)
The first argument of the second constructor is Orientation object which is defined in Incline class. It can
express 16 orientations (N, NNW, NW, WNW, W, WSW, SW, SSW, S, SSE, SE, ESE, E, ENE, NE, NNE).
Vertical angle of incline is expressed by radian, where horizontal surface is 0 and vertical surface is 1/2.
The third constructor is a copy constructor. With calling third constructor, Incline object is initialized with
the given ImmutableIncline object.
Table 5.3 and table 5.4 shows the methods and properties defined in the Incline class.
Table 5.3 The properties defined in the Inline class
Name
ConfigurationFactorToSky
HorizontalAngle
VerticalAngle
Description
Unit
Type
double
Radian
South is 0, west is negative,
east is positive
double
Radian
Horizontal surface is 0, vertical
surface is 1/2
double
-28-
Description
Description Calculate cosine of incident angle to the normal direction of the inclined plane.
GetDirectSolarRadiationRate
Return
Arg.1
Description
Calculate profile angle and angle between solar azimuth and normal direction of the
inclined plane.
Return
GetTanPhiAndGamma
Arg.1
Arg.2
Arg.3
Output :Tangent of angle between solar altitude and normal direction of the inclined plane
Reverse
Return
To calculate a radiation from sun, 3D positional relation between sun and incline (Figure 5.1).
is an angle between solar azimuth and normal direction of the inclined plane. is an angle between
solar altitude and normal direction of the inclined plane. is called profile angle. and can be obtained by
GetTanPhiAndGamma method. The first argument is a Sun object, which will be described later in section 5.2.3.
The 2nd and 3rd argument are the outputs, tangent and tangent .
is an angle between incident angle and the normal direction of the inclined plane. can be obtained by
GetDirectSolarRadiationRate method. The first argument is a Sun object. The returned value is cosine . This
value is used when calculate an insolation on the inclined plane from the direct normal radiation.
The inclined plane can be reversed with calling Reverse method.
-29-
5.2.2
Sky class
Various static methods related to sky state are defined in the Sky class. Table 5.5 shows the methods
defined in the Sky class.
Table 5.5 The methods defined in the Sky class
Name
Description
Description Convert an unit of angle from degree to radian
DegreeToRadian
Return
Angle [radian]
Arg.1
Angle [degree]
Return
Arg.1
Arg.3
Arg.2
Arg.2
Return
Arg.1
Arg.3
Return
Angle [degree]
Arg.1
Angle [radian]
Arg.1
Arg.2
Longitude [degree] (double)
Arg.3
Longitude of the standard time meridian
[degree]
Copy constructor
(ImmutableSun)
An argument of the second constructor is City enumerator defined in the Sun class. More than 100 cities
in the world are defined. A Sun object is initialized with longitude and latitude where the city is located. Below is
a sample constructor call.
Sun sun = new Sun(Sun.City.Tokyo);
-30-
2)
Static methods
Some basic methods related to sun position or solar radiation are defined in Sun class. Table 5.7 and Table
5.8 shows the static methods defined in the Sun class.
Table 5.7 The static methods related to sun position
Name
Description
Description Caluculate an equation of the time.
GetEquationOfTime
Return
Arg.1
Description Calculate hour angle from the location and the equation of the time.
GetHourAngle
Return
Hour angle []
Arg.1
Arg.2
Longitude [degree]
Arg.3
Arg.4
Return
Arg.1
Latitude [degree]
Arg.2
Longitude [degree]
Args3
Arg.4
Return
Arg.1
Latitude [degree]
Arg.2
Longitude [degree]
Arg.3
Arg.4
Return
Arg.1
.GetSunPosition
Return
Arg.1
Latitude [degree]
Arg.2
Longitude [degree]
Arg.3
Arg.4
Arg.5
Arg.6
Return
Arg.1
Latitude [degree]
Arg.2
Longitude [degree]
Arg.3
Arg.4
Return
Arg.1
Latitude [degree]
Arg.2
Longitude [degree]
Arg.3
Arg.4
-31-
Description
Description Calculate extraterrestrial radiation [W/m2]
GetExtraterrestrial
Radiation
Return
Arg.1
Description
GetDirectNormalRadiation
Return
Arg.3
Return
Calculate diffuse horizontal radiation [W/m ] from diract normal radiation [W/m2] and global
horizontal radiation [W/m2].
Diffuse horizontal radiation [W/m2]
Direct normal radiation [W/m2]
Arg.3
Arg.2
-
Calculate global horizontal radiation from diffuse horizontal radiation [W/m2] and direct
normal radiation [W/m2]
Return
Arg.1
Arg.3
Arg.2
-
Estimate diffuse horizontal radiation and direct normal radiation from global horizontal
radiation.
Return
EstimateDiffuseAnd
DirectNormalRadiation
Arg.2
-
Arg.1
Description
Calculate direct normal radiation from global horizontal radiation [W/m2] and diffuse
horizontal radiation [W/m2]
Description
GetGlobalHorizontal
Radiation
Arg.1
Description
GetDiffuseHorizontal
Radiation
Arg.1
Arg.2
Longitude [degree]
Arg.3
Latitude [degree]
Arg.4
Arg.5
Arg.6
Estimating Method
Arg.7
Output :
Direct normal radiation [W/m2]
Arg.8
The value of latitude and longitude are given by degree unit (not radian). East longitude is positive value
and west longitude is negative. North latitude is positive value and south latitude is negative. For example, the
arguments for Tokyo city (lies at 139.45 east in longitude and 35.4 north in latitude) are 139 + 45/60 = 139.75
and 35 + 4 / 60 = 35.07. The arguments for Rio de Janeiro (lies at 22.57 west in longitude and 43.12 south in
latitude) are -22 - 57/60 = -22.95 and -43 - 12/60 = -43.2.
In most cases, a climate observatory measures only the global horizontal radiation, and the direct normal
radiation and the diffuse horizontal radiation are not measured. Therefore, many people proposed methods to
estimate the direct normal radiation and the diffuse horizontal radiation from the global horizontal radiation 6) 7) 8) 9).
In the Sun class, EstimateDiffuseAndDirectNormalRadiation method is defined. User can select estimating
method by setting DiffuseAndDirectNormalRadiationEstimatingMethod enumerator for the 6th argument. 6
methods, the method of Berlage 10), Matsuo11), Nagata12), Liu & Jordan13), Udagawa & Kimura14), Watanabe15),
Akasaka16) and Miki17), can be selected.
-32-
3)
Table 5.9 shows the properties defined in the Sun class. Value of the properties except radiations
(DiffuseHorizontalRadiation, DirectNormalRadiation and GlobalHorizontalRadiation) can be determined when
the location and the date and time information is given. The location is given as an argument of the constructor.
The date and time information can be given by Update method. The DateTime object is given as an argument.
sun.Update(dateTime);
Table 5.9 The properties defined in Sun class
Name
Altitude
CurrentDateTime
DiffuseHorizontalRadiation
DirectNormalRadiation
GlobalHorizontalRadiation
Latitude
Longitude
Orientation
Description
Unit
Type
Altitude of sun
TRUE
radian
double
DateTime
TRUE
W/m2
double
TRUE
double
W/m
TRUE
W/m
double
Latitude of sun
degree
double
Longitude of sun
degree
double
Orientation of sun
radian
double
uint
degree
double
SunRiseTime
DateTime
SunSetTime
DateTime
Revision
StandardLongitude
Three values of radiation, the global horizontal radiation, the diffuse horizontal radiation and the direct
normal radiation are related to each other. The value of one can be estimated when the rest of two value are given
(Figure 5.2). Table 5.10 shows static methods to calculate these radiations.
Table 5.10 The methods to calculate a value of radiations
Name
Arg.1
Arg.2
SetDiffuseHorizontalRadiation
SetGlobalHorizontalRadiation
SetDirectNormalRadiation
Ihol=Isky+IDN sin
Direct normal
radiation IDN
Diffuse horizontal
radiation Isky
Global horizontal radiation Ihol
-33-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Console.Read();
-34-
Description
GlassPanes
IHeatGain
MultiRoom
The MultiRoom class is a model of a multi-room. A multi-room consists of more than two rooms that are
sepalated by a wall.
Outdoor
The Outdoor class is a model of an outdoor (It includes an information about sun position, moist air
state, etc.).
Room
The Room class is a model of a single room. A room consists of more than two zones, that are not
sepalated by a wall (ex. Interior zone and perimetor zone).
SunShade
The SunShade class is a model of a sun shade. Only simple shaped sun shade (Horizontal, vertical or
gird) could be modeled with this class.
Wall
WallLayers
WallMaterial
WallSurface
The WallSurface class is a model of a wall surface. It contains information about emissivity and inclined
degree of wall surface.
Window
WindowSurface
The WindowSurface class is a model of window surface. It contains information about emissivity and
inclined degree of window surface.
Zone
The Zone class is a model of a single zone. A zone consists of wall surfaces and window surfaces.
<<interface>>
ImmutableZone
<<interface>>
ImmutableWallLayers
WallLayers
<<interface>>
IHeatGain
1
Wall
Zone
Window
WallSurface
*
*
Outdoor
1
<<interface>>
ImmutableWall
*
Layer
<<interface>>
ImmutableWindow
WallMaterial
<<interface>>
ImmutableWallMaterial
<<interface>>
ImmutableWallSurface
2
<<interface>>
ImmutableSun
Sun
<<interface>>
ImmutableMoistAir
Incline
<<interface>>
ImmutableIncline
MoistAir
Figure 6.1 The UML diagram of classes relating to Popolo.ThermalLoad name space
-35-
GlassPanes class
GlassPanes class expresses one or more glass layers. It calculates a characteristics of a window.
Two kinds of the constructor is defined in GlassPanes class. Table 6.2 shows the constructors of the
GlassPanes class. The first constructor is the simplified one, which directly set the information about window
characteristics (Overall transmissivity, overall absorptivity and heat transfer coefficient). The resistances at
surfaces are not involved in heat transfer coefficient (arg. 3).
The second constructor is the detailed option, which calculates inter-reflection of glass panes. In this case,
the lists of the GlassPanes.Pane class is given as an argument.
Table 6.2 The constructors of the GlassPanes class
No.
Argument 1
Argument 2
Argument 3
There are three types of heat gains through the window of a building. The first is the transmission heat
gain, the second is the absorption heat gain, and the last is the transfer heat gain (Figure 6.2). The solar incident
falling on the window is partly reflected, partly absorbed and partly transmitted by the window glass. The
absorbed heat partly go back to outdoor, and the rest infiltrate into the building. We call this infiltration rate to the
solar incident as overall absorptivity.
Transmittance
Reflectance
Absorptance
Heat transfer
If a window consists of a single glass pane, overall transmissivity and overall absorptivity is equal to the
transmissivity and the absorptivity of the single glass pane. If a window consists of more than one glass pane,
detailed calculation is needed, since there occurs inter reflections among the glass panes. To calculate this
phenomenon, use the second constructor of the GlassPanes class. The GlassPanes.Pane class is a model of a
single glass pane which is the inner class of the GlassPanes class. Table 6.3 shows constructors of the
GlassPanes.Pane class.
Table 6.3 The constructors of the GlassPanes.Pane
No.
Argument 1
Argument 2
Argument 3
Argument 4
Argument 5
Transmissivity [-]
(double type)
Absorptivity [-]
(double type)
Absorptivity of outer
Transmissivity of inner
side [-] (double
side [-] (double type)
type)
-36-
Absorptivity of inner
side [-] (double type)
-
In some glass panes, transmissivity and absorptivity of a surface is different from that of the opposite side
surface. In this case, the second constructor should be used.
Some commonly-used glass panes are already defined in GlassPanes.Pane class. To make these glass
panes, use the third constructor. The PredifinedGlassPane enumerator type is given as an argument.
By giving a GlassPanes.Pane array (The number of elements is M) to GlassPanes constructor, Overall
transmissivity and overall reflectivity of the M layered glass panes are calculated according to equation 6.1 to 6.5.
th
Where T(M) is overall transmissivity, T(M) is overall reflectivity and T(M)n is absorptivity of n layer. The first
element of array is the inside glass pane and the last element of array is the outside glass pane.
T m =T m 1 X r
(6.1)
T m = Lm Rm T m1 X r
(6.2)
T m n=T m1 n X r
(6.3)
T m n= LmLm Rm T m1 X r
(6.4)
X r=
Lm
=
=
T 1 1=1 L 1 L1
1Rm T m 1 , T 1 L 1 , T 1 L1 ,
(6.5)
The thermal transmittance and the overall absorptivity of the glass panes can be calculated by equation
6.6 to 6.8.
M 1
1
1
K GS=1 /
{ Ra m Rg m }
i m=0
o
(6.6)
B= f m T m
(6.7)
m=1
f m=1K GS
m1
1
{ R a n R g n }
i
n=0
(6.8)
KGS : Thermal transmittance of the glass panes [W/(m2 K)], Ra : resistance of the air gap [(m2 K)/W]
Rh : resistance of the glass pane [(m2 K)/W], fm : infiltration rate of absorbed heat gain at mth layer into a room
o : film coefficient at outside glass surface [W/(m2 K)], i : film coefficient at inside glass surface [W/(m2 K)]
B : overall heat absorptivity of glass panes [-]
Description
Unit
Type
double[]
AngularDependenceCoefficients
TRUE
ConvectiveRate
TRUE
double
ThermalTransmittanceOfGlass
W/(m2K)
double
LongWaveEmissivity
TRUE
double
OverallAbsorptivity
Overall absorptivity
ThermalTransmittance
OverallTransmissivity
Overall transmissivity
RadiativeRate
-37-
double
2
W/(m K)
double
double
TRUE
double
D N
= Ai cos i
N
i=1
(6.9)
N : transmissivity when the solar incident angle is 90 degree [-], D : transmissivity when the solar incident angle is degree [-]
Ai : coefficients to calculate angular dependence of the solar heat gain [-]
1.0
0.8
0.6
0.4
0.2
0.0
0
10 20 30 40 50 60 70 80 90
Incident angle [degree]
ConvectiveRate and RadiativeRate properties shows the convective and the radiative rate of a heat gain.
These properties takes value between 0 to 1.
LongWaveEmissivity is used to calculate a heat loss by a nocturnal radiation.
Film coefficients at surfaces are not involved in HeatTransferCoefficientOfGlass.
Table 6.5 shows methods defined in GlassPanes class.
Table 6.5 The methods defined in the GlassPanes class
Name
Description
Description Copy other GlassPanes object
Copy
Return
Arg.1
Return
Arg.1
2-
Return
Arg.1
Arg.2
2-
Return
Arg.1
2-
2-
Return
Arg.1
2-
-38-
If glass panes consist of more than one pane, heat transfer coefficients of air gaps must be given by
SetHeatTransferCoefficientsOfAirGaps method.
Figure 6.4 shows a sample program which calculates the characteristics of a glass panes. Triple layered
glass panes are created and some characteristics are written to the standard output stream. .
Three transparent glasses are created in the line 4 to 10. A instance of the GlassPanes class is created in
the line 13 with these transparent glasses. The heat transfer coefficients of air gap and the film coefficients at the
glass surface are initialized in the line 16 to 21. In the line 24 to 28, the characteristics of the glass panes are
written to the standard output stream.
The outside glass pane is replaced by heat reflecting glass in the line 32 for comparison of characteristics.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Console.Read();
Figure 6.4 The sample program which calculates the characteristics of a glass panes
-39-
Figure 6.5 shows the result of the simulation. The transmissivity of the second glass panes is smaller than
that of the first glass panes, since the reflectivity of the heat reflecting glass is bigger than the normal transparent
glass.
Transparent glass(3mm) * 3
Overall transmissivity[-] = 0.50
Overall absorptivity[-] = 0.13
Heat transmission coefficient of glass[-] = 3.80
Heat transmission coefficient[-] = 2.42
Heat reflecting glass(6mm)
Transmissivity[-] = 0.60
absorptivity[-] = 0.10
Reflectivity[-] = 0.30
Heat reflecting glass(6mm) + Transparent glass(3mm) * 2
Overall transmissivity[-] = 0.39
Overall absorptivity[-] = 0.11
Heat transmission coefficient of glass[-] = 3.70
Heat transmission coefficient[-] = 2.37
-40-
6.2.2
Window class
The Window class is a model of a window. It is initialized by GlassPanes object described in the section
6.2.1. Table 6.6 shows the constructors of the Window class.
Table6.6 The constructors of the Window class
No.
Argument 1
Argument 2
Argument 3
The second argument of the constructor is a Incline object described in the section 5.2.1. The third
argument is a SunShade object which calculates a shading rate of the window. The SunShade class will be
described later in the section 6.2.4.
Table 6.7 shows the properties defined in the Window class.
Table 6.7 The properties defined in the Window class.
Name
Unit
Type
double
Albedo
TRUE
double
ConvectiveHeatGain
double
Glass
Multi-layered glass
ImmutableGlassPanes
IndoorDrybulbTemperature
TRUE
double
IndoorSurfaceTemperature
AbsorbedHeatGain
Albedo
NocturnalRadiation
OutdoorDrybulbTemperature
OutdoorSideIncline
OutdoorSurfaceTemperature
RadiativeHeatGain
Shade
ShadowRate
Sun
Description
double
2
Nocturnal radiation
TRUE
W/m
double
TRUE
double
ImmutableIncline
double
double
TRUE
ImmutableSunShade
Shadow rate
TRUE
double
Sun
TRUE
ImmutableSun
SurfaceArea
TRUE
m2
double
TransferHeatGain
double
TransmissionHeatGain
double
RadiativeHeatGain.
Figure 6.6 shows a sample program which calculates the heat gain from a window.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/// <summary>Sample program calculating the heat gain from the window</summary>
private static void windowTest()
{
//A sample weather data
//direct normal radiation [W/m2]
double[] wdIdn = new double[] { 0, 0, 0, 0, 0, 244, 517, 679, 774, 829, 856, 862, 847, 809, 739, 619, 415, 97, 0, 0, 0, 0, 0, 0 };
//diffuse horizontal radiation [W/m2]
double[] wdIsky = new double[] { 0, 0, 0, 0, 21, 85, 109, 116, 116, 113, 110, 109, 111, 114, 116, 114, 102, 63, 0, 0, 0, 0, 0, 0 };
//drybulb temperature [C]
double[] wdDbt = new double[] { 27, 27, 27, 27, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 34, 33, 32, 32, 31, 30, 29, 29, 28, 28 };
//nocturnal radiation [W/m2]
double[] wdRN = new double[] { 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24 };
//Create a window with a single 3mm transparent glass pane
GlassPanes.Pane pane = new GlassPanes.Pane(GlassPanes.Pane.PredifinedGlassPane.TransparentGlass03mm);
GlassPanes glassPane = new GlassPanes(pane);
Window window = new Window(glassPane);
//Set wall surface information
WindowSurface outsideWindowSurface = window.GetSurface(true);
outsideWindowSurface.FilmCoefficient = 23d;
outsideWindowSurface.Albedo = 0.2;
WindowSurface insideWindowSurface = window.GetSurface(false);
insideWindowSurface. FilmCoefficient = 9.3;
//Set incline of an outdoor surface : South, vertical incline
window.OutSideIncline = new Incline(Incline.Orientation.S, 0.5 * Math.PI);
//There is no sun shade
window.Shade = SunShade.EmptySunShade;
//Initialize sun. Tokyo : 7/21 0:00
Sun sun = new Sun(Sun.City.Tokyo);
DateTime dTime = new DateTime(2001, 7, 21, 0, 0, 0);
sun.Update(dTime);
window.Sun = sun;
//Indoor drybulb temperature is constant (25C)
window.IndoorDrybulbTemperature = 25;
//Result : Title line
Console.WriteLine(" Time |Transmission[W]|Absorption[W]|Transfer[W]|Convective[W]|Radiative[W]");
//execute simulation
for (int i = 0; i < 24; i++)
{
//Set radiations (calculate global horizontal radiation from direct normal and diffuse horizontal radiation)
sun.SetGlobalHorizontalRadiation(wdIsky[i], wdIdn[i]);
//Set nocturnal radiation
window.NocturnalRadiation = wdRN[i];
//Set outdoor temperature
window.OutdoorDrybulbTemperature = wdDbt[i];
//Output result
Console.WriteLine(dTime.ToShortTimeString().PadLeft(5) + " | " + window.TransmissionHeatGain.ToString("F1").PadLeft(13) + " | " +
window.AbsorbedHeatGain.ToString("F1").PadLeft(11) + " | " + window.TransferHeatGain.ToString("F1").PadLeft(9) + " | " +
window.ConvectiveHeatGain.ToString("F1").PadLeft(11) + " | " + window.RadiativeHeatGain.ToString("F1").PadLeft(11));
}
}
//Update time
dTime = dTime.AddHours(1);
sun.Update(dTime);
Console.Read();
Figure 6.6 The sample program which calculates the heat gain from the window
-42-
The arrays declared in the line 4~12 is a sample weather data. These are the value of direct normal
radiation, diffuse horizontal radiation, drybulb temperature and nocturnal radiation of one day.
An instance of the GlassPanes class is created in the line 15 and 16. The transparent 3mm glass pane is
created. A Window object is initialized with this GlassPanes object in the line 17.
A WindowSurface object is used to set surface state in the line 20~24. Overall heat transfer coefficients
and albedo are set to WindowSurface object. Albedo is solar radiation reflectivity of ground surface. In urban
areas, value of albedo is around 0.2.
Outdoor surface incline is set in the line 27. It is the south vertical window.
The sun shade is set in the line 30. In this sample, the window has no sun shade. The SunShade class will
be described late in the section 6.2.4.
A instance of Sun class is created in the line 33~36. The location is Tokyo and the date is 7/21. It is 0:00
at the beginning of the simulation. The line from 45 to 62 is the iteration. It iterates 24 times to simulate 24 hours.
The three boundary conditions, solar radiation, nocturnal radiation and drybulb temperature is set in the
line 47~52. The heat gains from the window is calculated since boundary conditions are fixed. All the heat gains
are written to the standard output stream in the line 55~57. Finally, in the line 60 and 61, 1 hour is added to update
the position of the sun.
Figure 6.7 shows the result of the simulation.
Time | Transmission[W] | Absorption[W] | Transfer[W] | Convective[W] | Radiative[W]
0:00 |
0.0 |
0.0 |
12.9 |
5.8 |
7.1
1:00 |
0.0 |
0.0 |
12.9 |
5.8 |
7.1
2:00 |
0.0 |
0.0 |
12.9 |
5.8 |
7.1
3:00 |
0.0 |
0.0 |
12.9 |
5.8 |
7.1
4:00 |
9.7 |
0.3 |
13.2 |
6.0 |
7.4
5:00 |
40.3 |
1.1 |
20.4 |
9.7 |
11.8
6:00 |
60.4 |
1.6 |
27.4 |
13.0 |
15.9
7:00 |
77.0 |
2.0 |
34.3 |
16.3 |
20.0
8:00 |
91.7 |
2.4 |
41.2 |
19.6 |
24.0
9:00 |
134.4 |
3.5 |
48.7 |
23.5 |
28.7
10:00 |
190.5 |
5.0 |
50.2 |
24.8 |
30.4
11:00 |
229.5 |
6.0 |
57.7 |
28.7 |
35.0
12:00 |
236.3 |
6.2 |
57.9 |
28.8 |
35.2
13:00 |
208.2 |
5.4 |
57.1 |
28.2 |
34.4
14:00 |
154.5 |
4.0 |
62.2 |
29.8 |
36.4
15:00 |
97.9 |
2.6 |
54.2 |
25.6 |
31.2
16:00 |
64.8 |
1.7 |
46.9 |
21.9 |
26.7
17:00 |
31.9 |
0.8 |
46.1 |
21.1 |
25.8
18:00 |
0.0 |
0.0 |
38.8 |
17.4 |
21.3
19:00 |
0.0 |
0.0 |
32.3 |
14.5 |
17.8
20:00 |
0.0 |
0.0 |
25.8 |
11.6 |
14.2
21:00 |
0.0 |
0.0 |
25.8 |
11.6 |
14.2
22:00 |
0.0 |
0.0 |
19.4 |
8.7 |
10.7
23:00 |
0.0 |
0.0 |
19.4 |
8.7 |
10.7
-43-
6.2.3
AirFlowWindow class
************
6.2.4
SunShade class
The SunShade class is a model of a sun shade. Figure 6.8 shows the shapes of the sun shade that can be
treated by SunShade class. To create these shaped sun shades, some static methods are defined in the SunShade
class. These static methods must be used to create an instance of the SunShade class, since SunShade class doesn't
have constructor. There is special static member, EmptySunShade property, to express empty sun shade.
Table 6.8 shows the properties defined in the SunShade class. Most of the properties are read only
property.
Incline is described in the section 5.2.1. SunShade class can calculate a shadow rate at inclined plane like
roof skylight.
An opening area can be reversed with IsReverse property. If the IsReverse property is true, the opening
area is treated as the sun shade and the sun shade is treated as opening area. For example, we can calculate shadow
rate of a dry area by reversing the horizontal sun shade (Figure 6.9).
Horizontal sunshade
leftMargin
topMargin
Side wall
topMargin
rightMargin
left
Margin
windowHeight
right
Margin
windowWidth
bottomMargin
Grid
Pendent
pendent
topMargin
left
Margin
right
Margin
bottomMargin
-44-
Sun shade
Opening area
Description
Unit
Type
Bottom margin
double
Incline
TRUE
ImmutableIncline
IsReverse
TRUE
bool
LeftMargin
double
Name
TRUE
string
OverHang
Length of overhang
double
double
Shape type
SunShade.Shape
TopMargin
double
WindowHeight
double
WindowWidth
double
BottomMargin
Incline
RightMargin
SunShadeShape
-45-
Description
Function
Return
MakeGridSunShade
Arg.2
Arg.3
Arg.4
Arg.5
Arg.6
Arg.7
Arg.8
Incline
Function
Arg.2
Arg.3
Arg.4
Arg.5
Arg.6
Arg.7
Incline
Return
Arg.3
Arg.4
Arg.5
Incline
Arg.1
Arg.2
Arg.3
Arg.4
Arg.5
Arg.6
Arg.7
Arg.8
Incline
Return
Arg.1
Arg.2
Arg.3
Arg.4
Arg.5
Arg.6
Incline
Function
Return
Arg.1
Arg.2
Arg.3
Arg.4
Arg.5
Arg.6
Arg.7
Incline
Function
Return
MakeVerticalSunShade
Function
MakeVerticalSunShade
Return
MakeVerticalSunShade
Arg.1
Function
MakeVerticalSunShade
Arg.1
Function
MakeHorizontalSunShade
Arg.1
Return
MakeHorizontalSunShade
Arg.1
Arg.2
Arg.3
Arg.4
Arg.5
Incline
-46-
6.2.5
WallLayers class
The most of the building walls consist of more than one materials (structure, insulation and covering
material). The WallLayers class is a model of a multi layered wall. Table 6.10 and 6.11 shows the properties and
methods defined in the WallLayers class.
Each layer can be added or removed by AddLayer method and RemoveLayer method. After the
composition of the wall layer is fixed, thermal transmission of the wall layer can be calculated by
GetThermalTransmission method.
WallLayers.Layer class is defined in the WallLayers class to make a single wall layer. Figure 6.12 shows
the constructors of the WallLayers.Layer class. The wall layer should be split when the layer is very thick.
Table 6.10 The properties defined in the WallLayers class
Name
LayerNumber
Name
Description
Unit
Type
Number of layers
uint
Name
TRUE
string
Description
Function
GetThermalTransmission
Return
Arg.1
Function
GetThermalTransmission
Return
Arg.1
Function
UsingMaterial
Return
Arg.1
Function
AddLayer
Function
GetLayer
Function
Arg.2
Arg.2
Arg.2
Arg.2
Return
Arg.1
Return
Arg.1
Function
ReplaceLayer
Return
Arg.1
Arg.1
RemoveLayer
Arg.2
Return
Function
GetLayer
Return
Arg.1
Arg.2
-47-
Arg.2
Argument 1
Argument 2
Argument 3
Argument 1
Argument 2
Argument 3
volumetric specific heat [kJ/(m3 K)]
(double type)
Description
Unit
Type
predefined material
WallMaterial.PredifinedMaterials
Name
TRUE
string
TRUE
W/(m K)
thermal conductivity
volumetric specific heat
TRUE
kJ/(m K)
double
double
The thermal transmission [W/(m K)] of a wall can be calculated from thermal conductivity [W/(m K)]
and thickness [m] of each wall layer according to equation 6.10.
K =1/
1
l
1
1
1 C air 2
K : thermal transmittance of a wall [W/(m2 K)], 1 : film coefficient at wall surface 1 [W/(m2 K)]
2 : film coefficient at wall surface 2 [W/(m2 K)], : thermal conductivity [W/(m K)], l : thickness [m]
Cair : heat conductance of air layer [W/(m2 K)]
-48-
(6.10)
thermal
conductivity
1.512
1.6
0.81
0.58
0.17
0.62
0.99
370.1
200
53.01
35.01
15
1
0.17
0.12
0.15
0.19
0.19
0.1
0.17
0.17
0.15
0.17
0.6
0.7
0.69
0.12
0.11
1.3
0.19
0.05
0.045
0.038
0.036
0.038
0.036
0.052
0.052
0.04
0.04
0.038
0.038
0.036
0.047
0.051
0.058
volumetric
specific heat
1591
1896
1900
1599
661.4
1386
1553
3144
2428
3759
1469
3479
1914
1023
519.1
648.8
845.6
716
841.4
1679
1233
715.8
1030
1637
1093
1126
4.2
527.4
2018
4.2
8.4
13.4
20.1
26.8
13.4
20.1
10.9
16.7
29.3
37.7
33.5
41.9
58.6
20.9
29.3
293.9
Name
SprayedRockWool
BeadMethodPolystyreneFoam_S
BeadMethodPolystyreneFoam_1
BeadMethodPolystyreneFoam_2
BeadMethodPolystyreneFoam_3
BeadMethodPolystyreneFoam_4
ExtrudedPolystyreneFoam_1
ExtrudedPolystyreneFoam_2
ExtrudedPolystyreneFoam_3
RigidUrethaneFoam_1_1
RigidUrethaneFoam_1_2
RigidUrethaneFoam_1_3
RigidUrethaneFoam_2_1
RigidUrethaneFoam_2_2
RigidUrethaneFoam_2_3
RigidUrethaneFoam_InSite
PolyethyleneFoam_A
PolyethyleneFoam_B
PhenolicFoam_1_1
PhenolicFoam_1_2
PhenolicFoam_2_1
PhenolicFoam_2_2
InsulationBoard_A
TatamiBoard
SheathingInsulationBoard
CelluloseFiberInsulation_1
CelluloseFiberInsulation_2
Soil
ExpandedPolystyrene
CoveringMaterial
Linoleum
Carpet
AsbestosPlate
SealedAirGap
AirGap
PolystyreneFoam
StyreneFoam
RubberTile
Kawara
LightweightConcrete
Asphalt
FrexibleBoard
CalciumSilicateBoard
PhenolicFoam
GNT
AcrylicResin
thermal
conductivity
0.047
0.034
0.036
0.037
0.04
0.043
0.04
0.034
0.028
0.024
0.024
0.026
0.023
0.023
0.024
0.026
0.038
0.042
0.033
0.03
0.036
0.034
0.049
0.045
0.052
0.04
0.04
1.047
0.035
0.14
0.19
0.08
1.2
5.8
11.6
0.035
0.035
0.4
1
0.78
0.11
0.35
0.13
0.02
4.3
0.21
volumetric
specific heat
167.9
33.9
37.7
31.4
25.1
18.8
25.1
25.1
25.1
56.1
44
31.4
56.1
44
31.4
49.8
62.8
62.8
37.7
37.7
56.5
56.5
324.8
15.1
390.1
37.7
62.8
3340
300
1680
1470
318
1820
0
0
80
10
784
1506
1607
920
1600
680
37.7
2.9
1666
Figure 6.9 shows a sample program which calculates the thermal transmission of a multi-layered wall.
The wall layers consists of plywood, air gap, reinforced concrete and white wash. These materials are
created in the line 7~16. The first three materials are created with using PredefinedMaterials enumerator. The last
material (white wash) is created by giving thermal conductivity and volumetric specific heat directly to the
constructor (line 16).
A instance of the WallLayers.Layer class is created in the line 18~26. The thickness of each layer is
20mm, 10mm, 150mm and 10mm. Although heat conductance of the air gap doesn't depends on the thickness.
The name and thickness of each layer and the thermal transmission of the wall layers are written to
standard output stream in the line 28~36.
The reinforced concrete layer is replaced by lightweight concrete in the line 39 for comparison.
Figure 6.11 shows the result of the simulation.
-49-
/// <summary>Sample program calculating the thermal transimission of the wall layers</summary>
private static void wallLayersTest()
{
//Create an instance of WallLayers
WallLayers wLayers = new WallLayers("Sample wall layer");
//Make an array of materials
WallMaterial[] materials = new WallMaterial[4];
//The first layer : plywood
materials[0] = new WallMaterial(WallMaterial.PredefinedMaterials.Plywood);
//The second layer : air gap
materials[1] = new WallMaterial(WallMaterial.PredefinedMaterials.AirGap);
//The thirg layer : concrete
materials[2] = new WallMaterial(WallMaterial.PredefinedMaterials.ReinforcedConcrete);
//The fourth layer : white Wash
materials[3] = new WallMaterial("White Wash", 0.7, 1000);
//Add a layer to WallLayers object
//plywood : 20mm
wLayers.AddLayer(new WallLayers.Layer(materials[0], 0.02));
//air gap : heat conductance doesn't depend on thickness
wLayers.AddLayer(new WallLayers.Layer(materials[1], 0.01));
//concrete : 150mm
wLayers.AddLayer(new WallLayers.Layer(materials[2], 0.15));
//white Wash : 10mm
wLayers.AddLayer(new WallLayers.Layer(materials[3], 0.01));
//output result
Console.WriteLine("Wall composition");
for (uint i = 0; i < wLayers.LayerNumber; i++)
{
WallLayers.Layer layer = wLayers.GetLayer(i);
Console.WriteLine("Layer " + (i + 1) + "" + layer.Material.Name + "(" + layer.Thickness + "m)");
}
Console.WriteLine("Thermal transmission = " + wLayers.GetThermalTransmission().ToString("F1") + " W/(m2-K)");
Console.WriteLine();
//Replace concrete to light weight concrete
wLayers.ReplaceLayer(2, new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.LightweightConcrete), 0.15));
//output result
Console.WriteLine("Wall composition");
for (uint i = 0; i < wLayers.LayerNumber; i++)
{
WallLayers.Layer layer = wLayers.GetLayer(i);
Console.WriteLine("Layer " + (i + 1) + "" + layer.Material.Name + "(" + layer.Thickness + "m)");
}
Console.WriteLine("Thermal transmission = " + wLayers.GetThermalTransmission().ToString("F1") + " W/(m2-K)");
Console.WriteLine();
}
Console.Read();
Figure 6.10 The sample program which calculates thermal transmission of the wall layers
Wall composition
Layer 1Plywood(0.02m)
Layer 2Air Gap(999m)
Layer 3Reinforced Concrete(0.15m)
Layer 4White Wash(0.01m)
Thermal transmission = 3.3 W/(m2-K)
Wall composition
Layer 1Plywood(0.02m)
Layer 2Air Gap(999m)
Layer 3Lightweight Concrete(0.15m)
Layer 4White Wash(0.01m)
Thermal transmission = 2.5 W/(m2-K)
-50-
6.2.6
Wall class
The Wall class is a model of a wall. It can calculate unsteady state heat conduction. Table 6.16 shows the
constructors of the Wall class. A Wall object is initialized with a WallLayer object described in the section 6.2.5.
Table 6.17 and 6.18 shows the properties and the methods defined in the Wall class.
Table 6.16 The constructors of the Wall class
No.
Argument 1
Argument 2
Description
Unit
Type
TRUE
sec
double
Layers
TRUE
double
WallLayers object
AirTemperature1
TRUE
double
AirTemperature2
TRUE
double
2
Radiation1
TRUE
W/m
double
Radiation2
TRUE
W/m2
double
Incline1
Incline2
1)
Two principal boundary conditions are air temperature and radiation at wall surface. These conditions can
be set by AirTemperature and Radiation property of the Wall class. If the boundary conditions are fixed, the state
of the wall can be calculated with Update method. Once the Update methods is called, time given by TimeStep
property passes.
The temperature of each wall layer is determined by solving equation 6.11 2). As shown in figure 6.12,
heat capacities are concentrated into the boundary of wall layers.
Figure 6.13 shows a sample program which calculates unsteady heat conduction with Wall class. Table
6.19 shows the compositions of the wall. It is as same as wall described in the section 3.3.2, which was solved by
the circuit networks.
Figure 6.14 and 6.15 shows the results of the simulation. It seems that the results is as same as that of the
simulation solved by the circuit networks.
T
1
1
1
=
T m1T m T mT m1
t m 0.5CAP mCAP m1 Rm1
Rm
T : temperature of wall [C], t : time [sec], M : number of the layer,
CAP : heat capacity per surface area [J/(m2K)], R : thermal resistance [(m2K)/W]
Ta(0)
T0
T1
Tm
TM-2
TM-1
TM
-51-
Ta(M)
(6.11)
Description
Function
Update
Return
Arg.1
Function
SetIncline
Function
Return
Arg.1
Function
InitializeTemperature
Arg.1
Function
SetFilmCoefficient
Function
Return
Arg.1
Function
SetConvectiveRate
Function
Arg.1
Return
Arg.1
Function
GetRadiativeRate
Arg.2
Return
Arg.1
Arg.2
Arg.2
Arg.2
Return
Function
GetConvectiveRate
Return
Arg.1
SetRadiativeRate
Return
Arg.1
GetFilmCoefficient
Return
Arg.1
Set incline to wall surface. Incline of opsite side surface is automatically set.
Return
Function
SetFilmCoefficient
Arg.2
Return
Arg.1
GetSurface
Arg.2
Arg.2
Arg.2
-52-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Material
Thermal conductivity
[W/(m K)]
Thickness [mm]
25
Plywood
0.19
716
Concrete
1.4
1934
Air gap
Rock wool
120
2
84
Console.Read();
Figure 6.13 The sample program which calculates unsteady heat conduction of normal wall
-53-
50
20
Temperature [C]
18
16
14
12
10
8
Room 1
Plywood
Concrete
Air gap
Rock wool
Room 2
-54-
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
2)
Cooling tubes and heating tubes are installed in the floor or ceiling in radiant heating and cooling
systems. The Tube class is a model to calculate this phenomenon.
Below is the constructor of the Tube class.
Tube tube = new Tube(epsilon, finEfficiency, fluidSpecificHeat);
The first argument (epsilon) is heat exchanger effectiveness[-] between temperature of fluid and
temperature of wall layer where tube is installed. The second argument is fin efficiency[-]. The third argument is
specific heat[J/(kg K)] of fluid. These value are obtained from equation 6.12~6.17.
H P PNL c w G w
=
T wi T m
AF
AF
PNL=
(6.12)
PX
1 PX c w Gw / AC f 1/ P1
PX =1exp
P=
K P AF
c w Gw
(6.13)
(6.14)
1
tanh Z
DwD
w
Z
wD C f
Z=
2
D
(6.15)
K p=1 / { AF / L 1/ D w Rb }
0.8
(6.16)
a w =1057 1.3520.0198 T m v / D
0.2
(6.17)
HP : heat generation from floor [W], AF : surface area of floor [m3], cw : specific heat of fluid [J/kg], Gw : fluid flow rate [kg/s]
Twi : inlet temperature of the fluid [C], Tm : average temperature of wall layer where the tube is installed [C]
PNL : heat exchanger effectiveness between Tm and Twi [-], PX : heat exchanger effectiveness between surface temperature and Twi [-]
Cf : thermal conductance from wall layer where the tube is installed and to the next layer[W/(m2 K)]
P : fin efficiency [-], KP : thermal transmission from surface temperature to fluid [W/(m2 K)], w : installing span of tube [m]
D : diameter of the tube [m], : heat conductance of the floor [W/(m K)], L : length of the tube [m]
w : convective heat transfer coefficient at inner tube surface [W/(m2 K)], Rb : thermal resistance between tube and floor panel [m K/W]
Tm : average temperature of the fluid [C], v : fluid flow speed [m/s]
Description
Function Set flow rate [kg/s] of the fluid
SetFlowRate
Return
Arg.1
Arg.2
Function Calculate outlet fluid temperature [C] from the heat transfer [W] to the tube.
GetOutletFluidTemperature
Return
Arg.1
Arg.2
Arg.2
Return
Arg.1
-55-
Figure 6.21 shows the methods related to Tube class defined in the Wall class. A Tube object can be
installed to wall with AddTube method. The heat transfer from the wall to the tube [W] can be obtained by
GetHeatTransferToTube method.
Table 6.21 The methods defined in the Wall class (related to Tube class)
Name
Description
Function
AddTube
Return
Arg.1
Function
RemoveTube
Arg.2
Function
Return
Arg.1
Return
Arg.1
GetHeatTransferToTube
Arg.2
Arg.2
Figure 6.17 shows a sample program which calculates unsteady heat conduction of wall with heating and
cooling tube. Figure 6.16 shows the compositions of the floor. A packed water is installed to raise the heat
capacity of the floor.
Flexible board
Volumetric
specific heat
[kJ/(m3K)]
1600
Thermal
conductivity
[W/(mK)]
0.35
Packed water
4186
0.59
4186
0.59
80
0.035
716
0.19
20
20
Polystyrene foam
Plywood
Air gap
Packed water
Water tube
15
20
16.5
Plywood
Bottom surface of floor
716
0.19
The material of the tube is cross-linked polyethylene (Heat conductance is 0.47 W/(m K)). The span,
external diameter and internal diameter is 267mm, 3.4mm and 2.3mm respectively. The flow rate of the fluid is
2
0.1 L/min/tube. The surface area of floor is 6.48 m . The fin efficiency can be calculated as below.
Cf = 1 / (0.02 / 0.59) + 1 / (0.02 / 0.59) = 59 W/(m2 K)
Z = (0.0267 - 0.0034) (59 / (0.59 0.0034))0.5 = 3.99
p = 1 / 0.0267 (0.0034 + (0.0267-0.0037)) tanh(3.99) / 3.99 = 0.346
heat exchanger effectiveness[-] between temperature of fluid and temperature of wall layer can be
calculated as below.
v = (0.01 / 60 / 1000) / (3.14 (0.0034 / 2)2) = 0.0184 m/s
w = 10.57 (1.352 + 0.0198 25) 0.01840.8 0.00340.2 =235.2
Rb = (0.0034 0.0023) / (3.14 0.47 0.0034) = 0.22 m K / W
Kp = 1 / (6.48 / 194.4 (1 / (3.14 0.0034 235.2) + 0.22)) = 48.6 W/(m2 K)
px = 1 exp(-48.6 6.48 / 4186 / (0.01 54 / 60)) = 0.999
PNL = 0.999 / (1 + 0.999 4186 (0.01 54 / 60) / 6.48 / 59) 1 / 0.34 1) = 0.84
-56-
A instance of Wall class is created in the line 4~16. To see detailed temperature change, time step is set to
300 seconds. A instance of the Tube class is created in the line 18. The fin efficiency and the heat exchanger
effectiveness is calculated as above. The Tube object is installed in the line 20. The flow rate of the fluid is set to 0
at first. After 50 times iteration, the flow rate is set to 0.54 L/min. Inlet temperature is set to 30 C constant.
Figure 6.18 shows the result of the simulation. It seems that the wall temperature approaches to outdoor
temperature in first 4 hours, since there are no heating by tube. After the supply of 30 C hot water, wall
temperatures rise. Temperature of the neighboring wall layer 2 and 3 rises quickly, and then temperatures of other
layers rise slowly.
1 /// <summary>Sample program calculating the unsteady heat conduction of wall with heating tube</summary>
2
private static void wallTest2()
3
{
4
WallLayers wl = new WallLayers();
5
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.FrexibleBoard), 0.0165));
6
wl.AddLayer(new WallLayers.Layer(new WallMaterial("Water", 0.59, 4186), 0.02));
7
wl.AddLayer(new WallLayers.Layer(new WallMaterial("Water", 0.59, 4186), 0.02));
8
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ExtrudedPolystyreneFoam_3), 0.02));
9
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009));
10
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.AirGap), 0.015));
11
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009));
12
Wall wall = new Wall(wl);
13
wall.TimeStep = 300;
14
wall.AirTemperature1 = 20;
15
wall.AirTemperature2 = 10;
16
wall.SurfaceArea = 6.48;
17
18
Tube tube = new Tube(0.84, 0.346, 4186);
19
//installing tube to wall
20
wall.AddTube(tube, 1);
21
tube.SetFlowRate(0); //initial flow rate is 0 kg/s
22
tube.FluidTemperature = 30;
23
24
wall.InitializeTemperature(20); //initialize temperature of the wall
25
26
for (int i = 0; i < wall.Layers.LayerNumber; i++) Console.Write("temperature" + i + ", ");
27
Console.WriteLine("heat transfer to the tube[W], outlet temperature of fluid[C]");
28
for (int i = 0; i < 100; i++)
29
{
30
if (i == 50) tube.SetFlowRate(0.54); //start heating
31
wall.Update();
32
double[] tmp = wall.GetTemperatures();
33
for (int j = 0; j < tmp.Length - 1; j++) Console.Write(((tmp[j] + tmp[j + 1]) / 2d).ToString("F1") + ", ");
34
Console.Write(wall.GetHeatTransferToTube(1).ToString("F0") + ", " + tube.GetOutletFluidTemperature().ToString("F1"));
35
Console.WriteLine();
36
}
37
Console.Read();
38
}
Figure 6.17 The sample program which calculates the unsteady heat conduction of wall with heating tube
Wall Temp.1
Wall Temp.2
Wall Temp.3
Wall Temp.4
Wall Temp.5
Wall Temp.6
Wall Temp.7
Heat transfer[W]
30
0
-200
-400
-600
22
-800
-1000
18
-1200
-1400
14
-1600
-1800
10
-2000
0:00 0:30 1:00 1:30 2:00 2:30 3:00 3:30 4:00 4:30 5:00 5:30 6:00 6:30 7:00 7:30 8:00
-57-
Heat transfer[W]
Temperature [C]
26
3)
A phase change material (PCM) is a material with a high heat of fusion. It can store and release large
amounts of energy by melting and solidifying. Special setting is needed to treat PCM in Wall class, since the heat
3
conductance [W/(m K)] and volumetric specific heat [J/(m K)] is changed when the phase changed.
The LatentHeatStorageMaterial class is a model of a PCM. A PCM can be considered as a number of
3
normal materials, since it has different heat conductance [W/(m K)] and volumetric specific heat [J/(m K)] at
different state (Figure 6.19).
UpperTemperature
of liquid state
Liquid state
Upper Temperature
of two phase state
Solid state
Volumetric specific heat C3
Thermal conductivity 3
WallMaterial 1
WallMaterial 2
WallMaterial 3
Figure 6.19 Setting normal WallMaterial objects to different state of PCM
Below is the constructor of the LatentHeatStorageMaterial class. The second argument is a WallMaterial
object. The thermodynamic property of the object is applied if the temperature of the latent heat storage material is
smaller than the upper temperature limit which is specified by the first argument.
LatentHeatStorageMaterial lmat = new LatentHeatStorageMaterial(upperTemperature, material);
Table 6.22 shows methods defined in the LatentHeatStorageMaterial class. User should set a
WallMaterial objects to different state of a LatentHeatStorageMaterial object with AddMaterial method.
Table 6.22 The methods defined in the LatentHeatStorageMaterial class
Name
Description
Function
AddMaterial
Arg.1
Function
GetMaterial
Return
Arg.1
Function
Initialize
Return
Arg.2
Return
Arg.1
Function
GetHeatStorage
Return
Arg.1
Arg.2
Table 6.23 shows the methods related to LatentHeatStorageMaterial class defined in Wall class.
-58-
Description
Function
SetLatentHeat
StorageMaterial
Return
Arg.1
Function
RemoveLatentHeat
StorageMaterial
Return
Arg.1
Arg.2
Arg.2
Figure 6.21 shows a sample program which calculates the unsteady heat conduction of wall with latent
heat storage material. The composition of the wall is almost same as the wall described at figure 6.16, but in this
case, packed water is replaced by latent heat storage material. Table 6.24 shows the thermodynamic properties of
the latent heat storage materials.
Table 6.24 Thermodynamic properties of the latent heat storage materials
Layer number
Temperature [C]
State
Thermal conductivity
[W/(m K)]
~19
solid
5040
0.19
19~23
two phase
21140
0.205
23~
liquid
5040
0.22
Second layer
(PCM 1)
Third layer
(PCM 2)
~30
solid
5004
0.19
30~32
two phase
88550
0.205
32~
liquid
4935
0.22
Wall temp. 1
Wall temp. 2
Wall temp. 3
Wall temp. 4
Wall temp. 5
Wall temp. 6
Wall temp. 7
Heat storage
38
5000
36
34
-5000
-10000
32
-15000
30
-20000
28
-25000
26
-30000
24
-35000
22
-40000
20
0:00
-45000
6:00
12:00
18:00
0:00
6:00
12:00
18:00
0:00
6:00
-59-
12:00
18:00
An instance of LatentHeatStorageMaterial class is created and set to Wall object in the line 24~40. The
wall is cooled at first 100 time step. Then, it is heated at next 100 time step. At each time step, wall temperatures
and heat storage is written to standard output stream.
Figure 6.20 shows the result of the simulation. The dashed line is temperature of the PCM. The doubledashed line is heat storage of wall. It seems that temperature changes non linearly around 30~32 C, since the
latent heat storage material (PCM 2) has changed it phase from liquid to solid.
Figure 6.21 The sample program calculating the unsteady heat conduction of wall with latent heat storage material
-60-
6.2.7
Some classes (Zone, Room, MultiRoom and Outdoor class) and interfaces (IHeatGain and ISurface
interface) are defined in this library to calculate the thermal load of a building. Figure 6.22 shows a concept of
these classes and interfaces.
The Room class is a model of a room which is surrounded by wall and window surfaces. A room can be
separated into some smaller zones which have different characteristics from the other zone. These zones can be
modeled by the Zone class. The air state of a zone is expressed by a single MoistAir object and the vertical or
horizontal distribution of the air is not considered. The heat production in a zone is modeled by the IHeatGain
interface. User can make their original heat gain class by implementing the IHeatGain interface. ISurface interface
is a model of a wall surface or window surface. The opposite side of a surface is either outdoor or other rooms.
The outdoor weather state is modeled by the Outdoor class.
The state of the room temperature and the humidity can be updated by the Update methods defined in the
Zone class and the MultiRoom class. The Update method defined in the Zone class uses simpler solution method
than that defined in the MultiRoom class. The temperature of the room is affected by temperature of surrounding
wall surfaces. These surface temperatures are affected by the temperature of opposite side room. If there is room
to room ventilation, the temperature of the room mutually affect each other directly. Therefore, the temperature of
the rooms should be solved simultaneously to be exact. The Update methods defined in the Zone class uses simple
model which assume that the temperatures of the neighboring rooms are same as last time step. The Update
method defined in the MultiRoom class uses detailed model which solves all the temperatures of the rooms
simultaneously. Although this model needs relatively long calculation time than the previous one. Usage of the
Update methods are explained later with concrete example of a building.
IHeatGain[]
ISurface[]
Outdoor
Zone
Sun
WallSurface[]
IHeatGain[]
Window[]
ISurface[]
MoistAir
Zone
Room
MultiRoom
Figure 6.22 classes and interfaces calculating thermal load of a building
-61-
1)
Figure 6.23 shows the plan and the section of the sample building. The building has east and west room
which has a south-facing window. The window of the east room has a sun shade whose width and overhang is 5m
and 1m respectively. The sun shade is set 0.5m above from the window. The depth of the room is 7m. We treat
area 3m from the window as perimeter zone. The ventilation volume of the west room is 10 CMH. Outdoor air is
taken in to the room from the perimeter zone and exhausted from the interior zone. There is no air-intake from
outdoor at the east zone. There is 10 CMH interior ventilation between the perimeter and interior zone at the east
zone. A heat production element is set in the east interior zone (Sensible radiative heat gain=100W, Sensible
convective heat gain=100W, Latent heat gain=20W). The glasses of the windows are low-emissivity coating
single glass. It's width and height is 3m and 2m. All the walls are concrete and thickness is 400 mm. The building
has no substructure and directly set on the ground. The temperature of the ground is treated as constant (28C).
Table 6.25, figure 6.24 and figure 6.25 shows weather data. It is data measured in Tokyo Japan in
2007/8/3.
The rooms are maintained at constant temperature (26C) and humidity (0.01 kg/kg(DA)) from 8:00 ~
19:00.
Supply air
10CMH
Sun shade
2,000
3,000
3,000
3,000
10CMH
Ventilation
10CMH
4,000
3,000
Heat source
Sensible radiation100W
Sensible convection100W
Latent 20W
5,000
Exhaust air
10CMH
Section
S
N
5,000
Plan
-62-
4,000
Drybulb temperature
[]
24.2
24.1
Humidity ratio
[kg/kg(DA)]
0.0134
0.0136
Nocturnal Radiation
[W/m2]
32
30
2:00
24.1
0.0134
3:00
24.2
0.0133
4:00
24.3
5:00
Hour
Diffuse horizontal
radiation [W/m2]
0
0
0
0
30
29
0.0131
26
24.2
0.0134
24
6:00
24.4
0.0138
24
0
106
7:00
25.1
0.0142
25
185
36
115
8:00
26.1
0.0142
25
202
198
9:00
27.1
0.0140
25
369
259
10:00
28.8
0.0147
24
427
314
11:00
29.9
0.0149
24
499
340
12:00
30.7
0.0142
24
557
340
13:00
31.2
0.0146
23
522
349
14:00
31.6
0.0140
24
517
319
15:00
31.4
0.0145
24
480
277
16:00
31.3
0.0144
24
398
228
17:00
30.8
0.0146
24
255
167
18:00
29.4
0.0142
23
142
87
19:00
28.1
0.0136
23
16
20:00
27.5
0.0136
24
21:00
27.1
0.0135
26
22:00
26.6
0.0136
25
23:00
26.3
0.0140
23
Humidity ratio
34
0.0155
32
0.0150
0.0145
30
0.0140
28
0.0135
26
0.0130
24
0.0125
22
Drybulb temperature
0.0120
0:00
2:00
4:00
6:00
8:00
10:00
12:00
14:00
16:00
18:00
20:00
22:00
Nocturnal radiation
[W/m2]
600
35
500
30
25
400
20
300
15
200
10
100
0:00
2:00
4:00
6:00
8:00
10:00
12:00
14:00
16:00
18:00
20:00
22:00
-63-
Nocturnal radiation[W/m2]
Solar radiation[W/m2]
2)
The Zone class solves equation 6.18~6.21 to determine the temperature, humidity ratio, sensible heat load
2) 18)
and latent heat load
. The convective heat transfer between room air and surfaces is treated simply in this
mode. As shown in equation 6.18, temperatures (TMRT) and convective heat transfer coefficients ((i) kc) are treated
as same value for the all surfaces
d T R NW
ZN S
= An i k c T MRT T Rc a G o T a T R HG cHE s
dt
n=1
(6.18)
ZN S =c a VOLCPF
(6.19)
ZN L
d xR
=Go x a x R LG LE
dt
1)
ZN L =VOL LCPF
(6.20)
(6.21)
ZNS : sensible heat capacity of the zone [J/K], TR : drybulb temperature of the zone [C], t : time [sec], NW : number of surfaces belong to zone
An : area of surface [m2], (i) : film coefficient [W/(m2 K)], kc : convective rate of film coefficient [-]
TMRT : mean radiant temperature of surfaces [C], ca : specific heat of the air [J/(kg K)], Go : ventilation [kg/s]
Ta : drybulb temperature of ventilation air [C], HG(c) : sensible heat production in the zone (convective) [W]
HEs : sensible heat supply to the zone [W], : density of the air [kg/m3], VOL : zone volume [m3]
CPF : additional sensible heat capacity of the zone (furniture) [J/K], ZNL : latent heat capacity of the zone [kg]
xR : humidity ratio of zone air [kg/kg(DA)], xa : humidity ratio of ventilation air [kg/kg(DA)]
LG : latent heat production in the zone [kg/s], LE : latent heat supply to the zone [kg/s]
LCPF : additional latent heat supply to the zone (furniture) [kg]
Table 6.26 and 6.27 shows the properties defined in the Zone class. SensibleHeatCapacity is sensible heat
capacity of the zone (CPF in the equation 6.19). It is mainly heat capacity of furniture and doesn't include the heat
capacity of the room air and building structure. It is 12~15 kJ/(m3 K) for the office building 19) 20).
LatentHeatCapacity is latent heat capacity of the zone (LCPF in the equation 6.21). As same as
SensibleHeatCapacity property, it doesn't include latent heat capacity of the room air. It can be set to 0 for the
most cases 2).
FilmCoefficient is film coefficients of the surfaces ((i) in the equation 6.18). The Zone class assumes that
the film coefficient of all surfaces are the same value. kc in the equation 6.18 is set by SetConvectiveRate.
To calculate drybulb temperature or humidity ratio, solve equations for Tr or xR. To calculate sensible or
latent heat load, solve equations for HEs or LE. The equations are solved for Tr or xR when the
DrybulbTemperatureSetPoint or AbsoluteHumiditySetPoint properties are set to true. If these properties are set to
false, free float temperature and humidity ratio is calculated.
AtmosphericPressure is atmospheric pressure and it has an effect to density of the room air. Surfaces and
HeatGains are the list of surfaces and heat production elements in the room. These elements can be set by
AddSurface method or AddHeatGain method.
1) 2)
2) : , , 1987,
-64-
Description
Unit
Type
TRUE
sec
double
Name
TRUE
string
Volume
TRUE
m3
double
TRUE
J/K
double
SensibleHeatSupply
TRUE
double
LatentHeatCapacity
TRUE
kg
double
LatentHeatSupply
TRUE
double
FilmCoefficient
TRUE
W/(m2 K)
double
Volume
SensibleHeatCapacity
VentilationVolume
Vintilation volume
TRUE
m /h
double
VentilationAirState
TRUE
MoistAir
TRUE
bool
ControlDrybulbTemperature
ControlHumidityRatio
DrybulbTemperatureSetPoint
HumidityRatioSetPoint
Surfaces
HeatGains
AtmosphericPressure
CurrentDrybulbTemperature
CurrentHumidityRatio
CurrentSensibleHeatLoad
CurrentLatentHeatLoad
CurrentMeanRadiantTemperature
CurrentDateTime
TRUE
bool
TRUE
double
TRUE
kg/kg(DA)
dobule
ImmutableSurface[ ]
IheatGain[ ]
Atmospheric pressure
TRUE
kPa
double
double
kg/kg(DA)
double
double
double
double
TRUE
DateTime
-65-
AddSurface
RemoveSurface
Description
Function
Return
Arg.1
Function
Return
Arg.1
AddWindow
RemoveWindow
Arg.1
Function
Arg.1
AddHeatGain
Return
Arg.1
Function
RemoveHeatGain
Return
Arg.1
Function
SetConvectiveRate
Arg.2
Arg.2
Arg.2
Arg.2
Arg.2
Function
Arg.2
Return
Arg.1
Return
Arg.1
InitializeAirState
Return
Function
Function
Return
Arg.2
-66-
Table 6.28 shows the methods defined in the Zone class. The drybulb temperature, humidity ratio,
sensible heat load and latent heat load of the zone is updated by Update method. The state of the zone at next time
step can be calculated by the methods named as GetNext~~~. They don't update the states of the zone.
Table 6.28 The methods defined in the Zone class (Related to updating the model)
Name
Update
Description
Function
Update the drybulb temperature, humidity ratio, sensible heat load and latent heat load
of the zone
Return
Arg.1
Arg.2
Function Calculate the drybulb temperature [C] with the sensible heat supply [W] indicated.
GetNextDrybulbTemperature
Return
Arg.1
Arg.2
Function Calculate the humidity ratio [kg/kg(DA)] with the latent supply [W] indicated.
GetNextHumidityRatio
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Function Calculate the sensible heat load [W] with the drybulb temperature [C] indicated.
GetNextSensibleHeatLoad
Return
Arg.1
Arg.2
Function Calculate the latent heat load [W] with the humidity ratio [kg/kg(DA)] indicated.
GetNextLatentHeatLoad
Return
Arg.1
-67-
Arg.2
The sol-air temperature near wall and window surfaces can be represented by equation 6.22. The upper
line represents an air at surface facing to the zone. The middle line represents an air at surface facing to the
outdoor. The lower line is in the case surface is directly connected to ground. The Outdoor class calculates the
middle and the lower equation.
Table 6.29 and 6.30 shows the properties and methods defined in the Outdoor class. The surface of the
walls and windows can be set by the methods named Add~~ and Remove~~. When the
SetWallSurfaceBoundaryState method is called, sol-air temperatures are set to the surfaces. Outdoor boundary
states can be set by AirState, Sun, GroundTemperature and NocturnalRadiation properties.
a c T R a r T MRT RS
a i
T SOL = a s I W F S RN
T a
o
T GRZ
(6.22)
TSOL : sol-air temperature of a surface [C], TR : drybulb temperature of a zone [C], TMRT : mean radiant temperature of surfaces [C]
RS : radiation to a surface [W/m2], (i) : film coefficient of surface [W/(m2 K)], (c) : convective heat transfer coefficient [W/(m2 K)]
(r) : radiative heat transfer coefficient [W/(m2 K)], as : solar absorptivity [-], IW : solar incident [W/m2], : emissivity [-]
FS : form factor from incline to the sky [-], RN : nocturnal radiation [W/m2], Ta : drybulb temperature of outdoor air [C]
TGRZ : ground temperature [C]
Description
Unit
Type
TRUE
MoistAir
Sun
TRUE
Sun
TRUE
ImmutableWallSurface []
ImmutableWallSurface []
ImmutableWindow []
List of windows
TRUE
Nocturnal radiation
TRUE
-68-
double
2
W/m
double
Description
Function Set outdoor state to wall surfaces
SetWallSurfaceBoundaryState
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Arg.2
Arg.2
Return
Arg.1
Return
Arg.1
Return
Arg.1
Arg.2
Arg.3
Arg.4
Albedo [-]
-
Function Set convective rate [-] of the wall surface film coefficient
SetConvectiveRate
Return
Arg.1
Arg.2
Return
Arg.1
-69-
Arg.2
Figure 6.28 shows a sample program which calculates an air state and a heat load of the building
discussed at 1).
Below shows brief flow of the program.
1) Create an instance of the Wall and the Window class.
2) Set the surface of the Wall and Window object to the Zone and Outdoor object
3) Update outdoor state.
4) Set sol-air temperature to outdoor facing surfaces by Outdoor object.
5) Update Wall objects.
6) Update Zone objects.
7) Set sol-air temperature to indoor facing surfaces by Zone object.
8) Back to 3)
A sample weather data is prepared in the line 4~16. Instances of the Incline class are created in the line
24~29. These instances are used to initialize wall and window surfaces. Instances of the Zone class are created in
the line 31~47. There are four zones (West interior, west perimeter, east interior and east perimeter) in this
building. Instances of the Wall class are created in the line 60~163. The surfaces of these Wall objects are set to
the Zone objects and the Outdoor object. As same as wall surfaces, window surface is set to the Zone objects and
the Outdoor object in the line 174~185. The states of the zones are updated in the line 193~245. 24 hours
calculation is iterated 100 times to get steady state result.
Figure 6.26 and 6.27 shows the results of the simulation. The temperatures of the zones maintained at 26
C from 8:00 to 19:00 since HVAC system is operating. The heat load of the west perimeter zone is relatively
bigger than that of other zones, since the west perimeter intakes air directly from outdoor.
West perimeter
West interior
East perimeter
8:00
12:00
East interior
Drybulb temperature[C]
33
32
31
30
29
28
27
26
25
0:00
2:00
4:00
6:00
10:00
14:00
16:00
18:00
20:00
22:00
West interior
East perimeter
8:00
12:00
East interior
2000
1600
1200
800
400
0
0:00
2:00
4:00
6:00
10:00
14:00
16:00
18:00
-70-
20:00
22:00
1 /// <summary>Sample program calculating the air state and heat load of the building (Zone class)</summary>
2 private static void AirStateAndHeatLoadTest1()
3 {
4
//A sample weather data
5
//Drybulb temperature [C]
6
double[] dbt = new double[] { 24.2, 24.1, 24.1, 24.2, 24.3, 24.2, 24.4, 25.1, 26.1, 27.1, 28.8, 29.9,
7
30.7, 31.2, 31.6, 31.4, 31.3, 30.8, 29.4, 28.1, 27.5, 27.1, 26.6, 26.3 };
8
//Humidity ratio [kg/kg(DA)]
9
double[] hum = new double[] { 0.0134, 0.0136, 0.0134, 0.0133, 0.0131, 0.0134, 0.0138, 0.0142, 0.0142, 0.0140, 0.0147, 0.0149,
10
0.0142, 0.0146, 0.0140, 0.0145, 0.0144, 0.0146, 0.0142, 0.0136, 0.0136, 0.0135, 0.0136, 0.0140 };
11
//Nocturnal radiation [W/m2]
12
double[] nrd = new double[] { 32, 30, 30, 29, 26, 24, 24, 25, 25, 25, 24, 24, 24, 23, 24, 24, 24, 24, 23, 23, 24, 26, 25, 23 };
13
//Direct normal radiation [W/m2]
14
double[] dnr = new double[] { 0, 0, 0, 0, 0, 0, 106, 185, 202, 369, 427, 499, 557, 522, 517, 480, 398, 255, 142, 2, 0, 0, 0, 0 };
15
//Diffuse horizontal radiation [W/m2]
16
double[] drd = new double[] { 0, 0, 0, 0, 0, 0, 36, 115, 198, 259, 314, 340, 340, 349, 319, 277, 228, 167, 87, 16, 0, 0, 0, 0 };
17
18
//Create an instance of the Outdoor class
19
Outdoor outdoor = new Outdoor();
20
Sun sun = new Sun(Sun.City.Tokyo); //Located in Tokyo
21
outdoor.Sun = sun;
22
outdoor.GroundTemperature = 25; //Ground temperature is assumed to be constant
23
24
//Create an instance of the Incline class
25
Incline nIn = new Incline(Incline.Orientation.N, 0.5 * Math.PI); //North, Vertical
26
Incline eIn = new Incline(Incline.Orientation.E, 0.5 * Math.PI); //East, Vertical
27
Incline wIn = new Incline(Incline.Orientation.W, 0.5 * Math.PI); //West, Vertical
28
Incline sIn = new Incline(Incline.Orientation.S, 0.5 * Math.PI); //South, Vertical
29
Incline hIn = new Incline(Incline.Orientation.S, 0); //Horizontal
30
31
//Create an instance of the Zone class
32
Zone[] zones = new Zone[4];
33
Zone wpZone = zones[0] = new Zone("West perimeter zone");
34
wpZone.Volume = 3 * 5 * 3; //Ceiling height is 3m
35
Zone wiZone = zones[1] = new Zone("West interior zone");
36
wiZone.Volume = 4 * 5 * 3;
37
Zone epZone = zones[2] = new Zone("East perimeter zone");
38
epZone.Volume = 3 * 5 * 3;
39
Zone eiZone = zones[3] = new Zone("East interior zone");
40
eiZone.Volume = 4 * 5 * 3;
41
foreach (Zone zn in zones)
42
{
43
zn.VentilationVolume = 10; //Ventilation volume[CMH]
44
zn.TimeStep = 3600;
45
zn.DrybulbTemperatureSetPoint = 26;
46
zn.HumidityRatioSetPoint = 0.01;
47
}
48
49
//Set a heat production element to the east interior zone
50
//Convective sensible heat=100W, Radiative sensible heat=100W, Latent heat=20W
51
eiZone.AddHeatGain(new ConstantHeatGain(100, 100, 20));
52
53
//Create an instance of the WallLayers class : Concrete,400mm
54
WallLayers wl = new WallLayers();
55
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ReinforcedConcrete), 0.4));
56
57
//Create an instance of the GlassPanes class:Low-emissivity coating single glass
58
GlassPanes gPanes = new GlassPanes(new GlassPanes.Pane(GlassPanes.Pane.PredifinedGlassPane.HeatReflectingGlass06mm));
59
60
//Set wall surfaces to the zone objects
61
Wall[] walls = new Wall[18];
62
List<WallSurface> outdoorSurfaces = new List<WallSurface>();
63
Wall wpwWall = walls[0] = new Wall(wl, "West wall in the west perimeter zone");
64
wpwWall.SurfaceArea = 3 * 3;
65
outdoorSurfaces.Add(wpwWall.GetSurface(true));
66
wpZone.AddSurface(wpwWall.GetSurface(false));
67
wpwWall.SetIncline(wIn, true);
68
69
Wall wpcWall = walls[1] = new Wall(wl, "Ceiling in the west perimeter zone");
70
wpcWall.SurfaceArea = 3 * 5;
71
outdoorSurfaces.Add(wpcWall.GetSurface(true));
72
wpZone.AddSurface(wpcWall.GetSurface(false));
73
wpcWall.SetIncline(hIn, true);
74
75
Wall wpfWall = walls[2] = new Wall(wl, "Floor in the west perimeter zone");
76
wpfWall.SurfaceArea = 3 * 5;
77
outdoor.AddGroundWallSurface(wpfWall.GetSurface(true));
78
wpZone.AddSurface(wpfWall.GetSurface(false));
79
80
Wall winWall = walls[3] = new Wall(wl, "North wall in the west interior zone");
-71-
winWall.SurfaceArea = 3 * 5;
outdoorSurfaces.Add(winWall.GetSurface(true));
wiZone.AddSurface(winWall.GetSurface(false));
winWall.SetIncline(nIn, true);
Wall wiwWall = walls[4] = new Wall(wl, "West wall in the west interior zone");
wiwWall.SurfaceArea = 3 * 4;
outdoorSurfaces.Add(wiwWall.GetSurface(true));
wiZone.AddSurface(wiwWall.GetSurface(false));
wiwWall.SetIncline(wIn, true);
Wall wicWall = walls[5] = new Wall(wl, "Ceiling in the west interior zone");
wicWall.SurfaceArea = 4 * 5;
outdoorSurfaces.Add(wicWall.GetSurface(true));
wiZone.AddSurface(wicWall.GetSurface(false));
wicWall.SetIncline(hIn, true);
Wall wifWall = walls[6] = new Wall(wl, "Floor in the west interior zone");
wifWall.SurfaceArea = 4 * 5;
outdoor.AddGroundWallSurface(wifWall.GetSurface(true));
wiZone.AddSurface(wifWall.GetSurface(false));
Wall epwWall = walls[7] = new Wall(wl, "East wall in the east perimeter zone");
epwWall.SurfaceArea = 3 * 3;
outdoorSurfaces.Add(epwWall.GetSurface(true));
epZone.AddSurface(epwWall.GetSurface(false));
epwWall.SetIncline(eIn, true);
Wall epcWall = walls[8] = new Wall(wl, "Ceiling in the east perimeter zone");
epcWall.SurfaceArea = 3 * 5;
outdoorSurfaces.Add(epcWall.GetSurface(true));
epZone.AddSurface(epcWall.GetSurface(false));
epcWall.SetIncline(hIn, true);
Wall epfWall = walls[9] = new Wall(wl, "Floor in the east perimeter zone");
epfWall.SurfaceArea = 3 * 5;
outdoor.AddGroundWallSurface(epfWall.GetSurface(true));
epZone.AddSurface(epfWall.GetSurface(false));
Wall einWall = walls[10] = new Wall(wl, "North wall in the east interior zone");
einWall.SurfaceArea = 5 * 3;
outdoorSurfaces.Add(einWall.GetSurface(true));
eiZone.AddSurface(einWall.GetSurface(false));
einWall.SetIncline(nIn, true);
Wall eiwWall = walls[11] = new Wall(wl, "East wall in the east interior zone");
eiwWall.SurfaceArea = 4 * 3;
outdoorSurfaces.Add(eiwWall.GetSurface(true));
eiZone.AddSurface(eiwWall.GetSurface(false));
eiwWall.SetIncline(eIn, true);
Wall eicWall = walls[12] = new Wall(wl, "Ceiling in the east interior zone");
eicWall.SurfaceArea = 4 * 5;
outdoorSurfaces.Add(eicWall.GetSurface(true));
eiZone.AddSurface(eicWall.GetSurface(false));
eicWall.SetIncline(hIn, true);
Wall eifWall = walls[13] = new Wall(wl, "Floor in the east interior zone");
eifWall.SurfaceArea = 4 * 5;
outdoor.AddGroundWallSurface(eifWall.GetSurface(true));
eiZone.AddSurface(eifWall.GetSurface(false));
Wall cpWall = walls[14] = new Wall(wl, "Inner wall at perimeter");
cpWall.SurfaceArea = 3 * 3;
wpZone.AddSurface(cpWall.GetSurface(true));
epZone.AddSurface(cpWall.GetSurface(false));
Wall ciWall = walls[15] = new Wall(wl, "Inner wall at interior");
ciWall.SurfaceArea = 4 * 3;
wiZone.AddSurface(ciWall.GetSurface(true));
eiZone.AddSurface(ciWall.GetSurface(false));
Wall wpsWall = walls[16] = new Wall(wl, "South wall in the west perimeter zone");
wpsWall.SurfaceArea = 5 * 3 - 3 * 2; //Reduce window surface area
outdoorSurfaces.Add(wpsWall.GetSurface(true));
wpZone.AddSurface(wpsWall.GetSurface(false));
wpsWall.SetIncline(sIn, true);
Wall epsWall = walls[17] = new Wall(wl, "South wall in the east perimeter zone");
epsWall.SurfaceArea = 5 * 3 - 3 * 2; //Reduce window surface area
outdoorSurfaces.Add(epsWall.GetSurface(true));
-72-
epZone.AddSurface(epsWall.GetSurface(false));
epsWall.SetIncline(sIn, true);
//Initialize outdoor surfaces
foreach (WallSurface ws in outdoorSurfaces)
{
//Add wall surfaces to Outdoor object
outdoor.AddWallSurface(ws);
//Initialize emissivity of surface
ws.InitializeEmissivity(WallSurface.SurfaceMaterial.Concrete);
}
//Add windows to the west zone
Window wWind = new Window(gPanes, "Window in the west perimeter zone");
wWind.SurfaceArea = 3 * 2;
wpZone.AddWindow(wWind);
outdoor.AddWindow(wWind);
//Add windows to the east zone
Window eWind = new Window(gPanes, "Window in the east perimeter zone");
eWind.SurfaceArea = 3 * 2;
//Set horizontal sun shade.
eWind.Shade = SunShade.MakeHorizontalSunShade(3, 2, 1, 1, 1, 0.5, sIn);
wpZone.AddWindow(eWind);
outdoor.AddWindow(eWind);
//Output title wrine to standard output stream
StreamWriter sWriter = new StreamWriter("AirStateAndHeatLoadTest1.csv");
foreach (Zone zn in zones) sWriter.Write(zn.Name + "Drybulb temperature[C], " + zn.Name +
"Humidity ratio[kg/kgDA], " + zn.Name + "Sensible heat load[W], " + zn.Name + "Latent heat load[W], ");
sWriter.WriteLine();
//Update the state (Iterate 100 times to make state steady)
for (int i = 0; i < 100; i++)
{
DateTime dTime = new DateTime(2007, 8, 3, 0, 0, 0);
for (int j = 0; j < 24; j++)
{
//Set date and time to Sun and Zone object.
sun.Update(dTime);
foreach (Zone zn in zones) zn.CurrentDateTime = dTime;
//Operate HVAC system (8:00~19:00)
bool operating = (8 <= dTime.Hour && dTime.Hour <= 19);
foreach (Zone zn in zones)
{
zn.ControlHumidityRatio = operating;
zn.ControlDrybulbTemperature = operating;
}
//Set weather state.
outdoor.AirState = new MoistAir(dbt[j], hum[j]);
outdoor.NocturnalRadiation = nrd[j];
sun.SetGlobalHorizontalRadiation(drd[j], dnr[j]);
//Set ventilation air state.
eiZone.VentilationAirState = new MoistAir(epZone.CurrentDrybulbTemperature, eiZone.CurrentHumidityRatio);
epZone.VentilationAirState = new MoistAir(eiZone.CurrentDrybulbTemperature, eiZone.CurrentHumidityRatio);
wpZone.VentilationAirState = outdoor.AirState;
wiZone.VentilationAirState = new MoistAir(wpZone.CurrentDrybulbTemperature, wpZone.CurrentHumidityRatio);
//Update boundary state of outdoor facing surfaces.
outdoor.SetWallSurfaceBoundaryState();
//Update the walls.
foreach (Wall wal in walls) wal.Update();
//Update the zones.
foreach (Zone zn in zones) zn.Update();
//Update date and time
dTime = dTime.AddHours(1);
//If it is last iteration, output result to CSV text.
if (i == 99)
{
foreach (Zone zn in zones)
{
sWriter.Write(zn.CurrentDrybulbTemperature.ToString("F1") + ", " + zn.CurrentHumidityRatio.ToString("F3") + ", " +
zn.CurrentSensibleHeatLoad.ToString("F0") + ", " + zn.CurrentLatentHeatLoad.ToString("F0") + ", ");
}
sWriter.WriteLine();
-73-
Figure 6.28 The sample program calculating the air state and the heat load with Zone class
-74-
3)
The MutliRoom class can simultaneously solve more than one zone temperatures. As previously shown in
the figure 6.22, building is treated as three layers (Zone, Room and MultiRoom) hierarchic structure in this class
library. The Zone class defines the extent of convective heat transfer. The Room class defines the extent of
radiative heat transfer. Figure 6.29 shows concept of these heat transfers.
As shown on the left of the figure 6.29, the moist air of the zone doesn't exchange heat with surfaces
belonging to other zones. In this figure, Z1 only exchange heat with surface W1, W2 and W3. It doesn't exchange
heat with W4, W5 and W6. On the other hand, radiative heat transfer occurs not only single zone. As shown on
the right of the figure 6.29, the surfaces belonging same room exchanges heat each other. In this figure, the
surface W1, W2, W3, W4, W5 and W6 exchanges heat each other.
Heat transfer by convection
W1
W1
W2
W3
W2
W3
W5
W4
W5
Z1
W4
Z2
W6
W6
The MultiRoom class solves equation 6.23 to determine the room state. Unlike equation 6.18, equation
6.23 evaluate convective heat transfer between wall surface and room individually. The temperatures and the
1
convective heat transfer coefficients of surfaces are treated as different value .
ZN S
d T R NW
= An i n k cn T Sn T Rc a G o T a T R HG cHE s
dt
n=1
(6.23)
ZNS : heat capacity of the zone [J/K], TR : drybulb temperature of the zone [C], t : time [sec], NW : number of the surfaces in the room
An : surface area [m2], (i) n : film coefficient of the nth surface [W/(m2 K)], k(c) n : convective rate of the film coefficient of a surface [-]
TMRT : mean radiant temperature of the surfaces [C], ca : specific heat of the air [J/(kg K)], Go : ventilation volume [kg/s]
Ta : drybulb temperature of out door air [C], HG(c) : convective heat transfer from indoor heat production element [W]
HEs : heat supply to the zone [W]
Figure 6.31 shows the constructors of the Room class. The list of the zones belonging to the room is an
argument.
Table 6.31 The constructors of the Room class
No.
Argument 1
Argument 2
1) 2)
-75-
Table 6.32 and 6.33 shows the properties and methods defined in the Room class.
There are two type of radiations, the short wave radiation and the long wave radiation. A short wave
radiation is a solar radiation transmitted through a window. A long wave radiation is a radiation from wall surface,
window surface or other heat production equipment in a room. These two radiations are distributed to wall or
window surfaces in a room. The distribution rate can be set by SetShort(Long)WaveRadiationRate method.
Initially, distribution rate is set to surface area ratio. The short wave radiation distributed to window surface is
conducted back out to outdoor. This amount can be get by TransmissionHeatLossFromWindow property.
A radiative heat exchange rate from surface to surface can be set by SetRadiativeHeatTransferRate
property. These values are calculated by equation 6.24 initially.
A
n j= NW j
Al
(6.24)
n j : radiative heat exchange rate from surface n to surface j [-], Aj : area of the jth surface [m2]
NW : number of the surfaces belonging to the room [sec]
Description
Unit
Type
Name
TRUE
string
uint
uint
double
DateTime
-76-
Description
Function Set a short wave radiation distribution rate [-] of window surface.
SetShortWaveRadiationRate
Return
Arg.1
Arg.2
Function Set a short wave radiation distribution rate [-] of window or wall surface.
SetShortWaveRadiationRate
Return
Arg.1
Arg.2
Function Get a short wave radiation distribution rate [-] of window surface.
GetShortWaveRadiationRate
Return
Arg.1
Arg.2
Function Get a short wave radiation distribution rate [-] of window or wall surface.
GetShortWaveRadiationRate
Return
Arg.1
Arg.2
Function Set a long wave radiation distribution rate [-] of window surface.
SetLongWaveRadiationRate
Return
Arg.1
Arg.2
Function Set a long wave radiation distribution rate [-] of window or wall surface.
SetLongWaveRadiationRate
Return
Arg.1
Arg.2
Function Get a long wave radiation distribution rate [-] of window surface.
GetLongWaveRadiationRate
Return
Arg.1
Arg.2
Function Get a long wave radiation distribution rate [-] of window or wall surface.
GetLongWaveRadiationRate
Return
Arg.1
Arg.2
Function Set a radiative heat exchange rate [-] from surface 1 to surface 2
Return
SetRadiativeHeatTransferRate
Arg.1
Arg.3
Arg.2
Function Get a radiative heat exchange rate [-] from surface 1 to surface 2
GetRadiativeHeatTransferRate
Return
Arg.1
-77-
Arg.2
The constructor of the MultiRoom class takes a list of Room objects as an argument.
MultiRoom mRoom = new MultiRoom(rooms);
Table 6.34 shows the methods defined in the MultiRoom class. Interior ventilation volume can be set by
SetAirFlow method. Use UpdateRoomTemperatures method and UpdateRoomHumidities method to update room
state.
Table 6.34 The methods defined in the MultiRoom class
Name
Description
Function Update temperatures of the rooms.
UpdateRoomTemperatures
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Return
Arg.1
Arg.2
Arg.1
Upstream zone
(ImmutableZone type)
Arg.2
Downstream zone
( ImmutableZone type)
Arg.3
Arg.4
Return
Arg.1
Arg.2
Downstream zone
( ImmutableZone type)
Return
Arg.1
Arg.2
Figure 6.30 shows a sample program which calculates an air state and a heat load of the building
discussed at 1) with MultiRoom class. Most of the program codes are same as the codes shown in figure 6.28.
The instances of Room class and MultiRoom class is created in the line 187~191. The west room is
consists of west perimeter zone and west interior zone. The east room is consists of east perimeter zone and east
interior zone.
Ventilation volumes are set in the line 193~197.
A short wave radiation distribution rates are set in the line 199~209. It assumes that 60% of short wave
radiation is distributed to perimeter floor. Distribution rates to other surfaces are set to surface area ratio.
24 hours calculation is iterated 100 times to get steady state result.
-78-
1 /// <summary>Sample program calculating the air state and heat load of the building (MultiRoom class)</summary>
2 private static void AirStateAndHeatLoadTest2()
3 {
4
//A sample weather data
5
//Drybulb temperature [C]
6
double[] dbt = new double[] { 24.2, 24.1, 24.1, 24.2, 24.3, 24.2, 24.4, 25.1, 26.1, 27.1, 28.8, 29.9,
7
30.7, 31.2, 31.6, 31.4, 31.3, 30.8, 29.4, 28.1, 27.5, 27.1, 26.6, 26.3 };
8
//Humidity ratio [kg/kg(DA)]
9
double[] hum = new double[] { 0.0134, 0.0136, 0.0134, 0.0133, 0.0131, 0.0134, 0.0138, 0.0142, 0.0142, 0.0140, 0.0147, 0.0149,
10
0.0142, 0.0146, 0.0140, 0.0145, 0.0144, 0.0146, 0.0142, 0.0136, 0.0136, 0.0135, 0.0136, 0.0140 };
11
//Nocturnal radiation [W/m2]
12
double[] nrd = new double[] { 32, 30, 30, 29, 26, 24, 24, 25, 25, 25, 24, 24, 24, 23, 24, 24, 24, 24, 23, 23, 24, 26, 25, 23 };
13
//Direct normal radiation [W/m2]
14
double[] dnr = new double[] { 0, 0, 0, 0, 0, 0, 106, 185, 202, 369, 427, 499, 557, 522, 517, 480, 398, 255, 142, 2, 0, 0, 0, 0 };
15
//Diffuse horizontal radiation [W/m2]
16
double[] drd = new double[] { 0, 0, 0, 0, 0, 0, 36, 115, 198, 259, 314, 340, 340, 349, 319, 277, 228, 167, 87, 16, 0, 0, 0, 0 };
17
18
//Create an instance of the Outdoor class
19
Outdoor outdoor = new Outdoor();
20
Sun sun = new Sun(Sun.City.Tokyo); //Located in Tokyo
21
outdoor.Sun = sun;
22
outdoor.GroundTemperature = 25; //Ground temperature is assumed to be constant
23
24
//Create an instance of the Incline class
25
Incline nIn = new Incline(Incline.Orientation.N, 0.5 * Math.PI); //North, Vertical
26
Incline eIn = new Incline(Incline.Orientation.E, 0.5 * Math.PI); //East, Vertical
27
Incline wIn = new Incline(Incline.Orientation.W, 0.5 * Math.PI); //West, Vertical
28
Incline sIn = new Incline(Incline.Orientation.S, 0.5 * Math.PI); //South, Vertical
29
Incline hIn = new Incline(Incline.Orientation.S, 0); //Horizontal
30
31
//Create an instance of the Zone class
32
Zone[] zones = new Zone[4];
33
Zone wpZone = zones[0] = new Zone("West perimeter zone");
34
wpZone.Volume = 3 * 5 * 3; //Ceiling height is 3m
35
Zone wiZone = zones[1] = new Zone("West interior zone");
36
wiZone.Volume = 4 * 5 * 3;
37
Zone epZone = zones[2] = new Zone("East perimeter zone");
38
epZone.Volume = 3 * 5 * 3;
39
Zone eiZone = zones[3] = new Zone("East interior zone");
40
eiZone.Volume = 4 * 5 * 3;
41
foreach (Zone zn in zones)
42
{
43
zn.VentilationVolume = 10; //Ventilation volume[CMH]
44
zn.TimeStep = 3600;
45
zn.DrybulbTemperatureSetPoint = 26;
46
zn.HumidityRatioSetPoint = 0.01;
47
}
48
49
//Set a heat production element to the east interior zone
50
//Convective sensible heat=100W, Radiative sensible heat=100W, Latent heat=20W
51
eiZone.AddHeatGain(new ConstantHeatGain(100, 100, 20));
52
53
//Create an instance of the WallLayers class : Concrete,400mm
54
WallLayers wl = new WallLayers();
55
wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ReinforcedConcrete), 0.4));
56
57
//Create an instance of the GlassPanes class:Low-emissivity coating single glass
58
GlassPanes gPanes = new GlassPanes(new GlassPanes.Pane(GlassPanes.Pane.PredifinedGlassPane.HeatReflectingGlass06mm));
59
60
//Set wall surfaces to the zone objects
61
Wall[] walls = new Wall[18];
62
List<WallSurface> outdoorSurfaces = new List<WallSurface>();
63
Wall wpwWall = walls[0] = new Wall(wl, "West wall in the west perimeter zone");
64
wpwWall.SurfaceArea = 3 * 3;
65
outdoorSurfaces.Add(wpwWall.GetSurface(true));
66
wpZone.AddSurface(wpwWall.GetSurface(false));
67
wpwWall.SetIncline(wIn, true);
68
69
Wall wpcWall = walls[1] = new Wall(wl, "Ceiling in the west perimeter zone");
70
wpcWall.SurfaceArea = 3 * 5;
71
outdoorSurfaces.Add(wpcWall.GetSurface(true));
72
wpZone.AddSurface(wpcWall.GetSurface(false));
73
wpcWall.SetIncline(hIn, true);
74
75
Wall wpfWall = walls[2] = new Wall(wl, "Floor in the west perimeter zone");
76
wpfWall.SurfaceArea = 3 * 5;
77
outdoor.AddGroundWallSurface(wpfWall.GetSurface(true));
78
wpZone.AddSurface(wpfWall.GetSurface(false));
79
80
Wall winWall = walls[3] = new Wall(wl, "North wall in the west interior zone");
-79-
winWall.SurfaceArea = 3 * 5;
outdoorSurfaces.Add(winWall.GetSurface(true));
wiZone.AddSurface(winWall.GetSurface(false));
winWall.SetIncline(nIn, true);
Wall wiwWall = walls[4] = new Wall(wl, "West wall in the west interior zone");
wiwWall.SurfaceArea = 3 * 4;
outdoorSurfaces.Add(wiwWall.GetSurface(true));
wiZone.AddSurface(wiwWall.GetSurface(false));
wiwWall.SetIncline(wIn, true);
Wall wicWall = walls[5] = new Wall(wl, "Ceiling in the west interior zone");
wicWall.SurfaceArea = 4 * 5;
outdoorSurfaces.Add(wicWall.GetSurface(true));
wiZone.AddSurface(wicWall.GetSurface(false));
wicWall.SetIncline(hIn, true);
Wall wifWall = walls[6] = new Wall(wl, "Floor in the west interior zone");
wifWall.SurfaceArea = 4 * 5;
outdoor.AddGroundWallSurface(wifWall.GetSurface(true));
wiZone.AddSurface(wifWall.GetSurface(false));
Wall epwWall = walls[7] = new Wall(wl, "East wall in the east perimeter zone");
epwWall.SurfaceArea = 3 * 3;
outdoorSurfaces.Add(epwWall.GetSurface(true));
epZone.AddSurface(epwWall.GetSurface(false));
epwWall.SetIncline(eIn, true);
Wall epcWall = walls[8] = new Wall(wl, "Ceiling in the east perimeter zone");
epcWall.SurfaceArea = 3 * 5;
outdoorSurfaces.Add(epcWall.GetSurface(true));
epZone.AddSurface(epcWall.GetSurface(false));
epcWall.SetIncline(hIn, true);
Wall epfWall = walls[9] = new Wall(wl, "Floor in the east perimeter zone");
epfWall.SurfaceArea = 3 * 5;
outdoor.AddGroundWallSurface(epfWall.GetSurface(true));
epZone.AddSurface(epfWall.GetSurface(false));
Wall einWall = walls[10] = new Wall(wl, "North wall in the east interior zone");
einWall.SurfaceArea = 5 * 3;
outdoorSurfaces.Add(einWall.GetSurface(true));
eiZone.AddSurface(einWall.GetSurface(false));
einWall.SetIncline(nIn, true);
Wall eiwWall = walls[11] = new Wall(wl, "East wall in the east interior zone");
eiwWall.SurfaceArea = 4 * 3;
outdoorSurfaces.Add(eiwWall.GetSurface(true));
eiZone.AddSurface(eiwWall.GetSurface(false));
eiwWall.SetIncline(eIn, true);
Wall eicWall = walls[12] = new Wall(wl, "Ceiling in the east interior zone");
eicWall.SurfaceArea = 4 * 5;
outdoorSurfaces.Add(eicWall.GetSurface(true));
eiZone.AddSurface(eicWall.GetSurface(false));
eicWall.SetIncline(hIn, true);
Wall eifWall = walls[13] = new Wall(wl, "Floor in the east interior zone");
eifWall.SurfaceArea = 4 * 5;
outdoor.AddGroundWallSurface(eifWall.GetSurface(true));
eiZone.AddSurface(eifWall.GetSurface(false));
Wall cpWall = walls[14] = new Wall(wl, "Inner wall at perimeter");
cpWall.SurfaceArea = 3 * 3;
wpZone.AddSurface(cpWall.GetSurface(true));
epZone.AddSurface(cpWall.GetSurface(false));
Wall ciWall = walls[15] = new Wall(wl, "Inner wall at interior");
ciWall.SurfaceArea = 4 * 3;
wiZone.AddSurface(ciWall.GetSurface(true));
eiZone.AddSurface(ciWall.GetSurface(false));
Wall wpsWall = walls[16] = new Wall(wl, "South wall in the west perimeter zone");
wpsWall.SurfaceArea = 5 * 3 - 3 * 2; //Reduce window surface area
outdoorSurfaces.Add(wpsWall.GetSurface(true));
wpZone.AddSurface(wpsWall.GetSurface(false));
wpsWall.SetIncline(sIn, true);
Wall epsWall = walls[17] = new Wall(wl, "South wall in the east perimeter zone");
epsWall.SurfaceArea = 5 * 3 - 3 * 2; //Reduce window surface area
outdoorSurfaces.Add(epsWall.GetSurface(true));
-80-
epZone.AddSurface(epsWall.GetSurface(false));
epsWall.SetIncline(sIn, true);
//Initialize outdoor surfaces
foreach (WallSurface ws in outdoorSurfaces)
{
//Add wall surfaces to Outdoor object
outdoor.AddWallSurface(ws);
//Initialize emissivity of surface
ws.InitializeEmissivity(WallSurface.SurfaceMaterial.Concrete);
}
//Add windows to the west zone
Window wWind = new Window(gPanes, "Window in the west perimeter zone");
wWind.SurfaceArea = 3 * 2;
wpZone.AddWindow(wWind);
outdoor.AddWindow(wWind);
//Add windows to the east zone
Window eWind = new Window(gPanes, "Window in the east perimeter zone");
eWind.SurfaceArea = 3 * 2;
//Set horizontal sun shade.
eWind.Shade = SunShade.MakeHorizontalSunShade(3, 2, 1, 1, 1, 0.5, sIn);
wpZone.AddWindow(eWind);
outdoor.AddWindow(eWind);
//Creat an insances of the Room class and MultiRoom class
Room eRm = new Room(new Zone[] { epZone, eiZone }); //East room
Room wRm = new Room(new Zone[] { wpZone, wiZone }); //Weast room
MultiRoom mRoom = new MultiRoom(new Room[] { eRm, wRm }); //Multi room (east and west rooms)
mRoom.SetTimeStep(3600);
//Set ventilation volume
wpZone.VentilationVolume = 10; //Only west perimeter zone has outdoor air ventilation
mRoom.SetAirFlow(wpZone, wiZone, 10);
mRoom.SetAirFlow(epZone, eiZone, 10);
mRoom.SetAirFlow(eiZone, epZone, 10);
//Set short wave radiation distribution:60% of short wave is distributed to perimeter floor.
double sfSum = 0;
foreach (ISurface isf in eRm.GetSurface()) sfSum += isf.Area;
sfSum -= epfWall.SurfaceArea;
foreach (ISurface isf in eRm.GetSurface()) eRm.SetShortWaveRadiationRate(isf, isf.Area / sfSum * 0.4);
eRm.SetShortWaveRadiationRate(epfWall.GetSurface(false), 0.6);
sfSum = 0;
foreach (ISurface isf in wRm.GetSurface()) sfSum += isf.Area;
sfSum -= wpfWall.SurfaceArea;
foreach (ISurface isf in wRm.GetSurface()) wRm.SetShortWaveRadiationRate(isf, isf.Area / sfSum * 0.4);
wRm.SetShortWaveRadiationRate(wpfWall.GetSurface(false), 0.6);
//Output title wrine to standard output stream
StreamWriter sWriter = new StreamWriter("AirStateAndHeatLoadTest2.csv");
foreach (Zone zn in zones) sWriter.Write(zn.Name + "Drybulb temperature[C], " + zn.Name +
"Humidity ratio[kg/kgDA], " + zn.Name + "Sensible heat load[W], " + zn.Name + "Latent heat load[W], ");
sWriter.WriteLine();
//Update the state (Iterate 100 times to make state steady)
for (int i = 0; i < 100; i++)
{
DateTime dTime = new DateTime(2007, 8, 3, 0, 0, 0);
for (int j = 0; j < 24; j++)
{
//Set date and time to Sun and Zone object.
sun.Update(dTime);
mRoom.SetCurrentDateTime(dTime);
//Operate HVAC system (8:00~19:00)
bool operating = (8 <= dTime.Hour && dTime.Hour <= 19);
foreach (Zone zn in zones)
{
zn.ControlHumidityRatio = operating;
zn.ControlDrybulbTemperature = operating;
}
//Set weather state.
outdoor.AirState = new MoistAir(dbt[j], hum[j]);
outdoor.NocturnalRadiation = nrd[j];
sun.SetGlobalHorizontalRadiation(drd[j], dnr[j]);
//Set ventilation air state.
wpZone.VentilationAirState = outdoor.AirState;
-81-
Figure 6.30 The sample program calculating the air state and the heat load with MultiRoom class
Figure 6.31 and figure 6.32 shows the result of the simulation. The heat load of the west interior zone is
affected by ventilation at the perimeter zone, since the ventilation between the interior zone and the perimeter
zone is explicitly solved in the MultiRoom class.
West perimeter
West interior
East perimeter
8:00
12:00
East interior
Drybulb temperature[C]
33
32
31
30
29
28
27
26
25
0:00
2:00
4:00
6:00
10:00
14:00
16:00
18:00
20:00
22:00
20:00
22:00
Figure 6.31
West perimeter
West interior
East perimeter
8:00
12:00
East interior
2000
1600
1200
800
400
0
0:00
2:00
4:00
6:00
10:00
14:00
Figure 6.32
-82-
16:00
18:00
1) Daniel R. Clark : HVACSIM building systems and equipment simulation program reference manual
2) : , , 1986
3) Hiroyasu Okuyama : Bouilding Heat and Air Transfer Models Based on System Theory, Bulletin of the Japan Society for
Industrial and Applied Mathematics, 13(1), pp.61-71, 2003
4) A.P.Gagge et al. : A standard predictive index of human response to the thermal environment, AHRAE Transaction, Vol.93, 1987
5) S.Tanabe, K.Kobayashi, J.Nakano, Y.Ozeki et al.. 2002. Evaluation of thermal comfort using combined multi-node
thermoregulation (65MN) and radiation models and computational fluid dynamics (CFD). Energy and Buildings. No.34. pp.637646.
6) Kimura, K., Stephenson, D.G. : Solar radiation on cloudy days, ASHRAE Transactions, Vol. 75, Part 1 (1969), pp.227~234
7) Bugler, J.W. : The determination of hourly insolation on an inclined plane using a diffuse irradiance model based on hourly
measured global horizontal insolation, Solar Energy, 19 (1977), pp.477~491
8) Orgill, J.F., Hollands, K.G.T. : Correlation equation for hourly diffuse radiation on a horizontal surface, Solar Energy, 19-4
(1977), pp.357~359
9) Spencer, J.W. : A comparison of methods for estimating hourly diffuse solar radiation from global solar radiation, Solar Energy,
29-1 (1982), pp.19~32
10) Berlage,Von H.P.:Zur Theorie der Beleuchtung einer horizontalen Flache durch Tageslicht,Meteorologische Zeitschrift, May
1928,pp.174-180
11) :, 2,pp.21-24,1960
12) :,,1978
13) Liu,B.Y.H & Jordan,R.C:The interrelationship and characteristic distribution of direct, diffuse and total solar radiation, solar
energy, Vol.4, No.3, 1960
14) ,: ,,No.267,pp.8390,1978, 0530
15) :,,No.330,pp.96-108,19830830
16) H.Akasaka:Model of circumsolar radiation and diffuse sky radiation including cloudy sky, ISES, Solar World Congress, 1991
17) : 6 ,
,pp.857-858,1991
18) : , , 59-4, 1985, pp.323~329
19) , : , 29 , 1961-1, , 34
, 1963-5
20) , : ,
(372), 59-66, 1987, 0228
-83-