From 1bd4f231d6887627beb9138a3c0c43a5d6cb4fb0 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 09:29:24 +0100 Subject: [PATCH 01/18] Update examples --- GHEtool/Examples/active_passive_cooling.py | 67 ++++++++++--------- .../custom_borefield_configuration.py | 12 ++-- .../effect_of_borehole_configuration.py | 28 ++++---- GHEtool/Examples/main_functionalities.py | 24 +++---- GHEtool/Examples/optimise_load_profile.py | 6 +- GHEtool/Examples/separatus.py | 2 +- .../Examples/sizing_with_Rb_calculation.py | 34 ++++++---- GHEtool/Examples/sizing_with_building_load.py | 30 ++++----- .../sizing_with_building_load_hourly.py | 16 ++--- GHEtool/Examples/start_in_different_month.py | 4 +- README.md | 9 +-- .../code/Improvements/speed_improvement.py | 9 +-- docs/sources/code/getting_started.md | 4 +- 13 files changed, 128 insertions(+), 117 deletions(-) diff --git a/GHEtool/Examples/active_passive_cooling.py b/GHEtool/Examples/active_passive_cooling.py index bdd56763..3046d393 100644 --- a/GHEtool/Examples/active_passive_cooling.py +++ b/GHEtool/Examples/active_passive_cooling.py @@ -146,13 +146,13 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.Rb = 0.12 ### PASSIVE COOLING - depths = [0.9, 0] + lengths = [0.9, 0] # set initial loads cooling_ground = cooling_building.copy() heating_ground = heating_building.copy() - while abs(depths[0] - depths[1]) > 0.1: + while abs(lengths[0] - lengths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -160,8 +160,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - depth_passive = borefield.size_L4() - depths.insert(0, depth_passive) + length_passive = borefield.size_L4() + lengths.insert(0, length_passive) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -170,7 +170,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ heating_ground = update_load_COP(temp_profile, COP, heating_building) ### ACTIVE COOLING - depths = [0.9, 0] + lengths = [0.9, 0] # set initial loads cooling_ground = cooling_building.copy() @@ -178,7 +178,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.set_max_avg_fluid_temperature(25) borefield.gfunction_calculation_object.store_previous_values = False - while abs(depths[0] - depths[1]) > 0.1: + while abs(lengths[0] - lengths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -186,8 +186,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - depth_active = borefield.size_L4() - depths.insert(0, depth_active) + lenght_active = borefield.size_L4() + lengths.insert(0, lenght_active) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -204,24 +204,23 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ operational_costs_heating = [] investment_costs = [] total_costs = [] - depths = [] + lengths = [] - def f(depth: float) -> float: + def f(length: float) -> float: """ Optimisation function. Parameters ---------- - depth : float - Depth of the borefield in meters + length : float + Average length of the borehole [m] Returns ------- total_cost : float """ - borefield._update_borefield_depth(depth) - borefield.H = depth - depths.append(depth) + borefield.H = length + lengths.append(length) # initialise heating_ground = heating_building.copy() @@ -239,7 +238,7 @@ def f(depth: float) -> float: borefield.load = load # get temperature profile - borefield.calculate_temperatures(depth, hourly=True) + borefield.calculate_temperatures(length, hourly=True) temp_profile = borefield.results.peak_extraction # set previous loads @@ -263,38 +262,40 @@ def f(depth: float) -> float: return investment + operational_cost # add boundaries to figure - MIN_BOUNDARY = depth_active - MAX_BOUNDARY = depth_passive + MIN_BOUNDARY = lenght_active + MAX_BOUNDARY = length_passive def objective(trial: optuna.Trial): - depth = trial.suggest_float('depth', MIN_BOUNDARY, MAX_BOUNDARY) - return f(depth) + length = trial.suggest_float('length', MIN_BOUNDARY, MAX_BOUNDARY) + return f(length) study = optuna.create_study() study.optimize(objective, n_trials=100) - depths_sorted = copy.deepcopy(depths) - depths_sorted.sort() - depths_old_new = {} - for idx, depth in enumerate(depths_sorted): - depths_old_new[idx] = depths.index(depth) + lenghts_sorted = copy.deepcopy(lengths) + lenghts_sorted.sort() + lenghts_old_new = {} + for idx, length in enumerate(lenghts_sorted): + lenghts_old_new[idx] = lengths.index(length) # plot figures fig = plt.figure() ax1 = fig.add_subplot(111) - ax1.plot(depths_sorted, [total_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(lenghts_sorted, [total_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], marker='o', label="TC") - ax1.plot(depths_sorted, [investment_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(lenghts_sorted, [investment_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], marker='o', label="IC") - ax1.plot(depths_sorted, [operational_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(lenghts_sorted, [operational_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], marker='o', label="OC") - ax1.plot(depths_sorted, - [operational_costs_cooling[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', + ax1.plot(lenghts_sorted, + [operational_costs_cooling[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], + marker='o', label="OCc") - ax1.plot(depths_sorted, - [operational_costs_heating[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', + ax1.plot(lenghts_sorted, + [operational_costs_heating[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], + marker='o', label="OCh") - ax1.set_xlabel(r'Depth (m)', fontsize=14) + ax1.set_xlabel(r'Borehole length (m)', fontsize=14) ax1.set_ylabel(r'Costs ($k€$)', fontsize=14) ax1.legend(loc='lower left', ncol=3) ax1.tick_params(labelsize=14) diff --git a/GHEtool/Examples/custom_borefield_configuration.py b/GHEtool/Examples/custom_borefield_configuration.py index 2169662a..4d985ffb 100644 --- a/GHEtool/Examples/custom_borefield_configuration.py +++ b/GHEtool/Examples/custom_borefield_configuration.py @@ -60,21 +60,21 @@ def custom_borefield_configuration(): borefield.create_custom_dataset() # size borefield - depth = borefield.size() - print("The borehole depth is: ", depth, "m") + length = borefield.size() + print("The borehole length is: ", length, "m") # print imbalance print("The borefield imbalance is: ", borefield.load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance - # plot temperature profile for the calculated depth + # plot temperature profile for the calculated borehole length borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed depth - borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) + # plot temperature profile for a fixed length + borefield.print_temperature_profile_fixed_length(length=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(depth=90) + borefield.calculate_temperatures(length=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) diff --git a/GHEtool/Examples/effect_of_borehole_configuration.py b/GHEtool/Examples/effect_of_borehole_configuration.py index c61fcfaf..c13f6f82 100644 --- a/GHEtool/Examples/effect_of_borehole_configuration.py +++ b/GHEtool/Examples/effect_of_borehole_configuration.py @@ -22,12 +22,13 @@ def effect_borefield_configuration(): annual_cooling_load = 400 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array( + [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -40,16 +41,15 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - depth = borefield.size() - print("The borehole depth is:", depth, "m for a 11x11 field") - print("The total length is:", int(depth * 11 * 11), "m") + length = borefield.size() + print("The borehole length is:", length, "m for a 11x11 field") + print("The total borefield length is:", int(length * 11 * 11), "m") print("------------------------") - # borefield of 6x20 data = GroundConstantTemperature(3, 10) borefield_gt = gt.boreholes.rectangle_field(6, 20, 6, 6, 110, 1, 0.075) @@ -62,13 +62,13 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # size borefield - depth6_20 = borefield.size() - print("The borehole depth is:", depth6_20, "m for a 6x20 field") - print("The total length is:", int(depth6_20 * 6 * 20), "m") - print("The second field is hence", -int(depth6_20 * 6 * 20) + int(depth * 11 * 11), "m shorter") + length6_20 = borefield.size() + print("The borehole length is:", length6_20, "m for a 6x20 field") + print("The total borefield length is:", int(length6_20 * 6 * 20), "m") + print("The second field is hence", -int(length6_20 * 6 * 20) + int(length * 11 * 11), "m shorter") borefield.print_temperature_profile() -if __name__ == "__main__": # pragma: no cover +if __name__ == "__main__": # pragma: no cover effect_borefield_configuration() diff --git a/GHEtool/Examples/main_functionalities.py b/GHEtool/Examples/main_functionalities.py index 52593884..b3e6aa18 100644 --- a/GHEtool/Examples/main_functionalities.py +++ b/GHEtool/Examples/main_functionalities.py @@ -3,7 +3,7 @@ * sizing of the borefield * sizing of the borefield for a specific quadrant * plotting the temperature evolution - * plotting the temperature evolution for a specific depth + * plotting the temperature evolution for a specific length * printing the array of the temperature """ @@ -56,30 +56,30 @@ def main_functionalities(): borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - depth = borefield.size() - print("The borehole depth is: ", depth, "m") + length = borefield.size() + print("The borehole length is: ", len(), "m") # print imbalance print("The borefield imbalance is: ", borefield._borefield_load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance - # plot temperature profile for the calculated depth + # plot temperature profile for the calculated length borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed depth - borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) + # plot temperature profile for a fixed length + borefield.print_temperature_profile_fixed_length(length=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(depth=90) + borefield.calculate_temperatures(length=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) print("---------------------------------------------") # size the borefield for quadrant 3 # for more information about borefield quadrants, see (Peere et al., 2021) - depth = borefield.size(quadrant_sizing=3) - print("The borehole depth is: ", str(round(depth, 2)), "m for a sizing in quadrant 3") - # plot temperature profile for the calculated depth + length = borefield.size(quadrant_sizing=3) + print("The borehole length is: ", str(round(length, 2)), "m for a sizing in quadrant 3") + # plot temperature profile for the calculated length borefield.print_temperature_profile(legend=True) # size with a dynamic Rb* value @@ -95,8 +95,8 @@ def main_functionalities(): # when it is given as an argument to the size function, it will size correctly, but the plot will be with # constant Rb* since it has not been changed in the setup function borefield.calculation_setup(use_constant_Rb=False) - depth = borefield.size() - print("The borehole depth is: ", str(round(depth, 2)), "m for a sizing with dynamic Rb*.") + length = borefield.size() + print("The borehole length is: ", str(round(length, 2)), "m for a sizing with dynamic Rb*.") borefield.print_temperature_profile(legend=True) diff --git a/GHEtool/Examples/optimise_load_profile.py b/GHEtool/Examples/optimise_load_profile.py index af29c434..a0c66cf6 100644 --- a/GHEtool/Examples/optimise_load_profile.py +++ b/GHEtool/Examples/optimise_load_profile.py @@ -30,9 +30,9 @@ def optimise(): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 ** 6) load.load_hourly_profile("hourly_profile.csv", header=True, separator=";") - # optimise the load for a 10x10 field (see data above) and a fixed depth of 150m. + # optimise the load for a 10x10 field (see data above) and a fixed borehole length of 150m. # first for an optimisation based on the power - borefield.optimise_load_profile_power(building_load=load, depth=150) + borefield.optimise_load_profile_power(building_load=load, length=150) print(f'Max heating power (primary): {borefield.load.max_peak_extraction:,.0f}kW') print(f'Max cooling power (primary): {borefield.load.max_peak_injection:,.0f}kW') @@ -46,7 +46,7 @@ def optimise(): borefield.print_temperature_profile(plot_hourly=True) # first for an optimisation based on the energy - borefield.optimise_load_profile_energy(building_load=load, depth=150) + borefield.optimise_load_profile_energy(building_load=load, length=150) print(f'Max heating power (primary): {borefield.load.max_peak_extraction:,.0f}kW') print(f'Max cooling power (primary): {borefield.load.max_peak_injection:,.0f}kW') diff --git a/GHEtool/Examples/separatus.py b/GHEtool/Examples/separatus.py index 27c15329..08fc388f 100644 --- a/GHEtool/Examples/separatus.py +++ b/GHEtool/Examples/separatus.py @@ -2,7 +2,7 @@ This file contains a design example with the Separatus probe, in comparison with a single and double U-tube. A borehole diameter of DN90 was chosen for the Separatus probe whereas for the single and double U-tube a DN140 was assumed. A mass flow rate of 0.3 kg/s was assumed for all cases and no glycol was taken into account. -The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a depth of 110m. +The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a borehole length of 110m. The building heating and cooling demand was obtained from a residential building in Belgium. It is shown that both single U and Separatus have similar performance, whilst the double U-tube has a somewhat better diff --git a/GHEtool/Examples/sizing_with_Rb_calculation.py b/GHEtool/Examples/sizing_with_Rb_calculation.py index 955d58a8..6cee4ea5 100644 --- a/GHEtool/Examples/sizing_with_Rb_calculation.py +++ b/GHEtool/Examples/sizing_with_Rb_calculation.py @@ -2,7 +2,7 @@ This document compares the sizing with a constant Rb*-value with sizing where the Rb*-value is being recalculated. For the test, the L2 sizing method is used. The comparison is based on speed and relative accuracy in the result. -It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial depth is rather accurate. +It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial length is rather accurate. """ import time @@ -37,7 +37,7 @@ def sizing_with_Rb(): peak_load_heating_array[i, j] = np.random.randint(monthly_load_heating_array[i, j], max_value_heating) # initiate borefield model - data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the depth of the borefield + data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the borehole length fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) @@ -52,12 +52,13 @@ def sizing_with_Rb(): annual_cooling_load = 160 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array( + [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -75,8 +76,8 @@ def sizing_with_Rb(): borefield.create_custom_dataset() # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size with constant Rb* value borefield.calculation_setup(use_constant_Rb=True) @@ -88,7 +89,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_static[i] = borefield.size() end_Rb_constant = time.time() @@ -100,7 +101,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_dynamic[i] = borefield.size() end_Rb_dynamic = time.time() @@ -114,13 +115,20 @@ def sizing_with_Rb(): for i in range(number_of_iterations): difference_results[i] = results_Rb_dynamic[i] - results_Rb_static[i] - print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.max(difference_results), 3), "m or", np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), "% w.r.t. the constant Rb* approach.") - print("The mean difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.mean(difference_results), 3), "m or", np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), "% w.r.t. the constant Rb* approach.") + print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", + np.round(np.max(difference_results), 3), "m or", + np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), + "% w.r.t. the constant Rb* approach.") + print("The mean difference between the sizing with a constant and a dynamic Rb* value:", + np.round(np.mean(difference_results), 3), "m or", + np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), + "% w.r.t. the constant Rb* approach.") print("------------------------------------------------------------------------------") - # Do the same thing but with another constant Rb* value based on a borehole depth of 185m. + # Do the same thing but with another constant Rb* value based on a borehole length of 185m. - borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, 0.075) # borefield with an accurate guess of 185m for the depth of the borefield + borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, + 0.075) # borefield with an accurate guess of 185m for the borehole length borefield.set_borefield(borefield_gt) # size with a constant Rb* value diff --git a/GHEtool/Examples/sizing_with_building_load.py b/GHEtool/Examples/sizing_with_building_load.py index 3450d9f8..b79b1891 100644 --- a/GHEtool/Examples/sizing_with_building_load.py +++ b/GHEtool/Examples/sizing_with_building_load.py @@ -30,8 +30,8 @@ def size_with_scop() -> Tuple[float, float]: Returns ------- - Depth : float - Required borehole depth + Length : float + Required borehole length """ scop = SCOP(4.5) seer = SEER(1000) @@ -52,11 +52,11 @@ def size_with_scop() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) - print(f'When sizing with a constant SCOP, the required borehole depth is {depth:.2f}m. The SCOP (incl. DHW) is ' + length = borefield.size_L3(100) + print(f'When sizing with a constant SCOP, the required borehole length is {length:.2f}m. The SCOP (incl. DHW) is ' f'{borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total def size_with_variable_ground_temperature() -> Tuple[float, float]: @@ -65,8 +65,8 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: Returns ------- - Depth : float - Required borehole depth + Length : float + Required borehole length """ seer = SEER(1000) cop = COP(np.array([3.76, 4.25, 4.79, 5.34, 5.74]), np.array([-5, 0, 5, 10, 15])) @@ -87,11 +87,11 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) - print(f'When sizing with a inlet temperature dependent COP, the required borehole depth is {depth:.2f}m. ' + length = borefield.size_L3(100) + print(f'When sizing with a inlet temperature dependent COP, the required borehole length is {length:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total def size_with_part_load_data() -> Tuple[float, float]: @@ -100,8 +100,8 @@ def size_with_part_load_data() -> Tuple[float, float]: Returns ------- - Depth : float - Required borehole depth + Length : float + Required borehole length """ seer = SEER(1000) cop = COP(np.array( @@ -136,12 +136,12 @@ def size_with_part_load_data() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) + length = borefield.size_L3(100) print( - f'When sizing with a inlet temperature and part-load dependent COP, the required borehole depth is {depth:.2f}m. ' + f'When sizing with a inlet temperature and part-load dependent COP, the required borehole length is {length:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total if __name__ == "__main__": diff --git a/GHEtool/Examples/sizing_with_building_load_hourly.py b/GHEtool/Examples/sizing_with_building_load_hourly.py index 691c6566..f7e1ae8a 100644 --- a/GHEtool/Examples/sizing_with_building_load_hourly.py +++ b/GHEtool/Examples/sizing_with_building_load_hourly.py @@ -29,7 +29,7 @@ def L3_sizing() -> Tuple[float, float]: Returns ------- - depth, SCOP + length, SCOP """ # initiate borefield borefield = Borefield() @@ -53,12 +53,12 @@ def L3_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - depth = borefield.size(100, L3_sizing=True) + length = borefield.size(100, L3_sizing=True) print( - f'When sizing with an L3 method, the required borehole depth is {depth:.2f}m. ' + f'When sizing with an L3 method, the required borehole length is {length:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_heating + return length, borefield.load.SCOP_heating def L4_sizing() -> Tuple[float, float]: @@ -67,7 +67,7 @@ def L4_sizing() -> Tuple[float, float]: Returns ------- - depth, SCOP + length, SCOP """ # initiate borefield borefield = Borefield() @@ -91,12 +91,12 @@ def L4_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - depth = borefield.size(100, L4_sizing=True) + length = borefield.size(100, L4_sizing=True) print( - f'When sizing with an L4 method, the required borehole depth is {depth:.2f}m. ' + f'When sizing with an L4 method, the required borehole length is {length:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile(plot_hourly=True) - return depth, borefield.load.SCOP_heating + return length, borefield.load.SCOP_heating if __name__ == "__main__": diff --git a/GHEtool/Examples/start_in_different_month.py b/GHEtool/Examples/start_in_different_month.py index 503f3db4..bcc1677f 100644 --- a/GHEtool/Examples/start_in_different_month.py +++ b/GHEtool/Examples/start_in_different_month.py @@ -31,11 +31,11 @@ def start_in_different_month(): plt.figure() plt.bar(range(1, 13, 1), depth_list) - plt.ylabel('Required depth [m]') + plt.ylabel('Required borehole length [m]') plt.xlabel('First month of operation') plt.xlim(0) plt.ylim(0) - plt.title('Required depth as a function of the first month of operation') + plt.title('Required borehole length as a function of the first month of operation') plt.show() diff --git a/README.md b/README.md index 7f203c10..1cb40fad 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ website [https://GHEtool.eu](https://GHEtool.eu) for more information. ### Read The Docs GHEtool has an elaborate documentation were all the functionalities of the tool are explained, with examples, literature -and validation. This can be found on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). +and validation. This can be found +on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). ## Graphical user interface @@ -233,7 +234,7 @@ atol and rtol is chosen when sizing. The options are: converged, a RuntimeError is thrown. * _use_precalculated_dataset_: This option makes sure the custom g-function dataset (if available) is not used. * _interpolate_gfunctions_: Calculating the gvalues gives a large overhead cost, although they are not that sensitive to - a change in borehole depth. If this parameter is True + a change in borehole length. If this parameter is True it is allowed that gfunctions are interpolated. (To change the threshold for this interpolation, go to the Gfunction class.) * _deep_sizing_: An alternative sizing method for cases with high injection (peaks) and a variable ground temperature. @@ -320,8 +321,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -depth = borefield.size() -print("The borehole depth is: ", depth, "m") +length = borefield.size() +print("The borehole length is: ", length, "m") ``` Or one can plot the temperature profile by using diff --git a/docs/sources/code/Improvements/speed_improvement.py b/docs/sources/code/Improvements/speed_improvement.py index a80aec56..d971680e 100644 --- a/docs/sources/code/Improvements/speed_improvement.py +++ b/docs/sources/code/Improvements/speed_improvement.py @@ -19,6 +19,7 @@ def wrapper(*a, **ka): with open(os.devnull, 'w') as devnull: with contextlib.redirect_stdout(devnull): return func(*a, **ka) + return wrapper @@ -67,7 +68,7 @@ def optimise_load_profile() -> None: load.load_hourly_profile("hourly_profile.csv", header=True, separator=";") borefield.load = load - # optimise the load for a 10x10 field (see data above) and a fixed depth of 150m. + # optimise the load for a 10x10 field (see data above) and a fixed length of 150m. borefield.optimise_load_profile(depth=150, print_results=False) @@ -261,17 +262,17 @@ def benchmark(callable, name: str) -> None: start_time = time.time() run_without_messages(callable) end_time = time.time() - diff = diff * i/(i+1) + (end_time - start_time)/(i+1) + diff = diff * i / (i + 1) + (end_time - start_time) / (i + 1) GFunction.DEFAULT_STORE_PREVIOUS_VALUES = False start_time_without = time.time() run_without_messages(callable) end_time_without = time.time() - diff_without = diff_without * i/(i+1) + (end_time_without - start_time_without)/(i+1) + diff_without = diff_without * i / (i + 1) + (end_time_without - start_time_without) / (i + 1) print(f'{name} took {round(diff_without, 2)} ms in v2.1.0 and ' - f'{round(diff, 2)} ms in v2.1.1. This is an improvement of {round((diff_without-diff)/diff*100)}%.') + f'{round(diff, 2)} ms in v2.1.1. This is an improvement of {round((diff_without - diff) / diff * 100)}%.') # run examples diff --git a/docs/sources/code/getting_started.md b/docs/sources/code/getting_started.md index 6733adcc..7dec4401 100644 --- a/docs/sources/code/getting_started.md +++ b/docs/sources/code/getting_started.md @@ -241,8 +241,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -depth = borefield.size() -print("The borehole depth is: ", depth, "m") +length = borefield.size() +print("The borehole length is: ", length, "m") ``` Or one can plot the temperature profile by using From e50ad2f54e26e0ad5949d85f2e1051c418320a3f Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 09:41:52 +0100 Subject: [PATCH 02/18] Revert "Update examples" This reverts commit 1bd4f231d6887627beb9138a3c0c43a5d6cb4fb0. --- GHEtool/Examples/active_passive_cooling.py | 67 +++++++++---------- .../custom_borefield_configuration.py | 12 ++-- .../effect_of_borehole_configuration.py | 28 ++++---- GHEtool/Examples/main_functionalities.py | 24 +++---- GHEtool/Examples/optimise_load_profile.py | 6 +- GHEtool/Examples/separatus.py | 2 +- .../Examples/sizing_with_Rb_calculation.py | 34 ++++------ GHEtool/Examples/sizing_with_building_load.py | 30 ++++----- .../sizing_with_building_load_hourly.py | 16 ++--- GHEtool/Examples/start_in_different_month.py | 4 +- README.md | 9 ++- .../code/Improvements/speed_improvement.py | 9 ++- docs/sources/code/getting_started.md | 4 +- 13 files changed, 117 insertions(+), 128 deletions(-) diff --git a/GHEtool/Examples/active_passive_cooling.py b/GHEtool/Examples/active_passive_cooling.py index 3046d393..bdd56763 100644 --- a/GHEtool/Examples/active_passive_cooling.py +++ b/GHEtool/Examples/active_passive_cooling.py @@ -146,13 +146,13 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.Rb = 0.12 ### PASSIVE COOLING - lengths = [0.9, 0] + depths = [0.9, 0] # set initial loads cooling_ground = cooling_building.copy() heating_ground = heating_building.copy() - while abs(lengths[0] - lengths[1]) > 0.1: + while abs(depths[0] - depths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -160,8 +160,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - length_passive = borefield.size_L4() - lengths.insert(0, length_passive) + depth_passive = borefield.size_L4() + depths.insert(0, depth_passive) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -170,7 +170,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ heating_ground = update_load_COP(temp_profile, COP, heating_building) ### ACTIVE COOLING - lengths = [0.9, 0] + depths = [0.9, 0] # set initial loads cooling_ground = cooling_building.copy() @@ -178,7 +178,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.set_max_avg_fluid_temperature(25) borefield.gfunction_calculation_object.store_previous_values = False - while abs(lengths[0] - lengths[1]) > 0.1: + while abs(depths[0] - depths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -186,8 +186,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - lenght_active = borefield.size_L4() - lengths.insert(0, lenght_active) + depth_active = borefield.size_L4() + depths.insert(0, depth_active) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -204,23 +204,24 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ operational_costs_heating = [] investment_costs = [] total_costs = [] - lengths = [] + depths = [] - def f(length: float) -> float: + def f(depth: float) -> float: """ Optimisation function. Parameters ---------- - length : float - Average length of the borehole [m] + depth : float + Depth of the borefield in meters Returns ------- total_cost : float """ - borefield.H = length - lengths.append(length) + borefield._update_borefield_depth(depth) + borefield.H = depth + depths.append(depth) # initialise heating_ground = heating_building.copy() @@ -238,7 +239,7 @@ def f(length: float) -> float: borefield.load = load # get temperature profile - borefield.calculate_temperatures(length, hourly=True) + borefield.calculate_temperatures(depth, hourly=True) temp_profile = borefield.results.peak_extraction # set previous loads @@ -262,40 +263,38 @@ def f(length: float) -> float: return investment + operational_cost # add boundaries to figure - MIN_BOUNDARY = lenght_active - MAX_BOUNDARY = length_passive + MIN_BOUNDARY = depth_active + MAX_BOUNDARY = depth_passive def objective(trial: optuna.Trial): - length = trial.suggest_float('length', MIN_BOUNDARY, MAX_BOUNDARY) - return f(length) + depth = trial.suggest_float('depth', MIN_BOUNDARY, MAX_BOUNDARY) + return f(depth) study = optuna.create_study() study.optimize(objective, n_trials=100) - lenghts_sorted = copy.deepcopy(lengths) - lenghts_sorted.sort() - lenghts_old_new = {} - for idx, length in enumerate(lenghts_sorted): - lenghts_old_new[idx] = lengths.index(length) + depths_sorted = copy.deepcopy(depths) + depths_sorted.sort() + depths_old_new = {} + for idx, depth in enumerate(depths_sorted): + depths_old_new[idx] = depths.index(depth) # plot figures fig = plt.figure() ax1 = fig.add_subplot(111) - ax1.plot(lenghts_sorted, [total_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], + ax1.plot(depths_sorted, [total_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', label="TC") - ax1.plot(lenghts_sorted, [investment_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], + ax1.plot(depths_sorted, [investment_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', label="IC") - ax1.plot(lenghts_sorted, [operational_costs[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], + ax1.plot(depths_sorted, [operational_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', label="OC") - ax1.plot(lenghts_sorted, - [operational_costs_cooling[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], - marker='o', + ax1.plot(depths_sorted, + [operational_costs_cooling[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', label="OCc") - ax1.plot(lenghts_sorted, - [operational_costs_heating[lenghts_old_new[idx]] / 1000 for idx, _ in enumerate(lenghts_sorted)], - marker='o', + ax1.plot(depths_sorted, + [operational_costs_heating[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', label="OCh") - ax1.set_xlabel(r'Borehole length (m)', fontsize=14) + ax1.set_xlabel(r'Depth (m)', fontsize=14) ax1.set_ylabel(r'Costs ($k€$)', fontsize=14) ax1.legend(loc='lower left', ncol=3) ax1.tick_params(labelsize=14) diff --git a/GHEtool/Examples/custom_borefield_configuration.py b/GHEtool/Examples/custom_borefield_configuration.py index 4d985ffb..2169662a 100644 --- a/GHEtool/Examples/custom_borefield_configuration.py +++ b/GHEtool/Examples/custom_borefield_configuration.py @@ -60,21 +60,21 @@ def custom_borefield_configuration(): borefield.create_custom_dataset() # size borefield - length = borefield.size() - print("The borehole length is: ", length, "m") + depth = borefield.size() + print("The borehole depth is: ", depth, "m") # print imbalance print("The borefield imbalance is: ", borefield.load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance - # plot temperature profile for the calculated borehole length + # plot temperature profile for the calculated depth borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed length - borefield.print_temperature_profile_fixed_length(length=75, legend=False) + # plot temperature profile for a fixed depth + borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(length=90) + borefield.calculate_temperatures(depth=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) diff --git a/GHEtool/Examples/effect_of_borehole_configuration.py b/GHEtool/Examples/effect_of_borehole_configuration.py index c13f6f82..c61fcfaf 100644 --- a/GHEtool/Examples/effect_of_borehole_configuration.py +++ b/GHEtool/Examples/effect_of_borehole_configuration.py @@ -22,13 +22,12 @@ def effect_borefield_configuration(): annual_cooling_load = 400 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array( - [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -41,15 +40,16 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - length = borefield.size() - print("The borehole length is:", length, "m for a 11x11 field") - print("The total borefield length is:", int(length * 11 * 11), "m") + depth = borefield.size() + print("The borehole depth is:", depth, "m for a 11x11 field") + print("The total length is:", int(depth * 11 * 11), "m") print("------------------------") + # borefield of 6x20 data = GroundConstantTemperature(3, 10) borefield_gt = gt.boreholes.rectangle_field(6, 20, 6, 6, 110, 1, 0.075) @@ -62,13 +62,13 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # size borefield - length6_20 = borefield.size() - print("The borehole length is:", length6_20, "m for a 6x20 field") - print("The total borefield length is:", int(length6_20 * 6 * 20), "m") - print("The second field is hence", -int(length6_20 * 6 * 20) + int(length * 11 * 11), "m shorter") + depth6_20 = borefield.size() + print("The borehole depth is:", depth6_20, "m for a 6x20 field") + print("The total length is:", int(depth6_20 * 6 * 20), "m") + print("The second field is hence", -int(depth6_20 * 6 * 20) + int(depth * 11 * 11), "m shorter") borefield.print_temperature_profile() -if __name__ == "__main__": # pragma: no cover +if __name__ == "__main__": # pragma: no cover effect_borefield_configuration() diff --git a/GHEtool/Examples/main_functionalities.py b/GHEtool/Examples/main_functionalities.py index b3e6aa18..52593884 100644 --- a/GHEtool/Examples/main_functionalities.py +++ b/GHEtool/Examples/main_functionalities.py @@ -3,7 +3,7 @@ * sizing of the borefield * sizing of the borefield for a specific quadrant * plotting the temperature evolution - * plotting the temperature evolution for a specific length + * plotting the temperature evolution for a specific depth * printing the array of the temperature """ @@ -56,30 +56,30 @@ def main_functionalities(): borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - length = borefield.size() - print("The borehole length is: ", len(), "m") + depth = borefield.size() + print("The borehole depth is: ", depth, "m") # print imbalance print("The borefield imbalance is: ", borefield._borefield_load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance - # plot temperature profile for the calculated length + # plot temperature profile for the calculated depth borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed length - borefield.print_temperature_profile_fixed_length(length=75, legend=False) + # plot temperature profile for a fixed depth + borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(length=90) + borefield.calculate_temperatures(depth=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) print("---------------------------------------------") # size the borefield for quadrant 3 # for more information about borefield quadrants, see (Peere et al., 2021) - length = borefield.size(quadrant_sizing=3) - print("The borehole length is: ", str(round(length, 2)), "m for a sizing in quadrant 3") - # plot temperature profile for the calculated length + depth = borefield.size(quadrant_sizing=3) + print("The borehole depth is: ", str(round(depth, 2)), "m for a sizing in quadrant 3") + # plot temperature profile for the calculated depth borefield.print_temperature_profile(legend=True) # size with a dynamic Rb* value @@ -95,8 +95,8 @@ def main_functionalities(): # when it is given as an argument to the size function, it will size correctly, but the plot will be with # constant Rb* since it has not been changed in the setup function borefield.calculation_setup(use_constant_Rb=False) - length = borefield.size() - print("The borehole length is: ", str(round(length, 2)), "m for a sizing with dynamic Rb*.") + depth = borefield.size() + print("The borehole depth is: ", str(round(depth, 2)), "m for a sizing with dynamic Rb*.") borefield.print_temperature_profile(legend=True) diff --git a/GHEtool/Examples/optimise_load_profile.py b/GHEtool/Examples/optimise_load_profile.py index a0c66cf6..af29c434 100644 --- a/GHEtool/Examples/optimise_load_profile.py +++ b/GHEtool/Examples/optimise_load_profile.py @@ -30,9 +30,9 @@ def optimise(): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 ** 6) load.load_hourly_profile("hourly_profile.csv", header=True, separator=";") - # optimise the load for a 10x10 field (see data above) and a fixed borehole length of 150m. + # optimise the load for a 10x10 field (see data above) and a fixed depth of 150m. # first for an optimisation based on the power - borefield.optimise_load_profile_power(building_load=load, length=150) + borefield.optimise_load_profile_power(building_load=load, depth=150) print(f'Max heating power (primary): {borefield.load.max_peak_extraction:,.0f}kW') print(f'Max cooling power (primary): {borefield.load.max_peak_injection:,.0f}kW') @@ -46,7 +46,7 @@ def optimise(): borefield.print_temperature_profile(plot_hourly=True) # first for an optimisation based on the energy - borefield.optimise_load_profile_energy(building_load=load, length=150) + borefield.optimise_load_profile_energy(building_load=load, depth=150) print(f'Max heating power (primary): {borefield.load.max_peak_extraction:,.0f}kW') print(f'Max cooling power (primary): {borefield.load.max_peak_injection:,.0f}kW') diff --git a/GHEtool/Examples/separatus.py b/GHEtool/Examples/separatus.py index 08fc388f..27c15329 100644 --- a/GHEtool/Examples/separatus.py +++ b/GHEtool/Examples/separatus.py @@ -2,7 +2,7 @@ This file contains a design example with the Separatus probe, in comparison with a single and double U-tube. A borehole diameter of DN90 was chosen for the Separatus probe whereas for the single and double U-tube a DN140 was assumed. A mass flow rate of 0.3 kg/s was assumed for all cases and no glycol was taken into account. -The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a borehole length of 110m. +The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a depth of 110m. The building heating and cooling demand was obtained from a residential building in Belgium. It is shown that both single U and Separatus have similar performance, whilst the double U-tube has a somewhat better diff --git a/GHEtool/Examples/sizing_with_Rb_calculation.py b/GHEtool/Examples/sizing_with_Rb_calculation.py index 6cee4ea5..955d58a8 100644 --- a/GHEtool/Examples/sizing_with_Rb_calculation.py +++ b/GHEtool/Examples/sizing_with_Rb_calculation.py @@ -2,7 +2,7 @@ This document compares the sizing with a constant Rb*-value with sizing where the Rb*-value is being recalculated. For the test, the L2 sizing method is used. The comparison is based on speed and relative accuracy in the result. -It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial length is rather accurate. +It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial depth is rather accurate. """ import time @@ -37,7 +37,7 @@ def sizing_with_Rb(): peak_load_heating_array[i, j] = np.random.randint(monthly_load_heating_array[i, j], max_value_heating) # initiate borefield model - data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the borehole length + data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the depth of the borefield fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) @@ -52,13 +52,12 @@ def sizing_with_Rb(): annual_cooling_load = 160 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array( - [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -76,8 +75,8 @@ def sizing_with_Rb(): borefield.create_custom_dataset() # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size with constant Rb* value borefield.calculation_setup(use_constant_Rb=True) @@ -89,7 +88,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_static[i] = borefield.size() end_Rb_constant = time.time() @@ -101,7 +100,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_dynamic[i] = borefield.size() end_Rb_dynamic = time.time() @@ -115,20 +114,13 @@ def sizing_with_Rb(): for i in range(number_of_iterations): difference_results[i] = results_Rb_dynamic[i] - results_Rb_static[i] - print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", - np.round(np.max(difference_results), 3), "m or", - np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), - "% w.r.t. the constant Rb* approach.") - print("The mean difference between the sizing with a constant and a dynamic Rb* value:", - np.round(np.mean(difference_results), 3), "m or", - np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), - "% w.r.t. the constant Rb* approach.") + print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.max(difference_results), 3), "m or", np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), "% w.r.t. the constant Rb* approach.") + print("The mean difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.mean(difference_results), 3), "m or", np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), "% w.r.t. the constant Rb* approach.") print("------------------------------------------------------------------------------") - # Do the same thing but with another constant Rb* value based on a borehole length of 185m. + # Do the same thing but with another constant Rb* value based on a borehole depth of 185m. - borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, - 0.075) # borefield with an accurate guess of 185m for the borehole length + borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, 0.075) # borefield with an accurate guess of 185m for the depth of the borefield borefield.set_borefield(borefield_gt) # size with a constant Rb* value diff --git a/GHEtool/Examples/sizing_with_building_load.py b/GHEtool/Examples/sizing_with_building_load.py index b79b1891..3450d9f8 100644 --- a/GHEtool/Examples/sizing_with_building_load.py +++ b/GHEtool/Examples/sizing_with_building_load.py @@ -30,8 +30,8 @@ def size_with_scop() -> Tuple[float, float]: Returns ------- - Length : float - Required borehole length + Depth : float + Required borehole depth """ scop = SCOP(4.5) seer = SEER(1000) @@ -52,11 +52,11 @@ def size_with_scop() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - length = borefield.size_L3(100) - print(f'When sizing with a constant SCOP, the required borehole length is {length:.2f}m. The SCOP (incl. DHW) is ' + depth = borefield.size_L3(100) + print(f'When sizing with a constant SCOP, the required borehole depth is {depth:.2f}m. The SCOP (incl. DHW) is ' f'{borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return length, borefield.load.SCOP_total + return depth, borefield.load.SCOP_total def size_with_variable_ground_temperature() -> Tuple[float, float]: @@ -65,8 +65,8 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: Returns ------- - Length : float - Required borehole length + Depth : float + Required borehole depth """ seer = SEER(1000) cop = COP(np.array([3.76, 4.25, 4.79, 5.34, 5.74]), np.array([-5, 0, 5, 10, 15])) @@ -87,11 +87,11 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - length = borefield.size_L3(100) - print(f'When sizing with a inlet temperature dependent COP, the required borehole length is {length:.2f}m. ' + depth = borefield.size_L3(100) + print(f'When sizing with a inlet temperature dependent COP, the required borehole depth is {depth:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return length, borefield.load.SCOP_total + return depth, borefield.load.SCOP_total def size_with_part_load_data() -> Tuple[float, float]: @@ -100,8 +100,8 @@ def size_with_part_load_data() -> Tuple[float, float]: Returns ------- - Length : float - Required borehole length + Depth : float + Required borehole depth """ seer = SEER(1000) cop = COP(np.array( @@ -136,12 +136,12 @@ def size_with_part_load_data() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - length = borefield.size_L3(100) + depth = borefield.size_L3(100) print( - f'When sizing with a inlet temperature and part-load dependent COP, the required borehole length is {length:.2f}m. ' + f'When sizing with a inlet temperature and part-load dependent COP, the required borehole depth is {depth:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return length, borefield.load.SCOP_total + return depth, borefield.load.SCOP_total if __name__ == "__main__": diff --git a/GHEtool/Examples/sizing_with_building_load_hourly.py b/GHEtool/Examples/sizing_with_building_load_hourly.py index f7e1ae8a..691c6566 100644 --- a/GHEtool/Examples/sizing_with_building_load_hourly.py +++ b/GHEtool/Examples/sizing_with_building_load_hourly.py @@ -29,7 +29,7 @@ def L3_sizing() -> Tuple[float, float]: Returns ------- - length, SCOP + depth, SCOP """ # initiate borefield borefield = Borefield() @@ -53,12 +53,12 @@ def L3_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - length = borefield.size(100, L3_sizing=True) + depth = borefield.size(100, L3_sizing=True) print( - f'When sizing with an L3 method, the required borehole length is {length:.2f}m. ' + f'When sizing with an L3 method, the required borehole depth is {depth:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return length, borefield.load.SCOP_heating + return depth, borefield.load.SCOP_heating def L4_sizing() -> Tuple[float, float]: @@ -67,7 +67,7 @@ def L4_sizing() -> Tuple[float, float]: Returns ------- - length, SCOP + depth, SCOP """ # initiate borefield borefield = Borefield() @@ -91,12 +91,12 @@ def L4_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - length = borefield.size(100, L4_sizing=True) + depth = borefield.size(100, L4_sizing=True) print( - f'When sizing with an L4 method, the required borehole length is {length:.2f}m. ' + f'When sizing with an L4 method, the required borehole depth is {depth:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile(plot_hourly=True) - return length, borefield.load.SCOP_heating + return depth, borefield.load.SCOP_heating if __name__ == "__main__": diff --git a/GHEtool/Examples/start_in_different_month.py b/GHEtool/Examples/start_in_different_month.py index bcc1677f..503f3db4 100644 --- a/GHEtool/Examples/start_in_different_month.py +++ b/GHEtool/Examples/start_in_different_month.py @@ -31,11 +31,11 @@ def start_in_different_month(): plt.figure() plt.bar(range(1, 13, 1), depth_list) - plt.ylabel('Required borehole length [m]') + plt.ylabel('Required depth [m]') plt.xlabel('First month of operation') plt.xlim(0) plt.ylim(0) - plt.title('Required borehole length as a function of the first month of operation') + plt.title('Required depth as a function of the first month of operation') plt.show() diff --git a/README.md b/README.md index 1cb40fad..7f203c10 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,7 @@ website [https://GHEtool.eu](https://GHEtool.eu) for more information. ### Read The Docs GHEtool has an elaborate documentation were all the functionalities of the tool are explained, with examples, literature -and validation. This can be found -on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). +and validation. This can be found on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). ## Graphical user interface @@ -234,7 +233,7 @@ atol and rtol is chosen when sizing. The options are: converged, a RuntimeError is thrown. * _use_precalculated_dataset_: This option makes sure the custom g-function dataset (if available) is not used. * _interpolate_gfunctions_: Calculating the gvalues gives a large overhead cost, although they are not that sensitive to - a change in borehole length. If this parameter is True + a change in borehole depth. If this parameter is True it is allowed that gfunctions are interpolated. (To change the threshold for this interpolation, go to the Gfunction class.) * _deep_sizing_: An alternative sizing method for cases with high injection (peaks) and a variable ground temperature. @@ -321,8 +320,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -length = borefield.size() -print("The borehole length is: ", length, "m") +depth = borefield.size() +print("The borehole depth is: ", depth, "m") ``` Or one can plot the temperature profile by using diff --git a/docs/sources/code/Improvements/speed_improvement.py b/docs/sources/code/Improvements/speed_improvement.py index d971680e..a80aec56 100644 --- a/docs/sources/code/Improvements/speed_improvement.py +++ b/docs/sources/code/Improvements/speed_improvement.py @@ -19,7 +19,6 @@ def wrapper(*a, **ka): with open(os.devnull, 'w') as devnull: with contextlib.redirect_stdout(devnull): return func(*a, **ka) - return wrapper @@ -68,7 +67,7 @@ def optimise_load_profile() -> None: load.load_hourly_profile("hourly_profile.csv", header=True, separator=";") borefield.load = load - # optimise the load for a 10x10 field (see data above) and a fixed length of 150m. + # optimise the load for a 10x10 field (see data above) and a fixed depth of 150m. borefield.optimise_load_profile(depth=150, print_results=False) @@ -262,17 +261,17 @@ def benchmark(callable, name: str) -> None: start_time = time.time() run_without_messages(callable) end_time = time.time() - diff = diff * i / (i + 1) + (end_time - start_time) / (i + 1) + diff = diff * i/(i+1) + (end_time - start_time)/(i+1) GFunction.DEFAULT_STORE_PREVIOUS_VALUES = False start_time_without = time.time() run_without_messages(callable) end_time_without = time.time() - diff_without = diff_without * i / (i + 1) + (end_time_without - start_time_without) / (i + 1) + diff_without = diff_without * i/(i+1) + (end_time_without - start_time_without)/(i+1) print(f'{name} took {round(diff_without, 2)} ms in v2.1.0 and ' - f'{round(diff, 2)} ms in v2.1.1. This is an improvement of {round((diff_without - diff) / diff * 100)}%.') + f'{round(diff, 2)} ms in v2.1.1. This is an improvement of {round((diff_without-diff)/diff*100)}%.') # run examples diff --git a/docs/sources/code/getting_started.md b/docs/sources/code/getting_started.md index 7dec4401..6733adcc 100644 --- a/docs/sources/code/getting_started.md +++ b/docs/sources/code/getting_started.md @@ -241,8 +241,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -length = borefield.size() -print("The borehole length is: ", length, "m") +depth = borefield.size() +print("The borehole depth is: ", depth, "m") ``` Or one can plot the temperature profile by using From d7019c29b80d75618e1d24bc85c756429715dc64 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 09:51:55 +0100 Subject: [PATCH 03/18] Change methods and bring up to date with new terminology --- GHEtool/Methods/optimise_load_profile.py | 24 ++++++------------------ GHEtool/test/methods/method_data.py | 1 + GHEtool/test/methods/test_methods.py | 3 +-- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/GHEtool/Methods/optimise_load_profile.py b/GHEtool/Methods/optimise_load_profile.py index c4adabfc..c9fdea9e 100644 --- a/GHEtool/Methods/optimise_load_profile.py +++ b/GHEtool/Methods/optimise_load_profile.py @@ -8,7 +8,6 @@ def optimise_load_profile_power( borefield, building_load: Union[HourlyBuildingLoad, HourlyBuildingLoadMultiYear], - depth: float = None, temperature_threshold: float = 0.05, use_hourly_resolution: bool = True, max_peak_heating: float = None, @@ -26,8 +25,6 @@ def optimise_load_profile_power( Borefield object building_load : HourlyBuildingLoad | HourlyBuildingLoadMultiYear Load data used for the optimisation. - depth : float - Depth of the boreholes in the borefield [m]. temperature_threshold : float The maximum allowed temperature difference between the maximum and minimum fluid temperatures and their respective limits. The lower this threshold, the longer the convergence will take. @@ -60,12 +57,9 @@ def optimise_load_profile_power( if temperature_threshold < 0: raise ValueError(f"The temperature threshold is {temperature_threshold}, but it cannot be below 0!") - # set depth - if depth is None: - depth = borefield.H - # since the depth does not change, the Rb* value is constant - borefield.Rb = borefield.borehole.get_Rb(depth, borefield.D, borefield.r_b, borefield.ground_data.k_s(depth)) + borefield.Rb = borefield.borehole.get_Rb(borefield.H, borefield.D, borefield.r_b, + borefield.ground_data.k_s(borefield.depth)) # set load borefield.load = copy.deepcopy(building_load) @@ -96,7 +90,7 @@ def optimise_load_profile_power( if isinstance(borefield.load, HourlyBuildingLoad) else building_load.hourly_heating_load_simulation_period)) # calculate temperature profile, just for the results - borefield.calculate_temperatures(depth=depth, hourly=use_hourly_resolution) + borefield.calculate_temperatures(depth=borefield.H, hourly=use_hourly_resolution) # deviation from minimum temperature if abs(min(borefield.results.peak_extraction) - borefield.Tf_min) > temperature_threshold: @@ -137,7 +131,6 @@ def optimise_load_profile_power( def optimise_load_profile_energy( borefield, building_load: Union[HourlyBuildingLoad, HourlyBuildingLoadMultiYear], - depth: float = None, temperature_threshold: float = 0.05, max_peak_heating: float = None, max_peak_cooling: float = None @@ -153,8 +146,6 @@ def optimise_load_profile_energy( Borefield object building_load : HourlyBuildingLoad | HourlyBuildingLoadMultiYear Load data used for the optimisation - depth : float - Depth of the boreholes in the borefield [m] temperature_threshold : float The maximum allowed temperature difference between the maximum and minimum fluid temperatures and their respective limits. The lower this threshold, the longer the convergence will take. @@ -184,13 +175,10 @@ def optimise_load_profile_energy( if temperature_threshold < 0: raise ValueError(f"The temperature threshold is {temperature_threshold}, but it cannot be below 0!") - # set depth - if depth is None: - depth = borefield.H - # since the depth does not change, the Rb* value is constant # set to use a constant Rb* value but save the initial parameters - borefield.Rb = borefield.borehole.get_Rb(depth, borefield.D, borefield.r_b, borefield.ground_data.k_s) + borefield.Rb = borefield.borehole.get_Rb(borefield.H, borefield.D, borefield.r_b, + borefield.ground_data.k_s(borefield.depth)) building_load_copy = copy.deepcopy(building_load) @@ -257,7 +245,7 @@ def optimise_load_profile_energy( while not cool_ok or not heat_ok: # calculate temperature profile, just for the results - borefield.calculate_temperatures(depth) + borefield.calculate_temperatures(borefield.H) # deviation from minimum temperature if abs(borefield.results.peak_extraction[i] - borefield.Tf_min) > temperature_threshold: diff --git a/GHEtool/test/methods/method_data.py b/GHEtool/test/methods/method_data.py index 6161a694..96884335 100644 --- a/GHEtool/test/methods/method_data.py +++ b/GHEtool/test/methods/method_data.py @@ -353,6 +353,7 @@ SizingObject(borefield, L4_output=18602.210559679363, quadrant=3, name='Hourly profile, quadrant 3')) hourly_load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 ** 6) hourly_load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\hourly_profile.csv")) +# set borefield depth to 150 list_of_test_objects.add(OptimiseLoadProfileObject(borefield, hourly_load, 150, 87.506, 97.012, 305.842, 384.204, 230.193, 292.212, name='Optimise load profile 1 (power)', power=True, hourly=False)) diff --git a/GHEtool/test/methods/test_methods.py b/GHEtool/test/methods/test_methods.py index fc81fc58..0688b7e3 100644 --- a/GHEtool/test/methods/test_methods.py +++ b/GHEtool/test/methods/test_methods.py @@ -48,15 +48,14 @@ def test_L4(model: Borefield, result): def test_optimise(input, result): model: Borefield = input[0] load, depth, power, hourly, max_peak_extraction, max_peak_injection = input[1:] + model.H = depth if power: borefield_load, external_load = optimise_load_profile_power(model, load, - depth, use_hourly_resolution=hourly, max_peak_heating=max_peak_extraction, max_peak_cooling=max_peak_injection) else: borefield_load, external_load = optimise_load_profile_energy(model, load, - depth, max_peak_heating=max_peak_extraction, max_peak_cooling=max_peak_injection) percentage_extraction, percentage_injection, peak_extraction_geo, peak_injection_geo, peak_extraction_ext, peak_injection_ext = \ From 8f5c61708c11a77df593af4a07c854687ab9154e Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 10:14:30 +0100 Subject: [PATCH 04/18] Fix tests optimise load --- CHANGELOG.md | 2 ++ GHEtool/Borefield.py | 23 +++++++++++++--------- GHEtool/test/unit-tests/test_main_class.py | 18 ++++++++--------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3c1ef13..6dab5160 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Fixed - Problem with optimise energy profile (issue #306). +- Problem with ground parameters in optimise_energy_profile (issue #317). +- Removed 'depth' parameter in optimise load functions, for it is already included in the Borefield object (issue #317). ## [2.3.0] - 2024-11-05 diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index 15b680cf..5aa4a7df 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -190,6 +190,18 @@ def number_of_boreholes(self) -> int: """ return len(self.borefield) if self.borefield is not None else 0 + @property + def depth(self) -> float: + """ + This function returns the average borehole depth. + + Returns + ------- + float + Average borehole depth [meters] + """ + return self.H + self.D + @property def H(self) -> float: """ @@ -1864,7 +1876,6 @@ def Re(self) -> float: def optimise_load_profile_power( self, building_load: Union[HourlyBuildingLoad, HourlyBuildingLoadMultiYear], - depth: float = None, temperature_threshold: float = 0.05, use_hourly_resolution: bool = True, max_peak_heating: float = None, @@ -1882,8 +1893,6 @@ def optimise_load_profile_power( Borefield object building_load : HourlyBuildingLoad | HourlyBuildingLoadMultiYear Load data used for the optimisation. - depth : float - Depth of the boreholes in the borefield [m]. temperature_threshold : float The maximum allowed temperature difference between the maximum and minimum fluid temperatures and their respective limits. The lower this threshold, the longer the convergence will take. @@ -1906,15 +1915,13 @@ def optimise_load_profile_power( ValueError if no correct load data is given or the threshold is negative """ borefield_load, external_load = optimise_load_profile_power( - self, building_load, depth, temperature_threshold, use_hourly_resolution, max_peak_heating, - max_peak_cooling) + self, building_load, temperature_threshold, use_hourly_resolution, max_peak_heating, max_peak_cooling) self.load = borefield_load return borefield_load, external_load def optimise_load_profile_energy( self, building_load: Union[HourlyBuildingLoad, HourlyBuildingLoadMultiYear], - depth: float = None, temperature_threshold: float = 0.05, max_peak_heating: float = None, max_peak_cooling: float = None @@ -1930,8 +1937,6 @@ def optimise_load_profile_energy( Borefield object building_load : HourlyBuildingLoad | HourlyBuildingLoadMultiYear Load data used for the optimisation - depth : float - Depth of the boreholes in the borefield [m] temperature_threshold : float The maximum allowed temperature difference between the maximum and minimum fluid temperatures and their respective limits. The lower this threshold, the longer the convergence will take. @@ -1951,7 +1956,7 @@ def optimise_load_profile_energy( ValueError if no correct load data is given or the threshold is negative """ borefield_load, external_load = optimise_load_profile_energy( - self, building_load, depth, temperature_threshold, max_peak_heating, max_peak_cooling) + self, building_load, temperature_threshold, max_peak_heating, max_peak_cooling) self.load = borefield_load return borefield_load, external_load diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index 4dc2b63c..70f79d2a 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -861,8 +861,8 @@ def test_load_duration(monkeypatch): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 * 66) load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) borefield.load = load - borefield.optimise_load_profile_power(load, 150) - borefield.optimise_load_profile_energy(load, 150) + borefield.optimise_load_profile_power(load) + borefield.optimise_load_profile_energy(load) def test_optimise_load_profile_power(monkeypatch): @@ -873,7 +873,7 @@ def test_optimise_load_profile_power(monkeypatch): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 * 66) load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 - secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load, 150) + secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load) assert borefield.load.simulation_period == 40 assert secundary_borefield_load.simulation_period == 40 assert external_load.simulation_period == 40 @@ -890,7 +890,7 @@ def test_optimise_load_profile_power_multiyear(monkeypatch): load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load_my = HourlyBuildingLoadMultiYear(load.hourly_heating_load_simulation_period, load.hourly_cooling_load_simulation_period) - secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load_my, 150) + secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load_my) assert borefield.load.simulation_period == 20 assert secundary_borefield_load.simulation_period == 20 assert external_load.simulation_period == 20 @@ -905,7 +905,7 @@ def test_optimise_load_profile_energy(monkeypatch): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 * 66) load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 - borefield_load, external_load = borefield.optimise_load_profile_energy(load, 150) + borefield_load, external_load = borefield.optimise_load_profile_energy(load) assert borefield.load.simulation_period == 40 assert borefield_load.simulation_period == 40 assert external_load.simulation_period == 40 @@ -920,7 +920,7 @@ def test_optimise_borefield_small_power(monkeypatch): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 * 66) load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 - secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load, 150) + secundary_borefield_load, external_load = borefield.optimise_load_profile_power(load) assert borefield.load.simulation_period == 40 assert secundary_borefield_load.simulation_period == 40 assert external_load.simulation_period == 40 @@ -934,7 +934,7 @@ def test_optimise_borefield_small_energy(monkeypatch): load = HourlyBuildingLoad(efficiency_heating=10 ** 6, efficiency_cooling=10 * 66) load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 - borefield.optimise_load_profile_energy(load, 150) + borefield.optimise_load_profile_energy(load) assert borefield.load.simulation_period == 40 @@ -947,7 +947,7 @@ def test_optimise_borefield_wrong_threshold_power(monkeypatch): load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 with pytest.raises(ValueError): - borefield.optimise_load_profile_power(load, 150, temperature_threshold=-0.5) + borefield.optimise_load_profile_power(load, temperature_threshold=-0.5) def test_optimise_borefield_wrong_threshold_energy(monkeypatch): @@ -959,7 +959,7 @@ def test_optimise_borefield_wrong_threshold_energy(monkeypatch): load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) load.simulation_period = 40 with pytest.raises(ValueError): - borefield.optimise_load_profile_energy(load, 150, temperature_threshold=-0.5) + borefield.optimise_load_profile_energy(load, temperature_threshold=-0.5) def test_calculate_quadrants_without_data(): From fbee4e8e22fd2120a2677595225d181d736cd92e Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 11:03:13 +0100 Subject: [PATCH 05/18] Bring ground class up to date --- CHANGELOG.md | 11 +++ GHEtool/Borefield.py | 39 ++++++-- .../GroundData/GroundConstantTemperature.py | 10 +- .../GroundData/GroundFluxTemperature.py | 18 +++- .../GroundData/GroundTemperatureGradient.py | 18 +++- .../VariableClasses/GroundData/_GroundData.py | 97 ++++++++++++------- GHEtool/test/unit-tests/test_grounddata.py | 44 ++++++--- 7 files changed, 167 insertions(+), 70 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6dab5160..7e987ace 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,11 +10,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Added - __repr__ for every class (issue #310). +- Added start_depth to calculation of k_s, volumetric_heat_capacity, calculate_value, calculate_Tg and alpha in _ + GroundData (issue #137). +- Added start_depth to the calculation of Tg in all GroundClasses (issue #137). +- Added property 'depth' to Borefield class (issue #137). +- Added function 'calculate_depth' to Borefield class (issue #137). ## Fixed - Problem with optimise energy profile (issue #306). - Problem with ground parameters in optimise_energy_profile (issue #317). + +## Changed + +- Make terminology consistent: borehole length != borehole depth (issue #317). +- _GroundData changed argument of check_depth, k_s, volumetric_heat_capacity, calculate_Tg, calculate_value and alpha + from 'H' to 'depth' (issue #137). - Removed 'depth' parameter in optimise load functions, for it is already included in the Borefield object (issue #317). ## [2.3.0] - 2024-11-05 diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index 5aa4a7df..18698993 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -200,7 +200,26 @@ def depth(self) -> float: float Average borehole depth [meters] """ - return self.H + self.D + return self.calculate_depth(self.H, self.D) + + def calculate_depth(self, borehole_length: float, buried_depth: float) -> float: + """ + This function calculates the depth of the borehole. + + Parameters + ---------- + borehole_length : float + Length of the borehole [m] + buried_depth : float + Buried depth of the borehole [m] + + Returns + ------- + float + Depth of the borehole [m] + """ + # TODO take into account tilt + return borehole_length + buried_depth @property def H(self) -> float: @@ -769,7 +788,7 @@ def _Tg(self, H: float = None) -> float: if H is None: H = self.H - return self.ground_data.calculate_Tg(H) + return self.ground_data.calculate_Tg(self.calculate_depth(H, self.D), self.D) def _check_convergence(self, new_depth: float, old_depth: float, iter: int) -> bool: """ @@ -852,7 +871,7 @@ def _Ahmadfard(self, th: float, qh: float, qm: float, qa: float, Tf: float) -> f # calculate the required g-function values gfunct_uniform_T = self.gfunction(time, max(1, self.H)) # calculate the thermal resistances - k_s = self.ground_data.k_s(self.H) + k_s = self.ground_data.k_s(self.depth, self.D) Ra = (gfunct_uniform_T[2] - gfunct_uniform_T[1]) / (2 * pi * k_s) Rm = (gfunct_uniform_T[1] - gfunct_uniform_T[0]) / (2 * pi * k_s) Rd = (gfunct_uniform_T[0]) / (2 * pi * k_s) @@ -913,7 +932,7 @@ def _Carcel(self, th: float, tcm: float, qh: float, qpm: float, qm: float, Tf: f gfunc_uniform_T = self.gfunction(time_steps, max(1, self.H)) # calculate the thermal resistances - k_s = self.ground_data.k_s(self.H) + k_s = self.ground_data.k_s(self.depth, self.H) Rpm = (gfunc_uniform_T[2] - gfunc_uniform_T[1]) / (2 * pi * k_s) Rcm = (gfunc_uniform_T[1] - gfunc_uniform_T[0]) / (2 * pi * k_s) Rh = (gfunc_uniform_T[0]) / (2 * pi * k_s) @@ -1620,8 +1639,9 @@ def _calculate_temperature_profile(self, H: float = None, hourly: bool = False) def calculate_temperatures(H, hourly=hourly): # set Rb* value - Rb = self.borehole.get_Rb(H if H is not None else self.H, self.D, self.r_b, self.ground_data.k_s(self.H)) H = H if H is not None else self.H + Rb = self.borehole.get_Rb(H, self.D, self.r_b, + self.ground_data.k_s(self.calculate_depth(H, self.D), self.D)) results = None @@ -1647,7 +1667,7 @@ def calculate_temperatures(H, hourly=hourly): : 12 * self.simulation_period] # calculation the borehole wall temperature for every month i - k_s = self.ground_data.k_s(H) + k_s = self.ground_data.k_s(self.calculate_depth(H, self.D), self.D) Tb = results / (2 * pi * k_s) / (H * self.number_of_boreholes) + self._Tg(H) # now the Tf will be calculated based on @@ -1705,7 +1725,8 @@ def calculate_temperatures(H, hourly=hourly): results = convolve(hourly_load * 1000, g_value_differences)[: len(hourly_load)] # calculation the borehole wall temperature for every month i - Tb = results / (2 * pi * self.ground_data.k_s(H)) / (H * self.number_of_boreholes) + self._Tg(H) + Tb = results / (2 * pi * self.ground_data.k_s(self.calculate_depth(H, self.D), self.D)) / ( + H * self.number_of_boreholes) + self._Tg(H) # now the Tf will be calculated based on # Tf = Tb + Q * R_b @@ -1804,7 +1825,7 @@ def jit_gfunction_calculation() -> np.ndarray: # only update if H is provided, otherwise the depths of the borefield itself will be used self._update_borefield_depth(H=H) return self.gfunction_calculation_object.calculate( - time_value, self.borefield, self.ground_data.alpha(H_var), + time_value, self.borefield, self.ground_data.alpha(self.depth, self.D), interpolate=self._calculation_setup.interpolate_gfunctions ) @@ -1854,7 +1875,7 @@ def create_custom_dataset(self, time_array: ArrayLike = None, depth_array: Array except TypeError: raise ValueError("No borefield is set for which the gfunctions should be calculated") try: - self.ground_data.alpha(H=100) + self.ground_data.alpha(depth=100) except AttributeError: raise ValueError("No ground data is set for which the gfunctions should be calculated") diff --git a/GHEtool/VariableClasses/GroundData/GroundConstantTemperature.py b/GHEtool/VariableClasses/GroundData/GroundConstantTemperature.py index aa76e89d..e4e5ee4c 100644 --- a/GHEtool/VariableClasses/GroundData/GroundConstantTemperature.py +++ b/GHEtool/VariableClasses/GroundData/GroundConstantTemperature.py @@ -22,14 +22,16 @@ def __init__(self, k_s: float = None, super().__init__(k_s=k_s, volumetric_heat_capacity=volumetric_heat_capacity) self.Tg = T_g - def calculate_Tg(self, H: float = None) -> float: + def calculate_Tg(self, depth: float = 100, start_depth: float = 0) -> float: """ - This function gives back the ground temperature. + This function gives back the average ground temperature for the borehole. Parameters ---------- - H : float - Depth of the borefield [m] (not used) + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- diff --git a/GHEtool/VariableClasses/GroundData/GroundFluxTemperature.py b/GHEtool/VariableClasses/GroundData/GroundFluxTemperature.py index dfa0b372..fe14568d 100644 --- a/GHEtool/VariableClasses/GroundData/GroundFluxTemperature.py +++ b/GHEtool/VariableClasses/GroundData/GroundFluxTemperature.py @@ -26,14 +26,16 @@ def __init__(self, k_s: float = None, self.Tg = T_g self.variable_Tg = True - def calculate_Tg(self, H: float) -> float: + def calculate_Tg(self, depth: float = 100, start_depth: float = 0) -> float: """ - This function gives back the ground temperature at a depth H. + This function gives back the average ground temperature for the borehole. Parameters ---------- - H : float - Depth at which the temperature should be calculated [m] + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- @@ -42,7 +44,13 @@ def calculate_Tg(self, H: float) -> float: """ # geothermal gradient is equal to the geothermal heat flux divided by the thermal conductivity # avg ground temperature is (Tg + gradient + Tg) / 2 = Tg + gradient / 2 - return self.Tg + H * self.flux / self.k_s(H) / 2 + # take the average between the depth and the start depth + temperature_at_bottom_borehole = self.Tg + (depth * self.flux / self.k_s(depth)) / 2 + temperature_at_start_borehole = self.Tg + (start_depth * self.flux / self.k_s(start_depth)) / 2 + if depth == 0: + return temperature_at_bottom_borehole + return (temperature_at_bottom_borehole * depth - temperature_at_start_borehole * start_depth) / ( + depth - start_depth) def calculate_delta_H(self, temperature_diff: float, H: float = 100) -> float: """ diff --git a/GHEtool/VariableClasses/GroundData/GroundTemperatureGradient.py b/GHEtool/VariableClasses/GroundData/GroundTemperatureGradient.py index a50ba908..8aeb1367 100644 --- a/GHEtool/VariableClasses/GroundData/GroundTemperatureGradient.py +++ b/GHEtool/VariableClasses/GroundData/GroundTemperatureGradient.py @@ -25,14 +25,16 @@ def __init__(self, k_s: float = None, self.gradient = gradient self.Tg = T_g - def calculate_Tg(self, H: float) -> float: + def calculate_Tg(self, depth: float = 100, start_depth: float = 0) -> float: """ - This function gives back the ground temperature at a depth H. + This function gives back the average ground temperature for the borehole. Parameters ---------- - H : float - Depth at which the temperature should be calculated [m] + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- @@ -42,7 +44,13 @@ def calculate_Tg(self, H: float) -> float: # geothermal gradient is equal to the geothermal heat flux divided by the thermal conductivity # avg ground temperature is (Tg + gradient + Tg) / 2 = Tg + gradient / 2 # divide by 100 since the gradient is in K/100m - return self.Tg + H * self.gradient / 2 / 100 + # take the average between the depth and the start depth + temperature_at_bottom_borehole = self.Tg + (depth * self.gradient / 2 / 100) + temperature_at_start_borehole = self.Tg + (start_depth * self.gradient / 2 / 100) + if depth == 0: + return temperature_at_bottom_borehole + return (temperature_at_bottom_borehole * depth - temperature_at_start_borehole * start_depth) / ( + depth - start_depth) def calculate_delta_H(self, temperature_diff: float) -> float: """ diff --git a/GHEtool/VariableClasses/GroundData/_GroundData.py b/GHEtool/VariableClasses/GroundData/_GroundData.py index a2715316..967ca7a3 100644 --- a/GHEtool/VariableClasses/GroundData/_GroundData.py +++ b/GHEtool/VariableClasses/GroundData/_GroundData.py @@ -163,7 +163,7 @@ def add_layer_on_bottom(self, layer: Union[GroundLayer, List[GroundLayer]]) -> N self.layers.append(layer) self.layer_depths.append(0 if len(self.layers) == 1 else self.layers[-2].thickness + self.layer_depths[-1]) - def check_depth(self, H: float) -> bool: + def check_depth(self, depth: float) -> bool: """ Checks if the depth is correct. A depth is False when it is lower than 0 or it exceeds the deepest ground layer and @@ -171,8 +171,8 @@ def check_depth(self, H: float) -> bool: Parameters ---------- - H : float - Depth [m] + depth : float + Borehole depth [m] Returns ------- @@ -192,18 +192,19 @@ def check_depth(self, H: float) -> bool: return True highest_depth = self.layer_depths[-1] + self.layers[-1].thickness - if H <= highest_depth: + if depth <= highest_depth: return True if not self.last_layer_infinite: - raise ValueError(f'The depth of {H}m exceeds the maximum depth that is provided: {highest_depth}m. ' + raise ValueError(f'The depth of {depth}m exceeds the maximum depth that is provided: {highest_depth}m. ' f'One can set the last_layer_infinite assumption to True in the ground class.') - warnings.warn(f'The depth of {H}m exceeds the maximum depth that is provided: {highest_depth}m. ' + warnings.warn(f'The depth of {depth}m exceeds the maximum depth that is provided: {highest_depth}m. ' f'In order to continue, it is assumed the deepest layer is infinite.') return True - def calculate_value(self, thickness_list: list, cumulative_thickness_list: list, y_range: list, H: float) -> float: + def calculate_value(self, thickness_list: list, cumulative_thickness_list: list, y_range: list, + depth: float, start_depth: float) -> float: """ This function calculates the average value of a certain y_range of values for a certain depth, given the thickness of the ground layers. @@ -216,77 +217,101 @@ def calculate_value(self, thickness_list: list, cumulative_thickness_list: list, Cumulative sum of all the layer thicknesses y_range : list Range with the values for each layer - H : float - Depth [m] + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- float Calculated value for either k_s or volumetric heat capacity """ - if H <= 0: + if depth <= 0: # For negative values, the first conductivity is returned return y_range[0] - result = 0 + # raise error when the start_depth is larger or equal to the end_depth + if depth - start_depth <= 0: + raise ValueError('The length of the borehole is 0.') - idx_of_layer_in_which_H_falls = [i for i, v in enumerate(cumulative_thickness_list) if v <= H][-1] + result_buried = 0 + result_depth = 0 + + if start_depth == 0: + result_buried = 0 + else: + idx_of_layer_in_which_H_falls = [i for i, v in enumerate(cumulative_thickness_list) if v <= start_depth][-1] + for idx, val in enumerate(y_range[:idx_of_layer_in_which_H_falls]): + result_buried += val * thickness_list[idx + 1] / start_depth + + result_buried += y_range[idx_of_layer_in_which_H_falls] * ( + start_depth - cumulative_thickness_list[idx_of_layer_in_which_H_falls]) / start_depth + + idx_of_layer_in_which_H_falls = [i for i, v in enumerate(cumulative_thickness_list) if v <= depth][-1] for idx, val in enumerate(y_range[:idx_of_layer_in_which_H_falls]): - result += val * thickness_list[idx + 1] / H + result_depth += val * thickness_list[idx + 1] / depth + + result_depth += y_range[idx_of_layer_in_which_H_falls] * ( + depth - cumulative_thickness_list[idx_of_layer_in_which_H_falls]) / depth - result += y_range[idx_of_layer_in_which_H_falls] * ( - H - cumulative_thickness_list[idx_of_layer_in_which_H_falls]) / H - return result + return (result_depth * depth - result_buried * start_depth) / (depth - start_depth) - def k_s(self, H: float = 100) -> float: + def k_s(self, depth: float = 100, start_depth: float = 0) -> float: """ Returns the ground thermal conductivity in W/mK for a given depth. Parameters ---------- - H : float - Depth in meters. + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- float Ground thermal conductivity in W/mK for a given depth. """ - self.check_depth(H) + self.check_depth(depth) if len(self.layers) == 1 and (self.layers[0].thickness is None or self.last_layer_infinite): return self.layers[0].k_s return self.calculate_value([0] + [layer.thickness for layer in self.layers], self.layer_depths, - [layer.k_s for layer in self.layers], H) + [layer.k_s for layer in self.layers], depth, start_depth) - def volumetric_heat_capacity(self, H: float = 100) -> float: + def volumetric_heat_capacity(self, depth: float = 100, start_depth: float = 0) -> float: """ Returns the ground volumetric heat capacity in J/m³K for a given depth. Parameters ---------- - H : float - Depth in meters. + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- float Ground volumetric heat capacity in J/m³K for a given depth. """ - self.check_depth(H) + self.check_depth(depth) if len(self.layers) == 1 and (self.layers[0].thickness is None or self.last_layer_infinite): return self.layers[0].volumetric_heat_capacity return self.calculate_value([0] + [layer.thickness for layer in self.layers], self.layer_depths, - [layer.volumetric_heat_capacity for layer in self.layers], H) + [layer.volumetric_heat_capacity for layer in self.layers], depth, start_depth) - def alpha(self, H: float = 100) -> float: + def alpha(self, depth: float = 100, start_depth: float = 0) -> float: """ Returns the ground thermal diffusivity in m²/s for a given depth. If no volumetric heat capacity or conductivity is given, None is returned. Parameters ---------- - H : float - Depth in meters. + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- @@ -297,17 +322,19 @@ def alpha(self, H: float = 100) -> float: if not np.any(self.layers): return None else: - return self.k_s(H) / self.volumetric_heat_capacity(H) # m2/s + return self.k_s(depth, start_depth) / self.volumetric_heat_capacity(depth, start_depth) # m2/s @abc.abstractmethod - def calculate_Tg(self, H: float) -> float: + def calculate_Tg(self, depth: float = 100, start_depth: float = 0) -> float: """ - This function gives back the ground temperature + This function gives back the average ground temperature for the borehole. Parameters ---------- - H : float - Depth of the borefield [m] + depth : float + Depth of the borehole [m] + start_depth : float + Depth at which the borehole starts [m] Returns ------- @@ -332,7 +359,7 @@ def calculate_delta_H(self, temperature_diff: float) -> float: def max_depth(self, max_temp: float) -> float: """ - This function returns the maximum depth, based on the maximum temperature. + This function returns the maximum borehole depth, based on the maximum temperature. The maximum is the depth where the ground temperature equals the maximum temperature limit. Parameters diff --git a/GHEtool/test/unit-tests/test_grounddata.py b/GHEtool/test/unit-tests/test_grounddata.py index dcb26b11..bab5b244 100644 --- a/GHEtool/test/unit-tests/test_grounddata.py +++ b/GHEtool/test/unit-tests/test_grounddata.py @@ -53,7 +53,7 @@ def test_ground_data_unequal(): def test_alpha(): data = GroundFluxTemperature(3) - assert np.isclose(data.alpha(H=100), 3 / data.volumetric_heat_capacity(H=100)) + assert np.isclose(data.alpha(100), 3 / data.volumetric_heat_capacity(100)) data = GroundFluxTemperature() assert data.alpha() is None @@ -64,10 +64,14 @@ def test_Tg(): ground_temperature_gradient = GroundTemperatureGradient(3, 10, 2.4 * 10 ** 6, 2) assert ground_constant_temperature.calculate_Tg(100) == 10 + assert ground_constant_temperature.calculate_Tg(100, 1) == 10 assert ground_flux_temperature.calculate_Tg(0) == 10 assert ground_flux_temperature.calculate_Tg(100) == 11 + assert ground_flux_temperature.calculate_Tg(100, 10) == 11.1 assert ground_temperature_gradient.calculate_Tg(0) == 10 assert ground_temperature_gradient.calculate_Tg(100) == 11 + assert ground_temperature_gradient.calculate_Tg(100, 10) == 11.1 + assert np.isclose(ground_temperature_gradient.calculate_Tg(100, 99.9), 11.998999999999114) def test_delta_H(): @@ -89,12 +93,14 @@ def test_one_ground_layer_data(): assert ground_data.k_s(1) == 3 assert ground_data.k_s(10) == 3 assert ground_data.k_s(1000) == 3 + assert ground_data.k_s(1000, 1) == 3 assert ground_data.k_s(10e8) == 3 assert ground_data.volumetric_heat_capacity(0) == 2400000 assert ground_data.volumetric_heat_capacity(1) == 2400000 assert ground_data.volumetric_heat_capacity(10) == 2400000 assert ground_data.volumetric_heat_capacity(1000) == 2400000 + assert ground_data.volumetric_heat_capacity(1000, 1) == 2400000 assert ground_data.volumetric_heat_capacity(10e8) == 2400000 @@ -208,17 +214,31 @@ def test_multilayer_values(): k_s_array = [1, 2, 1, 2] depth_array = [0, 10, 15, 20] constant = GroundConstantTemperature() - assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 0) - assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 1) - assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 5) - assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 10) - assert 1 * 10 / 11 + 2 * 1 / 11 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 11) - assert 1 * 10 / 20 + 2 * 10 / 20 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 20) - assert 1 * 10 / 24 + 2 * 14 / 24 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 24) - assert 1 * 10 / 25 + 2 * 15 / 25 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 25) - assert 1 * 10 / 30 + 2 * 15 / 30 + 1 * 5 / 30 == constant.calculate_value(depth_array, np.cumsum(depth_array), - k_s_array, 30) - assert np.isclose(1.99997, constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 1000000)) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 0, 0) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 1, 0) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 5, 0) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 10, 0) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 0, 0) + with pytest.raises(ValueError): + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 1, 1) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 5, 1) + assert 1 == constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 10, 1) + assert np.isclose(1 * 10 / 11 + 2 * 1 / 11, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 11, 0)) + assert np.isclose(((1 * 10 / 11 + 2 * 1 / 11) * 11 - 1) / 10, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 11, 1)) + assert np.isclose(2, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 11, 10)) + assert np.isclose(1 * 10 / 20 + 2 * 10 / 20, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 20, 0)) + assert np.isclose(1 * 10 / 24 + 2 * 14 / 24, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 24, 0)) + assert np.isclose(1 * 10 / 25 + 2 * 15 / 25, + constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 25, 0)) + assert np.isclose(1 * 10 / 30 + 2 * 15 / 30 + 1 * 5 / 30, + constant.calculate_value(depth_array, np.cumsum(depth_array), + k_s_array, 30, 0)) + assert np.isclose(1.99997, constant.calculate_value(depth_array, np.cumsum(depth_array), k_s_array, 1000000, 0)) layer_1 = GroundLayer(k_s=1, thickness=10) layer_2 = GroundLayer(k_s=2, thickness=15) From e232eccf08aecafa7e5de9bb13cb89fe206bf67a Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 11:37:52 +0100 Subject: [PATCH 06/18] Update documentation --- README.md | 9 +++++---- docs/sources/code/getting_started.md | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7f203c10..1cb40fad 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ website [https://GHEtool.eu](https://GHEtool.eu) for more information. ### Read The Docs GHEtool has an elaborate documentation were all the functionalities of the tool are explained, with examples, literature -and validation. This can be found on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). +and validation. This can be found +on [https://ghetool.readthedocs.io/en/latest/](https://ghetool.readthedocs.io/en/latest/). ## Graphical user interface @@ -233,7 +234,7 @@ atol and rtol is chosen when sizing. The options are: converged, a RuntimeError is thrown. * _use_precalculated_dataset_: This option makes sure the custom g-function dataset (if available) is not used. * _interpolate_gfunctions_: Calculating the gvalues gives a large overhead cost, although they are not that sensitive to - a change in borehole depth. If this parameter is True + a change in borehole length. If this parameter is True it is allowed that gfunctions are interpolated. (To change the threshold for this interpolation, go to the Gfunction class.) * _deep_sizing_: An alternative sizing method for cases with high injection (peaks) and a variable ground temperature. @@ -320,8 +321,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -depth = borefield.size() -print("The borehole depth is: ", depth, "m") +length = borefield.size() +print("The borehole length is: ", length, "m") ``` Or one can plot the temperature profile by using diff --git a/docs/sources/code/getting_started.md b/docs/sources/code/getting_started.md index 6733adcc..7dec4401 100644 --- a/docs/sources/code/getting_started.md +++ b/docs/sources/code/getting_started.md @@ -241,8 +241,8 @@ Once a Borefield object is created, one can make use of all the functionalities borefield using: ```Python -depth = borefield.size() -print("The borehole depth is: ", depth, "m") +length = borefield.size() +print("The borehole length is: ", length, "m") ``` Or one can plot the temperature profile by using From a647b730daecb2fd06102c437105e0ad963e423f Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 11:50:07 +0100 Subject: [PATCH 07/18] Fix tests --- GHEtool/Borefield.py | 5 ++- GHEtool/test/methods/method_data.py | 50 +++++++++++----------- GHEtool/test/methods/test_methods.py | 6 +++ GHEtool/test/unit-tests/test_main_class.py | 32 +++++++------- 4 files changed, 50 insertions(+), 43 deletions(-) diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index 18698993..e2ebc4fc 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -1375,11 +1375,12 @@ def calculate_next_depth_deep_sizing(self, current_depth: float) -> float: New depth of the borefield [m] """ # diff between the max temperature in peak injection and the avg undisturbed ground temperature at current_depth - delta_temp = np.max(self.results.peak_injection - self.ground_data.calculate_Tg(current_depth)) + delta_temp = np.max( + self.results.peak_injection - self.ground_data.calculate_Tg(self.calculate_depth(current_depth, self.D))) # calculate the maximum temperature difference between the temperature limit and the ground temperature # at current_depth - delta_wrt_max = self.Tf_max - self.ground_data.calculate_Tg(current_depth) + delta_wrt_max = self.Tf_max - self.ground_data.calculate_Tg(self.calculate_depth(current_depth, self.D)) # delta_t1/H1 ~ delta_t2/H2 # H2 = delta_t2/delta_t1*current_depth diff --git a/GHEtool/test/methods/method_data.py b/GHEtool/test/methods/method_data.py index 96884335..5609025e 100644 --- a/GHEtool/test/methods/method_data.py +++ b/GHEtool/test/methods/method_data.py @@ -161,17 +161,17 @@ hourly_load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, separator=";", col_injection=0, col_extraction=1) borefield.load = hourly_load -list_of_test_objects.add(SizingObject(borefield, L2_output=136.780, L3_output=136.294, L4_output=101.285, quadrant=1, +list_of_test_objects.add(SizingObject(borefield, L2_output=142.001, L3_output=141.453, L4_output=103.761, quadrant=1, name='BS2023 Auditorium')) borefield.calculation_setup(max_nb_of_iterations=2) list_of_test_objects.add(SizingObject(borefield, error_L2=MaximumNumberOfIterations, error_L3=MaximumNumberOfIterations, error_L4=MaximumNumberOfIterations, quadrant=1, name='BS2023 Auditorium (max nb of iter)')) borefield.calculation_setup(atol=False, max_nb_of_iterations=40) -list_of_test_objects.add(SizingObject(borefield, L2_output=136.0488, L3_output=135.591, L4_output=101.061, quadrant=1, +list_of_test_objects.add(SizingObject(borefield, L2_output=141.286, L3_output=140.768, L4_output=103.451, quadrant=1, name='BS2023 Auditorium (no atol)')) borefield.calculation_setup(force_deep_sizing=True) -list_of_test_objects.add(SizingObject(borefield, L2_output=136.0488, L3_output=135.477, L4_output=100.998, quadrant=1, +list_of_test_objects.add(SizingObject(borefield, L2_output=141.286, L3_output=140.618, L4_output=103.591, quadrant=1, name='BS2023 Auditorium (no atol, deep)')) borefield.calculation_setup(force_deep_sizing=False) borefield = Borefield() @@ -187,7 +187,7 @@ col_injection=0, col_extraction=1) borefield.load = hourly_load list_of_test_objects.add( - SizingObject(borefield, L2_output=111.180, L3_output=113.069, L4_output=107.08131844420905, quadrant=2, + SizingObject(borefield, L2_output=113.955, L3_output=115.945, L4_output=109.629, quadrant=2, name='BS2023 Office')) borefield.calculation_setup(max_nb_of_iterations=5) list_of_test_objects.add(SizingObject(borefield, error_L2=MaximumNumberOfIterations, error_L3=MaximumNumberOfIterations, @@ -198,10 +198,10 @@ error_L4=MaximumNumberOfIterations, quadrant=2, name='BS2023 Office (max nb of iter, deep sizing)')) borefield.calculation_setup(atol=False, max_nb_of_iterations=40) -list_of_test_objects.add(SizingObject(borefield, L2_output=110.845, L3_output=112.914, L4_output=106.920, quadrant=2, +list_of_test_objects.add(SizingObject(borefield, L2_output=113.739, L3_output=115.682, L4_output=109.35, quadrant=2, name='BS2023 Office (no atol)')) borefield.calculation_setup(force_deep_sizing=True) -list_of_test_objects.add(SizingObject(borefield, L2_output=110.845, L3_output=112.720, L4_output=106.862, quadrant=2, +list_of_test_objects.add(SizingObject(borefield, L2_output=113.739, L3_output=115.712, L4_output=109.294, quadrant=2, name='BS2023 Office (no atol, deep)')) borefield.calculation_setup(force_deep_sizing=False) @@ -224,14 +224,14 @@ separator=";", col_injection=0, col_extraction=1) borefield.load = hourly_load -list_of_test_objects.add(SizingObject(borefield, L2_output=305.509, L3_output=310.725, L4_output=308.269, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=303.172, L3_output=308.416, L4_output=305.979, quadrant=4, name='BS2023 Swimming pool')) borefield.calculation_setup(atol=False, max_nb_of_iterations=40) -list_of_test_objects.add(SizingObject(borefield, L2_output=305.552, L3_output=310.746, L4_output=308.295, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=303.162, L3_output=308.434, L4_output=306.001, quadrant=4, name='BS2023 Swimming pool (no atol)')) borefield.calculation_setup(force_deep_sizing=True) # we expect the same values as hereabove, since quadrant 4 is limiting -list_of_test_objects.add(SizingObject(borefield, L2_output=305.552, L3_output=310.746, L4_output=308.295, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=303.162, L3_output=308.434, L4_output=306.001, quadrant=4, name='BS2023 Swimming pool (no atol, deep)')) borefield.calculation_setup(force_deep_sizing=False) @@ -262,15 +262,15 @@ ground_data_IKC = GroundFluxTemperature(2.3, 10.5, flux=2.3 * 2.85 / 100) borefield.set_ground_parameters(ground_data_IKC) borefield.calculation_setup(max_nb_of_iterations=40) -list_of_test_objects.add(SizingObject(borefield, L2_output=74.46, L3_output=74.866, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=74.312, L3_output=74.713, quadrant=4, name='Real case 1 (Correct)')) borefield.calculation_setup(atol=False) -list_of_test_objects.add(SizingObject(borefield, L2_output=74.46, L3_output=74.888, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=74.312, L3_output=74.733, quadrant=4, name='Real case 1 (Correct) (no atol)')) borefield.calculation_setup(atol=0.05) borefield.set_ground_parameters(ground_data_IKC) borefield.create_rectangular_borefield(2, 10, 8, 8, 60, 0.8, 0.07) -list_of_test_objects.add(SizingObject(borefield, L2_output=71.65, L3_output=72.054, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=71.50, L3_output=71.907, quadrant=4, name='Real case 2 (Correct)')) peakCooling = [0] * 12 @@ -320,7 +320,7 @@ borefield.create_rectangular_borefield(10, 12, 6, 6, 110, 4, 0.075) borefield.set_Rb(0.2) list_of_test_objects.add( - SizingObject(borefield, error_L2=UnsolvableDueToTemperatureGradient, error_L3=UnsolvableDueToTemperatureGradient, + SizingObject(borefield, error_L2=MaximumNumberOfIterations, error_L3=UnsolvableDueToTemperatureGradient, quadrant=2, name='Cannot size')) list_of_test_objects.add(SizingObject(borefield, error_L4=ValueError, quadrant=2, name='Cannot size L4')) @@ -496,16 +496,16 @@ borefield.set_ground_parameters(GroundTemperatureGradient(1.9, 10, gradient=2)) borefield.set_fluid_parameters(FluidData(0.1, 0.475, 1033, 3930, 0.001)) borefield.set_pipe_parameters(SingleUTube(1.5, 0.016, 0.02, 0.42, 0.04)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 81.5183, 88.0269, - 22.2353, 39.3994, 55.3678, 58.51623, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 81.7146, 87.453, + 22.3508, 38.726, 55.214, 59.163, name='Optimise load profile (stuck in loop) (power)', power=True, hourly=False)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 80.3414, 84.7223, - 21.65199, 35.8583, 56.14555, 61.92114, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 80.572, 83.887, + 21.7649, 35.0615, 55.995, 62.6873, name='Optimise load profile (stuck in loop) (power, hourly)', power=True, hourly=True)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 89.31225880363472, 98.37453537405028, - 56.49199, 74.7635850227125, 54.86173917367975, 56.577818731384966, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 89.7188, 98.304, + 57.202, 74.339, 54.507, 57.254, name='Optimise load profile (stuck in loop) (energy)', power=False)) ground_data = GroundFluxTemperature(3, 10) @@ -525,7 +525,7 @@ hourly_load_building.hourly_cooling_load = hourly_load_building.hourly_cooling_load * 20 / 21 hourly_load_building.hourly_heating_load = hourly_load_building.hourly_heating_load * 5 / 4 borefield.load = hourly_load_building -list_of_test_objects.add(SizingObject(borefield, L2_output=136.294, L3_output=136.294, L4_output=101.285, quadrant=1, +list_of_test_objects.add(SizingObject(borefield, L2_output=141.453, L3_output=141.453, L4_output=103.761, quadrant=1, name='BS2023 Auditorium')) borefield = Borefield() @@ -543,7 +543,7 @@ hourly_load_building.hourly_heating_load = hourly_load_building.hourly_heating_load * 5 / 4 borefield.load = hourly_load_building list_of_test_objects.add( - SizingObject(borefield, L2_output=113.069, L3_output=113.069, L4_output=107.08131844420905, quadrant=2, + SizingObject(borefield, L2_output=115.945, L3_output=115.945, L4_output=109.629, quadrant=2, name='BS2023 Office')) borefield = Borefield() @@ -559,7 +559,7 @@ hourly_load_building.hourly_cooling_load = hourly_load_building.hourly_cooling_load * 20 / 21 hourly_load_building.hourly_heating_load = hourly_load_building.hourly_heating_load * 5 / 4 borefield.load = hourly_load_building -list_of_test_objects.add(SizingObject(borefield, L2_output=310.725, L3_output=310.725, L4_output=308.269, quadrant=4, +list_of_test_objects.add(SizingObject(borefield, L2_output=308.416, L3_output=308.416, L4_output=305.979, quadrant=4, name='BS2023 Swimming pool')) eer_combined = EERCombined(20, 5, 10) @@ -577,9 +577,9 @@ borefield.set_ground_parameters(GroundTemperatureGradient(1.9, 10, gradient=2)) borefield.set_fluid_parameters(FluidData(0.1, 0.475, 1033, 3930, 0.001)) borefield.set_pipe_parameters(SingleUTube(1.5, 0.016, 0.02, 0.42, 0.04)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 45.978137699335, 11.029080983424729, - 52.82586122830533, 28.00877268650213, 605.9817888622596, - 512.6954920945816, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 45.978137699335, 10.93, + 52.82586122830533, 27.731, 605.9817888622596, + 512.9266, name='Optimise load profile (eer combined) (power)', power=True, hourly=False)) list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 50.187981717163034, 12.82812330930278, diff --git a/GHEtool/test/methods/test_methods.py b/GHEtool/test/methods/test_methods.py index 0688b7e3..26939fe3 100644 --- a/GHEtool/test/methods/test_methods.py +++ b/GHEtool/test/methods/test_methods.py @@ -65,6 +65,12 @@ def test_optimise(input, result): np.sum(load.hourly_heating_load_simulation_period) * 100 _percentage_injection = np.sum(borefield_load.hourly_cooling_load_simulation_period) / \ np.sum(load.hourly_cooling_load_simulation_period) * 100 + # print(_percentage_extraction) + # print(_percentage_injection) + # print(borefield_load.max_peak_extraction) + # print(borefield_load.max_peak_injection) + # print(external_load.max_peak_heating) + # print(external_load.max_peak_cooling) assert np.isclose(_percentage_extraction, percentage_extraction) assert np.isclose(_percentage_injection, percentage_injection) assert np.isclose(borefield_load.max_peak_extraction, peak_extraction_geo) diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index 70f79d2a..376e1345 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -329,7 +329,7 @@ def test_Tg(): zip( [ground_data_constant, data_ground_flux, ground_data_constant, data_ground_flux], [True, True, False, False], - [39.994203323480214, 38.70946566704161, 30.924434615896764, 30.245606119498383], + [39.994203323480214, 38.45978496550447, 30.924434615896764, 30.047718917393134], ), ) def test_Ahmadfard(ground_data, constant_Rb, result): @@ -341,8 +341,8 @@ def test_Ahmadfard(ground_data, constant_Rb, result): borefield.set_pipe_parameters(pipeData) borefield.calculation_setup(use_constant_Rb=constant_Rb) th, qh, qm, qa = load._calculate_last_year_params(True) - assert np.isclose(result, borefield._Ahmadfard(th, qh, qm, qa, 0)) - assert np.isclose(result, borefield.H) + assert np.isclose(borefield._Ahmadfard(th, qh, qm, qa, 0), result) + assert np.isclose(borefield.H, result) @pytest.mark.parametrize( @@ -350,7 +350,7 @@ def test_Ahmadfard(ground_data, constant_Rb, result): zip( [ground_data_constant, data_ground_flux, ground_data_constant, data_ground_flux], [True, True, False, False], - [48.76844845370183, 46.593433439950985, 38.53491016745154, 37.100782551185], + [48.76844845370183, 46.254155886276564, 38.53491016745154, 36.81621398703887], ), ) def test_Carcel(ground_data, constant_Rb, result): @@ -363,8 +363,8 @@ def test_Carcel(ground_data, constant_Rb, result): borefield.set_pipe_parameters(pipeData) borefield.calculation_setup(use_constant_Rb=constant_Rb) th, _, tcm, qh, qpm, qm = load._calculate_first_year_params(True) - assert np.isclose(result, borefield._Carcel(th, tcm, qh, qpm, qm, 0)) - assert np.isclose(result, borefield.H) + assert np.isclose(borefield._Carcel(th, tcm, qh, qpm, qm, 0), result) + assert np.isclose(borefield.H, result) def test_set_sizing_setup(): @@ -1075,15 +1075,15 @@ def test_calculate_next_depth_deep_sizing(): borefield.load = load borefield.calculate_temperatures(75) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(75), 117.98660599828808) - borefield.calculate_temperatures(117.98660599828808) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(117.98660599828808), 128.16618036528823) - borefield.calculate_temperatures(128.16618036528823) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(128.16618036528823), 130.8812255630479) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(75), 118.26269556337864) + borefield.calculate_temperatures(118.26269556337864) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(117.98660599828808), 128.31636071414775) + borefield.calculate_temperatures(128.31636071414775) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(131.18039847564688), 130.8812255630479) @pytest.mark.parametrize("case, result", - zip((1, 2, 3, 4), [131.90418292004594, 0, 139.46239300837794, 131.90418292004594])) + zip((1, 2, 3, 4), [132.4920010915831, 0, 140.25177132242135, 139.46239300837794])) def test_deep_sizing(case, result): borefield = Borefield() borefield.ground_data = GroundFluxTemperature(3, 10) @@ -1120,13 +1120,13 @@ def test_optimise_load_borefield(): ground_data = GroundFluxTemperature(2, 9.6, flux=0.07) borefield.ground_data = ground_data borefield_load, external_load = borefield.optimise_load_profile_energy(load) - assert np.isclose(borefield_load.imbalance, -228386.82055766508) + assert np.isclose(borefield_load.imbalance, -229303.76869817785) borefield.load = borefield_load borefield.calculate_temperatures(hourly=False) - assert np.isclose(np.max(borefield.results.peak_injection), 17.044473901670603) - assert np.isclose(np.min(borefield.results.peak_extraction), 1.9471241454443655) + assert np.isclose(np.max(borefield.results.peak_injection), 17.046329116754006) + assert np.isclose(np.min(borefield.results.peak_extraction), 1.9475137898511852) assert np.isclose(borefield.load.max_peak_cooling, 329.9393053) - assert np.isclose(np.sum(borefield.load.hourly_heating_load), 593385.1066074175) + assert np.isclose(np.sum(borefield.load.hourly_heating_load), 594114.6208002889) def test_repr_(): From 282f4bdea7181a88edbce41dd24a4d3aa14d7861 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 12:24:07 +0100 Subject: [PATCH 08/18] Fix tests --- GHEtool/test/methods/method_data.py | 10 +++++----- GHEtool/test/methods/test_methods.py | 12 ++++++------ GHEtool/test/unit-tests/test_main_class.py | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/GHEtool/test/methods/method_data.py b/GHEtool/test/methods/method_data.py index 5609025e..f6fbbb66 100644 --- a/GHEtool/test/methods/method_data.py +++ b/GHEtool/test/methods/method_data.py @@ -171,7 +171,7 @@ list_of_test_objects.add(SizingObject(borefield, L2_output=141.286, L3_output=140.768, L4_output=103.451, quadrant=1, name='BS2023 Auditorium (no atol)')) borefield.calculation_setup(force_deep_sizing=True) -list_of_test_objects.add(SizingObject(borefield, L2_output=141.286, L3_output=140.618, L4_output=103.591, quadrant=1, +list_of_test_objects.add(SizingObject(borefield, L2_output=141.286, L3_output=140.654, L4_output=103.374, quadrant=1, name='BS2023 Auditorium (no atol, deep)')) borefield.calculation_setup(force_deep_sizing=False) borefield = Borefield() @@ -201,7 +201,7 @@ list_of_test_objects.add(SizingObject(borefield, L2_output=113.739, L3_output=115.682, L4_output=109.35, quadrant=2, name='BS2023 Office (no atol)')) borefield.calculation_setup(force_deep_sizing=True) -list_of_test_objects.add(SizingObject(borefield, L2_output=113.739, L3_output=115.712, L4_output=109.294, quadrant=2, +list_of_test_objects.add(SizingObject(borefield, L2_output=113.739, L3_output=115.727, L4_output=109.313, quadrant=2, name='BS2023 Office (no atol, deep)')) borefield.calculation_setup(force_deep_sizing=False) @@ -496,7 +496,7 @@ borefield.set_ground_parameters(GroundTemperatureGradient(1.9, 10, gradient=2)) borefield.set_fluid_parameters(FluidData(0.1, 0.475, 1033, 3930, 0.001)) borefield.set_pipe_parameters(SingleUTube(1.5, 0.016, 0.02, 0.42, 0.04)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 81.7146, 87.453, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 81.746, 87.453, 22.3508, 38.726, 55.214, 59.163, name='Optimise load profile (stuck in loop) (power)', power=True, hourly=False)) @@ -578,11 +578,11 @@ borefield.set_fluid_parameters(FluidData(0.1, 0.475, 1033, 3930, 0.001)) borefield.set_pipe_parameters(SingleUTube(1.5, 0.016, 0.02, 0.42, 0.04)) list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 45.978137699335, 10.93, - 52.82586122830533, 27.731, 605.9817888622596, + 52.82586122830533, 27.731458, 605.9817888622596, 512.9266, name='Optimise load profile (eer combined) (power)', power=True, hourly=False)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 50.187981717163034, 12.82812330930278, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 50.33431191906354, 12.82812330930278, 95.636899472386, 66.33595162152281, 603.0319153178363, 509.73531422797737, name='Optimise load profile (eer combined) (energy)', power=False, diff --git a/GHEtool/test/methods/test_methods.py b/GHEtool/test/methods/test_methods.py index 26939fe3..ade3fbc6 100644 --- a/GHEtool/test/methods/test_methods.py +++ b/GHEtool/test/methods/test_methods.py @@ -65,12 +65,12 @@ def test_optimise(input, result): np.sum(load.hourly_heating_load_simulation_period) * 100 _percentage_injection = np.sum(borefield_load.hourly_cooling_load_simulation_period) / \ np.sum(load.hourly_cooling_load_simulation_period) * 100 - # print(_percentage_extraction) - # print(_percentage_injection) - # print(borefield_load.max_peak_extraction) - # print(borefield_load.max_peak_injection) - # print(external_load.max_peak_heating) - # print(external_load.max_peak_cooling) + print(_percentage_extraction) + print(_percentage_injection) + print(borefield_load.max_peak_extraction) + print(borefield_load.max_peak_injection) + print(external_load.max_peak_heating) + print(external_load.max_peak_cooling) assert np.isclose(_percentage_extraction, percentage_extraction) assert np.isclose(_percentage_injection, percentage_injection) assert np.isclose(borefield_load.max_peak_extraction, peak_extraction_geo) diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index 376e1345..4ef4240a 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -1077,13 +1077,13 @@ def test_calculate_next_depth_deep_sizing(): borefield.calculate_temperatures(75) assert np.isclose(borefield.calculate_next_depth_deep_sizing(75), 118.26269556337864) borefield.calculate_temperatures(118.26269556337864) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(117.98660599828808), 128.31636071414775) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(118.26269556337864), 128.31636071414775) borefield.calculate_temperatures(128.31636071414775) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(131.18039847564688), 130.8812255630479) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(128.31636071414775), 128.6225651998528) @pytest.mark.parametrize("case, result", - zip((1, 2, 3, 4), [132.4920010915831, 0, 140.25177132242135, 139.46239300837794])) + zip((1, 2, 3, 4), [132.4920010915831, 0, 140.25177132242135, 132.4920010915831])) def test_deep_sizing(case, result): borefield = Borefield() borefield.ground_data = GroundFluxTemperature(3, 10) From 7d175c9ed4013cd944d6079489e792969843ef9f Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 12:44:47 +0100 Subject: [PATCH 09/18] Change GFunction class and CustomGFunction class --- GHEtool/Examples/main_functionalities.py | 2 +- GHEtool/VariableClasses/CalculationSetup.py | 6 +- GHEtool/VariableClasses/CustomGFunction.py | 103 ++++++------ GHEtool/VariableClasses/GFunction.py | 146 +++++++++--------- .../test/unit-tests/test_custom_gfunction.py | 27 ++-- GHEtool/test/unit-tests/test_gfunction.py | 118 +++++++------- GHEtool/test/unit-tests/test_main_class.py | 20 +-- 7 files changed, 217 insertions(+), 205 deletions(-) diff --git a/GHEtool/Examples/main_functionalities.py b/GHEtool/Examples/main_functionalities.py index 52593884..d4a6ce05 100644 --- a/GHEtool/Examples/main_functionalities.py +++ b/GHEtool/Examples/main_functionalities.py @@ -61,7 +61,7 @@ def main_functionalities(): # print imbalance print("The borefield imbalance is: ", borefield._borefield_load.imbalance, - "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance + "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # plot temperature profile for the calculated depth borefield.print_temperature_profile(legend=True) diff --git a/GHEtool/VariableClasses/CalculationSetup.py b/GHEtool/VariableClasses/CalculationSetup.py index 462d5180..2db40761 100644 --- a/GHEtool/VariableClasses/CalculationSetup.py +++ b/GHEtool/VariableClasses/CalculationSetup.py @@ -15,8 +15,8 @@ class CalculationSetup(BaseClass): """ __slots__ = '_L2_sizing', '_L3_sizing', '_L4_sizing', 'quadrant_sizing', '_backup', \ - 'atol', 'rtol', 'max_nb_of_iterations', 'interpolate_gfunctions', 'H_init',\ - 'use_precalculated_dataset', 'deep_sizing', 'force_deep_sizing' + 'atol', 'rtol', 'max_nb_of_iterations', 'interpolate_gfunctions', 'H_init', \ + 'use_precalculated_dataset', 'deep_sizing', 'force_deep_sizing' def __init__(self, quadrant_sizing: int = 0, L2_sizing: bool = None, L3_sizing: bool = None, L4_sizing: bool = None, @@ -50,7 +50,7 @@ def __init__(self, quadrant_sizing: int = 0, for if you run a sizing twice, the second time the algorithm can interpolate, so it (can) converge(s) to a slightly different result. H_init : float - The initial depth for the different methods. + The initial borehole length for the different methods. use_precalculated_dataset : bool True if a precalculated dataset of g-function should be used. deep_sizing : bool diff --git a/GHEtool/VariableClasses/CustomGFunction.py b/GHEtool/VariableClasses/CustomGFunction.py index 63e9178d..dfafd2c3 100644 --- a/GHEtool/VariableClasses/CustomGFunction.py +++ b/GHEtool/VariableClasses/CustomGFunction.py @@ -40,46 +40,45 @@ def _time_values(dt=3600., t_max=100. * 8760 * 3600.) -> np.array: class CustomGFunction: - """ This class contains all the functionalities related to custom gfunctions. """ - DEFAULT_DEPTH_ARRAY: np.ndarray = np.arange(0, 351, 25) # m - DEFAULT_DEPTH_ARRAY[0] = 10 # m + DEFAULT_LENGTH_ARRAY: np.ndarray = np.arange(0, 351, 25) # m + DEFAULT_LENGTH_ARRAY[0] = 10 # m DEFAULT_TIME_ARRAY: np.ndarray = _time_values() # sec - def __init__(self, time_array: np.ndarray = None, depth_array: np.ndarray = None, options: dict = None): + def __init__(self, time_array: np.ndarray = None, borehole_length_array: np.ndarray = None, options: dict = None): """ Parameters ---------- time_array : np.ndarray Time value(s) in seconds at which the gfunctions should be calculated - depth_array : np.ndarray - Depths [m] for which the gfunctions should be calculated + borehole_length_array : np.ndarray + Borehole lengths [m] for which the gfunctions should be calculated options : dict Dictionary with options for the gFunction class of pygfunction """ self._time_array: np.ndarray = np.array([]) - self._depth_array: np.ndarray = np.array([]) + self._borehole_length_array: np.ndarray = np.array([]) - self.max_H: float = 0. - self.min_H: float = 0. + self.max_borehole_length: float = 0. + self.min_borehole_length: float = 0. self.max_t: float = 0. self.min_t: float = 0. self.time_array = CustomGFunction.DEFAULT_TIME_ARRAY - self.depth_array = CustomGFunction.DEFAULT_DEPTH_ARRAY + self.borehole_length_array = CustomGFunction.DEFAULT_LENGTH_ARRAY - self.gvalues_array: np.ndarray = np.zeros((self.depth_array.size, self.time_array.size)) + self.gvalues_array: np.ndarray = np.zeros((self.borehole_length_array.size, self.time_array.size)) self.options: dict = {"method": "equivalent", "display": True} # set values if time_array is not None: self.time_array = time_array - if depth_array is not None: - self.depth_array = depth_array + if borehole_length_array is not None: + self.borehole_length_array = borehole_length_array if options is not None: self.options = options @@ -93,21 +92,22 @@ def time_array(self, time_array: np.ndarray) -> None: self.max_t = time_array[-1] self.min_t = time_array[0] # initialise gvalue array - self.gvalues_array = np.zeros((self.depth_array.size, self.time_array.size)) + self.gvalues_array = np.zeros((self.borehole_length_array.size, self.time_array.size)) @property - def depth_array(self) -> np.ndarray: - return self._depth_array - - @depth_array.setter - def depth_array(self, depth_array) -> None: - self._depth_array = np.sort(depth_array) - self.max_H = self._depth_array[-1] - self.min_H = self._depth_array[0] + def borehole_length_array(self) -> np.ndarray: + return self._borehole_length_array + + @borehole_length_array.setter + def borehole_length_array(self, borehole_length_array) -> None: + self._borehole_length_array = np.sort(borehole_length_array) + self.max_borehole_length = self._borehole_length_array[-1] + self.min_borehole_length = self._borehole_length_array[0] # initialise gvalue array - self.gvalues_array = np.zeros((self.depth_array.size, self.time_array.size)) + self.gvalues_array = np.zeros((self.borehole_length_array.size, self.time_array.size)) - def calculate_gfunction(self, time_value: Union[list, float, np.ndarray], H: float, check: bool = False) -> np.ndarray: + def calculate_gfunction(self, time_value: Union[list, float, np.ndarray], borehole_length: float, + check: bool = False) -> np.ndarray: """ This function returns the gfunction value, based on interpolation between precalculated values. @@ -115,11 +115,11 @@ def calculate_gfunction(self, time_value: Union[list, float, np.ndarray], H: flo ---------- time_value : list, float, np.ndarray Time value(s) in seconds at which the gfunctions should be calculated - H : float - Depth [m] at which the gfunctions should be calculated. - If no depth is given, the current depth is taken. + borehole_length : float + Borehole lengths [m] at which the gfunctions should be calculated. + If no borehole length is given, the current borehole length is taken. check : bool - True if it should be check whether or not the requested gvalues can be interpolated based on the + True if it should be checked whether the requested gvalues can be interpolated based on the precalculated values Returns @@ -130,18 +130,20 @@ def calculate_gfunction(self, time_value: Union[list, float, np.ndarray], H: flo """ # check if the requested value is within the range - if check and not self.within_range(time_value, H): + if check and not self.within_range(time_value, borehole_length): return False if not isinstance(time_value, (float, int)): # multiple values are requested - g_value = interpolate.interpn((self.depth_array, self.time_array), self.gvalues_array, np.array([[H, t] for t in time_value])) + g_value = interpolate.interpn((self.borehole_length_array, self.time_array), self.gvalues_array, + np.array([[borehole_length, t] for t in time_value])) else: # only one value is requested - g_value = interpolate.interpn((self.depth_array, self.time_array), self.gvalues_array, np.array([H, time_value])) + g_value = interpolate.interpn((self.borehole_length_array, self.time_array), self.gvalues_array, + np.array([borehole_length, time_value])) return g_value - def within_range(self, time_value: Union[list, float, np.ndarray], H: float) -> bool: + def within_range(self, time_value: Union[list, float, np.ndarray], borehole_length: float) -> bool: """ This function checks whether or not the requested data can be calculated using the custom dataset. @@ -149,9 +151,9 @@ def within_range(self, time_value: Union[list, float, np.ndarray], H: float) -> ---------- time_value : list, float, np.ndarray Time value(s) in seconds at which the gfunctions should be calculated - H : float - Depth [m] at which the gfunctions should be calculated. - If no depth is given, the current depth is taken. + borehole_length : float + Borehole lengths [m] at which the gfunctions should be calculated. + If no borehole length is given, the current borehole length is taken. Returns ------- @@ -166,11 +168,13 @@ def within_range(self, time_value: Union[list, float, np.ndarray], H: float) -> max_time_value = time_value if isinstance(time_value, (float, int)) else max(time_value) min_time_value = time_value if isinstance(time_value, (float, int)) else min(time_value) - # check if H in precalculated data range - if H > self.max_H or H < self.min_H: - warnings.warn("The requested depth of " + str(H) + "m is outside the bounds of " + str(self.min_H) + - " and " + str(self.max_H) + - " of the precalculated data. The gfunctions will be calculated jit.", UserWarning) + # check if borehole_length in precalculated data range + if borehole_length > self.max_borehole_length or borehole_length < self.min_borehole_length: + warnings.warn( + "The requested borehole length of " + str(borehole_length) + "m is outside the bounds of " + str( + self.min_borehole_length) + + " and " + str(self.max_borehole_length) + + " of the precalculated data. The gfunctions will be calculated jit.", UserWarning) return False # check if max time in precalculated data range @@ -200,7 +204,7 @@ def create_custom_dataset(self, borefield: List[gt.boreholes.Borehole], alpha: U borefield : list[pygfunction.boreholes.Borehole] Borefield object for which the custom dataset should be created alpha : float or callable - Ground thermal diffusivity [m2/s] or function to calculate it at a certain depth + Ground thermal diffusivity [m2/s] or function to calculate it at a certain borehole length Returns ------- @@ -210,16 +214,21 @@ def create_custom_dataset(self, borefield: List[gt.boreholes.Borehole], alpha: U if not "method" in self.options: self.options["method"] = "equivalent" - for idx, H in enumerate(self.depth_array): - ghe_logger.info(f'Start H: {H}') + for idx, borehole_length in enumerate(self.borehole_length_array): + ghe_logger.info(f'Start length: {borehole_length}') # Calculate the g-function for uniform borehole wall temperature borefield = copy.deepcopy(borefield) - # set borehole depth in borefield + # set borehole borehole length in borefield for borehole in borefield: - borehole.H = H - - gfunc_uniform_T = gt.gfunction.gFunction(borefield, alpha if isinstance(alpha, float) else alpha(H), + borehole.H = borehole_length + + # calculate borehole buried depth + D = np.average([bor.D for bor in borefield]) + # TODO correct for tilt + gfunc_uniform_T = gt.gfunction.gFunction(borefield, + alpha if isinstance(alpha, float) else alpha(borehole_length + D, + D), self.time_array, options=self.options, method=self.options["method"]) diff --git a/GHEtool/VariableClasses/GFunction.py b/GHEtool/VariableClasses/GFunction.py index a83daa8b..2f7ab10b 100644 --- a/GHEtool/VariableClasses/GFunction.py +++ b/GHEtool/VariableClasses/GFunction.py @@ -95,14 +95,14 @@ def __init__(self): self.options: dict = {'method': 'equivalent'} self.alpha: float = 0. self.borefield: list[gt.boreholes.Borehole] = [] - self.depth_array: np.ndarray = np.array([]) + self.borehole_length_array: np.ndarray = np.array([]) self.time_array: np.ndarray = np.array([]) self.previous_gfunctions: np.ndarray = np.array([]) - self.previous_depth: float = 0. + self.previous_borehole_length: float = 0. self.use_cyl_correction_when_negative: bool = True self.no_extrapolation: bool = True - self.threshold_depth_interpolation: float = .25 # % + self.threshold_borehole_length_interpolation: float = .25 # % self.fifo_list: FIFO = FIFO(8) @@ -161,7 +161,7 @@ def calculate(self, time_value: Union[list, float, np.ndarray], borefield: List[ """ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alpha: float, - depth: float, interpolate: bool = None) -> np.ndarray: + borehole_length: float, interpolate: bool = None) -> np.ndarray: """ This function returns the gvalues either by interpolation or by calculating them. @@ -173,8 +173,8 @@ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alp Borefield model for which the gvalues should be calculated alpha : float Thermal diffusivity of the ground [m2/s] - depth : float - Depth of the borefield [m] + borehole_length : float + Borehole length [m] interpolate : bool True if results should be interpolated when possible, False otherwise. If None, the default is chosen. @@ -184,32 +184,32 @@ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alp 1D array with all the requested gvalues """ # check if the value is in the fifo_list - # if the value is in self.depth_array, there is no problem, since the interpolation will be exact anyway - if self.fifo_list.in_fifo_list(depth) and depth not in self.depth_array: + # if the value is in self.borehole_length_array, there is no problem, since the interpolation will be exact anyway + if self.fifo_list.in_fifo_list(borehole_length) and borehole_length not in self.borehole_length_array: # chances are we are stuck in a loop, so calculate the gfunction and do not iterate # calculate the g-values for uniform borehole wall temperature gfunc_calculated = gt.gfunction.gFunction(borefield, alpha, time_values, options=self.options).gFunc # store the calculated g-values - self.set_new_calculated_data(time_values, depth, gfunc_calculated, borefield, alpha) + self.set_new_calculated_data(time_values, borehole_length, gfunc_calculated, borefield, alpha) - self.fifo_list.add(depth) + self.fifo_list.add(borehole_length) return gfunc_calculated # store in fifo_list to make sure we are not stuck in iterations - self.fifo_list.add(depth) + self.fifo_list.add(borehole_length) - # check if previous depth is close to current one + # check if previous borehole_length is close to current one # if so, returns previous gfunction data to speed up sizing convergence - if np.abs(self.previous_depth - depth) < 1: - depth = self.previous_depth + if np.abs(self.previous_borehole_length - borehole_length) < 1: + borehole_length = self.previous_borehole_length else: - self.previous_depth = depth + self.previous_borehole_length = borehole_length # do interpolation interpolate = interpolate if interpolate is not None else self.store_previous_values - gfunc_interpolated = self.interpolate_gfunctions(time_values, depth, alpha, borefield) \ + gfunc_interpolated = self.interpolate_gfunctions(time_values, borehole_length, alpha, borefield) \ if interpolate else np.array([]) # if there are g-values calculated, return them @@ -235,12 +235,12 @@ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alp self.options["cylindrical_correction"] = backup # store the calculated g-values - self.set_new_calculated_data(time_values, depth, gfunc_calculated, borefield, alpha) + self.set_new_calculated_data(time_values, borehole_length, gfunc_calculated, borefield, alpha) return gfunc_calculated - # get depth from borefield - depth = borefield[0].H + # get borehole_length from borefield + borehole_length = borefield[0].H # make numpy array from time_values if isinstance(time_value, (float, int)): @@ -255,7 +255,7 @@ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alp time_value_new = _time_values(t_max=time_value[-1]) # calculate g-function values - gfunc_uniform_T = gvalues(time_value_new, borefield, alpha, depth, interpolate) + gfunc_uniform_T = gvalues(time_value_new, borefield, alpha, borehole_length, interpolate) # return interpolated values return np.interp(time_value, time_value_new, gfunc_uniform_T) @@ -263,16 +263,16 @@ def gvalues(time_values: np.ndarray, borefield: List[gt.boreholes.Borehole], alp # check if there are double values if not isinstance(time_value, (float, int)) and time_value_np.size != np.unique(np.asarray(time_value)).size: # calculate g-function values - gfunc_uniform_T = gvalues(np.unique(time_value_np), borefield, alpha, depth, interpolate) + gfunc_uniform_T = gvalues(np.unique(time_value_np), borefield, alpha, borehole_length, interpolate) return np.interp(time_value, np.unique(time_value_np), gfunc_uniform_T) # calculate g-function values - gfunc_uniform_T = gvalues(time_value_np, borefield, alpha, depth, interpolate) + gfunc_uniform_T = gvalues(time_value_np, borefield, alpha, borehole_length, interpolate) return gfunc_uniform_T - def interpolate_gfunctions(self, time_value: Union[list, float, np.ndarray], depth: float, + def interpolate_gfunctions(self, time_value: Union[list, float, np.ndarray], borehole_length: float, alpha: float, borefield: List[gt.boreholes.Borehole]) -> np.ndarray: """ This function returns the gvalues by interpolation them. If interpolation is not possible, an emtpy @@ -282,8 +282,8 @@ def interpolate_gfunctions(self, time_value: Union[list, float, np.ndarray], dep ---------- time_value : list, float, np.ndarray Time value(s) [s] for which gvalues should be calculated - depth : float - Depth of the borefield [m] + borehole_length : float + Borehole length [m] alpha : float Thermal diffusivity of the ground [m2/s] borefield : list[pygfunction.boreholes.Borehole] @@ -305,20 +305,20 @@ def interpolate_gfunctions(self, time_value: Union[list, float, np.ndarray], dep if not self._check_time_values(time_value): return gvalues - # find nearest depth indices - idx_prev, idx_next = self._get_nearest_depth_index(depth) + # find nearest borehole_length indices + idx_prev, idx_next = self._get_nearest_borehole_length_index(borehole_length) if self.no_extrapolation: - # no interpolation can be made since depth is not in between values in the depth array + # no interpolation can be made since borehole length is not in between values in the borehole length array if idx_prev is None or idx_next is None: return gvalues # do interpolation - if self.depth_array.size == 1: + if self.borehole_length_array.size == 1: gvalues = interpolate.interpn([self.time_array], self.previous_gfunctions, time_value) else: - gvalues = interpolate.interpn((self.depth_array, self.time_array), self.previous_gfunctions, - np.array([[depth, t] for t in time_value])) + gvalues = interpolate.interpn((self.borehole_length_array, self.time_array), self.previous_gfunctions, + np.array([[borehole_length, t] for t in time_value])) return gvalues @@ -347,61 +347,63 @@ def _nearest_value(array: np.ndarray, value: float) -> Tuple[int, int]: idx = (np.abs(array - value)).argmin() return array[idx], idx - def _get_nearest_depth_index(self, depth: float) -> Tuple[int, int]: + def _get_nearest_borehole_length_index(self, borehole_length: float) -> Tuple[int, int]: """ - This function returns the nearest depth indices w.r.t. a specific depth. + This function returns the nearest borehole length indices w.r.t. a specific borehole length. Parameters ---------- - depth : float - Depth for which the nearest indices in the depth_array should be searched. + borehole_length : float + Borehole length for which the nearest indices in the borehole_length_array should be searched. Returns ------- tuple(int, int) (None, None) if no indices exist that are closer than the threshold value - (None, int) if the current depth is lower then the minimum in the depth array, but closer then the + (None, int) if the current borehole length is lower then the minimum in the borehole_length array, but closer then the threshold value - (int, None) if the current depth is higher then the maximum in the depth array, but closer then the + (int, None) if the current borehole length is higher then the maximum in the borehole_length array, but closer then the threshold value - (int, int) if the current depth is between two previous calculated depths which are closer together + (int, int) if the current borehole length is between two previous calculated borehole_lengths which are closer together then the threshold value Raises ------ ValueError - When the depth is smaller or equal to zero + When the borehole length is smaller or equal to zero """ # raise error when value is negative - if depth <= 0: - raise ValueError(f"The depth {depth} is smaller then zero!") + if borehole_length <= 0: + raise ValueError(f"The borehole length {borehole_length} is smaller then zero!") - # get nearest depth index - val_depth, idx_depth = self._nearest_value(self.depth_array, depth) + # get nearest borehole_length index + val_borehole_length, idx_borehole_length = self._nearest_value(self.borehole_length_array, borehole_length) - # the exact depth is in the previous calculated data + # the exact borehole_length is in the previous calculated data # two times the same index is returned - if val_depth == depth: - return idx_depth, idx_depth + if val_borehole_length == borehole_length: + return idx_borehole_length, idx_borehole_length - if depth > val_depth: - # the nearest index is the first in the array and the depth is smaller than the smallest value in the array + if borehole_length > val_borehole_length: + # the nearest index is the first in the array and the borehole length is smaller than the smallest value in the array # but the difference is smaller than the threshold for interpolation - if idx_depth == self.depth_array.size - 1 and depth - val_depth < self.threshold_depth_interpolation * depth: - return idx_depth, None - elif idx_depth != self.depth_array.size - 1: - idx_next = idx_depth + 1 - if self.depth_array[idx_next] - val_depth < self.threshold_depth_interpolation * depth: - return idx_depth, idx_next + if idx_borehole_length == self.borehole_length_array.size - 1 and borehole_length - val_borehole_length < self.threshold_borehole_length_interpolation * borehole_length: + return idx_borehole_length, None + elif idx_borehole_length != self.borehole_length_array.size - 1: + idx_next = idx_borehole_length + 1 + if self.borehole_length_array[ + idx_next] - val_borehole_length < self.threshold_borehole_length_interpolation * borehole_length: + return idx_borehole_length, idx_next else: - # the nearest index is the last in the array and the depth is larger than the highest value in the array + # the nearest index is the last in the array and the borehole length is larger than the highest value in the array # but the difference is smaller than the threshold for interpolation - if idx_depth == 0 and val_depth - depth < self.threshold_depth_interpolation * depth: - return None, idx_depth - elif idx_depth != 0: - idx_prev = idx_depth - 1 - if val_depth - self.depth_array[idx_prev] < self.threshold_depth_interpolation * depth: - return idx_prev, idx_depth + if idx_borehole_length == 0 and val_borehole_length - borehole_length < self.threshold_borehole_length_interpolation * borehole_length: + return None, idx_borehole_length + elif idx_borehole_length != 0: + idx_prev = idx_borehole_length - 1 + if val_borehole_length - self.borehole_length_array[ + idx_prev] < self.threshold_borehole_length_interpolation * borehole_length: + return idx_prev, idx_borehole_length # no correct interpolation indices are found # None, None is returned @@ -465,21 +467,21 @@ def set_options_gfunction_calculation(self, options: dict, add: bool = True) -> def remove_previous_data(self) -> None: """ - This function removes the previous calculated data by setting the depth_array, time_array and + This function removes the previous calculated data by setting the borehole_length_array, time_array and previous_gfunctions back to empty arrays. Returns ------- None """ - self.depth_array = np.array([]) + self.borehole_length_array = np.array([]) self.time_array = np.array([]) self.previous_gfunctions = np.array([]) self.alpha = 0 self.borefield = [] self.fifo_list.clear() - def set_new_calculated_data(self, time_values: np.ndarray, depth: float, gvalues: np.ndarray, + def set_new_calculated_data(self, time_values: np.ndarray, borehole_length: float, gvalues: np.ndarray, borefield, alpha) -> bool: """ This function stores the newly calculated gvalues if this is needed. @@ -488,8 +490,8 @@ def set_new_calculated_data(self, time_values: np.ndarray, depth: float, gvalues ---------- time_values : np.ndarray Array with all the time values [s] for which gvalues should be calculated - depth : float - Depth of the borefield [m] + borehole_length : float + Borehole length [m] gvalues : np.ndarray Array with all the calculated gvalues for the corresponding borefield, alpha and time_values borefield : list[pygfunction.borehole] @@ -562,21 +564,21 @@ def check_if_data_should_be_saved() -> bool: nearest_idx = 0 if np.any(self.previous_gfunctions): - nearest_val, nearest_idx = self._nearest_value(self.depth_array, depth) - if self.depth_array[nearest_idx] < depth: + nearest_val, nearest_idx = self._nearest_value(self.borehole_length_array, borehole_length) + if self.borehole_length_array[nearest_idx] < borehole_length: nearest_idx += 1 # insert data in stored data - if self.depth_array.size == 1: + if self.borehole_length_array.size == 1: # self.previous_gfunctions should be converted to a 2D-array - if self.depth_array[0] > depth: + if self.borehole_length_array[0] > borehole_length: self.previous_gfunctions = np.vstack((gvalues, self.previous_gfunctions)) else: self.previous_gfunctions = np.vstack((self.previous_gfunctions, gvalues)) else: self.previous_gfunctions = np.insert(self.previous_gfunctions, nearest_idx, gvalues, 0) - self.depth_array = np.insert(self.depth_array, nearest_idx, depth) + self.borehole_length_array = np.insert(self.borehole_length_array, nearest_idx, borehole_length) self.time_array = time_values self.borefield = borefield self.alpha = alpha @@ -586,7 +588,7 @@ def check_if_data_should_be_saved() -> bool: def _check_borefield(self, borefield: List[gt.boreholes.Borehole]) -> bool: """ This function checks whether the new borefield object is equal to the previous one. - It does so by comparing all the parameters (neglecting the depth). + It does so by comparing all the parameters (neglecting the borehole length). If the borefield objects are unequal, the borefield variable is set to the new borefield and all the previously saved gfunctions are deleted. diff --git a/GHEtool/test/unit-tests/test_custom_gfunction.py b/GHEtool/test/unit-tests/test_custom_gfunction.py index 1b4b3dc6..c85967ef 100644 --- a/GHEtool/test/unit-tests/test_custom_gfunction.py +++ b/GHEtool/test/unit-tests/test_custom_gfunction.py @@ -13,7 +13,7 @@ def custom_gfunction(): rect_field = gt.boreholes.rectangle_field(10, 10, 6, 6, 100, 4, 0.075) - custom_gfunction.create_custom_dataset(rect_field, 0.2*10**-6) + custom_gfunction.create_custom_dataset(rect_field, 0.2 * 10 ** -6) return custom_gfunction @@ -26,20 +26,20 @@ def test_initiate_with_random_values(): custom_gfunction = CustomGFunction(np.array([1, 5, 6]), np.array([2, 5, 7])) assert custom_gfunction.max_t == 6 assert custom_gfunction.min_t == 1 - assert custom_gfunction.max_H == 7 - assert custom_gfunction.min_H == 2 + assert custom_gfunction.max_borehole_length == 7 + assert custom_gfunction.min_borehole_length == 2 -def test_update_min_max_H(): +def test_update_min_max_borehole_length(): custom_gfunction = CustomGFunction() - assert custom_gfunction.max_H == CustomGFunction.DEFAULT_DEPTH_ARRAY[-1] - assert custom_gfunction.min_H == CustomGFunction.DEFAULT_DEPTH_ARRAY[0] - assert np.array_equal(custom_gfunction.depth_array, CustomGFunction.DEFAULT_DEPTH_ARRAY) + assert custom_gfunction.max_borehole_length == CustomGFunction.DEFAULT_LENGTH_ARRAY[-1] + assert custom_gfunction.min_borehole_length == CustomGFunction.DEFAULT_LENGTH_ARRAY[0] + assert np.array_equal(custom_gfunction.depth_array, CustomGFunction.DEFAULT_LENGTH_ARRAY) custom_gfunction.depth_array = np.array([1, 5, 10]) assert np.array_equal(custom_gfunction.depth_array, np.array([1, 5, 10])) - assert custom_gfunction.max_H == 10 - assert custom_gfunction.min_H == 1 + assert custom_gfunction.max_borehole_length == 10 + assert custom_gfunction.min_borehole_length == 1 def test_update_min_max_t(): @@ -56,7 +56,7 @@ def test_update_min_max_t(): def test_create_dataset(): custom_gfunction = CustomGFunction() - custom_gfunction.create_custom_dataset(gt.boreholes.rectangle_field(10, 10, 6, 6, 100, 4, 0.075), 2.*10**-6) + custom_gfunction.create_custom_dataset(gt.boreholes.rectangle_field(10, 10, 6, 6, 100, 4, 0.075), 2. * 10 ** -6) assert np.any(custom_gfunction.gvalues_array) temp = copy.copy((custom_gfunction.gvalues_array)) custom_gfunction.options = {} @@ -120,10 +120,10 @@ def test_within_range(custom_gfunction): time_array = np.array([3600, 5000, 10000]) assert not custom_gfunction.within_range(time_array, 0.5) assert not custom_gfunction.within_range(time_array, 500) - assert not custom_gfunction.within_range(np.array([3600, 10**11]), 50) + assert not custom_gfunction.within_range(np.array([3600, 10 ** 11]), 50) assert not custom_gfunction.within_range(np.array([10, 3600]), 50) assert custom_gfunction.within_range(time_array, 50) - assert custom_gfunction.within_range(np.array([3600, 10**5]), 50) + assert custom_gfunction.within_range(np.array([3600, 10 ** 5]), 50) custom_gfunction.delete_custom_gfunction() assert not custom_gfunction.within_range(time_array, 50) @@ -135,4 +135,5 @@ def test_gfunction_calculation(custom_gfunction): # test with loading loaded_custom_gfunction = load_custom_gfunction("test.gvalues") assert np.isclose(0.03586207, loaded_custom_gfunction.calculate_gfunction(4000, 100, True)[0]) - assert np.allclose(np.array([0.03586207, 0.1343308]), loaded_custom_gfunction.calculate_gfunction([4000, 8000], 100, True)) + assert np.allclose(np.array([0.03586207, 0.1343308]), + loaded_custom_gfunction.calculate_gfunction([4000, 8000], 100, True)) diff --git a/GHEtool/test/unit-tests/test_gfunction.py b/GHEtool/test/unit-tests/test_gfunction.py index 2f78d083..f0f0c908 100644 --- a/GHEtool/test/unit-tests/test_gfunction.py +++ b/GHEtool/test/unit-tests/test_gfunction.py @@ -8,9 +8,9 @@ from GHEtool import Borefield from GHEtool.VariableClasses import FIFO, GFunction -depth_array = np.array([1, 5, 6]) -depth_array_empty = np.array([]) -depth_array_threshold = np.array([30, 60, 100]) +borehole_length_array = np.array([1, 5, 6]) +borehole_length_array_empty = np.array([]) +borehole_length_array_threshold = np.array([30, 60, 100]) time_value_array_empty = np.array([]) time_value_array = np.array([1, 100, 1000, 10000]) @@ -41,7 +41,7 @@ def test_unequal_borefields(): def test_equal_borefields2(): borefield1 = gt.boreholes.rectangle_field(10, 10, 5, 5, 100, 4, 0.075) borefield2 = gt.boreholes.rectangle_field(10, 10, 5, 5, 100, 4, 0.075) - + gfunc = GFunction() gfunc.borefield = borefield1 assert gfunc._check_borefield(borefield2) @@ -88,41 +88,41 @@ def test_unequal_alpha(): def test_nearest_value_empty(): gfunc = GFunction() - assert False == gfunc._nearest_value(depth_array_empty, 5) + assert False == gfunc._nearest_value(borehole_length_array_empty, 5) def test_nearest_value_index(): gfunc = GFunction() - assert 1, 0 == gfunc._nearest_value(depth_array, 0) - assert 1, 0 == gfunc._nearest_value(depth_array, 1) - assert 1, 0 == gfunc._nearest_value(depth_array, 2) - assert 5, 1 == gfunc._nearest_value(depth_array, 4) - assert 5, 1 == gfunc._nearest_value(depth_array, 5) - assert 6, 2 == gfunc._nearest_value(depth_array, 100) + assert 1, 0 == gfunc._nearest_value(borehole_length_array, 0) + assert 1, 0 == gfunc._nearest_value(borehole_length_array, 1) + assert 1, 0 == gfunc._nearest_value(borehole_length_array, 2) + assert 5, 1 == gfunc._nearest_value(borehole_length_array, 4) + assert 5, 1 == gfunc._nearest_value(borehole_length_array, 5) + assert 6, 2 == gfunc._nearest_value(borehole_length_array, 100) -def test_nearest_depth_index(): +def test_nearest_borehole_length_index(): gfunc = GFunction() - gfunc.depth_array = np.array([1, 5, 6]) - assert (None, 0) == gfunc._get_nearest_depth_index(0.9) - assert (None, None) == gfunc._get_nearest_depth_index(100) - assert (None, None) == gfunc._get_nearest_depth_index(3) - assert (1, 1) == gfunc._get_nearest_depth_index(5) - assert (2, None) == gfunc._get_nearest_depth_index(7) - gfunc.depth_array = np.array([4, 5, 6]) - assert (0, 1) == gfunc._get_nearest_depth_index(4.8) + gfunc.borehole_length_array = np.array([1, 5, 6]) + assert (None, 0) == gfunc._get_nearest_borehole_length_index(0.9) + assert (None, None) == gfunc._get_nearest_borehole_length_index(100) + assert (None, None) == gfunc._get_nearest_borehole_length_index(3) + assert (1, 1) == gfunc._get_nearest_borehole_length_index(5) + assert (2, None) == gfunc._get_nearest_borehole_length_index(7) + gfunc.borehole_length_array = np.array([4, 5, 6]) + assert (0, 1) == gfunc._get_nearest_borehole_length_index(4.8) with raises(ValueError): - gfunc._get_nearest_depth_index(-100) + gfunc._get_nearest_borehole_length_index(-100) -def test_nearest_depth_index_threshold(): +def test_nearest_borehole_length_index_threshold(): gfunc = GFunction() - gfunc.depth_array = depth_array_threshold - assert (None, None) == gfunc._get_nearest_depth_index(5) - assert (None, None) == gfunc._get_nearest_depth_index(50) - assert (None, None) == gfunc._get_nearest_depth_index(95) - assert (None, None) == gfunc._get_nearest_depth_index(40) + gfunc.borehole_length_array = borehole_length_array_threshold + assert (None, None) == gfunc._get_nearest_borehole_length_index(5) + assert (None, None) == gfunc._get_nearest_borehole_length_index(50) + assert (None, None) == gfunc._get_nearest_borehole_length_index(95) + assert (None, None) == gfunc._get_nearest_borehole_length_index(40) def test_check_time_values(): @@ -143,7 +143,7 @@ def test_check_time_values(): def test_set_options(): gfunc = GFunction() - test = {"method": "similarities", "linear_threshold": 24*3600} + test = {"method": "similarities", "linear_threshold": 24 * 3600} gfunc.set_options_gfunction_calculation(test) assert gfunc.options == test gfunc.set_options_gfunction_calculation({"method": "similarities"}) @@ -233,9 +233,9 @@ def test_interpolation_1D(): assert np.array_equal(test, gfunc.previous_gfunctions) -def _change_borefield_depth(borefield, depth): +def _change_borefield_borehole_length(borefield, borehole_length): for idx, _ in enumerate(borefield): - setattr(borefield[idx], "H", depth) + setattr(borefield[idx], "H", borehole_length) def test_store_2D_data(): @@ -246,50 +246,50 @@ def test_store_2D_data(): gfunc.calculate(time_values, borefield, alpha) gfunc_val = copy.copy(gfunc.previous_gfunctions) - _change_borefield_depth(borefield, 120) + _change_borefield_borehole_length(borefield, 120) gfunc.calculate(time_values, borefield, alpha) - assert gfunc.depth_array.shape[0] == 2 + assert gfunc.borehole_length_array.shape[0] == 2 assert np.array_equal(gfunc.previous_gfunctions[0], gfunc_val) - _change_borefield_depth(borefield, 80) + _change_borefield_borehole_length(borefield, 80) gfunc.calculate(time_values, borefield, alpha) - assert gfunc.depth_array.shape[0] == 3 + assert gfunc.borehole_length_array.shape[0] == 3 assert np.array_equal(gfunc.previous_gfunctions[1], gfunc_val) gfunc.remove_previous_data() # do the same but now first with other sequence of 100, 80, 120m - _change_borefield_depth(borefield, 100) + _change_borefield_borehole_length(borefield, 100) gfunc.calculate(time_values, borefield, alpha) gfunc_val = copy.copy(gfunc.previous_gfunctions) - _change_borefield_depth(borefield, 80) + _change_borefield_borehole_length(borefield, 80) gfunc.calculate(time_values, borefield, alpha) - assert gfunc.depth_array.shape[0] == 2 + assert gfunc.borehole_length_array.shape[0] == 2 assert np.array_equal(gfunc.previous_gfunctions[1], gfunc_val) - _change_borefield_depth(borefield, 120) + _change_borefield_borehole_length(borefield, 120) gfunc.calculate(time_values, borefield, alpha) - assert gfunc.depth_array.shape[0] == 3 + assert gfunc.borehole_length_array.shape[0] == 3 assert np.array_equal(gfunc.previous_gfunctions[1], gfunc_val) # test if data is removed - _change_borefield_depth(borefield, 130) + _change_borefield_borehole_length(borefield, 130) gfunc.calculate(time_values, borefield, alpha * 1.01) - assert gfunc.depth_array.size == 1 + assert gfunc.borehole_length_array.size == 1 - _change_borefield_depth(borefield, 110) + _change_borefield_borehole_length(borefield, 110) gfunc.calculate(time_values, borefield, alpha * 1.01) - assert gfunc.depth_array.shape[0] == 2 + assert gfunc.borehole_length_array.shape[0] == 2 # test if data is removed borefield_2 = gt.boreholes.rectangle_field(5, 6, 5, 5, 100, 1, 0.075) gfunc.calculate(time_values, borefield_2, alpha * 1.01) - assert gfunc.depth_array.size == 1 + assert gfunc.borehole_length_array.size == 1 def test_interpolate_2D(): @@ -298,28 +298,28 @@ def test_interpolate_2D(): time_values = borefield_ghe.load.time_L4 # populate data - _change_borefield_depth(borefield, 100) + _change_borefield_borehole_length(borefield, 100) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 120) + _change_borefield_borehole_length(borefield, 120) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 80) + _change_borefield_borehole_length(borefield, 80) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 110) + _change_borefield_borehole_length(borefield, 110) gfunc_calc = gfunc.calculate(gfunc.time_array, borefield, alpha) gfunc_pyg = gt.gfunction.gFunction(borefield, alpha, gfunc.time_array).gFunc - assert np.array_equal(gfunc.depth_array, np.array([80, 100, 120])) + assert np.array_equal(gfunc.borehole_length_array, np.array([80, 100, 120])) assert gfunc_calc.shape == gfunc_pyg.shape assert not np.array_equal(gfunc_calc, gfunc_pyg) - _change_borefield_depth(borefield, 100) + _change_borefield_borehole_length(borefield, 100) gfunc_calc = gfunc.calculate(borefield_ghe.load.time_L3[:20], borefield, alpha) gfunc_pyg = gt.gfunction.gFunction(borefield, alpha, borefield_ghe.load.time_L3[:20]).gFunc - assert np.array_equal(gfunc.depth_array, np.array([80, 100, 120])) + assert np.array_equal(gfunc.borehole_length_array, np.array([80, 100, 120])) assert gfunc_pyg.size == gfunc_calc.size assert not np.array_equal(gfunc_calc, gfunc_pyg) @@ -329,7 +329,7 @@ def test_interpolate_2D(): gfunc_calc = gfunc.calculate(time_double, borefield, alpha) gfunc_pyg = gt.gfunction.gFunction(borefield, alpha, time_double[:-1]).gFunc - assert np.array_equal(gfunc.depth_array, np.array([80, 100, 120])) + assert np.array_equal(gfunc.borehole_length_array, np.array([80, 100, 120])) assert gfunc_pyg.size + 1 == gfunc_calc.size assert not np.array_equal(gfunc_calc[:-1], gfunc_pyg) assert gfunc_calc[-1] == gfunc_calc[-2] @@ -337,14 +337,14 @@ def test_interpolate_2D(): # calculate anyhow gfunc.store_previous_values = False gfunc_calc = gfunc.calculate(borefield_ghe.load.time_L3[:20], borefield, alpha) - assert np.allclose(gfunc_calc, [14.89758799, 19.00729376, 21.25068071, 22.6936062, 23.70823959, 24.4633899, + assert np.allclose(gfunc_calc, [14.89758799, 19.00729376, 21.25068071, 22.6936062, 23.70823959, 24.4633899, 25.04810995, 25.51433124, 25.89459298, 26.21041712, 26.47665307, 26.70390003, 26.89993724, 27.07060881, 27.22039279, 27.35277941, 27.47052956, 27.57585579, 27.67055182, 27.75608682]) gfunc.store_previous_values = True gfunc_calc = gfunc.calculate(borefield_ghe.load.time_L3[:20], borefield, alpha) assert np.allclose(gfunc_calc, [15.21723783, 19.21174728, 21.39698711, 22.78389769, 23.78126837, 24.51443669, - 25.09618046, 25.5292184, 25.90238329, 26.22140026, 26.48339286, 26.70550955, + 25.09618046, 25.5292184, 25.90238329, 26.22140026, 26.48339286, 26.70550955, 26.90228268, 27.07574976, 27.20792103, 27.33922595, 27.46457098, 27.56161827, 27.65866557, 27.74718794]) @@ -388,18 +388,18 @@ def test_floating_number(): time_values = borefield_ghe.load.time_L4 # populate data - _change_borefield_depth(borefield, 100) + _change_borefield_borehole_length(borefield, 100) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 120) + _change_borefield_borehole_length(borefield, 120) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 80) + _change_borefield_borehole_length(borefield, 80) gfunc.calculate(time_values, borefield, alpha) - _change_borefield_depth(borefield, 100) + _change_borefield_borehole_length(borefield, 100) assert gfunc.calculate(7500., borefield, alpha) != gt.gfunction.gFunction(borefield, alpha, 7500.).gFunc - assert gfunc.calculate(gfunc.time_array[0], borefield, alpha) ==\ + assert gfunc.calculate(gfunc.time_array[0], borefield, alpha) == \ gt.gfunction.gFunction(borefield, alpha, gfunc.time_array[0]).gFunc diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index 4ef4240a..d5894006 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -75,24 +75,24 @@ def test_nb_of_boreholes(): assert np.isclose(borefield.D, 0.1) assert borefield.number_of_boreholes == 25 borefield.gfunction(5000, 110) - assert np.any(borefield.gfunction_calculation_object.depth_array) + assert np.any(borefield.gfunction_calculation_object.borehole_length_array) borefield.borefield = gt.boreholes.rectangle_field(6, 5, 6, 6, 100, 1, 0.075) - assert not np.any(borefield.gfunction_calculation_object.depth_array) + assert not np.any(borefield.gfunction_calculation_object.borehole_length_array) assert np.isclose(borefield.H, 100) assert np.isclose(borefield.r_b, 0.075) assert np.isclose(borefield.D, 1) borefield.gfunction(5000, 110) - assert np.any(borefield.gfunction_calculation_object.depth_array) + assert np.any(borefield.gfunction_calculation_object.borehole_length_array) assert borefield.number_of_boreholes == 30 borefield.borefield = None - assert not np.any(borefield.gfunction_calculation_object.depth_array) + assert not np.any(borefield.gfunction_calculation_object.borehole_length_array) assert borefield.gfunction_calculation_object assert borefield.number_of_boreholes == 0 borefield.borefield = gt.boreholes.rectangle_field(6, 5, 6, 6, 100, 1, 0.075) borefield.gfunction(5000, 110) - assert np.any(borefield.gfunction_calculation_object.depth_array) + assert np.any(borefield.gfunction_calculation_object.borehole_length_array) borefield.set_borefield(None) - assert not np.any(borefield.gfunction_calculation_object.depth_array) + assert not np.any(borefield.gfunction_calculation_object.borehole_length_array) assert borefield.number_of_boreholes == 0 @@ -261,23 +261,23 @@ def test_ground_data_jit_gfunction(): # calculate gfunction borefield.gfunction([5000, 10000], 150) - assert np.any(borefield.gfunction_calculation_object.depth_array) + assert np.any(borefield.gfunction_calculation_object.borehole_length_array) # test for property setter borefield.ground_data = ground_data_constant assert borefield.ground_data == ground_data_constant assert borefield._ground_data == ground_data_constant - assert not np.any(borefield.gfunction_calculation_object.depth_array) + assert not np.any(borefield.gfunction_calculation_object.borehole_length_array) # calculate gfunction borefield.gfunction([5000, 10000], 150) - assert np.any(borefield.gfunction_calculation_object.depth_array) + assert np.any(borefield.gfunction_calculation_object.borehole_length_array) # test for set function borefield.set_ground_parameters(data_ground_flux) assert borefield.ground_data == data_ground_flux assert borefield._ground_data == data_ground_flux - assert not np.any(borefield.gfunction_calculation_object.depth_array) + assert not np.any(borefield.gfunction_calculation_object.borehole_length_array) def test_set_fluid_params(): From 359c01a02568c37ddd1ceb9ed99dc96d98003e54 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 12:52:13 +0100 Subject: [PATCH 10/18] Change Borehole and fix tests --- GHEtool/Borefield.py | 5 ++-- GHEtool/Methods/optimise_load_profile.py | 4 +-- GHEtool/VariableClasses/Borehole.py | 25 ++++++++++++++----- .../test/unit-tests/test_custom_gfunction.py | 8 +++--- GHEtool/test/unit-tests/test_main_class.py | 6 ++--- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index e2ebc4fc..6dc04611 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -610,7 +610,7 @@ def Rb(self) -> float: Rb : float Equivalent borehole thermal resistance [mK/W] """ - return self.borehole.get_Rb(self.H, self.D, self.r_b, self.ground_data.k_s) + return self.borehole.get_Rb(self.H, self.D, self.r_b, self.ground_data.k_s, self.depth) @Rb.setter def Rb(self, Rb: float) -> None: @@ -1641,8 +1641,9 @@ def _calculate_temperature_profile(self, H: float = None, hourly: bool = False) def calculate_temperatures(H, hourly=hourly): # set Rb* value H = H if H is not None else self.H + depth = self.calculate_depth(H, self.D) Rb = self.borehole.get_Rb(H, self.D, self.r_b, - self.ground_data.k_s(self.calculate_depth(H, self.D), self.D)) + self.ground_data.k_s(depth, self.D), depth) results = None diff --git a/GHEtool/Methods/optimise_load_profile.py b/GHEtool/Methods/optimise_load_profile.py index c9fdea9e..26cb2341 100644 --- a/GHEtool/Methods/optimise_load_profile.py +++ b/GHEtool/Methods/optimise_load_profile.py @@ -59,7 +59,7 @@ def optimise_load_profile_power( # since the depth does not change, the Rb* value is constant borefield.Rb = borefield.borehole.get_Rb(borefield.H, borefield.D, borefield.r_b, - borefield.ground_data.k_s(borefield.depth)) + borefield.ground_data.k_s(borefield.depth, borefield.D)) # set load borefield.load = copy.deepcopy(building_load) @@ -178,7 +178,7 @@ def optimise_load_profile_energy( # since the depth does not change, the Rb* value is constant # set to use a constant Rb* value but save the initial parameters borefield.Rb = borefield.borehole.get_Rb(borefield.H, borefield.D, borefield.r_b, - borefield.ground_data.k_s(borefield.depth)) + borefield.ground_data.k_s(borefield.depth, borefield.D)) building_load_copy = copy.deepcopy(building_load) diff --git a/GHEtool/VariableClasses/Borehole.py b/GHEtool/VariableClasses/Borehole.py index d593a358..8c20d17b 100644 --- a/GHEtool/VariableClasses/Borehole.py +++ b/GHEtool/VariableClasses/Borehole.py @@ -168,7 +168,7 @@ def pipe_data(self) -> None: self._pipe_data = MultipleUTube() self.use_constant_Rb = True - def calculate_Rb(self, H: float, D: float, r_b: float, k_s: Union[float, callable]) -> float: + def calculate_Rb(self, H: float, D: float, r_b: float, k_s: Union[float, callable], depth: float = None) -> float: """ This function calculates the equivalent borehole thermal resistance. @@ -182,6 +182,8 @@ def calculate_Rb(self, H: float, D: float, r_b: float, k_s: Union[float, callabl Borehole radius [m] k_s : float or callable (Function to calculate the) ground thermal conductivity [mk/W] + depth : float + Borehole depth [m] (only needed if k_s is a function, not a number) Returns ------- @@ -193,6 +195,10 @@ def calculate_Rb(self, H: float, D: float, r_b: float, k_s: Union[float, callabl ValueError ValueError when the pipe and/or fluid data is not set correctly. """ + if depth is None: + # assume all vertical boreholes + depth = D + H + # check if all data is available if not self.pipe_data.check_values() or not self.fluid_data.check_values(): print("Please make sure you set al the pipe and fluid data.") @@ -201,11 +207,12 @@ def calculate_Rb(self, H: float, D: float, r_b: float, k_s: Union[float, callabl # initiate temporary borefield borehole = gt.boreholes.Borehole(H, D, r_b, 0, 0) # initiate pipe - pipe = self.pipe_data.pipe_model(self.fluid_data, k_s if isinstance(k_s, (float, int)) else k_s(H), borehole) + pipe = self.pipe_data.pipe_model(self.fluid_data, k_s if isinstance(k_s, (float, int)) else k_s(depth, D), + borehole) return pipe.effective_borehole_thermal_resistance(self.fluid_data.mfr, self.fluid_data.Cp) - def get_Rb(self, H: float, D: float, r_b: float, k_s: Union[callable, float]) -> float: + def get_Rb(self, H: float, D: float, r_b: float, k_s: Union[callable, float], depth: float = None) -> float: """ This function returns the equivalent borehole thermal resistance. If use_constant_Rb is True, self._Rb is returned, otherwise the resistance is calculated. @@ -213,23 +220,29 @@ def get_Rb(self, H: float, D: float, r_b: float, k_s: Union[callable, float]) -> Parameters ---------- H : float - Borehole depth [m] + Borehole length [m] D : float Borehole burial depth [m] r_b : float Borehole radius [m] k_s : float or callable - (Function to calculate) ground thermal conductivity in function of depth [mk/W] + (Function to calculate) ground thermal conductivity in function of the borehole depth [mk/W] + depth : float + Borehole depth [m] (only needed if k_s is a function, not a number) Returns ------- Rb* : float Equivalent borehole thermal resistance [mK/W] """ + if depth is None: + # assume all vertical boreholes + depth = D + H + if self.use_constant_Rb: return self.Rb - return self.calculate_Rb(H, D, r_b, k_s if isinstance(k_s, (int, float)) else k_s(H)) + return self.calculate_Rb(H, D, r_b, k_s if isinstance(k_s, (int, float)) else k_s(depth, D)) def __eq__(self, other): if not isinstance(other, Borehole): diff --git a/GHEtool/test/unit-tests/test_custom_gfunction.py b/GHEtool/test/unit-tests/test_custom_gfunction.py index c85967ef..b4d09bbf 100644 --- a/GHEtool/test/unit-tests/test_custom_gfunction.py +++ b/GHEtool/test/unit-tests/test_custom_gfunction.py @@ -34,10 +34,10 @@ def test_update_min_max_borehole_length(): custom_gfunction = CustomGFunction() assert custom_gfunction.max_borehole_length == CustomGFunction.DEFAULT_LENGTH_ARRAY[-1] assert custom_gfunction.min_borehole_length == CustomGFunction.DEFAULT_LENGTH_ARRAY[0] - assert np.array_equal(custom_gfunction.depth_array, CustomGFunction.DEFAULT_LENGTH_ARRAY) + assert np.array_equal(custom_gfunction.borehole_length_array, CustomGFunction.DEFAULT_LENGTH_ARRAY) - custom_gfunction.depth_array = np.array([1, 5, 10]) - assert np.array_equal(custom_gfunction.depth_array, np.array([1, 5, 10])) + custom_gfunction.borehole_length_array = np.array([1, 5, 10]) + assert np.array_equal(custom_gfunction.borehole_length_array, np.array([1, 5, 10])) assert custom_gfunction.max_borehole_length == 10 assert custom_gfunction.min_borehole_length == 1 @@ -100,7 +100,7 @@ def test_unequal(): def test_unequal2(): custom_gfunction = CustomGFunction() - custom_gfunction2 = CustomGFunction(depth_array=[1, 5]) + custom_gfunction2 = CustomGFunction(borehole_length_array=[1, 5]) assert not custom_gfunction == custom_gfunction2 diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index d5894006..753a2749 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -1077,9 +1077,9 @@ def test_calculate_next_depth_deep_sizing(): borefield.calculate_temperatures(75) assert np.isclose(borefield.calculate_next_depth_deep_sizing(75), 118.26269556337864) borefield.calculate_temperatures(118.26269556337864) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(118.26269556337864), 128.31636071414775) - borefield.calculate_temperatures(128.31636071414775) - assert np.isclose(borefield.calculate_next_depth_deep_sizing(128.31636071414775), 128.6225651998528) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(118.26269556337864), 128.6225651998528) + borefield.calculate_temperatures(128.6225651998528) + assert np.isclose(borefield.calculate_next_depth_deep_sizing(128.6225651998528), 131.41962184720694) @pytest.mark.parametrize("case, result", From bd09250f3bd9ff93334bab900c0bec6db5056dab Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 13:24:45 +0100 Subject: [PATCH 11/18] Fix all tests --- CHANGELOG.md | 3 ++- GHEtool/test/methods/method_data.py | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e987ace..9ffe5523 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Make terminology consistent: borehole length != borehole depth (issue #317). - _GroundData changed argument of check_depth, k_s, volumetric_heat_capacity, calculate_Tg, calculate_value and alpha from 'H' to 'depth' (issue #137). -- Removed 'depth' parameter in optimise load functions, for it is already included in the Borefield object (issue #317). +- Removed 'depth' attribute in optimise load functions, for it is already included in the Borefield object (issue #317). +- Added 'depth' attribute to get_Rb and calculate_Rb functions in the Borehole class (issue #317). ## [2.3.0] - 2024-11-05 diff --git a/GHEtool/test/methods/method_data.py b/GHEtool/test/methods/method_data.py index f6fbbb66..0a81fa67 100644 --- a/GHEtool/test/methods/method_data.py +++ b/GHEtool/test/methods/method_data.py @@ -497,7 +497,7 @@ borefield.set_fluid_parameters(FluidData(0.1, 0.475, 1033, 3930, 0.001)) borefield.set_pipe_parameters(SingleUTube(1.5, 0.016, 0.02, 0.42, 0.04)) list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 81.746, 87.453, - 22.3508, 38.726, 55.214, 59.163, + 22.3508, 38.72645142738253, 55.214, 59.163, name='Optimise load profile (stuck in loop) (power)', power=True, hourly=False)) list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 80.572, 83.887, @@ -582,9 +582,9 @@ 512.9266, name='Optimise load profile (eer combined) (power)', power=True, hourly=False)) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 50.33431191906354, 12.82812330930278, - 95.636899472386, 66.33595162152281, 603.0319153178363, - 509.73531422797737, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 146, 50.33431191906354, 12.762423542357437, + 96.26241738571167, 66.21037142995145, 602.66560630039, + 509.995718403938, name='Optimise load profile (eer combined) (energy)', power=False, hourly=False)) @@ -596,7 +596,7 @@ load = HourlyBuildingLoad(efficiency_heating=4.5, efficiency_cooling=20) load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, separator=";", col_cooling=0, col_heating=1) -list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 100, 100.0, 92.80988709011142, - 25.315, 42.463997436869896, 0.0, 64.1435824039379, +list_of_test_objects.add(OptimiseLoadProfileObject(borefield, load, 100, 100.0, 92.67160769044457, + 25.315, 42.2817092190839, 0.0, 64.4014083207306, name='Optimise load profile (auditorium) (energy)', power=False, hourly=False)) From cca84e3139fb2663c86866a5cde9e931f1618edb Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 13:50:03 +0100 Subject: [PATCH 12/18] Update Borefield --- CHANGELOG.md | 1 + GHEtool/Borefield.py | 214 +- GHEtool/Examples/Fluid viscosity.py | 28 + GHEtool/Examples/HF_14obs.kmz | Bin 0 -> 194263 bytes GHEtool/Examples/active_passive_cooling.py | 68 +- GHEtool/Examples/auditorium.csv | 8761 +++++++++++++++++ .../custom_borefield_configuration.py | 12 +- .../effect_of_borehole_configuration.py | 28 +- GHEtool/Examples/energy_pile.py | 17 + GHEtool/Examples/find_optimal_borefield.py | 137 + GHEtool/Examples/main_functionalities.py | 12 +- GHEtool/Examples/multiple_ground_layers.py | 7 +- .../Examples/optimise_load_profile_extra.py | 47 + GHEtool/Examples/pipe.py | 26 + GHEtool/Examples/readkml.py | 4 + GHEtool/Examples/regex.py | 22 + GHEtool/Examples/separatus.py | 2 +- .../Examples/sizing_with_Rb_calculation.py | 35 +- GHEtool/Examples/sizing_with_building_load.py | 24 +- .../sizing_with_building_load_hourly.py | 16 +- GHEtool/Examples/start_in_different_month.py | 10 +- GHEtool/Examples/temp.py | 80 + GHEtool/temp.py | 525 + GHEtool/test/methods/test_methods.py | 12 +- GHEtool/test/unit-tests/test_main_class.py | 11 +- 25 files changed, 9875 insertions(+), 224 deletions(-) create mode 100644 GHEtool/Examples/Fluid viscosity.py create mode 100644 GHEtool/Examples/HF_14obs.kmz create mode 100644 GHEtool/Examples/auditorium.csv create mode 100644 GHEtool/Examples/energy_pile.py create mode 100644 GHEtool/Examples/find_optimal_borefield.py create mode 100644 GHEtool/Examples/optimise_load_profile_extra.py create mode 100644 GHEtool/Examples/pipe.py create mode 100644 GHEtool/Examples/readkml.py create mode 100644 GHEtool/Examples/regex.py create mode 100644 GHEtool/Examples/temp.py create mode 100644 GHEtool/temp.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ffe5523..140e7335 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). from 'H' to 'depth' (issue #137). - Removed 'depth' attribute in optimise load functions, for it is already included in the Borefield object (issue #317). - Added 'depth' attribute to get_Rb and calculate_Rb functions in the Borehole class (issue #317). +- Changed 'depth' attribute to 'length' in print_temperature_profile_fixed_length, calculate_temperatures (issue #317). ## [2.3.0] - 2024-11-05 diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index 6dc04611..283a1af4 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -32,7 +32,7 @@ class Borefield(BaseClass): """Main borefield class""" UPM: float = 730.0 # number of hours per month - THRESHOLD_BOREHOLE_DEPTH: float = 0.05 # threshold for iteration + THRESHOLD_BOREHOLE_LENGTH: float = 0.05 # threshold for iteration # define default values DEFAULT_INVESTMENT: list = [35, 0] # 35 EUR/m @@ -123,7 +123,7 @@ def __init__( self.results: ResultsMonthly | ResultsHourly = ResultsMonthly() # initiate ground parameters - self._H = 0.0 # borehole depth m + self._H = 0.0 # borehole length [m] self._ground_data: _GroundData = GroundConstantTemperature() self.D: float = 0.0 # buried depth of the borehole [m] self.r_b: float = 0.0 # borehole radius [m] @@ -224,31 +224,36 @@ def calculate_depth(self, borehole_length: float, buried_depth: float) -> float: @property def H(self) -> float: """ - This function returns the borehole depth. + This function returns the borehole length as measured alongside the axis of the borehole. Returns ------- float - Borehole depth [meters] + Borehole length [meters] """ return self._H @H.setter def H(self, H: float) -> None: """ - This function sets the borehole depth. + This function sets the borehole length as measured alongside the axis of the borehole. Parameters ---------- H : float - Borehole depth [meters] + Borehole length [meters] Returns ------- None """ self._H = H - self._update_borefield_depth(H) + for bor in self._borefield: + bor.H = H + + # the boreholes are equal in length + self.gfunction_calculation_object.store_previous_values = \ + self.gfunction_calculation_object._store_previous_values_backup def set_borefield(self, borefield: list[gt.boreholes.Borehole] = None) -> None: """ @@ -283,7 +288,7 @@ def create_rectangular_borefield(self, N_1: int, N_2: int, B_1: float, B_2: floa B_2 : int Distance between adjacent boreholes in the y direction [m] H : float - Borehole depth [m] + Borehole length [m] D : float Borehole buried depth [m] r_b : float @@ -311,7 +316,7 @@ def create_circular_borefield(self, N: int, R: float, H: float, D: float = 1, r_ R : float Distance of boreholes from the center of the field H : float - Borehole depth [m] + Borehole length [m] D : float Borehole buried depth [m] r_b : float @@ -343,7 +348,7 @@ def create_U_shaped_borefield(self, N_1: int, N_2: int, B_1: float, B_2: float, B_2 : int Distance between adjacent boreholes in the y direction [m] H : float - Borehole depth [m] + Borehole length [m] D : float Borehole buried depth [m] r_b : float @@ -375,7 +380,7 @@ def create_L_shaped_borefield(self, N_1: int, N_2: int, B_1: float, B_2: float, B_2 : int Distance between adjacent boreholes in the y direction [m] H : float - Borehole depth [m] + Borehole length [m] D : float Borehole buried depth [m] r_b : float @@ -407,7 +412,7 @@ def create_box_shaped_borefield(self, N_1: int, N_2: int, B_1: float, B_2: float B_2 : int Distance between adjacent boreholes in the y direction [m] H : float - Borehole depth [m] + Borehole length [m] D : float Borehole buried depth [m] r_b : float @@ -454,9 +459,9 @@ def borefield(self, borefield: list[gt.boreholes.Borehole] = None) -> None: self.r_b = np.average([bor.r_b for bor in borefield]) self._H = np.average([bor.H for bor in borefield]) self.gfunction_calculation_object.remove_previous_data() - unequal_depth = np.any([bor.H != borefield[0].H for bor in borefield]) - if unequal_depth: - self.gfunction_calculation_object._store_previous_values = not unequal_depth + unequal_length = np.any([bor.H != borefield[0].H for bor in borefield]) + if unequal_length: + self.gfunction_calculation_object._store_previous_values = not unequal_length else: self.gfunction_calculation_object.store_previous_values = \ self.gfunction_calculation_object._store_previous_values_backup @@ -475,26 +480,6 @@ def borefield(self): self.gfunction_calculation_object.remove_previous_data() self.custom_gfunction = None - def _update_borefield_depth(self, H: float) -> None: - """ - This function updates the borehole depth. - - Parameters - ---------- - H : float - Borehole depth. - - Returns - ------- - None - """ - for bor in self._borefield: - bor.H = H - - # the boreholes are equal in length - self.gfunction_calculation_object.store_previous_values = \ - self.gfunction_calculation_object._store_previous_values_backup - def load_custom_gfunction(self, location: str) -> None: """ This function loads the custom gfunction. @@ -790,24 +775,24 @@ def _Tg(self, H: float = None) -> float: return self.ground_data.calculate_Tg(self.calculate_depth(H, self.D), self.D) - def _check_convergence(self, new_depth: float, old_depth: float, iter: int) -> bool: + def _check_convergence(self, new_length: float, old_length: float, iter: int) -> bool: """ - This function checks, with the absolute and relative tolerance, if the depth is converged. + This function checks, with the absolute and relative tolerance, if the borehole length is converged. This is the case if both criteria are met. Raises MaximumNumberOfIterations error if the max number of iterations is crossed. Parameters ---------- - new_depth : float - Depth from the current interation [m] - old_depth : float - Depth from the previous iteration [m] + new_length : float + Borehole length from the current interation [m] + old_length : float + Borehole length from the previous iteration [m] iter : int Current number of iteration Returns ------- bool - True if the depth is converged + True if the borehole length is converged Raises ------ @@ -817,12 +802,12 @@ def _check_convergence(self, new_depth: float, old_depth: float, iter: int) -> b if iter + 1 > self._calculation_setup.max_nb_of_iterations: raise MaximumNumberOfIterations(self._calculation_setup.max_nb_of_iterations) - if old_depth == 0: + if old_length == 0: return False test_a_tol = abs( - new_depth - old_depth) <= self._calculation_setup.atol if self._calculation_setup.atol != False else True + new_length - old_length) <= self._calculation_setup.atol if self._calculation_setup.atol != False else True test_rtol = abs( - new_depth - old_depth) / old_depth <= self._calculation_setup.rtol if self._calculation_setup.rtol != False else True + new_length - old_length) / old_length <= self._calculation_setup.rtol if self._calculation_setup.rtol != False else True return test_a_tol and test_rtol @@ -849,7 +834,7 @@ def _Ahmadfard(self, th: float, qh: float, qm: float, qa: float, Tf: float) -> f Returns ------- H : float - Required borehole depth [m] + Required borehole length [m] References ---------- @@ -860,12 +845,12 @@ def _Ahmadfard(self, th: float, qh: float, qm: float, qa: float, Tf: float) -> f """ # initiate iteration H_prev = 0 - # set minimal depth to 50 m + # set minimal length to 50 m self.H = 50 if self.H < 1 else self.H time = np.array([th, th + self.load.tm, self.load.ty + self.load.tm + th]) # Iterates as long as there is no convergence - # (convergence if difference between depth in iterations is smaller than THRESHOLD_BOREHOLE_DEPTH) + # (convergence if difference between borehole length in iterations is smaller than THRESHOLD_BOREHOLE_LENGTH) i = 0 while not self._check_convergence(self.H, H_prev, i): # calculate the required g-function values @@ -877,7 +862,7 @@ def _Ahmadfard(self, th: float, qh: float, qm: float, qa: float, Tf: float) -> f Rd = (gfunct_uniform_T[0]) / (2 * pi * k_s) # calculate the total borehole length L = (qa * Ra + qm * Rm + qh * Rd + qh * self.Rb) / abs(Tf - self._Tg()) - # updating the depth values + # updating the borehole length values H_prev = self.H self.H = L / self.number_of_boreholes i += 1 @@ -909,7 +894,7 @@ def _Carcel(self, th: float, tcm: float, qh: float, qpm: float, qm: float, Tf: f Returns ------- H : float - Required borehole depth [m] + Required borehole length [m] References ---------- @@ -925,7 +910,7 @@ def _Carcel(self, th: float, tcm: float, qh: float, qpm: float, qm: float, Tf: f self.H = 50 # Iterates as long as there is no convergence - # (convergence if difference between depth in iterations is smaller than THRESHOLD_BOREHOLE_DEPTH) + # (convergence if difference between the borehole lengths in iterations is smaller than THRESHOLD_BOREHOLE_LENGTH) i = 0 while not self._check_convergence(self.H, H_prev, i): # get the g-function values @@ -940,7 +925,7 @@ def _Carcel(self, th: float, tcm: float, qh: float, qpm: float, qm: float, Tf: f # calculate the total length L = (qh * self.Rb + qh * Rh + qm * Rcm + qpm * Rpm) / abs(Tf - self._Tg()) - # updating the depth values + # updating the borehole lengths H_prev = self.H self.H = L / self.number_of_boreholes i += 1 @@ -1009,7 +994,7 @@ def size(self, H_init: float = None, Parameters ---------- H_init : float - Initial depth for the iteration. If None, the default H_init is chosen. + Initial borehole length for the iteration. If None, the default H_init is chosen. use_constant_Rb : bool True if a constant borehole equivalent resistance (Rb*) value should be used L2_sizing : bool @@ -1027,7 +1012,7 @@ def size(self, H_init: float = None, Returns ------- - borehole depth : float + borehole length : float Raises ------ @@ -1052,26 +1037,26 @@ def size(self, H_init: float = None, # sizes according to the correct algorithm if self._calculation_setup.L2_sizing: - depth = self.size_L2(H_init, self._calculation_setup.quadrant_sizing) + length = self.size_L2(H_init, self._calculation_setup.quadrant_sizing) if self._calculation_setup.L3_sizing: - depth = self.size_L3(H_init, self._calculation_setup.quadrant_sizing) + length = self.size_L3(H_init, self._calculation_setup.quadrant_sizing) if self._calculation_setup.L4_sizing: - depth = self.size_L4(H_init, self._calculation_setup.quadrant_sizing) + length = self.size_L4(H_init, self._calculation_setup.quadrant_sizing) # reset initial parameters self._calculation_setup.restore_backup() self.borehole.use_constant_Rb = use_constant_Rb_backup # check if the field is not shallow - if depth < self.THRESHOLD_WARNING_SHALLOW_FIELD: + if length < self.THRESHOLD_WARNING_SHALLOW_FIELD: ghe_logger.warning( - f"The field has a calculated depth of {round(depth, 2)}" + f"The field has a calculated borehole length of {round(length, 2)}" f"m which is lower than the proposed minimum " f"of {self.THRESHOLD_WARNING_SHALLOW_FIELD} m. " f"Please change your configuration accordingly to have a not so shallow field." ) - return depth + return length def _select_size(self, size_max_temp: float, size_min_temp: float, hourly: bool = False) -> float: """ @@ -1092,8 +1077,8 @@ def _select_size(self, size_max_temp: float, size_min_temp: float, hourly: bool Returns ------- - depth : float - Required borehole depth [m] + length : float + Required borehole length [m] Raises ------ @@ -1118,19 +1103,19 @@ def size_L2(self, H_init: float = None, quadrant_sizing: int = 0) -> float: """ This function sizes the of the given configuration according to the methodology explained in (Peere et al., 2021) [#PeereBS]_, which is a L2 method. When quadrant sizing is other than 0, it sizes the field based on - the asked quadrant. It returns the borefield depth. + the asked quadrant. It returns the borehole length. Parameters ---------- H_init : float - Initial depth from where to start the iteration [m] + Initial length from where to start the iteration [m] quadrant_sizing : int If a quadrant is given the sizing is performed for this quadrant else for the relevant Returns ------- H : float - Required depth of the borefield [m] + Required borehole length [m] Raises ------ @@ -1149,7 +1134,7 @@ def size_L2(self, H_init: float = None, quadrant_sizing: int = 0) -> float: warnings.warn('The L2 method does not work with building load data. The L3 method will be used instead.') return self.size_L3(H_init, quadrant_sizing) - # initiate with a given depth + # initiate with a given length self.H: float = H_init if H_init is not None else self._calculation_setup.H_init def size_quadrant1(): @@ -1220,14 +1205,14 @@ def size_L3(self, H_init: float = None, quadrant_sizing: int = 0) -> float: Parameters ---------- H_init : float - Initial depth from where to start the iteration [m] + Initial borehole length from where to start the iteration [m] quadrant_sizing : int If a quadrant is given the sizing is performed for this quadrant else for the relevant Returns ------- H : float - Required depth of the borefield [m] + Required borehole length of the borefield [m] Raises ------ @@ -1243,7 +1228,7 @@ def size_L3(self, H_init: float = None, quadrant_sizing: int = 0) -> float: if not quadrant_sizing in range(0, 5): raise ValueError(f"Quadrant {quadrant_sizing} does not exist.") - # initiate with a given depth + # initiate with a given borehole length self.H: float = H_init if H_init is not None else self._calculation_setup.H_init if quadrant_sizing != 0: @@ -1285,14 +1270,14 @@ def size_L4(self, H_init: float = None, quadrant_sizing: int = 0) -> float: Parameters ---------- H_init : float - Initial depth from where to start the iteration [m] + Initial borehole length from where to start the iteration [m] quadrant_sizing : int If a quadrant is given the sizing is performed for this quadrant else for the relevant Returns ------- H : float - Required depth of the borefield [m] + Required borehole length of the borefield [m] Raises ------ @@ -1312,7 +1297,7 @@ def size_L4(self, H_init: float = None, quadrant_sizing: int = 0) -> float: if not self.load._hourly: raise ValueError("There is no hourly resolution available!") - # initiate with a given depth + # initiate with a given borehole length self.H: float = H_init if H_init is not None else self._calculation_setup.H_init if quadrant_sizing != 0: @@ -1355,39 +1340,39 @@ def size_L4(self, H_init: float = None, quadrant_sizing: int = 0) -> float: return min_temp raise UnsolvableDueToTemperatureGradient - def calculate_next_depth_deep_sizing(self, current_depth: float) -> float: + def calculate_next_depth_deep_sizing(self, current_length: float) -> float: """ - This method is a slower but more robust way of calculating the next depth in the sizing iteration when the + This method is a slower but more robust way of calculating the next borehole length in the sizing iteration when the borefield is sized for the maximum fluid temperature when there is a non-constant ground temperature. The method is based (as can be seen in its corresponding validation document) on the assumption that the difference between the maximum temperature in peak injection and the average undisturbed ground temperature - is irreversily proportional to the depth. In this way, given this difference in temperature and the current - depth, a new depth can be calculated. + is irreversily proportional to the borehole length. In this way, given this difference in temperature and the current + borehole length, a new borehole length can be calculated. Parameters ---------- - current_depth : float - The current depth of the borefield [m] + current_length : float + The current borehole length [m] Returns ------- float - New depth of the borefield [m] + New borehole length [m] """ - # diff between the max temperature in peak injection and the avg undisturbed ground temperature at current_depth + # diff between the max temperature in peak injection and the avg undisturbed ground temperature at current_length delta_temp = np.max( - self.results.peak_injection - self.ground_data.calculate_Tg(self.calculate_depth(current_depth, self.D))) + self.results.peak_injection - self.ground_data.calculate_Tg(self.calculate_depth(current_length, self.D))) # calculate the maximum temperature difference between the temperature limit and the ground temperature - # at current_depth - delta_wrt_max = self.Tf_max - self.ground_data.calculate_Tg(self.calculate_depth(current_depth, self.D)) + # at current_length + delta_wrt_max = self.Tf_max - self.ground_data.calculate_Tg(self.calculate_depth(current_length, self.D)) # delta_t1/H1 ~ delta_t2/H2 - # H2 = delta_t2/delta_t1*current_depth + # H2 = delta_t2/delta_t1*current_length rel_diff = delta_wrt_max / delta_temp - new_depth = current_depth / rel_diff + new_length = current_length / rel_diff - return new_depth + return new_length def _size_based_on_temperature_profile(self, quadrant: int, hourly: bool = False, deep_sizing: bool = False) -> ( float, bool): @@ -1407,10 +1392,10 @@ def _size_based_on_temperature_profile(self, quadrant: int, hourly: bool = False Returns ------- - Depth : float - Required depth of the borefield [m] + Borehole length : float + Required borehole length of the borefield [m] Sized : bool - True if the required depth also satisfies the other temperature constraint [m] + True if the required borehole length also satisfies the other temperature constraint [m] """ # initiate iteration H_prev = 0 @@ -1419,11 +1404,11 @@ def _size_based_on_temperature_profile(self, quadrant: int, hourly: bool = False self.H = 50 if deep_sizing: - # set borefield to minimal depth + # set borefield to minimal borehole length self.H = 20 # Iterates as long as there is no convergence - # (convergence if difference between depth in iterations is smaller than THRESHOLD_BOREHOLE_DEPTH) + # (convergence if difference between borehole length in iterations is smaller than THRESHOLD_BOREHOLE_LENGTH) i = 0 while not self._check_convergence(self.H, H_prev, i): if hourly: @@ -1488,15 +1473,15 @@ def investment_cost(self) -> float: """ return np.polyval(self.cost_investment, self.H * self.number_of_boreholes) - def calculate_temperatures(self, depth: float = None, hourly: bool = False) -> None: + def calculate_temperatures(self, length: float = None, hourly: bool = False) -> None: """ - Calculate all the temperatures without plotting the figure. When depth is given, it calculates it for a given - depth. + Calculate all the temperatures without plotting the figure. When length is given, it calculates it for a given + borehole length. Parameters ---------- - depth : float - Depth for which the temperature profile should be calculated for [m] + length : float + Borehole length for which the temperature profile should be calculated for [m] hourly : bool True when the temperatures should be calculated based on hourly data @@ -1504,11 +1489,11 @@ def calculate_temperatures(self, depth: float = None, hourly: bool = False) -> N ------- None """ - self._calculate_temperature_profile(H=depth, hourly=hourly) + self._calculate_temperature_profile(H=length, hourly=hourly) def print_temperature_profile(self, legend: bool = True, plot_hourly: bool = False) -> None: """ - This function plots the temperature profile for the calculated depth. + This function plots the temperature profile for the calculated borehole length. It uses the available temperature profile data. Parameters @@ -1528,15 +1513,15 @@ def print_temperature_profile(self, legend: bool = True, plot_hourly: bool = Fal return self._plot_temperature_profile(legend=legend, plot_hourly=plot_hourly) - def print_temperature_profile_fixed_depth(self, depth: float, legend: bool = True, plot_hourly: bool = False): + def print_temperature_profile_fixed_length(self, length: float, legend: bool = True, plot_hourly: bool = False): """ - This function plots the temperature profile for a fixed depth. + This function plots the temperature profile for a fixed borehole length. It uses the already calculated temperature profile data, if available. Parameters ---------- - depth : float - Depth at which the temperature profile should be shown + length : float + Borehole length at which the temperature profile should be shown legend : bool True if the legend should be printed plot_hourly : bool @@ -1548,7 +1533,7 @@ def print_temperature_profile_fixed_depth(self, depth: float, legend: bool = Tru Figure object """ # calculate temperature profile - self._calculate_temperature_profile(H=depth, hourly=plot_hourly) + self._calculate_temperature_profile(H=length, hourly=plot_hourly) return self._plot_temperature_profile(legend=legend, plot_hourly=plot_hourly) @@ -1629,7 +1614,7 @@ def _calculate_temperature_profile(self, H: float = None, hourly: bool = False) Parameters ---------- H : float - Depth at which the temperatures should be evaluated [m]. If None, then the current depth is taken. + Borehole length at which the temperatures should be evaluated [m]. If None, then the current length is taken. hourly : bool True if the temperature evolution should be calculated on an hourly basis. @@ -1798,8 +1783,8 @@ def gfunction(self, time_value: ArrayLike, H: float = None) -> np.ndarray: time_value : list, float, np.ndarray Time value(s) in seconds at which the gfunctions should be calculated H : float - Depth [m] at which the gfunctions should be calculated. - If no depth is given, the current depth is taken. + Borehole length [m] at which the gfunctions should be calculated. + If no length is given, the current borehole length is taken. Returns ------- @@ -1822,10 +1807,10 @@ def jit_gfunction_calculation() -> np.ndarray: gvalues : np.ndarray 1D array with the g-values for the requested time intervals """ - # set the correct depth of the borefield + # set the correct borehole length if not H is None: - # only update if H is provided, otherwise the depths of the borefield itself will be used - self._update_borefield_depth(H=H) + # only update if H is provided, otherwise the borehole length of the borefield itself will be used + self.H = H return self.gfunction_calculation_object.calculate( time_value, self.borefield, self.ground_data.alpha(self.depth, self.D), interpolate=self._calculation_setup.interpolate_gfunctions @@ -1846,7 +1831,7 @@ def jit_gfunction_calculation() -> np.ndarray: ## 3 calculate g-function jit return jit_gfunction_calculation() - def create_custom_dataset(self, time_array: ArrayLike = None, depth_array: ArrayLike = None, + def create_custom_dataset(self, time_array: ArrayLike = None, borehole_length_array: ArrayLike = None, options: dict = {}) -> None: """ This function makes a datafile for a given custom borefield and sets it for the borefield object. @@ -1857,8 +1842,8 @@ def create_custom_dataset(self, time_array: ArrayLike = None, depth_array: Array ---------- time_array : list, np.array Time values (in seconds) used for the calculation of the datafile - depth_array : list, np.array - List or arrays of depths for which the datafile should be created + borehole_length_array : list, np.array + List or arrays of borehole lengths for which the datafile should be created options : dict Options for the g-function calculation (check pygfunction.gfunction.gFunction() for more information) @@ -1881,7 +1866,7 @@ def create_custom_dataset(self, time_array: ArrayLike = None, depth_array: Array except AttributeError: raise ValueError("No ground data is set for which the gfunctions should be calculated") - self.custom_gfunction = CustomGFunction(time_array, depth_array, options) + self.custom_gfunction = CustomGFunction(time_array, borehole_length_array, options) self.custom_gfunction.create_custom_dataset(self.borefield, self.ground_data.alpha) @property @@ -2040,7 +2025,8 @@ def __repr__(self): return f'Maximum average fluid temperature [°C]: {self.Tf_max}\n' \ f'Minimum average fluid temperature [°C]: {self.Tf_min}\n' \ f'Average buried depth [m]: {self.D}\n' \ - f'Average borehole depth [m]: {self.H}\n' \ + f'Average borehole length [m]: {self.H}\n' \ + f'Average borehole depth [m]: {self.depth}\n' \ f'Borehole diameter [mm]: {self.r_b * 2000:.0f}\n' \ f'Number of boreholes [-]: {self.number_of_boreholes}\n' \ f'{self.ground_data.__repr__()}\n' \ diff --git a/GHEtool/Examples/Fluid viscosity.py b/GHEtool/Examples/Fluid viscosity.py new file mode 100644 index 00000000..c3ddd818 --- /dev/null +++ b/GHEtool/Examples/Fluid viscosity.py @@ -0,0 +1,28 @@ +import pygfunction as gt +import matplotlib.pyplot as plt +import numpy as np +from GHEtool import * + +temperature_array = np.arange(-10, 20, 1) +results_array = np.zeros((2, len(temperature_array))) + +for idx, temp in enumerate(temperature_array): + results_array[0][idx] = gt.media.Fluid('MPG', 20, temp).kinematic_viscosity() + results_array[1][idx] = gt.media.Fluid('MPG', 30, temp).kinematic_viscosity() + fluid = FluidData(mfr=0.3) + fluid.import_fluid_from_pygfunction(gt.media.Fluid('MPG', 20, temp)) + borehole = Borehole(fluid, pipe_data=DoubleUTube(1.8, 0.013, 0.016, 0.4, 0.35, 0.65)) + results_array[0][idx] = borehole.Re + if temp < -7.2: + results_array[0][idx] = np.nan + fluid.import_fluid_from_pygfunction(gt.media.Fluid('MPG', 30, temp)) + borehole = Borehole(fluid, pipe_data=DoubleUTube(1.8, 0.013, 0.016, 0.4, 0.35, 0.65)) + results_array[1][idx] = borehole.Re +plt.figure() +plt.plot(temperature_array, results_array[0], label="MPG 20%") +plt.plot(temperature_array, results_array[1], label="MPG 30%") +plt.legend() +plt.xlabel('Temperature [°C]') +plt.ylabel('Reynolds number [-]') +plt.title('Reynolds number for different water-glycol mixtures') +plt.show() diff --git a/GHEtool/Examples/HF_14obs.kmz b/GHEtool/Examples/HF_14obs.kmz new file mode 100644 index 0000000000000000000000000000000000000000..9ee6d11d71ecbafe90a754706807f134db2fdf80 GIT binary patch literal 194263 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Ν#hf1vuj^5GfzX#Lc4|`N$xf}$dBaRusVAGay`Fa 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 z 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

{9 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 zot_im0gNO70000 0.1: + while abs(borehole_lengths[0] - borehole_lengths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -160,8 +160,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - depth_passive = borefield.size_L4() - depths.insert(0, depth_passive) + borehole_length_passive = borefield.size_L4() + borehole_lengths.insert(0, borehole_length_passive) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -170,7 +170,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ heating_ground = update_load_COP(temp_profile, COP, heating_building) ### ACTIVE COOLING - depths = [0.9, 0] + borehole_lengths = [0.9, 0] # set initial loads cooling_ground = cooling_building.copy() @@ -178,7 +178,7 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.set_max_avg_fluid_temperature(25) borefield.gfunction_calculation_object.store_previous_values = False - while abs(depths[0] - depths[1]) > 0.1: + while abs(borehole_lengths[0] - borehole_lengths[1]) > 0.1: # set loads load = HourlyGeothermalLoadMultiYear() load.hourly_extraction_load = heating_ground @@ -186,8 +186,8 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ borefield.load = load # size borefield - depth_active = borefield.size_L4() - depths.insert(0, depth_active) + borehole_length_active = borefield.size_L4() + borehole_lengths.insert(0, borehole_length_active) # get temperature profile temp_profile = borefield.results.peak_extraction @@ -204,24 +204,23 @@ def calculate_costs(borefield: Borefield, heating_building: np.ndarray, heating_ operational_costs_heating = [] investment_costs = [] total_costs = [] - depths = [] + borehole_lengths = [] - def f(depth: float) -> float: + def f(borehole_length: float) -> float: """ Optimisation function. Parameters ---------- - depth : float + borehole_length : float Depth of the borefield in meters Returns ------- total_cost : float """ - borefield._update_borefield_depth(depth) - borefield.H = depth - depths.append(depth) + borefield.H = borehole_length + borehole_lengths.append(borehole_length) # initialise heating_ground = heating_building.copy() @@ -239,7 +238,7 @@ def f(depth: float) -> float: borefield.load = load # get temperature profile - borefield.calculate_temperatures(depth, hourly=True) + borefield.calculate_temperatures(borehole_length, hourly=True) temp_profile = borefield.results.peak_extraction # set previous loads @@ -263,38 +262,43 @@ def f(depth: float) -> float: return investment + operational_cost # add boundaries to figure - MIN_BOUNDARY = depth_active - MAX_BOUNDARY = depth_passive + MIN_BOUNDARY = borehole_length_active + MAX_BOUNDARY = borehole_length_passive def objective(trial: optuna.Trial): - depth = trial.suggest_float('depth', MIN_BOUNDARY, MAX_BOUNDARY) - return f(depth) + borehole_length = trial.suggest_float('borehole_length', MIN_BOUNDARY, MAX_BOUNDARY) + return f(borehole_length) study = optuna.create_study() study.optimize(objective, n_trials=100) - depths_sorted = copy.deepcopy(depths) - depths_sorted.sort() - depths_old_new = {} - for idx, depth in enumerate(depths_sorted): - depths_old_new[idx] = depths.index(depth) + borehole_lengths_sorted = copy.deepcopy(borehole_lengths) + borehole_lengths_sorted.sort() + borehole_lengths_old_new = {} + for idx, borehole_length in enumerate(borehole_lengths_sorted): + borehole_lengths_old_new[idx] = borehole_lengths.index(borehole_length) # plot figures fig = plt.figure() ax1 = fig.add_subplot(111) - ax1.plot(depths_sorted, [total_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(borehole_lengths_sorted, + [total_costs[borehole_lengths_old_new[idx]] / 1000 for idx, _ in enumerate(borehole_lengths_sorted)], marker='o', label="TC") - ax1.plot(depths_sorted, [investment_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(borehole_lengths_sorted, + [investment_costs[borehole_lengths_old_new[idx]] / 1000 for idx, _ in enumerate(borehole_lengths_sorted)], marker='o', label="IC") - ax1.plot(depths_sorted, [operational_costs[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], + ax1.plot(borehole_lengths_sorted, + [operational_costs[borehole_lengths_old_new[idx]] / 1000 for idx, _ in enumerate(borehole_lengths_sorted)], marker='o', label="OC") - ax1.plot(depths_sorted, - [operational_costs_cooling[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', + ax1.plot(borehole_lengths_sorted, + [operational_costs_cooling[borehole_lengths_old_new[idx]] / 1000 for idx, _ in + enumerate(borehole_lengths_sorted)], marker='o', label="OCc") - ax1.plot(depths_sorted, - [operational_costs_heating[depths_old_new[idx]] / 1000 for idx, _ in enumerate(depths_sorted)], marker='o', + ax1.plot(borehole_lengths_sorted, + [operational_costs_heating[borehole_lengths_old_new[idx]] / 1000 for idx, _ in + enumerate(borehole_lengths_sorted)], marker='o', label="OCh") - ax1.set_xlabel(r'Depth (m)', fontsize=14) + ax1.set_xlabel(r'Borehole length (m)', fontsize=14) ax1.set_ylabel(r'Costs ($k€$)', fontsize=14) ax1.legend(loc='lower left', ncol=3) ax1.tick_params(labelsize=14) diff --git a/GHEtool/Examples/auditorium.csv b/GHEtool/Examples/auditorium.csv new file mode 100644 index 00000000..144438b9 --- /dev/null +++ b/GHEtool/Examples/auditorium.csv @@ -0,0 +1,8761 @@ +Cooling;Heating +0;9.241 +0;10.305 +0;11.171 +0;11.68 +0;11.907 +0;11.998 +0;11.893 +0;11.741 +0;31.481 +0;19.841 +0;21.697 +0;26.542 +0;20.843 +0;18.256 +0;17.67 +0;21.368 +0;20.542 +0;20 +0;0.787 +0;6.474 +0;8.876 +0;9.36 +0;9.497 +0;9.617 +0;9.816 +0;9.931 +0;9.962 +0;9.937 +0;9.752 +0;9.485 +0;9.255 +0;9.14 +0;29.885 +0;17.295 +0;14.762 +0;14.548 +0;12.946 +0;13.337 +0;11.763 +0;13.569 +0;13.853 +0;16.148 +0;0 +0;2.841 +0;5.185 +0;6.1 +0;6.433 +0;6.784 +0;7.183 +0;7.439 +0;7.593 +0;7.673 +0;7.805 +0;8.043 +0;8.148 +0;8.298 +0;8.381 +0;8.24 +0;7.901 +0;7.57 +0;7.297 +0;7.827 +0;8.956 +0;9.713 +0;10.041 +0;10.132 +0;10.179 +0;10.267 +0;10.398 +0;10.702 +0;10.854 +0;10.769 +0;10.8 +0;10.914 +0;10.914 +0;10.878 +0;10.959 +0;10.87 +0;10.731 +0;10.815 +0;10.932 +0;10.583 +0;9.466 +0;7.396 +0;5.6 +0;5.015 +0;5.592 +0;6.938 +0;9.318 +0;10.511 +0;10.611 +0;10.552 +0;10.528 +0;10.511 +0;10.517 +0;10.68 +0;10.902 +0;11.023 +0;11.234 +0;11.273 +0;11.175 +0;11.149 +0;11.157 +0;11.208 +0;31.261 +0;19.199 +0;18.496 +0;21.751 +0;20.188 +0;18.561 +0;17.474 +0;20 +0;19.557 +0;19.73 +0;0.529 +0;6.012 +0;8.571 +0;9.194 +0;9.499 +0;9.739 +0;10.107 +0;10.386 +0;10.604 +0;10.669 +0;10.566 +0;10.531 +0;10.618 +0;10.658 +0;10.65 +0;10.484 +0;9.923 +0;9.991 +0;10.14 +0;9.957 +0;9.952 +0;9.947 +0;10.384 +0;10.76 +0;10.782 +0;10.878 +0;10.981 +0;11.173 +0;11.407 +0;11.503 +0;11.633 +0;11.854 +0;12.072 +0;12.12 +0;12.083 +0;12.276 +0;12.517 +0;12.799 +0;12.988 +0;12.062 +0;10.348 +0;9.71 +0;9.665 +0;9.982 +0;10.385 +0;10.807 +0;11.664 +0;12.184 +0;12.256 +0;12.366 +0;12.462 +0;12.554 +0;12.557 +0;12.576 +0;12.643 +0;12.678 +0;12.664 +0;12.641 +0;12.594 +0;12.643 +0;12.778 +0;12.955 +0;32.01 +0;21.432 +0;21.226 +0;25.449 +0;22.269 +0;20.011 +0;19.569 +0;22.296 +0;22.197 +0;21.686 +0;1.35 +0;8.292 +0;10.659 +0;11.177 +0;11.48 +0;11.713 +0;11.87 +0;12.008 +0;12.138 +0;12.259 +0;12.356 +0;12.421 +0;12.478 +0;12.508 +0;31.792 +0;21.813 +0;22.441 +0;26.685 +0;21.419 +0;18.749 +0;18.621 +0;22.283 +0;22.045 +0;21.429 +0;1.254 +0;8.161 +0;10.756 +0;11.369 +0;11.721 +0;12.015 +0;12.234 +0;12.273 +0;12.275 +0;12.255 +0;12.156 +0;11.954 +0;11.807 +0;11.753 +0;11.634 +0;11.31 +0;10.805 +0;10.518 +0;10.349 +0;10.265 +0;10.178 +0;10.233 +0;10.327 +0;10.325 +0;10.186 +0;9.908 +0;9.51 +0;9.186 +0;9.002 +0;8.985 +0;9.233 +0;9.505 +0;9.608 +0;9.65 +0;9.759 +0;9.763 +0;9.718 +0;9.975 +0;10.163 +0;9.707 +0;8.873 +0;8.281 +0;7.834 +0;6.602 +0;5.555 +0;6.059 +0;8.025 +0;9.319 +0;9.635 +0;9.6 +0;10.033 +0;10.403 +0;10.237 +0;10.39 +0;10.615 +0;10.772 +0;10.876 +0;10.925 +0;10.951 +0;11.016 +0;11.167 +0;11.354 +0;31.569 +0;18.716 +0;14.515 +0;15.062 +0;15.324 +0;13.588 +0;12.443 +0;14.772 +0;15.731 +0;17.995 +0;0.065 +0;4.694 +0;7.515 +0;8.131 +0;8.455 +0;8.722 +0;8.869 +0;8.979 +0;9.17 +0;9.356 +0;9.278 +0;8.889 +0;8.414 +0;8.164 +0;8.065 +0;7.899 +0;7.628 +0;7.238 +0;6.834 +0;6.674 +0;6.694 +0;6.865 +0;7.304 +0;7.645 +0;7.65 +0;7.861 +0;8.123 +0;8.101 +0;8.077 +0;7.988 +0;7.769 +0;7.546 +0;7.457 +0;7.621 +0;7.92 +0;8.104 +0;8.334 +0;8.584 +0;8.661 +0;8.499 +0;7.95 +0;7.28 +0;6.864 +0;6.215 +0;6.607 +0;7.298 +0;8.245 +0;9.002 +0;9.315 +0;9.503 +0;9.396 +0;9.354 +0;9.331 +0;9.372 +0;9.394 +0;9.319 +0;9.277 +0;9.317 +0;9.504 +0;9.684 +0;9.54 +0;9.385 +0;30.375 +0;17.393 +0;14.37 +0;14.658 +0;15.956 +0;15.523 +0;12.856 +0;15.001 +0;15.808 +0;18.036 +0;0.082 +0;4.785 +0;7.665 +0;8.356 +0;8.659 +0;8.794 +0;8.922 +0;9.176 +0;9.305 +0;9.314 +0;9.426 +0;9.601 +0;9.761 +0;9.959 +0;30.855 +0;18.393 +0;15.347 +0;16.687 +0;14.271 +0;14.105 +0;12.906 +0;16.183 +0;16.423 +0;17.935 +0;0.106 +0;5.326 +0;8.299 +0;9.033 +0;9.338 +0;9.451 +0;9.561 +0;9.78 +0;10.086 +0;10.315 +0;10.404 +0;10.459 +0;10.464 +0;10.452 +0;10.397 +0;9.728 +0;8.043 +0;8.04 +0;8.511 +0;8.697 +0;8.833 +0;9.042 +0;9.599 +0;10.007 +0;10.169 +0;10.447 +0;10.812 +0;11.021 +0;11.146 +0;11.088 +0;11.007 +0;11.015 +0;10.915 +0;10.812 +0;10.78 +0;10.731 +0;10.707 +0;10.718 +0;10.512 +0;10.052 +0;9.369 +0;8.719 +0;8.379 +0;7.999 +0;7.653 +0;7.46 +0;7.529 +0;7.718 +0;7.694 +0;7.656 +0;7.76 +0;7.834 +0;7.828 +0;7.898 +0;7.958 +0;7.913 +0;7.851 +0;7.853 +0;7.879 +0;7.868 +0;7.885 +0;8.004 +0;29.659 +0;15.895 +0;10.979 +0;9.288 +0;13.238 +0;14.261 +0;9.939 +0;10.23 +0;11.663 +0;15.352 +0;0.015 +0;2.119 +0;5.633 +0;6.988 +0;7.348 +0;7.55 +0;7.801 +0;8.106 +0;8.38 +0;8.52 +0;8.675 +0;8.878 +0;9.066 +0;9.281 +0;9.355 +0;8.145 +0;5.226 +0;3.051 +0;2.143 +0;1.864 +0;2.31 +0;3.623 +0;5.463 +0;7.21 +0;7.7 +0;7.916 +0;7.965 +0;7.981 +0;8.16 +0;8.321 +0;8.476 +0;8.71 +0;8.939 +0;9.121 +0;9.2 +0;9.052 +0;8.863 +0;8.803 +0;8.837 +0;8.535 +0;7.664 +0;6.544 +0;6.965 +0;7.388 +0;7.425 +0;7.466 +0;7.916 +0;8.152 +0;8.108 +0;8.153 +0;8.257 +0;8.397 +0;8.533 +0;8.629 +0;8.689 +0;8.884 +0;9.054 +0;9.192 +0;9.328 +0;9.374 +0;9.574 +0;9.947 +0;30.873 +0;17.359 +0;13.852 +0;14.683 +0;12.152 +0;13.716 +0;12.129 +0;13.542 +0;14.581 +0;17.171 +0;0.025 +0;3.621 +0;6.454 +0;6.945 +0;7.003 +0;6.971 +0;6.881 +0;6.835 +0;6.854 +0;6.922 +0;7.062 +0;7.262 +0;7.522 +0;7.882 +0;29.555 +0;16.526 +0;13.322 +0;12.789 +0;12.457 +0;10.941 +0;9.247 +0;11.495 +0;12.672 +0;15.514 +0;0 +0;2.618 +0;5.32 +0;6.615 +0;7.193 +0;7.427 +0;7.671 +0;8.037 +0;8.307 +0;8.395 +0;8.453 +0;8.811 +0;9.145 +0;9.432 +0;9.546 +0;8.667 +0;6.646 +0;6.289 +0;5.65 +0;5.385 +0;6.622 +0;7.849 +0;8.87 +0;9.833 +0;10.318 +0;10.402 +0;10.474 +0;10.51 +0;10.404 +0;10.209 +0;10.002 +0;10.268 +0;10.535 +0;10.469 +0;10.651 +0;10.694 +0;10.589 +0;10.662 +0;10.611 +0;10.481 +0;9.149 +0;6.345 +0;5.942 +0;5.201 +0;5.202 +0;7.09 +0;8.818 +0;9.877 +0;10.167 +0;10.368 +0;10.735 +0;10.863 +0;10.966 +0;11.113 +0;11.24 +0;11.283 +0;11.355 +0;11.701 +0;11.669 +0;11.617 +0;11.841 +0;12.046 +0;31.767 +0;18.985 +0;17.386 +0;19.57 +0;13.031 +0;11.913 +0;12.762 +0;16.301 +0;17.069 +0;19.344 +0;0.658 +0;6.631 +0;9.668 +0;10.63 +0;11.161 +0;11.524 +0;11.892 +0;12.023 +0;11.958 +0;11.96 +0;12.012 +0;12.156 +0;12.233 +0;12.269 +0;12.284 +0;11.636 +0;10.382 +0;8.784 +0;8.028 +0;8.331 +0;9.54 +0;10.444 +0;11.271 +0;11.954 +0;12.067 +0;12.029 +0;11.91 +0;11.854 +0;11.818 +0;11.83 +0;11.855 +0;11.723 +0;11.588 +0;11.522 +0;11.474 +0;11.483 +0;11.536 +0;11.552 +0;11.481 +0;10.603 +0;7.471 +0;4.913 +0;4.044 +0;3.777 +0;4.218 +0;5.541 +0;8.071 +0;10.091 +0;10.575 +0;10.72 +0;10.912 +0;11.065 +0;10.976 +0;10.873 +0;10.891 +0;11.155 +0;11.533 +0;11.763 +0;12.002 +0;12.186 +0;12.301 +0;12.409 +0;31.859 +0;20.013 +0;19.135 +0;21.778 +0;19.718 +0;18.203 +0;16.204 +0;17.894 +0;18.216 +0;19.392 +0;0.445 +0;5.916 +0;8.311 +0;9.064 +0;9.552 +0;9.832 +0;10.117 +0;10.608 +0;11.022 +0;11.238 +0;11.444 +0;11.597 +0;11.688 +0;11.934 +0;31.658 +0;20.476 +0;19.095 +0;22.001 +0;18.903 +0;16.958 +0;15.563 +0;18.889 +0;19.036 +0;19.888 +0;0.812 +0;6.985 +0;9.54 +0;10.169 +0;10.531 +0;10.852 +0;11.014 +0;10.957 +0;10.958 +0;11.124 +0;11.218 +0;11.292 +0;11.408 +0;11.484 +0;11.336 +0;10.367 +0;8.597 +0;7.521 +0;7.345 +0;7.945 +0;8.916 +0;9.682 +0;10.256 +0;10.855 +0;11.273 +0;11.464 +0;11.487 +0;11.51 +0;11.516 +0;11.507 +0;11.48 +0;11.361 +0;11.309 +0;11.226 +0;11.109 +0;11.024 +0;10.943 +0;10.872 +0;10.72 +0;10.346 +0;9.632 +0;8.932 +0;8.594 +0;8.504 +0;8.281 +0;8.275 +0;8.988 +0;9.629 +0;9.773 +0;9.808 +0;9.859 +0;9.917 +0;9.976 +0;10.077 +0;10.047 +0;10.015 +0;10.03 +0;9.968 +0;9.915 +0;9.913 +0;9.988 +0;10.042 +0;30.893 +0;17.738 +0;14.124 +0;14.041 +0;16.214 +0;15.127 +0;11.898 +0;13.363 +0;14.57 +0;17.441 +0;0.032 +0;4.706 +0;8.008 +0;8.613 +0;8.835 +0;9.048 +0;9.123 +0;9.144 +0;9.25 +0;9.314 +0;9.443 +0;9.678 +0;9.873 +0;9.934 +0;9.768 +0;9.068 +0;8.077 +0;7.768 +0;7.51 +0;7.247 +0;7.154 +0;7.228 +0;7.637 +0;8.081 +0;8.231 +0;8.32 +0;8.335 +0;8.324 +0;8.329 +0;8.321 +0;8.334 +0;8.346 +0;8.337 +0;8.362 +0;8.438 +0;8.47 +0;8.458 +0;8.453 +0;8.37 +0;8.031 +0;7.461 +0;7.022 +0;6.779 +0;6.09 +0;5.602 +0;5.52 +0;6.131 +0;6.937 +0;7.213 +0;7.305 +0;7.355 +0;7.298 +0;7.377 +0;7.617 +0;7.879 +0;8.147 +0;8.351 +0;8.529 +0;8.665 +0;8.773 +0;8.885 +0;8.968 +0;30.143 +0;16.382 +0;13.109 +0;14.76 +0;15.655 +0;15.345 +0;14.056 +0;17.445 +0;17.504 +0;18.435 +0;0.069 +0;4.436 +0;7.235 +0;8.006 +0;8.241 +0;8.342 +0;9.089 +0;9.519 +0;9.475 +0;9.565 +0;9.31 +0;9.412 +0;10.02 +0;10.201 +0;30.512 +0;16.8 +0;13.395 +0;12.375 +0;10.953 +0;13.837 +0;11.215 +0;11.882 +0;13.17 +0;16.042 +0;0 +0;3.703 +0;6.505 +0;7.272 +0;7.523 +0;7.525 +0;7.588 +0;7.666 +0;8.107 +0;8.571 +0;8.819 +0;9.193 +0;9.719 +0;10.174 +0;10.148 +0;9.989 +0;9.527 +0;9.282 +0;8.889 +0;8.061 +0;7.925 +0;9.023 +0;10.05 +0;10.662 +0;11.1 +0;11.343 +0;11.405 +0;11.417 +0;11.413 +0;11.443 +0;11.448 +0;11.406 +0;11.314 +0;11.286 +0;11.334 +0;11.423 +0;11.566 +0;11.623 +0;11.625 +0;10.44 +0;7.243 +0;4.78 +0;3.869 +0;3.36 +0;4.653 +0;6.226 +0;8.674 +0;10.176 +0;10.779 +0;11.33 +0;11.592 +0;11.499 +0;11.606 +0;11.65 +0;11.899 +0;12.09 +0;12.149 +0;12.067 +0;12.034 +0;12.045 +0;12.417 +0;12.882 +0;31.863 +0;20.077 +0;20.502 +0;24.189 +0;19.418 +0;16.88 +0;15.042 +0;17.303 +0;16.836 +0;19.285 +0;0.836 +0;7.201 +0;9.766 +0;10.351 +0;10.745 +0;10.863 +0;10.993 +0;11.221 +0;11.619 +0;11.954 +0;12.092 +0;12.515 +0;12.738 +0;12.593 +0;12.452 +0;11.698 +0;10.994 +0;9.279 +0;6.577 +0;5.353 +0;5.25 +0;6.011 +0;8.338 +0;10.225 +0;11.286 +0;12.094 +0;12.411 +0;12.173 +0;12.335 +0;12.885 +0;13.165 +0;13.247 +0;13.256 +0;13.291 +0;13.069 +0;12.778 +0;12.742 +0;12.864 +0;12.357 +0;9.84 +0;6.122 +0;4.338 +0;4.51 +0;4.418 +0;5.034 +0;6.139 +0;8.225 +0;10.856 +0;11.812 +0;11.947 +0;12.379 +0;12.887 +0;13.222 +0;13.352 +0;13.787 +0;14.021 +0;14.121 +0;14.348 +0;14.369 +0;14.419 +0;14.656 +0;15.363 +0;32.548 +0;21.62 +0;19.25 +0;26.528 +0;13.12 +0;10.608 +0.205;12.969 +0;17.01 +0;16.461 +0;18.914 +0;1.37 +0;8.61 +0;11.468 +0;12.266 +0;12.914 +0;13.367 +0;13.642 +0;14.015 +0;14.308 +0;14.628 +0;15.028 +0;15.145 +0;15.109 +0;15.354 +0;32.211 +0;21.103 +0;19.481 +0;27.31 +0;12.472 +0.057;9.752 +0.157;13.305 +0;18.003 +0;16.831 +0;18.731 +0;1.218 +0;8.311 +0;11.214 +0;11.969 +0;12.438 +0;12.829 +0;13.267 +0;13.427 +0;13.601 +0;13.862 +0;14.239 +0;14.442 +0;14.569 +0;14.719 +0;13.955 +0;10.286 +0;5.273 +0;2.775 +0;1.196 +0;1.009 +0;1.858 +0;3.671 +0;7.585 +0;10.296 +0;11.499 +0;11.677 +0;11.679 +0;11.681 +0;12.022 +0;12.455 +0;12.533 +0;12.525 +0;12.486 +0;12.432 +0;12.41 +0;12.384 +0;12.395 +0;12.489 +0;12.42 +0;11.953 +0;11.294 +0;10.803 +0;10.604 +0;10.437 +0;10.449 +0;10.523 +0;11.084 +0;11.708 +0;11.944 +0;12.072 +0;12.153 +0;12.208 +0;12.223 +0;12.268 +0;12.197 +0;11.967 +0;11.853 +0;11.842 +0;11.822 +0;11.739 +0;11.575 +0;11.439 +0;31.489 +0;18.542 +0;12.683 +0;12.479 +0;10.904 +0;10.984 +0;8.953 +0;10.815 +0;11.973 +0;16.165 +0;0.07 +0;5.124 +0;7.932 +0;8.509 +0;8.762 +0;9.042 +0;9.275 +0;9.416 +0;9.602 +0;9.713 +0;9.798 +0;10.623 +0;11.685 +0;11.92 +0;11.685 +0;10.819 +0;9.773 +0;9.405 +0;9.108 +0;7.41 +0;6.018 +0;7.069 +0;9.489 +0;10.736 +0;11.166 +0;11.175 +0;11.056 +0;11.025 +0;11.028 +0;11.031 +0;11.162 +0;11.257 +0;11.314 +0;11.29 +0;11.239 +0;11.206 +0;11.208 +0;11.302 +0;11.042 +0;10.062 +0;8.779 +0;8.282 +0;7.9 +0;7.563 +0;7.668 +0;7.936 +0;8.532 +0;9.116 +0;9.233 +0;9.173 +0;9.095 +0;9.057 +0;9.071 +0;9.123 +0;9.196 +0;9.274 +0;9.271 +0;9.212 +0;9.192 +0;9.175 +0;9.114 +0;9.029 +0;30.185 +0;16.435 +0;11.353 +0;9.638 +0;13.416 +0;14.27 +0;9.651 +0;9.684 +0;11.435 +0;15.538 +0;0.013 +0;1.91 +0;5.045 +0;5.942 +0;6.26 +0;6.464 +0;6.669 +0;6.936 +0;7.293 +0;7.669 +0;7.893 +0;8.114 +0;8.412 +0;8.647 +0;29.912 +0;15.269 +0;9.472 +0;10.353 +0;7.085 +0;8.575 +0;7.27 +0;8.703 +0;10.422 +0;13.929 +0;0 +0;2.9 +0;6.024 +0;7.151 +0;7.518 +0;7.531 +0;7.591 +0;7.83 +0;7.952 +0;8.01 +0;8.083 +0;8.201 +0;8.287 +0;8.242 +0;7.876 +0;7.271 +0;6.595 +0;6.072 +0;5.673 +0;5.376 +0;4.527 +0;4.957 +0;5.932 +0;6.744 +0;7.365 +0;7.801 +0;7.647 +0;8.021 +0;8.546 +0;8.824 +0;9.235 +0;9.114 +0;9.131 +0;9.279 +0;9.337 +0;9.52 +0;9.95 +0;10.209 +0;9.947 +0;8.929 +0;7.541 +0;6.088 +0;4.627 +0;3.864 +0;3.742 +0;4.492 +0;5.567 +0;7.898 +0;9.11 +0;9.822 +0;10.391 +0;10.337 +0;10.52 +0;10.278 +0;9.89 +0;9.845 +0;9.968 +0;10.079 +0;10.295 +0;10.451 +0;10.457 +0;10.365 +0;30.814 +0;17.939 +0;16.304 +0;18.435 +0;16.305 +0;14.074 +0;12.157 +0;14.099 +0;13.623 +0;16.732 +0;0.039 +0;4.74 +0;7.696 +0;8.236 +0;8.589 +0;9.003 +0;9.462 +0;9.636 +0;9.869 +0;10.08 +0;10.185 +0;10.36 +0;10.443 +0;10.518 +0;10.364 +0;9.775 +0;8.904 +0;8.305 +0;8.012 +0;7.773 +0;7.781 +0;5.99 +0;5.35 +0;7.612 +0;9.177 +0;9.64 +0;9.832 +0;10.13 +0;10.424 +0;10.814 +0;11.102 +0;11.281 +0;11.503 +0;11.57 +0;11.727 +0;11.951 +0;12.024 +0;12.076 +0;11.197 +0;8.973 +0;6.101 +0;3.086 +0;1.359 +0;1.751 +0;3.935 +0;5.469 +0;6.854 +0;8.074 +0;8.792 +0;9.159 +0;9.412 +0;9.448 +0;9.43 +0;9.515 +0;9.612 +0;9.682 +0;9.694 +0;9.679 +0;9.695 +0;9.719 +0;9.759 +0;9.841 +0;30.528 +0;16.828 +0;12.871 +0;11.905 +0;13.509 +0;14.162 +0;9.733 +0;9.67 +0;10.19 +0;14.348 +0;0.018 +0;2.488 +0;5.845 +0;7.313 +0;8.078 +0;8.397 +0;8.601 +0;8.836 +0;9.099 +0;9.252 +0;9.333 +0;9.309 +0;9.26 +0;9.105 +0;29.836 +0;16.023 +0;12.139 +0;11.194 +0;10.931 +0;12.688 +0;10.036 +0;11.61 +0;12.754 +0;15.704 +0;0 +0;2.4 +0;5.203 +0;6.334 +0;6.913 +0;7.359 +0;7.655 +0;7.919 +0;8.092 +0;8.281 +0;8.417 +0;8.534 +0;8.619 +0;8.47 +0;7.481 +0;5.157 +0;3.117 +0;1.361 +0;0.27 +0;0.147 +0;0.969 +0;2.407 +0;3.155 +0;4.863 +0;6.223 +0;6.607 +0;6.764 +0;6.918 +0;7.207 +0;7.648 +0;8.213 +0;8.783 +0;9.268 +0;9.632 +0;9.843 +0;9.981 +0;9.999 +0;9.93 +0;9.213 +0;6.837 +0;5.224 +0;5.382 +0;5.417 +0;6.019 +0;6.118 +0;6.972 +0;7.627 +0;8.279 +0;8.729 +0;8.999 +0;9.187 +0;9.394 +0;9.545 +0;9.689 +0;9.764 +0;9.747 +0;9.777 +0;9.799 +0;9.816 +0;10.003 +0;10.361 +0;10.464 +0;30.479 +0;15.832 +0;14.889 +0;16.697 +0;12.993 +0;10.922 +0;8.344 +0;9.837 +0;10.649 +0;13.845 +0;0.027 +0;3.736 +0;7.043 +0;8.204 +0;8.643 +0;8.927 +0;9.41 +0;9.777 +0;10.087 +0;10.296 +0;10.448 +0;10.639 +0;10.672 +0;10.688 +0;9.762 +0;6.96 +0;3.165 +0;1.555 +0;0.634 +0;0.485 +0;0.377 +0;0.316 +0;1.13 +0;3.084 +0;5.573 +0;6.964 +0;7.601 +0;8.015 +0;8.307 +0;8.52 +0;8.736 +0;9.045 +0;9.482 +0;9.858 +0;10.259 +0;10.577 +0;10.56 +0;10.583 +0;9.741 +0;7.123 +0;4.302 +0;2.442 +0;1.587 +0;0.819 +0;0.646 +0;1.949 +0;3.971 +0;5.929 +0;6.937 +0;7.537 +0;8.082 +0;8.593 +0;8.974 +0;9.112 +0;9.072 +0;9.078 +0;9.504 +0;10.156 +0;10.66 +0;10.926 +0;10.928 +0;10.845 +0;30.7 +0;14.681 +0;9.93 +0;13.55 +0;6.476 +0;5.875 +0;5.729 +0;6.226 +0;7.875 +0;10.465 +0;0.017 +0;1.555 +0;4.355 +0;5.872 +0;6.483 +0;6.877 +0;7.143 +0;7.296 +0;7.46 +0;7.569 +0;7.584 +0;7.591 +0;7.616 +0;7.659 +0;29.109 +0;14.945 +0;12.3 +0;12.072 +0;12.08 +0;12.512 +0;9.705 +0;10.631 +0;11.412 +0;14.074 +0;0 +0;1.283 +0;3.65 +0;4.91 +0;5.372 +0;5.767 +0;6.093 +0;6.261 +0;6.367 +0;6.515 +0;6.619 +0;6.665 +0;6.793 +0;6.829 +0;6.483 +0;5.894 +0;5.173 +0;4.548 +0;4.063 +0;3.957 +0;4.056 +0;4.462 +0;5.09 +0;5.85 +0;6.337 +0;6.574 +0;6.765 +0;6.889 +0;6.962 +0;7.064 +0;7.125 +0;7.087 +0;7.173 +0;7.334 +0;7.553 +0;7.962 +0;8.349 +0;8.337 +0;6.911 +0;3.52 +0;1.422 +0;0.419 +0;0.205 +0;0.191 +0;0.19 +0;0.121 +0;0.246 +0;1.785 +0;4.147 +0;6.135 +0;6.793 +0;7.103 +0;7.357 +0;7.688 +0;7.917 +0;7.814 +0;7.962 +0;8.017 +0;7.733 +0;7.956 +0;8.425 +0;8.62 +0;29.742 +0;15.72 +0;14.638 +0;16.708 +0;14.584 +0;13.606 +0;10.773 +0;11.124 +0;11.592 +0;14.274 +0;0.022 +0;1.82 +0;4.593 +0;6.094 +0;6.584 +0;6.873 +0;7.119 +0;7.332 +0;7.52 +0;7.678 +0;7.774 +0;7.844 +0;7.909 +0;7.874 +0;7.239 +0;6.081 +0;5.03 +0;3.929 +0;2.946 +0;2.336 +0;0.612 +0;0.332 +0;2.134 +0;3.793 +0;5.245 +0;5.829 +0;6.194 +0;6.716 +0;7.105 +0;7.27 +0;7.395 +0;7.508 +0;7.651 +0;7.798 +0;7.871 +0;7.92 +0;7.977 +0;7.955 +0;7.351 +0;6.19 +0;5.637 +0;5.142 +0;4.717 +0;4.344 +0;4.333 +0;4.574 +0;4.231 +0;5.387 +0;6.563 +0;7.233 +0;7.706 +0;8.227 +0;8.734 +0;9.21 +0;9.562 +0;9.897 +0;10.216 +0;10.395 +0;10.612 +0;10.733 +0;10.786 +0;10.599 +0;29.939 +0;13.148 +0;8.833 +0;12.346 +0;5.163 +0.029;4.367 +0.257;4.864 +0.01;5.781 +0;7.276 +0;9.097 +0;0.017 +0;1.21 +0;4.159 +0;5.982 +0;6.578 +0;7.057 +0;7.657 +0;8.194 +0;8.465 +0;8.801 +0;9.132 +0;9.299 +0;9.386 +0;9.139 +0;28.634 +0;12.741 +0;8.4 +0;8.987 +0;3.74 +0;3.15 +0;1.511 +0;0.933 +0;3.061 +0;7.145 +0;0 +0;0 +0;1.237 +0;2.326 +0;3.481 +0;4.102 +0;4.308 +0;4.463 +0;4.713 +0;4.619 +0;4.551 +0;4.603 +0;4.636 +0;4.644 +0;4.101 +0;2.898 +0;1.056 +0;0.468 +0;0.27 +0;0.085 +0;0.14 +0;1.205 +0;2.203 +0;3.435 +0;4.338 +0;4.93 +0;5.296 +0;5.44 +0;5.727 +0;6.078 +0;6.191 +0;6.285 +0;6.396 +0;6.49 +0;6.538 +0;6.632 +0;6.753 +0;6.73 +0;6.305 +0;5.099 +0;3.664 +0;2.714 +0;3.151 +0;2.434 +0;1.479 +0;2.067 +0;2.872 +0;4.107 +0;5.324 +0;6.343 +0;7.178 +0;7.732 +0;8.215 +0;8.418 +0;8.676 +0;8.885 +0;8.811 +0;9.039 +0;9.469 +0;9.706 +0;9.808 +0;9.514 +0;28.879 +0;10.768 +0;7.552 +0;10.972 +0.016;3.531 +0.557;2.713 +0.548;2.997 +0.112;4.167 +0;5.247 +0;7.095 +0;0.016 +0;0.486 +0;2.958 +0;4.542 +0;5.371 +0;5.716 +0;5.767 +0;5.671 +0;5.556 +0;5.547 +0;5.649 +0;5.813 +0;5.999 +0;6.029 +0;5.514 +0;4.718 +0;3.986 +0;3.332 +0;2.752 +0;2.385 +0;2.198 +0;2.423 +0;3.207 +0;4.002 +0;4.347 +0;4.49 +0;4.658 +0;4.88 +0;5.096 +0;5.196 +0;5.247 +0;5.311 +0;5.257 +0;5.27 +0;5.311 +0;5.314 +0;5.351 +0;5.349 +0;4.988 +0;4.257 +0;3.48 +0;2.806 +0;2.342 +0;2.145 +0;2.294 +0;2.696 +0;3.571 +0;4.34 +0;4.664 +0;4.972 +0;5.106 +0;5.149 +0;5.239 +0;5.335 +0;5.241 +0;5.112 +0;5.129 +0;5.223 +0;5.366 +0;5.547 +0;5.657 +0;5.606 +0;27.709 +0;12.619 +0;8.338 +0;7.911 +0;8.929 +0;10.368 +0;7.102 +0;7.189 +0;8.981 +0;11.745 +0;0.014 +0;0.221 +0;2.354 +0;3.507 +0;4.286 +0;4.773 +0;5.16 +0;5.362 +0;5.361 +0;5.333 +0;5.477 +0;5.683 +0;5.807 +0;5.635 +0;27.529 +0;12.627 +0;9.225 +0;9.895 +0;9.356 +0;10.196 +0;7.663 +0;8.122 +0;9.347 +0;11.386 +0;0 +0;0.143 +0;2.033 +0;2.806 +0;3.69 +0;4.117 +0;4.343 +0;4.569 +0;4.921 +0;5.184 +0;5.494 +0;5.971 +0;6.229 +0;6.062 +0;5.326 +0;4.769 +0;4.068 +0;3.252 +0;1.791 +0;1.204 +0;1.29 +0;1.666 +0;2.604 +0;3.813 +0;4.815 +0;5.454 +0;6.046 +0;6.382 +0;6.746 +0;7.572 +0;7.914 +0;7.868 +0;7.932 +0;8.08 +0;8.061 +0;8.019 +0;7.912 +0;7.587 +0;6.003 +0;3.654 +0;1.575 +0;0.829 +0;0.389 +0;0.318 +0;0.332 +0;1.23 +0;2.837 +0;4.269 +0;5.421 +0;5.894 +0;6.148 +0;6.394 +0;6.844 +0;7.42 +0;7.672 +0;7.696 +0;7.538 +0;7.447 +0;7.723 +0;8.039 +0;8.192 +0;7.968 +0;28.646 +0;14.155 +0;11.861 +0;13.103 +0;12.451 +0;12.457 +0;9.905 +0;10.073 +0;10.245 +0;12.548 +0;0.015 +0;0.484 +0;2.528 +0;3.711 +0;4.42 +0;4.962 +0;5.249 +0;5.45 +0;5.742 +0;5.932 +0;5.908 +0;6.01 +0;6.073 +0;5.872 +0;5.425 +0;4.562 +0;3.656 +0;2.75 +0;2.253 +0;2.818 +0;4.044 +0;4.769 +0;5.416 +0;6.392 +0;7.211 +0;7.506 +0;7.648 +0;7.787 +0;7.964 +0;8.139 +0;8.405 +0;8.751 +0;9.026 +0;9.159 +0;9.368 +0;9.5 +0;9.489 +0;8.923 +0;6.803 +0;3.488 +0;1.777 +0;1.01 +0;0.595 +0;0.549 +0;0.531 +0;0.818 +0;2.695 +0;5.062 +0;6.998 +0;7.966 +0;8.392 +0;8.743 +0;9.123 +0;9.081 +0;8.951 +0;9.178 +0;9.002 +0;8.749 +0;8.706 +0;8.551 +0;8.944 +0;8.876 +0;28.889 +0;12.956 +0;9.263 +0;12.435 +0;7.73 +0;8.652 +0;8.995 +0;11.852 +0;11.791 +0;13.187 +0;0.029 +0;3.173 +0;6.068 +0;7.076 +0;7.652 +0;8.241 +0;8.652 +0;8.854 +0;8.899 +0;8.914 +0;9.046 +0;9.161 +0;9.174 +0;8.617 +0;28.957 +0;14.652 +0;12.573 +0;14.283 +0;11.929 +0;12.166 +0;10.206 +0;11.776 +0;12.19 +0;14.322 +0;0 +0;2.28 +0;4.87 +0;6.046 +0;6.516 +0;6.893 +0;7.242 +0;7.767 +0;8.297 +0;8.472 +0;8.578 +0;9.04 +0;9.258 +0;8.415 +0;6.276 +0;5.067 +0;2.548 +0;0.904 +0;0.125 +0;0.862 +0;1.644 +0;2.149 +0;3.187 +0;4.87 +0;6.639 +0;7.667 +0;8.238 +0;8.565 +0;8.836 +0;9.04 +0;9.184 +0;9.134 +0;9.232 +0;9.321 +0;9.282 +0;9.27 +0;9.198 +0;8.691 +0;7.625 +0;5.453 +0;2.831 +0;2.016 +0;1.558 +0;1.905 +0;1.094 +0;0.474 +0;2.228 +0;4.568 +0;6.223 +0;7.005 +0;7.315 +0;7.376 +0;7.466 +0;7.537 +0;7.579 +0;7.725 +0;8.071 +0;8.285 +0;8.249 +0;8.176 +0;8.032 +0;7.602 +0;28.733 +0;14.415 +0;11.797 +0;11.913 +0;8.054 +0;8.321 +0;6.769 +0;8.389 +0;10.157 +0;12.085 +0;0.019 +0;1.343 +0;4.071 +0;5.468 +0;5.993 +0;6.308 +0;6.481 +0;6.694 +0;6.915 +0;7.055 +0;7.202 +0;7.425 +0;7.468 +0;7.014 +0;5.972 +0;4.578 +0;3.229 +0;2.447 +0;2.005 +0;0.766 +0;0.267 +0;0.147 +0;0.503 +0;1.935 +0;4.485 +0;6.165 +0;6.656 +0;6.859 +0;6.927 +0;6.824 +0;6.744 +0;6.654 +0;6.377 +0;6.105 +0;5.939 +0;5.83 +0;5.764 +0;5.606 +0;4.892 +0;3.99 +0;2.701 +0;0.43 +0;0.09 +0;0.057 +0;0.046 +0;0.031 +0.002;0.027 +0.001;0.035 +0;0.046 +0;0.156 +0;1.474 +0;2.368 +0;3.129 +0;3.614 +0;3.93 +0;4.081 +0;4.328 +0;4.645 +0;4.947 +0;5.17 +0;5.323 +0;5.335 +0;27.046 +0;11.646 +0;6.83 +0;6.708 +0;3.21 +0;2.616 +0.444;1.987 +0.8;2.404 +0.198;2.263 +0;4.231 +0;0.006 +0;0 +0;0.003 +0;1.204 +0;1.686 +0;2.286 +0;2.808 +0;3.045 +0;3.316 +0;3.643 +0;3.993 +0;4.324 +0;4.409 +0;4.33 +0;25.724 +0;8.662 +0;2.129 +0;0.513 +0;0.389 +0;0.612 +0.288;0.223 +1.123;0.199 +0.489;0.193 +0.049;1.33 +0;0 +0;0 +0;0 +0;0 +0;0.008 +0;0.025 +0;0.033 +0;0.382 +0;0.694 +0;0.828 +0;1.001 +0;1.523 +0;2.077 +0;2.215 +0;1.1 +0;0.008 +0;0.007 +0;0.004 +0;0 +0;0 +0.012;0 +0.05;0 +0.033;0 +0.007;0 +0;0 +0;0 +0;0 +0;0 +0;0.004 +0;0.014 +0;0.019 +0;0.024 +0;0.029 +0;0.056 +0;0.42 +0;0.652 +0;0.781 +0;0.99 +0;1.01 +0;0.582 +0;0.131 +0;0.088 +0;0.133 +0;0.125 +0;0.134 +0;0.08 +0;0.044 +0;0.03 +0;0.006 +0;0.046 +0;0.644 +0;1.29 +0;2.017 +0;2.392 +0;2.65 +0;2.854 +0;3.052 +0;3.281 +0;3.51 +0;3.711 +0;3.99 +0;4.001 +0;25.618 +0;9.433 +0;5.865 +0;6.707 +0;5.043 +0;4.736 +0;1.384 +0;1.922 +0;3.797 +0;7.038 +0;0.015 +0;0 +0;0.167 +0;1.366 +0;1.957 +0;2.281 +0;2.637 +0;2.811 +0;3.065 +0;3.42 +0;3.712 +0;4.026 +0;4.289 +0;4.222 +0;3.527 +0;2.206 +0;1.732 +0;0.387 +0;0.147 +0;0.175 +0;0.213 +0;0.135 +0;0.129 +0;0.663 +0;1.137 +0;1.984 +0;2.816 +0;3.079 +0;3.066 +0;3.015 +0;3.008 +0;3.15 +0;3.377 +0;3.514 +0;3.52 +0;3.686 +0;3.822 +0;3.772 +0;3.11 +0;1.315 +0;0.178 +0;0.108 +0;0.165 +0;0.157 +0;0.167 +0;0.083 +0;0.056 +0;0.055 +0;0.016 +0;0.02 +0;1.189 +0;2.537 +0;3.32 +0;3.685 +0;4.024 +0;4.229 +0;4.364 +0;4.498 +0;4.663 +0;4.914 +0;5.029 +0;4.82 +0;25.849 +0;8.839 +0;6.089 +0;8.798 +0;2.53 +0;1.047 +0;2.441 +0;3.959 +0;3.861 +0;4.292 +0;0.011 +0;0 +0;0 +0;1.007 +0;1.959 +0;2.694 +0;3.198 +0;3.462 +0;3.735 +0;3.94 +0;4.157 +0;4.396 +0;4.462 +0;4.282 +0;25.884 +0;10.486 +0;7.559 +0;8.805 +0;3.009 +0;2.274 +0;3.282 +0.013;5.288 +0;3.902 +0;4.515 +0;0 +0;0 +0;0 +0;1.157 +0;1.969 +0;2.549 +0;3.243 +0;3.652 +0;3.896 +0;4.136 +0;4.367 +0;4.492 +0;4.474 +0;4.239 +0;3.258 +0;1.745 +0;0.258 +0;0.051 +0;0.014 +0;0 +0;0.306 +0;0.818 +0;1.37 +0;2.06 +0;2.561 +0;3.405 +0;4.127 +0;4.642 +0;5.03 +0;5.133 +0;5.041 +0;5.014 +0;5.159 +0;5.397 +0;5.71 +0;5.872 +0;5.881 +0;5.861 +0;5.508 +0;4.883 +0;4.218 +0;3.642 +0;3.168 +0;2.836 +0;2.731 +0;2.651 +0;2.691 +0;2.249 +0;1.803 +0;3.262 +0;4.65 +0;5.217 +0;5.421 +0;5.451 +0;5.573 +0;5.815 +0;5.906 +0;5.84 +0;5.602 +0;5.31 +0;5.356 +0;5.307 +0;26.367 +0;9.843 +0;5.79 +0;8.475 +0;5.88 +0;8.171 +0;6.763 +0;6.646 +0;5.526 +0;5.346 +0;0.016 +0;0 +0;0.56 +0;2.249 +0;3.151 +0;3.98 +0;4.23 +0;4.435 +0;4.724 +0;5.074 +0;5.383 +0;5.602 +0;5.624 +0;5.491 +0;4.816 +0;3.477 +0;2.507 +0;0.789 +0;0.252 +0;0.259 +0;0.251 +0;0.172 +0;0.115 +0;0.092 +0;0.948 +0;3.158 +0;4.84 +0;5.388 +0;5.463 +0;5.615 +0;5.864 +0;6.007 +0;6.013 +0;6.004 +0;6.06 +0;6.303 +0;6.567 +0;6.263 +0;4.754 +0;2.434 +0;1.606 +0;1.032 +0;0.451 +0;0.271 +0;0.241 +0;0.118 +0;0.077 +0;0.081 +0;0.042 +0;1.199 +0;3.152 +0;4.68 +0;5.229 +0;5.428 +0;5.467 +0;5.461 +0;5.398 +0;5.262 +0;5.183 +0;5.18 +0;5.09 +0;4.852 +0;26.615 +0;10.355 +0;5.116 +0;5.002 +0;3.854 +0;4.552 +0;3.391 +0;3.075 +0;3.65 +0;5.969 +0;0.008 +0;0 +0;0 +0;1.454 +0;2.292 +0;3.171 +0;3.625 +0;3.81 +0;3.952 +0;4.168 +0;4.469 +0;4.691 +0;4.773 +0;4.325 +0;25.707 +0;8.909 +0;4.393 +0;5.05 +0;1.356 +0;0.314 +0.365;0.439 +0.466;0.228 +0;0.178 +0;1.458 +0;0 +0;0 +0;0 +0;0 +0;0.118 +0;0.931 +0;1.448 +0;1.807 +0;2.281 +0;2.96 +0;3.48 +0;3.955 +0;4.287 +0;3.869 +0;1.883 +0;0.074 +0;0.017 +0;0.015 +0;0.002 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.215 +0;0.936 +0;1.211 +0;1.462 +0;2.1 +0;2.593 +0;3.1 +0;3.6 +0;3.751 +0;3.162 +0;1.193 +0;0.064 +0;0.035 +0;0.012 +0;0.001 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.019 +0;0.471 +0;1.152 +0;1.675 +0;1.901 +0;1.771 +0;2.052 +0;2.694 +0;3.108 +0;2.869 +0;24.431 +0;7.59 +0;5.783 +0;9.403 +0;4.163 +0;3.16 +0;3.856 +0;6.126 +0;4.813 +0;3.987 +0;0.016 +0;0 +0;0 +0;0.444 +0;1.757 +0;2.492 +0;3.327 +0;4.009 +0;4.308 +0;4.597 +0;4.902 +0;5.06 +0;5.062 +0;4.551 +0;2.832 +0;0.752 +0;0.204 +0;0.165 +0;0.217 +0;0.186 +0;0.16 +0;0.079 +0;0.039 +0;0.026 +0;0.005 +0;0 +0;0 +0;0.049 +0;0.875 +0;1.492 +0;1.885 +0;2.436 +0;2.693 +0;3.038 +0;3.463 +0;3.889 +0;4.108 +0;3.39 +0;1.573 +0;0.199 +0;0.086 +0;0.073 +0;0.114 +0;0.092 +0;0.057 +0;0.014 +0;0.005 +0;0.005 +0;0.002 +0;0 +0;0 +0;0.333 +0;1.291 +0;2.369 +0;3.223 +0;3.858 +0;4.393 +0;4.813 +0;5.03 +0;5.182 +0;5.389 +0;5.136 +0;26.625 +0;11.371 +0;10.361 +0;12.233 +0;8.153 +0;6.386 +0;4.529 +0;5.916 +0;4.91 +0;5.065 +0;0.018 +0;0 +0;0.003 +0;1.51 +0;2.512 +0;3.487 +0;4.292 +0;4.946 +0;5.619 +0;6.097 +0;6.278 +0;6.581 +0;6.971 +0;6.232 +0;26.226 +0;9.637 +0;8.556 +0;12.746 +0;3.757 +0.114;1.124 +0.944;3.895 +1.143;5.633 +0.584;3.908 +0.003;3.955 +0;0 +0;0 +0;0 +0;0.808 +0;2.106 +0;2.79 +0;3.512 +0;4.442 +0;4.708 +0;4.796 +0;4.99 +0;5.058 +0;4.988 +0;4.403 +0;3.005 +0;1.724 +0;1.213 +0;0.711 +0;0.429 +0;0.413 +0;0.398 +0;0.096 +0;0.024 +0;0.006 +0;0.088 +0;1.625 +0;3.506 +0;5.083 +0;5.814 +0;6.31 +0;6.56 +0;6.563 +0;6.837 +0;7.234 +0;7.359 +0;7.537 +0;7.677 +0;6.798 +0;4.302 +0;1.49 +0;0.508 +0;0.251 +0;0.363 +0;0.358 +0;0.381 +0;0.2 +0;0.12 +0;0.101 +0;0.022 +0;0.782 +0;2.554 +0;4.788 +0;5.703 +0;6.169 +0;6.313 +0;6.087 +0;5.975 +0;6.026 +0;6.217 +0;6.329 +0;6.213 +0;5.88 +0;27.088 +0;12.031 +0;10.085 +0;11.742 +0;8.883 +0;9.013 +0;8.562 +0;10.807 +0;10.651 +0;11.238 +0;0.028 +0;0.621 +0;3.658 +0;5.225 +0;5.949 +0;6.406 +0;6.729 +0;6.972 +0;7.102 +0;7.041 +0;7.198 +0;7.155 +0;6.912 +0;6.189 +0;4.458 +0;2.268 +0;1.202 +0;0.735 +0;0.583 +0;0.451 +0;0.371 +0;0.198 +0;0.155 +0;0.984 +0;2.759 +0;4.609 +0;5.874 +0;6.54 +0;6.775 +0;6.973 +0;7.063 +0;7.136 +0;7.19 +0;7.255 +0;7.402 +0;7.606 +0;7.664 +0;7.407 +0;6.652 +0;5.461 +0;4.29 +0;3.019 +0;2.263 +0;1.515 +0;0.368 +0;0.19 +0;0.143 +0;1.045 +0;2.513 +0;4.081 +0;5.346 +0;5.965 +0;6.238 +0;6.4 +0;6.543 +0;6.699 +0;6.868 +0;7.034 +0;7.141 +0;7.163 +0;7.16 +0;6.975 +0;28.211 +0;13.248 +0;11.489 +0;13.404 +0;10.239 +0;9.877 +0;7.709 +0;8.109 +0;8.448 +0;9.321 +0;0.012 +0;0 +0;0.397 +0;1.843 +0;2.883 +0;3.563 +0;4.06 +0;4.623 +0;5.268 +0;5.644 +0;5.873 +0;6.042 +0;6.14 +0;5.807 +0;27.232 +0;10.747 +0;2.878 +0;0.336 +0;0.968 +0.468;0.773 +1.398;0.417 +1.395;0.235 +0.759;0.958 +0.099;2.4 +0;0 +0;0 +0;0 +0;0 +0;0.007 +0;1.008 +0;1.585 +0;2.06 +0;2.705 +0;3.108 +0;3.722 +0;4.21 +0;3.94 +0;2.507 +0;0.411 +0;0 +0.01;0 +0.054;0 +0.025;0 +0.001;0 +0.045;0 +0.088;0 +0.063;0 +0.018;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.004 +0;0.104 +0;0.641 +0;1.023 +0;1.089 +0;1.228 +0;1.294 +0;0.411 +0;0.004 +0.028;0 +0.166;0 +0.409;0 +0.798;0 +0.928;0 +1.115;0 +0.699;0 +0.437;0 +0.348;0 +0.074;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.037 +0;0.008 +0;19.264 +0;2.952 +0;0.234 +0;0.175 +1.199;0.151 +0.47;0.137 +4.002;0.128 +3.36;0.134 +0.45;0.215 +0;2.263 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.024 +0;0.084 +0;0.126 +0;0.04 +0;0.003 +0;0.009 +0;0.023 +0;0.063 +0;0.078 +0;0.09 +0;0.05 +0;0.032 +0;0.07 +0;0.685 +0;1.404 +0;2.129 +0;2.75 +0;3.157 +0;3.586 +0;3.872 +0;3.94 +0;4.253 +0;4.687 +0;4.976 +0;5.151 +0;5.052 +0;3.866 +0;24.253 +0;7.181 +0;3.628 +0;1.777 +0;3.241 +0;2.654 +0;0.492 +0;0.244 +0;2.436 +0;5.003 +0;0 +0;0 +0;0 +0;0.349 +0;1.738 +0;2.493 +0;3.254 +0;3.771 +0;4.153 +0;4.59 +0;4.919 +0;5.053 +0;4.846 +0;3.896 +0;24.669 +0;8.666 +0;3.331 +0;0.917 +0;4.091 +0;3.726 +0;1.018 +0;0.462 +0;2.622 +0;4.703 +0;0 +0;0 +0;0 +0;0.208 +0;1.024 +0;1.381 +0;1.574 +0;1.699 +0;1.936 +0;2.144 +0;2.181 +0;2.236 +0;2.252 +0;1.775 +0;0.762 +0;0.049 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.048 +0;1.015 +0;1.585 +0;2.305 +0;2.823 +0;3.011 +0;3.302 +0;3.534 +0;3.669 +0;3.377 +0;1.816 +0;0.17 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.388 +0;0.922 +0;1.411 +0;1.764 +0;1.91 +0;2.126 +0;2.106 +0;1.982 +0;1.816 +0;1.067 +0;22.771 +0;6.678 +0;1.07 +0;0.195 +0;1.643 +0;1.371 +0;0.175 +0;0.165 +0;0.849 +0;3.629 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.403 +0;0.731 +0;1.058 +0;1.337 +0;1.552 +0;1.879 +0;1.818 +0;0.754 +0;0.068 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.571 +0;1.08 +0;1.345 +0;1.712 +0;2.443 +0;2.861 +0;2.759 +0;2.153 +0;0.914 +0;0.015 +0;0.003 +0;0 +0.023;0 +0.182;0 +0.24;0 +0.24;0 +0.169;0 +0.114;0 +0.12;0 +0.031;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.059 +0;0.295 +0;0.536 +0;0.57 +0;0.275 +0;22.209 +0;6.031 +0;1.683 +0;0.249 +0;3.871 +0;3.608 +0;0.855 +0;0.157 +0;0.28 +0;0.952 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.01 +0;0.453 +0;0.798 +0;1.138 +0;1.461 +0;1.717 +0;1.689 +0;1.178 +0;23.247 +0;6.748 +0;1.388 +0;0.179 +0;2.337 +0;1.891 +0;0.199 +0.621;0.154 +2.552;0.141 +0.693;0.143 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +0.035;0 +0.097;0 +0.049;0 +0.001;0 +0.094;0 +0.168;0 +0.128;0 +0.037;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.045;0 +0.209;0 +0.354;0 +0.596;0 +1.109;0 +1.253;0 +1.384;0 +0.84;0 +0.524;0 +0.437;0 +0.106;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;10.497 +0;0.735 +0;0.13 +0;0.108 +0.242;0.092 +0.149;0.086 +2.482;0.078 +3.049;0.072 +0.764;0.075 +0.152;0.082 +0.011;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.008;0 +0.071;0 +0.172;0 +0.403;0 +0.581;0 +0.77;0 +0.537;0 +0.345;0 +0.249;0 +0.028;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.007;0 +0.045;0 +0.025;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;11.167 +0;0.637 +0;0.112 +0;0.084 +0;0.069 +0;0.07 +0;0.061 +0;0.048 +0;0.043 +0;0.057 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;13.976 +0;2.367 +0;0.149 +0;0.102 +0;0.089 +0;0.096 +0;0.086 +0;0.07 +0;0.061 +0;0.066 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.064 +0;0.039 +0;0.015 +0;0.016 +0;0.001 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.02 +0;0.359 +0;0.205 +0;0.011 +0;16.57 +0;1.401 +0;0.115 +0;0.07 +0.006;0.05 +0.869;0.05 +1.733;0.047 +1.737;0.045 +1.159;0.052 +0.416;0.064 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.002 +0;0 +0;0 +0;0 +0;0 +0;0 +0.012;0 +0.072;0 +0.08;0 +0.065;0 +0.045;0 +0.006;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.014 +0;0.017 +0;0.003 +0;15.829 +0;1.949 +0;0.129 +0;0.104 +0;0.087 +0;0.083 +0;0.07 +0.167;0.057 +0;0.054 +0;0.062 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;14.524 +0;0.744 +0;0.114 +0;0.074 +0.037;0.05 +0.61;0.047 +2.911;0.039 +5.316;0.035 +3.675;0.038 +0.667;0.046 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.011;0 +0.033;0 +0.028;0 +0.008;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.005;0 +0.051;0 +0.026;0 +0.019;0 +0.034;0 +0.01;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.034;6.043 +0.13;0.115 +12.63;0.075 +32.133;0.038 +9.804;0.016 +2.083;0.005 +17.069;0 +28.801;0 +18.131;0 +3.797;0 +0.09;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;7.663 +0;0.162 +0;0.068 +0;0.036 +0;0.022 +0.195;0.02 +0.581;0.013 +0.76;0.008 +0.445;0.012 +0.058;0.022 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;7.321 +0;0.128 +0;0.057 +0;0.012 +0.21;0 +0.735;0 +1.251;0 +4.329;0 +2.798;0 +0.246;0.001 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +0.006;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;9.694 +0;0.528 +0;0.08 +0;0.055 +0;0.029 +0;0.02 +0;0.014 +0.23;0.003 +0;0.002 +0;0.015 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;13.331 +0;2.223 +0;0.104 +0;0.084 +0;0.074 +0;0.079 +0;0.069 +0;0.054 +0;0.053 +0;0.057 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;11.536 +0;0.911 +0;0.097 +0;0.072 +0;0.058 +0;0.06 +0;0.054 +0;0.046 +0;0.046 +0;0.053 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;13.965 +0;1.184 +0;0.1 +0;0.066 +0;0.048 +0;0.051 +0;0.046 +0;0.038 +0;0.039 +0;0.049 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.01;0 +0.074;0 +0.169;0 +0.225;0 +0.149;0 +0.101;0 +0.028;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.02;0 +0.09;0 +0.299;0 +0.46;0 +0.63;0 +0.385;0 +0.24;0 +0.241;0 +0.055;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;5.406 +0.021;0.088 +3.803;0.053 +9.413;0.025 +3.15;0.007 +1.007;0 +6.972;0 +11.366;0 +8.522;0 +1.842;0 +0.045;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;1.515 +0.192;0.063 +4.075;0.036 +9.6;0.012 +2.332;0 +0.006;0.003 +3.508;0.003 +4.438;0.001 +1.656;0.005 +0.236;0.014 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.013;0 +0.011;0 +0;0 +0.02;0 +0.01;0 +0;0 +0.003;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +0.066;0 +0.153;0 +0.088;0 +0.023;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;3.098 +0;0.055 +0;0.026 +0;0.006 +0;0.003 +0;0.013 +0;0.012 +0;0.003 +0;0 +0.005;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.006;0 +0.118;0 +0.019;0 +0;0 +0.001;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.003;0 +0.037;0 +0.17;0 +0.356;0 +0.47;0 +0.306;0 +0.202;0 +0.167;0 +0.035;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +0.004;0.567 +0.01;0.037 +1.443;0.016 +5.335;0.001 +2.244;0 +0.611;0 +9.341;0 +17.03;0 +11.232;0 +2.918;0 +0.057;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.055 +0.657;0.006 +22.399;0 +50.477;0 +11.505;0 +3.426;0 +23.992;0 +39.423;0 +23.046;0 +4.539;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.025;0 +0.127;0 +0.272;0 +0.095;0 +0.001;0 +0.1;0 +0.204;0 +0.138;0 +0.033;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.049;0 +0.137;0 +0.175;0 +0.3;0 +0.255;0 +0.179;0 +0.143;0 +0.03;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.006;0 +3.873;0 +15.977;0 +6.019;0 +3.305;0 +13.618;0 +19.449;0 +11.904;0 +2.991;0 +0.058;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.041;0 +0.155;0 +0.303;0 +0.461;0 +0.492;0 +0.582;0 +0.831;0 +0.997;0 +0.59;0 +0.446;0 +0.335;0 +0.064;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.009;0 +0.25;0 +0.13;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.006;0 +8.115;0 +25.976;0 +9.372;0 +2.898;0 +26.293;0 +44.53;0 +28.06;0 +5.666;0 +0.078;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.072;0 +6.071;0 +22.101;0 +8.154;0 +4.421;0 +22.976;0 +39.477;0 +26.129;0 +7.945;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.014;0 +0.099;0 +0.208;0 +0.072;0 +0.15;0 +0.9;0 +1.065;0 +0.712;0 +0.112;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.023;0 +0.095;0 +0.242;0 +0.482;0 +0.897;0 +1.714;0 +2.088;0 +2.733;0 +2.164;0 +1.445;0 +0.905;0 +0.191;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.196;0 +0.645;0 +4.225;0 +40.754;0 +69.168;0 +19.427;0 +11.656;0 +30.75;0 +41.451;0 +25.899;0 +11.558;0 +0.121;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.055;0 +0.171;0 +0.458;0 +1.133;0 +1.491;0 +2;0 +1.432;0 +1.547;0 +1.306;0 +0.177;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.095;0 +0.16;0 +0.131;0 +0.154;0 +0.247;0 +0.608;0 +0.692;0 +0.853;0 +0.534;0 +0.274;0 +0.219;0 +0.057;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +1.831;0 +4.657;0 +4.696;0 +3.041;0 +6.598;0 +5.74;0 +5.779;0 +5.681;0 +5.089;0 +0.023;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.684;0 +7.225;0 +18.806;0 +8.433;0 +9.438;0 +17.627;0 +25.736;0 +17.913;0 +9.389;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.037;0 +0.215;0 +0.435;0 +0.54;0 +1.327;0 +1.931;0 +2.104;0 +1.662;0 +0.934;0 +0.335;0 +0.009;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.007;0 +0.005;0 +0.001;0 +0.043;0 +0.139;0 +0.345;0 +0.877;0 +1.278;0 +0.986;0 +0.495;0 +0.21;0 +0.035;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.005;0 +3.326;0 +5.733;0 +5.096;0 +1.126;0 +3.306;0 +4.042;0 +2.206;0 +1.835;0 +0.742;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.022;0 +0.136;0 +0.242;0 +0.364;0 +0.273;0 +0.196;0 +0.158;0 +0.029;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.009;0 +0.006;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.06;0 +1.202;0 +0.232;0 +0.246;0 +2.164;0 +3.521;0 +1.776;0 +1.721;0 +0.929;0 +0.008;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.558;0 +1.663;0 +2.659;0 +6.356;0 +6.784;0 +8.893;0 +7.189;0 +4.72;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.401;0 +0.177;0 +0.224;0 +0.786;0 +5.898;0 +8.287;0 +5.51;0 +1.324;0 +0.017;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.128;0 +0.329;0 +0.418;0 +0.251;0 +0.157;0 +0.137;0 +0.032;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.049;0 +0.152;0 +0.49;0 +0.605;0 +0.584;0 +0.338;0 +0.245;0 +0.242;0 +0.055;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.003;0 +0.103;0 +17.039;0 +42.535;0 +16.414;0 +11.849;0 +26.602;0 +37.794;0 +24.966;0 +11.409;0 +0.097;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.24;0 +0.779;0 +0.684;0 +4.14;0 +4.967;0 +5.532;0 +4.842;0 +1.991;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.006;0 +0.061;0 +0.163;0 +0.236;0 +0.267;0 +0.167;0 +0.142;0 +0.148;0 +0.031;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.639;0 +2.18;0 +2.814;0 +6.881;0 +12.745;0 +15.117;0 +8.19;0 +5.894;0 +0.038;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.055;0 +0.196;0 +0.437;0 +0.83;0 +1.661;0 +2.39;0 +1.909;0 +1.377;0 +0.688;0 +0.079;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.006;0 +0.106;0 +0.217;0 +0.402;0 +1.031;0 +2.117;0 +2.712;0 +2.287;0 +1.746;0 +1.069;0 +0.141;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.06;0 +3.539;0 +23.391;0 +44.27;0 +17.048;0 +12.971;0 +29.668;0 +42.617;0 +26.098;0 +11.737;0 +0.117;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.47;0 +1.854;0 +1.136;0 +0.203;0 +4.904;0 +10.487;0 +14.421;0 +10.566;0 +7.81;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.022;0 +0.016;0 +0;0 +0.024;0 +0.054;0 +0.04;0 +0.011;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.096;0 +0.216;0 +0.32;0 +0.202;0 +0.134;0 +0.138;0 +0.03;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.313;0 +7.515;0 +20.509;0 +9.502;0 +9.778;0 +17.564;0 +23.904;0 +14.93;0 +7.189;0 +0.06;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.005;0 +0;0 +0;0 +0;0 +0.021;0 +0.201;0 +0.285;0 +0.371;0 +0.273;0 +0.344;0 +0.114;0 +0.019;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.037;0 +0.098;0 +0.216;0 +0.596;0 +1.159;0 +1.974;0 +1.694;0 +1.336;0 +0.715;0 +0.069;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.813;0 +13.645;0 +33.054;0 +13.971;0 +11.638;0 +22.98;0 +33.234;0 +23.394;0 +11.52;0 +0.09;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +1.306;0 +18.987;0 +42.549;0 +17.067;0 +12.451;0 +28.471;0 +42.099;0 +27.593;0 +12.212;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.028;0 +0.139;0 +0.248;0 +1.183;0 +2.084;0 +2.718;0 +2.918;0 +2.436;0 +1.45;0 +0.541;0 +0.014;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.03;0 +0.102;0 +0.401;0 +1.846;0 +3.037;0 +2.978;0 +2.506;0 +1.629;0 +0.355;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +5.013;0 +29.942;0 +77.421;0 +31.864;0 +19.691;0 +57.061;0 +90.184;0 +58.23;0 +21.922;0 +0.175;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.066;0 +0.24;0 +0.348;0 +0.536;0 +1.091;0 +3.187;0 +4.313;0 +4.681;0 +3.793;0 +2.742;0 +1.797;0 +0.603;0 +0.025;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.149;0 +0.357;0 +0.351;0 +0.369;0 +0.509;0 +1.613;0 +2.26;0 +2.222;0 +1.204;0 +0.615;0 +0.401;0 +0.081;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +1.508;0 +8.27;0 +12.243;0 +22.93;0 +11.337;0 +12.712;0 +16.414;0 +19.371;0 +14.041;0 +9.439;0 +0.034;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.353;0 +3.792;0 +6.269;0 +15.408;0 +7.23;0 +10.849;0 +20.134;0 +29.466;0 +21.946;0 +12.821;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.011;0 +0.078;0 +0.168;0 +0.657;0 +1.266;0 +2.175;0 +2.409;0 +1.781;0 +0.797;0 +0.101;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.008;0 +0.083;0 +0.217;0 +0.502;0 +0.839;0 +1.709;0 +1.371;0 +0.645;0 +0.282;0 +0.057;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.107;0 +5.767;0 +15.046;0 +30.21;0 +13.616;0 +13.641;0 +25.114;0 +29.996;0 +17.755;0 +9.647;0 +0.059;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.045;0 +0.135;0 +0.348;0 +0.756;0 +0.836;0 +1.04;0 +0.809;0 +0.336;0 +0.252;0 +0.046;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.021;0 +0.079;0 +0.238;0 +0.386;0 +0.548;0 +0.356;0 +0.238;0 +0.233;0 +0.051;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +2.723;0 +9.414;0 +22.003;0 +12.403;0 +13.245;0 +22.658;0 +29.711;0 +18.311;0 +7.832;0 +0.047;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +1.09;0 +1.141;0 +1.053;0 +0.209;0 +2.063;0 +4.556;0 +8.035;0 +3.223;0 +1.8;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.007;0 +0.005;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.028;0 +0.079;0 +0.035;0 +0.011;0 +0.005;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.286;0 +1.217;0 +0.108;0 +0;0 +0.637;0 +1.759;0 +1.045;0 +0.926;0 +1.228;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.077;0 +0.19;0 +0.265;0 +0.628;0 +0.246;0 +0.134;0 +0.028;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.004;0 +0.011;0 +0.108;0 +0.118;0 +0.066;0 +0.008;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.112;0 +0.045;0 +0.122;0 +0.659;0 +2.089;0 +1.031;0 +0.714;0 +0.623;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.706;0 +0.158;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.002;0 +0.005;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.012;0 +0.031;0 +0.022;0 +0.017;0 +0.002;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.882 +0;0 +0;0 +0;0 +0.239;0 +1.148;0 +3.129;0 +5.83;0 +4.848;0 +1.577;0 +0.019;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.066;0 +0.127;0 +0.139;0 +0.199;0 +0.351;0 +0.574;0 +0.625;0 +0.998;0 +0.647;0 +0.431;0 +0.371;0 +0.074;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.018;0 +0.065;0 +0.244;0 +0.353;0 +0.452;0 +0.295;0 +0.206;0 +0.185;0 +0.03;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.501 +0;0 +0;0 +0;0 +0;0 +0.297;0 +3.19;0 +4.691;0 +2.008;0 +0.029;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.012;0 +0.011;0 +0;0 +0.471;0 +0.646;0 +0.195;0 +0.006;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.008;0 +0.129;0 +0.165;0 +0.123;0 +0.057;0 +0.047;0 +0.045;0 +0.004;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;2.569 +0;0 +0;0 +0.412;0 +0.942;0 +1.872;0 +2.985;0 +2.438;0 +1.564;0 +0.788;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.101;0 +0.231;0 +0.351;0 +0.25;0 +0.148;0 +0.113;0 +0.02;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.005;0 +0.048;0 +0.039;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.578 +0;0 +0;0 +0;0 +0;0 +0.214;0 +1.595;0 +0.64;0 +0.048;0 +0.021;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;4.269 +0;0.08 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;7.419 +0;0.728 +0;0.04 +0;0.024 +0;0.015 +0;0.022 +0;0.018 +0;0.009 +0;0.006 +0;0.015 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.019;0 +0.028;0 +0;0 +0.129;0 +0.32;0 +0.202;0 +0.137;0 +0.107;0 +0.016;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;12.302 +0;2.31 +0;0.061 +0;0.041 +0;0.029 +0;0.03 +0;0.022 +0;0.015 +0;0.012 +0;0.018 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;12.254 +0;3.001 +0;0.11 +0;0.057 +0;0.818 +0;0.772 +0;0.05 +0;0.039 +0;0.036 +0;0.593 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.004;0 +0.006;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;14.171 +0;2.861 +0;0.103 +0;0.063 +0;0.051 +0;0.063 +0;0.055 +0;0.052 +0;0.807 +0;2.102 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.006 +0;0.004 +0;0 +0;0 +0;0 +0.061;0 +0.274;0 +0.807;0 +0.569;0 +0.213;0 +0.207;0 +0.044;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;9.719 +0.047;0.415 +7.918;0.056 +23.411;0.013 +9.784;0 +3.312;0 +25.061;0 +44.382;0 +26.853;0 +5.013;0 +0.135;0 +0.001;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;12.469 +0;1.241 +0;0.055 +0.027;0.018 +0.625;0 +2.012;0.002 +2.864;0 +2.726;0 +1.703;0 +0.44;0.011 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.003;0 +0.012;0 +1.041;0 +1.747;0 +1.543;0 +0.591;0 +0.014;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.001;0 +0.123;0 +0.462;0 +0.739;0 +0.889;0 +0.457;0 +0.28;0 +0.23;0 +0.043;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;7.765 +0;1.238 +0;0.064 +0;0.042 +0.033;0.026 +0.147;0.022 +5.104;0.007 +13.096;0 +9.365;0 +1.699;0 +0.045;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.066;0 +0.282;0 +0.652;0 +1.68;0 +1.946;0 +1.211;0 +0.511;0 +0.246;0 +0.043;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.023 +0;11.089 +0;2.431 +0;3.073 +0;4.992 +0;1.03 +0;0.214 +0;0.651 +0;0.45 +0;0.12 +0;0.099 +0;0.001 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;7.474 +0;1.14 +0;0.14 +0.264;0.036 +0;0.011 +0.126;0.017 +4.025;0.007 +5.712;0 +2.669;0 +0.326;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.026;0 +0.018;0 +0.001;0 +0.039;0 +0.068;0 +0.043;0 +0.011;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0.072;0 +0.266;0 +0.645;0 +0.847;0 +1.014;0 +0.589;0 +0.355;0 +0.277;0 +0.047;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.004 +0;3.499 +0;0.104 +0;0.015 +2.041;0 +1.216;0 +1.953;0 +2.912;0 +4.441;0 +1.365;0 +0.309;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.018 +0;0.038 +0;0.04 +0;0.036 +0;0.019 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.015 +0;0.028 +0;0.026 +0;0.019 +0;0.014 +0;0.004 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.025 +0;9.771 +0;1.845 +0;3.214 +0;5.512 +0;1.078 +0;0.106 +0;1.14 +0;2.036 +0;1.315 +0;0.456 +0;0.011 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;9.521 +0;2.129 +0;2.619 +0;4.329 +0;0.919 +0;0.142 +0;1.31 +0;2.621 +0;1.656 +0;1.339 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.002 +0;0.008 +0;0.013 +0;0.004 +0;0 +0;0.004 +0;0.005 +0;0.003 +0;0.001 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.027 +0;0.058 +0;0.062 +0;0.07 +0;0.093 +0;0.125 +0;0.104 +0;0.113 +0;0.067 +0;0.039 +0;0.041 +0;0.011 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.04 +0;18.127 +0;4.817 +0;4.078 +0;5.241 +0;1.125 +0;1.306 +0;1.404 +0;1.851 +0;1.218 +0;1.855 +0;0.007 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.034 +0;0.066 +0;0.063 +0;0.052 +0;0.028 +0;0.001 +0;0 +0.054;0 +0.106;0 +0.073;0 +0.03;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.025 +0;0.054 +0;0.053 +0;0.043 +0;0.044 +0;0.061 +0;0.034 +0;0.011 +0;0.001 +0;0.006 +0;0.013 +0;0.006 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.021 +0;15.825 +0;4.194 +0;2.696 +0;3.505 +0;0.782 +0;0.33 +0;0.805 +0;1.211 +0;0.733 +0;1.907 +0;0.002 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;17.308 +0;4.825 +0;4.169 +0;6.211 +0;1.421 +0;0.777 +0;1.719 +0;3.069 +0;2.548 +0;3.887 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.133 +0;0.034 +0;0.127 +0;0.301 +0;0.401 +0;0.278 +0;0.006 +0;0.023 +0;0.039 +0;0.012 +0;0 +0;0.012 +0;0.02 +0;0.013 +0;0.003 +0;0 +0;0 +0;0 +0;0 +0;0.213 +0;0.545 +0;0.642 +0;0.719 +0;0.913 +0;0.88 +0;0.747 +0;0.702 +0;0.645 +0;0.611 +0;0.504 +0;0.184 +0;0.068 +0;0.085 +0;0.104 +0;0.067 +0;0.047 +0;0.026 +0;0.018 +0;0.018 +0;0.005 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0 +0;0.011 +0;19.5 +0;5.436 +0;1.825 +0;2.369 +0;3.555 +0;4.518 +0;3.144 +0;2.972 +0;2.035 +0;3.99 +0;0.011 +0;0 +0;0 +0;0 +0;0.676 +0;0.982 +0;1.134 +0;1.207 +0;1.131 +0;1.162 +0;1.263 +0;1.452 +0;1.561 +0;1.566 +0;1.523 +0;0.789 +0;0.104 +0;0.125 +0;0.179 +0;0.177 +0;0.193 +0;0.123 +0;0.082 +0;0.069 +0;0.28 +0;1.05 +0;1.495 +0;1.65 +0;1.703 +0;1.863 +0;1.971 +0;2.06 +0;2.239 +0;2.359 +0;2.415 +0;2.548 +0;2.815 +0;3.147 +0;3.191 +0;1.68 +0;0.257 +0;0.108 +0;0.187 +0;0.183 +0;0.183 +0;0.095 +0;0.064 +0;0.066 +0;0.041 +0;1.327 +0;2.07 +0;2.644 +0;3.082 +0;3.399 +0;3.823 +0;4.288 +0;4.478 +0;4.609 +0;4.873 +0;5.339 +0;5.83 +0;6.218 +0;28.219 +0;12.582 +0;12.192 +0;16.765 +0.287;4.151 +1.074;1.274 +1.368;3.01 +1.113;4.334 +0.155;3.562 +0;5.312 +0;0.017 +0;0 +0;0.579 +0;1.861 +0;2.555 +0;2.982 +0;3.379 +0;3.787 +0;4.211 +0;4.729 +0;5.33 +0;5.768 +0;5.966 +0;6.241 +0;27.972 +0;12.208 +0;10.752 +0;14.077 +0.75;3.729 +1.685;1.092 +2.101;2.533 +1.669;2.812 +0.356;2.094 +0;4.389 +0;0 +0;0 +0;0.702 +0;2.342 +0;3.005 +0;3.076 +0;3.566 +0;3.894 +0;4.239 +0;4.684 +0;5.317 +0;5.64 +0;5.973 +0;6.133 +0;5.881 +0;4.602 +0;1.132 +0;0.252 +0;0.019 +0;0 +0;0.014 +0;0.023 +0;0.013 +0;0.268 +0;1.486 +0;2.042 +0;2.493 +0;3.105 +0;3.995 +0;4.553 +0;4.89 +0;5.17 +0;5.514 +0;5.835 +0;6.236 +0;6.8 +0;7.404 +0;7.457 +0;7.031 +0;6.272 +0;5.285 +0;4.309 +0;2.465 +0;0.57 +0;0.304 +0;0.219 +0;0.58 +0;1.871 +0;2.676 +0;3.667 +0;3.821 +0;3.89 +0;4.086 +0;4.172 +0;4.293 +0;4.462 +0;4.549 +0;4.551 +0;4.476 +0;4.394 +0;4.327 +0;4.385 +0;26.813 +0;11.61 +0;7.854 +0;8.068 +0;5.04 +0;3.67 +0;2.416 +0;2.276 +0;2.953 +0;5.662 +0;0.011 +0;0 +0;0.895 +0;2.044 +0;2.549 +0;2.886 +0;3.483 +0;3.854 +0;4.216 +0;4.377 +0;4.381 +0;4.429 +0;4.314 +0;4.129 +0;3.94 +0;3.006 +0;1.089 +0;0.118 +0;0.084 +0;0.06 +0;0.018 +0;0 +0;0 +0;0.011 +0;0.027 +0;1.068 +0;1.703 +0;2.204 +0;2.98 +0;3.392 +0;3.807 +0;4.191 +0;4.458 +0;4.664 +0;4.831 +0;4.803 +0;4.59 +0;4.538 +0;4.53 +0;4.291 +0;3.756 +0;2.705 +0;0.621 +0;0.227 +0;0.177 +0;0.091 +0;0.123 +0;1.052 +0;2.431 +0;4.086 +0;5.068 +0;5.673 +0;6.049 +0;6.277 +0;6.506 +0;6.71 +0;6.828 +0;6.982 +0;7.193 +0;7.408 +0;7.561 +0;7.806 +0;29.345 +0;14.063 +0;10.653 +0;13.828 +0;4.59 +0.142;3.921 +0.255;4.732 +0.017;6.258 +0;7.381 +0;7.631 +0;0.023 +0;0.908 +0;3.153 +0;4.113 +0;5.393 +0;5.844 +0;6.39 +0;6.983 +0;7.226 +0;7.449 +0;8.064 +0;8.69 +0;8.87 +0;9.002 +0;29.913 +0;15.97 +0;14.076 +0;15.14 +0;4.993 +0;3.58 +0;4.678 +0;6.557 +0;8.233 +0;10.008 +0;0 +0;0.873 +0;3.005 +0;3.692 +0;4.58 +0;4.818 +0;4.691 +0;4.496 +0;4.413 +0;4.372 +0;4.369 +0;4.306 +0;4.314 +0;4.28 +0;4.134 +0;3.785 +0;3.071 +0;1.647 +0;0.171 +0;0 +0;0.009 +0;0.027 +0;0.666 +0;1.709 +0;3.156 +0;4.115 +0;4.391 +0;4.402 +0;4.429 +0;4.47 +0;4.541 +0;4.623 +0;4.676 +0;4.751 +0;4.846 +0;4.947 +0;5.097 +0;5.37 +0;4.839 +0;2.843 +0;1.963 +0;1.961 +0;1.824 +0;1.081 +0;0.98 +0;1.452 +0;2.272 +0;2.858 +0;3.052 +0;3.185 +0;3.273 +0;3.393 +0;3.498 +0;3.604 +0;3.709 +0;3.773 +0;3.831 +0;3.879 +0;3.889 +0;3.894 +0;3.935 +0;3.926 +0;26.483 +0;11.054 +0;5.755 +0;4.022 +0;5.451 +0;7.952 +0;4.935 +0;3.97 +0;6.831 +0;9.765 +0;0.007 +0;0 +0;0.252 +0;1.211 +0;1.634 +0;2.121 +0;2.779 +0;3.217 +0;3.628 +0;3.982 +0;4.372 +0;4.836 +0;4.992 +0;4.938 +0;4.467 +0;2.84 +0;0.934 +0;0.174 +0;0.137 +0;0.092 +0;0.059 +0;0.037 +0;0.055 +0;1.101 +0;2.253 +0;3.456 +0;3.896 +0;4.391 +0;4.907 +0;5.104 +0;5.103 +0;5.263 +0;5.272 +0;5.224 +0;5.242 +0;5.157 +0;5.175 +0;5.234 +0;4.313 +0;1.694 +0;0.277 +0;0.045 +0;0.028 +0;0 +0;0 +0;0.002 +0;0.012 +0;0.445 +0;1.742 +0;2.809 +0;3.179 +0;3.176 +0;3.312 +0;3.407 +0;3.61 +0;4.041 +0;4.663 +0;4.865 +0;4.972 +0;5.317 +0;5.201 +0;5.046 +0;26.79 +0;9.129 +0;4.357 +0;3.794 +0;2.256 +0;4.488 +0;3.292 +0;2.993 +0;6.273 +0;9.2 +0;0.008 +0;0 +0;0.252 +0;1.172 +0;1.642 +0;2.057 +0;2.661 +0;3.05 +0;3.469 +0;3.921 +0;4.11 +0;4.366 +0;4.462 +0;4.159 +0;26.662 +0;11.904 +0;9.431 +0;9.765 +0;8.81 +0;9.678 +0;7.612 +0;8.151 +0;9.578 +0;11.109 +0;0 +0;0 +0;1.612 +0;2.286 +0;2.694 +0;3.437 +0;4.05 +0;4.609 +0;5.026 +0;5.239 +0;5.497 +0;5.639 +0;5.793 +0;6.275 +0;5.501 +0;1.83 +0;0.29 +0;0.047 +0;0.005 +0;0 +0;0 +0;0 +0;0.003 +0;0.3 +0;1.786 +0;2.375 +0;3.102 +0;3.644 +0;4.069 +0;4.227 +0;4.237 +0;4.224 +0;4.305 +0;4.398 +0;4.518 +0;4.7 +0;4.763 +0;4.838 +0;4.116 +0;1.569 +0;0.385 +0;0.093 +0;0.063 +0;0.009 +0;0 +0;0 +0;0.002 +0;0.095 +0;0.765 +0;1.568 +0;2.549 +0;2.446 +0;2.421 +0;2.87 +0;3.164 +0;3.501 +0;3.816 +0;4.225 +0;4.581 +0;4.687 +0;4.818 +0;4.831 +0;26.659 +0;9.681 +0;4.135 +0;3.623 +0;3.153 +0;3.618 +0;1.545 +0;0.823 +0;4.935 +0;8.368 +0;0.007 +0;0 +0;0.449 +0;1.847 +0;2.317 +0;3.05 +0;3.67 +0;4.265 +0;4.722 +0;4.683 +0;4.797 +0;5.323 +0;6.008 +0;6.192 +0;5.744 +0;4.142 +0;2.17 +0;0.717 +0;0.185 +0;0.121 +0;0.103 +0;0.19 +0;1.337 +0;2.68 +0;3.433 +0;4.366 +0;5.081 +0;5.727 +0;6.118 +0;6.014 +0;6.067 +0;6.618 +0;7.173 +0;7.361 +0;7.641 +0;7.887 +0;7.971 +0;8.133 +0;7.618 +0;5.225 +0;2.633 +0;0.873 +0;0.771 +0;0.682 +0;0.667 +0;1.68 +0;3.168 +0;5.622 +0;6.615 +0;6.746 +0;6.856 +0;7.129 +0;7.252 +0;7.356 +0;7.615 +0;7.876 +0;8.04 +0;8.212 +0;8.486 +0;8.727 +0;8.942 +0;9.12 +0;29.824 +0;13.685 +0;11.734 +0;15.163 +0;7.32 +0;5.878 +0;7.533 +0;10.173 +0;12.344 +0;14.468 +0;0.033 +0;3.158 +0;5.599 +0;7.139 +0;7.859 +0;8.267 +0;8.591 +0;9.018 +0;9.492 +0;9.986 +0;10.236 +0;10.287 +0;10.342 +0;10.626 +0;30.68 +0;16.36 +0;16.295 +0;20.88 +0;11.927 +0;10.895 +0;11.402 +0;15.17 +0;15.493 +0;16.543 +0;0.03 +0;4.523 +0;6.677 +0;7.725 +0;8.425 +0;8.962 +0;8.934 +0;9.066 +0;9.738 +0;10.009 +0;10.33 +0;10.717 +0;11.013 +0;11.287 +0;10.924 +0;8.274 +0;4.924 +0;3.218 +0;2.312 +0;2.245 +0;2.802 +0;4.075 +0;6.79 +0;9.117 +0;10.128 +0;10.629 +0;11.053 +0;11.393 +0;11.82 +0;12.019 +0;12.248 +0;12.572 +0;12.667 +0;12.899 +0;13.139 +0;13.302 +0;13.322 +0;13.222 +0;12.465 +0;11.158 +0;10.239 +0;9.856 +0;9.976 +0;9.945 +0;9.815 +0;9.749 +0;10.006 +0;10.287 +0;10.286 +0;10.326 +0;10.288 +0;10.14 +0;10.041 +0;9.985 +0;9.947 +0;9.951 +0;10.029 +0;10.105 +0;10.187 +0;10.246 +0;10.281 +0;10.313 +0;30.764 +0;17.444 +0;14.789 +0;14.649 +0;14.545 +0;14.32 +0;11.36 +0;12.925 +0;14.247 +0;16.964 +0;0.024 +0;3.882 +0;7.034 +0;7.542 +0;7.743 +0;7.946 +0;8.108 +0;8.215 +0;8.255 +0;8.305 +0;8.376 +0;8.453 +0;8.511 +0;8.564 +0;8.406 +0;7.679 +0;6.677 +0;5.922 +0;6.11 +0;5.774 +0;5.889 +0;6.442 +0;7.349 +0;8.073 +0;8.771 +0;9.581 +0;9.952 +0;10.124 +0;10.278 +0;10.518 +0;10.843 +0;10.984 +0;11.173 +0;11.369 +0;11.514 +0;11.773 +0;11.854 +0;11.797 +0;11.863 +0;11.378 +0;10.762 +0;10.337 +0;10.21 +0;10.078 +0;10.357 +0;10.561 +0;11.025 +0;11.269 +0;11.159 +0;11.107 +0;10.966 +0;10.793 +0;10.668 +0;10.655 +0;10.687 +0;10.711 +0;10.636 +0;10.633 +0;10.68 +0;10.734 +0;10.648 +0;10.639 +0;31.079 +0;18.197 +0;15.867 +0;17.083 +0;17.321 +0;16.579 +0;13.734 +0;15.674 +0;16.363 +0;18.176 +0;0.06 +0;4.707 +0;7.514 +0;8.183 +0;8.509 +0;8.749 +0;8.926 +0;9.061 +0;9.16 +0;9.253 +0;9.32 +0;9.317 +0;9.318 +0;9.33 +0;30.307 +0;17.583 +0;15.291 +0;16.015 +0;16.466 +0;15.833 +0;13.321 +0;15.525 +0;15.952 +0;17.809 +0;0.037 +0;4.648 +0;7.413 +0;8.07 +0;8.41 +0;8.643 +0;8.81 +0;9.128 +0;9.449 +0;9.635 +0;9.906 +0;10.025 +0;10.063 +0;10.172 +0;9.893 +0;8.747 +0;7.424 +0;6.648 +0;4.132 +0;3.574 +0;4.343 +0;5.569 +0;7.919 +0;9.371 +0;10.012 +0;10.136 +0;10.024 +0;10.226 +0;10.729 +0;10.962 +0;11.11 +0;11.532 +0;11.974 +0;12.083 +0;11.94 +0;11.769 +0;11.812 +0;11.749 +0;11.599 +0;10.629 +0;8.764 +0;6.647 +0;5.318 +0;4.521 +0;4.996 +0;6.672 +0;8.578 +0;9.702 +0;10.187 +0;10.842 +0;11.392 +0;11.8 +0;12.002 +0;12.092 +0;12.42 +0;12.598 +0;12.631 +0;12.66 +0;12.66 +0;12.574 +0;12.451 +0;12.344 +0;31.764 +0;18.365 +0;15.07 +0;17.153 +0;9.758 +0;9.077 +0;9.754 +0;13.411 +0;15.699 +0;18.653 +0;0.467 +0;6.254 +0;9.144 +0;10.051 +0;10.678 +0;11.032 +0;11.398 +0;11.743 +0;12.01 +0;12.335 +0;12.566 +0;12.418 +0;12.622 +0;13.131 +0;12.82 +0;11.118 +0;8.745 +0;8.48 +0;8.219 +0;6.807 +0;7.256 +0;8.535 +0;9.57 +0;10.062 +0;10.146 +0;10.27 +0;10.399 +0;10.27 +0;9.978 +0;9.76 +0;9.663 +0;9.606 +0;9.436 +0;9.144 +0;8.939 +0;8.765 +0;8.545 +0;8.479 +0;8.374 +0;7.883 +0;7.162 +0;6.573 +0;6.296 +0;6.022 +0;5.985 +0;6.247 +0;6.581 +0;6.69 +0;6.653 +0;6.501 +0;6.358 +0;6.335 +0;6.364 +0;6.483 +0;6.496 +0;6.38 +0;6.281 +0;6.258 +0;6.295 +0;6.323 +0;6.427 +0;6.535 +0;28.649 +0;14.432 +0;7.975 +0;5.011 +0;9.963 +0;11.957 +0;7.137 +0;6.959 +0;9.404 +0;13.813 +0;0.008 +0;0.654 +0;3.169 +0;4.472 +0;4.441 +0;4.104 +0;3.982 +0;4.049 +0;3.953 +0;4.294 +0;5.332 +0;5.656 +0;5.765 +0;5.99 +0;28.054 +0;14.043 +0;9.364 +0;8.365 +0;12.049 +0;13.617 +0;10.173 +0;10.585 +0;11.516 +0;14.521 +0;0 +0;1.19 +0;3.338 +0;4.455 +0;4.916 +0;5.188 +0;5.267 +0;5.316 +0;5.383 +0;5.46 +0;5.545 +0;5.607 +0;5.689 +0;5.772 +0;5.746 +0;5.425 +0;4.781 +0;4.171 +0;3.455 +0;3.791 +0;4.374 +0;5.14 +0;6.141 +0;6.723 +0;6.717 +0;6.812 +0;6.997 +0;7.221 +0;7.377 +0;7.558 +0;7.733 +0;7.852 +0;7.862 +0;7.791 +0;7.64 +0;7.626 +0;7.786 +0;7.886 +0;7.862 +0;7.314 +0;5.114 +0;3.908 +0;3.449 +0;3.938 +0;4.999 +0;6.096 +0;6.907 +0;7.389 +0;7.58 +0;7.73 +0;8.057 +0;8.602 +0;8.897 +0;8.836 +0;8.766 +0;8.798 +0;8.903 +0;8.901 +0;8.884 +0;8.918 +0;9.04 +0;9.45 +0;30.538 +0;16.77 +0;13.607 +0;14.965 +0;11.999 +0;10.583 +0;10.051 +0;12.744 +0;14.31 +0;17.199 +0;0.065 +0;4.258 +0;7.435 +0;8.422 +0;9.009 +0;9.397 +0;9.564 +0;9.628 +0;9.723 +0;9.8 +0;9.92 +0;10.067 +0;10.208 +0;10.424 +0;10.576 +0;10.395 +0;10.038 +0;9.726 +0;9.206 +0;8.978 +0;9.344 +0;10.048 +0;10.616 +0;10.986 +0;11.039 +0;11.112 +0;11.252 +0;11.418 +0;11.544 +0;11.721 +0;11.827 +0;11.949 +0;12.032 +0;12.072 +0;12.153 +0;12.326 +0;12.413 +0;12.587 +0;12.688 +0;12.474 +0;11.731 +0;11.125 +0;10.924 +0;10.911 +0;11.202 +0;11.504 +0;12.083 +0;12.386 +0;12.369 +0;12.382 +0;12.389 +0;12.402 +0;12.406 +0;12.436 +0;12.482 +0;12.504 +0;12.519 +0;12.488 +0;12.55 +0;12.611 +0;12.664 +0;12.853 +0;31.953 +0;21.022 +0;21.576 +0;26.176 +0;21.757 +0;19.305 +0;19.434 +0;22.635 +0;22.101 +0;21.402 +0;1.255 +0;8.038 +0;10.41 +0;10.976 +0;11.311 +0;11.574 +0;11.75 +0;11.863 +0;12.08 +0;12.266 +0;12.373 +0;12.451 +0;12.492 +0;12.576 +0;31.709 +0;21.363 +0;21.097 +0;23.479 +0;18.089 +0;14.748 +0;13.259 +0;16.713 +0;17.8 +0;19.573 +0;0.589 +0;6.447 +0;9.276 +0;9.943 +0;10.271 +0;10.656 +0;10.88 +0;11.083 +0;11.416 +0;11.598 +0;11.71 +0;11.801 +0;11.824 +0;11.889 +0;11.854 +0;11.397 +0;10.669 +0;10.221 +0;10.101 +0;9.854 +0;10.155 +0;11.006 +0;11.546 +0;11.949 +0;12.203 +0;12.291 +0;12.315 +0;12.36 +0;12.459 +0;12.517 +0;12.546 +0;12.466 +0;12.505 +0;12.565 +0;12.43 +0;12.473 +0;12.543 +0;12.519 +0;12.488 +0;11.029 +0;8.149 +0;6.272 +0;5.666 +0;5.356 +0;6.006 +0;7.661 +0;10.554 +0;11.749 +0;11.95 +0;12.044 +0;12.237 +0;12.21 +0;12.236 +0;12.209 +0;12.293 +0;12.423 +0;12.407 +0;12.393 +0;12.374 +0;12.409 +0;12.388 +0;12.55 +0;31.986 +0;20.714 +0;19.279 +0;22.001 +0;20.011 +0;18.44 +0;17.175 +0;19.631 +0;20.299 +0;20.943 +0;0.995 +0;7.65 +0;10.107 +0;11.105 +0;11.765 +0;11.797 +0;12.184 +0;12.526 +0;12.5 +0;12.56 +0;12.936 +0;13.267 +0;13.291 +0;13.347 +0;13.371 +0;12.986 +0;12.357 +0;11.925 +0;11.662 +0;11.462 +0;11.441 +0;11.457 +0;11.777 +0;11.98 +0;11.991 +0;12.065 +0;12.133 +0;12.198 +0;12.237 +0;12.294 +0;12.312 +0;12.293 +0;12.256 +0;12.225 +0;12.21 +0;12.179 +0;12.07 +0;12.018 +0;12.01 +0;11.807 +0;11.393 +0;11.028 +0;10.95 +0;10.864 +0;10.974 +0;11.1 +0;11.433 +0;11.676 +0;11.686 +0;11.77 +0;11.861 +0;11.954 +0;11.985 +0;12.02 +0;12.071 +0;12.092 +0;12.143 +0;12.147 +0;12.168 +0;12.138 +0;12.117 +0;12.251 +0;31.973 +0;20.399 +0;17.638 +0;19.183 +0;19.685 +0;18.669 +0;16.375 +0;18.087 +0;18.923 +0;20.043 +0;0.525 +0;6.55 +0;9.122 +0;9.618 +0;9.866 +0;10.096 +0;10.212 +0;10.24 +0;10.282 +0;10.338 +0;10.386 +0;10.382 +0;10.298 +0;10.148 +0;30.8 +0;18.187 +0;13.764 +0;12.544 +0;15.25 +0;15.559 +0;12.267 +0;13.646 +0;14.89 +0;17.614 +0;0 +0;4.046 +0;7.177 +0;7.975 +0;8.237 +0;8.353 +0;8.392 +0;8.471 +0;8.48 +0;8.558 +0;8.598 +0;8.562 +0;8.551 +0;8.469 +0;8.31 +0;8.146 +0;7.711 +0;7.242 +0;6.933 +0;6.843 +0;6.821 +0;6.927 +0;6.968 +0;7.007 +0;7.016 +0;6.784 +0;6.494 +0;6.366 +0;6.285 +0;6.229 +0;6.089 +0;6.152 +0;6.492 +0;6.899 +0;7.395 +0;7.757 +0;7.933 +0;8.074 +0;8.208 +0;7.684 +0;6.822 +0;6.53 +0;6.227 +0;5.328 +0;5.879 +0;6.715 +0;7.507 +0;8.036 +0;8.255 +0;8.301 +0;8.258 +0;8.24 +0;8.213 +0;8.175 +0;8.159 +0;8.195 +0;8.237 +0;8.263 +0;8.311 +0;8.288 +0;8.245 +0;8.265 +0;29.743 +0;15.795 +0;10.81 +0;9.318 +0;13.092 +0;13.979 +0;9.285 +0;8.875 +0;10.535 +0;14.631 +0;0.011 +0;0.89 +0;3.333 +0;4.571 +0;4.938 +0;5.253 +0;5.59 +0;5.774 +0;5.86 +0;5.988 +0;6.109 +0;6.259 +0;6.417 +0;6.578 +0;6.688 +0;6.519 +0;6.187 +0;6.053 +0;6.109 +0;6.188 +0;6.224 +0;6.486 +0;6.873 +0;7.105 +0;7.137 +0;7.143 +0;7.084 +0;6.957 +0;6.733 +0;6.592 +0;6.908 +0;7.584 +0;8.087 +0;8.292 +0;8.218 +0;8.283 +0;8.491 +0;8.601 +0;8.652 +0;7.947 +0;6.426 +0;4.94 +0;4.535 +0;4.459 +0;4.781 +0;5.758 +0;7.116 +0;7.917 +0;8.238 +0;8.433 +0;8.596 +0;8.733 +0;8.86 +0;8.914 +0;8.993 +0;9.101 +0;9.279 +0;9.694 +0;10.102 +0;10.354 +0;10.548 +0;10.582 +0;31.03 +0;16.997 +0;12.014 +0;10.867 +0;7.734 +0;8.14 +0;6.653 +0;7.822 +0;10.465 +0;13.823 +0;0.014 +0;1.35 +0;4.259 +0;6.003 +0;6.624 +0;7.002 +0;7.655 +0;8.264 +0;8.655 +0;8.859 +0;8.942 +0;8.899 +0;8.83 +0;8.744 +0;29.836 +0;16.79 +0;14.542 +0;14.746 +0;15.314 +0;14.95 +0;12.185 +0;13.684 +0;13.964 +0;16.144 +0;0 +0;2.388 +0;4.784 +0;5.729 +0;5.925 +0;5.995 +0;6.067 +0;6.281 +0;6.665 +0;7.039 +0;7.17 +0;7.348 +0;7.605 +0;7.652 +0;7.558 +0;7.279 +0;6.295 +0;6.058 +0;5.936 +0;6.163 +0;6.512 +0;6.782 +0;7.22 +0;7.636 +0;7.905 +0;8.004 +0;8.064 +0;8.105 +0;8.178 +0;8.329 +0;8.59 +0;8.857 +0;9.067 +0;9.436 +0;9.708 +0;9.948 +0;10.2 +0;10.201 +0;9.885 +0;9.284 +0;7.777 +0;5.866 +0;4.674 +0;3.875 +0;4.446 +0;5.814 +0;8.043 +0;9.162 +0;9.462 +0;9.67 +0;9.947 +0;10.297 +0;10.559 +0;10.589 +0;10.591 +0;10.596 +0;10.637 +0;10.748 +0;10.845 +0;10.945 +0;11.049 +0;11.163 +0;31.407 +0;18.451 +0;16.445 +0;18.959 +0;15.368 +0;15.423 +0;14.57 +0;17.329 +0;17.469 +0;18.591 +0;0.125 +0;5.056 +0;7.847 +0;8.79 +0;9.5 +0;9.932 +0;10.059 +0;10.03 +0;9.99 +0;9.973 +0;10.01 +0;10.104 +0;10.105 +0;10.058 +0;10.032 +0;9.796 +0;9.351 +0;9.098 +0;9.008 +0;8.855 +0;8.802 +0;8.952 +0;9.284 +0;9.541 +0;9.623 +0;9.707 +0;9.721 +0;9.81 +0;9.914 +0;9.918 +0;9.962 +0;10.082 +0;10.142 +0;10.076 +0;9.992 +0;9.959 +0;9.999 +0;10.053 +0;10.062 +0;9.69 +0;9.021 +0;8.652 +0;8.343 +0;7.994 +0;7.93 +0;8.058 +0;8.613 +0;9.161 +0;9.441 +0;9.84 +0;10.224 +0;10.437 +0;10.481 +0;10.431 +0;10.378 +0;10.4 +0;10.488 +0;10.451 +0;10.434 +0;10.42 +0;10.443 +0;10.556 +0;31.037 +0;17.935 +0;15.314 +0;16.809 +0;16.37 +0;15.488 +0;12.842 +0;14.65 +0;15.682 +0;17.94 +0;0.051 +0;4.303 +0;7.088 +0;7.696 +0;7.992 +0;8.094 +0;8.119 +0;8.239 +0;8.417 +0;8.446 +0;8.477 +0;8.503 +0;8.544 +0;8.62 +0;29.927 +0;16.56 +0;13.016 +0;13.054 +0;14.464 +0;14.454 +0;10.957 +0;11.791 +0;12.929 +0;16.046 +0;0 +0;2.37 +0;4.933 +0;5.854 +0;6.186 +0;6.307 +0;6.292 +0;6.377 +0;6.638 +0;6.818 +0;7.039 +0;7.166 +0;7.274 +0;7.504 +0;7.633 +0;6.934 +0;5.852 +0;5.731 +0;5.592 +0;5.44 +0;5.699 +0;6.552 +0;7.196 +0;7.477 +0;7.403 +0;7.123 +0;6.666 +0;6.434 +0;6.649 +0;6.815 +0;6.755 +0;6.689 +0;6.602 +0;6.521 +0;6.537 +0;6.699 +0;6.937 +0;7.308 +0;7.836 +0;8.103 +0;7.829 +0;7.489 +0;7.218 +0;6.542 +0;5.825 +0;5.753 +0;5.935 +0;6.131 +0;6.214 +0;6.249 +0;6.206 +0;6.173 +0;6.265 +0;6.544 +0;6.893 +0;7.082 +0;7.184 +0;7.187 +0;7.194 +0;7.202 +0;7.295 +0;7.587 +0;29.365 +0;15.562 +0;12.278 +0;12.578 +0;14.782 +0;14.988 +0;12.064 +0;13.317 +0;13.717 +0;16.37 +0;0.023 +0;2.665 +0;5.436 +0;6.543 +0;7.007 +0;7.481 +0;7.854 +0;8.14 +0;8.271 +0;8.373 +0;8.473 +0;8.456 +0;8.532 +0;8.898 +0;9.27 +0;9.168 +0;8.448 +0;7.49 +0;5.962 +0;6.124 +0;6.527 +0;6.9 +0;7.493 +0;8.025 +0;8.141 +0;8.193 +0;8.392 +0;8.586 +0;8.695 +0;8.835 +0;8.981 +0;9.083 +0;9.073 +0;9.012 +0;8.985 +0;9.005 +0;9.081 +0;9.343 +0;9.524 +0;9.209 +0;8.448 +0;7.508 +0;6.404 +0;6.388 +0;6.597 +0;6.864 +0;7.36 +0;7.671 +0;7.614 +0;7.721 +0;7.998 +0;8.221 +0;8.344 +0;8.452 +0;8.579 +0;8.692 +0;8.653 +0;8.576 +0;8.543 +0;8.531 +0;8.599 +0;8.845 +0;30.094 +0;16.773 +0;13.84 +0;12.877 +0;13.964 +0;14.038 +0;10.013 +0;10.242 +0;11.601 +0;15.079 +0;0.015 +0;1.518 +0;4.283 +0;5.752 +0;6.702 +0;7.846 diff --git a/GHEtool/Examples/custom_borefield_configuration.py b/GHEtool/Examples/custom_borefield_configuration.py index 2169662a..184cf04c 100644 --- a/GHEtool/Examples/custom_borefield_configuration.py +++ b/GHEtool/Examples/custom_borefield_configuration.py @@ -60,21 +60,21 @@ def custom_borefield_configuration(): borefield.create_custom_dataset() # size borefield - depth = borefield.size() - print("The borehole depth is: ", depth, "m") + length = borefield.size() + print("The borehole length is: ", length, "m") # print imbalance print("The borefield imbalance is: ", borefield.load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") # print imbalance - # plot temperature profile for the calculated depth + # plot temperature profile for the calculated borehole length borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed depth - borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) + # plot temperature profile for a fixed borehole length + borefield.print_temperature_profile_fixed_length(length=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(depth=90) + borefield.calculate_temperatures(length=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) diff --git a/GHEtool/Examples/effect_of_borehole_configuration.py b/GHEtool/Examples/effect_of_borehole_configuration.py index c61fcfaf..65a67141 100644 --- a/GHEtool/Examples/effect_of_borehole_configuration.py +++ b/GHEtool/Examples/effect_of_borehole_configuration.py @@ -22,12 +22,13 @@ def effect_borefield_configuration(): annual_cooling_load = 400 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array( + [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -40,16 +41,15 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - depth = borefield.size() - print("The borehole depth is:", depth, "m for a 11x11 field") - print("The total length is:", int(depth * 11 * 11), "m") + borehole_length = borefield.size() + print("The borehole length is:", borehole_length, "m for a 11x11 field") + print("The total borefield length is:", int(borehole_length * 11 * 11), "m") print("------------------------") - # borefield of 6x20 data = GroundConstantTemperature(3, 10) borefield_gt = gt.boreholes.rectangle_field(6, 20, 6, 6, 110, 1, 0.075) @@ -62,13 +62,13 @@ def effect_borefield_configuration(): borefield.Rb = 0.2 # size borefield - depth6_20 = borefield.size() - print("The borehole depth is:", depth6_20, "m for a 6x20 field") - print("The total length is:", int(depth6_20 * 6 * 20), "m") - print("The second field is hence", -int(depth6_20 * 6 * 20) + int(depth * 11 * 11), "m shorter") + borehole_length6_20 = borefield.size() + print("The borehole length is:", borehole_length6_20, "m for a 6x20 field") + print("The total borefield length is:", int(borehole_length6_20 * 6 * 20), "m") + print("The second field is hence", -int(borehole_length6_20 * 6 * 20) + int(borehole_length * 11 * 11), "m shorter") borefield.print_temperature_profile() -if __name__ == "__main__": # pragma: no cover +if __name__ == "__main__": # pragma: no cover effect_borefield_configuration() diff --git a/GHEtool/Examples/energy_pile.py b/GHEtool/Examples/energy_pile.py new file mode 100644 index 00000000..e6a4cfed --- /dev/null +++ b/GHEtool/Examples/energy_pile.py @@ -0,0 +1,17 @@ +import pygfunction as gt +from GHEtool import * +from GHEtool.Validation.cases import load_case + +ground_data = GroundFluxTemperature(2.08, 8.3, 2.35 * 10 ** 6, 0.07) +pipe_data = MultipleUTube(1.6, 0.0105, 0.0125, 0.48, 0.55, 3) +fluid_data = FluidData(mfr=0.2) +fluid_data.import_fluid_from_pygfunction(gt.media.Fluid('MPG', 25, 15)) + +borefield = Borefield() +borefield.ground_data = ground_data +borefield.set_pipe_parameters(pipe_data) +borefield.set_fluid_parameters(fluid_data) +borefield.create_rectangular_borefield(5, 5, 1, 1, 25, 0.8, 0.6) +borefield.load = MonthlyGeothermalLoadAbsolute(*load_case(1)) +# borefield.gfunction_calculation_object.use_cyl_correction_when_negative = False +borefield.print_temperature_profile() diff --git a/GHEtool/Examples/find_optimal_borefield.py b/GHEtool/Examples/find_optimal_borefield.py new file mode 100644 index 00000000..47ec932d --- /dev/null +++ b/GHEtool/Examples/find_optimal_borefield.py @@ -0,0 +1,137 @@ +from GHEtool import * +import optuna +import numpy as np +from functools import cache + +import pygfunction as gt + +# set general parameters +ground_data = GroundFluxTemperature(3, 10) +fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) +pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) + +load = HourlyBuildingLoad() # use SCOP of 5 for heating +load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, + separator=";", col_cooling=1, col_heating=0) + +borefield = Borefield() +borefield.set_ground_parameters(ground_data) +borefield.set_fluid_parameters(fluid_data) +borefield.set_pipe_parameters(pipe_data) +borefield.load = load +borefield.set_max_avg_fluid_temperature(20) +borefield.set_min_avg_fluid_temperature(3) + +width = 60 +length = 40 +B_min = 5 +B_max = 10 + +min_nb_x = int(width / B_max) +max_nb_x = int(width / B_min) +min_nb_y = int(length / B_max) +max_nb_y = int(length / B_min) + +print(f'Line: 1 - {max(min_nb_x, min_nb_y)} - {max(max_nb_x, max_nb_y)}') +print(f'L: 1 - {min_nb_x + min_nb_y - 1} - {max_nb_x + max_nb_y - 1}') +temp = max(max_nb_x, max_nb_y) +temp_min = min(max_nb_x, max_nb_y) +temp_max = max(temp, 2 * temp_min) +short = temp_max != temp +temp2 = max(min_nb_x, min_nb_y) +temp_min2 = min(min_nb_x, min_nb_y) +temp_max2 = max(temp, 2 * temp_min) +short2 = temp_max2 != temp2 +print( + f'U: 1 - {(temp2 if short2 else temp_min2) + 2 * (temp2 if not short2 else temp_min2) - 2} - {(temp if short else temp_min) + 2 * (temp if not short else temp_min) - 2}') +print(f'box: 1 - {min_nb_x * 2 + min_nb_y * 2 - 4} - {max_nb_x * 2 + max_nb_y * 2 - 4}') +print(f'rectangle: 1 - {min_nb_x * min_nb_y} - {max_nb_x * max_nb_y}') + +range_line_max = {} +range_line_min = {} +range_L_max = {} +range_L_min = {} +range_U_max = {} +range_U_min = {} +range_box_max = {} +range_box_min = {} +range_rectangle_max = {} +range_rectangle_min = {} + + +@cache +def line(x, y): + temp = gt.boreholes.rectangle_field(x, y, max(B_max, width / x), max(B_max, length / y), 100, 0.7, 0.07) + return len(temp), temp + + +@cache +def L(x, y): + temp = gt.boreholes.L_shaped_field(x, y, max(B_max, width / x), max(B_max, length / y), 100, 0.7, 0.07) + return len(temp), temp + + +@cache +def U(x, y): + temp = gt.boreholes.U_shaped_field(x, y, max(B_max, width / x), max(B_max, length / y), 100, 0.7, 0.07) + return len(temp), temp + + +@cache +def box(x, y): + temp = gt.boreholes.box_shaped_field(x, y, max(B_max, width / x), max(B_max, length / y), 100, 0.7, 0.07) + return len(temp), temp + + +@cache +def rectangle(x, y): + temp = gt.boreholes.rectangle_field(x, y, max(B_max, width / x), max(B_max, length / y), 100, 0.7, 0.07) + return len(temp), temp + + +for x in range(1, min_nb_x + 1): + for y in range(1, min_nb_y + 1): + range_line_max[x] = (x, 1, 'line') + range_L_max[L(x, y)[0]] = (x, y, 'L') + range_U_max[U(x, y)[0]] = (x, y, 'U') + range_box_max[box(x, y)[0]] = (x, y, 'box') + range_rectangle_max[rectangle(x, y)[0]] = (x, y, 'rect') + +for x in range(1, max_nb_x + 1): + for y in range(1, max_nb_y + 1): + range_line_min[x] = (x, 1, 'line') + range_L_min[L(x, y)[0]] = (x, y, 'L') + range_U_min[U(x, y)[0]] = (x, y, 'U') + range_box_min[box(x, y)[0]] = (x, y, 'box') + range_rectangle_min[rectangle(x, y)[0]] = (x, y, 'rect') + +range_to_optimise = [range_line_max, range_line_min, range_L_max, range_L_min, range_U_max, range_U_min, + range_box_max, range_box_min, range_rectangle_max, range_rectangle_min] + + +@cache +def size(x, y, form): + if form == 'line': + borefield.borefield = line(x, y)[1] + elif form == 'U': + borefield.borefield = U(x, y)[1] + elif form == 'L': + borefield.borefield = L(x, y)[1] + elif form == 'box': + borefield.borefield = box(x, y)[1] + else: + borefield.borefield = rectangle(x, y)[1] + try: + depth = borefield.size_L3() + except: + depth = np.nan + return depth + + +for range in range_to_optimise: + for config in range: + x, y, form = range[config] + + depth = size(x, y, form) + print(f'{range[config]} - {config} - {depth * config:.2f}m') + range[config] = depth * x * y diff --git a/GHEtool/Examples/main_functionalities.py b/GHEtool/Examples/main_functionalities.py index d4a6ce05..40b3dcce 100644 --- a/GHEtool/Examples/main_functionalities.py +++ b/GHEtool/Examples/main_functionalities.py @@ -56,21 +56,21 @@ def main_functionalities(): borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size borefield - depth = borefield.size() - print("The borehole depth is: ", depth, "m") + length = borefield.size() + print("The borehole length is: ", length, "m") # print imbalance print("The borefield imbalance is: ", borefield._borefield_load.imbalance, "kWh/y. (A negative imbalance means the the field is heat extraction dominated so it cools down year after year.)") - # plot temperature profile for the calculated depth + # plot temperature profile for the calculated borehole length borefield.print_temperature_profile(legend=True) - # plot temperature profile for a fixed depth - borefield.print_temperature_profile_fixed_depth(depth=75, legend=False) + # plot temperature profile for a fixed borehole length + borefield.print_temperature_profile_fixed_length(length=75, legend=False) # print gives the array of monthly temperatures for peak cooling without showing the plot - borefield.calculate_temperatures(depth=90) + borefield.calculate_temperatures(length=90) print("Result array for cooling peaks") print(borefield.results.peak_injection) print("---------------------------------------------") diff --git a/GHEtool/Examples/multiple_ground_layers.py b/GHEtool/Examples/multiple_ground_layers.py index a0386b7a..9db3e034 100644 --- a/GHEtool/Examples/multiple_ground_layers.py +++ b/GHEtool/Examples/multiple_ground_layers.py @@ -5,6 +5,7 @@ from GHEtool import * from GHEtool.Validation.cases import load_case + def multiple_ground_layers(): # initiate borefield model borefield = Borefield() @@ -31,10 +32,12 @@ def multiple_ground_layers(): # size borefield according to the two different ground data variables borefield.ground_data = constant_ks - print(f'The required borehole depth is {borefield.size():.3f}m if you use a constant approximation for the ground conductivity.') + print( + f'The required borehole length is {borefield.size():.3f}m if you use a constant approximation for the ground conductivity.') borefield.ground_data = layered_ground - print(f'The required borehole depth is {borefield.size():.3f}m if you use a detailed ground model with multiple layers.') + print( + f'The required borehole length is {borefield.size():.3f}m if you use a detailed ground model with multiple layers.') if __name__ == "__main__": # pragma: no cover diff --git a/GHEtool/Examples/optimise_load_profile_extra.py b/GHEtool/Examples/optimise_load_profile_extra.py new file mode 100644 index 00000000..f14db8bd --- /dev/null +++ b/GHEtool/Examples/optimise_load_profile_extra.py @@ -0,0 +1,47 @@ +""" +This document is an example of load optimisation. +First an hourly profile is imported and a fixed borefield size is set. +Then, based on a load-duration curve, the heating and cooling load is altered in order to fit as much load as possible on the field. +The results are returned. + +""" +import numpy as np + +from GHEtool import * + + +def optimise(): + data = GroundFluxTemperature(1.8, 9.7, flux=0.08) + borefield = Borefield() + borefield.set_ground_parameters(data) + borefield.Rb = 0.131 + borefield.create_rectangular_borefield(3, 5, 6, 6, 100, 1, 0.07) + load = HourlyBuildingLoad(efficiency_heating=4.5, efficiency_cooling=20) + load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, separator=";", + col_cooling=0, col_heating=1) + import matplotlib.pyplot as plt + + # plt.figure() + # plt.plot(load.hourly_cooling_load_simulation_period) + # plt.plot(load.hourly_heating_load_simulation_period) + # plt.show() + # borefield.calculate_temperatures() + # borefield.print_temperature_profile(plot_hourly=False) + # optimise the load for a 10x10 field (see data above) and a fixed length of 150m. + # first for an optimisation based on the power + borefield.optimise_load_profile_energy(building_load=load, length=100) + + print(f'Max heating power (primary): {borefield.load.max_peak_extraction:,.0f}kW') + print(f'Max cooling power (primary): {borefield.load.max_peak_injection:,.0f}kW') + + print( + f'Total energy extracted from the borefield over simulation period: {np.sum(borefield.load.monthly_baseload_extraction_simulation_period):,.0f}MWh') + print( + f'Total energy injected in the borefield over simulation period): {np.sum(borefield.load.monthly_baseload_injection_simulation_period):,.0f}MWh') + print('------------------------------------------------------------------------') + borefield.calculate_temperatures(hourly=False) + borefield.print_temperature_profile(plot_hourly=False) + + +if __name__ == "__main__": # pragma: no cover + optimise() diff --git a/GHEtool/Examples/pipe.py b/GHEtool/Examples/pipe.py new file mode 100644 index 00000000..a6792af1 --- /dev/null +++ b/GHEtool/Examples/pipe.py @@ -0,0 +1,26 @@ +import pygfunction as gt +from GHEtool import * + +# pipe = gt.pipes.MultipleUTube(self.pos, 0.013, 0.016, borehole, k_s, self.k_g, +# self.R_p + self.R_f, self.number_of_pipes, J=2) + +mfr = 0.65 * 1034 / 1000 # kg/s +Cp = 3855 +temp = mfr * Cp # W/K + +lam = temp * 0.056 / 3.75 +turb = temp * 0.16 / 3.22 +print(lam, turb) + +print(gt.media.Fluid('MPG', 25, -5)) + +pipe = MultipleUTube(1.5, 0.045 / 2 - 0.0015, 0.045 / 2, 0.4, 0.04, 1) +fluid = FluidData(mfr, 0.417, 1034, 3855, 8.12 * 0.001) +borehole = Borehole(fluid, pipe) +print('pyg', borehole.calculate_Rb(100, 1, 0.07, 2)) +borehole.pipe_data.R_f = 1 / lam +print(borehole.Re) +print('smooth', borehole.calculate_Rb(100, 1, 0.07, 2)) + +borehole.pipe_data.R_f = 1 / turb +print('turbo', borehole.calculate_Rb(100, 1, 0.07, 2)) diff --git a/GHEtool/Examples/readkml.py b/GHEtool/Examples/readkml.py new file mode 100644 index 00000000..7054f8d3 --- /dev/null +++ b/GHEtool/Examples/readkml.py @@ -0,0 +1,4 @@ +import geotable + +t = geotable.load('HF_14obs.kmz') +print(t) diff --git a/GHEtool/Examples/regex.py b/GHEtool/Examples/regex.py new file mode 100644 index 00000000..8a27a081 --- /dev/null +++ b/GHEtool/Examples/regex.py @@ -0,0 +1,22 @@ +import pygfunction as gt + +per = 10 + + +# for per in range(1, 60): +# mpg = gt.media.Fluid('MEG', per, 15) +# water = gt.media.Fluid('Water', 0, 15) +# +# total_mass = mpg.rho +# mass_mpg = (total_mass - water.rho * (100 - per) / 100) / per * 100 +# +# print(f'{per}%: {mass_mpg}') + + +def convert_mass_per_to_vol_per(per): + antifrost = gt.media.Fluid('MEG', per, 15) + water = gt.media.Fluid('Water', 0, 15) + total_mass = antifrost.rho + mass_density_antifrost = (total_mass - water.rho * (100 - per) / 100) / per * 100 + + return per * mass_density_antifrost / (999.0996087908144 * (100 - per) + mass_density_antifrost * per) * 100 diff --git a/GHEtool/Examples/separatus.py b/GHEtool/Examples/separatus.py index 27c15329..08fc388f 100644 --- a/GHEtool/Examples/separatus.py +++ b/GHEtool/Examples/separatus.py @@ -2,7 +2,7 @@ This file contains a design example with the Separatus probe, in comparison with a single and double U-tube. A borehole diameter of DN90 was chosen for the Separatus probe whereas for the single and double U-tube a DN140 was assumed. A mass flow rate of 0.3 kg/s was assumed for all cases and no glycol was taken into account. -The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a depth of 110m. +The grout thermal conductivity is 2 W/(mK), and the borehole dimensions where 1x4 with a borehole length of 110m. The building heating and cooling demand was obtained from a residential building in Belgium. It is shown that both single U and Separatus have similar performance, whilst the double U-tube has a somewhat better diff --git a/GHEtool/Examples/sizing_with_Rb_calculation.py b/GHEtool/Examples/sizing_with_Rb_calculation.py index 955d58a8..9b7f8e05 100644 --- a/GHEtool/Examples/sizing_with_Rb_calculation.py +++ b/GHEtool/Examples/sizing_with_Rb_calculation.py @@ -2,7 +2,7 @@ This document compares the sizing with a constant Rb*-value with sizing where the Rb*-value is being recalculated. For the test, the L2 sizing method is used. The comparison is based on speed and relative accuracy in the result. -It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial depth is rather accurate. +It is shown that the speed difference is significant, but so is the difference in the result. With a constant Rb* value, it is important that the initial borehole length is rather accurate. """ import time @@ -37,7 +37,8 @@ def sizing_with_Rb(): peak_load_heating_array[i, j] = np.random.randint(monthly_load_heating_array[i, j], max_value_heating) # initiate borefield model - data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the depth of the borefield + data = GroundConstantTemperature(3, + 10) # ground data with an inaccurate guess of 100m for the borehole length of the borefield fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) @@ -52,12 +53,13 @@ def sizing_with_Rb(): annual_cooling_load = 160 * 10 ** 3 # kWh # percentage of annual load per month (15.5% for January ...) - monthly_load_heating_percentage = np.array([0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) + monthly_load_heating_percentage = np.array( + [0.155, 0.148, 0.125, .099, .064, 0., 0., 0., 0.061, 0.087, 0.117, 0.144]) monthly_load_cooling_percentage = np.array([0.025, 0.05, 0.05, .05, .075, .1, .2, .2, .1, .075, .05, .025]) # resulting load per month - monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh - monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh + monthly_load_heating = annual_heating_load * monthly_load_heating_percentage # kWh + monthly_load_cooling = annual_cooling_load * monthly_load_cooling_percentage # kWh # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating, monthly_load_cooling, peak_heating, peak_cooling) @@ -75,8 +77,8 @@ def sizing_with_Rb(): borefield.create_custom_dataset() # set temperature boundaries - borefield.set_max_avg_fluid_temperature(16) # maximum temperature - borefield.set_min_avg_fluid_temperature(0) # minimum temperature + borefield.set_max_avg_fluid_temperature(16) # maximum temperature + borefield.set_min_avg_fluid_temperature(0) # minimum temperature # size with constant Rb* value borefield.calculation_setup(use_constant_Rb=True) @@ -88,7 +90,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_static[i] = borefield.size() end_Rb_constant = time.time() @@ -100,7 +102,7 @@ def sizing_with_Rb(): for i in range(number_of_iterations): # set the load load = MonthlyGeothermalLoadAbsolute(monthly_load_heating_array[i], monthly_load_cooling_array[i], - peak_load_heating_array[i], peak_load_cooling_array[i]) + peak_load_heating_array[i], peak_load_cooling_array[i]) borefield.load = load results_Rb_dynamic[i] = borefield.size() end_Rb_dynamic = time.time() @@ -114,13 +116,20 @@ def sizing_with_Rb(): for i in range(number_of_iterations): difference_results[i] = results_Rb_dynamic[i] - results_Rb_static[i] - print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.max(difference_results), 3), "m or", np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), "% w.r.t. the constant Rb* approach.") - print("The mean difference between the sizing with a constant and a dynamic Rb* value:", np.round(np.mean(difference_results), 3), "m or", np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), "% w.r.t. the constant Rb* approach.") + print("The maximal difference between the sizing with a constant and a dynamic Rb* value:", + np.round(np.max(difference_results), 3), "m or", + np.round(np.max(difference_results) / results_Rb_static[np.argmax(difference_results)] * 100, 3), + "% w.r.t. the constant Rb* approach.") + print("The mean difference between the sizing with a constant and a dynamic Rb* value:", + np.round(np.mean(difference_results), 3), "m or", + np.round(np.mean(difference_results) / np.mean(results_Rb_static) * 100, 3), + "% w.r.t. the constant Rb* approach.") print("------------------------------------------------------------------------------") - # Do the same thing but with another constant Rb* value based on a borehole depth of 185m. + # Do the same thing but with another constant Rb* value based on a borehole length of 185m. - borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, 0.075) # borefield with an accurate guess of 185m for the depth of the borefield + borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 185, 1, + 0.075) # borefield with an accurate guess of 185m for the borehole length borefield.set_borefield(borefield_gt) # size with a constant Rb* value diff --git a/GHEtool/Examples/sizing_with_building_load.py b/GHEtool/Examples/sizing_with_building_load.py index 3450d9f8..2efbb397 100644 --- a/GHEtool/Examples/sizing_with_building_load.py +++ b/GHEtool/Examples/sizing_with_building_load.py @@ -31,7 +31,7 @@ def size_with_scop() -> Tuple[float, float]: Returns ------- Depth : float - Required borehole depth + Required borehole length """ scop = SCOP(4.5) seer = SEER(1000) @@ -52,11 +52,11 @@ def size_with_scop() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) - print(f'When sizing with a constant SCOP, the required borehole depth is {depth:.2f}m. The SCOP (incl. DHW) is ' + length = borefield.size_L3(100) + print(f'When sizing with a constant SCOP, the required borehole length is {length:.2f}m. The SCOP (incl. DHW) is ' f'{borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total def size_with_variable_ground_temperature() -> Tuple[float, float]: @@ -66,7 +66,7 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: Returns ------- Depth : float - Required borehole depth + Required borehole length """ seer = SEER(1000) cop = COP(np.array([3.76, 4.25, 4.79, 5.34, 5.74]), np.array([-5, 0, 5, 10, 15])) @@ -87,11 +87,11 @@ def size_with_variable_ground_temperature() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) - print(f'When sizing with a inlet temperature dependent COP, the required borehole depth is {depth:.2f}m. ' + length = borefield.size_L3(100) + print(f'When sizing with a inlet temperature dependent COP, the required borehole length is {length:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total def size_with_part_load_data() -> Tuple[float, float]: @@ -101,7 +101,7 @@ def size_with_part_load_data() -> Tuple[float, float]: Returns ------- Depth : float - Required borehole depth + Required borehole length """ seer = SEER(1000) cop = COP(np.array( @@ -136,12 +136,12 @@ def size_with_part_load_data() -> Tuple[float, float]: borefield.create_rectangular_borefield(3, 14, 7, 7, 94, r_b=0.0655) - depth = borefield.size_L3(100) + length = borefield.size_L3(100) print( - f'When sizing with a inlet temperature and part-load dependent COP, the required borehole depth is {depth:.2f}m. ' + f'When sizing with a inlet temperature and part-load dependent COP, the required borehole length is {length:.2f}m. ' f'The SCOP (incl. DHW) is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_total + return length, borefield.load.SCOP_total if __name__ == "__main__": diff --git a/GHEtool/Examples/sizing_with_building_load_hourly.py b/GHEtool/Examples/sizing_with_building_load_hourly.py index 691c6566..f7e1ae8a 100644 --- a/GHEtool/Examples/sizing_with_building_load_hourly.py +++ b/GHEtool/Examples/sizing_with_building_load_hourly.py @@ -29,7 +29,7 @@ def L3_sizing() -> Tuple[float, float]: Returns ------- - depth, SCOP + length, SCOP """ # initiate borefield borefield = Borefield() @@ -53,12 +53,12 @@ def L3_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - depth = borefield.size(100, L3_sizing=True) + length = borefield.size(100, L3_sizing=True) print( - f'When sizing with an L3 method, the required borehole depth is {depth:.2f}m. ' + f'When sizing with an L3 method, the required borehole length is {length:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile() - return depth, borefield.load.SCOP_heating + return length, borefield.load.SCOP_heating def L4_sizing() -> Tuple[float, float]: @@ -67,7 +67,7 @@ def L4_sizing() -> Tuple[float, float]: Returns ------- - depth, SCOP + length, SCOP """ # initiate borefield borefield = Borefield() @@ -91,12 +91,12 @@ def L4_sizing() -> Tuple[float, float]: borefield.load = load # size the borefield and plot the resulting temperature evolution - depth = borefield.size(100, L4_sizing=True) + length = borefield.size(100, L4_sizing=True) print( - f'When sizing with an L4 method, the required borehole depth is {depth:.2f}m. ' + f'When sizing with an L4 method, the required borehole length is {length:.2f}m. ' f'The SCOP is {borefield.load.SCOP_total:.2f}.') borefield.print_temperature_profile(plot_hourly=True) - return depth, borefield.load.SCOP_heating + return length, borefield.load.SCOP_heating if __name__ == "__main__": diff --git a/GHEtool/Examples/start_in_different_month.py b/GHEtool/Examples/start_in_different_month.py index 503f3db4..abed5e6a 100644 --- a/GHEtool/Examples/start_in_different_month.py +++ b/GHEtool/Examples/start_in_different_month.py @@ -22,20 +22,20 @@ def start_in_different_month(): borefield.set_min_avg_fluid_temperature(3) borefield.calculation_setup(max_nb_of_iterations=100) - depth_list = [] + length_list = [] # iterate over all the start months for month in range(1, 13, 1): borefield.load.start_month = month - depth_list.append(borefield.size_L3()) + length_list.append(borefield.size_L3()) plt.figure() - plt.bar(range(1, 13, 1), depth_list) - plt.ylabel('Required depth [m]') + plt.bar(range(1, 13, 1), length_list) + plt.ylabel('Required borehole length [m]') plt.xlabel('First month of operation') plt.xlim(0) plt.ylim(0) - plt.title('Required depth as a function of the first month of operation') + plt.title('Required borehole length as a function of the first month of operation') plt.show() diff --git a/GHEtool/Examples/temp.py b/GHEtool/Examples/temp.py new file mode 100644 index 00000000..f25ea2a2 --- /dev/null +++ b/GHEtool/Examples/temp.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +import numpy as np +import matplotlib.pyplot as plt + +import pygfunction as gt + + +def main(): + # ------------------------------------------------------------------------- + # Simulation parameters + # ------------------------------------------------------------------------- + + # Borehole dimensions + D = .8 # Borehole buried length (m) + H = 25 # Borehole length (m) + r_b = 0.6 # Borehole radius (m) + B = 2.0 # Borehole spacing (m) + + # Field of 10x7 (n=70) boreholes + N_1 = 10 + N_2 = 7 + field = gt.boreholes.rectangle_field(N_1, N_2, B, B, H, D, r_b) + + # Thermal properties + alpha = 2e-7 # Ground thermal diffusivity (m2/s) + + options_noCorrection = { + 'cylindrical_correction': False, + 'linear_threshold': 24 * 3600.} + options_withCorrection = { + 'cylindrical_correction': True, + 'linear_threshold': 0.} + + # Geometrically expanding time vector. + ts = H ** 2 / (9. * alpha) # Bore field characteristic time + # dt = 3600. # Time step + # tmax = ts * np.exp(5) # Maximum time + # Nt = 50 # Number of time steps + # time = gt.utilities.time_geometric(dt, tmax, Nt) + time = gt.load_aggregation.ClaessonJaved(3600, 3600 * 8760 * 20).get_times_for_simulation() + lntts = np.log(time / ts) + + # ------------------------------------------------------------------------- + # Evaluate g-functions + # ------------------------------------------------------------------------- + gfunc_noCorrection = gt.gfunction.gFunction( + field, alpha, time=time, options=options_noCorrection, + method='equivalent') + gfunc_withCorrection = gt.gfunction.gFunction( + field, alpha, time=time, options=options_withCorrection, + method='equivalent') + + # Draw g-function + ax = gfunc_noCorrection.visualize_g_function().axes[0] + ax.plot(lntts, gfunc_withCorrection.gFunc) + ax.legend(['Linear threshold', + 'Cylindrical correction', ]) + ax.set_title(f'Field of {len(field)} boreholes') + plt.tight_layout() + + # Draw difference + + # Configure figure and axes + fig = gt.utilities._initialize_figure() + ax = fig.add_subplot(111) + # Axis labels + ax.set_xlabel(r'ln(t/t_s)') + ax.set_ylabel(r'difference') + gt.utilities._format_axes(ax) + # Plot difference + ax.plot(lntts, gfunc_withCorrection.gFunc) + ax.set_title('Difference between g-functions') + # Adjust to plot window + plt.tight_layout() + plt.show() + + +# Main function +if __name__ == '__main__': + main() diff --git a/GHEtool/temp.py b/GHEtool/temp.py new file mode 100644 index 00000000..1e6b8f7f --- /dev/null +++ b/GHEtool/temp.py @@ -0,0 +1,525 @@ +array_of_objects = [{ + "to": "nicholas.fry@jacobs.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n

\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Nicolas Fry,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "sander.naessens@ingenium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sander Naessens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "frederik.simon01@stud.uni-goettingen.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Frederik Simon,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "gert.dewandeleer@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gert De Wandeleer,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "renee.cools@b2ai.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Renee Cools,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "haksax26@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Håkon Saxrud,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "david.wolfesberger@e-sieben.at", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear David Wolfesberger,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "luc.burte@dalkia.fr", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Luc Burte,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "jarrid.wittocx@hotmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jarrid Wittocx,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "stig.knapen@seds.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Stig Knapen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "dirk.brinchau@vub.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dirk Brinchau,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "kancev@t-online.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Peter Kancev,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "sabrina@ikpbvba.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sabrina Gaens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "ruben@vdbengineering.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ruben Vanneste,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "willem.mazzotti@bengtdahlgren.se", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Willem Mazzotti Pallard,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "ireneusz.zmuda@pk.edu.pl", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ireneusz Zmuda,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "maragomez05@outlook.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mara Gomez,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "valerie.h@atelier-t.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Valérie Hermans,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "fbruurs@skynet.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Friso Bruurs,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "kyra.boege@getec.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kyra Böge,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "ruben.debleser@swecobelgium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ruben De Bleser,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "simon.baecke@emaze.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Simon Baecke,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "andfje10@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Fjellstad,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "lucas@vdbengineering.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lucas Bessems,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "viktor.hemgren@energymachines.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Viktor Hemgren,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "dietmar.alge@algeo.ch", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dietmar Alge,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": " antoinecartuyvels@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Antoine Cartuyvels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "johannes.rupfle@evety.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Johannes Rupfle,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "eleonore.castro@swecobelgium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Eléonore Castro,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "erlrye17@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Erlend Ryen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "silvanbernal@outlook.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Silvan Bernal,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "stephanie@backx.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear stephanie van der velden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "tob@bmengineering.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tom Breemeersch,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "susanna.harutyunyan@mil.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Susanna Harutyunyan,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "charlotte.delhuvenne@tractebel.engie.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Charlotte Delhuvenne,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "michiel@blockenengineering.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Michiel Blocken,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "sebastien.mouthuy@gemel.io", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sébastien Mouthuy,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "roylid02@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roy Lid,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "nick@aeplus.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Nick Breugelmans,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "jochen.huber@bfm-umwelt.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jochen Huber,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "samnzi15@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Samukelo Nzimande,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "lasse.thomsen@numerous.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lasse Thomsen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "wannes@vdbengineering.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Wannes Van den Branden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "brunohuyvaert@icloud.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Huyvaert Bruno,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "helena.bogaerts@arcadis.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Helena Bogaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "xandro.vantieghem@telenet.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Xandro Vantieghem,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "tuur.snauwaert@mil.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tuur Snauwaert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "maraghe92@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mara Ghe,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "casper.devrieze@smeyersnv.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Casper De Vrieze,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "werner.goris@studie10.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear werner Goris,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "sigvon22@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sigurd Von Schantz,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "torstein@zconsult.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Torstein Hofvind Solhaug,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "tim.rombouts@ingenium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tim Rombouts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "mona.aly@teracloud.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mona Aly,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "marbra23@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Martin Bråten Torseth,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "morbendave@btinternet.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear David Roberts ,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "kaijaleena.manner@sweco.se", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kaijaleena Manner,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "fmeggers@princeton.edu", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Forrest Meggers,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "robert.padgett@denvergov.org", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Robert Padgett,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "alessio.vantieghem@ingenium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Alessio Vantieghem,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "steven@moensbvba.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Steven Van den Branden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "franzjosef-quadflieg@florack.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Franz-Jozef,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "tassosh@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tassos Hourmouziadis,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "michiel@vdbengineering.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear michiel fouquaert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "roglie03@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roger Lie,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "energy@optimized.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ivan Piette,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "kevin@sbkennis.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kevin Grandjean,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "stijn.weygaerts@kbc.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Stijn Weygaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "geotechnik.eenergie@dr-spang.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Max Kewel,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "gert.kaminski@h2d.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gert Kaminski,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "dirk.brichau@vub.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dirk Brichau,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "info@fransenboringen.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear KENNETH FRANSEN,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "gwen@backx.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gwen Backx,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "jeffrey.beens@smeyersnv.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jeffrey Beens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "bart.vanreeth@arcade-eng.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bart Van Reeth,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "Paul.Fleuchaus@tewag.de", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Paul Fleuchaus,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "lone.meertens@kuleuven.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lone Meertens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "tobia.baert@geo-thermics.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tobia Baert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "arno.marechal@swecobelgium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Arno Marechal,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "kamiel.kenis@student.kuleuven.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kamiel Kenis,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "roel@non.energy", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roel Vaneeckhout,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "jargje15@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear jardar gjertsen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "awais.aali@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Awais Ali,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "oddtho26@fs-innlandet.no", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Oddgeir Thorgeirsson,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "thomas.vanermen@democo.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear thomas vanermen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "evertz@aon.at", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Hans Evertz,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "wouter.peere@enead.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Wouter Peere,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "thomas.moerman@emaze.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear thomas Moerman,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "serge.n-kisema@vinci-facilities.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Serge Ndosimau-Kisema,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "ewout.depetter@student.kuleuven.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ewout De Petter,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "seppe.cuylaerts@kelvinsolutions.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Seppe Cuylaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "vincent@vdbengineering.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Vincent Beckers,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "sandyraimondi@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sandy Raimondi,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "emma.michiels@swecobelgium.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Emma Michiels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "bert.michiels@comtis.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bert Michiels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "hinde.elkassmi@equans.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear hinde el kassmi,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "bjornportier@gmail.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bjorn Portier,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "r.sebrechts@botec.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Raf Sebrechts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "dennis.vanoverschelde@tractebel.engie.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dennis Van Overschelde,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}, { + "to": "euro.ing@andreas-schiller.com", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Schiller,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}] + +import resend +from bs4 import BeautifulSoup +from typing import List + +resend.api_key = "re_7YyWQLDU_5g48dNqcZNwSeEBj2JFicBtW" + +params: List[resend.Emails.SendParams] = [{ + "to": "wouter.peere@enead.be", + "from": "GHEtool Cloud ", + "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Schiller,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", + "subject": "Newsletter GHEtool Cloud" +}] + +# Read and parse the HTML document +with open('20241220.html', "r", encoding="utf-8") as html_file: + html_content = html_file.read() + soup = BeautifulSoup(html_content, "html.parser") + +# Replace 'other_attr' in each object with the parsed HTML content +for obj in params: + obj['html'] = str(soup).replace('{{name}}', obj['name']) + +resend.Batch.send(params) diff --git a/GHEtool/test/methods/test_methods.py b/GHEtool/test/methods/test_methods.py index ade3fbc6..26939fe3 100644 --- a/GHEtool/test/methods/test_methods.py +++ b/GHEtool/test/methods/test_methods.py @@ -65,12 +65,12 @@ def test_optimise(input, result): np.sum(load.hourly_heating_load_simulation_period) * 100 _percentage_injection = np.sum(borefield_load.hourly_cooling_load_simulation_period) / \ np.sum(load.hourly_cooling_load_simulation_period) * 100 - print(_percentage_extraction) - print(_percentage_injection) - print(borefield_load.max_peak_extraction) - print(borefield_load.max_peak_injection) - print(external_load.max_peak_heating) - print(external_load.max_peak_cooling) + # print(_percentage_extraction) + # print(_percentage_injection) + # print(borefield_load.max_peak_extraction) + # print(borefield_load.max_peak_injection) + # print(external_load.max_peak_heating) + # print(external_load.max_peak_cooling) assert np.isclose(_percentage_extraction, percentage_extraction) assert np.isclose(_percentage_injection, percentage_injection) assert np.isclose(borefield_load.max_peak_extraction, peak_extraction_geo) diff --git a/GHEtool/test/unit-tests/test_main_class.py b/GHEtool/test/unit-tests/test_main_class.py index 753a2749..993f8386 100644 --- a/GHEtool/test/unit-tests/test_main_class.py +++ b/GHEtool/test/unit-tests/test_main_class.py @@ -164,15 +164,15 @@ def test_update_depth(): init_H = borefield.borefield[0].H borefield.H = init_H + 1 - borefield._update_borefield_depth(20) + borefield.H = 20 for bor in borefield.borefield: assert bor.H == 20 - borefield._update_borefield_depth(init_H + 2) + borefield.H = init_H + 2 for bor in borefield.borefield: assert bor.H == init_H + 2 - borefield._update_borefield_depth(init_H + 2) + borefield.H = init_H + 2 for bor in borefield.borefield: assert bor.H == init_H + 2 @@ -832,7 +832,7 @@ def test_gfunction_with_irregular_depth(): borefield.borefield = temp assert borefield.H == 100 g_values = borefield.gfunction([6000, 60000, 600000]) - borefield._update_borefield_depth(100) + borefield.H = 100 assert not np.array_equal(borefield.gfunction([6000, 60000, 600000]), g_values) borefield = Borefield() @@ -1138,7 +1138,8 @@ def test_repr_(): assert 'Maximum average fluid temperature [°C]: 16.0\n' \ 'Minimum average fluid temperature [°C]: 0.0\n' \ 'Average buried depth [m]: 4.0\n' \ - 'Average borehole depth [m]: 110.0\n' \ + 'Average borehole length [m]: 110.0\n' \ + 'Average borehole depth [m]: 114.0\n' \ 'Borehole diameter [mm]: 150\n' \ 'Number of boreholes [-]: 120\n' \ 'Constant ground temperature\n' \ From 76190c5d3a9fe1c7131b83e6c4912e80de72dce5 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 13:53:24 +0100 Subject: [PATCH 13/18] Change terminology in validation --- .../sizing_method_comparison_L2_L3_L4.py | 14 ++++----- GHEtool/Validation/speed_comparison.py | 12 +++---- GHEtool/Validation/validate_deep_sizing.py | 31 ++++++++++--------- ...n_effective_borehole_thermal_resistance.py | 10 +++--- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/GHEtool/Validation/sizing_method_comparison_L2_L3_L4.py b/GHEtool/Validation/sizing_method_comparison_L2_L3_L4.py index bc8edd02..ab6efabe 100644 --- a/GHEtool/Validation/sizing_method_comparison_L2_L3_L4.py +++ b/GHEtool/Validation/sizing_method_comparison_L2_L3_L4.py @@ -36,28 +36,28 @@ def compare(): ### size the borefield # according to L2 L2_start = time.time() - depth_L2 = borefield.size(100, L2_sizing=True) + length_L2 = borefield.size(100, L2_sizing=True) L2_stop = time.time() # according to L3 L3_start = time.time() - depth_L3 = borefield.size(100, L3_sizing=True) + length_L3 = borefield.size(100, L3_sizing=True) L3_stop = time.time() # according to L4 L4_start = time.time() - depth_L4 = borefield.size(100, L4_sizing=True) + length_L4 = borefield.size(100, L4_sizing=True) L4_stop = time.time() ### print results - print("The sizing according to L2 took", round((L2_stop-L2_start) * 1000, 4), "ms and was", depth_L2, "m.") - print("The sizing according to L3 took", round((L3_stop-L3_start) * 1000, 4), "ms and was", depth_L3, "m.") - print("The sizing according to L4 took", round((L4_stop-L4_start) * 1000, 4), "ms and was", depth_L4, "m.") + print("The sizing according to L2 took", round((L2_stop - L2_start) * 1000, 4), "ms and was", length_L2, "m.") + print("The sizing according to L3 took", round((L3_stop - L3_start) * 1000, 4), "ms and was", length_L3, "m.") + print("The sizing according to L4 took", round((L4_stop - L4_start) * 1000, 4), "ms and was", length_L4, "m.") borefield.load.plot_load_duration() borefield.print_temperature_profile(plot_hourly=True) -if __name__ == '__main__': # pragma: no cover +if __name__ == '__main__': # pragma: no cover compare() diff --git a/GHEtool/Validation/speed_comparison.py b/GHEtool/Validation/speed_comparison.py index bb88b3c5..e5b84421 100644 --- a/GHEtool/Validation/speed_comparison.py +++ b/GHEtool/Validation/speed_comparison.py @@ -49,7 +49,7 @@ def test_64_boreholes(): # size borefield t1 = time.time() - depth_precalculated = borefield.size() + length_precalculated = borefield.size() t1_end = time.time() # delete precalculated data @@ -57,13 +57,13 @@ def test_64_boreholes(): ### size without the precalculation t2 = time.time() - depth_calculated = borefield.size() + length_calculated = borefield.size() t2_end = time.time() print("With precalculated data, the sizing took", round(t1_end - t1, 3), "s for 64 boreholes.") print("Without the precalculated data, the sizing took", round(t2_end - t2, 3), "s for 64 boreholes.") print("The difference in accuracy between the two results is", - round((depth_calculated - depth_precalculated) / depth_calculated * 100, 3), "%.") + round((length_calculated - length_precalculated) / length_calculated * 100, 3), "%.") def test_10_boreholes(): @@ -105,7 +105,7 @@ def test_10_boreholes(): # size borefield t1 = time.time() - depth_precalculated = borefield.size() + length_precalculated = borefield.size() t1_end = time.time() # delete precalculated data @@ -113,13 +113,13 @@ def test_10_boreholes(): ### size without the precalculation t2 = time.time() - depth_calculated = borefield.size() + length_calculated = borefield.size() t2_end = time.time() print("With precalculated data, the sizing took", round(t1_end - t1, 3), "s for 10 boreholes.") print("Without the precalculated data, the sizing took", round(t2_end - t2, 3), "s for 10 boreholes.") print("The difference in accuracy between the two results is", - round((depth_calculated-depth_precalculated) / depth_calculated * 100, 3), "%.\n") + round((length_calculated - length_precalculated) / length_calculated * 100, 3), "%.\n") if __name__ == "__main__": # pragma: no cover diff --git a/GHEtool/Validation/validate_deep_sizing.py b/GHEtool/Validation/validate_deep_sizing.py index 3c71008b..cb92f778 100644 --- a/GHEtool/Validation/validate_deep_sizing.py +++ b/GHEtool/Validation/validate_deep_sizing.py @@ -1,10 +1,10 @@ """ This file contains the reasoning behind the sizing method when the field is limited by injection (i.e. cooling) and there is a non-constant ground temperature. This is based on the assumption that the difference between the -maximum peak temperature in injection and the average, undistrubed ground temperature scales like 1/depth. +maximum peak temperature in injection and the average, undistrubed ground temperature scales like 1/borehole length. This can be understood since the main contributor to the peak temperature is the peak load, which, in the sizing, -is expressed as a load per meter (W/m), so it scales like 1/depth. +is expressed as a load per meter (W/m), so it scales like 1/borehole length. """ from GHEtool import * @@ -34,12 +34,13 @@ def validate(): # initiate lists Tg_list = [] max_Tf_list = [] - depth_list = range(20, 450, 20) + length_list = range(20, 450, 20) - for depth in depth_list: - print(f'The current depth is {depth} m.') - borefield.calculate_temperatures(depth) - Tg_list.append(borefield.ground_data.calculate_Tg(depth)) + for length in length_list: + print(f'The current borehole length is {length} m.') + borefield.calculate_temperatures(length) + Tg_list.append( + borefield.ground_data.calculate_Tg(length + borefield.D, borefield.D)) # assume vertical boreholes max_Tf_list.append(np.max(borefield.results.peak_injection)) def f(x, a, b): @@ -49,22 +50,22 @@ def f(x, a, b): diff = np.array(max_Tf_list) - np.array(Tg_list) # fit to curve - popt, pcov = curve_fit(f, depth_list, diff) + popt, pcov = curve_fit(f, length_list, diff) print(popt, pcov) plt.figure() - plt.plot(depth_list, Tg_list, label='Ground') - plt.plot(depth_list, max_Tf_list, label='Fluid') - plt.hlines(borefield.Tf_max, 0, depth_list[-1], label='Maximum temperature limit') - plt.xlabel('Depth [m]') + plt.plot(length_list, Tg_list, label='Ground') + plt.plot(length_list, max_Tf_list, label='Fluid') + plt.hlines(borefield.Tf_max, 0, length_list[-1], label='Maximum temperature limit') + plt.xlabel('Borehole length [m]') plt.ylabel('Temperature [deg C]') plt.legend() # plt.show() plt.figure() - plt.plot(depth_list, diff, label='Actual calculated difference') - plt.plot(depth_list, f(np.array(depth_list), *popt), label='Fitted difference') - plt.xlabel('Depth [m]') + plt.plot(length_list, diff, label='Actual calculated difference') + plt.plot(length_list, f(np.array(length_list), *popt), label='Fitted difference') + plt.xlabel('Borehole length [m]') plt.ylabel('Temperature difference [deg C]') plt.title( 'Temperature difference between maximum peak cooling fluid\ntemperature and undistrubed ground temperature') diff --git a/GHEtool/Validation/validation_effective_borehole_thermal_resistance.py b/GHEtool/Validation/validation_effective_borehole_thermal_resistance.py index c5acd765..3746fb15 100644 --- a/GHEtool/Validation/validation_effective_borehole_thermal_resistance.py +++ b/GHEtool/Validation/validation_effective_borehole_thermal_resistance.py @@ -17,7 +17,8 @@ def validate(): # initiate parameters - ground_data = GroundConstantTemperature(3, 10) # ground data with an inaccurate guess of 100m for the depth of the borefield + ground_data = GroundConstantTemperature(3, + 10) # ground data with an inaccurate guess of 100m for the borehole length borefield_gt = gt.boreholes.rectangle_field(10, 12, 6, 6, 100, 1, 0.075) pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05, epsilon=1e-6) @@ -46,7 +47,6 @@ def validate(): R_p.append(borefield.borehole.pipe_data.R_p) R_fp.append(borefield.borehole.pipe_data.R_f) - # make figure plt.figure() plt.plot(R_fp, 'r+', label="GHEtool") @@ -57,7 +57,7 @@ def validate(): plt.legend() plt.figure() - plt.plot(mfr_range, (R_fp - data_EED["R_fp"])/data_EED["R_fp"]*100, 'bo') + plt.plot(mfr_range, (R_fp - data_EED["R_fp"]) / data_EED["R_fp"] * 100, 'bo') plt.xlabel("Mass flow rate per borehole l/s") plt.ylabel("Difference in fluid-pipe resistance %") plt.title("Comparison R_fp from GHEtool with EED (relative)") @@ -71,7 +71,7 @@ def validate(): plt.legend() plt.figure() - plt.plot(mfr_range, (Rb - data_EED["Rb*"])/data_EED["Rb*"]*100, 'bo') + plt.plot(mfr_range, (Rb - data_EED["Rb*"]) / data_EED["Rb*"] * 100, 'bo') plt.xlabel("Mass flow rate per borehole l/s") plt.ylabel("Difference in effective borehole thermal resistance %") plt.title("Comparison Rb* from GHEtool with EED (relative)") @@ -79,5 +79,5 @@ def validate(): plt.show() -if __name__ == '__main__': # pragma: no cover +if __name__ == '__main__': # pragma: no cover validate() From dd7a32d48d936318a2f3878d9e4fae1eb2ff745c Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 14:38:31 +0100 Subject: [PATCH 14/18] Further fix tests --- GHEtool/Borefield.py | 2 +- .../combined_active_and_passive_cooling.py | 1 - GHEtool/Examples/multiple_ground_layers.py | 2 +- GHEtool/Methods/optimise_load_profile.py | 2 +- GHEtool/test/general_tests/test.gvalues | Bin 11706 -> 11744 bytes GHEtool/test/general_tests/test_GHEtool.py | 54 ++++++++++++++++-- .../test/general_tests/test_GHEtool_two.py | 18 +++--- GHEtool/test/general_tests/test_optimise.pkl | Bin 263685 -> 0 bytes GHEtool/test/test_examples.py | 11 ++-- 9 files changed, 68 insertions(+), 22 deletions(-) delete mode 100644 GHEtool/test/general_tests/test_optimise.pkl diff --git a/GHEtool/Borefield.py b/GHEtool/Borefield.py index 283a1af4..10cff41b 100644 --- a/GHEtool/Borefield.py +++ b/GHEtool/Borefield.py @@ -917,7 +917,7 @@ def _Carcel(self, th: float, tcm: float, qh: float, qpm: float, qm: float, Tf: f gfunc_uniform_T = self.gfunction(time_steps, max(1, self.H)) # calculate the thermal resistances - k_s = self.ground_data.k_s(self.depth, self.H) + k_s = self.ground_data.k_s(self.depth, self.D) Rpm = (gfunc_uniform_T[2] - gfunc_uniform_T[1]) / (2 * pi * k_s) Rcm = (gfunc_uniform_T[1] - gfunc_uniform_T[0]) / (2 * pi * k_s) Rh = (gfunc_uniform_T[0]) / (2 * pi * k_s) diff --git a/GHEtool/Examples/combined_active_and_passive_cooling.py b/GHEtool/Examples/combined_active_and_passive_cooling.py index 0992f8db..c94b2af6 100644 --- a/GHEtool/Examples/combined_active_and_passive_cooling.py +++ b/GHEtool/Examples/combined_active_and_passive_cooling.py @@ -40,7 +40,6 @@ def default_cooling_in_summer(): # set variables load.eer = eer borefield.load = load - print(borefield) borefield.print_temperature_profile(plot_hourly=True) # get active cooling data diff --git a/GHEtool/Examples/multiple_ground_layers.py b/GHEtool/Examples/multiple_ground_layers.py index 9db3e034..09c8df5f 100644 --- a/GHEtool/Examples/multiple_ground_layers.py +++ b/GHEtool/Examples/multiple_ground_layers.py @@ -9,7 +9,7 @@ def multiple_ground_layers(): # initiate borefield model borefield = Borefield() - borefield.create_rectangular_borefield(10, 10, 6, 6, 110, 1, 0.075) + borefield.create_rectangular_borefield(10, 10, 6, 6, 110, 0, 0.075) borefield.set_Rb(0.12) # set temperature boundaries diff --git a/GHEtool/Methods/optimise_load_profile.py b/GHEtool/Methods/optimise_load_profile.py index 26cb2341..07421cbf 100644 --- a/GHEtool/Methods/optimise_load_profile.py +++ b/GHEtool/Methods/optimise_load_profile.py @@ -90,7 +90,7 @@ def optimise_load_profile_power( if isinstance(borefield.load, HourlyBuildingLoad) else building_load.hourly_heating_load_simulation_period)) # calculate temperature profile, just for the results - borefield.calculate_temperatures(depth=borefield.H, hourly=use_hourly_resolution) + borefield.calculate_temperatures(length=borefield.H, hourly=use_hourly_resolution) # deviation from minimum temperature if abs(min(borefield.results.peak_extraction) - borefield.Tf_min) > temperature_threshold: diff --git a/GHEtool/test/general_tests/test.gvalues b/GHEtool/test/general_tests/test.gvalues index b1a37e1a4f947da1c52b93d7560a7cb980ac9439..7bc5c69ea3bb8db630899c165291192e91968d22 100644 GIT binary patch delta 84 zcmdlL{UDm9fo1B|jVyDR`NiUs@{3Y4@^ez-b5irtCog4g6A{i$tUwhm$(U@&A_J7j N%tM#h9L$og2>@R8AEy8S delta 46 zcmaD5y(^lffo1CYjVyDRS$X19QVS-pXKrI-%}uO`_n7R-A_HV*=EZw#u4GBq1OSN1 B503x< diff --git a/GHEtool/test/general_tests/test_GHEtool.py b/GHEtool/test/general_tests/test_GHEtool.py index f1c6f166..39dae376 100644 --- a/GHEtool/test/general_tests/test_GHEtool.py +++ b/GHEtool/test/general_tests/test_GHEtool.py @@ -15,7 +15,8 @@ DoubleUTube from GHEtool.VariableClasses.BaseClass import UnsolvableDueToTemperatureGradient, MaximumNumberOfIterations from GHEtool.Validation.cases import load_case -from GHEtool.VariableClasses import MonthlyGeothermalLoadAbsolute, HourlyGeothermalLoad +from GHEtool.VariableClasses import MonthlyGeothermalLoadAbsolute, HourlyGeothermalLoad, EERCombined, \ + HourlyBuildingLoad, EER data = GroundConstantTemperature(3, 10) data_ground_flux = GroundFluxTemperature(3, 10) @@ -246,7 +247,7 @@ def test_value_error_cooling_dom_temp_gradient(): borefield.set_borefield(borefield_pyg) borefield.set_Rb(0.2) - with raises(MaximumNumberOfIterations): + with raises(UnsolvableDueToTemperatureGradient): borefield.size() borefield.calculation_setup(max_nb_of_iterations=500) @@ -305,7 +306,30 @@ def test_size_with_different_peak_lengths(borefield): def test_convergence_eer_combined(): - borefield1: Borefield = pickle.load(open(FOLDER.joinpath("test/general_tests/test_optimise.pkl"), 'rb')) + ground_data = GroundFluxTemperature(3, 10) + fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) + pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) + + load = HourlyBuildingLoad(efficiency_heating=5) # use SCOP of 5 for heating + load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, + separator=";", col_cooling=0, col_heating=1) + + eer_active = EER(np.array([15.943, 6.153]), + np.array([5, 30])) # based on the data of the WRE092 chiller of Galletti + borefield1 = Borefield() + borefield1.create_rectangular_borefield(3, 3, 6, 6, 110, 0.7, 0.075) + borefield1.set_ground_parameters(ground_data) + borefield1.set_fluid_parameters(fluid_data) + borefield1.set_pipe_parameters(pipe_data) + borefield1.set_max_avg_fluid_temperature(25) + borefield1.set_min_avg_fluid_temperature(3) + + # create combined active and passive EER + eer = EERCombined(20, eer_active, threshold_temperature=17) + + # set variables + load.eer = eer + borefield1.load = load borefield1.set_max_avg_fluid_temperature(16) borefield1.calculate_temperatures(hourly=True) results_16 = copy.deepcopy(borefield1.results) @@ -316,7 +340,29 @@ def test_convergence_eer_combined(): def test_optimise_load_eer_combined(): - borefield1: Borefield = pickle.load(open(FOLDER.joinpath("test/general_tests/test_optimise.pkl"), 'rb')) + ground_data = GroundFluxTemperature(3, 10) + fluid_data = FluidData(0.2, 0.568, 998, 4180, 1e-3) + pipe_data = DoubleUTube(1, 0.015, 0.02, 0.4, 0.05) + + load = HourlyBuildingLoad(efficiency_heating=5) # use SCOP of 5 for heating + load.load_hourly_profile(FOLDER.joinpath("test\methods\hourly_data\\auditorium.csv"), header=True, + separator=";", col_cooling=0, col_heating=1) + + eer_active = EER(np.array([15.943, 6.153]), + np.array([5, 30])) # based on the data of the WRE092 chiller of Galletti + borefield1 = Borefield() + borefield1.create_rectangular_borefield(4, 3, 6, 6, 110, 0.7, 0.075) + borefield1.set_ground_parameters(ground_data) + borefield1.set_fluid_parameters(fluid_data) + borefield1.set_pipe_parameters(pipe_data) + borefield1.set_max_avg_fluid_temperature(25) + borefield1.set_min_avg_fluid_temperature(3) + + # create combined active and passive EER + eer = EERCombined(20, eer_active, threshold_temperature=17) + load.eer = eer + borefield1.load = load + borefield1.set_max_avg_fluid_temperature(16) borefield1.calculate_temperatures(hourly=True) results_16 = copy.deepcopy(borefield1.results) diff --git a/GHEtool/test/general_tests/test_GHEtool_two.py b/GHEtool/test/general_tests/test_GHEtool_two.py index eed39345..40a6ce48 100644 --- a/GHEtool/test/general_tests/test_GHEtool_two.py +++ b/GHEtool/test/general_tests/test_GHEtool_two.py @@ -243,8 +243,8 @@ def test_size_with_multiple_ground_layers(): borefield.load.peak_injection_duration = 8 borefield.load.peak_extraction_duration = 6 - assert np.isclose(97.16160816008234, borefield.size(L2_sizing=True)) - assert np.isclose(97.89883260681054, borefield.size(L3_sizing=True)) + assert np.isclose(96.87238165292221, borefield.size(L2_sizing=True)) + assert np.isclose(97.60790804951675, borefield.size(L3_sizing=True)) # now with multiple layers layer_1 = GroundLayer(k_s=1.7, thickness=4.9) @@ -257,15 +257,15 @@ def test_size_with_multiple_ground_layers(): flux = GroundFluxTemperature(T_g=10) flux.add_layer_on_bottom([layer_1, layer_2, layer_3, layer_4, layer_5, layer_6]) borefield.ground_data = flux - assert np.isclose(98.05035285309258, borefield.size(L2_sizing=True)) - assert np.isclose(98.7940117048903, borefield.size(L3_sizing=True)) + assert np.isclose(97.76029903346078, borefield.size(L2_sizing=True)) + assert np.isclose(98.50277640726456, borefield.size(L3_sizing=True)) - ks_saved = flux.k_s(borefield.H) + ks_saved = flux.k_s(borefield.depth, borefield.D) flux_new = GroundFluxTemperature(ks_saved, 10) borefield.ground_data = flux_new - assert np.isclose(98.05035285309258, borefield.size(L2_sizing=True), rtol=1e-3) - assert np.isclose(98.7940117048903, borefield.size(L3_sizing=True), rtol=1e-3) + assert np.isclose(97.7575067283266, borefield.size(L2_sizing=True), rtol=1e-3) + assert np.isclose(98.50624530678785, borefield.size(L3_sizing=True), rtol=1e-3) def test_if_gfunction_history_is_cleared_with_groundlayers(): @@ -274,7 +274,7 @@ def test_if_gfunction_history_is_cleared_with_groundlayers(): borefield.ground_data = GroundFluxTemperature(1.7, 10) borefield.gfunction(3600 * 20, 100) borefield.gfunction(3600 * 20, 150) - assert np.array_equal([100, 150], borefield.gfunction_calculation_object.depth_array) + assert np.array_equal([100, 150], borefield.gfunction_calculation_object.borehole_length_array) # now with multiple layers layer_1 = GroundLayer(k_s=1.7, thickness=4.9) @@ -290,4 +290,4 @@ def test_if_gfunction_history_is_cleared_with_groundlayers(): borefield.gfunction(3600 * 20, 100) borefield.gfunction(3600 * 20, 150) # 100 is removed - assert np.array_equal([150.], borefield.gfunction_calculation_object.depth_array) + assert np.array_equal([150.], borefield.gfunction_calculation_object.borehole_length_array) diff --git a/GHEtool/test/general_tests/test_optimise.pkl b/GHEtool/test/general_tests/test_optimise.pkl deleted file mode 100644 index 48d4e5515922e17e9d691fd5cc7c74ce0bd126a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263685 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 Date: Fri, 17 Jan 2025 15:32:31 +0100 Subject: [PATCH 15/18] Go to 100% coverage --- GHEtool/Examples/temp.py | 80 ---------------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 GHEtool/Examples/temp.py diff --git a/GHEtool/Examples/temp.py b/GHEtool/Examples/temp.py deleted file mode 100644 index f25ea2a2..00000000 --- a/GHEtool/Examples/temp.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np -import matplotlib.pyplot as plt - -import pygfunction as gt - - -def main(): - # ------------------------------------------------------------------------- - # Simulation parameters - # ------------------------------------------------------------------------- - - # Borehole dimensions - D = .8 # Borehole buried length (m) - H = 25 # Borehole length (m) - r_b = 0.6 # Borehole radius (m) - B = 2.0 # Borehole spacing (m) - - # Field of 10x7 (n=70) boreholes - N_1 = 10 - N_2 = 7 - field = gt.boreholes.rectangle_field(N_1, N_2, B, B, H, D, r_b) - - # Thermal properties - alpha = 2e-7 # Ground thermal diffusivity (m2/s) - - options_noCorrection = { - 'cylindrical_correction': False, - 'linear_threshold': 24 * 3600.} - options_withCorrection = { - 'cylindrical_correction': True, - 'linear_threshold': 0.} - - # Geometrically expanding time vector. - ts = H ** 2 / (9. * alpha) # Bore field characteristic time - # dt = 3600. # Time step - # tmax = ts * np.exp(5) # Maximum time - # Nt = 50 # Number of time steps - # time = gt.utilities.time_geometric(dt, tmax, Nt) - time = gt.load_aggregation.ClaessonJaved(3600, 3600 * 8760 * 20).get_times_for_simulation() - lntts = np.log(time / ts) - - # ------------------------------------------------------------------------- - # Evaluate g-functions - # ------------------------------------------------------------------------- - gfunc_noCorrection = gt.gfunction.gFunction( - field, alpha, time=time, options=options_noCorrection, - method='equivalent') - gfunc_withCorrection = gt.gfunction.gFunction( - field, alpha, time=time, options=options_withCorrection, - method='equivalent') - - # Draw g-function - ax = gfunc_noCorrection.visualize_g_function().axes[0] - ax.plot(lntts, gfunc_withCorrection.gFunc) - ax.legend(['Linear threshold', - 'Cylindrical correction', ]) - ax.set_title(f'Field of {len(field)} boreholes') - plt.tight_layout() - - # Draw difference - - # Configure figure and axes - fig = gt.utilities._initialize_figure() - ax = fig.add_subplot(111) - # Axis labels - ax.set_xlabel(r'ln(t/t_s)') - ax.set_ylabel(r'difference') - gt.utilities._format_axes(ax) - # Plot difference - ax.plot(lntts, gfunc_withCorrection.gFunc) - ax.set_title('Difference between g-functions') - # Adjust to plot window - plt.tight_layout() - plt.show() - - -# Main function -if __name__ == '__main__': - main() From 292000bf126dec6c0f5016755903751c87728db8 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 17:45:33 +0100 Subject: [PATCH 16/18] Small typo to force pr --- GHEtool/Examples/combined_active_and_passive_cooling.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GHEtool/Examples/combined_active_and_passive_cooling.py b/GHEtool/Examples/combined_active_and_passive_cooling.py index c94b2af6..457f10bf 100644 --- a/GHEtool/Examples/combined_active_and_passive_cooling.py +++ b/GHEtool/Examples/combined_active_and_passive_cooling.py @@ -100,7 +100,7 @@ def active_above_threshold(): f'This is {np.sum(active_cooling_energy) / np.sum(load.hourly_cooling_load_simulation_period) * 100:.2f}% ' f'of the building cooling load.') print( - f'The peak power for active and passive cooling is: {np.max(active_cooling_energy):.2f}kW and {np.max(passive_cooling_energy):.2f}kW respectively.') + f'The peak power for active and passive cooling is {np.max(active_cooling_energy):.2f}kW and {np.max(passive_cooling_energy):.2f}kW respectively.') # create graphs fig = plt.figure() From 0766f756a4104756d754efefdacaf2bf2dec74b7 Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 18:01:28 +0100 Subject: [PATCH 17/18] Remove temp.py --- GHEtool/temp.py | 525 ------------------------------------------------ 1 file changed, 525 deletions(-) delete mode 100644 GHEtool/temp.py diff --git a/GHEtool/temp.py b/GHEtool/temp.py deleted file mode 100644 index 1e6b8f7f..00000000 --- a/GHEtool/temp.py +++ /dev/null @@ -1,525 +0,0 @@ -array_of_objects = [{ - "to": "nicholas.fry@jacobs.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Nicolas Fry,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "sander.naessens@ingenium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sander Naessens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "frederik.simon01@stud.uni-goettingen.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Frederik Simon,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "gert.dewandeleer@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gert De Wandeleer,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "renee.cools@b2ai.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Renee Cools,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "haksax26@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Håkon Saxrud,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "david.wolfesberger@e-sieben.at", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear David Wolfesberger,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "luc.burte@dalkia.fr", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Luc Burte,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "jarrid.wittocx@hotmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jarrid Wittocx,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "stig.knapen@seds.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Stig Knapen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "dirk.brinchau@vub.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dirk Brinchau,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "kancev@t-online.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Peter Kancev,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "sabrina@ikpbvba.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sabrina Gaens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "ruben@vdbengineering.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ruben Vanneste,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "willem.mazzotti@bengtdahlgren.se", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Willem Mazzotti Pallard,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "ireneusz.zmuda@pk.edu.pl", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ireneusz Zmuda,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "maragomez05@outlook.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mara Gomez,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "valerie.h@atelier-t.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Valérie Hermans,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "fbruurs@skynet.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Friso Bruurs,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "kyra.boege@getec.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kyra Böge,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "ruben.debleser@swecobelgium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ruben De Bleser,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "simon.baecke@emaze.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Simon Baecke,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "andfje10@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Fjellstad,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "lucas@vdbengineering.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lucas Bessems,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "viktor.hemgren@energymachines.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Viktor Hemgren,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "dietmar.alge@algeo.ch", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dietmar Alge,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": " antoinecartuyvels@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Antoine Cartuyvels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "johannes.rupfle@evety.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Johannes Rupfle,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "eleonore.castro@swecobelgium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Eléonore Castro,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "erlrye17@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Erlend Ryen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "silvanbernal@outlook.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Silvan Bernal,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "stephanie@backx.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear stephanie van der velden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "tob@bmengineering.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tom Breemeersch,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "susanna.harutyunyan@mil.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Susanna Harutyunyan,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "charlotte.delhuvenne@tractebel.engie.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Charlotte Delhuvenne,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "michiel@blockenengineering.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Michiel Blocken,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "sebastien.mouthuy@gemel.io", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sébastien Mouthuy,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "roylid02@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roy Lid,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "nick@aeplus.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Nick Breugelmans,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "jochen.huber@bfm-umwelt.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jochen Huber,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "samnzi15@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Samukelo Nzimande,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "lasse.thomsen@numerous.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lasse Thomsen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "wannes@vdbengineering.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Wannes Van den Branden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "brunohuyvaert@icloud.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Huyvaert Bruno,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "helena.bogaerts@arcadis.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Helena Bogaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "xandro.vantieghem@telenet.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Xandro Vantieghem,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "tuur.snauwaert@mil.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tuur Snauwaert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "maraghe92@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mara Ghe,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "casper.devrieze@smeyersnv.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Casper De Vrieze,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "werner.goris@studie10.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear werner Goris,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "sigvon22@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sigurd Von Schantz,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "torstein@zconsult.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Torstein Hofvind Solhaug,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "tim.rombouts@ingenium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tim Rombouts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "mona.aly@teracloud.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Mona Aly,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "marbra23@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Martin Bråten Torseth,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "morbendave@btinternet.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear David Roberts ,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "kaijaleena.manner@sweco.se", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kaijaleena Manner,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "fmeggers@princeton.edu", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Forrest Meggers,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "robert.padgett@denvergov.org", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Robert Padgett,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "alessio.vantieghem@ingenium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Alessio Vantieghem,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "steven@moensbvba.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Steven Van den Branden,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "franzjosef-quadflieg@florack.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Franz-Jozef,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "tassosh@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tassos Hourmouziadis,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "michiel@vdbengineering.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear michiel fouquaert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "roglie03@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roger Lie,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "energy@optimized.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ivan Piette,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "kevin@sbkennis.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kevin Grandjean,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "stijn.weygaerts@kbc.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Stijn Weygaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "geotechnik.eenergie@dr-spang.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Max Kewel,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "gert.kaminski@h2d.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gert Kaminski,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "dirk.brichau@vub.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dirk Brichau,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "info@fransenboringen.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear KENNETH FRANSEN,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "gwen@backx.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Gwen Backx,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "jeffrey.beens@smeyersnv.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Jeffrey Beens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "bart.vanreeth@arcade-eng.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bart Van Reeth,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "Paul.Fleuchaus@tewag.de", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Paul Fleuchaus,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "lone.meertens@kuleuven.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Lone Meertens,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "tobia.baert@geo-thermics.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Tobia Baert,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "arno.marechal@swecobelgium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Arno Marechal,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "kamiel.kenis@student.kuleuven.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Kamiel Kenis,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "roel@non.energy", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Roel Vaneeckhout,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "jargje15@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear jardar gjertsen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "awais.aali@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Awais Ali,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "oddtho26@fs-innlandet.no", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Oddgeir Thorgeirsson,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "thomas.vanermen@democo.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear thomas vanermen,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "evertz@aon.at", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Hans Evertz,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "wouter.peere@enead.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Wouter Peere,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "thomas.moerman@emaze.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear thomas Moerman,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "serge.n-kisema@vinci-facilities.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Serge Ndosimau-Kisema,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "ewout.depetter@student.kuleuven.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Ewout De Petter,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "seppe.cuylaerts@kelvinsolutions.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Seppe Cuylaerts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "vincent@vdbengineering.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Vincent Beckers,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "sandyraimondi@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Sandy Raimondi,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "emma.michiels@swecobelgium.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Emma Michiels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "bert.michiels@comtis.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bert Michiels,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "hinde.elkassmi@equans.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear hinde el kassmi,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "bjornportier@gmail.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Bjorn Portier,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "r.sebrechts@botec.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Raf Sebrechts,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "dennis.vanoverschelde@tractebel.engie.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Dennis Van Overschelde,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}, { - "to": "euro.ing@andreas-schiller.com", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Schiller,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}] - -import resend -from bs4 import BeautifulSoup -from typing import List - -resend.api_key = "re_7YyWQLDU_5g48dNqcZNwSeEBj2JFicBtW" - -params: List[resend.Emails.SendParams] = [{ - "to": "wouter.peere@enead.be", - "from": "GHEtool Cloud ", - "html": "\n\n \n \n \n \n \n \n Schedule a free GHEtool Cloud demo\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\"Logo\"
\n \n \n \n \n \n \n \n
FeaturesPricingKnowledge baseAbout us
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n

GHEtool Christmas Wishes

\n

Dear Andreas Schiller,

As we wrap up an exciting year filled with growth and innovation, we’re taking a moment to reflect and recharge. Over the next two weeks, we’ll be stepping back — but quietly continuing our work in the background.

But before we do, we have something special to share with you: a little festive tune to get you in the holiday spirit! You can check it out below!

\n



While you’re tapping your feet to the music, we’d like to extend our deepest gratitude to everyone who made 2024 a year to remember:

\n

\n
    \n
  • Our Contributors — Your hard work and dedication have driven the evolution of GHEtool.
  • \n
  • Our Users — Your trust and engagement continue to inspire us every day.
  • \n
  • Our Feedback Providers — Your insights and suggestions keep us moving forward.
  • \n
  • Our Community — Thank you for recommending GHEtool to others and spreading the word.
  • \n
\n

\n

\n This holiday season, we hope you’re surrounded by warmth, joy, and the people who mean the most to you.\n

\n May the geothermal warmth of the season bring comfort, and may the year ahead be filled with new opportunities and success.\n

\n Merry Christmas and a bright, inspiring, and hopeful 2025!
Rejoice Emmanuel!
\n

With gratitude and holiday cheer,
Wouter Peere and the whole GHEtool team

\n \n \n \n \n
\n \n \n \n \n
\n
\n \n", - "subject": "Newsletter GHEtool Cloud" -}] - -# Read and parse the HTML document -with open('20241220.html', "r", encoding="utf-8") as html_file: - html_content = html_file.read() - soup = BeautifulSoup(html_content, "html.parser") - -# Replace 'other_attr' in each object with the parsed HTML content -for obj in params: - obj['html'] = str(soup).replace('{{name}}', obj['name']) - -resend.Batch.send(params) From 88a5cc1dd43e4e11b15e18980ddd95044f4b828c Mon Sep 17 00:00:00 2001 From: wouterpeere Date: Fri, 17 Jan 2025 18:46:21 +0100 Subject: [PATCH 18/18] 100% coverage --- GHEtool/test/unit-tests/test_efficiency.py | 8 ++++++++ .../unit-tests/test_loads/test_hourly_load_building.py | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/GHEtool/test/unit-tests/test_efficiency.py b/GHEtool/test/unit-tests/test_efficiency.py index d1ca60b5..4c20db4f 100644 --- a/GHEtool/test/unit-tests/test_efficiency.py +++ b/GHEtool/test/unit-tests/test_efficiency.py @@ -399,3 +399,11 @@ def test_repr_(): 'Passive cooling:\n' \ '\tSEER [-]: 20\n' \ 'With active cooling above [°C]: 10' == eer_combined.__repr__() + + eer_combined = EERCombined(20, 5, months_active_cooling=[5, 6]) + assert '\n' \ + 'Active cooling:\n' \ + '\tSEER [-]: 5\n' \ + 'Passive cooling:\n' \ + '\tSEER [-]: 20\n' \ + 'With active cooling in months [-]: [5 6]' == eer_combined.__repr__() diff --git a/GHEtool/test/unit-tests/test_loads/test_hourly_load_building.py b/GHEtool/test/unit-tests/test_loads/test_hourly_load_building.py index 6e053fa2..20518391 100644 --- a/GHEtool/test/unit-tests/test_loads/test_hourly_load_building.py +++ b/GHEtool/test/unit-tests/test_loads/test_hourly_load_building.py @@ -680,8 +680,16 @@ def test_cluster(): def test_repr_(): load = HourlyBuildingLoad() load.load_hourly_profile(FOLDER.joinpath("Examples/hourly_profile.csv")) - load.dhw = 10000 + assert 'Hourly building load\n' \ + 'Efficiency heating: SCOP [-]: 5\n' \ + 'Efficiency cooling: SEER [-]: 20\n' \ + 'Peak cooling duration [hour]: 6.0\n' \ + 'Peak heating duration [hour]: 6.0\n' \ + 'Simulation period [year]: 20\n' \ + 'First month of simulation [-]: 1' == load.__repr__() + + load.dhw = 10000 assert 'Hourly building load\n' \ 'Efficiency heating: SCOP [-]: 5\n' \ 'Efficiency cooling: SEER [-]: 20\n' \