Skip to content

Commit f8b436f

Browse files
authored
Merge pull request #369 from wouterpeere/issue343-implementation-of-kilfrost-geo-and-kilfrost-geo-plus-in-ghetool
Issue343 implementation of kilfrost geo and kilfrost geo plus in ghetool
2 parents d571c43 + 0578f04 commit f8b436f

File tree

11 files changed

+326
-5
lines changed

11 files changed

+326
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1212
- Added Turbocollector from Muovitech.
1313
- Add flag in pressure drop calculation to in or exclude the pressure drop in the bend.
1414
- Added conical borehole heat exchangers (like the GEROtherm VARIO and FLUX probe from HakaGerodur).
15+
- Add Kilfrost GEO and Kilfrost GEO Plus as commercial fluids (#issue 343).
1516
- Add utility function to calculate resulting load for hybrid systems (#issue 367).
1617

1718
### Fixed

GHEtool/Examples/kilfrost.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""
2+
This file contains the code for the effective borehole thermal resistance graph and pressure drop graph for the
3+
Kilfrost GEO and Kilfrost GEO Plus products.
4+
"""
5+
6+
from GHEtool import *
7+
8+
import matplotlib.pyplot as plt
9+
import numpy as np
10+
11+
single = SingleUTube(1.5, 0.013, 0.016, 0.4, 0.035)
12+
double = DoubleUTube(1.5, 0.013, 0.016, 0.4, 0.035)
13+
14+
meg = TemperatureDependentFluidData('MEG', 26, mass_percentage=False).create_constant(0)
15+
mpg = TemperatureDependentFluidData('MPG', 30, mass_percentage=False).create_constant(0)
16+
kilfrostgeo = TemperatureDependentFluidData('Kilfrost GEO', 30, mass_percentage=False).create_constant(0)
17+
kilfrostgeoplus = TemperatureDependentFluidData('Kilfrost GEO', 33, mass_percentage=False).create_constant(0)
18+
19+
flow_range = np.arange(0.1, 1.5, 0.01)
20+
21+
for jdx, pipe in enumerate((single, double)):
22+
dp_meg = np.zeros(len(flow_range))
23+
dp_mpg = np.zeros(len(flow_range))
24+
dp_kilfrost = np.zeros(len(flow_range))
25+
dp_kilfrostplus = np.zeros(len(flow_range))
26+
rb_meg = np.zeros(len(flow_range))
27+
rb_mpg = np.zeros(len(flow_range))
28+
rb_kilfrost = np.zeros(len(flow_range))
29+
rb_kilfrostplus = np.zeros(len(flow_range))
30+
31+
for idx, flow in enumerate(flow_range):
32+
borehole_meg = Borehole(meg, pipe, ConstantFlowRate(vfr=flow))
33+
borehole_mpg = Borehole(mpg, pipe, ConstantFlowRate(vfr=flow))
34+
borehole_kilfrost = Borehole(kilfrostgeo, pipe, ConstantFlowRate(vfr=flow))
35+
borehole_kilfrostplus = Borehole(kilfrostgeoplus, pipe, ConstantFlowRate(vfr=flow))
36+
37+
dp_meg[idx] = borehole_meg.pipe_data.pressure_drop(borehole_meg.fluid_data, borehole_meg.flow_data, 150)
38+
dp_mpg[idx] = borehole_mpg.pipe_data.pressure_drop(borehole_mpg.fluid_data, borehole_mpg.flow_data, 150)
39+
dp_kilfrost[idx] = borehole_kilfrost.pipe_data.pressure_drop(borehole_kilfrost.fluid_data,
40+
borehole_kilfrost.flow_data, 150)
41+
dp_kilfrostplus[idx] = borehole_kilfrostplus.pipe_data.pressure_drop(borehole_kilfrostplus.fluid_data,
42+
borehole_kilfrostplus.flow_data, 150)
43+
44+
rb_meg[idx] = borehole_meg.calculate_Rb(150, 1, 0.075, 2)
45+
rb_mpg[idx] = borehole_mpg.calculate_Rb(150, 1, 0.075, 2)
46+
rb_kilfrost[idx] = borehole_kilfrost.calculate_Rb(150, 1, 0.075, 2)
47+
rb_kilfrostplus[idx] = borehole_kilfrostplus.calculate_Rb(150, 1, 0.075, 2)
48+
49+
plt.figure()
50+
plt.plot(flow_range, dp_meg, label="MEG 26 v/v%")
51+
plt.plot(flow_range, dp_mpg, label="MPG 30 v/v%")
52+
plt.plot(flow_range, dp_kilfrost, label="Kilfrost GEO 30 v/v%")
53+
plt.plot(flow_range, dp_kilfrostplus, label="Kilfrost GEO Plus 33 v/v%")
54+
55+
plt.title(f'Pressure drop for a borehole of 150m deep with a {("single", "double")[jdx]} DN32')
56+
plt.ylabel('Pressure drop [kPa]')
57+
plt.xlabel('Volume flow [l/s]')
58+
plt.legend()
59+
plt.figure()
60+
61+
plt.plot(flow_range, rb_meg, label="MEG 26 v/v%")
62+
plt.plot(flow_range, rb_mpg, label="MPG 30 v/v%")
63+
plt.plot(flow_range, rb_kilfrost, label="Kilfrost GEO 30 v/v%")
64+
plt.plot(flow_range, rb_kilfrostplus, label="Kilfrost GEO Plus 33 v/v%")
65+
66+
plt.title(f'Borehole thermal resistance for a borehole of 150m deep with a {("single", "double")[jdx]} DN32')
67+
plt.ylabel('Effective borehole thermal resistance [mK/W]')
68+
plt.xlabel('Volume flow [l/s]')
69+
plt.legend()
70+
plt.show()
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"""
2+
This file contains the data of the Kilfrost GEO antifreeze from Kilfrost.
3+
Visit https://kilfrost.com/kilfrost-geo for more information.
4+
"""
5+
6+
import numpy as np
7+
8+
from GHEtool.VariableClasses.FluidData.CommercialFluids._CommercialFluids import _CommercialFluids
9+
10+
11+
class KilfrostGEO(_CommercialFluids):
12+
13+
def __init__(self, volume_ratio: float):
14+
super().__init__(volume_ratio)
15+
16+
self._temperatures = np.arange(40, -40, -5)
17+
self._volume_ratio_array = np.array([20, 24, 32, 35, 39, 50, 60]) / 100
18+
19+
self._freezing_array = np.array([-8.3, -10, -15, -17.5, -20, -30, -40])
20+
self._k_f_array = np.array([
21+
[0.579, 0.570, 0.550, 0.541, 0.532, 0.503, 0.479], # 40°C
22+
[0.572, 0.564, 0.544, 0.536, 0.527, 0.499, 0.475], # 35°C
23+
[0.566, 0.558, 0.538, 0.530, 0.521, 0.494, 0.471], # 30°C
24+
[0.559, 0.551, 0.532, 0.524, 0.516, 0.489, 0.466], # 25°C
25+
[0.552, 0.544, 0.526, 0.518, 0.510, 0.483, 0.461], # 20°C
26+
[0.544, 0.537, 0.519, 0.511, 0.503, 0.478, 0.456], # 15°C
27+
[0.536, 0.529, 0.512, 0.504, 0.497, 0.472, 0.451], # 10°C
28+
[0.528, 0.521, 0.504, 0.497, 0.490, 0.466, 0.446], # 5°C
29+
[0.519, 0.512, 0.496, 0.489, 0.482, 0.459, 0.440], # 0°C
30+
[0.510, 0.504, 0.488, 0.482, 0.475, 0.453, 0.435], # -5°C
31+
[np.nan, np.nan, 0.480, 0.473, 0.467, 0.446, 0.429], # -10°C
32+
[np.nan, np.nan, np.nan, 0.465, 0.459, 0.439, 0.422], # -15°C
33+
[np.nan, np.nan, np.nan, np.nan, np.nan, 0.432, 0.416], # -20°C
34+
[np.nan, np.nan, np.nan, np.nan, np.nan, 0.424, 0.409], # -25°C
35+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.403], # -30°C
36+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.396], # -35°C
37+
]) # W/(mK)
38+
39+
self._rho_array = np.array([
40+
[1.0803, 1.0910, 1.1208, 1.1347, 1.1479, 1.1939, 1.2291], # 40°C
41+
[1.0825, 1.0933, 1.1232, 1.1371, 1.1504, 1.1967, 1.2322], # 35°C
42+
[1.0847, 1.0955, 1.1255, 1.1396, 1.1529, 1.1995, 1.2352], # 30°C
43+
[1.0868, 1.0977, 1.1278, 1.1419, 1.1553, 1.2021, 1.2382], # 25°C
44+
[1.0888, 1.0997, 1.1300, 1.1442, 1.1576, 1.2047, 1.2411], # 20°C
45+
[1.0908, 1.1017, 1.1322, 1.1464, 1.1599, 1.2073, 1.2439], # 15°C
46+
[1.0926, 1.1037, 1.1342, 1.1485, 1.1621, 1.2098, 1.2466], # 10°C
47+
[1.0945, 1.1055, 1.1362, 1.1506, 1.1643, 1.2122, 1.2493], # 5°C
48+
[1.0962, 1.1073, 1.1382, 1.1526, 1.1663, 1.2145, 1.2519], # 0°C
49+
[1.0979, 1.1091, 1.1401, 1.1545, 1.1683, 1.2168, 1.2545], # -5°C
50+
[np.nan, np.nan, 1.1419, 1.1564, 1.1703, 1.2190, 1.2570], # -10°C
51+
[np.nan, np.nan, np.nan, 1.1582, 1.1722, 1.2212, 1.2594], # -15°C
52+
[np.nan, np.nan, np.nan, np.nan, np.nan, 1.2233, 1.2618], # -20°C
53+
[np.nan, np.nan, np.nan, np.nan, np.nan, 1.2253, 1.2641], # -25°C
54+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 1.2663], # -30°C
55+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 1.2688], # -35°C
56+
]) * 1000 # kg/m³
57+
58+
self._mu_array = np.array([
59+
[1.1409, 1.2336, 1.5255, 1.6893, 1.8708, 2.8132, 4.2000], # 40°C
60+
[1.2591, 1.3644, 1.6961, 1.8830, 2.0908, 3.1778, 4.8001], # 35°C
61+
[1.3988, 1.5193, 1.8993, 2.1141, 2.3539, 3.6184, 5.5376], # 30°C
62+
[1.5658, 1.7049, 2.1438, 2.3928, 2.6720, 4.1576, 6.4559], # 25°C
63+
[1.7674, 1.9297, 2.4416, 2.7330, 3.0616, 4.8262, 7.6162], # 20°C
64+
[2.0138, 2.2053, 2.8090, 3.1539, 3.5450, 5.6673, 9.1059], # 15°C
65+
[2.3188, 2.5479, 3.2686, 3.6821, 4.1539, 6.7430, 11.0525], # 10°C
66+
[2.7019, 2.9800, 3.8528, 4.3555, 4.9336, 8.1437, 13.6468], # 5°C
67+
[3.1905, 3.5339, 4.6078, 5.2289, 5.9497, 10.0050, 17.1805], # 0°C
68+
[3.8239, 4.2563, 5.6013, 6.3828, 7.3000, 12.5353, 22.1121], # -5°C
69+
[np.nan, np.nan, 6.9329, 7.9363, 9.1305, 16.0623, 29.1829], # -10°C
70+
[np.nan, np.nan, np.nan, 10.0644, 11.6600, 21.1147, 39.6298], # -15°C
71+
[np.nan, np.nan, np.nan, np.nan, np.nan, 28.5583, 55.5932], # -20°C
72+
[np.nan, np.nan, np.nan, np.nan, np.nan, 39.8041, 80.9717], # -25°C
73+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 123.5548], # -30°C
74+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 202.4194], # -35°C
75+
]) * 1e-3 # convert from mPa.s to Pa.s
76+
77+
self._cp_array = np.array([
78+
[3.6367, 3.572, 3.388, 3.300, 3.215, 2.914, 2.688], # 40°C
79+
[3.6205, 3.555, 3.368, 3.279, 3.194, 2.893, 2.670], # 35°C
80+
[3.6044, 3.537, 3.348, 3.258, 3.172, 2.871, 2.652], # 30°C
81+
[3.5885, 3.520, 3.328, 3.238, 3.151, 2.849, 2.634], # 25°C
82+
[3.5729, 3.503, 3.308, 3.217, 3.129, 2.827, 2.615], # 20°C
83+
[3.5575, 3.487, 3.289, 3.196, 3.108, 2.805, 2.596], # 15°C
84+
[3.5425, 3.471, 3.270, 3.176, 3.087, 2.782, 2.577], # 10°C
85+
[3.5280, 3.455, 3.251, 3.156, 3.066, 2.760, 2.557], # 5°C
86+
[3.5139, 3.439, 3.232, 3.136, 3.045, 2.738, 2.538], # 0°C
87+
[3.5004, 3.425, 3.214, 3.117, 3.025, 2.717, 2.519], # -5°C
88+
[np.nan, np.nan, 3.197, 3.098, 3.005, 2.695, 2.499], # -10°C
89+
[np.nan, np.nan, np.nan, np.nan, 2.985, 2.674, 2.480], # -15°C
90+
[np.nan, np.nan, np.nan, np.nan, np.nan, 2.653, 2.461], # -20°C
91+
[np.nan, np.nan, np.nan, np.nan, np.nan, 2.632, 2.443], # -25°C
92+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2.424], # -30°C
93+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2.406], # -35°C
94+
]) * 1000 # J/(kgK)
95+
96+
if self.check_volume_ratio(volume_ratio):
97+
self._volume_ratio = volume_ratio
98+
99+
# update nan values
100+
self._fill_nan_values_vertically()
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"""
2+
This file contains the data of the Kilfrost GEO PLUS antifreeze from Kilfrost.
3+
Visit https://kilfrost.com/kilfrost-geo-plus for more information.
4+
"""
5+
6+
import numpy as np
7+
8+
from GHEtool.VariableClasses.FluidData.CommercialFluids._CommercialFluids import _CommercialFluids
9+
10+
11+
class KilfrostGEOPlus(_CommercialFluids):
12+
13+
def __init__(self, volume_ratio: float):
14+
super().__init__(volume_ratio)
15+
16+
self._temperatures = np.arange(40, -40, -5)
17+
self._volume_ratio_array = np.array([27, 35, 39, 42, 49, 55, 65]) / 100
18+
19+
self._freezing_array = np.array([-10, -15, -17.5, -20, -25, -30, -40])
20+
self._k_f_array = np.array([
21+
[0.565, 0.546, 0.536, 0.529, 0.512, 0.498, 0.474], # 40°C
22+
[0.559, 0.540, 0.531, 0.524, 0.507, 0.493, 0.470], # 35°C
23+
[0.553, 0.534, 0.525, 0.518, 0.502, 0.488, 0.466], # 30°C
24+
[0.546, 0.528, 0.519, 0.512, 0.497, 0.483, 0.461], # 25°C
25+
[0.539, 0.522, 0.513, 0.506, 0.491, 0.478, 0.456], # 20°C
26+
[0.532, 0.515, 0.507, 0.500, 0.485, 0.473, 0.452], # 15°C
27+
[0.524, 0.508, 0.500, 0.494, 0.479, 0.467, 0.447], # 10°C
28+
[0.516, 0.501, 0.493, 0.487, 0.473, 0.461, 0.441], # 5°C
29+
[0.508, 0.493, 0.485, 0.480, 0.466, 0.455, 0.436], # 0°C
30+
[0.500, 0.485, 0.478, 0.472, 0.459, 0.449, 0.430], # -5°C
31+
[np.nan, 0.477, 0.470, 0.465, 0.452, 0.442, 0.425], # -10°C
32+
[np.nan, np.nan, 0.462, 0.457, 0.445, 0.435, 0.419], # -15°C
33+
[np.nan, np.nan, np.nan, np.nan, 0.437, 0.428, 0.412], # -20°C
34+
[np.nan, np.nan, np.nan, np.nan, np.nan, 0.421, 0.406], # -25°C
35+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.400], # -30°C
36+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.393], # -35°C
37+
]) # W/(mK)
38+
39+
self._rho_array = np.array([
40+
[1.0924, 1.1227, 1.1359, 1.1481, 1.1700, 1.1905, 1.2281], # 40°C
41+
[1.0948, 1.1252, 1.1385, 1.1507, 1.1730, 1.1933, 1.2311], # 35°C
42+
[1.0970, 1.1276, 1.1410, 1.1533, 1.1760, 1.1960, 1.2340], # 30°C
43+
[1.0992, 1.1299, 1.1434, 1.1558, 1.1783, 1.1987, 1.2369], # 25°C
44+
[1.1012, 1.1322, 1.1457, 1.1582, 1.1810, 1.2013, 1.2397], # 20°C
45+
[1.1032, 1.1343, 1.1480, 1.1606, 1.1830, 1.2039, 1.2425], # 15°C
46+
[1.1050, 1.1363, 1.1501, 1.1628, 1.1860, 1.2064, 1.2452], # 10°C
47+
[1.1066, 1.1383, 1.1522, 1.1650, 1.1880, 1.2088, 1.2478], # 5°C
48+
[1.1082, 1.1401, 1.1541, 1.1670, 1.1900, 1.2112, 1.2504], # 0°C
49+
[1.1096, 1.1418, 1.1560, 1.1690, 1.1920, 1.2135, 1.2529], # -5°C
50+
[np.nan, 1.1434, 1.1577, 1.1709, 1.1950, 1.2157, 1.2554], # -10°C
51+
[np.nan, np.nan, 1.1594, 1.1727, 1.1970, 1.2179, 1.2578], # -15°C
52+
[np.nan, np.nan, np.nan, np.nan, 1.1990, 1.2200, 1.2602], # -20°C
53+
[np.nan, np.nan, np.nan, np.nan, np.nan, 1.2221, 1.2625], # -25°C
54+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 1.2648], # -30°C
55+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 1.2671], # -35°C
56+
]) * 1000 # kg/cm³
57+
58+
self._mu_array = np.array([
59+
[1.2166, 1.4830, 1.6334, 1.7952, 2.1532, 2.5660, 3.8211], # 40°C
60+
[1.3448, 1.6473, 1.8188, 2.0037, 2.4147, 2.8916, 4.3553], # 35°C
61+
[1.4966, 1.8429, 2.0399, 2.2529, 2.7287, 3.2847, 5.0096], # 30°C
62+
[1.6782, 2.0782, 2.3065, 2.5541, 3.1100, 3.7648, 5.8214], # 25°C
63+
[1.8979, 2.3643, 2.6316, 2.9223, 3.5785, 4.3586, 6.8432], # 20°C
64+
[2.1666, 2.7168, 3.0331, 3.3783, 4.1619, 5.1033, 8.1498], # 15°C
65+
[2.4998, 3.1570, 3.5361, 3.9509, 4.8991, 6.0520, 9.8500], # 10°C
66+
[2.9189, 3.7152, 4.1759, 4.6815, 5.8456, 7.2815, 12.1053], # 5°C
67+
[3.4550, 4.4355, 5.0042, 5.6301, 7.0829, 8.9059, 15.1621], # 0°C
68+
[4.1533, 5.3832, 6.0975, 6.8857, 8.7321, 11.0988, 19.4047], # -5°C
69+
[np.nan, 6.6574, 7.5721, 8.5836, 10.9782, 14.1314, 25.4508], # -10°C
70+
[np.nan, np.nan, 9.6084, 10.9328, 14.1079, 18.4394, 34.3205], # -15°C
71+
[np.nan, np.nan, np.nan, np.nan, 18.5708, 24.7430, 47.7546], # -20°C
72+
[np.nan, np.nan, np.nan, np.nan, np.nan, 34.2616, 68.8411], # -25°C
73+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 103.4275], # -30°C
74+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 164.3234], # -35°C
75+
]) * 1e-3 # convert from mPa.s to Pa.s
76+
77+
self._cp_array = np.array([
78+
[3.325, 3.159, 3.083, 3.013, 2.888, 2.783, 2.635], # 40°C
79+
[3.318, 3.151, 3.075, 3.004, 2.878, 2.773, 2.624], # 35°C
80+
[3.310, 3.142, 3.066, 2.995, 2.868, 2.762, 2.612], # 30°C
81+
[3.303, 3.134, 3.058, 2.986, 2.859, 2.752, 2.601], # 25°C
82+
[3.295, 3.126, 3.049, 2.977, 2.849, 2.742, 2.589], # 20°C
83+
[3.287, 3.118, 3.040, 2.968, 2.840, 2.732, 2.577], # 15°C
84+
[3.280, 3.109, 3.032, 2.960, 2.830, 2.721, 2.566], # 10°C
85+
[3.272, 3.101, 3.023, 2.951, 2.821, 2.711, 2.554], # 5°C
86+
[3.265, 3.093, 3.015, 2.942, 2.811, 2.701, 2.543], # 0°C
87+
[3.257, 3.085, 3.006, 2.933, 2.802, 2.691, 2.531], # -5°C
88+
[np.nan, 3.077, 2.998, 2.924, 2.792, 2.681, 2.520], # -10°C
89+
[np.nan, np.nan, 2.989, 2.915, 2.783, 2.670, 2.508], # -15°C
90+
[np.nan, np.nan, np.nan, np.nan, 2.773, 2.660, 2.497], # -20°C
91+
[np.nan, np.nan, np.nan, np.nan, np.nan, 2.650, 2.485], # -25°C
92+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2.474], # -30°C
93+
[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2.462], # -35°C
94+
]) * 1000 # J/(kgK)
95+
96+
if self.check_volume_ratio(volume_ratio):
97+
self._volume_ratio = volume_ratio
98+
99+
# update nan values
100+
self._fill_nan_values_vertically()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
from .ThermoxDTX import ThermoxDTX
22
from .CoolflowNTP import CoolflowNTP
3+
from .KilfrostGEO import KilfrostGEO
4+
from .KilfrostGEOPlus import KilfrostGEOPlus

GHEtool/VariableClasses/FluidData/TemperatureDependentFluidData.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def __init__(self, name: str, percentage: float, mass_percentage: bool = True):
3030
Parameters
3131
----------
3232
name : str
33-
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP
33+
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP, Kilfrost GEO, Kilfrost GEO Plus
3434
percentage : float
3535
Percentage of the antifreeze [%]
3636
mass_percentage : bool
@@ -123,7 +123,7 @@ def _get_fluid(self, name: str, percentage: float) -> tuple:
123123
Parameters
124124
----------
125125
name : str
126-
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP
126+
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP, Kilfrost GEO, Kilfrost GEO Plus
127127
percentage : float
128128
Percentage of the antifreeze [%]
129129
@@ -157,6 +157,12 @@ def _get_fluid(self, name: str, percentage: float) -> tuple:
157157
if name == 'Coolflow NTP':
158158
fluid = CoolflowNTP(percentage / 100)
159159
return fluid, fluid.freeze_point(percentage / 100)
160+
if name == 'Kilfrost GEO':
161+
fluid = KilfrostGEO(percentage / 100)
162+
return fluid, fluid.freeze_point(percentage / 100)
163+
if name == 'Kilfrost GEO Plus':
164+
fluid = KilfrostGEOPlus(percentage / 100)
165+
return fluid, fluid.freeze_point(percentage / 100)
160166
raise ValueError(f'The fluid {name} is not yet supported by GHEtool.')
161167

162168
def set_fluid(self, name: str, percentage: float) -> None:
@@ -166,7 +172,7 @@ def set_fluid(self, name: str, percentage: float) -> None:
166172
Parameters
167173
----------
168174
name : str
169-
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP
175+
Name of the antifreeze. Currently, there is: Water, MEG, MPG, MEA, MMA, Thermox DTX, Coolflow NTP, Kilfrost GEO, Kilfrost GEO Plus
170176
percentage : float
171177
Percentage of the antifreeze [%]
172178

GHEtool/test/unit-tests/test_fluiddata.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,40 @@ def test_commercial_fluids_data():
284284
with pytest.raises(ValueError):
285285
fluid = ThermoxDTX(100)
286286

287+
# test kilfrost
288+
fluid = KilfrostGEO(0.35)
289+
assert np.isclose(fluid.freeze_point(0.35), -17.5)
290+
assert np.isclose(fluid.conductivity(10), 0.504)
291+
assert np.isclose(fluid.conductivity(5), 0.497)
292+
assert np.isclose(fluid.density(10), 1148.5)
293+
assert np.isclose(fluid.specific_heat(10), 3176)
294+
assert np.isclose(fluid.viscosity(10), 3.6821 * 1e-3)
295+
296+
fluid = TemperatureDependentFluidData('Kilfrost GEO', 35, mass_percentage=False)
297+
assert np.isclose(fluid.freezing_point, -17.5)
298+
assert np.isclose(fluid.k_f(10), 0.504)
299+
assert np.isclose(fluid.k_f(5), 0.497)
300+
assert np.isclose(fluid.rho(10), 1148.5)
301+
assert np.isclose(fluid.cp(10), 3176)
302+
assert np.isclose(fluid.mu(10), 3.6821 * 1e-3)
303+
304+
# test kilfrost GEO Plus
305+
fluid = KilfrostGEOPlus(0.42)
306+
assert np.isclose(fluid.freeze_point(0.42), -20)
307+
assert np.isclose(fluid.conductivity(10), 0.494)
308+
assert np.isclose(fluid.conductivity(5), 0.487)
309+
assert np.isclose(fluid.density(10), 1162.8)
310+
assert np.isclose(fluid.specific_heat(10), 2960)
311+
assert np.isclose(fluid.viscosity(10), 3.9509 * 1e-3)
312+
313+
fluid = TemperatureDependentFluidData('Kilfrost GEO Plus', 42, mass_percentage=False)
314+
assert np.isclose(fluid.freezing_point, -20)
315+
assert np.isclose(fluid.k_f(10), 0.494)
316+
assert np.isclose(fluid.k_f(5), 0.487)
317+
assert np.isclose(fluid.rho(10), 1162.8)
318+
assert np.isclose(fluid.cp(10), 2960)
319+
assert np.isclose(fluid.mu(10), 3.9509 * 1e-3)
320+
287321

288322
def test_temp():
289323
temp = []

0 commit comments

Comments
 (0)