GHEtool’s Changelog and future developments

All notable changes to this project will be documented in this file. For future developments, please visit our project board on GitHub.

The format is based on Keep a Changelog.

[2.3.0] - unpublished


  • Extra validation based on the work of Ahmadfard & Bernier (issue #243).

  • Added the option to exclude DHW from the peak heating load (issue #252).

  • Added vfr to Fluid Class (issue #262).

  • Added yearly_heating_load_simulation_period, yearly_cooling_load_simulation_period, yearly_heating_peak_simulation_period and yearly_cooling_peak_simulation_period to the Load class (issue #265).


  • Change skopt to Optuna in active_passive_cooling (issue #258).

  • Moved plot_load_duration to HourlyLoad class (issue #260).

  • Clean up Baseclass (issue #260).

  • Removed depreciated ‘optimise_load_profile’, ‘_percentage_heating’, ‘_percentage_cooling’ from (issue #268).

  • Removed ‘_external_load’, ‘_secundary_borefield_load’, ‘_building_load’ from (issue #268).


  • Problems with optimise_load_profile_energy (issue #255).

  • Fix plot_load_duration (issue #260).

  • Problem in CI/CD and testing for python <3.12 (issue #274).

  • Fix compatibility with numpy 2.0 (issue #274).

2.2.2 - 2024-05-16


  • Added multiple ground layers (issue #97).

  • Function to create box, U and L-shaped borefields (issue #224).

  • Multiple year validation for L3 and L4 sizing (issue #227).

  • Added MonthlyGeothermalLoadMultiYear (issue #227).

  • Added optimise_load_profile_energy (issue #229).

  • Added k_p_out to Coaxial Pipe class (issue #239).


  • Removed set_peak_length from Borefield class (issue #227).

  • Definition of the optimise_load_profile_class (issue #229).

  • Changed number_of_boreholes to an attribute (issue #233).

  • Definition of H when loading a borefield is now the average borehole depth (issue #233).

  • Changed store_previous_values in GFunction class to be a property (issue #233).

  • Changed temperature database to a json-file (issue #235).

  • Changed optimise_load_profile_power to be able to work with hourly data directly (issue #237).

  • Renamed to for consistent naming convention (issue #244).

  • Removed parameter ‘Tf’ from since it is no longer needed (issue #249).


  • Small typo’s in functions (issue #224).

  • Bug when using borefield with different borehole lengths (issue #233).

2.2.1 - 2024-01-27


  • GHEtool is available on conda-forge (issue #107).

  • Possibility to start in another month (issue #140).

  • Equal functions for HourlyGeothermalLoad and MonthlyGeothermalLoadAbsolute (issue #189).

  • Cylindrical borehole correction (issue #187).

  • add functionality for the load classes (issue #202).


  • Negative reference temperatures for the fluid are now possible (issue #192).

  • Move code related to the GUI to a separate repo (issue #210).

  • Autorelease to PyPi and testPyPi (issue #212).


  • Problem with multiyear hourly data and L3 sizing (issue #153).

  • Problem with negative g-function values (issue #187).

  • Bug in load-duration curve when not working with optimize load profile (issue #189).

  • Bug in hourly data (issue #196).

  • Bug in saving after a file has been moved (issue #198).

  • Bug in DHW and peak heating power(issue #202).

2.2.0 - 2023-10-17


  • Extra warning message if one wants to load a GHEtool file that was created with a newer version.

  • Borehole thermal resistance is now visible at the borehole thermal resistance page (issue #51).

  • New class of GroundData: GroundTemperatureGradient added (issue #145).

  • Load classes (issue #45).

  • Pipe classes (single, double, coaxial, Multiple U Tube) (issue #40 and #45).

  • Added another methodology for sizing with a variable ground temperature (issue #144).

  • Custom error when the field cannot be sized due to a ground temperature gradient (issue #156).

  • Interpolation option in calculate function in Gfunction class (issue #159).

  • Absolute and relative tolerances for the sizing methods even as a maximum number of iterations is added, so there is more transparency and flexibility in the trade-off between accuracy and speed (issue #159).

  • Added advanced options to GHEtool GUI (issue #165).

  • Added a result class so all calculated temperatures are now in a separate Result class object within the borefield object (issue #167).

  • Added domestic hot water (DHW) to GHEtool (issue #172).

  • Glycol-water mixtures can now be selected from within the GUI (issue #174).

  • Pygfunction media object can be imported into the FluidData object in GHEtool (issue #174).

  • Temperature and flux database (Europe) implemented (issue #178).

  • Yearly heating/cooling load in LoadClass (issue #180).


  • GUI was moved to a separate project: ScenarioGUI.

  • H_init was removed from the sizing functions since it was not used.

  • Rb is now solely handled by the borehole object.

  • load_hourly_profile is moved to the separate load classes (issue #45).

  • Removed ‘set_hourly_cooling_load’, ‘set_hourly_heating_load’ from main_class and move it to separate load class (issue #45).

  • Moved draw_borehole_internals to PipeClass (issue #45).

  • Borehole equivalent resistances is now calculated in one step, centralised in the pipe class (issue #45).

  • Go to 100% code coverage with 350 tests.

  • Threshold interpolation for g-functions set to a relative threshold of 25% relative to the demanded depth (issue #144).

  • Implemented a custom error for crossing the maximum number of iterations: ‘MaximumNumberOfIterations’ (issue #144).

  • _size_based_on_temperature_profile now returns two arguments: the required depth and a boolean flag to check if the field is sized (issue #144).

  • Speed up of L3/L4 sizing by halving calculation time due to intermediate checks if the field is sized (issue #144).

  • Changed ValueError when the field cannot be sized due to a temperature gradient to the custom UnsolvableDueToTemperatureGradient Exception (issue #156).

  • Rename SizingSetup class to CalculationSetup class (issue #159).

  • Move H_init to CalculationSetup class (issue #159).

  • Move use_precalcated_data to CalculationSetup class and rename to: ‘use_precalculate_dataset’ (issue #159).

  • Changed ‘set_max_ground_temperature’ and ‘set_min_ground_temperature’ to correct names: ‘ set_max_avg_fluid_temperature’ and ‘set_min_avg_fluid_temperature’

  • Changed ‘minimal average fluid temperature’ to ‘minimum average fluid temperature’ in GUI (issue #172).

  • Max value of SEER is now 1000 (issue #178).


  • Fixed problem with L2 sizing, when the peak load was the same in all months (issue #146).

  • Small bug in faster g-function calculation solved. When changing the borefield, the previously calculated g-functions where not removed.

  • When using interpolation for the g-functions, the results could vary a little bit based on the previous sizings. By reinstating the H_init parameter, this is solved.

  • Borehole internals can no longer overlap in the GUI.

  • Optimise load profile crashes with small borefields (issue #180).

2.1.2 - 2023-04-28


  • Logger for GHEtool (issue #96).

  • Examples are now also in RTD.

  • Reynolds number is shown on the result page (issue #112).

  • Example for the combination of active and passive cooling (issue #114).

  • It is now possible to use building loads (with a SCOP/SEER) instead of ground loads(issue #115).


  • In figure plotting, the interval[x[i], x[i+1]) now has the value y[i] (instead of y[i-1]).

  • Scroll behaviour on the result page (issue #99).

  • Changed icon of GHEtool.

  • Imbalance changed to property so it can handle hourly loads as well (issue #106).

  • Remove recalculation option (issue #109).

  • When data is loaded in a two-column format, the button for ‘two columns’ is set (issue #133).

  • GUI doesn’t crash anymore when wrong seperator and decimal points are selected when loading a .csv.

  • One can now use monthly calculations which do not assume equal month length.


  • Sizing doesn’t crash when either no heating or cooling load is present (issue #91).

  • Wrong heating load in april in GUI (issue #94).

  • Results are now cleared when new loads are loaded (issue #106).

  • Options for g-function calculations are not working (issue #119).

  • Wrong naming aim optimise load profile.

  • GHEtool now can start after a crash without removing the backup file.

  • Some translations were not correct.

  • Solves issue with loading .csv file and optimise load profile (issue #130).

  • Figure in optimize load profile keeps getting bigger and bigger (issue #131).

  • Problem with sizing with temperature gradients (issue #136).

  • Problem solved with calculate_multiple_scenarios.

2.1.1 - 2023-01-30


  • Added NavigationToolbar to figure (issue #55).

  • Added different peak lengths for heating and cooling separately (issue #72).

  • Readable saving format for gui (JSON).

  • A super class that contains functions relevant for all GHEtool classes.

  • Exe can be installed either locally for one user without admin permission or for all users using admin permission.

  • Saved files (*.GHEtool) can be loaded from GHEtool by double click.


  • Created a class for the custom g-functions (issue #57).

  • Created a class for g-function calculation that stores the previously calculated g-values to speed up the iterative algorithms (issue #57).

  • Created a class for sizing_setup to clean up the code. The speed improvement is over a factor 10 for heavy iterative procedures (like optimise load profile). A full speed improvement report can be found under: code version > speed improvements > v2.1.1.

  • The sizing methods themselves are now faster due to the fact that only the first and last year are calculated (issue #44). For more info, one can check: code version > speed improvements > v2.1.1.

  • Faster loading time of the GUI.

  • Further documentation for optimise_load_profile functionality.

  • Smaller exe-file size by setting up a virtual environment and using a pyinstall folder instead of a single file.


  • The hourly_heating_load_on_the_borefield and hourly_cooling_load_on_the_borefield are now correctly calculated.

  • When an hourly temperature profile is plotted after an optimise_load_profile optimisation, the hourly load on the borefield (and not the entire hourly load) is shown.

  • Correct conversion from hourly to monthly load (issue #62).

  • Problem with np.float16 when using simulation periodes >80 years due to overflow errors.

  • Implemented FIFO-class to prevent cycling in iterative sizing.

  • A scenario name cannot occur twice in the scenario list.

  • Sometimes some gui options were not shown.

  • The drag-and-drop behaviour of the scenario list is fixed (issue #80).

  • The renaming of a scenario was not possible (issue #86).

  • Problems with borehole internals and pipe overlaps.

2.1.0 - 2022-11-30


  • Documentation with ReadTheDocs

  • GUI Documentation

  • Changelog

  • New features in the GUI


  • GUI workflow to be simpler

  • precalculated data is removed

  • general speed improvements


  • size by length and width for it is not compatible with the just-in-time calculation of the g-functions.

2.0.6 - 2022-10-07


  • new functionalities for g-function calculation (inherited from pygfunction) are implemented


  • just-in-time calculation of g-functions is included (and will be expanded later)

  • custom borefields can be way faster calculated


  • Hyperlinks in PyPi should work now

  • Sizing by length and width had problems with temperatures below the minimum temperature

2.0.5 - 2022-08-31


  • Hourly sizing method (L4) is implemented

  • Hourly plotting method

  • Volumetric heat capacity is included in the ground data


  • Implemented numpy arrays everywhere

  • Implemented convolution instead of matrix multiplication

  • New implementation for L3 sizing


  • No more problems with iteration (L2) and sub 1m depth fields

  • Fixed bug in main_functionalities example


  • New validation document for the effective thermal borehole resistance, comparison with EED

2.0.4 - 2022-08-17


  • Final JOSS paper update

2.0.3 - 2022-08-12


  • Variable ground temperature

  • Sizing with dynamic Rb*


  • General bug fixes


  • Sizing setup with more streamlined sizing options

2.0.2 - 2022-06-12


  • Included a function (and example) on sizing a borefield by length and width

2.0.1 - 2022-06-12


  • Included a pytest document to check if package is correctly installed

2.0.0 - 2022-04-01


  • GUI

  • Borehole thermal resistance (based on the pygfunction package)


  • More documentation and examples

1.0.1 - 2021-12-11


  • longer simulation period up to 100 years


  • fixed bug in interpolation