-
Notifications
You must be signed in to change notification settings - Fork 0
/
Construction.cs
127 lines (106 loc) · 3.53 KB
/
Construction.cs
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WallSectionWidget
{
using System;
using System.Collections.Generic;
public class Construction
{
public List<Layer> Layers;
public double InteriorTemperature = 20.0;
public double ExteriorTemperature = 5.0;
public double InteriorHumidity = 50.0;
public double ExteriorHumidity = 80.0;
public GHIOParam<Construction> GHIOParam => new GHIOParam<Construction>(this);
public double Thickness
{
get
{
double s = 0;
foreach (Layer layer in Layers)
{
s += layer.Thickness;
}
return s;
}
}
public double Resistance
{
get
{
double rr = 0;
foreach (Layer layer in Layers)
{
rr += layer.Resistivity;
}
return rr;
}
}
public double VapourResistance
{
get
{
double rr = 0;
foreach (Layer layer in Layers)
{
rr += layer.VapourResistivity;
}
return rr;
}
}
public double U
{
get { return 1 / Resistance; }
}
public double TemperatureDifference
{
get { return ExteriorTemperature - InteriorTemperature; }
}
public double InteriorVapourPressure
{
get { return Psychrometrics.VapourPressure(InteriorTemperature, InteriorHumidity); }
}
public double ExteriorVapourPressure
{
get { return Psychrometrics.VapourPressure(ExteriorTemperature, ExteriorHumidity); }
}
public double VapourPressureDifference
{
get { return ExteriorVapourPressure - InteriorVapourPressure; }
}
public void UpdateLayers()
{
double ti = InteriorTemperature;
double pi = InteriorVapourPressure;
double xi = 0.0;
foreach (Layer layer in Layers)
{
// assign the correct temperature difference for each layer
layer.TemperatureDifference = layer.Resistivity / Resistance * TemperatureDifference;
layer.InteriorTemperature = ti;
// update the inner surface temperature for the next layer
ti += layer.TemperatureDifference;
// assign the correct VP difference for each layer
layer.VapourPressureDifference = layer.VapourResistivity / VapourResistance * VapourPressureDifference;
layer.InteriorVapourPressure = pi;
// update the inner surface VP for the next layer
pi += layer.VapourPressureDifference;
// assign the correct innter surface depth for each layer
layer.InteriorSideDepthFromSurface = xi;
// update the inner surface
xi += layer.Thickness;
}
}
public static Construction Default => new Construction
{
Layers = new List<Layer> {
new Layer(Material.Lamination, 0.04),
new Layer(Material.Cork, 0.16),
new Layer(Material.Concrete, 0.3),
},
};
}
}