Repository: j-c-cook/ghedt (language: python)

Issue:
NewFeature move the coordinate generator file from the g-Function database to here



Discussion / hints:

Fix patch:
diff --git a/.gitmodules b/.gitmodules
index c7fe2e6..c6eff72 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
 
 [submodule "GHEDT/PLAT"]
-	path = GHEDT/PLAT
+	path = ghedt/PLAT
 	url = https://github.com/j-c-cook/PLAT
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd52c47..07c8bd2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,19 @@
  
 ## Current version
 
+### Enhancements
+
+* [Issue 12](https://github.com/j-c-cook/ghedt/issues/12) - The `GFunction` object can be passed into the `GHE` object with only one g-function calculated, as long as the `B/H` value being "interpolated" for is the same one that it was computed for. 
+
 ### New features
 
+* [Issue 1](https://github.com/j-c-cook/ghedt/issues/1) - The `GFunction` object used for interpolation of g-functions based on B/H and borehole radius correction is pulled from the g-FunctionDatabase. 
 * [Issue 3](https://github.com/j-c-cook/GLHEDT/issues/3) - Adds a GHE object with the ability to simulate and size with a hybrid time step using information found by the peak load analysis tool.
 * [Issue 8](https://github.com/j-c-cook/GLHEDT/issues/8) - Adds a detailed hourly simulation so that the hybrid time step can be validated. 
+* [Issue 9](https://github.com/j-c-cook/ghedt/issues/11) - A function that computes a live g-function using `pygfunction` is created. The functions default arguments are unequal segments, the equivalent solver and the mixed inlet fluid temperature boundary condition.
+* [Issue 14](https://github.com/j-c-cook/ghedt/issues/14) - The `coordinates.py` module is moved from the g-Function Database repository to this package. 
+
+### Tests and CI
+
+* [Issue 15](https://github.com/j-c-cook/ghedt/issues/15) - A file is added for testing the sizing of a GHE using live-time g-function calculations that utilize the equivalent solver method and 8 unequal segment lengths along the borehole for Single U-tube, Double U-tube and Coaxial tube BHEs. 
 
diff --git a/GHEDT/PLAT b/GHEDT/PLAT
deleted file mode 160000
index 71afc2a..0000000
--- a/GHEDT/PLAT
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit 71afc2a8f45c2824df225b62d549caa3610623c3
diff --git a/GHEDT/__init__.py b/GHEDT/__init__.py
deleted file mode 100644
index ddd7d76..0000000
--- a/GHEDT/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from . import PLAT
-from . import ground_heat_exchangers
diff --git a/README.md b/README.md
index 2e66102..0be3478 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,12 @@
-# GLHEDT
-Ground loop heat exchanger design tool
+# Ground Heat Exchanger Design Toolbox
+
+The Ground Heat Exchanger Design Toolbox (GHEDT) is a Python package that 
+provides the tools necessary to quantify the short and long-term thermal 
+interaction in a GHE. GHEDT can predict heat pump entering fluid temperatures 
+for design over the design life. It can determine the required borehole depth 
+of a specified borehole field to ensure the heat pump entering fluid temperature 
+remains within specified bounds. GHEDT is novel in its ability to select a 
+borehole field layout based on a target depth.
 
 ## Usage
 Clone the repository.
diff --git a/ghedt/PLAT b/ghedt/PLAT
new file mode 160000
index 0000000..440f368
--- /dev/null
+++ b/ghedt/PLAT
@@ -0,0 +1,1 @@
+Subproject commit 440f368dcad4056e22a3f346d22380816a5ddf64
diff --git a/ghedt/__init__.py b/ghedt/__init__.py
new file mode 100644
index 0000000..f072886
--- /dev/null
+++ b/ghedt/__init__.py
@@ -0,0 +1,5 @@
+from . import PLAT
+from . import ground_heat_exchangers
+from . import gfunction
+from . import coordinates
+from . import utilities
diff --git a/ghedt/coordinates.py b/ghedt/coordinates.py
new file mode 100644
index 0000000..2b9a7cc
--- /dev/null
+++ b/ghedt/coordinates.py
@@ -0,0 +1,60 @@
+# Jack C. Cook
+# Tuesday, October 26, 2021
+
+
+def rectangle(Nx, Ny, Bx, By):
+    # Create a list of (x, y) pairs for a rectangle
+    r = []
+    nbh = Nx * Ny
+    for i in range(Nx):
+        for j in range(Ny):
+            r.append((i * Bx, j * By))
+    assert len(r) == nbh
+    return r
+
+
+def open_rectangle(Nx, Ny, Bx, By):
+    # Create a list of (x, y) pairs for an open rectangle
+    open_r = []
+    if Nx > 2 and Ny > 2:
+        nbh = Ny * 2 + (Nx - 2) * 2
+        for i in range(Nx):
+            open_r.append((i * Bx, 0.))
+        for j in range(1, Ny-1):
+            open_r.append((0, j * By))
+            open_r.append(((Nx-1) * Bx, j * By))
+        for i in range(Nx):
+            open_r.append((i * Bx, (Ny-1) * By))
+    else:
+        nbh = Nx * Ny
+        open_r = rectangle(Nx, Ny, Bx, By)
+
+    assert len(open_r) == nbh
+    return open_r
+
+
+def U_shape(Nx, Ny, Bx, By):
+    # Create a list of (x, y) pairs for a U-shape
+    U = []
+    if Nx > 2 and Ny > 1:
+        nbh = 2 * Ny + (Nx - 2)
+        for i in range(Nx):
+            U.append((i * Bx, 0.))
+        for j in range(1, Ny):
+            U.append((0., j * By))
+    else:
+        nbh = Nx * Ny
+        U = rectangle(Nx, Ny, Bx, By)
+    assert len(U) == nbh
+    return U
+
+
+def L_shape(Nx, Ny, Bx, By):
+    nbh = Nx + Ny - 1
+    L = []
+    for i in range(Nx):
+        L.append((i * Bx, 0.))
+    for j in range(1, Ny):
+        L.append((0., j * By))
+    assert len(L) == nbh
+    return L
diff --git a/GHEDT/examples/1DInterpolation/GLHEPRO_gFunctions_10x12.json b/ghedt/examples/1DInterpolation/GLHEPRO_gFunctions_10x12.json
similarity index 100%
rename from GHEDT/examples/1DInterpolation/GLHEPRO_gFunctions_10x12.json
rename to ghedt/examples/1DInterpolation/GLHEPRO_gFunctions_10x12.json
diff --git a/GHEDT/examples/1DInterpolation/GLHEPRO_gFunctions_12x13.json b/ghedt/examples/1DInterpolation/GLHEPRO_gFunctions_12x13.json
similarity index 100%
rename from GHEDT/examples/1DInterpolation/GLHEPRO_gFunctions_12x13.json
rename to ghedt/examples/1DInterpolation/GLHEPRO_gFunctions_12x13.json
diff --git a/GHEDT/examples/1DInterpolation/GLHEPro_gFunctions_10x12.xlsx b/ghedt/examples/1DInterpolation/GLHEPro_gFunctions_10x12.xlsx
similarity index 100%
rename from GHEDT/examples/1DInterpolation/GLHEPro_gFunctions_10x12.xlsx
rename to ghedt/examples/1DInterpolation/GLHEPro_gFunctions_10x12.xlsx
diff --git a/GHEDT/examples/1DInterpolation/GLHEPro_gFunctions_12x13.xlsx b/ghedt/examples/1DInterpolation/GLHEPro_gFunctions_12x13.xlsx
similarity index 100%
rename from GHEDT/examples/1DInterpolation/GLHEPro_gFunctions_12x13.xlsx
rename to ghedt/examples/1DInterpolation/GLHEPro_gFunctions_12x13.xlsx
diff --git a/GHEDT/examples/1DInterpolation/convert_gfunctions_to_json.py b/ghedt/examples/1DInterpolation/convert_gfunctions_to_json.py
similarity index 100%
rename from GHEDT/examples/1DInterpolation/convert_gfunctions_to_json.py
rename to ghedt/examples/1DInterpolation/convert_gfunctions_to_json.py
diff --git a/GHEDT/examples/1DInterpolation/database.py b/ghedt/examples/1DInterpolation/database.py
similarity index 99%
rename from GHEDT/examples/1DInterpolation/database.py
rename to ghedt/examples/1DInterpolation/database.py
index c22d021..8e759ec 100644
--- a/GHEDT/examples/1DInterpolation/database.py
+++ b/ghedt/examples/1DInterpolation/database.py
@@ -11,7 +11,6 @@
 
 
 import gFunctionDatabase as gfdb
-import GHEDT
 
 
 def main():
diff --git a/GHEDT/examples/1DInterpolation/plot_g_function_comparison.py b/ghedt/examples/1DInterpolation/plot_g_function_comparison.py
similarity index 94%
rename from GHEDT/examples/1DInterpolation/plot_g_function_comparison.py
rename to ghedt/examples/1DInterpolation/plot_g_function_comparison.py
index e781999..7db230d 100644
--- a/GHEDT/examples/1DInterpolation/plot_g_function_comparison.py
+++ b/ghedt/examples/1DInterpolation/plot_g_function_comparison.py
@@ -33,9 +33,7 @@ def main():
         GFunction.g_function_interpolation(B_over_H)
     # correct the long time step for borehole radius
     g_function_corrected = \
-        GFunction.borehole_radius_correction(g_function,
-                                                  rb_value,
-                                                  rb)
+        GFunction.borehole_radius_correction(g_function, rb_value, rb)
 
     figure, axs = plt.subplots()
 
diff --git a/GHEDT/examples/Borefield/correct_coordinates.py b/ghedt/examples/Borefield/correct_coordinates.py
similarity index 99%
rename from GHEDT/examples/Borefield/correct_coordinates.py
rename to ghedt/examples/Borefield/correct_coordinates.py
index 025a8cf..48bf6ad 100644
--- a/GHEDT/examples/Borefield/correct_coordinates.py
+++ b/ghedt/examples/Borefield/correct_coordinates.py
@@ -2,7 +2,6 @@
 # Thursday, September 16, 2021
 
 import gFunctionDatabase as gfdb
-import GHEDT
 
 
 def main():
diff --git a/GHEDT/examples/GHE/Atlanta_Office_Building_Loads.csv b/ghedt/examples/GHE/Atlanta_Office_Building_Loads.csv
similarity index 100%
rename from GHEDT/examples/GHE/Atlanta_Office_Building_Loads.csv
rename to ghedt/examples/GHE/Atlanta_Office_Building_Loads.csv
diff --git a/GHEDT/examples/GHE/GLHEPro_AtlantaOffice_InputFile.gli b/ghedt/examples/GHE/GLHEPro_AtlantaOffice_InputFile.gli
similarity index 100%
rename from GHEDT/examples/GHE/GLHEPro_AtlantaOffice_InputFile.gli
rename to ghedt/examples/GHE/GLHEPro_AtlantaOffice_InputFile.gli
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py b/ghedt/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py
similarity index 97%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py
rename to ghedt/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py
index 5a125c2..e4b957b 100644
--- a/GHEDT/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py
+++ b/ghedt/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_HOTS_GHE.py
@@ -2,12 +2,12 @@
 # Thursday, October 14, 2021
 import sys
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 from numpy import pi
 import numpy as np
@@ -122,7 +122,7 @@ def main(args):
     # --------------------------------------------------------------------------
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_Size.slurm b/ghedt/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_Size.slurm
similarity index 100%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_Size.slurm
rename to ghedt/examples/GHE/HourlyTS_Sizing/Coaxial_Tube_Size.slurm
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py b/ghedt/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py
similarity index 97%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py
rename to ghedt/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py
index 45ad1a5..17efad2 100644
--- a/GHEDT/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py
+++ b/ghedt/examples/GHE/HourlyTS_Sizing/Double_U_Tube_HOTS_GHE.py
@@ -2,12 +2,12 @@
 # Thursday, October 14, 2021
 import sys
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -111,7 +111,7 @@ def main(args):
     # --------------------------------------------------------------------------
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Double_U_Tube_Size.slurm b/ghedt/examples/GHE/HourlyTS_Sizing/Double_U_Tube_Size.slurm
similarity index 100%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Double_U_Tube_Size.slurm
rename to ghedt/examples/GHE/HourlyTS_Sizing/Double_U_Tube_Size.slurm
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py b/ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py
similarity index 97%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py
rename to ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py
index f80fb42..b44892f 100644
--- a/GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py
+++ b/ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_HOTS_GHE.py
@@ -2,12 +2,12 @@
 # Thursday, October 14, 2021
 import sys
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -111,7 +111,7 @@ def main(args):
     # --------------------------------------------------------------------------
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Simulate.slurm b/ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Simulate.slurm
similarity index 100%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Simulate.slurm
rename to ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Simulate.slurm
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Size.slurm b/ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Size.slurm
similarity index 100%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Size.slurm
rename to ghedt/examples/GHE/HourlyTS_Sizing/Single_U_Tube_Size.slurm
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py b/ghedt/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py
similarity index 97%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py
rename to ghedt/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py
index 26183fb..f772f5f 100644
--- a/GHEDT/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py
+++ b/ghedt/examples/GHE/HourlyTS_Sizing/constant_load_simulation.py
@@ -2,12 +2,12 @@
 # Wednesday, October 13, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -116,7 +116,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hybrid GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HourlyTS_Sizing/simulate_hourly.py b/ghedt/examples/GHE/HourlyTS_Sizing/simulate_hourly.py
similarity index 97%
rename from GHEDT/examples/GHE/HourlyTS_Sizing/simulate_hourly.py
rename to ghedt/examples/GHE/HourlyTS_Sizing/simulate_hourly.py
index 70f0f82..7b0965b 100644
--- a/GHEDT/examples/GHE/HourlyTS_Sizing/simulate_hourly.py
+++ b/ghedt/examples/GHE/HourlyTS_Sizing/simulate_hourly.py
@@ -2,12 +2,12 @@
 # Wednesday, October 13, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -119,7 +119,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hourly GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/BHE_size_hybrid.py b/ghedt/examples/GHE/HybridTS_Sizing/BHE_size_variation_hyts.py
similarity index 97%
rename from GHEDT/examples/GHE/HybridTS_Sizing/BHE_size_hybrid.py
rename to ghedt/examples/GHE/HybridTS_Sizing/BHE_size_variation_hyts.py
index 184f288..ba10805 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/BHE_size_hybrid.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/BHE_size_variation_hyts.py
@@ -8,12 +8,12 @@
 
 import copy
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 
 
 def main():
@@ -165,18 +165,18 @@ def main():
 
         # Size Hybrid GLHEs
         # Single U-tube GHE
-        GHE_s = GHEDT.ground_heat_exchangers.GHE(
+        GHE_s = ghedt.ground_heat_exchangers.GHE(
             V_flow_system, B, single_u_tube_object, fluid, borehole,
             pipe_s, grout, soil, GFunction, sim_params,
             hourly_extraction_ground_loads)
         V_flow_borehole_rates.append(GHE_s.V_flow_borehole)
         # Double u-Tube GHE
-        GHE_d = GHEDT.ground_heat_exchangers.GHE(
+        GHE_d = ghedt.ground_heat_exchangers.GHE(
             V_flow_system, B, double_u_tube_object, fluid, borehole_d,
             pipe_d, grout, soil, GFunction, sim_params,
             hourly_extraction_ground_loads)
         # Coaxial tube GHE
-        GHE_c = GHEDT.ground_heat_exchangers.GHE(
+        GHE_c = ghedt.ground_heat_exchangers.GHE(
             V_flow_system, B, coaxial_tube_object, fluid, borehole_c,
             pipe_c, grout, soil, GFunction, sim_params,
             hourly_extraction_ground_loads)
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py b/ghedt/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py
similarity index 97%
rename from GHEDT/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py
rename to ghedt/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py
index a5f2f2b..5634843 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/Coaxial_Tube_HYTS.py
@@ -1,12 +1,12 @@
 # Jack C. Cook
 # Wednesday, October 13, 2021
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 from numpy import pi
 import numpy as np
@@ -131,7 +131,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hybrid GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py b/ghedt/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py
similarity index 97%
rename from GHEDT/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py
rename to ghedt/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py
index 0116960..1d25dad 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/Double_U_Tube_HYTS.py
@@ -1,12 +1,12 @@
 # Jack C. Cook
 # Wednesday, October 13, 2021
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -117,7 +117,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hybrid GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py b/ghedt/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py
similarity index 97%
rename from GHEDT/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py
rename to ghedt/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py
index 7a19cfa..0bc38aa 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/Single_U_Tube_HYTS.py
@@ -2,12 +2,12 @@
 # Wednesday, October 13, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -118,7 +118,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hybrid GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py b/ghedt/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py
similarity index 97%
rename from GHEDT/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py
rename to ghedt/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py
index b7cb81f..2a1c19a 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/constant_load_hybrid_simulation.py
@@ -2,12 +2,12 @@
 # Wednesday, October 13, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -116,7 +116,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hybrid GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/HybridTS_Sizing/simulate.py b/ghedt/examples/GHE/HybridTS_Sizing/simulate.py
similarity index 98%
rename from GHEDT/examples/GHE/HybridTS_Sizing/simulate.py
rename to ghedt/examples/GHE/HybridTS_Sizing/simulate.py
index d7f2ce7..692e9b3 100644
--- a/GHEDT/examples/GHE/HybridTS_Sizing/simulate.py
+++ b/ghedt/examples/GHE/HybridTS_Sizing/simulate.py
@@ -2,12 +2,12 @@
 # Wednesday, October 13, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -119,7 +119,7 @@ def main():
     # --------------------------------------------------------------------------
 
     # Initialize Hourly GLHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/ghedt/examples/GHE/Live_gFunc_Sizing/Coaxial_Tube.py b/ghedt/examples/GHE/Live_gFunc_Sizing/Coaxial_Tube.py
new file mode 100644
index 0000000..f5fe907
--- /dev/null
+++ b/ghedt/examples/GHE/Live_gFunc_Sizing/Coaxial_Tube.py
@@ -0,0 +1,148 @@
+# Jack C. Cook
+# Monday, October 26, 2021
+
+import ghedt.PLAT as PLAT
+import pandas as pd
+import ghedt.PLAT.pygfunction as gt
+import ghedt
+from time import time as clock
+
+
+def main():
+    # --------------------------------------------------------------------------
+
+    # Borehole dimensions
+    # -------------------
+    H = 100.  # Borehole length (m)
+    D = 2.  # Borehole buried depth (m)
+    r_b = 150. / 1000. / 2.  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    # Coaxial
+    # Inner pipe radii
+    r_in_in = 44.2 / 1000. / 2.
+    r_in_out = 50. / 1000. / 2.
+    # Outer pipe radii
+    r_out_in = 97.4 / 1000. / 2.
+    r_out_out = 110. / 1000. / 2.
+    # Pipe radii
+    # Note: This convention is different from pygfunction
+    r_inner = [r_in_in,
+               r_in_out]  # The radii of the inner pipe from in to out
+    r_outer = [r_out_in,
+               r_out_out]  # The radii of the outer pipe from in to out
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Coaxial
+    pos_c = (0, 0)
+    # Double U-tube bhe object
+    bhe_object = PLAT.borehole_heat_exchangers.CoaxialPipe
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = [0.4, 0.4]  # Inner and outer pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = \
+        PLAT.media.Pipe(pos_c, r_inner, r_outer, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    # Coordinates
+    Nx = 12
+    Ny = 13
+    coordinates = ghedt.coordinates.rectangle(Nx, Ny, B, B)
+
+    # Inputs related to fluid
+    # -----------------------
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    # Fluid properties
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    V_flow_borehole = 0.2
+    V_flow_system = V_flow_borehole * float(
+        Nx * Ny)  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Define a borehole
+    borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+    # Simulation start month and end month
+    # --------------------------------
+    # Simulation start month and end month
+    start_month = 1
+    n_years = 20
+    end_month = n_years * 12
+    # Maximum and minimum allowable fluid temperatures
+    max_EFT_allowable = 35  # degrees Celsius
+    min_EFT_allowable = 5  # degrees Celsius
+    # Maximum and minimum allowable heights
+    max_Height = 150  # in meters
+    min_Height = 60  # in meters
+    sim_params = PLAT.media.SimulationParameters(
+        start_month, end_month, max_EFT_allowable, min_EFT_allowable,
+        max_Height, min_Height)
+
+    # Process loads from file
+    # -----------------------
+    # read in the csv file and convert the loads to a list of length 8760
+    hourly_extraction: dict = \
+        pd.read_csv('../Atlanta_Office_Building_Loads.csv').to_dict('list')
+    # Take only the first column in the dictionary
+    hourly_extraction_ground_loads: list = \
+        hourly_extraction[list(hourly_extraction.keys())[0]]
+
+    # --------------------------------------------------------------------------
+
+    # Compute a range of g-functions for interpolation
+    log_time = ghedt.utilities.Eskilson_log_times()
+    H_values = [24., 48., 96., 192., 384.]
+    r_b_values = [r_b] * len(H_values)
+    D_values = [2.] * len(H_values)
+
+    tic = clock()
+    g_function = ghedt.gfunction.compute_live_g_function(
+        B, H_values, r_b_values, D_values, m_flow_borehole, bhe_object,
+        log_time, coordinates, fluid, pipe, grout, soil)
+    toc = clock()
+    print('Time to compute g-functions: {} seconds'.format(toc - tic))
+
+    # Re-Initialize the GHE object
+    ghe = ghedt.ground_heat_exchangers.GHE(
+        V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+        g_function, sim_params, hourly_extraction_ground_loads)
+
+    max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
+
+    print('Min EFT: {}\nMax EFT: {}'.format(min_HP_EFT, max_HP_EFT))
+
+    ghe.size(method='hybrid')
+
+    print('Height of boreholes: {}'.format(ghe.bhe.b.H))
+
+    print('Effective borehole thermal resistance: {}'.
+          format(ghe.bhe.compute_effective_borehole_resistance()))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/GHE/Live_gFunc_Sizing/Double_U_Tube.py b/ghedt/examples/GHE/Live_gFunc_Sizing/Double_U_Tube.py
new file mode 100644
index 0000000..dcf3f9d
--- /dev/null
+++ b/ghedt/examples/GHE/Live_gFunc_Sizing/Double_U_Tube.py
@@ -0,0 +1,136 @@
+# Jack C. Cook
+# Monday, October 26, 2021
+
+import ghedt.PLAT as PLAT
+import pandas as pd
+import ghedt.PLAT.pygfunction as gt
+import ghedt
+from time import time as clock
+
+
+def main():
+    # --------------------------------------------------------------------------
+
+    # Borehole dimensions
+    # -------------------
+    H = 100.  # Borehole length (m)
+    D = 2.  # Borehole buried depth (m)
+    r_b = 150. / 1000. / 2.  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Double U-tube
+    pos = PLAT.media.Pipe.place_pipes(s, r_out, 2)
+    # Double U-tube bhe object
+    bhe_object = PLAT.borehole_heat_exchangers.MultipleUTube
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    # Coordinates
+    Nx = 12
+    Ny = 13
+    coordinates = ghedt.coordinates.rectangle(Nx, Ny, B, B)
+
+    # Inputs related to fluid
+    # -----------------------
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    # Fluid properties
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    V_flow_borehole = 0.2
+    V_flow_system = V_flow_borehole * float(
+        Nx * Ny)  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Define a borehole
+    borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+    # Simulation start month and end month
+    # --------------------------------
+    # Simulation start month and end month
+    start_month = 1
+    n_years = 20
+    end_month = n_years * 12
+    # Maximum and minimum allowable fluid temperatures
+    max_EFT_allowable = 35  # degrees Celsius
+    min_EFT_allowable = 5  # degrees Celsius
+    # Maximum and minimum allowable heights
+    max_Height = 150  # in meters
+    min_Height = 60  # in meters
+    sim_params = PLAT.media.SimulationParameters(
+        start_month, end_month, max_EFT_allowable, min_EFT_allowable,
+        max_Height, min_Height)
+
+    # Process loads from file
+    # -----------------------
+    # read in the csv file and convert the loads to a list of length 8760
+    hourly_extraction: dict = \
+        pd.read_csv('../Atlanta_Office_Building_Loads.csv').to_dict('list')
+    # Take only the first column in the dictionary
+    hourly_extraction_ground_loads: list = \
+        hourly_extraction[list(hourly_extraction.keys())[0]]
+
+    # --------------------------------------------------------------------------
+
+    # Compute a range of g-functions for interpolation
+    log_time = ghedt.utilities.Eskilson_log_times()
+    H_values = [24., 48., 96., 192., 384.]
+    r_b_values = [r_b] * len(H_values)
+    D_values = [2.] * len(H_values)
+
+    tic = clock()
+    g_function = ghedt.gfunction.compute_live_g_function(
+        B, H_values, r_b_values, D_values, m_flow_borehole, bhe_object,
+        log_time, coordinates, fluid, pipe, grout, soil)
+    toc = clock()
+    print('Time to compute g-functions: {} seconds'.format(toc - tic))
+
+    # Re-Initialize the GHE object
+    ghe = ghedt.ground_heat_exchangers.GHE(
+        V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+        g_function, sim_params, hourly_extraction_ground_loads)
+
+    max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
+
+    print('Min EFT: {}\nMax EFT: {}'.format(min_HP_EFT, max_HP_EFT))
+
+    ghe.size(method='hybrid')
+
+    print('Height of boreholes: {}'.format(ghe.bhe.b.H))
+
+    print('Effective borehole thermal resistance: {}'.
+          format(ghe.bhe.compute_effective_borehole_resistance()))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/GHE/Live_gFunc_Sizing/Single_U_Tube.py b/ghedt/examples/GHE/Live_gFunc_Sizing/Single_U_Tube.py
new file mode 100644
index 0000000..d1f9a06
--- /dev/null
+++ b/ghedt/examples/GHE/Live_gFunc_Sizing/Single_U_Tube.py
@@ -0,0 +1,137 @@
+# Jack C. Cook
+# Monday, October 26, 2021
+import time
+
+import ghedt.PLAT as PLAT
+import pandas as pd
+import ghedt.PLAT.pygfunction as gt
+import ghedt
+from time import time as clock
+
+
+def main():
+    # --------------------------------------------------------------------------
+
+    # Borehole dimensions
+    # -------------------
+    H = 100.  # Borehole length (m)
+    D = 2.  # Borehole buried depth (m)
+    r_b = 150. / 1000. / 2.  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Single U-tube [(x_in, y_in), (x_out, y_out)]
+    pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+    # Single U-tube BHE object
+    bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    # Coordinates
+    Nx = 12
+    Ny = 13
+    coordinates = ghedt.coordinates.rectangle(Nx, Ny, B, B)
+
+    # Inputs related to fluid
+    # -----------------------
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    # Fluid properties
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    V_flow_borehole = 0.2
+    V_flow_system = V_flow_borehole * float(
+        Nx * Ny)  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Define a borehole
+    borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+    # Simulation start month and end month
+    # --------------------------------
+    # Simulation start month and end month
+    start_month = 1
+    n_years = 20
+    end_month = n_years * 12
+    # Maximum and minimum allowable fluid temperatures
+    max_EFT_allowable = 35  # degrees Celsius
+    min_EFT_allowable = 5  # degrees Celsius
+    # Maximum and minimum allowable heights
+    max_Height = 150  # in meters
+    min_Height = 60  # in meters
+    sim_params = PLAT.media.SimulationParameters(
+        start_month, end_month, max_EFT_allowable, min_EFT_allowable,
+        max_Height, min_Height)
+
+    # Process loads from file
+    # -----------------------
+    # read in the csv file and convert the loads to a list of length 8760
+    hourly_extraction: dict = \
+        pd.read_csv('../Atlanta_Office_Building_Loads.csv').to_dict('list')
+    # Take only the first column in the dictionary
+    hourly_extraction_ground_loads: list = \
+        hourly_extraction[list(hourly_extraction.keys())[0]]
+
+    # --------------------------------------------------------------------------
+
+    # Compute a range of g-functions for interpolation
+    log_time = ghedt.utilities.Eskilson_log_times()
+    H_values = [24., 48., 96., 192., 384.]
+    r_b_values = [r_b] * len(H_values)
+    D_values = [2.] * len(H_values)
+
+    tic = clock()
+    g_function = ghedt.gfunction.compute_live_g_function(
+        B, H_values, r_b_values, D_values, m_flow_borehole, bhe_object,
+        log_time, coordinates, fluid, pipe, grout, soil)
+    toc = clock()
+    print('Time to compute g-functions: {} seconds'.format(toc-tic))
+
+    # Re-Initialize the GHE object
+    ghe = ghedt.ground_heat_exchangers.GHE(
+        V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+        g_function, sim_params, hourly_extraction_ground_loads)
+
+    max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
+
+    print('Min EFT: {}\nMax EFT: {}'.format(min_HP_EFT, max_HP_EFT))
+
+    ghe.size(method='hybrid')
+
+    print('Height of boreholes: {}'.format(ghe.bhe.b.H))
+
+    print('Effective borehole thermal resistance: {}'.
+          format(ghe.bhe.compute_effective_borehole_resistance()))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/GHEDT/examples/GHE/SimulationComparison/BHE_size_variation.xlsx b/ghedt/examples/GHE/SimulationComparison/BHE_size_variation.xlsx
similarity index 100%
rename from GHEDT/examples/GHE/SimulationComparison/BHE_size_variation.xlsx
rename to ghedt/examples/GHE/SimulationComparison/BHE_size_variation.xlsx
diff --git a/GHEDT/examples/GHE/SimulationComparison/BHE_size_variation_plot.py b/ghedt/examples/GHE/SimulationComparison/BHE_size_variation_plot.py
similarity index 100%
rename from GHEDT/examples/GHE/SimulationComparison/BHE_size_variation_plot.py
rename to ghedt/examples/GHE/SimulationComparison/BHE_size_variation_plot.py
diff --git a/GHEDT/examples/GHE/SimulationComparison/atlanta_load_comparison.py b/ghedt/examples/GHE/SimulationComparison/atlanta_load_comparison.py
similarity index 98%
rename from GHEDT/examples/GHE/SimulationComparison/atlanta_load_comparison.py
rename to ghedt/examples/GHE/SimulationComparison/atlanta_load_comparison.py
index 2be5565..3f19702 100644
--- a/GHEDT/examples/GHE/SimulationComparison/atlanta_load_comparison.py
+++ b/ghedt/examples/GHE/SimulationComparison/atlanta_load_comparison.py
@@ -1,12 +1,12 @@
 # Jack C. Cook
 # Tuesday, October 12, 2021
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -119,7 +119,7 @@ def main():
         hourly_extraction[list(hourly_extraction.keys())[0]]
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/SimulationComparison/constant_load_comparison.py b/ghedt/examples/GHE/SimulationComparison/constant_load_comparison.py
similarity index 98%
rename from GHEDT/examples/GHE/SimulationComparison/constant_load_comparison.py
rename to ghedt/examples/GHE/SimulationComparison/constant_load_comparison.py
index ff5f31f..378e8ac 100644
--- a/GHEDT/examples/GHE/SimulationComparison/constant_load_comparison.py
+++ b/ghedt/examples/GHE/SimulationComparison/constant_load_comparison.py
@@ -1,12 +1,12 @@
 # Jack C. Cook
 # Tuesday, October 12, 2021
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import numpy as np
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -114,7 +114,7 @@ def main():
     hourly_extraction_ground_loads = [-(two_pi_k) * nbh * H] * 8760
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py b/ghedt/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py
similarity index 98%
rename from GHEDT/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py
rename to ghedt/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py
index f7e293e..50f7fad 100644
--- a/GHEDT/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py
+++ b/ghedt/examples/GHE/SimulationComparison/hybrid_load_profile_comparison.py
@@ -1,12 +1,12 @@
 # Jack C. Cook
 # Saturday, October 16, 2021
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -117,7 +117,7 @@ def main():
                                       enumerate(hourly_extraction_ground_loads)]
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/SimulationComparison/range_years_performance.py b/ghedt/examples/GHE/SimulationComparison/range_years_performance.py
similarity index 98%
rename from GHEDT/examples/GHE/SimulationComparison/range_years_performance.py
rename to ghedt/examples/GHE/SimulationComparison/range_years_performance.py
index 8764270..44de22d 100644
--- a/GHEDT/examples/GHE/SimulationComparison/range_years_performance.py
+++ b/ghedt/examples/GHE/SimulationComparison/range_years_performance.py
@@ -2,12 +2,12 @@
 # Saturday, October 23, 2021
 
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 from time import time as clock
 
 
@@ -118,7 +118,7 @@ def main():
                                       enumerate(hourly_extraction_ground_loads)]
 
     # Initialize GHE object
-    GHE = GHEDT.ground_heat_exchangers.GHE(
+    GHE = ghedt.ground_heat_exchangers.GHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/GHE/excess_temperature.py b/ghedt/examples/GHE/excess_temperature.py
similarity index 96%
rename from GHEDT/examples/GHE/excess_temperature.py
rename to ghedt/examples/GHE/excess_temperature.py
index 43c93cb..b867ea2 100644
--- a/GHEDT/examples/GHE/excess_temperature.py
+++ b/ghedt/examples/GHE/excess_temperature.py
@@ -2,12 +2,12 @@
 # Saturday, October 9, 2021
 import copy
 
-import GHEDT.PLAT as PLAT
+import ghedt.PLAT as PLAT
 import matplotlib.pyplot as plt
 import pandas as pd
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import gFunctionDatabase as gfdb
-import GHEDT
+import ghedt
 
 
 def main():
@@ -121,11 +121,11 @@ def main():
     # Ground heat exchanger objects
     # -----------
     # Initialize a HybridGHE
-    HybridGHE = GHEDT.ground_heat_exchangers.HybridGHE(
+    HybridGHE = ghedt.ground_heat_exchangers.HybridGHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
     # Initialize Hourly GLHE object
-    HourlyGHE = GHEDT.ground_heat_exchangers.HourlyGHE(
+    HourlyGHE = ghedt.ground_heat_exchangers.HourlyGHE(
         V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
         GFunction, sim_params, hourly_extraction_ground_loads)
 
diff --git a/GHEDT/examples/Stanford_Conference/Atlanta_Office_Building_Loads.csv b/ghedt/examples/Stanford_Conference/Atlanta_Office_Building_Loads.csv
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/Atlanta_Office_Building_Loads.csv
rename to ghedt/examples/Stanford_Conference/Atlanta_Office_Building_Loads.csv
diff --git a/GHEDT/examples/Stanford_Conference/base_case_1.py b/ghedt/examples/Stanford_Conference/base_case_1.py
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/base_case_1.py
rename to ghedt/examples/Stanford_Conference/base_case_1.py
diff --git a/GHEDT/examples/Stanford_Conference/base_case_2.py b/ghedt/examples/Stanford_Conference/base_case_2.py
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/base_case_2.py
rename to ghedt/examples/Stanford_Conference/base_case_2.py
diff --git a/GHEDT/examples/Stanford_Conference/borehole_design.py b/ghedt/examples/Stanford_Conference/borehole_design.py
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/borehole_design.py
rename to ghedt/examples/Stanford_Conference/borehole_design.py
diff --git a/GHEDT/examples/Stanford_Conference/zoned_rectangle_1.py b/ghedt/examples/Stanford_Conference/zoned_rectangle_1.py
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/zoned_rectangle_1.py
rename to ghedt/examples/Stanford_Conference/zoned_rectangle_1.py
diff --git a/GHEDT/examples/Stanford_Conference/zoned_rectangle_2.py b/ghedt/examples/Stanford_Conference/zoned_rectangle_2.py
similarity index 100%
rename from GHEDT/examples/Stanford_Conference/zoned_rectangle_2.py
rename to ghedt/examples/Stanford_Conference/zoned_rectangle_2.py
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_150.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_150.csv
new file mode 100644
index 0000000..4bee2ab
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_150.csv
@@ -0,0 +1,151 @@
+x,y
+0.0,0.0
+4.517065150705926,0.0
+9.034130301411851,0.0
+13.551195452117778,0.0
+18.068260602823702,0.0
+22.585325753529627,0.0
+27.102390904235552,0.0
+31.619456054941477,0.0
+64.09122206371329,0.0
+68.68712949753885,0.0
+73.2830369313644,0.0
+77.87894436518997,0.0
+82.47485179901552,0.0
+87.07075923284108,0.0
+91.66666666666664,0.0
+0.0,5.555555555555556
+4.88637826621886,5.555555555555556
+9.77275653243772,5.555555555555556
+14.65913479865658,5.555555555555556
+19.54551306487544,5.555555555555556
+24.4318913310943,5.555555555555556
+29.318269597313158,5.555555555555556
+61.790035606084984,5.555555555555556
+66.89234594518545,5.555555555555556
+71.99465628428592,5.555555555555556
+77.0969666233864,5.555555555555556
+82.19927696248686,5.555555555555556
+87.30158730158733,5.555555555555556
+0.0,11.111111111111112
+4.502847189947476,11.111111111111112
+9.005694379894951,11.111111111111112
+13.508541569842427,11.111111111111112
+18.011388759789902,11.111111111111112
+22.514235949737376,11.111111111111112
+27.01708313968485,11.111111111111112
+59.48884914845667,11.111111111111112
+64.17838090606692,11.111111111111112
+68.86791266367717,11.111111111111112
+73.55744442128743,11.111111111111112
+78.24697617889768,11.111111111111112
+82.93650793650794,11.111111111111112
+0.0,16.666666666666668
+4.943179336411309,16.666666666666668
+9.886358672822618,16.666666666666668
+14.829538009233929,16.666666666666668
+19.772717345645237,16.666666666666668
+24.715896682056545,16.666666666666668
+57.18766269082837,16.666666666666668
+62.53360416097842,16.666666666666668
+67.87954563112848,16.666666666666668
+73.22548710127853,16.666666666666668
+78.57142857142858,16.666666666666668
+0.0,22.222222222222225
+5.603677556107059,22.222222222222225
+11.207355112214119,22.222222222222225
+16.81103266832118,22.222222222222225
+22.414710224428237,22.222222222222225
+54.88647623320006,22.222222222222225
+59.71644447648735,22.222222222222225
+64.54641271977464,22.222222222222225
+69.37638096306193,22.222222222222225
+74.20634920634922,22.222222222222225
+0.0,27.777777777777782
+5.028380941699983,27.777777777777782
+10.056761883399966,27.777777777777782
+15.08514282509995,27.777777777777782
+20.113523766799933,27.777777777777782
+52.58528977557175,27.777777777777782
+58.33728313080445,27.777777777777782
+64.08927648603715,27.777777777777782
+69.84126984126985,27.777777777777782
+0.0,33.333333333333336
+5.937445769723876,33.333333333333336
+11.874891539447752,33.333333333333336
+17.812337309171628,33.333333333333336
+50.28410331794345,33.333333333333336
+55.34813237069246,33.333333333333336
+60.412161423441475,33.333333333333336
+65.47619047619048,33.333333333333336
+0.0,38.88888888888889
+5.170383617181108,38.88888888888889
+10.340767234362216,38.88888888888889
+15.511150851543324,38.88888888888889
+47.982916860315136,38.88888888888889
+54.54701398571312,38.88888888888889
+61.111111111111114,38.88888888888889
+0.0,44.44444444444445
+6.604982196957508,44.44444444444445
+13.209964393915016,44.44444444444445
+45.68173040268683,44.44444444444445
+51.21388107435929,44.44444444444445
+56.746031746031754,44.44444444444445
+0.0,50.00000000000001
+5.454388968143355,50.00000000000001
+10.90877793628671,50.00000000000001
+43.380543945058534,50.00000000000001
+47.880748163005464,50.00000000000001
+52.380952380952394,50.00000000000001
+0.0,55.555555555555564
+8.607591478658403,55.555555555555564
+41.07935748743022,55.555555555555564
+48.01587301587302,55.555555555555564
+0.0,61.11111111111112
+7.089267357932339,61.11111111111112
+38.77817102980192,61.11111111111112
+43.65079365079365,61.11111111111112
+0.0,66.66666666666667
+5.125391231667934,66.66666666666667
+10.250782463335868,66.66666666666667
+15.376173695003803,66.66666666666667
+20.501564926671737,66.66666666666667
+37.88134942894395,66.66666666666667
+0.0,72.22222222222223
+4.542118614996889,72.22222222222223
+9.084237229993779,72.22222222222223
+13.626355844990668,72.22222222222223
+18.168474459987557,72.22222222222223
+22.710593074984445,72.22222222222223
+27.252711689981332,72.22222222222223
+31.79483030497822,72.22222222222223
+35.60773261280657,72.22222222222223
+0.0,77.77777777777779
+5.092592592592594,77.77777777777779
+10.185185185185189,77.77777777777779
+15.277777777777782,77.77777777777779
+20.370370370370377,77.77777777777779
+25.462962962962973,77.77777777777779
+30.555555555555568,77.77777777777779
+0.0,83.33333333333334
+5.238095238095241,83.33333333333334
+10.476190476190482,83.33333333333334
+15.714285714285722,83.33333333333334
+20.952380952380963,83.33333333333334
+26.190476190476204,83.33333333333334
+0.0,88.8888888888889
+5.456349206349209,88.8888888888889
+10.912698412698418,88.8888888888889
+16.369047619047628,88.8888888888889
+21.825396825396837,88.8888888888889
+0.0,94.44444444444446
+5.820105820105823,94.44444444444446
+11.640211640211646,94.44444444444446
+17.46031746031747,94.44444444444446
+0.0,100.00000000000001
+6.547619047619051,100.00000000000001
+13.095238095238102,100.00000000000001
+0.0,105.55555555555557
+8.730158730158735,105.55555555555557
+2.1825396825396837,111.11111111111113
+0.0,116.66666666666669
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_227.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_227.csv
new file mode 100644
index 0000000..9d24b1c
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_227.csv
@@ -0,0 +1,228 @@
+x,y
+0.0,0.0
+4.583333333333334,0.0
+9.166666666666668,0.0
+13.750000000000002,0.0
+18.333333333333336,0.0
+22.91666666666667,0.0
+27.500000000000007,0.0
+32.08333333333334,0.0
+36.66666666666668,0.0
+41.250000000000014,0.0
+45.83333333333335,0.0
+50.416666666666686,0.0
+55.00000000000002,0.0
+59.58333333333336,0.0
+64.16666666666669,0.0
+68.75000000000001,0.0
+73.33333333333334,0.0
+77.91666666666667,0.0
+82.5,0.0
+87.08333333333333,0.0
+91.66666666666666,0.0
+3.1250000000000004,5.208333333333334
+7.734375,5.208333333333334
+12.34375,5.208333333333334
+16.953125,5.208333333333334
+21.5625,5.208333333333334
+26.171875,5.208333333333334
+30.78125,5.208333333333334
+35.390625,5.208333333333334
+40.0,5.208333333333334
+44.609375,5.208333333333334
+49.21875,5.208333333333334
+53.828125,5.208333333333334
+58.4375,5.208333333333334
+63.046875,5.208333333333334
+67.65625,5.208333333333334
+72.265625,5.208333333333334
+76.875,5.208333333333334
+81.484375,5.208333333333334
+86.09375,5.208333333333334
+90.703125,5.208333333333334
+95.3125,5.208333333333334
+6.250000000000001,10.416666666666668
+11.078954608825489,10.416666666666668
+15.907909217650978,10.416666666666668
+20.736863826476466,10.416666666666668
+25.565818435301953,10.416666666666668
+97.9878715489896,10.416666666666668
+97.20342586140815,15.625000000000002
+102.60416666666667,15.625000000000002
+97.38944195817041,20.833333333333336
+106.25,20.833333333333336
+97.57545805493268,26.04166666666667
+103.73564569413301,26.04166666666667
+109.89583333333334,26.04166666666667
+97.76147415169494,31.250000000000004
+103.02153832335219,31.250000000000004
+108.28160249500944,31.250000000000004
+113.54166666666669,31.250000000000004
+97.9474902484572,36.458333333333336
+102.7574926863429,36.458333333333336
+107.5674951242286,36.458333333333336
+112.3774975621143,36.458333333333336
+117.1875,36.458333333333336
+25.000000000000004,41.66666666666667
+29.790486547492154,41.66666666666667
+34.5809730949843,41.66666666666667
+39.37145964247645,41.66666666666667
+44.1619461899686,41.66666666666667
+48.952432737460754,41.66666666666667
+53.742919284952904,41.66666666666667
+58.533405832445055,41.66666666666667
+63.323892379937206,41.66666666666667
+68.11437892742936,41.66666666666667
+98.13350634521947,41.66666666666667
+102.67347174284225,41.66666666666667
+107.21343714046503,41.66666666666667
+111.75340253808781,41.66666666666667
+116.29336793571059,41.66666666666667
+120.83333333333337,41.66666666666667
+28.125000000000004,46.87500000000001
+33.146924378023954,46.87500000000001
+38.16884875604791,46.87500000000001
+43.19077313407186,46.87500000000001
+48.212697512095815,46.87500000000001
+53.23462189011977,46.87500000000001
+58.25654626814372,46.87500000000001
+63.278470646167676,46.87500000000001
+68.30039502419163,46.87500000000001
+98.31952244198173,46.87500000000001
+103.55145128691872,46.87500000000001
+108.78338013185571,46.87500000000001
+114.0153089767927,46.87500000000001
+119.24723782172968,46.87500000000001
+124.47916666666667,46.87500000000001
+31.250000000000004,52.08333333333334
+35.90455139011924,52.08333333333334
+40.559102780238476,52.08333333333334
+45.213654170357714,52.08333333333334
+49.86820556047695,52.08333333333334
+54.52275695059619,52.08333333333334
+59.17730834071543,52.08333333333334
+63.831859730834665,52.08333333333334
+68.4864111209539,52.08333333333334
+98.505538538744,52.08333333333334
+103.44211544895333,52.08333333333334
+108.37869235916267,52.08333333333334
+113.31526926937201,52.08333333333334
+118.25184617958135,52.08333333333334
+123.18842308979069,52.08333333333334
+128.12500000000003,52.08333333333334
+34.375,57.29166666666667
+39.27463245967374,57.29166666666667
+44.17426491934748,57.29166666666667
+49.07389737902122,57.29166666666667
+53.97352983869496,57.29166666666667
+58.8731622983687,57.29166666666667
+63.77279475804244,57.29166666666667
+68.67242721771618,57.29166666666667
+98.69155463550626,57.29166666666667
+103.41716587805298,57.29166666666667
+108.1427771205997,57.29166666666667
+112.86838836314642,57.29166666666667
+117.59399960569314,57.29166666666667
+122.31961084823986,57.29166666666667
+127.04522209078658,57.29166666666667
+131.77083333333331,57.29166666666667
+37.5,62.50000000000001
+42.72640721907974,62.50000000000001
+47.95281443815948,62.50000000000001
+53.17922165723922,62.50000000000001
+58.40562887631896,62.50000000000001
+63.632036095398696,62.50000000000001
+68.85844331447844,62.50000000000001
+98.87757073226852,62.50000000000001
+103.44495772406829,62.50000000000001
+108.01234471586805,62.50000000000001
+112.57973170766782,62.50000000000001
+117.14711869946758,62.50000000000001
+121.71450569126735,62.50000000000001
+126.28189268306711,62.50000000000001
+130.8492796748669,62.50000000000001
+135.41666666666666,62.50000000000001
+40.62500000000001,67.70833333333334
+45.361576568540116,67.70833333333334
+50.09815313708023,67.70833333333334
+54.83472970562035,67.70833333333334
+59.57130627416046,67.70833333333334
+64.30788284270058,67.70833333333334
+69.0444594112407,67.70833333333334
+99.0635868290308,67.70833333333334
+104.06345097540195,67.70833333333334
+109.0633151217731,67.70833333333334
+114.06317926814425,67.70833333333334
+119.0630434145154,67.70833333333334
+124.06290756088656,67.70833333333334
+129.0627717072577,67.70833333333334
+134.06263585362885,67.70833333333334
+139.0625,67.70833333333334
+43.75,72.91666666666667
+48.46230158730159,72.91666666666667
+53.17460317460318,72.91666666666667
+57.886904761904766,72.91666666666667
+62.599206349206355,72.91666666666667
+67.31150793650794,72.91666666666667
+72.02380952380952,72.91666666666667
+76.7361111111111,72.91666666666667
+81.44841269841268,72.91666666666667
+86.16071428571426,72.91666666666667
+90.87301587301585,72.91666666666667
+95.58531746031743,72.91666666666667
+100.29761904761901,72.91666666666667
+105.00992063492059,72.91666666666667
+109.72222222222217,72.91666666666667
+114.43452380952375,72.91666666666667
+119.14682539682534,72.91666666666667
+123.85912698412692,72.91666666666667
+128.5714285714285,72.91666666666667
+133.2837301587301,72.91666666666667
+137.9960317460317,72.91666666666667
+142.7083333333333,72.91666666666667
+46.87500000000001,78.12500000000001
+51.39678030303031,78.12500000000001
+55.918560606060616,78.12500000000001
+60.44034090909092,78.12500000000001
+64.96212121212122,78.12500000000001
+69.48390151515152,78.12500000000001
+74.00568181818181,78.12500000000001
+78.52746212121211,78.12500000000001
+83.04924242424241,78.12500000000001
+87.5710227272727,78.12500000000001
+92.092803030303,78.12500000000001
+96.6145833333333,78.12500000000001
+101.1363636363636,78.12500000000001
+105.6581439393939,78.12500000000001
+110.17992424242419,78.12500000000001
+114.70170454545449,78.12500000000001
+119.22348484848479,78.12500000000001
+123.74526515151508,78.12500000000001
+128.26704545454538,78.12500000000001
+132.7888257575757,78.12500000000001
+137.310606060606,78.12500000000001
+141.83238636363632,78.12500000000001
+146.35416666666663,78.12500000000001
+50.00000000000001,83.33333333333334
+54.545454545454554,83.33333333333334
+59.0909090909091,83.33333333333334
+63.63636363636365,83.33333333333334
+68.18181818181819,83.33333333333334
+72.72727272727273,83.33333333333334
+77.27272727272728,83.33333333333334
+81.81818181818183,83.33333333333334
+86.36363636363637,83.33333333333334
+90.90909090909092,83.33333333333334
+95.45454545454547,83.33333333333334
+100.00000000000001,83.33333333333334
+104.54545454545456,83.33333333333334
+109.09090909090911,83.33333333333334
+113.63636363636365,83.33333333333334
+118.1818181818182,83.33333333333334
+122.72727272727275,83.33333333333334
+127.2727272727273,83.33333333333334
+131.81818181818184,83.33333333333334
+136.36363636363637,83.33333333333334
+140.9090909090909,83.33333333333334
+145.45454545454544,83.33333333333334
+149.99999999999997,83.33333333333334
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_242.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_242.csv
new file mode 100644
index 0000000..b8a3b23
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_242.csv
@@ -0,0 +1,243 @@
+x,y
+0.0,0.0
+4.625632084384173,0.0
+9.251264168768346,0.0
+13.87689625315252,0.0
+18.502528337536692,0.0
+23.128160421920864,0.0
+27.753792506305036,0.0
+32.37942459068921,0.0
+37.005056675073384,0.0
+41.630688759457556,0.0
+46.25632084384173,0.0
+50.8819529282259,0.0
+114.59914525173258,0.0
+119.79957262586629,0.0
+125.0,0.0
+0.0,6.140350877192984
+4.593374546483699,6.140350877192984
+9.186749092967398,6.140350877192984
+13.780123639451098,6.140350877192984
+18.373498185934796,6.140350877192984
+22.966872732418494,6.140350877192984
+27.560247278902192,6.140350877192984
+32.15362182538589,6.140350877192984
+36.74699637186959,6.140350877192984
+41.340370918353294,6.140350877192984
+45.933745464836996,6.140350877192984
+0.0,12.280701754385968
+4.553948666827563,12.280701754385968
+9.107897333655126,12.280701754385968
+13.66184600048269,12.280701754385968
+18.215794667310252,12.280701754385968
+22.769743334137814,12.280701754385968
+27.323692000965377,12.280701754385968
+31.87764066779294,12.280701754385968
+36.431589334620504,12.280701754385968
+40.98553800144807,12.280701754385968
+80.77080936838749,12.280701754385968
+0.0,18.421052631578952
+4.504666317257393,18.421052631578952
+9.009332634514786,18.421052631578952
+13.51399895177218,18.421052631578952
+18.018665269029572,18.421052631578952
+22.523331586286965,18.421052631578952
+27.027997903544357,18.421052631578952
+31.53266422080175,18.421052631578952
+36.037330538059145,18.421052631578952
+74.56597116920283,18.421052631578952
+79.59303101657163,18.421052631578952
+84.62009086394043,18.421052631578952
+89.64715071130924,18.421052631578952
+113.1262532685943,18.421052631578952
+0.0,24.561403508771935
+5.181520512445038,24.561403508771935
+10.363041024890077,24.561403508771935
+15.544561537335115,24.561403508771935
+20.726082049780153,24.561403508771935
+25.907602562225193,24.561403508771935
+31.089123074670233,24.561403508771935
+69.6177637058139,24.561403508771935
+74.22594664125079,24.561403508771935
+78.83412957668767,24.561403508771935
+83.44231251212456,24.561403508771935
+88.05049544756145,24.561403508771935
+92.65867838299833,24.561403508771935
+97.26686131843522,24.561403508771935
+108.67846532637353,24.561403508771935
+0.0,30.701754385964918
+5.228183122256262,30.701754385964918
+10.456366244512523,30.701754385964918
+15.684549366768785,30.701754385964918
+20.912732489025046,30.701754385964918
+26.140915611281308,30.701754385964918
+64.66955624242499,30.701754385964918
+69.1799564260152,30.701754385964918
+73.6903566096054,30.701754385964918
+78.20075679319561,30.701754385964918
+82.71115697678582,30.701754385964918
+87.22155716037602,30.701754385964918
+91.73195734396623,30.701754385964918
+96.24235752755644,30.701754385964918
+100.75275771114664,30.701754385964918
+105.26315789473685,30.701754385964918
+0.0,36.842105263157904
+5.2981770369730965,36.842105263157904
+10.596354073946193,36.842105263157904
+15.894531110919289,36.842105263157904
+21.192708147892386,36.842105263157904
+59.72134877903606,36.842105263157904
+64.34295330066364,36.842105263157904
+68.96455782229121,36.842105263157904
+73.58616234391879,36.842105263157904
+78.20776686554636,36.842105263157904
+82.82937138717394,36.842105263157904
+87.45097590880151,36.842105263157904
+92.07258043042908,36.842105263157904
+96.69418495205666,36.842105263157904
+101.31578947368423,36.842105263157904
+0.0,42.982456140350884
+5.414833561501157,42.982456140350884
+10.829667123002315,42.982456140350884
+16.24450068450347,42.982456140350884
+54.773141315647145,42.982456140350884
+59.50595017531208,42.982456140350884
+64.23875903497702,42.982456140350884
+68.97156789464196,42.982456140350884
+73.7043767543069,42.982456140350884
+78.43718561397185,42.982456140350884
+83.16999447363679,42.982456140350884
+87.90280333330173,42.982456140350884
+92.63561219296668,42.982456140350884
+97.36842105263162,42.982456140350884
+0.0,49.12280701754387
+5.648146610557272,49.12280701754387
+11.296293221114544,49.12280701754387
+49.824933852258226,49.12280701754387
+54.66894704996053,49.12280701754387
+59.51296024766283,49.12280701754387
+64.35697344536513,49.12280701754387
+69.20098664306742,49.12280701754387
+74.04499984076972,49.12280701754387
+78.88901303847202,49.12280701754387
+83.73302623617431,49.12280701754387
+88.5770394338766,49.12280701754387
+93.4210526315789,49.12280701754387
+0.0,55.26315789473686
+6.348085757725624,55.26315789473686
+44.8767263888693,55.26315789473686
+49.831943924608964,55.26315789473686
+54.78716146034863,55.26315789473686
+59.74237899608829,55.26315789473686
+64.69759653182795,55.26315789473686
+69.65281406756762,55.26315789473686
+74.60803160330728,55.26315789473686
+79.56324913904695,55.26315789473686
+84.51846667478661,55.26315789473686
+89.47368421052627,55.26315789473686
+0.6999391471683533,61.403508771929836
+47.36287223758856,61.403508771929836
+52.1333026815742,61.403508771929836
+56.90373312555984,61.403508771929836
+61.67416356954548,61.403508771929836
+66.44459401353112,61.403508771929836
+71.21502445751676,61.403508771929836
+75.98545490150241,61.403508771929836
+80.75588534548805,61.403508771929836
+85.5263157894737,61.403508771929836
+0.0,67.54385964912282
+7.171456482913172,67.54385964912282
+54.98258284471458,67.54385964912282
+60.30185574945587,67.54385964912282
+65.62112865419716,67.54385964912282
+70.94040155893846,67.54385964912282
+76.25967446367976,67.54385964912282
+81.57894736842105,67.54385964912282
+0.0,73.68421052631581
+4.930389030013065,73.68421052631581
+9.86077806002613,73.68421052631581
+14.791167090039195,73.68421052631581
+62.602293451840595,73.68421052631581
+67.6120552836832,73.68421052631581
+72.62181711552581,73.68421052631581
+77.63157894736842,73.68421052631581
+0.0,79.8245614035088
+5.602719424291302,79.8245614035088
+11.205438848582604,79.8245614035088
+16.808158272873907,79.8245614035088
+22.41087769716521,79.8245614035088
+63.61253716645729,79.8245614035088
+68.64837384638653,79.8245614035088
+73.68421052631578,79.8245614035088
+0.0,85.96491228070177
+5.005098050715201,85.96491228070177
+10.010196101430402,85.96491228070177
+15.015294152145604,85.96491228070177
+20.020392202860805,85.96491228070177
+25.025490253576006,85.96491228070177
+30.030588304291207,85.96491228070177
+58.664329703068375,85.96491228070177
+64.20058590416576,85.96491228070177
+69.73684210526315,85.96491228070177
+0.0,92.10526315789475
+4.706287363927153,92.10526315789475
+9.412574727854306,92.10526315789475
+14.118862091781459,92.10526315789475
+18.825149455708612,92.10526315789475
+23.531436819635765,92.10526315789475
+28.237724183562918,92.10526315789475
+32.94401154749007,92.10526315789475
+37.650298911417224,92.10526315789475
+53.71612223967946,92.10526315789475
+59.75279796194499,92.10526315789475
+65.78947368421052,92.10526315789475
+0.0,98.24561403508774
+4.9743291274907655,98.24561403508774
+9.948658254981531,98.24561403508774
+14.922987382472297,98.24561403508774
+19.897316509963062,98.24561403508774
+24.871645637453828,98.24561403508774
+29.845974764944593,98.24561403508774
+34.82030389243536,98.24561403508774
+39.794633019926124,98.24561403508774
+44.768962147416886,98.24561403508774
+49.268962147416886,98.24561403508774
+55.55553370528739,98.24561403508774
+61.84210526315789,98.24561403508774
+0.0,104.38596491228073
+4.824561403508771,104.38596491228073
+9.649122807017543,104.38596491228073
+14.473684210526315,104.38596491228073
+19.298245614035086,104.38596491228073
+24.122807017543856,104.38596491228073
+28.947368421052627,104.38596491228073
+33.7719298245614,104.38596491228073
+38.59649122807017,104.38596491228073
+43.421052631578945,104.38596491228073
+48.24561403508772,104.38596491228073
+53.07017543859649,104.38596491228073
+57.89473684210527,104.38596491228073
+0.0,110.52631578947371
+4.904306220095692,110.52631578947371
+9.808612440191384,110.52631578947371
+14.712918660287077,110.52631578947371
+19.617224880382768,110.52631578947371
+24.52153110047846,110.52631578947371
+29.42583732057415,110.52631578947371
+34.330143540669845,110.52631578947371
+39.234449760765536,110.52631578947371
+44.13875598086123,110.52631578947371
+49.04306220095692,110.52631578947371
+53.94736842105261,110.52631578947371
+0.0,116.66666666666669
+4.545454545454546,116.66666666666669
+9.090909090909092,116.66666666666669
+13.636363636363637,116.66666666666669
+18.181818181818183,116.66666666666669
+22.72727272727273,116.66666666666669
+27.272727272727277,116.66666666666669
+31.818181818181824,116.66666666666669
+36.36363636363637,116.66666666666669
+40.909090909090914,116.66666666666669
+45.45454545454546,116.66666666666669
+50.00000000000001,116.66666666666669
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_273.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_273.csv
new file mode 100644
index 0000000..1798bf9
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_273.csv
@@ -0,0 +1,274 @@
+x,y
+0.0,0.0
+5.172030752145993,0.0
+10.344061504291986,0.0
+15.516092256437979,0.0
+20.688123008583972,0.0
+25.860153760729965,0.0
+31.032184512875958,0.0
+36.20421526502195,0.0
+41.376246017167944,0.0
+46.54827676931394,0.0
+85.98528076861048,0.0
+91.23620072057233,0.0
+96.48712067253418,0.0
+101.73804062449602,0.0
+106.98896057645787,0.0
+112.23988052841972,0.0
+117.49080048038157,0.0
+122.74172043234341,0.0
+127.99264038430526,0.0
+133.2435603362671,0.0
+138.49448028822894,0.0
+143.74540024019078,0.0
+148.9963201921526,0.0
+154.24724014411444,0.0
+159.49816009607628,0.0
+164.7490800480381,0.0
+169.99999999999994,0.0
+0.0,5.0
+5.314877765069299,5.0
+10.629755530138597,5.0
+15.944633295207897,5.0
+21.259511060277195,5.0
+26.574388825346492,5.0
+31.88926659041579,5.0
+37.20414435548509,5.0
+42.51902212055439,5.0
+92.18990226298452,5.0
+97.24181400610468,5.0
+102.29372574922483,5.0
+107.34563749234499,5.0
+112.39754923546515,5.0
+117.44946097858531,5.0
+122.50137272170547,5.0
+127.55328446482562,5.0
+132.60519620794577,5.0
+137.6571079510659,5.0
+142.70901969418605,5.0
+147.7609314373062,5.0
+152.81284318042634,5.0
+157.86475492354649,5.0
+162.91666666666663,5.0
+0.0,10.0
+5.498538210256406,10.0
+10.997076420512812,10.0
+16.495614630769218,10.0
+21.994152841025624,10.0
+27.49269105128203,10.0
+32.991229261538436,10.0
+38.48976747179484,10.0
+89.86128831331975,10.0
+94.93606100716694,10.0
+100.01083370101414,10.0
+105.08560639486133,10.0
+110.16037908870852,10.0
+115.23515178255572,10.0
+120.30992447640291,10.0
+125.3846971702501,10.0
+130.45946986409731,10.0
+135.5342425579445,10.0
+140.6090152517917,10.0
+145.6837879456389,10.0
+150.7585606394861,10.0
+155.8333333333333,10.0
+0.0,15.0
+5.743418803839216,15.0
+11.486837607678432,15.0
+17.230256411517647,15.0
+22.973675215356863,15.0
+28.71709401919608,15.0
+34.460512823035295,15.0
+85.8320336645602,15.0
+91.07519752584685,15.0
+96.31836138713349,15.0
+101.56152524842014,15.0
+106.80468910970679,15.0
+112.04785297099343,15.0
+117.29101683228008,15.0
+122.53418069356673,15.0
+127.77734455485337,15.0
+133.02050841614002,15.0
+138.26367227742668,15.0
+143.50683613871334,15.0
+148.75,15.0
+0.0,20.0
+5.07187636237929,20.0
+10.14375272475858,20.0
+15.21562908713787,20.0
+20.28750544951716,20.0
+25.359381811896448,20.0
+30.431258174275737,20.0
+81.80277901580065,20.0
+87.24495062042483,20.0
+92.68712222504901,20.0
+98.12929382967319,20.0
+103.57146543429737,20.0
+109.01363703892154,20.0
+114.45580864354572,20.0
+119.8979802481699,20.0
+125.34015185279408,20.0
+130.78232345741827,20.0
+136.22449506204245,20.0
+141.66666666666663,20.0
+0.0,25.0
+5.280400705103238,25.0
+10.560801410206476,25.0
+15.841202115309715,25.0
+21.121602820412953,25.0
+26.402003525516193,25.0
+77.7735243670411,25.0
+82.93805245488585,25.0
+88.10258054273059,25.0
+93.26710863057534,25.0
+98.43163671842008,25.0
+103.59616480626482,25.0
+108.76069289410957,25.0
+113.92522098195431,25.0
+119.08974906979905,25.0
+124.2542771576438,25.0
+129.41880524548856,25.0
+134.58333333333331,25.0
+0.0,30.0
+5.593187219189161,30.0
+11.186374438378323,30.0
+16.779561657567484,30.0
+22.372748876756646,30.0
+73.74426971828154,30.0
+79.11984274645339,30.0
+84.49541577462523,30.0
+89.87098880279707,30.0
+95.24656183096891,30.0
+100.62213485914076,30.0
+105.9977078873126,30.0
+111.37328091548444,30.0
+116.74885394365629,30.0
+122.12442697182813,30.0
+127.49999999999997,30.0
+0.0,35.0
+6.114498075999033,35.0
+12.228996151998066,35.0
+18.3434942279971,35.0
+69.715015069522,35.0
+74.78518022923646,35.0
+79.85534538895092,35.0
+84.92551054866539,35.0
+89.99567570837985,35.0
+95.06584086809431,35.0
+100.13600602780878,35.0
+105.20617118752324,35.0
+110.2763363472377,35.0
+115.34650150695217,35.0
+120.41666666666663,35.0
+0.0,40.0
+7.157119789618777,40.0
+14.314239579237555,40.0
+65.68576042076245,40.0
+70.97993518882588,40.0
+76.2741099568893,40.0
+81.56828472495273,40.0
+86.86245949301616,40.0
+92.15663426107959,40.0
+97.45080902914302,40.0
+102.74498379720644,40.0
+108.03915856526987,40.0
+113.3333333333333,40.0
+0.0,45.0
+5.142492465238998,45.0
+10.284984930477997,45.0
+61.6565057720029,45.0
+67.23069255050254,45.0
+72.80487932900218,45.0
+78.37906610750181,45.0
+83.95325288600145,45.0
+89.52743966450109,45.0
+95.10162644300073,45.0
+100.67581322150036,45.0
+106.25,45.0
+0.0,50.0
+6.255730281718449,50.0
+57.62725112324336,50.0
+62.81967806617127,50.0
+68.01210500909919,50.0
+73.2045319520271,50.0
+78.396958894955,50.0
+83.58938583788292,50.0
+88.78181278081082,50.0
+93.97423972373873,50.0
+99.16666666666664,50.0
+1.1132378164794527,55.0
+53.59799647448381,55.0
+59.09590174003374,55.0
+64.59380700558367,55.0
+70.0917122711336,55.0
+75.58961753668353,55.0
+81.08752280223347,55.0
+86.5854280677834,55.0
+92.08333333333333,55.0
+49.56874182572426,60.0
+54.63035013633508,60.0
+59.691958446945904,60.0
+64.75356675755673,60.0
+69.81517506816755,60.0
+74.87678337877837,60.0
+79.93839168938919,60.0
+85.00000000000001,60.0
+45.53948717696471,65.0
+50.9356837585817,65.0
+56.331880340198694,65.0
+61.728076921815685,65.0
+67.12427350343268,65.0
+72.52047008504967,65.0
+77.91666666666666,65.0
+41.510232528205165,70.0
+47.3748526892308,70.0
+53.23947285025643,70.0
+59.10409301128207,70.0
+64.9687131723077,70.0
+70.83333333333333,70.0
+37.48097787944562,75.0
+42.73478230355649,75.0
+47.98858672766737,75.0
+53.24239115177824,75.0
+58.49619557588912,75.0
+63.74999999999999,75.0
+33.45172323068607,80.0
+39.25545908968122,80.0
+45.059194948676364,80.0
+50.86293080767151,80.0
+56.66666666666666,80.0
+0.10967036288178278,85.0
+29.422468581926523,85.0
+34.46268476977822,85.0
+39.50290095762992,85.0
+44.54311714548162,85.0
+49.583333333333314,85.0
+0.0,90.0
+6.4239622201376,90.0
+25.393213933166976,90.0
+31.095475955444652,90.0
+36.79773797772233,90.0
+42.5,90.0
+0.0,95.0
+6.314291857255818,95.0
+12.628583714511636,95.0
+21.36395928440743,95.0
+28.390312975537043,95.0
+35.41666666666666,95.0
+0.0,100.0
+5.6666666666666625,100.0
+11.333333333333325,100.0
+16.999999999999986,100.0
+22.66666666666665,100.0
+28.333333333333314,100.0
+0.0,105.0
+5.3125,105.0
+10.625,105.0
+15.9375,105.0
+21.25,105.0
+0.0,110.0
+7.083333333333329,110.0
+14.166666666666657,110.0
+0.0,115.0
+7.083333333333314,115.0
+0.0,120.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_311.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_311.csv
new file mode 100644
index 0000000..af62298
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_311.csv
@@ -0,0 +1,312 @@
+x,y
+0.0,0.0
+5.0,0.0
+10.0,0.0
+15.0,0.0
+20.0,0.0
+25.0,0.0
+30.0,0.0
+35.0,0.0
+40.0,0.0
+45.0,0.0
+50.0,0.0
+55.0,0.0
+60.0,0.0
+65.0,0.0
+70.0,0.0
+75.0,0.0
+80.0,0.0
+85.0,0.0
+90.0,0.0
+95.0,0.0
+100.0,0.0
+105.0,0.0
+110.0,0.0
+115.0,0.0
+120.0,0.0
+125.0,0.0
+130.0,0.0
+135.0,0.0
+140.0,0.0
+145.0,0.0
+150.0,0.0
+155.0,0.0
+1.0416666666666667,5.0
+6.090741635939947,5.0
+11.139816605213227,5.0
+16.188891574486508,5.0
+21.23796654375979,5.0
+26.28704151303307,5.0
+31.336116482306352,5.0
+36.38519145157963,5.0
+41.43426642085291,5.0
+46.483341390126185,5.0
+51.53241635939946,5.0
+56.58149132867274,5.0
+61.63056629794602,5.0
+66.6796412672193,5.0
+71.72871623649257,5.0
+76.77779120576585,5.0
+81.82686617503913,5.0
+91.58692818660255,5.0
+96.93508623024474,5.0
+102.28324427388692,5.0
+107.63140231752911,5.0
+112.9795603611713,5.0
+118.32771840481348,5.0
+123.67587644845567,5.0
+129.02403449209785,5.0
+134.37219253574006,5.0
+139.72035057938226,5.0
+145.06850862302446,5.0
+150.41666666666666,5.0
+2.0833333333333335,10.0
+7.47674474670975,10.0
+12.870156160086168,10.0
+18.263567573462584,10.0
+23.656978986839,10.0
+29.050390400215417,10.0
+34.44380181359183,10.0
+39.83721322696825,10.0
+45.23062464034467,10.0
+50.62403605372109,10.0
+56.01744746709751,10.0
+61.41085888047393,10.0
+66.80427029385035,10.0
+93.25108797614364,10.0
+98.5093125118626,10.0
+103.76753704758157,10.0
+109.02576158330054,10.0
+114.2839861190195,10.0
+119.54221065473847,10.0
+124.80043519045743,10.0
+130.05865972617642,10.0
+135.31688426189538,10.0
+140.57510879761435,10.0
+145.83333333333331,10.0
+3.125,15.0
+8.531297156962388,15.0
+13.937594313924777,15.0
+19.343891470887165,15.0
+24.750188627849553,15.0
+30.15648578481194,15.0
+35.56278294177433,15.0
+40.96908009873672,15.0
+46.37537725569911,15.0
+51.781674412661495,15.0
+94.91524776568473,15.0
+100.06355356949753,15.0
+105.21185937331033,15.0
+110.36016517712314,15.0
+115.50847098093594,15.0
+120.65677678474874,15.0
+125.80508258856155,15.0
+130.95338839237436,15.0
+136.10169419618717,15.0
+141.24999999999997,15.0
+4.166666666666667,20.0
+9.598735310801004,20.0
+15.03080395493534,20.0
+20.462872599069676,20.0
+25.894941243204013,20.0
+31.32700988733835,20.0
+36.75907853147268,20.0
+96.57940755522581,20.0
+101.59031494415592,20.0
+106.60122233308603,20.0
+111.61212972201614,20.0
+116.62303711094624,20.0
+121.63394449987635,20.0
+126.64485188880646,20.0
+131.65575927773656,20.0
+136.66666666666666,20.0
+5.208333333333334,25.0
+10.717716438983508,25.0
+16.227099544633685,25.0
+21.73648265028386,25.0
+98.2435673447669,25.0
+103.88352834286131,25.0
+109.52348934095572,25.0
+115.16345033905013,25.0
+120.80341133714454,25.0
+126.44337233523895,25.0
+132.08333333333334,25.0
+6.48194338454752,30.0
+99.90772713430799,30.0
+105.42618170744639,30.0
+110.94463628058479,30.0
+116.46309085372319,30.0
+121.98154542686159,30.0
+127.49999999999999,30.0
+101.57188692384908,35.0
+106.90808185955348,35.0
+112.24427679525787,35.0
+117.58047173096227,35.0
+122.91666666666667,35.0
+103.23604671339017,40.0
+108.26847558670455,40.0
+113.30090446001894,40.0
+118.33333333333333,40.0
+88.30870911209377,45.0
+93.39696728967502,45.0
+98.48522546725627,45.0
+103.57348364483752,45.0
+108.66174182241878,45.0
+113.75000000000003,45.0
+73.28611323090495,50.0
+78.41190657887091,50.0
+83.53769992683688,50.0
+88.66349327480285,50.0
+93.78928662276881,50.0
+98.91507997073478,50.0
+104.04087331870075,50.0
+109.16666666666671,50.0
+58.26351734971612,55.0
+63.41016357011803,55.0
+68.55680979051995,55.0
+73.70345601092187,55.0
+78.85010223132379,55.0
+83.99674845172571,55.0
+89.14339467212763,55.0
+94.29004089252955,55.0
+99.43668711293147,55.0
+104.58333333333339,55.0
+43.2409214685273,60.0
+48.40083769866118,60.0
+53.56075392879506,60.0
+58.72067015892894,60.0
+63.88058638906282,60.0
+69.0405026191967,60.0
+74.20041884933059,60.0
+79.36033507946448,60.0
+84.52025130959836,60.0
+89.68016753973225,60.0
+94.84008376986614,60.0
+100.00000000000003,60.0
+28.218325587338484,65.0
+33.387428747286805,65.0
+38.556531907235126,65.0
+43.72563506718345,65.0
+48.89473822713177,65.0
+54.06384138708009,65.0
+59.23294454702841,65.0
+64.40204770697673,65.0
+69.57115086692505,65.0
+74.74025402687337,65.0
+79.9093571868217,65.0
+85.07846034677002,65.0
+90.24756350671834,65.0
+95.41666666666666,65.0
+14.583333333333334,70.0
+19.666666666666668,70.0
+24.75,70.0
+29.833333333333336,70.0
+34.91666666666667,70.0
+40.00000000000001,70.0
+45.08333333333334,70.0
+50.16666666666668,70.0
+55.250000000000014,70.0
+60.33333333333335,70.0
+65.41666666666669,70.0
+70.50000000000001,70.0
+75.58333333333334,70.0
+80.66666666666667,70.0
+85.75,70.0
+90.83333333333333,70.0
+15.625,75.0
+20.669642857142858,75.0
+25.714285714285715,75.0
+30.758928571428573,75.0
+35.80357142857143,75.0
+40.848214285714285,75.0
+45.89285714285714,75.0
+50.93749999999999,75.0
+55.98214285714285,75.0
+61.0267857142857,75.0
+66.07142857142856,75.0
+71.11607142857142,75.0
+76.16071428571428,75.0
+81.20535714285714,75.0
+86.25,75.0
+16.666666666666668,80.0
+21.666666666666668,80.0
+26.666666666666668,80.0
+31.666666666666668,80.0
+36.66666666666667,80.0
+41.66666666666667,80.0
+46.66666666666667,80.0
+51.66666666666667,80.0
+56.66666666666667,80.0
+61.66666666666667,80.0
+66.66666666666667,80.0
+71.66666666666667,80.0
+76.66666666666667,80.0
+81.66666666666667,80.0
+17.708333333333336,85.0
+23.10606060606061,85.0
+28.503787878787882,85.0
+33.901515151515156,85.0
+39.29924242424243,85.0
+44.6969696969697,85.0
+50.094696969696976,85.0
+55.49242424242425,85.0
+60.89015151515152,85.0
+66.2878787878788,85.0
+71.68560606060606,85.0
+77.08333333333334,85.0
+18.75,90.0
+24.125,90.0
+29.5,90.0
+34.875,90.0
+40.25,90.0
+45.625,90.0
+51.0,90.0
+56.375,90.0
+61.75,90.0
+67.125,90.0
+72.5,90.0
+19.791666666666668,95.0
+25.13888888888889,95.0
+30.48611111111111,95.0
+35.833333333333336,95.0
+41.18055555555556,95.0
+46.52777777777778,95.0
+51.875,95.0
+57.22222222222222,95.0
+62.56944444444444,95.0
+67.91666666666667,95.0
+20.833333333333336,100.0
+26.145833333333336,100.0
+31.458333333333336,100.0
+36.770833333333336,100.0
+42.083333333333336,100.0
+47.395833333333336,100.0
+52.708333333333336,100.0
+58.020833333333336,100.0
+63.333333333333336,100.0
+21.875,105.0
+27.142857142857142,105.0
+32.410714285714285,105.0
+37.67857142857143,105.0
+42.94642857142858,105.0
+48.21428571428572,105.0
+53.48214285714287,105.0
+58.750000000000014,105.0
+22.916666666666668,110.0
+28.125,110.0
+33.333333333333336,110.0
+38.54166666666667,110.0
+43.75000000000001,110.0
+48.95833333333334,110.0
+54.16666666666668,110.0
+23.958333333333336,115.0
+29.083333333333336,115.0
+34.208333333333336,115.0
+39.333333333333336,115.0
+44.458333333333336,115.0
+49.583333333333336,115.0
+25.0,120.0
+30.0,120.0
+35.0,120.0
+40.0,120.0
+45.0,120.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_328.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_328.csv
new file mode 100644
index 0000000..1e5c0cc
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_328.csv
@@ -0,0 +1,329 @@
+x,y
+0.0,0.0
+5.296971687450456,0.0
+10.593943374900912,0.0
+15.890915062351368,0.0
+21.187886749801823,0.0
+26.484858437252278,0.0
+31.781830124702733,0.0
+37.07880181215319,0.0
+42.375773499603646,0.0
+47.672745187054105,0.0
+52.96971687450456,0.0
+101.92232288921093,0.0
+107.0561349375061,0.0
+112.18994698580127,0.0
+117.32375903409644,0.0
+122.45757108239161,0.0
+127.59138313068678,0.0
+132.72519517898195,0.0
+137.85900722727712,0.0
+142.9928192755723,0.0
+148.12663132386746,0.0
+153.26044337216263,0.0
+158.3942554204578,0.0
+163.52806746875297,0.0
+168.66187951704813,0.0
+173.7956915653433,0.0
+178.92950361363847,0.0
+184.06331566193364,0.0
+189.1971277102288,0.0
+194.33093975852398,0.0
+199.46475180681915,0.0
+204.59856385511432,0.0
+209.7323759034095,0.0
+214.86618795170466,0.0
+219.99999999999983,0.0
+0.0,5.714285714285714
+5.373872713197707,5.714285714285714
+10.747745426395413,5.714285714285714
+16.12161813959312,5.714285714285714
+21.495490852790827,5.714285714285714
+26.869363565988532,5.714285714285714
+32.24323627918624,5.714285714285714
+37.61710899238395,5.714285714285714
+42.99098170558165,5.714285714285714
+48.36485441877936,5.714285714285714
+99.73637526030426,5.714285714285714
+104.96434832047117,5.714285714285714
+110.19232138063809,5.714285714285714
+115.42029444080501,5.714285714285714
+120.64826750097193,5.714285714285714
+125.87624056113884,5.714285714285714
+131.10421362130575,5.714285714285714
+136.33218668147265,5.714285714285714
+141.56015974163955,5.714285714285714
+146.78813280180646,5.714285714285714
+152.01610586197336,5.714285714285714
+157.24407892214026,5.714285714285714
+162.47205198230716,5.714285714285714
+167.70002504247407,5.714285714285714
+172.92799810264097,5.714285714285714
+178.15597116280787,5.714285714285714
+183.38394422297478,5.714285714285714
+188.61191728314168,5.714285714285714
+193.83989034330858,5.714285714285714
+199.06786340347549,5.714285714285714
+204.2958364636424,5.714285714285714
+209.5238095238093,5.714285714285714
+0.0,11.428571428571429
+5.152851958778821,11.428571428571429
+10.305703917557642,11.428571428571429
+15.458555876336462,11.428571428571429
+20.611407835115283,11.428571428571429
+25.764259793894105,11.428571428571429
+30.917111752672927,11.428571428571429
+36.419104273349284,11.428571428571429
+43.75999196305416,11.428571428571429
+95.13151280457906,11.428571428571429
+100.32731811673106,11.428571428571429
+105.52312342888307,11.428571428571429
+110.71892874103507,11.428571428571429
+115.91473405318708,11.428571428571429
+121.11053936533908,11.428571428571429
+126.30634467749108,11.428571428571429
+131.50214998964307,11.428571428571429
+136.69795530179508,11.428571428571429
+141.89376061394708,11.428571428571429
+147.08956592609908,11.428571428571429
+152.2853712382511,11.428571428571429
+157.4811765504031,11.428571428571429
+162.6769818625551,11.428571428571429
+167.8727871747071,11.428571428571429
+173.0685924868591,11.428571428571429
+178.2643977990111,11.428571428571429
+183.4602031111631,11.428571428571429
+188.65600842331511,11.428571428571429
+193.85181373546712,11.428571428571429
+199.04761904761912,11.428571428571429
+0.0,17.142857142857142
+5.262449859389545,17.142857142857142
+10.52489971877909,17.142857142857142
+15.787349578168634,17.142857142857142
+21.04979943755818,17.142857142857142
+26.312249296947723,17.142857142857142
+90.52665034885386,17.142857142857142
+95.68690183425254,17.142857142857142
+100.84715331965121,17.142857142857142
+106.00740480504989,17.142857142857142
+111.16765629044856,17.142857142857142
+116.32790777584724,17.142857142857142
+121.48815926124591,17.142857142857142
+126.64841074664459,17.142857142857142
+131.80866223204325,17.142857142857142
+136.96891371744192,17.142857142857142
+142.1291652028406,17.142857142857142
+147.28941668823927,17.142857142857142
+152.44966817363795,17.142857142857142
+157.60991965903662,17.142857142857142
+162.7701711444353,17.142857142857142
+167.93042262983397,17.142857142857142
+173.09067411523264,17.142857142857142
+178.25092560063132,17.142857142857142
+183.41117708603,17.142857142857142
+188.57142857142867,17.142857142857142
+0.0,22.857142857142858
+5.4268467103056315,22.857142857142858
+10.853693420611263,22.857142857142858
+16.280540130916894,22.857142857142858
+21.707386841222526,22.857142857142858
+85.92178789312867,22.857142857142858
+91.0425351265792,22.857142857142858
+96.16328236002973,22.857142857142858
+101.28402959348026,22.857142857142858
+106.40477682693079,22.857142857142858
+111.52552406038131,22.857142857142858
+116.64627129383184,22.857142857142858
+121.76701852728237,22.857142857142858
+126.8877657607329,22.857142857142858
+132.00851299418343,22.857142857142858
+137.12926022763395,22.857142857142858
+142.25000746108446,22.857142857142858
+147.37075469453498,22.857142857142858
+152.4915019279855,22.857142857142858
+157.612249161436,22.857142857142858
+162.73299639488653,22.857142857142858
+167.85374362833704,22.857142857142858
+172.97449086178756,22.857142857142858
+178.09523809523807,22.857142857142858
+0.0,28.571428571428573
+5.700841461832443,28.571428571428573
+11.401682923664886,28.571428571428573
+17.10252438549733,28.571428571428573
+81.31692543740347,28.571428571428573
+86.39352085985313,28.571428571428573
+91.47011628230278,28.571428571428573
+96.54671170475244,28.571428571428573
+101.6233071272021,28.571428571428573
+106.69990254965175,28.571428571428573
+111.77649797210141,28.571428571428573
+116.85309339455107,28.571428571428573
+121.92968881700072,28.571428571428573
+127.00628423945038,28.571428571428573
+132.08287966190002,28.571428571428573
+137.15947508434968,28.571428571428573
+142.23607050679934,28.571428571428573
+147.312665929249,28.571428571428573
+152.38926135169865,28.571428571428573
+157.4658567741483,28.571428571428573
+162.54245219659796,28.571428571428573
+167.61904761904762,28.571428571428573
+0.0,34.285714285714285
+6.248830964886066,34.285714285714285
+12.497661929772132,34.285714285714285
+76.71206298167827,34.285714285714285
+81.73898761675196,34.285714285714285
+86.76591225182564,34.285714285714285
+91.79283688689932,34.285714285714285
+96.819761521973,34.285714285714285
+101.84668615704669,34.285714285714285
+106.87361079212037,34.285714285714285
+111.90053542719406,34.285714285714285
+116.92746006226774,34.285714285714285
+121.95438469734142,34.285714285714285
+126.98130933241511,34.285714285714285
+132.0082339674888,34.285714285714285
+137.03515860256246,34.285714285714285
+142.06208323763613,34.285714285714285
+147.0890078727098,34.285714285714285
+152.11593250778347,34.285714285714285
+157.14285714285714,34.285714285714285
+0.0,40.0
+7.892799474046928,40.0
+72.10720052595306,40.0
+77.43287667886118,40.0
+82.7585528317693,40.0
+88.08422898467741,40.0
+93.40990513758553,40.0
+98.73558129049364,40.0
+104.06125744340176,40.0
+109.38693359630987,40.0
+114.71260974921799,40.0
+120.0382859021261,40.0
+125.36396205503422,40.0
+130.68963820794232,40.0
+136.01531436085043,40.0
+141.34099051375853,40.0
+146.66666666666663,40.0
+1.6439685091608638,45.714285714285715
+67.50233807022788,45.714285714285715
+72.78604100255467,45.714285714285715
+78.06974393488146,45.714285714285715
+83.35344686720825,45.714285714285715
+88.63714979953504,45.714285714285715
+93.92085273186183,45.714285714285715
+99.20455566418862,45.714285714285715
+104.48825859651541,45.714285714285715
+109.7719615288422,45.714285714285715
+115.05566446116899,45.714285714285715
+120.33936739349578,45.714285714285715
+125.62307032582257,45.714285714285715
+130.90677325814937,45.714285714285715
+136.19047619047618,45.714285714285715
+62.89747561450267,51.42857142857143
+68.13220978948459,51.42857142857143
+73.36694396446651,51.42857142857143
+78.60167813944844,51.42857142857143
+83.83641231443036,51.42857142857143
+89.07114648941229,51.42857142857143
+94.30588066439421,51.42857142857143
+99.54061483937613,51.42857142857143
+104.77534901435806,51.42857142857143
+110.01008318933998,51.42857142857143
+115.2448173643219,51.42857142857143
+120.47955153930383,51.42857142857143
+125.71428571428575,51.42857142857143
+58.29261315877748,57.142857142857146
+63.469475165988186,57.142857142857146
+68.64633717319889,57.142857142857146
+73.82319918040959,57.142857142857146
+79.00006118762029,57.142857142857146
+84.17692319483099,57.142857142857146
+89.35378520204169,57.142857142857146
+94.5306472092524,57.142857142857146
+99.7075092164631,57.142857142857146
+104.8843712236738,57.142857142857146
+110.0612332308845,57.142857142857146
+115.2380952380952,57.142857142857146
+53.68775070305227,62.85714285714286
+58.795166108937515,62.85714285714286
+63.902581514822764,62.85714285714286
+69.00999692070802,62.85714285714286
+74.11741232659327,62.85714285714286
+79.22482773247852,62.85714285714286
+84.33224313836376,62.85714285714286
+89.43965854424901,62.85714285714286
+94.54707395013426,62.85714285714286
+99.65448935601951,62.85714285714286
+104.76190476190476,62.85714285714286
+36.24000803694585,68.57142857142857
+43.58089572665071,68.57142857142857
+49.08288824732708,68.57142857142857
+54.105424473814544,68.57142857142857
+59.12796070030201,68.57142857142857
+64.15049692678949,68.57142857142857
+69.17303315327696,68.57142857142857
+74.19556937976444,68.57142857142857
+79.21810560625191,68.57142857142857
+84.24064183273939,68.57142857142857
+89.26317805922686,68.57142857142857
+94.28571428571433,68.57142857142857
+31.635145581220648,74.28571428571429
+36.85258340405096,74.28571428571429
+42.07002122688127,74.28571428571429
+47.287459049711586,74.28571428571429
+52.5048968725419,74.28571428571429
+57.72233469537221,74.28571428571429
+62.939772518202524,74.28571428571429
+68.15721034103284,74.28571428571429
+73.37464816386316,74.28571428571429
+78.59208598669348,74.28571428571429
+83.8095238095238,74.28571428571429
+27.03028312549545,80.0
+32.17506648192188,80.0
+37.31984983834831,80.0
+42.46463319477474,80.0
+47.60941655120117,80.0
+52.7541999076276,80.0
+57.89898326405403,80.0
+63.04376662048046,80.0
+68.1885499769069,80.0
+73.33333333333333,80.0
+22.425420669770247,85.71428571428572
+27.479385943191822,85.71428571428572
+32.5333512166134,85.71428571428572
+37.58731649003497,85.71428571428572
+42.64128176345655,85.71428571428572
+47.69524703687812,85.71428571428572
+52.7492123102997,85.71428571428572
+57.80317758372127,85.71428571428572
+62.85714285714285,85.71428571428572
+17.820558214045054,91.42857142857143
+23.58062390852961,91.42857142857143
+29.340689603014166,91.42857142857143
+35.10075529749872,91.42857142857143
+40.860820991983275,91.42857142857143
+46.62088668646783,91.42857142857143
+52.38095238095238,91.42857142857143
+13.21569575831986,97.14285714285714
+18.953508987608274,97.14285714285714
+24.691322216896687,97.14285714285714
+30.4291354461851,97.14285714285714
+36.16694867547351,97.14285714285714
+41.904761904761926,97.14285714285714
+0.0,102.85714285714286
+5.026247193832525,102.85714285714286
+10.026247193832525,102.85714285714286
+15.376828252517248,102.85714285714286
+20.72740931120197,102.85714285714286
+26.07799036988669,102.85714285714286
+31.428571428571416,102.85714285714286
+0.0,108.57142857142857
+5.238095238095241,108.57142857142857
+10.476190476190482,108.57142857142857
+15.714285714285722,108.57142857142857
+20.952380952380963,108.57142857142857
+0.0,114.28571428571429
+5.238095238095241,114.28571428571429
+10.476190476190482,114.28571428571429
+0.0,120.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_348.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_348.csv
new file mode 100644
index 0000000..22c02eb
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_348.csv
@@ -0,0 +1,349 @@
+x,y
+0.0,0.0
+5.0,0.0
+10.0,0.0
+15.0,0.0
+20.0,0.0
+25.0,0.0
+30.0,0.0
+35.0,0.0
+40.0,0.0
+45.0,0.0
+50.0,0.0
+55.0,0.0
+60.0,0.0
+65.0,0.0
+70.0,0.0
+75.0,0.0
+80.0,0.0
+85.0,0.0
+90.0,0.0
+95.0,0.0
+100.0,0.0
+105.0,0.0
+110.0,0.0
+115.0,0.0
+120.0,0.0
+125.0,0.0
+130.0,0.0
+135.0,0.0
+140.0,0.0
+145.0,0.0
+150.0,0.0
+155.0,0.0
+160.0,0.0
+165.0,0.0
+170.0,0.0
+175.0,0.0
+180.0,0.0
+185.0,0.0
+2.0,5.6
+7.2142767176453955,5.6
+12.428553435290791,5.6
+17.642830152936185,5.6
+22.857106870581582,5.6
+28.07138358822698,5.6
+33.285660305872376,5.6
+38.499937023517774,5.6
+43.71421374116317,5.6
+48.92849045880857,5.6
+54.142767176453965,5.6
+59.35704389409936,5.6
+64.57132061174475,5.6
+69.78559732939014,5.6
+74.99987404703553,5.6
+80.21415076468092,5.6
+85.42842748232631,5.6
+90.6427041999717,5.6
+95.8569809176171,5.6
+102.32596848024583,5.6
+107.47757058156277,5.6
+112.62917268287971,5.6
+117.78077478419665,5.6
+122.93237688551359,5.6
+128.08397898683054,5.6
+133.23558108814748,5.6
+138.38718318946442,5.6
+143.53878529078136,5.6
+148.6903873920983,5.6
+153.84198949341524,5.6
+158.99359159473218,5.6
+164.14519369604912,5.6
+169.29679579736606,5.6
+174.448397898683,5.6
+179.59999999999994,5.6
+4.0,11.2
+9.366196430255275,11.2
+14.73239286051055,11.2
+20.098589290765826,11.2
+25.4647857210211,11.2
+30.830982151276377,11.2
+36.19717858153165,11.2
+41.56337501178693,11.2
+46.9295714420422,11.2
+51.9295714420422,11.2
+57.349991859770896,11.2
+62.77041227749959,11.2
+68.19083269522828,11.2
+73.61125311295697,11.2
+79.03167353068567,11.2
+104.18982744453186,11.2
+109.19055405563672,11.2
+114.19128066674159,11.2
+119.19200727784646,11.2
+124.19273388895132,11.2
+129.19346050005618,11.2
+134.19418711116106,11.2
+139.19491372226594,11.2
+144.19564033337082,11.2
+149.1963669444757,11.2
+154.19709355558058,11.2
+159.19782016668546,11.2
+164.19854677779034,11.2
+169.19927338889522,11.2
+174.2000000000001,11.2
+5.999999999999999,16.799999999999997
+12.135178411778224,16.799999999999997
+18.270356823556448,16.799999999999997
+24.40553523533467,16.799999999999997
+30.540713647112895,16.799999999999997
+53.35698081432607,16.799999999999997
+62.20636614375418,16.799999999999997
+106.05368640881787,16.799999999999997
+111.28254587474972,16.799999999999997
+116.51140534068156,16.799999999999997
+121.74026480661341,16.799999999999997
+126.96912427254526,16.799999999999997
+132.1979837384771,16.799999999999997
+137.42684320440893,16.799999999999997
+142.65570267034076,16.799999999999997
+147.8845621362726,16.799999999999997
+153.11342160220443,16.799999999999997
+158.34228106813626,16.799999999999997
+163.5711405340681,16.799999999999997
+168.79999999999993,16.799999999999997
+8.0,22.4
+13.71540626018141,22.4
+107.91754537310389,22.4
+112.9614048846399,22.4
+118.00526439617592,22.4
+123.04912390771193,22.4
+128.09298341924793,22.4
+133.13684293078393,22.4
+138.18070244231993,22.4
+143.22456195385593,22.4
+148.26842146539192,22.4
+153.31228097692792,22.4
+158.35614048846392,22.4
+163.39999999999992,22.4
+109.7814043373899,28.0
+115.13902607767992,28.0
+120.49664781796993,28.0
+125.85426955825994,28.0
+131.21189129854994,28.0
+136.56951303883994,28.0
+141.92713477912994,28.0
+147.28475651941994,28.0
+152.64237825970994,28.0
+157.99999999999994,28.0
+111.64526330167593,33.599999999999994
+116.76460538896643,33.599999999999994
+121.88394747625694,33.599999999999994
+127.00328956354744,33.599999999999994
+132.12263165083795,33.599999999999994
+137.24197373812845,33.599999999999994
+142.36131582541896,33.599999999999994
+147.48065791270946,33.599999999999994
+152.59999999999997,33.599999999999994
+113.50912226596193,39.199999999999996
+119.12426855496828,39.199999999999996
+124.73941484397463,39.199999999999996
+130.35456113298096,39.199999999999996
+135.9697074219873,39.199999999999996
+141.58485371099363,39.199999999999996
+147.19999999999996,39.199999999999996
+104.74243919566194,44.8
+110.03637645342452,44.8
+115.3303137111871,44.8
+120.62425096894968,44.8
+125.91818822671226,44.8
+131.21212548447485,44.8
+136.50606274223745,44.8
+141.80000000000004,44.8
+87.91713180873046,50.4
+93.30411716331596,50.4
+98.69110251790147,50.4
+104.07808787248698,50.4
+109.46507322707248,50.4
+114.85205858165799,50.4
+120.23904393624349,50.4
+125.626029290829,50.4
+131.0130146454145,50.4
+136.4,50.4
+71.09182442179899,56.0
+76.53802220163544,56.0
+81.9842199814719,56.0
+87.43041776130835,56.0
+92.8766155411448,56.0
+98.32281332098125,56.0
+103.7690111008177,56.0
+109.21520888065416,56.0
+114.66140666049061,56.0
+120.10760444032707,56.0
+125.55380222016352,56.0
+130.99999999999997,56.0
+24.355676295623518,61.599999999999994
+54.266517034867526,61.599999999999994
+59.36176581809127,61.599999999999994
+64.45701460131502,61.599999999999994
+69.55226338453878,61.599999999999994
+74.64751216776253,61.599999999999994
+79.74276095098628,61.599999999999994
+84.83800973421003,61.599999999999994
+89.93325851743379,61.599999999999994
+95.02850730065754,61.599999999999994
+100.12375608388129,61.599999999999994
+105.21900486710504,61.599999999999994
+110.3142536503288,61.599999999999994
+115.40950243355255,61.599999999999994
+120.5047512167763,61.599999999999994
+125.60000000000005,61.599999999999994
+25.9871735086534,67.19999999999999
+37.44120964793608,67.19999999999999
+42.61363404494007,67.19999999999999
+47.786058441944064,67.19999999999999
+52.95848283894806,67.19999999999999
+58.13090723595205,67.19999999999999
+63.303331632956045,67.19999999999999
+68.47575602996004,67.19999999999999
+73.64818042696403,67.19999999999999
+78.82060482396803,67.19999999999999
+83.99302922097202,67.19999999999999
+89.16545361797601,67.19999999999999
+94.33787801498,67.19999999999999
+99.510302411984,67.19999999999999
+104.682726808988,67.19999999999999
+109.85515120599199,67.19999999999999
+115.02757560299598,67.19999999999999
+120.19999999999997,67.19999999999999
+26.0,72.8
+31.223529411764705,72.8
+36.44705882352941,72.8
+41.67058823529412,72.8
+46.89411764705883,72.8
+52.117647058823536,72.8
+57.341176470588245,72.8
+62.56470588235295,72.8
+67.78823529411765,72.8
+73.01176470588236,72.8
+78.23529411764706,72.8
+83.45882352941176,72.8
+88.68235294117646,72.8
+93.90588235294116,72.8
+99.12941176470586,72.8
+104.35294117647057,72.8
+109.57647058823527,72.8
+114.79999999999997,72.8
+27.999999999999996,78.39999999999999
+33.0875,78.39999999999999
+38.175,78.39999999999999
+43.262499999999996,78.39999999999999
+48.349999999999994,78.39999999999999
+53.43749999999999,78.39999999999999
+58.52499999999999,78.39999999999999
+63.61249999999999,78.39999999999999
+68.69999999999999,78.39999999999999
+73.7875,78.39999999999999
+78.875,78.39999999999999
+83.9625,78.39999999999999
+89.05000000000001,78.39999999999999
+94.13750000000002,78.39999999999999
+99.22500000000002,78.39999999999999
+104.31250000000003,78.39999999999999
+109.40000000000003,78.39999999999999
+30.0,84.0
+35.285714285714285,84.0
+40.57142857142857,84.0
+45.857142857142854,84.0
+51.14285714285714,84.0
+56.42857142857142,84.0
+61.71428571428571,84.0
+67.0,84.0
+72.28571428571429,84.0
+77.57142857142858,84.0
+82.85714285714288,84.0
+88.14285714285717,84.0
+93.42857142857146,84.0
+98.71428571428575,84.0
+104.00000000000004,84.0
+32.0,89.6
+37.12307692307692,89.6
+42.246153846153845,89.6
+47.36923076923077,89.6
+52.49230769230769,89.6
+57.61538461538461,89.6
+62.738461538461536,89.6
+67.86153846153846,89.6
+72.98461538461538,89.6
+78.1076923076923,89.6
+83.23076923076923,89.6
+88.35384615384615,89.6
+93.47692307692307,89.6
+98.6,89.6
+34.0,95.19999999999999
+39.38181818181818,95.19999999999999
+44.763636363636365,95.19999999999999
+50.14545454545455,95.19999999999999
+55.52727272727273,95.19999999999999
+60.909090909090914,95.19999999999999
+66.2909090909091,95.19999999999999
+71.67272727272727,95.19999999999999
+77.05454545454545,95.19999999999999
+82.43636363636362,95.19999999999999
+87.8181818181818,95.19999999999999
+93.19999999999997,95.19999999999999
+36.0,100.8
+41.18,100.8
+46.36,100.8
+51.54,100.8
+56.72,100.8
+61.9,100.8
+67.08,100.8
+72.25999999999999,100.8
+77.44,100.8
+82.62,100.8
+87.80000000000001,100.8
+38.0,106.39999999999999
+43.55,106.39999999999999
+49.099999999999994,106.39999999999999
+54.64999999999999,106.39999999999999
+60.19999999999999,106.39999999999999
+65.74999999999999,106.39999999999999
+71.29999999999998,106.39999999999999
+76.84999999999998,106.39999999999999
+82.39999999999998,106.39999999999999
+40.0,112.0
+45.285714285714285,112.0
+50.57142857142857,112.0
+55.857142857142854,112.0
+61.14285714285714,112.0
+66.42857142857143,112.0
+71.71428571428572,112.0
+77.00000000000001,112.0
+42.0,117.6
+47.92,117.6
+53.84,117.6
+59.760000000000005,117.6
+65.68,117.6
+71.60000000000001,117.6
+44.0,123.19999999999999
+49.55,123.19999999999999
+55.099999999999994,123.19999999999999
+60.64999999999999,123.19999999999999
+66.19999999999999,123.19999999999999
+45.99999999999999,128.79999999999998
+53.400000000000006,128.79999999999998
+60.80000000000001,128.79999999999998
+47.99999999999999,134.39999999999998
+55.400000000000006,134.39999999999998
+50.0,140.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_356.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_356.csv
new file mode 100644
index 0000000..56018e7
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_356.csv
@@ -0,0 +1,357 @@
+x,y
+0.0,0.0
+5.296971687450456,0.0
+10.593943374900912,0.0
+15.890915062351368,0.0
+21.187886749801823,0.0
+26.484858437252278,0.0
+31.781830124702733,0.0
+37.07880181215319,0.0
+42.375773499603646,0.0
+47.672745187054105,0.0
+52.96971687450456,0.0
+101.92232288921095,0.0
+107.14215696855302,0.0
+112.3619910478951,0.0
+117.58182512723718,0.0
+122.80165920657926,0.0
+128.02149328592134,0.0
+133.2413273652634,0.0
+138.46116144460547,0.0
+143.68099552394753,0.0
+148.9008296032896,0.0
+154.12066368263166,0.0
+159.34049776197372,0.0
+164.5603318413158,0.0
+169.78016592065785,0.0
+174.99999999999991,0.0
+0.0,5.0
+5.43782913619389,5.0
+10.87565827238778,5.0
+16.31348740858167,5.0
+21.75131654477556,5.0
+27.18914568096945,5.0
+32.62697481716334,5.0
+38.06480395335723,5.0
+43.50263308955112,5.0
+48.94046222574501,5.0
+100.3119830672699,5.0
+105.62452283132606,5.0
+110.93706259538222,5.0
+116.24960235943837,5.0
+121.56214212349452,5.0
+126.87468188755068,5.0
+132.18722165160685,5.0
+137.49976141566302,5.0
+142.81230117971919,5.0
+148.12484094377535,5.0
+153.43738070783152,5.0
+158.7499204718877,5.0
+164.06246023594386,5.0
+169.37500000000003,5.0
+0.0,10.0
+5.142890220130076,10.0
+10.285780440260153,10.0
+15.428670660390228,10.0
+20.571560880520305,10.0
+25.714451100650383,10.0
+30.85734132078046,10.0
+35.85734132078046,10.0
+44.91120757698546,10.0
+96.28272841851036,10.0
+101.4725185401634,10.0
+106.66230866181645,10.0
+111.8520987834695,10.0
+117.04188890512255,10.0
+122.2316790267756,10.0
+127.42146914842864,10.0
+132.6112592700817,10.0
+137.80104939173475,10.0
+142.9908395133878,10.0
+148.18062963504087,10.0
+153.37041975669393,10.0
+158.560209878347,10.0
+163.75000000000006,10.0
+0.0,15.0
+5.607814543568934,15.0
+11.215629087137868,15.0
+16.8234436307068,15.0
+22.431258174275737,15.0
+28.03907271784467,15.0
+40.86646484877832,15.0
+92.25347376975081,15.0
+97.32051424900075,15.0
+102.38755472825069,15.0
+107.45459520750063,15.0
+112.52163568675057,15.0
+117.58867616600051,15.0
+122.65571664525045,15.0
+127.72275712450039,15.0
+132.78979760375032,15.0
+137.85683808300024,15.0
+142.92387856225017,15.0
+147.9909190415001,15.0
+153.05795952075002,15.0
+158.12499999999994,15.0
+0.0,20.0
+6.002454517271279,20.0
+12.004909034542559,20.0
+18.00736355181384,20.0
+24.009818069085117,20.0
+88.22421912099126,20.0
+93.58053419424199,20.0
+98.93684926749272,20.0
+104.29316434074344,20.0
+109.64947941399417,20.0
+115.0057944872449,20.0
+120.36210956049563,20.0
+125.71842463374635,20.0
+131.0747397069971,20.0
+136.43105478024782,20.0
+141.78736985349855,20.0
+147.14368492674927,20.0
+152.5,20.0
+0.0,25.0
+6.66018780677519,25.0
+13.32037561355038,25.0
+19.98056342032557,25.0
+84.19496447223172,25.0
+89.41830076621241,25.0
+94.6416370601931,25.0
+99.8649733541738,25.0
+105.08830964815449,25.0
+110.31164594213519,25.0
+115.53498223611588,25.0
+120.75831853009657,25.0
+125.98165482407727,25.0
+131.20499111805796,25.0
+136.42832741203864,25.0
+141.65166370601932,25.0
+146.875,25.0
+0.0,30.0
+5.317102923855341,30.0
+10.634205847710682,30.0
+15.951308771566023,30.0
+80.16570982347217,30.0
+85.25606733818282,30.0
+90.34642485289346,30.0
+95.43678236760411,30.0
+100.52713988231476,30.0
+105.6174973970254,30.0
+110.70785491173605,30.0
+115.7982124264467,30.0
+120.88856994115734,30.0
+125.97892745586799,30.0
+131.06928497057865,30.0
+136.1596424852893,30.0
+141.24999999999997,30.0
+0.0,35.0
+5.961027061403241,35.0
+11.922054122806482,35.0
+76.13645517471261,35.0
+81.5445047042842,35.0
+86.95255423385578,35.0
+92.36060376342736,35.0
+97.76865329299895,35.0
+103.17670282257053,35.0
+108.58475235214212,35.0
+113.9928018817137,35.0
+119.40085141128529,35.0
+124.80890094085687,35.0
+130.21695047042846,35.0
+135.62500000000003,35.0
+0.0,40.0
+7.892799474046928,40.0
+72.10720052595306,40.0
+77.37018229632096,40.0
+82.63316406668886,40.0
+87.89614583705676,40.0
+93.15912760742467,40.0
+98.42210937779257,40.0
+103.68509114816047,40.0
+108.94807291852837,40.0
+114.21105468889627,40.0
+119.47403645926417,40.0
+124.73701822963207,40.0
+129.99999999999997,40.0
+1.9317724126436904,45.0
+68.07794587719351,45.0
+73.19585988835775,45.0
+78.31377389952198,45.0
+83.43168791068621,45.0
+88.54960192185044,45.0
+93.66751593301467,45.0
+98.7854299441789,45.0
+103.90334395534313,45.0
+109.02125796650736,45.0
+114.1391719776716,45.0
+119.25708598883583,45.0
+124.37500000000006,45.0
+64.04869122843397,50.0
+69.51882210559057,50.0
+74.98895298274718,50.0
+80.45908385990379,50.0
+85.92921473706039,50.0
+91.399345614217,50.0
+96.8694764913736,50.0
+102.33960736853021,50.0
+107.80973824568682,50.0
+113.27986912284342,50.0
+118.75000000000003,50.0
+60.01943657967443,55.0
+65.32999292170699,55.0
+70.64054926373954,55.0
+75.9511056057721,55.0
+81.26166194780465,55.0
+86.57221828983721,55.0
+91.88277463186976,55.0
+97.19333097390232,55.0
+102.50388731593488,55.0
+107.81444365796743,55.0
+113.12499999999999,55.0
+55.99018193091488,60.0
+61.14116373782339,60.0
+66.29214554473191,60.0
+71.44312735164043,60.0
+76.59410915854895,60.0
+81.74509096545746,60.0
+86.89607277236598,60.0
+92.0470545792745,60.0
+97.19803638618302,60.0
+102.34901819309154,60.0
+107.50000000000006,60.0
+39.13353515122168,65.0
+51.96092728215533,65.0
+57.50693536191585,65.0
+63.05294344167637,65.0
+68.59895152143689,65.0
+74.1449596011974,65.0
+79.69096768095793,65.0
+85.23697576071845,65.0
+90.78298384047898,65.0
+96.3289919202395,65.0
+101.87500000000003,65.0
+35.08879242301455,70.0
+44.14265867921954,70.0
+49.14265867921954,70.0
+54.37680771486181,70.0
+59.61095675050409,70.0
+64.84510578614636,70.0
+70.07925482178864,70.0
+75.31340385743091,70.0
+80.54755289307319,70.0
+85.78170192871546,70.0
+91.01585096435774,70.0
+96.25000000000001,70.0
+31.059537774255002,75.0
+36.47457979477728,75.0
+41.88962181529955,75.0
+47.30466383582182,75.0
+52.71970585634409,75.0
+58.13474787686636,75.0
+63.549789897388635,75.0
+68.96483191791091,75.0
+74.37987393843319,75.0
+79.79491595895547,75.0
+85.20995797947775,75.0
+90.62500000000003,75.0
+27.03028312549545,80.0
+32.300257386814046,80.0
+37.57023164813264,80.0
+42.840205909451235,80.0
+48.11018017076983,80.0
+53.380154432088425,80.0
+58.65012869340702,80.0
+63.920102954725614,80.0
+69.19007721604422,80.0
+74.46005147736281,80.0
+79.7300257386814,80.0
+85.0,80.0
+23.0010284767359,85.0
+28.125934978850818,85.0
+33.25084148096574,85.0
+38.37574798308066,85.0
+43.500654485195575,85.0
+48.62556098731049,85.0
+53.75046748942541,85.0
+58.87537399154033,85.0
+64.00028049365525,85.0
+69.12518699577018,85.0
+74.2500934978851,85.0
+79.37500000000003,85.0
+18.971773827976353,90.0
+24.44959644517872,90.0
+29.927419062381084,90.0
+35.40524167958345,90.0
+40.88306429678581,90.0
+46.360886913988175,90.0
+51.83870953119054,90.0
+57.3165321483929,90.0
+62.794354765595266,90.0
+68.27217738279764,90.0
+73.75,90.0
+14.94251917921681,95.0
+20.26076726129513,95.0
+25.57901534337345,95.0
+30.89726342545177,95.0
+36.21551150753009,95.0
+41.53375958960841,95.0
+46.85200767168673,95.0
+52.17025575376505,95.0
+57.48850383584337,95.0
+62.80675191792169,95.0
+68.125,95.0
+1.448081544142613,100.0
+10.913264530457258,100.0
+16.07193807741153,100.0
+21.230611624365807,100.0
+26.389285171320083,100.0
+31.54795871827436,100.0
+36.706632265228635,100.0
+41.86530581218291,100.0
+47.023979359137186,100.0
+52.18265290609146,100.0
+57.34132645304574,100.0
+62.500000000000014,100.0
+0.0,105.0
+5.170454545454546,105.0
+10.340909090909092,105.0
+15.511363636363637,105.0
+20.681818181818183,105.0
+25.85227272727273,105.0
+31.022727272727277,105.0
+36.19318181818182,105.0
+41.36363636363637,105.0
+46.534090909090914,105.0
+51.70454545454546,105.0
+56.87500000000001,105.0
+0.0,110.0
+5.125,110.0
+10.25,110.0
+15.375,110.0
+20.5,110.0
+25.625,110.0
+30.75,110.0
+35.875,110.0
+41.0,110.0
+46.125,110.0
+51.25,110.0
+0.0,115.0
+5.069444444444445,115.0
+10.13888888888889,115.0
+15.208333333333334,115.0
+20.27777777777778,115.0
+25.34722222222222,115.0
+30.416666666666664,115.0
+35.48611111111111,115.0
+40.55555555555555,115.0
+45.62499999999999,115.0
+0.0,120.0
+5.0,120.0
+10.0,120.0
+15.0,120.0
+20.0,120.0
+25.0,120.0
+30.0,120.0
+35.0,120.0
+40.0,120.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_381.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_381.csv
new file mode 100644
index 0000000..71eff3f
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_381.csv
@@ -0,0 +1,382 @@
+x,y
+0.0,0.0
+5.0,0.0
+10.0,0.0
+15.0,0.0
+20.0,0.0
+25.0,0.0
+30.0,0.0
+35.0,0.0
+40.0,0.0
+45.0,0.0
+50.0,0.0
+55.0,0.0
+60.0,0.0
+65.0,0.0
+70.0,0.0
+75.0,0.0
+80.0,0.0
+85.0,0.0
+90.0,0.0
+95.0,0.0
+100.0,0.0
+105.0,0.0
+110.0,0.0
+115.0,0.0
+120.0,0.0
+125.0,0.0
+130.0,0.0
+135.0,0.0
+140.0,0.0
+145.0,0.0
+150.0,0.0
+155.0,0.0
+160.0,0.0
+165.0,0.0
+170.0,0.0
+1.7857142857142858,5.0
+6.817675684594078,5.0
+11.84963708347387,5.0
+16.88159848235366,5.0
+21.913559881233454,5.0
+26.945521280113248,5.0
+31.97748267899304,5.0
+37.009444077872836,5.0
+42.04140547675263,5.0
+47.07336687563242,5.0
+52.10532827451222,5.0
+57.13728967339201,5.0
+62.169251072271805,5.0
+67.20121247115159,5.0
+72.23317387003138,5.0
+77.26513526891117,5.0
+82.29709666779095,5.0
+87.32905806667074,5.0
+92.36101946555053,5.0
+97.39298086443031,5.0
+102.39298086443034,5.0
+107.72928007810876,5.0
+113.06557929178717,5.0
+118.40187850546559,5.0
+123.738177719144,5.0
+129.07447693282242,5.0
+134.41077614650084,5.0
+139.74707536017925,5.0
+145.08337457385767,5.0
+150.41967378753608,5.0
+155.7559730012145,5.0
+161.09227221489292,5.0
+166.42857142857133,5.0
+3.5714285714285716,10.0
+9.191572971629991,10.0
+14.811717371831412,10.0
+20.431861772032832,10.0
+26.05200617223425,10.0
+31.67215057243567,10.0
+37.29229497263709,10.0
+42.912439372838506,10.0
+48.532583773039924,10.0
+53.53258377303993,10.0
+59.35348632686614,10.0
+65.17438888069235,10.0
+70.99529143451855,10.0
+76.81619398834475,10.0
+82.63709654217095,10.0
+103.790429095042,10.0
+109.16013034614208,10.0
+114.52983159724216,10.0
+119.89953284834225,10.0
+125.26923409944233,10.0
+130.6389353505424,10.0
+136.00863660164248,10.0
+141.37833785274256,10.0
+146.74803910384264,10.0
+152.11774035494273,10.0
+157.4874416060428,10.0
+162.8571428571429,10.0
+5.357142857142858,15.0
+10.455760408342524,15.0
+15.55437795954219,15.0
+20.652995510741857,15.0
+25.751613061941523,15.0
+30.85023061314119,15.0
+35.94884816434086,15.0
+52.75788329009128,15.0
+60.186191975536715,15.0
+67.61450066098215,15.0
+105.45458888458307,15.0
+110.83770142469619,15.0
+116.22081396480931,15.0
+121.60392650492243,15.0
+126.98703904503554,15.0
+132.37015158514868,15.0
+137.7532641252618,15.0
+143.13637666537494,15.0
+148.51948920548807,15.0
+153.9026017456012,15.0
+159.28571428571433,15.0
+7.142857142857143,20.0
+14.034554713004596,20.0
+20.926252283152046,20.0
+107.11874867412416,20.0
+112.51825278969767,20.0
+117.91775690527118,20.0
+123.31726102084468,20.0
+128.7167651364182,20.0
+134.1162692519917,20.0
+139.5157733675652,20.0
+144.9152774831387,20.0
+150.31478159871222,20.0
+155.71428571428572,20.0
+108.78290846366525,25.0
+114.20290204856424,25.0
+119.62289563346323,25.0
+125.04288921836222,25.0
+130.4628828032612,25.0
+135.88287638816018,25.0
+141.30286997305916,25.0
+146.72286355795814,25.0
+152.1428571428571,25.0
+110.44706825320634,30.0
+115.8934054415238,30.0
+121.33974262984125,30.0
+126.78607981815871,30.0
+132.23241700647617,30.0
+137.67875419479364,30.0
+143.1250913831111,30.0
+148.57142857142858,30.0
+112.11122804274743,35.0
+117.59269003562285,35.0
+123.07415202849828,35.0
+128.5556140213737,35.0
+134.03707601424915,35.0
+139.5185380071246,35.0
+145.00000000000003,35.0
+113.77538783228852,40.0
+119.3060245515451,40.0
+124.83666127080167,40.0
+130.36729799005826,40.0
+135.89793470931485,40.0
+141.42857142857144,40.0
+104.14153536041438,45.0
+109.7608032765358,45.0
+115.38007119265721,45.0
+120.99933910877863,45.0
+126.61860702490004,45.0
+132.23787494102146,45.0
+137.85714285714286,45.0
+89.11893947922556,50.0
+94.13747001327987,50.0
+99.15600054733417,50.0
+104.17453108138848,50.0
+109.19306161544279,50.0
+114.2115921494971,50.0
+119.2301226835514,50.0
+124.2486532176057,50.0
+129.26718375166,50.0
+134.2857142857143,50.0
+74.09634359803675,55.0
+79.24342924496848,55.0
+84.39051489190021,55.0
+89.53760053883194,55.0
+94.68468618576367,55.0
+99.8317718326954,55.0
+104.97885747962712,55.0
+110.12594312655885,55.0
+115.27302877349058,55.0
+120.42011442042231,55.0
+125.56720006735404,55.0
+130.71428571428575,55.0
+59.07374771684794,60.0
+64.30983305731019,60.0
+69.54591839777243,60.0
+74.78200373823466,60.0
+80.0180890786969,60.0
+85.25417441915914,60.0
+90.49025975962138,60.0
+95.72634510008362,60.0
+100.96243044054586,60.0
+106.1985157810081,60.0
+111.43460112147034,60.0
+116.67068646193258,60.0
+121.90677180239481,60.0
+127.14285714285705,60.0
+25.22820121209722,65.0
+44.05115183565913,65.0
+49.352503618043755,65.0
+54.653855400428384,65.0
+59.95520718281301,65.0
+65.25655896519764,65.0
+70.55791074758227,65.0
+75.8592625299669,65.0
+81.16061431235153,65.0
+86.46196609473616,65.0
+91.76331787712078,65.0
+97.06466965950541,65.0
+102.36602144189004,65.0
+107.66737322427467,65.0
+112.9687250066593,65.0
+118.27007678904393,65.0
+123.57142857142856,65.0
+28.967416226960054,70.0
+26.785714285714285,75.0
+32.05882352941176,75.0
+37.33193277310924,75.0
+42.60504201680671,75.0
+47.87815126050419,75.0
+53.151260504201666,75.0
+58.42436974789914,75.0
+63.69747899159662,75.0
+68.9705882352941,75.0
+74.24369747899158,75.0
+79.51680672268905,75.0
+84.78991596638653,75.0
+90.063025210084,75.0
+95.33613445378148,75.0
+100.60924369747896,75.0
+105.88235294117644,75.0
+111.15546218487391,75.0
+116.42857142857139,75.0
+28.571428571428573,80.0
+33.839285714285715,80.0
+39.10714285714286,80.0
+44.37500000000001,80.0
+49.64285714285715,80.0
+54.9107142857143,80.0
+60.178571428571445,80.0
+65.44642857142858,80.0
+70.71428571428572,80.0
+75.98214285714286,80.0
+81.25,80.0
+86.51785714285714,80.0
+91.78571428571428,80.0
+97.05357142857142,80.0
+102.32142857142856,80.0
+107.5892857142857,80.0
+112.85714285714283,80.0
+30.357142857142858,85.0
+35.61904761904762,85.0
+40.88095238095238,85.0
+46.14285714285714,85.0
+51.4047619047619,85.0
+56.66666666666666,85.0
+61.928571428571416,85.0
+67.19047619047618,85.0
+72.45238095238093,85.0
+77.7142857142857,85.0
+82.97619047619045,85.0
+88.23809523809521,85.0
+93.49999999999997,85.0
+98.76190476190473,85.0
+104.02380952380949,85.0
+109.28571428571425,85.0
+32.142857142857146,90.0
+37.39795918367347,90.0
+42.6530612244898,90.0
+47.90816326530612,90.0
+53.16326530612245,90.0
+58.41836734693877,90.0
+63.6734693877551,90.0
+68.92857142857142,90.0
+74.18367346938774,90.0
+79.43877551020407,90.0
+84.69387755102039,90.0
+89.94897959183672,90.0
+95.20408163265304,90.0
+100.45918367346937,90.0
+105.7142857142857,90.0
+33.92857142857143,95.0
+39.175824175824175,95.0
+44.42307692307692,95.0
+49.670329670329664,95.0
+54.91758241758241,95.0
+60.164835164835154,95.0
+65.4120879120879,95.0
+70.65934065934064,95.0
+75.90659340659339,95.0
+81.15384615384613,95.0
+86.40109890109888,95.0
+91.64835164835162,95.0
+96.89560439560437,95.0
+102.14285714285711,95.0
+35.714285714285715,100.0
+40.952380952380956,100.0
+46.1904761904762,100.0
+51.42857142857144,100.0
+56.66666666666668,100.0
+61.90476190476192,100.0
+67.14285714285715,100.0
+72.3809523809524,100.0
+77.61904761904763,100.0
+82.85714285714288,100.0
+88.09523809523812,100.0
+93.33333333333336,100.0
+98.5714285714286,100.0
+37.5,105.0
+42.72727272727273,105.0
+47.95454545454545,105.0
+53.18181818181818,105.0
+58.40909090909091,105.0
+63.63636363636363,105.0
+68.86363636363636,105.0
+74.0909090909091,105.0
+79.31818181818183,105.0
+84.54545454545456,105.0
+89.7727272727273,105.0
+95.00000000000003,105.0
+39.285714285714285,110.0
+44.5,110.0
+49.714285714285715,110.0
+54.92857142857143,110.0
+60.142857142857146,110.0
+65.35714285714286,110.0
+70.57142857142857,110.0
+75.78571428571428,110.0
+80.99999999999999,110.0
+86.2142857142857,110.0
+91.4285714285714,110.0
+41.07142857142857,115.0
+46.269841269841265,115.0
+51.46825396825396,115.0
+56.66666666666666,115.0
+61.86507936507935,115.0
+67.06349206349205,115.0
+72.26190476190474,115.0
+77.46031746031744,115.0
+82.65873015873014,115.0
+87.85714285714283,115.0
+42.85714285714286,120.0
+48.03571428571429,120.0
+53.21428571428572,120.0
+58.39285714285715,120.0
+63.571428571428584,120.0
+68.75000000000001,120.0
+73.92857142857144,120.0
+79.10714285714288,120.0
+84.2857142857143,120.0
+44.642857142857146,125.0
+49.79591836734694,125.0
+54.94897959183674,125.0
+60.102040816326536,125.0
+65.25510204081633,125.0
+70.40816326530611,125.0
+75.5612244897959,125.0
+80.7142857142857,125.0
+46.42857142857143,130.0
+51.54761904761905,130.0
+56.66666666666667,130.0
+61.78571428571429,130.0
+66.90476190476191,130.0
+72.02380952380953,130.0
+77.14285714285715,130.0
+48.214285714285715,135.0
+53.285714285714285,135.0
+58.357142857142854,135.0
+63.42857142857142,135.0
+68.5,135.0
+73.57142857142857,135.0
+50.0,140.0
+55.0,140.0
+60.0,140.0
+65.0,140.0
+70.0,140.0
diff --git a/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_384.csv b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_384.csv
new file mode 100644
index 0000000..7b91b66
--- /dev/null
+++ b/ghedt/examples/gFunctions/100-400_RowWise_Cases/NBH_384.csv
@@ -0,0 +1,385 @@
+x,y
+0.0,0.0
+5.0,0.0
+10.0,0.0
+15.0,0.0
+20.0,0.0
+25.0,0.0
+30.0,0.0
+35.0,0.0
+40.0,0.0
+45.0,0.0
+50.0,0.0
+55.0,0.0
+60.0,0.0
+65.0,0.0
+70.0,0.0
+75.0,0.0
+80.0,0.0
+85.0,0.0
+90.0,0.0
+95.0,0.0
+100.0,0.0
+105.0,0.0
+110.0,0.0
+115.0,0.0
+120.0,0.0
+125.0,0.0
+130.0,0.0
+135.0,0.0
+140.0,0.0
+145.0,0.0
+150.0,0.0
+155.0,0.0
+160.0,0.0
+165.0,0.0
+170.0,0.0
+175.0,0.0
+180.0,0.0
+185.0,0.0
+190.0,0.0
+1.7857142857142858,5.0
+6.817675684594078,5.0
+11.84963708347387,5.0
+16.88159848235366,5.0
+21.913559881233454,5.0
+26.945521280113248,5.0
+31.97748267899304,5.0
+37.009444077872836,5.0
+42.04140547675263,5.0
+47.07336687563242,5.0
+52.10532827451222,5.0
+57.13728967339201,5.0
+62.169251072271805,5.0
+67.20121247115159,5.0
+72.23317387003138,5.0
+77.26513526891117,5.0
+82.29709666779095,5.0
+87.32905806667074,5.0
+92.36101946555053,5.0
+97.39298086443031,5.0
+102.39298086443034,5.0
+107.55591956040345,5.0
+112.71885825637656,5.0
+117.88179695234967,5.0
+123.04473564832278,5.0
+128.2076743442959,5.0
+133.370613040269,5.0
+138.53355173624212,5.0
+143.69649043221523,5.0
+148.85942912818834,5.0
+154.02236782416145,5.0
+159.18530652013456,5.0
+164.34824521610767,5.0
+169.51118391208078,5.0
+174.6741226080539,5.0
+179.837061304027,5.0
+185.0000000000001,5.0
+3.5714285714285716,10.0
+9.191572971629991,10.0
+14.811717371831412,10.0
+20.431861772032832,10.0
+26.05200617223425,10.0
+31.67215057243567,10.0
+37.29229497263709,10.0
+42.912439372838506,10.0
+48.532583773039924,10.0
+53.53258377303993,10.0
+59.35348632686614,10.0
+65.17438888069235,10.0
+70.99529143451855,10.0
+76.81619398834475,10.0
+82.63709654217095,10.0
+103.790429095042,10.0
+108.87106715537253,10.0
+113.95170521570306,10.0
+119.03234327603359,10.0
+124.11298133636411,10.0
+129.19361939669466,10.0
+134.2742574570252,10.0
+139.35489551735571,10.0
+144.43553357768624,10.0
+149.51617163801677,10.0
+154.5968096983473,10.0
+159.67744775867783,10.0
+164.75808581900836,10.0
+169.8387238793389,10.0
+174.91936193966941,10.0
+179.99999999999994,10.0
+5.357142857142858,15.0
+10.455760408342528,15.0
+15.554377959542197,15.0
+20.652995510741867,15.0
+25.751613061941537,15.0
+30.850230613141207,15.0
+35.94884816434087,15.0
+52.75788329009128,15.0
+60.186191975536715,15.0
+67.61450066098215,15.0
+105.45458888458307,15.0
+110.8042358934613,15.0
+116.15388290233952,15.0
+121.50352991121774,15.0
+126.85317692009596,15.0
+132.2028239289742,15.0
+137.55247093785243,15.0
+142.90211794673067,15.0
+148.2517649556089,15.0
+153.60141196448714,15.0
+158.95105897336538,15.0
+164.3007059822436,15.0
+169.65035299112185,15.0
+175.00000000000009,15.0
+7.142857142857143,20.0
+14.034554713004596,20.0
+20.926252283152046,20.0
+107.11874867412416,20.0
+112.35885295128048,20.0
+117.5989572284368,20.0
+122.83906150559312,20.0
+128.07916578274944,20.0
+133.31927005990576,20.0
+138.55937433706208,20.0
+143.7994786142184,20.0
+149.03958289137472,20.0
+154.27968716853104,20.0
+159.51979144568736,20.0
+164.75989572284368,20.0
+170.0,20.0
+108.78290846366525,25.0
+113.8935531487866,25.0
+119.00419783390794,25.0
+124.11484251902928,25.0
+129.22548720415062,25.0
+134.33613188927197,25.0
+139.4467765743933,25.0
+144.55742125951465,25.0
+149.668065944636,25.0
+154.77871062975734,25.0
+159.88935531487869,25.0
+165.00000000000003,25.0
+110.44706825320634,30.0
+115.95294955840563,30.0
+121.45883086360493,30.0
+126.96471216880423,30.0
+132.47059347400352,30.0
+137.97647477920282,30.0
+143.4823560844021,30.0
+148.9882373896014,30.0
+154.4941186948007,30.0
+160.0,30.0
+112.11122804274743,35.0
+117.472324537404,35.0
+122.83342103206058,35.0
+128.19451752671716,35.0
+133.55561402137374,35.0
+138.91671051603032,35.0
+144.2778070106869,35.0
+149.63890350534348,35.0
+155.00000000000006,35.0
+113.77538783228852,40.0
+118.95033242767587,40.0
+124.12527702306323,40.0
+129.3002216184506,40.0
+134.47516621383795,40.0
+139.6501108092253,40.0
+144.82505540461267,40.0
+150.00000000000003,40.0
+104.14153536041438,45.0
+109.24884344036258,45.0
+114.35615152031077,45.0
+119.46345960025897,45.0
+124.57076768020717,45.0
+129.67807576015537,45.0
+134.78538384010358,45.0
+139.8926919200518,45.0
+145.0,45.0
+89.11893947922556,50.0
+94.20704553130301,50.0
+99.29515158338046,50.0
+104.38325763545791,50.0
+109.47136368753536,50.0
+114.55946973961281,50.0
+119.64757579169026,50.0
+124.73568184376771,50.0
+129.82378789584516,50.0
+134.9118939479226,50.0
+140.00000000000006,50.0
+74.09634359803675,55.0
+79.17164829820035,55.0
+84.24695299836395,55.0
+89.32225769852755,55.0
+94.39756239869115,55.0
+99.47286709885475,55.0
+104.54817179901835,55.0
+109.62347649918195,55.0
+114.69878119934555,55.0
+119.77408589950915,55.0
+124.84939059967274,55.0
+129.92469529983634,55.0
+134.99999999999994,55.0
+59.07374771684794,60.0
+64.13990859421594,60.0
+69.20606947158394,60.0
+74.27223034895195,60.0
+79.33839122631996,60.0
+84.40455210368796,60.0
+89.47071298105597,60.0
+94.53687385842397,60.0
+99.60303473579198,60.0
+104.66919561315999,60.0
+109.73535649052799,60.0
+114.801517367896,60.0
+119.867678245264,60.0
+124.93383912263201,60.0
+130.0,60.0
+25.22820121209722,65.0
+44.05115183565913,65.0
+49.110454845930434,65.0
+54.16975785620174,65.0
+59.22906086647305,65.0
+64.28836387674436,65.0
+69.34766688701566,65.0
+74.40696989728697,65.0
+79.46627290755828,65.0
+84.52557591782958,65.0
+89.58487892810089,65.0
+94.6441819383722,65.0
+99.7034849486435,65.0
+104.76278795891481,65.0
+109.82209096918612,65.0
+114.88139397945743,65.0
+119.94069698972874,65.0
+125.00000000000004,65.0
+28.967416226960054,70.0
+26.785714285714285,75.0
+31.974789915966387,75.0
+37.16386554621849,75.0
+42.35294117647059,75.0
+47.542016806722685,75.0
+52.731092436974784,75.0
+57.92016806722688,75.0
+63.10924369747898,75.0
+68.29831932773108,75.0
+73.48739495798318,75.0
+78.67647058823529,75.0
+83.8655462184874,75.0
+89.0546218487395,75.0
+94.2436974789916,75.0
+99.43277310924371,75.0
+104.62184873949582,75.0
+109.81092436974792,75.0
+115.00000000000003,75.0
+28.571428571428573,80.0
+33.660714285714285,80.0
+38.75,80.0
+43.839285714285715,80.0
+48.92857142857143,80.0
+54.017857142857146,80.0
+59.10714285714286,80.0
+64.19642857142857,80.0
+69.28571428571428,80.0
+74.37499999999999,80.0
+79.4642857142857,80.0
+84.5535714285714,80.0
+89.64285714285711,80.0
+94.73214285714282,80.0
+99.82142857142853,80.0
+104.91071428571423,80.0
+109.99999999999994,80.0
+30.357142857142858,85.0
+35.68877551020408,85.0
+41.02040816326531,85.0
+46.352040816326536,85.0
+51.68367346938776,85.0
+57.01530612244899,85.0
+62.34693877551022,85.0
+67.67857142857144,85.0
+73.01020408163266,85.0
+78.34183673469389,85.0
+83.6734693877551,85.0
+89.00510204081633,85.0
+94.33673469387755,85.0
+99.66836734693877,85.0
+104.99999999999999,85.0
+32.142857142857146,90.0
+37.362637362637365,90.0
+42.582417582417584,90.0
+47.8021978021978,90.0
+53.02197802197802,90.0
+58.24175824175824,90.0
+63.46153846153846,90.0
+68.68131868131869,90.0
+73.9010989010989,90.0
+79.12087912087912,90.0
+84.34065934065934,90.0
+89.56043956043956,90.0
+94.78021978021978,90.0
+100.0,90.0
+33.92857142857143,95.0
+39.017857142857146,95.0
+44.10714285714286,95.0
+49.19642857142858,95.0
+54.28571428571429,95.0
+59.37500000000001,95.0
+64.46428571428572,95.0
+69.55357142857143,95.0
+74.64285714285714,95.0
+79.73214285714285,95.0
+84.82142857142856,95.0
+89.91071428571426,95.0
+94.99999999999997,95.0
+35.714285714285715,100.0
+41.142857142857146,100.0
+46.57142857142858,100.0
+52.00000000000001,100.0
+57.42857142857144,100.0
+62.85714285714287,100.0
+68.28571428571429,100.0
+73.71428571428572,100.0
+79.14285714285715,100.0
+84.57142857142858,100.0
+90.00000000000001,100.0
+37.5,105.0
+42.77777777777778,105.0
+48.05555555555556,105.0
+53.333333333333336,105.0
+58.611111111111114,105.0
+63.88888888888889,105.0
+69.16666666666667,105.0
+74.44444444444444,105.0
+79.72222222222221,105.0
+84.99999999999999,105.0
+39.285714285714285,110.0
+44.375,110.0
+49.464285714285715,110.0
+54.55357142857143,110.0
+59.642857142857146,110.0
+64.73214285714286,110.0
+69.82142857142857,110.0
+74.91071428571428,110.0
+79.99999999999999,110.0
+41.07142857142857,115.0
+46.726190476190474,115.0
+52.38095238095238,115.0
+58.035714285714285,115.0
+63.69047619047619,115.0
+69.3452380952381,115.0
+75.0,115.0
+42.85714285714286,120.0
+48.28571428571429,120.0
+53.71428571428572,120.0
+59.14285714285715,120.0
+64.57142857142858,120.0
+70.00000000000001,120.0
+44.642857142857146,125.0
+49.73214285714286,125.0
+54.82142857142858,125.0
+59.91071428571429,125.0
+65.0,125.0
+46.42857142857143,130.0
+53.214285714285715,130.0
+60.0,130.0
+48.214285714285715,135.0
+55.0,135.0
+50.0,140.0
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Equivalent_UIFT.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Equivalent_UIFT.json
new file mode 100644
index 0000000..69b2808
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Equivalent_UIFT.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24.0_0.075_2.0": [
+            0.8739976017808573,
+            1.195782481072329,
+            1.4813395980500976,
+            1.8197129231074136,
+            2.1112529470945205,
+            2.4507265748247704,
+            2.7874706983316413,
+            3.0442640745194867,
+            3.405932893231074,
+            3.6858425168079956,
+            3.945200403698797,
+            4.43800449606369,
+            4.901626493561494,
+            6.542674634563838,
+            9.108407389849503,
+            10.14813581375904,
+            11.269799692517228,
+            12.579426098446405,
+            13.788639374114762,
+            14.987550456419125,
+            16.175594630107636,
+            17.30678541574774,
+            18.247991259944357,
+            19.437099485008655,
+            20.340804921624475,
+            20.823957515344038,
+            21.678108745026808
+        ],
+        "5.0_48.0_0.075_2.0": [
+            1.526843516711902,
+            1.86788787550263,
+            2.162204170119768,
+            2.5059868936907437,
+            2.799964692399451,
+            3.1449665991264864,
+            3.54816376909491,
+            4.015027314223418,
+            5.055276651330824,
+            6.028554157808691,
+            6.943739436231787,
+            8.640799796725837,
+            10.17985395449923,
+            15.149941624829978,
+            21.758915917701312,
+            24.137496580346003,
+            26.495156920430897,
+            29.00703144594306,
+            31.097309749213508,
+            32.98413149329106,
+            34.66445875881632,
+            36.097136682331374,
+            37.17921651192458,
+            38.40799292565937,
+            39.25065383282389,
+            39.671853997253585,
+            40.38250938946266
+        ],
+        "5.0_96.0_0.075_2.0": [
+            2.2095248199822475,
+            2.555582101874375,
+            2.8521945625605083,
+            3.2037185920245292,
+            3.5601230608769683,
+            4.228611305954749,
+            5.485945473563214,
+            7.145935783180804,
+            10.732354055024782,
+            13.90563349681437,
+            16.74178937827534,
+            21.640132694060007,
+            25.753036501511893,
+            37.18183043611337,
+            49.346489186200266,
+            53.06493710960793,
+            56.447678282884844,
+            59.76107806007354,
+            62.27805131882006,
+            64.41462467572791,
+            66.201793951838,
+            67.65178636164886,
+            68.71835525409311,
+            69.91048137113982,
+            70.72217041907102,
+            71.12526631410566,
+            71.80168980444682
+        ],
+        "5.0_192.0_0.075_2.0": [
+            2.9046106332018136,
+            3.2618174969663256,
+            3.6389675241880814,
+            4.370762350085514,
+            5.504357514159335,
+            7.891368696606185,
+            12.224842028406439,
+            17.584567813139042,
+            28.02012139790929,
+            36.302445546472654,
+            43.10418332257702,
+            53.74565179777591,
+            61.821567870475825,
+            81.10280868927978,
+            97.96755075832657,
+            102.57500349471553,
+            106.60845186208715,
+            110.44506559506854,
+            113.30481032432769,
+            115.7193282754725,
+            117.73909952092518,
+            119.38666918659264,
+            120.60760646236332,
+            121.98554912006095,
+            122.92767844932152,
+            123.3937199234598,
+            124.16517305193358
+        ],
+        "5.0_384.0_0.075_2.0": [
+            3.784263266985341,
+            4.587555710963333,
+            5.836051920029034,
+            8.468697594611378,
+            12.409318858491648,
+            20.145567053588593,
+            32.76505935035088,
+            46.61030158437632,
+            69.79178827248374,
+            85.68749873069758,
+            97.55605351748572,
+            114.46886631628469,
+            126.238527963186,
+            151.87757421184406,
+            172.63201416914328,
+            178.16645324231652,
+            183.02781004042274,
+            187.67409284817154,
+            191.1888520276689,
+            194.1721094607071,
+            196.69948932323382,
+            198.78501857074627,
+            200.33584534702226,
+            202.09629917412772,
+            203.2993110605707,
+            203.89175812957436,
+            204.86060564031493
+        ]
+    },
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ],
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ]
+}
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Similarities_UIFT.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Similarities_UIFT.json
new file mode 100644
index 0000000..e03b50b
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_Similarities_UIFT.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24.0_0.075_2.0": [
+            0.8739976017808746,
+            1.1957824810723117,
+            1.4813395980500927,
+            1.8197129231074647,
+            2.1112529470945005,
+            2.4507265748247478,
+            2.7874706983316506,
+            3.044264074499701,
+            3.4059328400040276,
+            3.6858414784462163,
+            3.9451949244226285,
+            4.437961638928236,
+            4.901485648412544,
+            6.541356072417457,
+            9.103644997587525,
+            10.141885405867875,
+            11.261791853011674,
+            12.569244365732482,
+            13.776292992595007,
+            14.97294731005018,
+            16.15859680442342,
+            17.287350723302584,
+            18.22642060401038,
+            19.41286000902383,
+            20.31454656899357,
+            20.796726646449052,
+            21.649872520369634
+        ],
+        "5.0_48.0_0.075_2.0": [
+            1.526843516711868,
+            1.8678878755026598,
+            2.162204170119779,
+            2.5059868936907406,
+            2.799964692399423,
+            3.1449665986585775,
+            3.5481631619074325,
+            4.015005440593713,
+            5.054748168643089,
+            6.026691950594371,
+            6.93975459166986,
+            8.630168578637948,
+            10.16084277747922,
+            15.087888659423756,
+            21.625124006420762,
+            23.976771712844656,
+            26.307605781688242,
+            28.7915707739393,
+            30.859443749364743,
+            32.72816281423959,
+            34.394569739020035,
+            35.81789143417462,
+            36.89494924495975,
+            38.12097604159492,
+            38.96349203255389,
+            39.38520178968613,
+            40.09749562258843
+        ],
+        "5.0_96.0_0.075_2.0": [
+            2.2095248199822466,
+            2.5555821018743865,
+            2.852194562560448,
+            3.2037185907623957,
+            3.56012252157133,
+            4.228562540129955,
+            5.485001314666228,
+            7.1414457774767985,
+            10.709984465061268,
+            13.860446579992626,
+            16.67201188637389,
+            21.51856166469408,
+            25.583904774465417,
+            36.8678378084677,
+            48.89439801369396,
+            52.57677677521575,
+            55.93502363943924,
+            59.230625704000516,
+            61.738621730133474,
+            63.8710447089897,
+            65.65728466962449,
+            67.10818660415747,
+            68.17603741069024,
+            69.37007600863652,
+            70.18321789386422,
+            70.58711009760039,
+            71.26489133885576
+        ],
+        "5.0_192.0_0.075_2.0": [
+            2.9046106331874073,
+            3.261817493375042,
+            3.6389665846083945,
+            4.370695211803375,
+            5.503571734353561,
+            7.885058510360282,
+            12.195870864316792,
+            17.513445306764655,
+            27.835161329686738,
+            36.01633792261528,
+            42.73146136057038,
+            53.23455036257314,
+            61.21081975625406,
+            80.29937711922715,
+            97.06840376043984,
+            101.66091369496765,
+            105.68709185226399,
+            109.51970775666246,
+            112.37785982118533,
+            114.79142512351861,
+            116.81057405649308,
+            118.45760476975053,
+            119.6780053576939,
+            121.05512748960848,
+            121.99664419365928,
+            122.4623967569756,
+            123.23342459669756
+        ],
+        "5.0_384.0_0.075_2.0": [
+            3.784252716312954,
+            4.5874538356036645,
+            5.8351830180919,
+            8.462359539817786,
+            12.38647628375762,
+            20.0676407945493,
+            32.56151464749869,
+            46.244791472368824,
+            69.13440021481105,
+            84.84718991673992,
+            96.59765928937381,
+            113.37017617222511,
+            125.06317000802589,
+            150.58940523315363,
+            171.2879202962232,
+            176.81038490006193,
+            181.6614647945912,
+            186.29776208286202,
+            189.80437117302958,
+            192.78046143251274,
+            195.3013333698987,
+            197.3811399627161,
+            198.92758897785615,
+            200.68285415747613,
+            201.8822782708587,
+            202.47297021624004,
+            203.4390319762814
+        ]
+    },
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ],
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ]
+}
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_UBWT.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_UBWT.json
new file mode 100644
index 0000000..77add8b
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/12_Equal_Segments_UBWT.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24.0_0.075_2.0": [
+            0.873963672694895,
+            1.1957130067382231,
+            1.481216408046314,
+            1.8194813535580112,
+            2.1108604897826613,
+            2.4500020533815157,
+            2.786140849729565,
+            3.0421877211243524,
+            3.4022208319055918,
+            3.6804640005197524,
+            3.937957472847985,
+            4.426020567546292,
+            4.8837011270503865,
+            6.484968977390008,
+            8.932749188641944,
+            9.910983785414121,
+            10.953400479955738,
+            12.153548194663404,
+            13.244451026365946,
+            14.309616485189261,
+            15.345775105261403,
+            16.312137677296715,
+            17.100338521796186,
+            18.069559196670596,
+            18.78617798485259,
+            19.162723754407654,
+            19.82294833033422
+        ],
+        "5.0_48.0_0.075_2.0": [
+            1.5268040874637878,
+            1.8678231209985432,
+            2.1621023685229495,
+            2.505809948503757,
+            2.7996757988333765,
+            3.144440578075993,
+            3.5471149395786714,
+            4.012899083838167,
+            5.047235273252222,
+            6.009700084519564,
+            6.909265004161983,
+            8.560185433639607,
+            10.040649414960612,
+            14.69717544989444,
+            20.670994955532127,
+            22.77644846031265,
+            24.830769004411597,
+            26.9833266251433,
+            28.74001957559777,
+            30.303526085855204,
+            31.67122552936641,
+            32.81768564321476,
+            33.67390464135083,
+            34.63720643962665,
+            35.292565261789974,
+            35.61978356278193,
+            36.1805932626077
+        ],
+        "5.0_96.0_0.075_2.0": [
+            2.2092418848027813,
+            2.555268990965112,
+            2.8518500524099513,
+            3.2033196624186187,
+            3.5596329561661575,
+            4.227624207101408,
+            5.48031938042669,
+            7.123280170354422,
+            10.624251905086702,
+            13.681377347555161,
+            16.38492682166152,
+            20.992511420366498,
+            24.819034329623097,
+            35.23076189062267,
+            46.04413607693374,
+            49.300953006381135,
+            52.2433356212587,
+            55.09991798319267,
+            57.24205548761063,
+            59.052048279075755,
+            60.5528744092883,
+            61.76189206197839,
+            62.649274851206684,
+            63.64074288233348,
+            64.3155033919087,
+            64.65141292934888,
+            65.22100035709633
+        ],
+        "5.0_192.0_0.075_2.0": [
+            2.899626137716777,
+            3.256574656064855,
+            3.6334970470626162,
+            4.364660598639972,
+            5.494692685039488,
+            7.856674255197714,
+            12.08655281769335,
+            17.2469186659683,
+            27.148452701882825,
+            34.94526103064187,
+            41.32208637861339,
+            51.259788835585596,
+            58.78737054842463,
+            76.68448569762182,
+            92.28395506507287,
+            96.5322675249258,
+            100.24626916107049,
+            103.7690659288539,
+            106.38035854020353,
+            108.58307925218735,
+            110.41929110457102,
+            111.91300137281696,
+            113.01972368753596,
+            114.26855577911608,
+            115.12296609486773,
+            115.54623619634428,
+            116.24980606564716
+        ],
+        "5.0_384.0_0.075_2.0": [
+            3.707091589689416,
+            4.503066530809104,
+            5.738784829316388,
+            8.327523625047027,
+            12.156516792614397,
+            19.549633065086258,
+            31.43716970253986,
+            44.405393915494095,
+            66.15100028886091,
+            81.17665414651769,
+            92.47333574841153,
+            108.66678742974491,
+            120.004194237341,
+            144.8140878601336,
+            164.95787870526996,
+            170.332136513722,
+            175.0485068525047,
+            179.55156811340137,
+            182.95119486256564,
+            185.83635148915064,
+            188.27751159748615,
+            190.2897693873453,
+            191.78625066208343,
+            193.48471098476423,
+            194.64591204984706,
+            195.218169308051,
+            196.15548541101944
+        ]
+    },
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ],
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ]
+}
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/8_Unequal_Segments_Equivalent_UIFT.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/8_Unequal_Segments_Equivalent_UIFT.json
new file mode 100644
index 0000000..1bea105
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/8_Unequal_Segments_Equivalent_UIFT.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24.0_0.075_2.0": [
+            0.8739505146140552,
+            1.1956691578305518,
+            1.4811013524801684,
+            1.8191862700615697,
+            2.1103312743580496,
+            2.44914475851799,
+            2.7850903285764623,
+            3.0412459674986074,
+            3.402034325933416,
+            3.6813203118229314,
+            3.940123823534824,
+            4.431870499414439,
+            4.8945196374488,
+            6.5321914808637676,
+            9.09440638597758,
+            10.133637487099675,
+            11.25530126841069,
+            12.565768496660228,
+            13.776599818175779,
+            14.977964465944801,
+            16.16936100033621,
+            17.304679302873303,
+            18.250090581627173,
+            19.44585360849557,
+            20.355622863929376,
+            20.842354699191837,
+            21.703328023837013
+        ],
+        "5.0_48.0_0.075_2.0": [
+            1.5267626613036684,
+            1.8677236241300532,
+            2.161901032324926,
+            2.5053885820727304,
+            2.798979965438119,
+            3.143348875340851,
+            3.5456618764311836,
+            4.011428546817606,
+            5.048810343958217,
+            6.019128081849408,
+            6.931307950090765,
+            8.621950809430444,
+            10.154720760512994,
+            15.098600353873152,
+            21.666262192475163,
+            24.03057162468635,
+            26.373183185395934,
+            28.868160891643587,
+            30.94336761907759,
+            32.816288529610354,
+            34.48375458788416,
+            35.90500990148055,
+            36.97834394423332,
+            38.197190753002815,
+            39.03304174714435,
+            39.45085428051422,
+            40.15610344347448
+        ],
+        "5.0_96.0_0.075_2.0": [
+            2.2094077877624123,
+            2.5553761911480466,
+            2.851849592423143,
+            3.2030847267954536,
+            3.5590526565566547,
+            4.226345816839584,
+            5.480222728940835,
+            7.133535128233604,
+            10.69636592692039,
+            13.842209776008822,
+            16.648931280024275,
+            21.480686102039858,
+            25.527288777002415,
+            36.68862179202882,
+            48.46478793573238,
+            52.045341686302024,
+            55.29281438270243,
+            58.46274492747544,
+            60.85989282008423,
+            62.89186121251741,
+            64.5874135891604,
+            65.96056880610162,
+            66.97049665943172,
+            68.0999640067313,
+            68.86937525625012,
+            69.25180640918084,
+            69.89540119513455
+        ],
+        "5.0_192.0_0.075_2.0": [
+            2.9041833285447582,
+            3.261274940394613,
+            3.6382263945838424,
+            4.369343789325428,
+            5.501030761394689,
+            7.879517029673095,
+            12.17999771967014,
+            17.470480371582507,
+            27.666322959774153,
+            35.68813308059023,
+            42.22796114734492,
+            52.33472762964988,
+            59.928846566880004,
+            77.66335775472413,
+            92.82095933122024,
+            96.9037976495246,
+            100.46626486918991,
+            103.83602781050634,
+            106.32759198237422,
+            108.43099594607183,
+            110.18446088714491,
+            111.61146841494262,
+            112.67003215224484,
+            113.86643293228278,
+            114.68565100041917,
+            115.09166481526054,
+            115.76715011297595
+        ],
+        "5.0_384.0_0.075_2.0": [
+            3.7791908182413567,
+            4.581612251448696,
+            5.828361736445554,
+            8.454622077364611,
+            12.375756573698087,
+            20.02650118657546,
+            32.356493577607466,
+            45.685356076405995,
+            67.44334101278012,
+            82.05303749050445,
+            92.795744189713,
+            107.75288085762621,
+            117.9926461265495,
+            139.63687054456452,
+            156.71238747836307,
+            161.20052467449074,
+            165.13735139865503,
+            168.87833843245906,
+            171.6847653266534,
+            174.0682755848738,
+            176.0800981323475,
+            177.73582017552937,
+            178.96873247988395,
+            180.3700990519859,
+            181.32980353404582,
+            181.80359267905982,
+            182.58280801715773
+        ]
+    },
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ],
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ]
+}
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/96_Equal_Segments_Similarities_UIFT.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/96_Equal_Segments_Similarities_UIFT.json
new file mode 100644
index 0000000..240e0b7
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/96_Equal_Segments_Similarities_UIFT.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24.0_0.075_2.0": [
+            0.8738944777382094,
+            1.1955486979861076,
+            1.4808902299566395,
+            1.8188380270279825,
+            2.109863940165766,
+            2.448540774604877,
+            2.7843492801392,
+            3.0403977499310657,
+            3.401026936692378,
+            3.6801831619032392,
+            3.938852800453746,
+            4.430264080962502,
+            4.892477716118865,
+            6.526874888760023,
+            9.078530478963167,
+            10.112130221020916,
+            11.226494793813991,
+            12.526813322284752,
+            13.7265952218535,
+            14.915460227212947,
+            16.092679908180294,
+            17.2126917434914,
+            18.14402564171721,
+            19.319880076090968,
+            20.213118226948875,
+            20.690682676865393,
+            21.53566935491907
+        ],
+        "5.0_48.0_0.075_2.0": [
+            1.5266666350509372,
+            1.8675449270251296,
+            2.161619258250741,
+            2.504962151306667,
+            2.798432493197588,
+            3.142664473495739,
+            3.544816585334957,
+            4.010365769332365,
+            5.046685434769865,
+            6.014988360202924,
+            6.924215386866459,
+            8.605980223332578,
+            10.127598299472329,
+            15.012465838392005,
+            21.47020675122117,
+            23.789212264285936,
+            26.08311078650772,
+            28.52270795464809,
+            30.548753902793543,
+            32.37663881509277,
+            34.003228328030204,
+            35.38982080146603,
+            36.43794137671955,
+            37.630077431872515,
+            38.44906109380866,
+            38.859090983225805,
+            39.55296642276783
+        ],
+        "5.0_96.0_0.075_2.0": [
+            2.20931116960182,
+            2.5551961191078894,
+            2.8515696992197785,
+            3.20266596773033,
+            3.5584968785183877,
+            4.225477413039243,
+            5.477822698705456,
+            7.126401136382926,
+            10.66708939812177,
+            13.784709081354556,
+            16.560502842903755,
+            21.325164285839637,
+            25.307559931861665,
+            36.251065127439574,
+            47.77312680682675,
+            51.274228206336915,
+            54.45237378582122,
+            57.55552809043003,
+            59.901727342670895,
+            61.892040387822135,
+            63.55305266423099,
+            64.89851746975901,
+            65.88852240705707,
+            66.99631475986125,
+            67.75128232650249,
+            68.12676497594703,
+            68.75951249771447
+        ],
+        "5.0_192.0_0.075_2.0": [
+            2.9044074324201974,
+            3.261435770929814,
+            3.6382850269604203,
+            4.369076151921175,
+            5.499528399084961,
+            7.870843773961533,
+            12.14354337801947,
+            17.382008759623506,
+            27.432714438544455,
+            35.320308168188014,
+            41.74047609107302,
+            51.64213751917677,
+            59.075689875230445,
+            76.41678988390727,
+            91.24449237153988,
+            95.23683278520895,
+            98.72228130423423,
+            102.01774075956169,
+            104.45142311752987,
+            106.5057308025096,
+            108.21701078194747,
+            109.60894794706647,
+            110.64155254203916,
+            111.8087328183652,
+            112.60815092291912,
+            113.00452290037732,
+            113.66466994875539
+        ],
+        "5.0_384.0_0.075_2.0": [
+            3.784597366418477,
+            4.587293443122183,
+            5.833431929618653,
+            8.45294714885005,
+            12.35284761595642,
+            19.93155616169893,
+            32.09221171446802,
+            45.19199126733565,
+            66.49167455738609,
+            80.7725709541633,
+            91.2700038033652,
+            105.86727645081041,
+            115.85528151060056,
+            136.92208300780374,
+            153.4993958259303,
+            157.84608923933345,
+            161.65713586339965,
+            165.2744946196554,
+            167.98348828345755,
+            170.2838703371044,
+            172.22381499435502,
+            173.81937224411823,
+            175.00764170496745,
+            176.3583705229972,
+            177.28369087320237,
+            177.74070025353913,
+            178.49307502218053
+        ]
+    },
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ],
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ]
+}
diff --git a/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/GLHEPRO_gFunctions_12x13.json b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/GLHEPRO_gFunctions_12x13.json
new file mode 100644
index 0000000..2957c08
--- /dev/null
+++ b/ghedt/examples/gFunctions/12x13_Calculated_g_Functions/GLHEPRO_gFunctions_12x13.json
@@ -0,0 +1,804 @@
+{
+    "g": {
+        "5.0_24_0.075_5.0": [
+            0.5192844924,
+            0.9260331604,
+            1.4761709772,
+            1.8222845393,
+            2.1192537065,
+            2.4642917274,
+            2.8043117065,
+            2.9851296646,
+            3.3823924302,
+            3.6786607747,
+            3.9500509308,
+            4.4634634781,
+            4.9441074644,
+            6.7771294986,
+            9.2314820947,
+            10.1951841505,
+            11.2331889463,
+            12.4579466561,
+            13.5368337499,
+            14.5823391434,
+            15.6171138309,
+            16.5783516342,
+            17.3542467064,
+            18.3186754438,
+            19.0126198061,
+            19.3679871252,
+            20.0002753017
+        ],
+        "5.0_48_0.075_5.0": [
+            1.3954571189,
+            1.7431998165,
+            2.1694875799,
+            2.5154885228,
+            2.8133713216,
+            3.1698549181,
+            3.6013480086,
+            3.9670624113,
+            5.0681674338,
+            6.0914367665,
+            7.0513355463,
+            8.8190620357,
+            10.3976657305,
+            15.4294216857,
+            22.0615278112,
+            24.3167211487,
+            26.5975931566,
+            28.95598936,
+            30.9682563799,
+            32.7398720621,
+            34.3461707079,
+            35.7365202264,
+            36.7862018211,
+            37.9863948582,
+            38.7948034529,
+            39.1839771913,
+            39.8440395346
+        ],
+        "5.0_96_0.075_5.0": [
+            2.126197177,
+            2.4495767081,
+            2.8646550286,
+            3.2249331353,
+            3.6107286299,
+            4.3491938698,
+            5.7279787775,
+            7.3776471995,
+            11.129110365,
+            14.3825457018,
+            17.2663968427,
+            22.2114459259,
+            26.3643175382,
+            38.053608915,
+            51.0300564971,
+            54.9124456371,
+            58.5465239947,
+            62.1612991338,
+            65.0408678475,
+            67.5216930588,
+            69.671903442,
+            71.4705061195,
+            72.780300754,
+            74.2554571628,
+            75.2446558131,
+            75.7235997035,
+            76.5270611619
+        ],
+        "5.0_192_0.075_5.0": [
+            2.7195526291,
+            3.0363044612,
+            3.7181192751,
+            4.5430539543,
+            5.759240137,
+            8.2546940631,
+            12.6882134838,
+            17.9965956618,
+            28.4266004425,
+            36.649414839,
+            43.4589689167,
+            54.296263442,
+            62.7002651492,
+            83.9452325956,
+            103.8864807323,
+            109.4395557168,
+            114.39690766,
+            119.2401608489,
+            122.9700611182,
+            126.1486033149,
+            128.8887766447,
+            131.1938180647,
+            132.9209259079,
+            134.8790571078,
+            136.2012579657,
+            136.8413401681,
+            137.9229168737
+        ],
+        "5.0_384_0.075_5.0": [
+            2.9616375267,
+            3.2449362867,
+            4.9730946367,
+            7.2431211396,
+            10.8379937371,
+            18.5499471544,
+            31.8080801006,
+            46.3908365981,
+            71.8234982995,
+            89.5193415469,
+            102.9117063362,
+            122.5282336298,
+            136.6052157853,
+            167.5270788991,
+            193.1231663925,
+            199.4923799144,
+            205.2958717947,
+            211.1370316751,
+            215.3875964552,
+            219.3168699225,
+            222.6413756244,
+            225.4510392869,
+            227.5653064715,
+            230.0215784936,
+            231.7490025696,
+            232.5955100696,
+            234.0955513948
+        ]
+    },
+    "bore_locations": [
+        [
+            0.0,
+            0.0
+        ],
+        [
+            0.0,
+            5.0
+        ],
+        [
+            0.0,
+            10.0
+        ],
+        [
+            0.0,
+            15.0
+        ],
+        [
+            0.0,
+            20.0
+        ],
+        [
+            0.0,
+            25.0
+        ],
+        [
+            0.0,
+            30.0
+        ],
+        [
+            0.0,
+            35.0
+        ],
+        [
+            0.0,
+            40.0
+        ],
+        [
+            0.0,
+            45.0
+        ],
+        [
+            0.0,
+            50.0
+        ],
+        [
+            0.0,
+            55.0
+        ],
+        [
+            0.0,
+            60.0
+        ],
+        [
+            5.0,
+            0.0
+        ],
+        [
+            5.0,
+            5.0
+        ],
+        [
+            5.0,
+            10.0
+        ],
+        [
+            5.0,
+            15.0
+        ],
+        [
+            5.0,
+            20.0
+        ],
+        [
+            5.0,
+            25.0
+        ],
+        [
+            5.0,
+            30.0
+        ],
+        [
+            5.0,
+            35.0
+        ],
+        [
+            5.0,
+            40.0
+        ],
+        [
+            5.0,
+            45.0
+        ],
+        [
+            5.0,
+            50.0
+        ],
+        [
+            5.0,
+            55.0
+        ],
+        [
+            5.0,
+            60.0
+        ],
+        [
+            10.0,
+            0.0
+        ],
+        [
+            10.0,
+            5.0
+        ],
+        [
+            10.0,
+            10.0
+        ],
+        [
+            10.0,
+            15.0
+        ],
+        [
+            10.0,
+            20.0
+        ],
+        [
+            10.0,
+            25.0
+        ],
+        [
+            10.0,
+            30.0
+        ],
+        [
+            10.0,
+            35.0
+        ],
+        [
+            10.0,
+            40.0
+        ],
+        [
+            10.0,
+            45.0
+        ],
+        [
+            10.0,
+            50.0
+        ],
+        [
+            10.0,
+            55.0
+        ],
+        [
+            10.0,
+            60.0
+        ],
+        [
+            15.0,
+            0.0
+        ],
+        [
+            15.0,
+            5.0
+        ],
+        [
+            15.0,
+            10.0
+        ],
+        [
+            15.0,
+            15.0
+        ],
+        [
+            15.0,
+            20.0
+        ],
+        [
+            15.0,
+            25.0
+        ],
+        [
+            15.0,
+            30.0
+        ],
+        [
+            15.0,
+            35.0
+        ],
+        [
+            15.0,
+            40.0
+        ],
+        [
+            15.0,
+            45.0
+        ],
+        [
+            15.0,
+            50.0
+        ],
+        [
+            15.0,
+            55.0
+        ],
+        [
+            15.0,
+            60.0
+        ],
+        [
+            20.0,
+            0.0
+        ],
+        [
+            20.0,
+            5.0
+        ],
+        [
+            20.0,
+            10.0
+        ],
+        [
+            20.0,
+            15.0
+        ],
+        [
+            20.0,
+            20.0
+        ],
+        [
+            20.0,
+            25.0
+        ],
+        [
+            20.0,
+            30.0
+        ],
+        [
+            20.0,
+            35.0
+        ],
+        [
+            20.0,
+            40.0
+        ],
+        [
+            20.0,
+            45.0
+        ],
+        [
+            20.0,
+            50.0
+        ],
+        [
+            20.0,
+            55.0
+        ],
+        [
+            20.0,
+            60.0
+        ],
+        [
+            25.0,
+            0.0
+        ],
+        [
+            25.0,
+            5.0
+        ],
+        [
+            25.0,
+            10.0
+        ],
+        [
+            25.0,
+            15.0
+        ],
+        [
+            25.0,
+            20.0
+        ],
+        [
+            25.0,
+            25.0
+        ],
+        [
+            25.0,
+            30.0
+        ],
+        [
+            25.0,
+            35.0
+        ],
+        [
+            25.0,
+            40.0
+        ],
+        [
+            25.0,
+            45.0
+        ],
+        [
+            25.0,
+            50.0
+        ],
+        [
+            25.0,
+            55.0
+        ],
+        [
+            25.0,
+            60.0
+        ],
+        [
+            30.0,
+            0.0
+        ],
+        [
+            30.0,
+            5.0
+        ],
+        [
+            30.0,
+            10.0
+        ],
+        [
+            30.0,
+            15.0
+        ],
+        [
+            30.0,
+            20.0
+        ],
+        [
+            30.0,
+            25.0
+        ],
+        [
+            30.0,
+            30.0
+        ],
+        [
+            30.0,
+            35.0
+        ],
+        [
+            30.0,
+            40.0
+        ],
+        [
+            30.0,
+            45.0
+        ],
+        [
+            30.0,
+            50.0
+        ],
+        [
+            30.0,
+            55.0
+        ],
+        [
+            30.0,
+            60.0
+        ],
+        [
+            35.0,
+            0.0
+        ],
+        [
+            35.0,
+            5.0
+        ],
+        [
+            35.0,
+            10.0
+        ],
+        [
+            35.0,
+            15.0
+        ],
+        [
+            35.0,
+            20.0
+        ],
+        [
+            35.0,
+            25.0
+        ],
+        [
+            35.0,
+            30.0
+        ],
+        [
+            35.0,
+            35.0
+        ],
+        [
+            35.0,
+            40.0
+        ],
+        [
+            35.0,
+            45.0
+        ],
+        [
+            35.0,
+            50.0
+        ],
+        [
+            35.0,
+            55.0
+        ],
+        [
+            35.0,
+            60.0
+        ],
+        [
+            40.0,
+            0.0
+        ],
+        [
+            40.0,
+            5.0
+        ],
+        [
+            40.0,
+            10.0
+        ],
+        [
+            40.0,
+            15.0
+        ],
+        [
+            40.0,
+            20.0
+        ],
+        [
+            40.0,
+            25.0
+        ],
+        [
+            40.0,
+            30.0
+        ],
+        [
+            40.0,
+            35.0
+        ],
+        [
+            40.0,
+            40.0
+        ],
+        [
+            40.0,
+            45.0
+        ],
+        [
+            40.0,
+            50.0
+        ],
+        [
+            40.0,
+            55.0
+        ],
+        [
+            40.0,
+            60.0
+        ],
+        [
+            45.0,
+            0.0
+        ],
+        [
+            45.0,
+            5.0
+        ],
+        [
+            45.0,
+            10.0
+        ],
+        [
+            45.0,
+            15.0
+        ],
+        [
+            45.0,
+            20.0
+        ],
+        [
+            45.0,
+            25.0
+        ],
+        [
+            45.0,
+            30.0
+        ],
+        [
+            45.0,
+            35.0
+        ],
+        [
+            45.0,
+            40.0
+        ],
+        [
+            45.0,
+            45.0
+        ],
+        [
+            45.0,
+            50.0
+        ],
+        [
+            45.0,
+            55.0
+        ],
+        [
+            45.0,
+            60.0
+        ],
+        [
+            50.0,
+            0.0
+        ],
+        [
+            50.0,
+            5.0
+        ],
+        [
+            50.0,
+            10.0
+        ],
+        [
+            50.0,
+            15.0
+        ],
+        [
+            50.0,
+            20.0
+        ],
+        [
+            50.0,
+            25.0
+        ],
+        [
+            50.0,
+            30.0
+        ],
+        [
+            50.0,
+            35.0
+        ],
+        [
+            50.0,
+            40.0
+        ],
+        [
+            50.0,
+            45.0
+        ],
+        [
+            50.0,
+            50.0
+        ],
+        [
+            50.0,
+            55.0
+        ],
+        [
+            50.0,
+            60.0
+        ],
+        [
+            55.0,
+            0.0
+        ],
+        [
+            55.0,
+            5.0
+        ],
+        [
+            55.0,
+            10.0
+        ],
+        [
+            55.0,
+            15.0
+        ],
+        [
+            55.0,
+            20.0
+        ],
+        [
+            55.0,
+            25.0
+        ],
+        [
+            55.0,
+            30.0
+        ],
+        [
+            55.0,
+            35.0
+        ],
+        [
+            55.0,
+            40.0
+        ],
+        [
+            55.0,
+            45.0
+        ],
+        [
+            55.0,
+            50.0
+        ],
+        [
+            55.0,
+            55.0
+        ],
+        [
+            55.0,
+            60.0
+        ]
+    ],
+    "logtime": [
+        -8.5,
+        -7.8,
+        -7.2,
+        -6.5,
+        -5.9,
+        -5.2,
+        -4.5,
+        -3.963,
+        -3.27,
+        -2.864,
+        -2.577,
+        -2.171,
+        -1.884,
+        -1.191,
+        -0.497,
+        -0.274,
+        -0.051,
+        0.196,
+        0.419,
+        0.642,
+        0.873,
+        1.112,
+        1.335,
+        1.679,
+        2.028,
+        2.275,
+        3.003
+    ]
+}
\ No newline at end of file
diff --git a/ghedt/examples/gFunctions/Sized_Computed_g_Functions.xlsx b/ghedt/examples/gFunctions/Sized_Computed_g_Functions.xlsx
new file mode 100644
index 0000000..4dde45a
Binary files /dev/null and b/ghedt/examples/gFunctions/Sized_Computed_g_Functions.xlsx differ
diff --git a/ghedt/examples/gFunctions/boundary_condition_comparison.py b/ghedt/examples/gFunctions/boundary_condition_comparison.py
new file mode 100644
index 0000000..61a3cc6
--- /dev/null
+++ b/ghedt/examples/gFunctions/boundary_condition_comparison.py
@@ -0,0 +1,264 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import ghedt
+import ghedt.PLAT as PLAT
+import numpy as np
+import gFunctionDatabase as gfdb
+import pygfunction as gt
+
+
+def main():
+    # -------------------------------------------------------------------------
+    # Simulation parameters
+    # -------------------------------------------------------------------------
+
+    # Borehole dimensions
+    # -------------------
+    H = 96.  # Borehole length (m)
+    D = 2.  # Borehole buried depth (m)
+    r_b = 150. / 1000. / 2.  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Single U-tube [(x_in, y_in), (x_out, y_out)]
+    pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+    # Single U-tube BHE object
+    bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    alpha = soil.k / soil.rhoCp
+
+    # Eskilson's original ln(t/ts) values
+    ts = H ** 2 / (9. * alpha)  # Bore field characteristic time
+    log_time = np.array(gfdb.utilities.Eskilson_log_times())
+    time_values = np.exp(log_time) * ts
+
+    # Field of 12x13 (n=156) boreholes
+    N_1 = 12
+    N_2 = 13
+    coordinates = gfdb.coordinates.rectangle(N_1, N_2, B, B)
+
+    # Inputs related to fluid
+    # -----------------------
+    # Fluid properties
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Define a borehole
+    borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+    # Calculate g-functions
+    # g-Function calculation options
+    disp = True
+
+    # Calculate a uniform inlet fluid temperature g-function with 12 equal
+    # segments using the similarities solver
+    nSegments = 12
+    segments = 'equal'
+    boundary = 'MIFT'
+    solver = 'similarities'
+
+    gfunc_equal_Tf_in = ghedt.gfunction.calculate_g_function(
+        m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+        fluid, pipe, grout, soil, nSegments=nSegments, segments=segments,
+        solver=solver, boundary=boundary, disp=disp)
+
+    # Calculate a uniform inlet fluid temperature g-function with 12 equal
+    # segments using the equivalent solver
+
+    solver = 'equivalent'
+    gfunc_equal_Tf_in_eq = ghedt.gfunction.calculate_g_function(
+        m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+        fluid, pipe, grout, soil, nSegments=nSegments, segments=segments,
+        solver=solver, boundary=boundary, disp=disp)
+
+    segments = 'unequal'
+
+    gfunc_equal_Tf_in_uneq = ghedt.gfunction.calculate_g_function(
+        m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+        fluid, pipe, grout, soil, nSegments=nSegments, segments=segments,
+        solver=solver, boundary=boundary, disp=disp)
+
+    # Calculate a uniform borehole wall temperature g-function with 12 equal
+    # segments using the similarities solver
+    boundary = 'UBWT'
+
+    gfunc_uniform_T = ghedt.gfunction.calculate_g_function(
+        m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+        fluid, pipe, grout, soil, nSegments=nSegments, segments=segments,
+        solver=solver, boundary=boundary, disp=disp
+    )
+
+    # GLHEPro g-function
+    file_path = '12x13_Calculated_g_Functions/GLHEPRO_gFunctions_12x13.json'
+    data, file_name = gfdb.fileio.read_file(file_path)
+
+    geothermal_g_input = gfdb.Management.application.GFunction. \
+        configure_database_file_for_usage(data)
+
+    # Initialize the GFunction object
+    GFunction = gfdb.Management.application.GFunction(**geothermal_g_input)
+    B_over_H = B / H
+    rb = r_b
+    # interpolate for the Long time step g-function
+    g_function, rb_value, D_value, H_eq = \
+        GFunction.g_function_interpolation(B_over_H)
+    # correct the long time step for borehole radius
+    g_function_corrected_GLHEPro = \
+        GFunction.borehole_radius_correction(g_function,
+                                             rb_value,
+                                             rb)
+    # Reference UIFT g-function with 96 equal segments
+    file_path = '12x13_Calculated_g_Functions/' \
+                '96_Equal_Segments_Similarities_UIFT.json'
+    data, file_name = gfdb.fileio.read_file(file_path)
+
+    geothermal_g_input = gfdb.Management.application.GFunction. \
+        configure_database_file_for_usage(data)
+
+    # Initialize the GFunction object
+    GFunction = gfdb.Management.application.GFunction(**geothermal_g_input)
+    B_over_H = B / H
+    rb = r_b
+    # interpolate for the Long time step g-function
+    g_function, rb_value, D_value, H_eq = \
+        GFunction.g_function_interpolation(B_over_H)
+    # correct the long time step for borehole radius
+    g_function_corrected_UIFT_ref = \
+        GFunction.borehole_radius_correction(g_function,
+                                             rb_value,
+                                             rb)
+    # Database g-Function
+    # Number in the x and y
+    # ---------------------
+    N = 12
+    M = 13
+    configuration = 'rectangle'
+    # GFunction
+    # ---------
+    # Access the database for specified configuration
+    r = gfdb.Management.retrieval.Retrieve(configuration)
+    # There is just one value returned in the unimodal domain for rectangles
+    r_unimodal = r.retrieve(N, M)
+    key = list(r_unimodal.keys())[0]
+    print('The key value: {}'.format(key))
+    r_data = r_unimodal[key]
+
+    # Configure the database data for input to the goethermal GFunction object
+    geothermal_g_input = gfdb.Management. \
+        application.GFunction.configure_database_file_for_usage(r_data)
+
+    # Initialize the GFunction object
+    GFunction = gfdb.Management.application.GFunction(**geothermal_g_input)
+
+    # interpolate for the Long time step g-function
+    g_function, rb_value, D_value, H_eq = \
+        GFunction.g_function_interpolation(B_over_H)
+    # correct the long time step for borehole radius
+    g_function_corrected_DB = \
+        GFunction.borehole_radius_correction(g_function, rb_value, rb)
+
+    # Plot the g-functions
+    fig = gt.gfunction._initialize_figure()
+    ax = fig.add_subplot(111)
+    ax.set_xlabel(r'ln$(t/t_s)$')
+    ax.set_ylabel(r'$g$-function')
+    gt.gfunction._format_axes(ax)
+
+    ax.plot(log_time, gfunc_equal_Tf_in.gFunc, marker=None, linestyle='-',
+            label='12 Equal Similarities UIFT')
+    ax.plot(log_time, gfunc_equal_Tf_in_eq.gFunc, marker=None, linestyle='-',
+            label='12 Equal Equivalent UIFT')
+    ax.plot(log_time, gfunc_equal_Tf_in_uneq.gFunc, marker=None, linestyle='-',
+            label='8 Unequal Equivalent UIFT')
+    ax.plot(log_time, gfunc_uniform_T.gFunc,
+            label='12 Equal Similarities UBWT')
+    ax.plot(log_time, g_function_corrected_GLHEPro, marker=None, linestyle='--',
+            label=r'GLHEPro (UBWT, $D\approx5$m)')
+    ax.plot(log_time, g_function_corrected_UIFT_ref, marker='x',
+            linestyle='', label='96 Equal Similarities UIFT')
+    ax.plot(log_time, g_function_corrected_DB, linestyle='-.', label='GFDB',
+            zorder=0)
+
+    fig.legend(bbox_to_anchor=(0.5, 0.88))
+
+    ax2 = ax.twiny()
+    ax2.set_xticks(ax.get_xticks())
+    ax2.set_xbound(ax.get_xbound())
+    ax2.set_xticklabels([round(np.exp(x)*ts / 3600. / 8760., 3)
+                         for x in ax.get_xticks()])
+    ax2.set_xlabel('Time (seconds)')
+    gt.utilities._format_axes(ax2)
+
+    fig.tight_layout()
+
+    fig.savefig('g_function_comparison_plot.png')
+
+    # Verify the MPEs make sense
+    mpe_UBWT = compute_mpe(g_function_corrected_UIFT_ref, gfunc_uniform_T.gFunc)
+    print(mpe_UBWT)
+
+
+def compute_mpe(actual: list, predicted: list) -> float:
+    """
+    The following mean percentage error formula is used:
+    .. math::
+        MPE = \dfrac{100\%}{n}\sum_{i=0}^{n-1}\dfrac{a_t-p_t}{a_t}
+    Parameters
+    ----------
+    actual: list
+        The actual computed g-function values
+    predicted: list
+        The predicted g-function values
+    Returns
+    -------
+    **mean_percent_error: float**
+        The mean percentage error in percent
+    """
+    # the lengths of the two lists should be the same
+    assert len(actual) == len(predicted)
+    # create a summation variable
+    summation: float = 0.
+    for i in range(len(actual)):
+        summation += (predicted[i] - actual[i]) / actual[i]
+    mean_percent_error = summation * 100 / len(actual)
+    return mean_percent_error
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/burial_depth_variation.py b/ghedt/examples/gFunctions/burial_depth_variation.py
new file mode 100644
index 0000000..90d882d
--- /dev/null
+++ b/ghedt/examples/gFunctions/burial_depth_variation.py
@@ -0,0 +1,167 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import ghedt
+import ghedt.PLAT as PLAT
+import numpy as np
+import gFunctionDatabase as gfdb
+import pygfunction as gt
+
+
+def main():
+    # -------------------------------------------------------------------------
+    # Simulation parameters
+    # -------------------------------------------------------------------------
+
+    # Borehole dimensions
+    # -------------------
+    H = 96.  # Borehole length (m)
+    D_values = [1., 2., 3., 4., 5.]  # Borehole buried depth (m)
+    r_b = 150. / 1000. / 2.  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Single U-tube [(x_in, y_in), (x_out, y_out)]
+    pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+    # Single U-tube BHE object
+    bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    alpha = soil.k / soil.rhoCp
+
+    # Eskilson's original ln(t/ts) values
+    ts = H ** 2 / (9. * alpha)  # Bore field characteristic time
+    log_time = np.array(gfdb.utilities.Eskilson_log_times())
+    time_values = np.exp(log_time) * ts
+
+    # Field of 12x13 (n=156) boreholes
+    N_1 = 12
+    N_2 = 13
+    coordinates = gfdb.coordinates.rectangle(N_1, N_2, B, B)
+
+    # Inputs related to fluid
+    # -----------------------
+    # Fluid properties
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Calculate g-functions
+    # g-Function calculation options
+    disp = True
+
+    # Calculate a uniform inlet fluid temperature g-function with 12 equal
+    # segments using the similarities solver
+    nSegments = 12
+    segments = 'equal'
+    boundary = 'UBWT'
+    solver = 'similarities'
+
+    # Plot the g-functions
+    fig = gt.gfunction._initialize_figure()
+    ax = fig.add_subplot(111)
+    ax.set_xlabel(r'ln$(t/t_s)$')
+    ax.set_ylabel(r'$g$-function')
+    gt.gfunction._format_axes(ax)
+
+    ax.set_xlim([-8.8, 3.99])
+    ax.set_ylim([-2, 90])
+
+    # Define a borehole
+    for i in range(len(D_values)):
+        D = D_values[i]
+        borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+        ax.text(2.8, 82, 'D (m)')
+
+        # Calculate a uniform borehole wall temperature g-function with 12 equal
+        # segments using the similarities solver
+
+        gfunc_uniform_T = ghedt.gfunction.calculate_g_function(
+            m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+            nSegments, fluid, pipe, grout, soil, segments=segments,
+            solver=solver, boundary=boundary, disp=disp
+        )
+
+        ax.plot(log_time, gfunc_uniform_T.gFunc,
+                label='12 Equal Similarities UBWT ($D=' + str(int(D)) + '$m)')
+
+        x_n = log_time[-1]
+        y_n = gfunc_uniform_T.gFunc.tolist()[-1]
+
+        ax.annotate(str(int(D)),
+                    xy=(x_n + 0.1, y_n - 0.1))
+
+    # GLHEPro g-function
+    file_path = '12x13_Calculated_g_Functions/GLHEPRO_gFunctions_12x13.json'
+    data, file_name = gfdb.fileio.read_file(file_path)
+
+    geothermal_g_input = gfdb.Management.application.GFunction. \
+        configure_database_file_for_usage(data)
+
+    # Initialize the GFunction object
+    GFunction = gfdb.Management.application.GFunction(**geothermal_g_input)
+    B_over_H = B / H
+    rb = r_b
+    # interpolate for the Long time step g-function
+    g_function, rb_value, D_value, H_eq = \
+        GFunction.g_function_interpolation(B_over_H)
+    # correct the long time step for borehole radius
+    g_function_corrected_GLHEPro = \
+        GFunction.borehole_radius_correction(g_function,
+                                             rb_value,
+                                             rb)
+
+    ax.plot(log_time, g_function_corrected_GLHEPro, marker=None,
+            linestyle='--', label=r'GLHEPro (UBWT, $D\approx5$m)')
+
+    fig.legend(bbox_to_anchor=(0.55, 0.88))
+
+    ax2 = ax.twiny()
+    ax2.set_xticks(ax.get_xticks())
+    ax2.set_xbound(ax.get_xbound())
+    ax2.set_xticklabels([round(np.exp(x)*ts / 3600. / 8760., 3)
+                         for x in ax.get_xticks()])
+    ax2.set_xlabel('Time (seconds)')
+    gt.utilities._format_axes(ax2)
+
+    fig.tight_layout()
+
+    fig.savefig('burial_depth_comparison_plot.png')
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/compare_accuracy.py b/ghedt/examples/gFunctions/compare_accuracy.py
new file mode 100644
index 0000000..f0b7e37
--- /dev/null
+++ b/ghedt/examples/gFunctions/compare_accuracy.py
@@ -0,0 +1,133 @@
+import os
+
+import json
+import numpy as np
+import pygfunction as gt
+
+
+def compute_rmse(measured, truth):
+    rmse = np.linalg.norm(measured - truth) / np.sqrt(len(truth))
+    return rmse
+
+
+def compute_mpe(actual: list, predicted: list) -> float:
+    """
+    The following mean percentage error formula is used:
+    .. math::
+        MPE = \dfrac{100\%}{n}\sum_{i=0}^{n-1}\dfrac{a_t-p_t}{a_t}
+    Parameters
+    ----------
+    actual: list
+        The actual computed g-function values
+    predicted: list
+        The predicted g-function values
+    Returns
+    -------
+    **mean_percent_error: float**
+        The mean percentage error in percent
+    """
+    # the lengths of the two lists should be the same
+    assert len(actual) == len(predicted)
+    # create a summation variable
+    summation: float = 0.
+    for i in range(len(actual)):
+        summation += (predicted[i] - actual[i]) / actual[i]
+    mean_percent_error = summation * 100 / len(actual)
+    return mean_percent_error
+
+
+def js_r(filename: str):
+    with open(filename) as f_in:
+        return json.load(f_in)
+
+
+def main():
+    g_function_folder = 'Calculated_g_Functions/'
+
+    field_types = os.listdir(g_function_folder)
+
+    heights = os.listdir(g_function_folder)
+
+    k = 0
+
+    reference_folder = '96_Equal_Segments_Similarities_MIFT'
+    predicted_folders = ['12_Equal_Segments_Similarities_MIFT',
+                         '12_Equal_Segments_Equivalent_MIFT',
+                         '8_Unequal_Segments_Equivalent_MIFT',
+                         '12_Equal_Segments_Similarities_UBWT']
+    for j in range(len(field_types)):
+
+        field_type = field_types[j]
+
+        reference_heights_location = \
+            g_function_folder + field_type + '/'
+
+        height_values = os.listdir(reference_heights_location)
+
+        height_value_location = \
+            reference_heights_location + height_values[k] + '/'
+
+        reference_files_location = \
+            height_value_location + reference_folder + '/'
+
+        reference_files = os.listdir(reference_files_location)
+
+        fig = gt.gfunction._initialize_figure()
+        ax = fig.add_subplot(111)
+
+        markers = ['o', 's', '*', 'x']
+
+        for i in range(len(predicted_folders)):
+
+            predicted_folder_i = predicted_folders[i]
+            predicted_files_location_i = \
+                height_value_location + predicted_folder_i + '/'
+            plotting_data = {predicted_folder_i: {'nbh': [], 'RMSE': []}}
+
+            key = '5.0_96.0_0.075_2.0'
+
+            for j in range(len(reference_files)):
+                file_name = reference_files[j]
+
+                reference_data = \
+                    js_r(reference_files_location + file_name)
+                predicted_data = \
+                    js_r(predicted_files_location_i + file_name)
+
+                g_ref = np.array(reference_data['g'][key])
+                g_pred = np.array(predicted_data['g'][key])
+
+                nbh = len(reference_data['bore_locations'])
+
+                # rmse = compute_rmse(g_pred, g_ref)
+                rmse = compute_mpe(g_ref, g_pred)
+
+                print('{}\t{}'.format(file_name, nbh))
+
+                plotting_data[predicted_folder_i]['nbh'].append(nbh)
+                plotting_data[predicted_folder_i]['RMSE'].append(rmse)
+
+            nbh_values = plotting_data[predicted_folder_i]['nbh']
+            rmse_values = plotting_data[predicted_folder_i]['RMSE']
+
+            ax.scatter(nbh_values, rmse_values,
+                       label=predicted_folder_i.replace('_', ' '),
+                       marker=markers[i])
+
+        ax.set_xlabel('Number of boreholes')
+        ax.set_ylabel('Mean Percent Error = '
+                      r'$\dfrac{\mathbf{p} - \mathbf{r}}{\mathbf{r}} \;\; '
+                      r'\dfrac{100\%}{n} $')
+
+        ax.grid()
+        ax.set_axisbelow(True)
+
+        fig.legend(bbox_to_anchor=(0.568, 1.01))
+
+        fig.tight_layout(rect=(0, 0, 1, 0.965))
+
+        fig.savefig('accuracy_comparison_{}.png'.format(field_type))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/create_submission_files_RowWise.py b/ghedt/examples/gFunctions/create_submission_files_RowWise.py
new file mode 100644
index 0000000..dfa18d6
--- /dev/null
+++ b/ghedt/examples/gFunctions/create_submission_files_RowWise.py
@@ -0,0 +1,112 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import os
+import gFunctionDatabase as gfdb
+import json
+import pygfunction as gt
+import pandas as pd
+
+
+def create_if_not(directory):
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    return
+
+
+def js_o(filename, d):
+    with open(filename + '.json', 'w+') as fp:
+        json.dump(d, fp, indent=4)
+
+
+def main():
+    Input_folder = '100-400_RowWise_Cases/'
+    input_coordinate_files = os.listdir(Input_folder)
+
+    H_values = [96., 192.]
+
+    for i in range(len(H_values)):
+
+        output_folder = 'Submission_Files/' + str(int(H_values[i])) + 'm_Depth/'
+        create_if_not(output_folder)
+
+        # Borehole dimensions
+        D = 2.          # Borehole buried depth (m)
+        H = H_values[i]        # Borehole length (m)
+        r_b = 0.075    # Borehole radius (m)
+        B = 5.          # Uniform borehole spacing (m)
+
+        # Pipe dimensions (all configurations)
+        epsilon = 1.0e-6    # Pipe roughness (m)
+
+        # Pipe dimensions (single U-tube and double U-tube)
+        r_out = 26.67 / 1000. / 2.      # Pipe outer radius (m)
+        r_in = 21.6 / 1000. / 2.       # Pipe inner radius (m)
+
+        # Ground properties
+        k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+        k_s = 2.0  # Ground thermal conductivity (W/m.K)
+        k_g = 1.0  # Grout thermal conductivity (W/m.K)
+        rhoCp_s = 2343.493 * 1000.  # J/kg.m3
+        alpha = k_s / rhoCp_s
+
+        # Fluid properties
+        mixer = 'MEG'  # Ethylene glycol mixed with water
+        percent = 0.  # Percentage of ethylene glycol added in
+        fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+        # Fluid properties
+        V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
+        # Total fluid mass flow rate per borehole (kg/s)
+        m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+        s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+
+        pos = [(-0.029484999999999997, 3.610871087285971e-18),
+               (0.029484999999999997, -7.221742174571942e-18)]
+
+        log_time = [-8.5, -7.8, -7.2, -6.5, -5.9, -5.2, -4.5,
+                    -3.963, -3.27, -2.864, -2.577, -2.171, -1.884,
+                    -1.191, -0.497, -0.274, -0.051, 0.196, 0.419,
+                    0.642, 0.873, 1.112, 1.335, 1.679, 2.028,
+                    2.275, 3.003]
+
+        for i in range(len(input_coordinate_files)):
+            input_file_path = Input_folder + input_coordinate_files[i]
+
+            d = pd.read_csv(input_file_path).to_dict('list')
+
+            x = d['x']
+            y = d['y']
+            coordinates = list(zip(x, y))
+
+            name = input_coordinate_files[i].split('.')[0]
+            d_out = {
+                'B': B,
+                'D': D,
+                'H': H,
+                'r_b': r_b,
+                'alpha': alpha,
+                'r_out': r_out,
+                'r_in': r_in,
+                'epsilon': epsilon,
+                'pos': pos,
+                'm_flow_borehole': m_flow_borehole,
+                'k_p': k_p,
+                'k_s': k_s,
+                'k_g': k_g,
+                'rhoCp_s': rhoCp_s,
+                'mixer': mixer,
+                'percent': percent,
+                'bore_locations': coordinates,
+                'logtime': log_time,
+                'name': name
+            }
+
+            js_o(output_folder + 'sub-' + str(i), d_out)
+
+    return
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/create_submission_files_square.py b/ghedt/examples/gFunctions/create_submission_files_square.py
new file mode 100644
index 0000000..9fead50
--- /dev/null
+++ b/ghedt/examples/gFunctions/create_submission_files_square.py
@@ -0,0 +1,99 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import os
+import gFunctionDatabase as gfdb
+import json
+import pygfunction as gt
+
+
+def create_if_not(directory):
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    return
+
+
+def js_o(filename, d):
+    with open(filename + '.json', 'w+') as fp:
+        json.dump(d, fp, indent=4)
+
+
+def main():
+    output_folder = 'Submission_Files/'
+    create_if_not(output_folder)
+
+    # Borehole dimensions
+    D = 2.          # Borehole buried depth (m)
+    H = 96.        # Borehole length (m)
+    r_b = 0.075    # Borehole radius (m)
+    B = 5.          # Uniform borehole spacing (m)
+
+    # Pipe dimensions (all configurations)
+    epsilon = 1.0e-6    # Pipe roughness (m)
+
+    # Pipe dimensions (single U-tube and double U-tube)
+    r_out = 26.67 / 1000. / 2.      # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.       # Pipe inner radius (m)
+
+    # Ground properties
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+    rhoCp_s = 2343.493 * 1000.  # J/kg.m3
+    alpha = k_s / rhoCp_s
+
+    # Fluid properties
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    # Fluid properties
+    V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+
+    pos = [(-0.029484999999999997, 3.610871087285971e-18),
+           (0.029484999999999997, -7.221742174571942e-18)]
+
+    log_time = [-8.5, -7.8, -7.2, -6.5, -5.9, -5.2, -4.5,
+                -3.963, -3.27, -2.864, -2.577, -2.171, -1.884,
+                -1.191, -0.497, -0.274, -0.051, 0.196, 0.419,
+                0.642, 0.873, 1.112, 1.335, 1.679, 2.028,
+                2.275, 3.003]
+
+    for i in range(1, 21):
+        for j in range(1):
+            print('{}x{}'.format(i, i+j))
+            coordinates = gfdb.coordinates.rectangle(i, i+j, B, B)
+            name = '{}x{}rectangle'.format(i, j+i)
+            d_out = {
+                'B': B,
+                'D': D,
+                'H': H,
+                'r_b': r_b,
+                'alpha': alpha,
+                'r_out': r_out,
+                'r_in': r_in,
+                'epsilon': epsilon,
+                'pos': pos,
+                'm_flow_borehole': m_flow_borehole,
+                'k_p': k_p,
+                'k_s': k_s,
+                'k_g': k_g,
+                'rhoCp_s': rhoCp_s,
+                'mixer': mixer,
+                'percent': percent,
+                'bore_locations': coordinates,
+                'logtime': log_time,
+                'name': name
+            }
+
+            js_o(output_folder + 'sub-' + str(i-1), d_out)
+
+    return
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/generate_RowWise_g_functions.py b/ghedt/examples/gFunctions/generate_RowWise_g_functions.py
new file mode 100644
index 0000000..645f12d
--- /dev/null
+++ b/ghedt/examples/gFunctions/generate_RowWise_g_functions.py
@@ -0,0 +1,159 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import ghedt
+import ghedt.PLAT as PLAT
+import numpy as np
+import gFunctionDatabase as gfdb
+import pygfunction as gt
+import os
+import json
+
+
+def js_r(filename: str):
+    with open(filename) as f_in:
+        return json.load(f_in)
+
+
+def js_out(name, d):
+    with open(name + '.json', 'w+') as fp:
+        json.dump(d, fp, indent=4)
+
+
+def create_if_not(directory):
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    return
+
+
+def main():
+
+    calculations = ['12_Equal_Segments_Similarities_UBWT',
+                    '12_Equal_Segments_Similarities_MIFT',
+                    '12_Equal_Segments_Equivalent_MIFT',
+                    '8_Unequal_Segments_Equivalent_MIFT']
+
+    H_values = [96, 192.]
+
+    for k in range(len(H_values)):
+
+        output_folder = \
+            'Calculated_g_Functions/RowWise/' + str(int(H_values[k])) \
+            + 'm_Depth/'
+
+        submission_folder = 'Submission_Files/' + str(int(H_values[k])) \
+                            + 'm_Depth/'
+        submission_files = os.listdir(submission_folder)
+
+        for j in range(len(calculations)):
+
+            calculation = calculations[j]
+
+            calculation_folder = output_folder + calculation + '/'
+            create_if_not(calculation_folder)
+
+            # ------------------------------------------------------------------
+            # Simulation parameters
+            # ------------------------------------------------------------------
+            for i in range(len(submission_files)):
+
+                submission_file = submission_folder + submission_files[i]
+                submission_data = js_r(submission_file)
+
+                # Borehole dimensions
+                # -------------------
+                name = submission_data['name']
+                H = submission_data['H']  # Borehole length (m)
+                D = submission_data['D']  # Borehole buried depth (m)
+                r_b = submission_data['r_b']  # Borehole radius]
+                B = submission_data['B']  # Borehole spacing (m)
+
+                # Pipe dimensions
+                # ---------------
+                r_out = submission_data['r_out']  # Pipe outer radius (m)
+                r_in = submission_data['r_in']  # Pipe inner radius (m)
+                s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+                epsilon = submission_data['epsilon']  # Pipe roughness (m)
+
+                # Pipe positions
+                # --------------
+                # Single U-tube [(x_in, y_in), (x_out, y_out)]
+                pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+                # Single U-tube BHE object
+                bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+                # Thermal conductivities
+                # ----------------------
+                k_p = submission_data['k_p']  # Pipe thermal conductivity (W/m.K)
+                k_s = submission_data['k_s']  # Ground thermal conductivity (W/m.K)
+                k_g = submission_data['k_g']  # Grout thermal conductivity (W/m.K)
+
+                # Volumetric heat capacities
+                # --------------------------
+                rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+                rhoCp_s = submission_data['rhoCp_s']  # Soil volumetric heat capacity (J/K.m3)
+                rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+                # Thermal properties
+                # ------------------
+                # Pipe
+                pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+                # Soil
+                ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+                soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+                # Grout
+                grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+                alpha = soil.k / soil.rhoCp
+
+                # Eskilson's original ln(t/ts) values
+                ts = H ** 2 / (9. * alpha)  # Bore field characteristic time
+                log_time = np.array(gfdb.utilities.Eskilson_log_times())
+                time_values = np.exp(log_time) * ts
+
+                # Inputs related to fluid
+                # -----------------------
+                # Fluid properties
+                mixer = submission_data['mixer']  # Ethylene glycol mixed with water
+                percent = submission_data['percent']  # Percentage of ethylene glycol added in
+                fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+                # Total fluid mass flow rate per borehole (kg/s)
+                m_flow_borehole = submission_data['m_flow_borehole']
+
+                # Define a borehole
+                borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+                # Coordinates
+                coordinates = submission_data['bore_locations']
+
+                # Calculate g-functions
+                # g-Function calculation options
+                disp = True
+
+                # Calculate a uniform inlet fluid temperature g-function with 12 equal
+                # segments using the similarities solver
+
+                calc_details = calculation.split('_')
+                nSegments = int(calc_details[0])
+                segments = calc_details[1]
+                solver = calc_details[3].lower()
+                boundary = calc_details[4]
+
+                gfunc = ghedt.gfunction.calculate_g_function(
+                    m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+                    nSegments, fluid, pipe, grout, soil, segments=segments,
+                    solver=solver, boundary=boundary, disp=disp)
+
+                key = '{}_{}_{}_{}'.format(B, H, r_b, D)
+
+                d_out = {'g': {}, 'bore_locations': coordinates,
+                         'logtime': log_time.tolist()}
+                d_out['g'][key] = gfunc.gFunc.tolist()
+
+                js_out(calculation_folder + name, d_out)
+
+
+if __name__ == '__main__':
+    main()
+
diff --git a/ghedt/examples/gFunctions/generate_square_g_functions.py b/ghedt/examples/gFunctions/generate_square_g_functions.py
new file mode 100644
index 0000000..5c4df07
--- /dev/null
+++ b/ghedt/examples/gFunctions/generate_square_g_functions.py
@@ -0,0 +1,152 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import ghedt
+import ghedt.PLAT as PLAT
+import numpy as np
+import gFunctionDatabase as gfdb
+import pygfunction as gt
+import os
+import json
+
+
+def js_r(filename: str):
+    with open(filename) as f_in:
+        return json.load(f_in)
+
+
+def js_out(name, d):
+    with open(name + '.json', 'w+') as fp:
+        json.dump(d, fp, indent=4)
+
+
+def create_if_not(directory):
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    return
+
+
+def main():
+
+    output_folder = 'Calculated_g_Functions/'
+
+    calculations = ['12_Equal_Segments_Similarities_UBWT',
+                    '12_Equal_Segments_Similarities_MIFT',
+                    '12_Equal_Segments_Equivalent_MIFT',
+                    '8_Unequal_Segments_Equivalent_MIFT']
+
+    submission_folder = 'Submission_Files/'
+    submission_files = os.listdir(submission_folder)
+
+    for j in range(len(calculations)):
+
+        calculation = calculations[j]
+
+        calculation_folder = output_folder + calculation + '/'
+        create_if_not(calculation_folder)
+
+        # -------------------------------------------------------------------------
+        # Simulation parameters
+        # -------------------------------------------------------------------------
+        for i in range(len(submission_files)):
+
+            submission_file = submission_folder + submission_files[i]
+            submission_data = js_r(submission_file)
+
+            # Borehole dimensions
+            # -------------------
+            name = submission_data['name']
+            H = submission_data['H']  # Borehole length (m)
+            D = submission_data['D']  # Borehole buried depth (m)
+            r_b = submission_data['r_b']  # Borehole radius]
+            B = submission_data['B']  # Borehole spacing (m)
+
+            # Pipe dimensions
+            # ---------------
+            r_out = submission_data['r_out']  # Pipe outer radius (m)
+            r_in = submission_data['r_in']  # Pipe inner radius (m)
+            s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+            epsilon = submission_data['epsilon']  # Pipe roughness (m)
+
+            # Pipe positions
+            # --------------
+            # Single U-tube [(x_in, y_in), (x_out, y_out)]
+            pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+            # Single U-tube BHE object
+            bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+            # Thermal conductivities
+            # ----------------------
+            k_p = submission_data['k_p']  # Pipe thermal conductivity (W/m.K)
+            k_s = submission_data['k_s']  # Ground thermal conductivity (W/m.K)
+            k_g = submission_data['k_g']  # Grout thermal conductivity (W/m.K)
+
+            # Volumetric heat capacities
+            # --------------------------
+            rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+            rhoCp_s = submission_data['rhoCp_s']  # Soil volumetric heat capacity (J/K.m3)
+            rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+            # Thermal properties
+            # ------------------
+            # Pipe
+            pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+            # Soil
+            ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+            soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+            # Grout
+            grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+            alpha = soil.k / soil.rhoCp
+
+            # Eskilson's original ln(t/ts) values
+            ts = H ** 2 / (9. * alpha)  # Bore field characteristic time
+            log_time = np.array(gfdb.utilities.Eskilson_log_times())
+            time_values = np.exp(log_time) * ts
+
+            # Inputs related to fluid
+            # -----------------------
+            # Fluid properties
+            mixer = submission_data['mixer']  # Ethylene glycol mixed with water
+            percent = submission_data['percent']  # Percentage of ethylene glycol added in
+            fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+            # Total fluid mass flow rate per borehole (kg/s)
+            m_flow_borehole = submission_data['m_flow_borehole']
+
+            # Define a borehole
+            borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+            # Coordinates
+            coordinates = submission_data['bore_locations']
+
+            # Calculate g-functions
+            # g-Function calculation options
+            disp = True
+
+            # Calculate a uniform inlet fluid temperature g-function with 12 equal
+            # segments using the similarities solver
+
+            calc_details = calculation.split('_')
+            nSegments = int(calc_details[0])
+            segments = calc_details[1]
+            solver = calc_details[3].lower()
+            boundary = calc_details[4]
+
+            gfunc = ghedt.gfunction.calculate_g_function(
+                m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+                nSegments, fluid, pipe, grout, soil, segments=segments,
+                solver=solver, boundary=boundary, disp=disp)
+
+            key = '{}_{}_{}_{}'.format(B, H, r_b, D)
+
+            d_out = {'g': {}, 'bore_locations': coordinates,
+                     'logtime': log_time.tolist()}
+            d_out['g'][key] = gfunc.gFunc.tolist()
+
+            js_out(calculation_folder + name, d_out)
+
+
+if __name__ == '__main__':
+    main()
+
diff --git a/ghedt/examples/gFunctions/live_g_function_sim_and_size.py b/ghedt/examples/gFunctions/live_g_function_sim_and_size.py
new file mode 100644
index 0000000..4d0819c
--- /dev/null
+++ b/ghedt/examples/gFunctions/live_g_function_sim_and_size.py
@@ -0,0 +1,142 @@
+# Jack C. Cook
+# Tuesday, October 26, 2021
+
+import ghedt
+import ghedt.PLAT as PLAT
+import gFunctionDatabase as gfdb
+import ghedt.PLAT.pygfunction as gt
+import pandas as pd
+
+
+def main():
+    # Borehole dimensions
+    # -------------------
+    H = 96.  # Borehole length (m)
+    D = 2.  # Borehole buried depth (m)
+    r_b = 0.075  # Borehole radius]
+    B = 5.  # Borehole spacing (m)
+
+    # Pipe dimensions
+    # ---------------
+    r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+    r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+    s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+    epsilon = 1.0e-6  # Pipe roughness (m)
+
+    # Pipe positions
+    # --------------
+    # Single U-tube [(x_in, y_in), (x_out, y_out)]
+    pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+    # Single U-tube BHE object
+    bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+    # Thermal conductivities
+    # ----------------------
+    k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+    k_s = 2.0  # Ground thermal conductivity (W/m.K)
+    k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+    # Volumetric heat capacities
+    # --------------------------
+    rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+    rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+    rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+    # Thermal properties
+    # ------------------
+    # Pipe
+    pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+    # Soil
+    ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+    soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+    # Grout
+    grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+    # Eskilson's original ln(t/ts) values
+    log_time = ghedt.utilities.Eskilson_log_times()
+
+    # Inputs related to fluid
+    # -----------------------
+    # Fluid properties
+    mixer = 'MEG'  # Ethylene glycol mixed with water
+    percent = 0.  # Percentage of ethylene glycol added in
+    fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+    # Coordinates
+    Nx = 12
+    Ny = 13
+    coordinates = gfdb.coordinates.rectangle(Nx, Ny, B, B)
+
+    # Fluid properties
+    V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
+    V_flow_system = V_flow_borehole * float(Nx * Ny)
+    # Total fluid mass flow rate per borehole (kg/s)
+    m_flow_borehole = V_flow_borehole / 1000. * fluid.rho
+
+    # Define a borehole
+    borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+    # Simulation start month and end month
+    # --------------------------------
+    # Simulation start month and end month
+    start_month = 1
+    n_years = 20
+    end_month = n_years * 12
+    # Maximum and minimum allowable fluid temperatures
+    max_EFT_allowable = 35  # degrees Celsius
+    min_EFT_allowable = 5  # degrees Celsius
+    # Maximum and minimum allowable heights
+    max_Height = 150  # in meters
+    min_Height = 60  # in meters
+    sim_params = PLAT.media.SimulationParameters(
+        start_month, end_month, max_EFT_allowable, min_EFT_allowable,
+        max_Height, min_Height)
+
+    # Process loads from file
+    # -----------------------
+    # read in the csv file and convert the loads to a list of length 8760
+    hourly_extraction: dict = \
+        pd.read_csv('../GHE/Atlanta_Office_Building_Loads.csv').to_dict('list')
+    # Take only the first column in the dictionary
+    hourly_extraction_ground_loads: list = \
+        hourly_extraction[list(hourly_extraction.keys())[0]]
+
+    # Calculate a g-function for uniform inlet fluid temperature with
+    # 8 unequal segments using the equivalent solver
+    g_function = ghedt.gfunction.compute_live_g_function(
+        B, [H], [r_b], [D], m_flow_borehole, bhe_object, log_time,
+        coordinates, fluid, pipe, grout, soil)
+
+    # --------------------------------------------------------------------------
+
+    # Initialize the GHE object
+    ghe = ghedt.ground_heat_exchangers.GHE(
+        V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+        g_function, sim_params, hourly_extraction_ground_loads)
+
+    # Simulate after computing just one g-function
+    max_HP_EFT, min_HP_EFT = ghe.simulate()
+
+    print('Min EFT: {}\nMax EFT: {}'.format(min_HP_EFT, max_HP_EFT))
+
+    # Compute a range of g-functions for interpolation
+    H_values = [24., 48., 96., 192., 384.]
+    r_b_values = [r_b] * len(H_values)
+    D_values = [2.] * len(H_values)
+
+    g_function = ghedt.gfunction.compute_live_g_function(
+        B, H_values, r_b_values, D_values, m_flow_borehole, bhe_object,
+        log_time, coordinates, fluid, pipe, grout, soil)
+
+    # Re-Initialize the GHE object
+    ghe = ghedt.ground_heat_exchangers.GHE(
+        V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+        g_function, sim_params, hourly_extraction_ground_loads)
+
+    ghe.size(method='hybrid')
+
+    print('Height of boreholes: {}'.format(ghe.bhe.b.H))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/plot_RowWise_cases.py b/ghedt/examples/gFunctions/plot_RowWise_cases.py
new file mode 100644
index 0000000..45f7f2f
--- /dev/null
+++ b/ghedt/examples/gFunctions/plot_RowWise_cases.py
@@ -0,0 +1,45 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+
+import os
+import ghedt.PLAT.pygfunction as gt
+import pandas as pd
+
+
+def create_if_not(directory):
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    return
+
+
+def main():
+    input_path = '100-400_RowWise_Cases/'
+    output_folder = 'RowWisePlots/'
+    create_if_not(output_folder)
+
+    files = os.listdir(input_path)
+
+    for i in range(len(files)):
+
+        file = files[i]
+
+        fig = gt.utilities._initialize_figure()
+        ax = fig.add_subplot(111)
+
+        d = pd.read_csv(input_path + file).to_dict('list')
+
+        x = d['x']
+        y = d['y']
+
+        ax.scatter(x, y)
+
+        ax.set_xlabel('x (m)')
+        ax.set_ylabel('y (m)')
+
+        fig.tight_layout()
+
+        fig.savefig(output_folder + file.split('.')[0] + '.png')
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/plot_sizing_bar_charts.py b/ghedt/examples/gFunctions/plot_sizing_bar_charts.py
new file mode 100644
index 0000000..c5ca53f
--- /dev/null
+++ b/ghedt/examples/gFunctions/plot_sizing_bar_charts.py
@@ -0,0 +1,112 @@
+# Jack C. Cook
+# Tuesday, October 26, 2021
+
+import pandas as pd
+import pygfunction as gt
+import numpy as np
+import matplotlib.pyplot as plt
+
+
+def percent_error(ref, pred):
+    return (pred - ref) / ref * 100.
+
+
+def main():
+    file = 'Sized_Computed_g_Functions.xlsx'
+
+    d = pd.read_excel(file).to_dict('list')
+
+    calculation_info = d['Unnamed: 0']
+
+    years = [10, 20, 30]
+
+    fig = gt.utilities._initialize_figure()
+    ax = fig.add_subplot(111)
+
+    # ind = np.arange(len(GLHEPro_d['V_flow_borehole']))
+    ind = np.array(years)
+    width = 1
+
+    for i in range(len(calculation_info)):
+        calculation_specific = calculation_info[i].replace('_', ' ')
+        sized_height = []
+        for j in range(len(years)):
+            year = years[j]
+            sized_height_j = d[year][i]
+            sized_height.append(sized_height_j)
+            # ax.bar(ind-width/2-2*width+i*width, sized_height_j, width)
+        rects = ax.bar(ind - width / 2 - 2 * width + i * width, sized_height,
+                       width, color='C' + str(0 + i),
+                       label=calculation_specific)
+
+    ax.set_xticks(ind)
+    ax.tick_params(
+        axis='y', which='both', direction='in',
+        bottom=True, top=True, left=True, right=True)
+    from matplotlib.ticker import AutoMinorLocator
+    ax.yaxis.set_minor_locator(AutoMinorLocator())
+
+    ax.set_xlabel('Design period (years)')
+    ax.set_ylabel('Height of each borehole (m)')
+
+    ax.grid()
+
+    ax.set_axisbelow(True)
+
+    fig.legend(bbox_to_anchor=(1., 1.005), ncol=2)
+
+    fig.tight_layout(rect=(0, 0, 1, .89))
+
+    fig.savefig('sizing_comparison_bar.png')
+
+    plt.close(fig)
+
+    reference_case = '96_Equal_Segments_Similarities_UIFT'
+    reference_idx = calculation_info.index(reference_case)
+
+    fig = gt.utilities._initialize_figure()
+    ax = fig.add_subplot(111)
+
+    # ind = np.arange(len(GLHEPro_d['V_flow_borehole']))
+    ind = np.array(years)
+    width = 1
+
+    for i in range(len(calculation_info)):
+        if i == reference_idx:
+            continue
+        calculation_specific = calculation_info[i].replace('_', ' ')
+        error = []
+        for j in range(len(years)):
+            year = years[j]
+            ref = d[year][reference_idx]
+            percent_error_i = percent_error(ref, d[year][i])
+            error.append(percent_error_i)
+            # ax.bar(ind-width/2-2*width+i*width, sized_height_j, width)
+        rects = ax.bar(ind - 2 * width + i * width, error,
+                       width, color='C' + str(0 + i),
+                       label=calculation_specific)
+
+    ax.set_yticks(np.arange(-2, 8, 1))
+    ax.set_xticks(ind)
+    ax.tick_params(
+        axis='y', which='both', direction='in',
+        bottom=True, top=True, left=True, right=True)
+    from matplotlib.ticker import AutoMinorLocator
+    ax.yaxis.set_minor_locator(AutoMinorLocator())
+
+    ax.set_xlabel('Design period (years)')
+    ax.set_ylabel('Error in sized height (%)')
+
+    fig.legend(bbox_to_anchor=(0.95, 1.005), ncol=2)
+
+    ax.grid()
+
+    ax.set_axisbelow(True)
+
+    fig.tight_layout(rect=(0, 0, 1, .89))
+
+    fig.savefig('sizing_comparison_error_bar.png')
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/examples/gFunctions/size_computed_g_functions.py b/ghedt/examples/gFunctions/size_computed_g_functions.py
new file mode 100644
index 0000000..d622e50
--- /dev/null
+++ b/ghedt/examples/gFunctions/size_computed_g_functions.py
@@ -0,0 +1,145 @@
+# Jack C. Cook
+# Wednesday, October 13, 2021
+
+
+import ghedt.PLAT as PLAT
+import matplotlib.pyplot as plt
+import pandas as pd
+import ghedt.PLAT.pygfunction as gt
+import gFunctionDatabase as gfdb
+import ghedt
+from time import time as clock
+
+
+def main():
+    # --------------------------------------------------------------------------
+
+    g_function_files = ['12_Equal_Segments_Similarities_UIFT.json',
+                        '12_Equal_Segments_Equivalent_UIFT.json',
+                        '8_Unequal_Segments_Equivalent_UIFT.json',
+                        '12_Equal_Segments_UBWT.json',
+                        'GLHEPRO_gFunctions_12x13.json',
+                        '96_Equal_Segments_Similarities_UIFT.json']
+
+    d_out = {}
+
+    years = [10, 20, 30]
+
+    for j in range(len(years)):
+        print('YEARS = {}'.format(years[j]))
+
+        d_out[years[j]] = {}
+
+        for i in range(len(g_function_files)):
+
+            # Borehole dimensions
+            # -------------------
+            H = 100.  # Borehole length (m)
+            D = 2.  # Borehole buried depth (m)
+            r_b = 150. / 1000. / 2.  # Borehole radius]
+            B = 5.  # Borehole spacing (m)
+
+            # Pipe dimensions
+            # ---------------
+            r_out = 26.67 / 1000. / 2.  # Pipe outer radius (m)
+            r_in = 21.6 / 1000. / 2.  # Pipe inner radius (m)
+            s = 32.3 / 1000.  # Inner-tube to inner-tube Shank spacing (m)
+            epsilon = 1.0e-6  # Pipe roughness (m)
+
+            # Pipe positions
+            # --------------
+            # Single U-tube [(x_in, y_in), (x_out, y_out)]
+            pos = PLAT.media.Pipe.place_pipes(s, r_out, 1)
+            # Single U-tube BHE object
+            bhe_object = PLAT.borehole_heat_exchangers.SingleUTube
+
+            # Thermal conductivities
+            # ----------------------
+            k_p = 0.4  # Pipe thermal conductivity (W/m.K)
+            k_s = 2.0  # Ground thermal conductivity (W/m.K)
+            k_g = 1.0  # Grout thermal conductivity (W/m.K)
+
+            # Volumetric heat capacities
+            # --------------------------
+            rhoCp_p = 1542. * 1000.  # Pipe volumetric heat capacity (J/K.m3)
+            rhoCp_s = 2343.493 * 1000.  # Soil volumetric heat capacity (J/K.m3)
+            rhoCp_g = 3901. * 1000.  # Grout volumetric heat capacity (J/K.m3)
+
+            # Thermal properties
+            # ------------------
+            # Pipe
+            pipe = PLAT.media.Pipe(pos, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+            # Soil
+            ugt = 18.3  # Undisturbed ground temperature (degrees Celsius)
+            soil = PLAT.media.Soil(k_s, rhoCp_s, ugt)
+            # Grout
+            grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
+
+            # Read in g-functions from GLHEPro
+            file = '12x13_Calculated_g_Functions/' + g_function_files[i]
+            r_data, _ = gfdb.fileio.read_file(file)
+
+            # Configure the database data for input to the goethermal GFunction object
+            geothermal_g_input = gfdb.Management. \
+                application.GFunction.configure_database_file_for_usage(r_data)
+
+            # Initialize the GFunction object
+            GFunction = gfdb.Management.application.GFunction(**geothermal_g_input)
+
+            # Inputs related to fluid
+            # -----------------------
+            V_flow_system = 31.2  # System volumetric flow rate (L/s)
+            mixer = 'MEG'  # Ethylene glycol mixed with water
+            percent = 0.  # Percentage of ethylene glycol added in
+            # Fluid properties
+            fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+
+            # Define a borehole
+            borehole = gt.boreholes.Borehole(H, D, r_b, x=0., y=0.)
+
+            # Simulation start month and end month
+            # --------------------------------
+            # Simulation start month and end month
+            start_month = 1
+            n_years = years[j]
+            end_month = n_years * 12
+            # Maximum and minimum allowable fluid temperatures
+            max_EFT_allowable = 35  # degrees Celsius
+            min_EFT_allowable = 5  # degrees Celsius
+            # Maximum and minimum allowable heights
+            max_Height = 200  # in meters
+            min_Height = 60  # in meters
+            sim_params = PLAT.media.SimulationParameters(
+                start_month, end_month, max_EFT_allowable, min_EFT_allowable,
+                max_Height, min_Height)
+
+            # Process loads from file
+            # -----------------------
+            # read in the csv file and convert the loads to a list of length 8760
+            hourly_extraction: dict = \
+                pd.read_csv('../GHE/Atlanta_Office_Building_Loads.csv').to_dict('list')
+            # Take only the first column in the dictionary
+            hourly_extraction_ground_loads: list = \
+                hourly_extraction[list(hourly_extraction.keys())[0]]
+
+            # --------------------------------------------------------------------------
+
+            # Initialize Hybrid GLHE object
+            GHE = ghedt.ground_heat_exchangers.GHE(
+                V_flow_system, B, bhe_object, fluid, borehole, pipe, grout, soil,
+                GFunction, sim_params, hourly_extraction_ground_loads)
+
+            GHE.size()
+
+            calculation_details = g_function_files[i].split('.')[0]
+            print(calculation_details)
+            print('Height of boreholes: {}'.format(GHE.bhe.b.H))
+
+            d_out[n_years][calculation_details] = GHE.bhe.b.H
+
+        output_location = 'Sized_Computed_g_Functions.xlsx'
+        pd.DataFrame(d_out).to_excel(output_location)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ghedt/gfunction.py b/ghedt/gfunction.py
new file mode 100644
index 0000000..52b6f7a
--- /dev/null
+++ b/ghedt/gfunction.py
@@ -0,0 +1,472 @@
+# Jack C. Cook
+# Monday, October 25, 2021
+import copy
+import warnings
+
+from scipy.interpolate import interp1d, lagrange
+import ghedt
+import ghedt.PLAT.pygfunction as gt
+import numpy as np
+
+
+def calculate_g_function(
+        m_flow_borehole, bhe_object, time_values, coordinates, borehole,
+        fluid, pipe, grout, soil, nSegments=8, segments='unequal',
+        solver='equivalent', boundary='MIFT', disp=False):
+
+    boreField = []
+    BHEs = []
+
+    H = copy.deepcopy(borehole.H)
+    r_b = copy.deepcopy(borehole.r_b)
+    D = copy.deepcopy(borehole.D)
+    tilt = copy.deepcopy(borehole.tilt)
+    orientation = copy.deepcopy(borehole.orientation)
+
+    for i in range(len(coordinates)):
+        x, y = coordinates[i]
+        _borehole = gt.boreholes.Borehole(H, D, r_b, x, y, tilt, orientation)
+        boreField.append(_borehole)
+        # Initialize pipe model
+        if boundary == 'MIFT':
+            bhe = \
+                bhe_object(m_flow_borehole, fluid, _borehole, pipe, grout, soil)
+            BHEs.append(bhe)
+
+    alpha = soil.k / soil.rhoCp
+
+    # setup options
+    segments = segments.lower()
+    if segments == 'equal':
+        options = {'nSegments': nSegments, 'disp': disp}
+    elif segments == 'unequal':
+        segment_ratios = gt.utilities.segment_ratios(nSegments)
+        options = {'nSegments': nSegments, 'segment_ratios': segment_ratios,
+                   'disp': disp}
+    else:
+        raise ValueError('Equal or Unequal are acceptable options '
+                         'for segments.')
+
+    if boundary == 'UHTR' or boundary == 'UBWT':
+        gfunc = gt.gfunction.gFunction(
+            boreField, alpha, time=time_values, boundary_condition=boundary,
+            options=options, method=solver
+        )
+    elif boundary == 'MIFT':
+        m_flow_network = len(boreField) * m_flow_borehole
+        network = gt.networks.Network(
+            boreField, BHEs, m_flow_network=m_flow_network, cp_f=fluid.cp)
+        gfunc = gt.gfunction.gFunction(
+            network, alpha, time=time_values,
+            boundary_condition=boundary, options=options, method=solver)
+    else:
+        raise ValueError('UHTR, UBWT or MIFT are accepted boundary conditions.')
+
+    return gfunc
+
+
+def compute_live_g_function(
+        B: float, H_values: list, r_b_values: list, D_values: list,
+        m_flow_borehole, bhe_object, log_time,  coordinates,
+        fluid, pipe, grout, soil, nSegments=8, segments='unequal',
+        solver='equivalent', boundary='MIFT', disp=False):
+
+    d = {'g': {}, 'bore_locations': coordinates, 'logtime': log_time}
+
+    for i in range(len(H_values)):
+
+        H = H_values[i]
+        r_b = r_b_values[i]
+        D = D_values[i]
+        _borehole = gt.boreholes.Borehole(H, D, r_b, 0., 0.)
+
+        alpha = soil.k / soil.rhoCp
+
+        ts = H ** 2 / (9. * alpha)  # Bore field characteristic time
+        time_values = np.exp(log_time) * ts
+
+        gfunc = calculate_g_function(
+            m_flow_borehole, bhe_object, time_values, coordinates, _borehole,
+            fluid, pipe, grout, soil, nSegments=nSegments, segments=segments,
+            solver=solver, boundary=boundary, disp=disp)
+
+        key = '{}_{}_{}_{}'.format(B, H, r_b, D)
+
+        d['g'][key] = gfunc.gFunc.tolist()
+
+    geothermal_g_input = GFunction.configure_database_file_for_usage(d)
+    # Initialize the GFunction object
+    g_function = GFunction(**geothermal_g_input)
+
+    return g_function
+
+
+class GFunction:
+    def __init__(self, B: float, r_b_values: dict, D_values: dict,
+                 g_lts: dict, log_time: list, bore_locations: list):
+        self.B: float = B  # a B spacing in the borefield
+        # r_b (borehole radius) value keyed by height
+        self.r_b_values: dict = r_b_values
+        self.D_values: dict = D_values  # D (burial depth) value keyed by height
+        self.g_lts: dict = g_lts  # g-functions (LTS) keyed by height
+        # ln(t/ts) values that apply to all the heights
+        self.log_time: list = log_time
+        # (x, y) coordinates of boreholes
+        self.bore_locations: list = bore_locations
+        # self.time: dict = {}  # the time values in years
+
+        # an interpolation table for B/H ratios, D, r_b (used in the method
+        # g_function_interpolation)
+        self.interpolation_table: dict = {}
+
+    def g_function_interpolation(self, B_over_H: float, kind='default'):
+        """
+        Interpolate a range of g-functions for a specific B/H ratio
+        Parameters
+        ----------
+        B_over_H: float
+            A B/H ratio
+        kind: str
+            Could be 'linear', 'quadratic', 'cubic', etc.
+            default: 'cubic'
+        Returns
+        -------
+        **g-function: list**
+            A list of the g-function values for each ln(t/ts)
+        **rb: float**
+            A borehole radius value that is interpolated for
+        **D: float**
+            A burial depth that is interpolated for
+        **H_eq: float**
+            An equivalent height
+            .. math::
+                H_{eq} = \dfrac{B_{field}}{B/H}
+        """
+        # the g-functions are stored in a dictionary based on heights, so an
+        # equivalent height can be found
+        H_eq = 1 / B_over_H * self.B
+
+        # Determine if we are out of range and need to extrapolate
+        height_values = list(self.g_lts.keys())
+        if min(height_values) <= H_eq <= max(height_values):
+            fill_value = ''
+        else:
+            fill_value = 'extrapolate'
+            warnings.warn('Extrapolation is being used.')
+
+        # if the interpolation kind is default, use what we know about the
+        # accuracy of interpolation to choose a technique
+        if kind == 'default':
+            num_curves = len(height_values)
+            if num_curves >= 5:
+                kind = 'cubic'
+            elif num_curves >= 3:
+                kind = 'quadratic'
+            elif num_curves == 2:
+                kind = 'linear'
+            else:
+                if (H_eq-height_values[0]) / height_values[0] < 0.001:
+                    g_function = self.g_lts[height_values[0]]
+                    rb = self.r_b_values[height_values[0]]
+                    D = self.D_values[height_values[0]]
+                    return g_function, rb, D, H_eq
+                else:
+                    raise ValueError(
+                        'The interpolation requires two g-function curves if '
+                        'the requested B/H is not already computed.')
+
+        # Automatically adjust interpolation if necessary
+        # Lagrange also needs 2
+        interpolation_kinds = {'linear': 2, 'quadratic': 3, 'cubic': 4,
+                               'lagrange': 2}
+        curves_by_kind = {2: 'linear', 3: 'quadratic', 4: 'cubic'}
+        if len(height_values) < 2:
+            raise ValueError('Interpolation requires two g-function curves.')
+        else:
+            # If the number of required curves for the interpolation type is
+            # greater than what is available, reduce the interpolation type
+            required_curves = interpolation_kinds[kind]
+            if required_curves > len(height_values):
+                kind = curves_by_kind[len(height_values)]
+
+        # if the interpolation table is not yet know, build it
+        if len(self.interpolation_table) == 0:
+            # create an interpolation for the g-function which takes the height
+            # (or equivilant height) as an input the g-function needs to be
+            # interpolated at each point in dimensionless time
+            self.interpolation_table['g'] = []
+            for i, lntts in enumerate(self.log_time):
+                x = []
+                y = []
+                for key in self.g_lts:
+                    height_value = float(key)
+                    g_value = self.g_lts[key][i]
+                    x.append(height_value)
+                    y.append(g_value)
+                if kind == 'lagrange':
+                    f = lagrange(x, y)
+                else:
+                    f = interp1d(x, y, kind=kind, fill_value=fill_value)
+                self.interpolation_table['g'].append(f)
+            # create interpolation tables for 'D' and 'r_b' by height
+            keys = list(self.r_b_values.keys())
+            height_values: list = []
+            rb_values: list = []
+            D_values: list = []
+            for h in keys:
+                height_values.append(float(h))
+                rb_values.append(self.r_b_values[h])
+                try:
+                    D_values.append(self.D_values[h])
+                except:
+                    pass
+            if kind == 'lagrange':
+                rb_f = lagrange(height_values, rb_values)
+            else:
+                # interpolation function for rb values by H equivalent
+                rb_f = interp1d(height_values, rb_values, kind=kind, fill_value=fill_value)
+            self.interpolation_table['rb'] = rb_f
+            try:
+                if kind == 'lagrange':
+                    D_f = lagrange(height_values, D_values)
+                else:
+                    D_f = interp1d(height_values, D_values, kind=kind, fill_value=fill_value)
+                self.interpolation_table['D'] = D_f
+            except:
+                pass
+
+        # create the g-function by interpolating at each ln(t/ts) value
+        rb_value = self.interpolation_table['rb'](H_eq)
+        try:
+            D_value = self.interpolation_table['D'](H_eq)
+        except:
+            D_value = None
+        g_function: list = []
+        for i in range(len(self.log_time)):
+            f = self.interpolation_table['g'][i]
+            g = f(H_eq).tolist()
+            g_function.append(g)
+        return g_function, rb_value, D_value, H_eq
+
+    @staticmethod
+    def borehole_radius_correction(g_function: list, rb: float, rb_star: float):
+        """
+        Correct the borehole radius. From paper 3 of Eskilson 1987.
+        .. math::
+            g(\dfrac{t}{t_s}, \dfrac{r_b^*}{H}) =
+            g(\dfrac{t}{t_s}, \dfrac{r_b}{H}) - ln(\dfrac{r_b^*}{r_b})
+        Parameters
+        ----------
+        g_function: list
+            A g-function
+        rb: float
+            The current borehole radius
+        rb_star: float
+            The borehole radius that is being corrected to
+        Returns
+        -------
+        g_function_corrected: list
+            A corrected g_function
+        """
+        g_function_corrected = []
+        for i in range(len(g_function)):
+            g_function_corrected.append(g_function[i] - np.log(rb_star / rb))
+        return g_function_corrected
+
+    def correct_coordinates(self, B: float):
+        # scale the field by the ratio
+        scale = B / self.B
+
+        new_locations = []
+        for i in range(len(self.bore_locations)):
+            _x = self.bore_locations[i][0]
+            _y = self.bore_locations[i][1]
+            if _x == 0.0 and _y == 0.0:
+                new_locations.append([_x, _y])
+            elif _x == 0.0:
+                new_locations.append([_x, _y*scale])
+            else:
+                x = _x * scale
+                y = _y * scale
+                new_locations.append([x, y])
+
+        return new_locations
+
+    def visualize_g_functions(self):
+        """
+        Visualize the g-functions.
+        Returns
+        -------
+        **fig, ax**
+            Figure and axes information.
+        """
+        fig = gt.utilities._initialize_figure()
+        ax = fig.add_subplot(111)
+
+        ax.set_xlim([-8.8, 3.9])
+        ax.set_ylim([-2, 139])
+
+        ax.text(2.75, 135, 'B/H')
+
+        keys = reversed(list(self.g_lts.keys()))
+
+        for key in keys:
+            ax.plot(self.log_time, self.g_lts[key],
+                    label=str(int(self.B)) + '/' + str(int(key)))
+            x_n = self.log_time[-1]
+            y_n = self.g_lts[key][-1]
+            if key == 8:
+                ax.annotate(str(round(float(self.B) / float(key), 4)),
+                            xy=(x_n - .4, y_n - 5))
+            else:
+                ax.annotate(str(round(float(self.B) / float(key), 4)),
+                            xy=(x_n-.4, y_n+1))
+
+        handles, labels = ax.get_legend_handles_labels()
+
+        # legend = fig.legend(handles=handles, labels=labels,
+        #                     title='B/H'.rjust(5) + '\nLibrary',
+        #                     bbox_to_anchor=(1, 1.0))
+        legend = fig.legend(handles=handles, labels=labels,
+                            title='B/H'.rjust(5), bbox_to_anchor=(1, 1.0))
+        fig.gca().add_artist(legend)
+
+        ax.set_ylabel('g')
+        ax.set_xlabel('ln(t/t$_s$)')
+        ax.grid()
+        ax.set_axisbelow(True)
+        fig.subplots_adjust(left=0.09, right=0.835, bottom=0.1, top=.99)
+
+        return fig, ax
+
+    def visualize_borefield(self, bore_locations=None):
+        """
+        Visualize the (x,y) coordinates.
+        Returns
+        -------
+        **fig, ax**
+            Figure and axes information.
+        """
+        if bore_locations is None:
+            bore_locations = self.bore_locations
+        import matplotlib.pyplot as plt
+        fig, ax = plt.subplots(figsize=(3.5, 5))
+
+        x, y = list(zip(*bore_locations))
+
+        ax.scatter(x, y)
+
+        ax.set_xlabel('x (m)')
+        ax.set_ylabel('y (m)')
+
+        ax.set_aspect('equal')
+        fig.tight_layout()
+
+        return fig, ax
+
+    @staticmethod
+    def visualize_area_and_constraints(perimeter: list, coordinates: list,
+                                       no_go=None):
+        """
+        Visualize the (x,y) coordinates, and no go zone.
+        Returns
+        -------
+        **fig, ax**
+            Figure and axes information.
+        """
+        fig = gt.utilities._initialize_figure()
+        ax = fig.add_subplot(111)
+
+        perimeter = perimeter + [perimeter[0]]
+
+        x, y = list(zip(*coordinates))
+
+        ax.scatter(x, y)
+        _x, _y = list(zip(*perimeter))
+        ax.plot(_x, _y, 'g')
+        if no_go is not None:
+            no_go = no_go + [no_go[0]]
+            _x, _y = list(zip(*no_go))
+            ax.plot(_x, _y, 'r')
+
+        ax.set_xlabel('x (m)')
+        ax.set_ylabel('y (m)')
+
+        fig.tight_layout()
+
+        return fig, ax
+
+    @staticmethod
+    def configure_database_file_for_usage(data) -> dict:
+        """
+        This method is called upon initialization of the object.
+        Read the cpgfunction output dictionary into the borefield class for easy
+        access of information
+        Parameters
+        ----------
+        data: dict
+            A dictionary which is in the output format of cpgfunction.
+        Returns
+        -------
+            a dictionary for input to this object
+        """
+        log_time = data['logtime']
+
+        bore_locations = data[
+            'bore_locations']  # store the bore locations in the object
+        g_values: dict = data['g']  # pull the g-functions into the g_values
+        g_tmp: dict = {}  # a temporary g-function dictionary that might be out of order
+        Ds_tmp: dict = {}  # a temporary burial depth dictionary that may be out of order
+        r_bs_tmp: dict = {}  # the borehole radius dictionary that may be out of order
+        t_tmp: dict = {}
+        for key in g_values:
+            # do the g-function dictionary
+            key_split = key.split('_')
+            # get the current height
+            height = float((key_split[1]))
+            # create a g-function list associated with this height key
+            g_tmp[height] = g_values[key]
+            # create a r_b value associated with this height key
+            r_b = float(key_split[2])
+            r_bs_tmp[height] = r_b
+            try:  # the D value is recently added to the key value for the saved g-functions computed
+                D = float(key_split[3])
+                Ds_tmp[height] = D
+            except:
+                pass
+
+            # do the time dictionary
+            time_arr: list = []
+            for _, lntts in enumerate(log_time):
+                alpha = 1.0e-06
+                t_seconds = height ** 2 / 9 / alpha * np.exp(lntts)
+                t_year = t_seconds / 60 / 24 / 365
+                time_arr.append(t_year)
+            t_tmp[height] = time_arr
+
+        B = float(list(g_values.keys())[0].split('_')[
+                           0])  # every B-spacing should be the same for each file
+
+        keys = sorted(list(g_tmp.keys()), key=int)  # sort the heights in order
+
+        g = {key: g_tmp[key] for key in
+                  keys}  # fill the g-function dictionary with sorted heights
+        try:
+            Ds = {key: Ds_tmp[key] for key in
+                       keys}  # fill the burial depth dictionary with sorted heights
+        except:
+            # if there's no D provided, make it 2
+            Ds = {key: 2. for key in keys}
+        r_bs = {key: r_bs_tmp[key] for key in keys}
+        time = {key: t_tmp[key] for key in
+                     keys}  # fill the time array for yearly points
+
+        geothermal_g_input = {}
+        geothermal_g_input['B'] = B
+        geothermal_g_input['r_b_values'] = r_bs
+        geothermal_g_input['D_values'] = Ds
+        geothermal_g_input['g_lts'] = g
+        geothermal_g_input['log_time'] = log_time
+        geothermal_g_input['bore_locations'] = bore_locations
+
+        return geothermal_g_input
\ No newline at end of file
diff --git a/GHEDT/ground_heat_exchangers.py b/ghedt/ground_heat_exchangers.py
similarity index 99%
rename from GHEDT/ground_heat_exchangers.py
rename to ghedt/ground_heat_exchangers.py
index 2311874..c841759 100644
--- a/GHEDT/ground_heat_exchangers.py
+++ b/ghedt/ground_heat_exchangers.py
@@ -6,8 +6,8 @@
 import gFunctionDatabase.Management.application
 import scipy.interpolate
 import scipy.optimize
-import GHEDT.PLAT as PLAT
-import GHEDT.PLAT.pygfunction as gt
+import ghedt.PLAT as PLAT
+import ghedt.PLAT.pygfunction as gt
 
 import numpy as np
 
diff --git a/ghedt/utilities.py b/ghedt/utilities.py
new file mode 100644
index 0000000..b860ad9
--- /dev/null
+++ b/ghedt/utilities.py
@@ -0,0 +1,10 @@
+# Jack C. Cook
+# Tuesday, October 26, 2021
+
+
+def Eskilson_log_times():
+    log_time = [-8.5, -7.8, -7.2, -6.5, -5.9, -5.2, -4.5, -3.963, -3.27,
+                -2.864, -2.577, -2.171, -1.884,
+                -1.191, -0.497, -0.274, -0.051, 0.196, 0.419,
+                0.642, 0.873, 1.112, 1.335, 1.679, 2.028, 2.275, 3.003]
+    return log_time


Test patch:
diff --git a/.github/workflows/python-tests-linux.yml b/.github/workflows/python-tests-linux.yml
index a473fbe..a12a26e 100644
--- a/.github/workflows/python-tests-linux.yml
+++ b/.github/workflows/python-tests-linux.yml
@@ -20,7 +20,7 @@ jobs:
       - name: Display CWD
         run: python -c "import os; print(os.getcwd())"
       - name: Submodules
-        run: git submodule init && git submodule update
+        run:  git submodule update --init --recursive
       - name: Install dependencies
         run: |
           python -m pip install --upgrade pip
diff --git a/tests/test_GHE.py b/tests/test_GHE.py
index 54ed230..50362ca 100644
--- a/tests/test_GHE.py
+++ b/tests/test_GHE.py
@@ -3,20 +3,20 @@
 
 import unittest
 
-import gFunctionDatabase as gfdb
-import pygfunction as gt
+import ghedt.PLAT.pygfunction as gt
 import pandas as pd
+import ghedt
 
 
 class TestGHE(unittest.TestCase):
 
     def setUp(self) -> None:
-        from GHEDT import PLAT
+        from ghedt import PLAT
         # Borehole dimensions
         # -------------------
         self.H = 100.  # Borehole length (m)
         self.D = 2.  # Borehole buried depth (m)
-        self.r_b = 150. / 1000. / 2.  # Borehole radius
+        self.r_b = 0.075  # Borehole radius]
         self.B = 5.  # Borehole spacing (m)
 
         # Pipe dimensions
@@ -67,8 +67,10 @@ def setUp(self) -> None:
         # Thermal properties
         # ------------------
         # Pipe
-        self.pipe_s = PLAT.media.Pipe(pos_s, r_in, r_out, s, epsilon, k_p, rhoCp_p)
-        self.pipe_d = PLAT.media.Pipe(pos_d, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+        self.pipe_s = \
+            PLAT.media.Pipe(pos_s, r_in, r_out, s, epsilon, k_p, rhoCp_p)
+        self.pipe_d = \
+            PLAT.media.Pipe(pos_d, r_in, r_out, s, epsilon, k_p, rhoCp_p)
         self.pipe_c = \
             PLAT.media.Pipe(pos_c, r_inner, r_outer, s, epsilon, k_p_c, rhoCp_p)
 
@@ -85,40 +87,30 @@ def setUp(self) -> None:
         # Grout
         self.grout = PLAT.media.ThermalProperty(k_g, rhoCp_g)
 
-        # Number in the x and y
-        # ---------------------
-        N = 12
-        M = 13
-        configuration = 'rectangle'
-        nbh = N * M
-
-        # GFunction
-        # ---------
-        # Access the database for specified configuration
-        r = gfdb.Management.retrieval.Retrieve(configuration)
-        # There is just one value returned in the unimodal domain for rectangles
-        r_unimodal = r.retrieve(N, M)
-        key = list(r_unimodal.keys())[0]
-        r_data = r_unimodal[key]
-
-        # Configure the database data for input to the goethermal GFunction
-        # object
-        geothermal_g_input = gfdb.Management. \
-            application.GFunction.configure_database_file_for_usage(r_data)
-
-        # Initialize the GFunction object
-        self.GFunction = \
-            gfdb.Management.application.GFunction(**geothermal_g_input)
+        # Coordinates
+        Nx = 12
+        Ny = 13
+        self.coordinates = ghedt.coordinates.rectangle(Nx, Ny, self.B, self.B)
+
+        # Compute a range of g-functions for interpolation
+        self.log_time = ghedt.utilities.Eskilson_log_times()
+        self.H_values = [24., 48., 96., 192., 384.]
+        self.r_b_values = [self.r_b] * len(self.H_values)
+        self.D_values = [2.] * len(self.H_values)
 
         # Inputs related to fluid
         # -----------------------
-        self.V_flow_system = 31.2 # System volumetric flow rate (L/s)
+        V_flow_borehole = 0.2  # System volumetric flow rate (L/s)
         mixer = 'MEG'  # Ethylene glycol mixed with water
         percent = 0.  # Percentage of ethylene glycol added in
 
         # -----------------------
         # Fluid properties
         self.fluid = gt.media.Fluid(mixer=mixer, percent=percent)
+        self.V_flow_system = V_flow_borehole * float(
+            Nx * Ny)  # System volumetric flow rate (L/s)
+        # Total fluid mass flow rate per borehole (kg/s)
+        self.m_flow_borehole = V_flow_borehole / 1000. * self.fluid.rho
 
         # Simulation start month and end month
         # --------------------------------
@@ -146,54 +138,82 @@ def setUp(self) -> None:
             hourly_extraction[list(hourly_extraction.keys())[0]]
 
     def test_single_u_tube(self):
-        from GHEDT.ground_heat_exchangers import GHE
 
         # Define a borehole
         borehole = gt.boreholes.Borehole(self.H, self.D, self.r_b, x=0., y=0.)
 
-        # Initialize Hybrid GLHE object
-        GHE = GHE(
-            self.V_flow_system, self.B, self.SingleUTube, self.fluid, borehole,
-            self.pipe_s, self.grout, self.soil, self.GFunction, self.sim_params,
-            self.hourly_extraction_ground_loads)
+        # Initialize GHE object
+        g_function = ghedt.gfunction.compute_live_g_function(
+            self.B, self.H_values, self.r_b_values, self.D_values,
+            self.m_flow_borehole, self.SingleUTube,
+            self.log_time, self.coordinates, self.fluid, self.pipe_s,
+            self.grout, self.soil)
+
+        # Initialize the GHE object
+        ghe = ghedt.ground_heat_exchangers.GHE(
+            self.V_flow_system, self.B, self.SingleUTube, self.fluid,
+            borehole, self.pipe_s, self.grout, self.soil,
+            g_function, self.sim_params, self.hourly_extraction_ground_loads)
 
-        max_HP_EFT, min_HP_EFT = GHE.simulate(method='Hybrid')
+        max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
 
-        self.assertEqual(38.7730129823955, max_HP_EFT)
-        self.assertEqual(16.660969488710354, min_HP_EFT)
+        self.assertEqual(39.084419566119934, max_HP_EFT)
+        self.assertEqual(16.660966674440232, min_HP_EFT)
 
-        GHE.size()
+        ghe.size(method='hybrid')
 
-        self.assertAlmostEqual(GHE.bhe.b.H, 126.85677082230617, places=4)
+        self.assertAlmostEqual(ghe.bhe.b.H, 130.13510780396268, places=2)
 
     def test_double_u_tube(self):
-        from GHEDT.ground_heat_exchangers import GHE
 
         # Define a borehole
         borehole = gt.boreholes.Borehole(self.H, self.D, self.r_b, x=0., y=0.)
 
-        # Initialize Hybrid GLHE object
-        GHE = GHE(
-            self.V_flow_system, self.B, self.DoubleUTube, self.fluid, borehole,
-            self.pipe_d, self.grout, self.soil, self.GFunction, self.sim_params,
-            self.hourly_extraction_ground_loads)
+        # Initialize GHE object
+        g_function = ghedt.gfunction.compute_live_g_function(
+            self.B, self.H_values, self.r_b_values, self.D_values,
+            self.m_flow_borehole, self.DoubleUTube,
+            self.log_time, self.coordinates, self.fluid, self.pipe_d,
+            self.grout, self.soil)
+
+        # Initialize the GHE object
+        ghe = ghedt.ground_heat_exchangers.GHE(
+            self.V_flow_system, self.B, self.DoubleUTube, self.fluid,
+            borehole, self.pipe_d, self.grout, self.soil,
+            g_function, self.sim_params, self.hourly_extraction_ground_loads)
+
+        max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
 
-        GHE.size()
+        self.assertEqual(37.97229212228275, max_HP_EFT)
+        self.assertEqual(16.989189768401793, min_HP_EFT)
 
-        self.assertAlmostEqual(GHE.bhe.b.H, 120.37362456661276, places=4)
+        ghe.size(method='hybrid')
+
+        self.assertAlmostEqual(ghe.bhe.b.H, 121.85659366084005, places=2)
 
     def test_coaxial_tube(self):
-        from GHEDT.ground_heat_exchangers import GHE
 
         # Define a borehole
         borehole = gt.boreholes.Borehole(self.H, self.D, self.r_b, x=0., y=0.)
 
-        # Initialize Hybrid GLHE object
-        GHE = GHE(
-            self.V_flow_system, self.B, self.CoaxialTube, self.fluid, borehole,
-            self.pipe_c, self.grout, self.soil, self.GFunction, self.sim_params,
-            self.hourly_extraction_ground_loads)
+        # Initialize GHE object
+        g_function = ghedt.gfunction.compute_live_g_function(
+            self.B, self.H_values, self.r_b_values, self.D_values,
+            self.m_flow_borehole, self.CoaxialTube,
+            self.log_time, self.coordinates, self.fluid, self.pipe_c,
+            self.grout, self.soil)
+
+        # Re-Initialize the GHE object
+        ghe = ghedt.ground_heat_exchangers.GHE(
+            self.V_flow_system, self.B, self.CoaxialTube, self.fluid,
+            borehole, self.pipe_c, self.grout, self.soil,
+            g_function, self.sim_params, self.hourly_extraction_ground_loads)
+
+        max_HP_EFT, min_HP_EFT = ghe.simulate(method='hybrid')
+
+        self.assertEqual(37.73503652828782, max_HP_EFT)
+        self.assertEqual(17.61422171583412, min_HP_EFT)
 
-        GHE.size()
+        ghe.size(method='hybrid')
 
-        self.assertAlmostEqual(GHE.bhe.b.H, 119.57422578754375, places=4)
+        self.assertAlmostEqual(ghe.bhe.b.H, 120.89971616555863, places=2)