Heat Transfer Module

pygfunction.heat_transfer.finite_line_source(time, alpha, borehole1, borehole2, reaSource=True, imgSource=True, approximation=False, M=11, N=10)

Evaluate the Finite Line Source (FLS) solution.

This function uses a numerical quadrature to evaluate the one-integral form of the FLS solution. For vertical boreholes, the FLS solution was proposed by Claesson and Javed 1 and extended to boreholes with different vertical positions by Cimmino and Bernier 2. The FLS solution is given by:

\[ \begin{align}\begin{aligned}h_{1\rightarrow2}(t) &= \frac{1}{2H_2} \int_{\frac{1}{\sqrt{4\alpha t}}}^{\infty} e^{-d_{12}^2s^2}(I_{real}(s)+I_{imag}(s))ds\\d_{12} &= \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}\\I_{real}(s) &= erfint((D_2-D_1+H_2)s) - erfint((D_2-D_1)s)\\&+ erfint((D_2-D_1-H_1)s) - erfint((D_2-D_1+H_2-H_1)s)\\I_{imag}(s) &= erfint((D_2+D_1+H_2)s) - erfint((D_2+D_1)s)\\&+ erfint((D_2+D_1+H_1)s) - erfint((D_2+D_1+H_2+H_1)s)\\erfint(X) &= \int_{0}^{X} erf(x) dx\\ &= Xerf(X) - \frac{1}{\sqrt{\pi}}(1-e^{-X^2})\end{aligned}\end{align} \]

For inclined boreholes, the FLS solution was proposed by Lazzarotto 4 and Lazzarotto and Björk 5. The FLS solution is given by:

\[ \begin{align}\begin{aligned}h_{1\rightarrow2}(t) &= \frac{H_1}{2H_2} \int_{\frac{1}{\sqrt{4\alpha t}}}^{\infty} \frac{1}{s} \int_{0}^{1} (I_{real}(u, s)+I_{imag}(u, s)) du ds\\I_{real}(u, s) &= e^{-((x_1 - x_2)^2 + (y_1 - y_2)^2 + (D_1 - D_2)^2) s^2}\\&\cdot (erf((u H_1 k_{0,real} + k_{2,real}) s) - erf((u H_1 k_{0,real} + k_{2,real} - H_2) s))\\&\cdot e^{(u^2 H_1^2 (k_{0,real}^2 - 1) + 2 u H_1 (k_{0,real} k_{2,real} - k_{1,real}) + k_{2,real}^2) s^2} du ds\\I_{imag}(u, s) &= -e^{-((x_1 - x_2)^2 + (y_1 - y_2)^2 + (D_1 + D_2)^2) s^2}\\&\cdot (erf((u H_1 k_{0,imag} + k_{2,imag}) s) - erf((u H_1 k_{0,imag} + k_{2,imag} - H_2) s))\\&\cdot e^{(u^2 H_1^2 (k_{0,imag}^2 - 1) + 2 u H_1 (k_{0,imag} k_{2,imag} - k_1) + k_{2,imag}^2) s^2} du ds\\k_{0,real} &= sin(\beta_1) sin(\beta_2) cos(\theta_1 - \theta_2) + cos(\beta_1) cos(\beta_2)\\k_{0,imag} &= sin(\beta_1) sin(\beta_2) cos(\theta_1 - \theta_2) - cos(\beta_1) cos(\beta_2)\\k_{1,real} &= sin(\beta_1) (cos(\theta_1) (x_1 - x_2) + sin(\theta_1) (y_1 - y_2)) + cos(\beta_1) (D_1 - D_2)\\k_{1,imag} &= sin(\beta_1) (cos(\theta_1) (x_1 - x_2) + sin(\theta_1) (y_1 - y_2)) + cos(\beta_1) (D_1 + D_2)\\k_{2,real} &= sin(\beta_2) (cos(\theta_2) (x_1 - x_2) + sin(\theta_2) (y_1 - y_2)) + cos(\beta_2) (D_1 - D_2)\\k_{2,imag} &= sin(\beta_2) (cos(\theta_2) (x_1 - x_2) + sin(\theta_2) (y_1 - y_2)) - cos(\beta_2) (D_1 + D_2)\end{aligned}\end{align} \]

where \(\beta_1\) and \(\beta_2\) are the tilt angle of the boreholes (relative to vertical), and \(\theta_1\) and \(\theta_2\) are the orientation of the boreholes (relative to the x-axis).

Note

The reciprocal thermal response factor \(h_{2\rightarrow1}(t)\) can be conveniently calculated by:

\[h_{2\rightarrow1}(t) = \frac{H_2}{H_1} h_{1\rightarrow2}(t)\]
Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

borehole1Borehole object or list of Borehole objects, length (N)

Borehole object of the borehole extracting heat.

borehole2Borehole object or list of Borehole objects, length (M)

Borehole object for which the FLS is evaluated.

reaSourcebool

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool, optional

True if the image part of the FLS solution is to be included. Default is True.

approximationbool, optional

Set to true to use the approximation of the FLS solution of Cimmino (2021) 3. This approximation does not require the numerical evaluation of any integral. Default is False.

Mint, optional

Number of Gauss-Legendre sample points for the quadrature over \(u\). This is only used for inclined boreholes. Default is 11.

Nint, optional

Number of terms in the approximation of the FLS solution. This parameter is unused if approximation is set to False. Default is 10. Maximum is 25.

Returns
hfloat or array, shape (M, N, K), (M, N) or (K)

Value of the FLS solution. The average (over the length) temperature drop on the wall of borehole2 due to heat extracted from borehole1 is:

\[\Delta T_{b,2} = T_g - \frac{Q_1}{2\pi k_s H_2} h\]

Notes

The function returns a float if time is a float and borehole1 and borehole2 are Borehole objects. If time is a float and any of borehole1 and borehole2 are lists, the function returns an array, shape (M, N), If time is an array and borehole1 and borehole2 are Borehole objects, the function returns an array, shape (K).If time is an array and any of borehole1 and borehole2 are are lists, the function returns an array, shape (M, N, K).

References

1

Claesson, J., & Javed, S. (2011). An analytical method to calculate borehole fluid temperatures for time-scales from minutes to decades. ASHRAE Transactions, 117(2), 279-288.

2

Cimmino, M., & Bernier, M. (2014). A semi-analytical method to generate g-functions for geothermal bore fields. International Journal of Heat and Mass Transfer, 70, 641-650.

3

Cimmino, M. (2021). An approximation of the finite line source solution to model thermal interactions between geothermal boreholes. International Communications in Heat and Mass Transfer, 127, 105496.

4

Lazzarotto, A. (2016). A methodology for the calculation of response functions for geothermal fields with arbitrarily oriented boreholes – Part 1, Renewable Energy, 86, 1380-1393.

5

Lazzarotto, A., & Björk, F. (2016). A methodology for the calculation of response functions for geothermal fields with arbitrarily oriented boreholes – Part 2, Renewable Energy, 86, 1353-1361.

Examples

>>> b1 = gt.boreholes.Borehole(H=150., D=4., r_b=0.075, x=0., y=0.)
>>> b2 = gt.boreholes.Borehole(H=150., D=4., r_b=0.075, x=5., y=0.)
>>> h = gt.heat_transfer.finite_line_source(4*168*3600., 1.0e-6, b1, b2)
h = 0.0110473635393
>>> h = gt.heat_transfer.finite_line_source(
    4*168*3600., 1.0e-6, b1, b2, approximation=True, N=10)
h = 0.0110474667731
>>> b3 = gt.boreholes.Borehole(
    H=150., D=4., r_b=0.075, x=5., y=0., tilt=3.1415/15, orientation=0.)
>>> h = gt.heat_transfer.finite_line_source(
    4*168*3600., 1.0e-6, b1, b3, M=21)
h = 0.0002017450051
pygfunction.heat_transfer.finite_line_source_approximation(time, alpha, dis, H1, D1, H2, D2, reaSource=True, imgSource=True, N=10)

Evaluate the Finite Line Source (FLS) solution using the approximation of Cimmino (2021) 6.

Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

disfloat or array

Radial distances to evaluate the FLS solution.

H1float or array

Lengths of the emitting heat sources.

D1float or array

Buried depths of the emitting heat sources.

H2float or array

Lengths of the receiving heat sources.

D2float or array

Buried depths of the receiving heat sources.

reaSourcebool, optional

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool, optional

True if the image part of the FLS solution is to be included. Default is True.

Nint, optional

Number of terms in the approximation of the FLS solution. This parameter is unused if approximation is set to False. Default is 10. Maximum is 25.

Returns
hfloat

Value of the FLS solution. The average (over the length) temperature drop on the wall of borehole2 due to heat extracted from borehole1 is:

\[\Delta T_{b,2} = T_g - \frac{Q_1}{2\pi k_s H_2} h\]

References

6

Cimmino, M. (2021). An approximation of the finite line source solution to model thermal interactions between geothermal boreholes. International Communications in Heat and Mass Transfer, 127, 105496.

pygfunction.heat_transfer.finite_line_source_equivalent_boreholes_vectorized(time, alpha, dis, wDis, H1, D1, H2, D2, N2, reaSource=True, imgSource=True)

Evaluate the equivalent Finite Line Source (FLS) solution.

This function uses a numerical quadrature to evaluate the one-integral form of the FLS solution, as proposed by Prieto and Cimmino 7. The equivalent FLS solution is given by:

\[ \begin{align}\begin{aligned}h_{1\rightarrow2}(t) &= \frac{1}{2 H_2 N_{b,2}} \int_{\frac{1}{\sqrt{4\alpha t}}}^{\infty} \sum_{G_1} \sum_{G_2} e^{-d_{12}^2s^2}(I_{real}(s)+I_{imag}(s))ds\\I_{real}(s) &= erfint((D_2-D_1+H_2)s) - erfint((D_2-D_1)s)\\&+ erfint((D_2-D_1-H_1)s) - erfint((D_2-D_1+H_2-H_1)s)\\I_{imag}(s) &= erfint((D_2+D_1+H_2)s) - erfint((D_2+D_1)s)\\&+ erfint((D_2+D_1+H_1)s) - erfint((D_2+D_1+H_2+H_1)s)\\erfint(X) &= \int_{0}^{X} erf(x) dx\\ &= Xerf(X) - \frac{1}{\sqrt{\pi}}(1-e^{-X^2})\end{aligned}\end{align} \]

Note

The reciprocal thermal response factor \(h_{2\rightarrow1}(t)\) can be conveniently calculated by:

\[h_{2\rightarrow1}(t) = \frac{H_2 N_{b,2}}{H_1 N_{b,1}} h_{1\rightarrow2}(t)\]
Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

disarray

Unique radial distances to evaluate the FLS solution.

wDisarray

Number of instances of each unique radial distances.

H1float or array

Lengths of the emitting heat sources.

D1float or array

Buried depths of the emitting heat sources.

H2float or array

Lengths of the receiving heat sources.

D2float or array

Buried depths of the receiving heat sources.

N2float or array,

Number of segments represented by the receiving heat sources.

reaSourcebool

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool

True if the image part of the FLS solution is to be included. Default is True.

Returns
hfloat

Value of the FLS solution. The average (over the length) temperature drop on the wall of borehole2 due to heat extracted from borehole1 is:

\[\Delta T_{b,2} = T_g - \frac{Q_1}{2\pi k_s H_2} h\]

Notes

This is a vectorized version of the finite_line_source() function using scipy.integrate.quad_vec to speed up calculations. All arrays (dis, H1, D1, H2, D2) must follow numpy array broadcasting rules. If time is an array, the integrals for different time values are stacked on the last axis.

References

7

Prieto, C., & Cimmino, M. (2021). Thermal interactions in large irregular fields of geothermal boreholes: the method of equivalent borehole. Journal of Building Performance Simulation, 14 (4), 446-460.

pygfunction.heat_transfer.finite_line_source_inclined_approximation(time, alpha, rb1, x1, y1, H1, D1, tilt1, orientation1, x2, y2, H2, D2, tilt2, orientation2, reaSource=True, imgSource=True, M=11, N=10)

Evaluate the inclined Finite Line Source (FLS) solution using the approximation method of Cimmino (2021) 8.

Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

rb1array

Radii of the emitting heat sources.

x1float or array

x-Positions of the emitting heat sources.

y1float or array

y-Positions of the emitting heat sources.

H1float or array

Lengths of the emitting heat sources.

D1float or array

Buried depths of the emitting heat sources.

tilt1float or array

Angles (in radians) from vertical of the emitting heat sources.

orientation1float or array

Directions (in radians) of the tilt the emitting heat sources.

x2array

x-Positions of the receiving heat sources.

y2array

y-Positions of the receiving heat sources.

H2float or array

Lengths of the receiving heat sources.

D2float or array

Buried depths of the receiving heat sources.

tilt2float or array

Angles (in radians) from vertical of the receiving heat sources.

orientation2float or array

Directions (in radians) of the tilt the receiving heat sources.

reaSourcebool, optional

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool, optional

True if the image part of the FLS solution is to be included. Default is true.

Mint, optional

Number of points for the Gauss-Legendre quadrature rule along the receiving heat sources. Default is 21.

Nint, optional

Number of terms in the approximation of the FLS solution. Default is 10. Maximum is 25.

Returns
hfloat

Value of the FLS solution. The average (over the length) temperature drop on the wall of borehole2 due to heat extracted from borehole1 is:

\[\Delta T_{b,2} = T_g - \frac{Q_1}{2\pi k_s H_2} h\]

References

8

Cimmino, M. (2021). An approximation of the finite line source solution to model thermal interactions between geothermal boreholes. International Communications in Heat and Mass Transfer, 127, 105496.

pygfunction.heat_transfer.finite_line_source_inclined_vectorized(time, alpha, rb1, x1, y1, H1, D1, tilt1, orientation1, x2, y2, H2, D2, tilt2, orientation2, reaSource=True, imgSource=True, M=11, approximation=False, N=10)

Evaluate the inclined Finite Line Source (FLS) solution.

This function uses a numerical quadrature to evaluate the inclined FLS solution, as proposed by Lazzarotto 9. The inclined FLS solution is given by:

\[ \begin{align}\begin{aligned}h_{1\rightarrow2}(t) &= \frac{H_1}{2H_2} \int_{\frac{1}{\sqrt{4\alpha t}}}^{\infty} \frac{1}{s} \int_{0}^{1} (I_{real}(u, s)+I_{imag}(u, s)) du ds\\I_{real}(u, s) &= e^{-((x_1 - x_2)^2 + (y_1 - y_2)^2 + (D_1 - D_2)^2) s^2}\\&\cdot (erf((u H_1 k_{0,real} + k_{2,real}) s) - erf((u H_1 k_{0,real} + k_{2,real} - H_2) s))\\&\cdot e^{(u^2 H_1^2 (k_{0,real}^2 - 1) + 2 u H_1 (k_{0,real} k_{2,real} - k_{1,real}) + k_{2,real}^2) s^2} du ds\\I_{imag}(u, s) &= -e^{-((x_1 - x_2)^2 + (y_1 - y_2)^2 + (D_1 + D_2)^2) s^2}\\&\cdot (erf((u H_1 k_{0,imag} + k_{2,imag}) s) - erf((u H_1 k_{0,imag} + k_{2,imag} - H_2) s))\\&\cdot e^{(u^2 H_1^2 (k_{0,imag}^2 - 1) + 2 u H_1 (k_{0,imag} k_{2,imag} - k_1) + k_{2,imag}^2) s^2} du ds\\k_{0,real} &= sin(\beta_1) sin(\beta_2) cos(\theta_1 - \theta_2) + cos(\beta_1) cos(\beta_2)\\k_{0,imag} &= sin(\beta_1) sin(\beta_2) cos(\theta_1 - \theta_2) - cos(\beta_1) cos(\beta_2)\\k_{1,real} &= sin(\beta_1) (cos(\theta_1) (x_1 - x_2) + sin(\theta_1) (y_1 - y_2)) + cos(\beta_1) (D_1 - D_2)\\k_{1,imag} &= sin(\beta_1) (cos(\theta_1) (x_1 - x_2) + sin(\theta_1) (y_1 - y_2)) + cos(\beta_1) (D_1 + D_2)\\k_{2,real} &= sin(\beta_2) (cos(\theta_2) (x_1 - x_2) + sin(\theta_2) (y_1 - y_2)) + cos(\beta_2) (D_1 - D_2)\\k_{2,imag} &= sin(\beta_2) (cos(\theta_2) (x_1 - x_2) + sin(\theta_2) (y_1 - y_2)) - cos(\beta_2) (D_1 + D_2)\end{aligned}\end{align} \]

where \(\beta_1\) and \(\beta_2\) are the tilt angle of the boreholes (relative to vertical), and \(\theta_1\) and \(\theta_2\) are the orientation of the boreholes (relative to the x-axis).

Note

The reciprocal thermal response factor \(h_{2\rightarrow1}(t)\) can be conveniently calculated by:

\[h_{2\rightarrow1}(t) = \frac{H_2}{H_1} h_{1\rightarrow2}(t)\]
Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

rb1array

Radii of the emitting heat sources.

x1float or array

x-Positions of the emitting heat sources.

y1float or array

y-Positions of the emitting heat sources.

H1float or array

Lengths of the emitting heat sources.

D1float or array

Buried depths of the emitting heat sources.

tilt1float or array

Angles (in radians) from vertical of the emitting heat sources.

orientation1float or array

Directions (in radians) of the tilt the emitting heat sources.

x2array

x-Positions of the receiving heat sources.

y2array

y-Positions of the receiving heat sources.

H2float or array

Lengths of the receiving heat sources.

D2float or array

Buried depths of the receiving heat sources.

tilt2float or array

Angles (in radians) from vertical of the receiving heat sources.

orientation2float or array

Directions (in radians) of the tilt the receiving heat sources.

reaSourcebool, optional

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool, optional

True if the image part of the FLS solution is to be included. Default is true.

Mint, optional

Number of points for the Gauss-Legendre quadrature rule along the receiving heat sources. Default is 21.

approximationbool, optional

Set to true to use the approximation of the FLS solution of Cimmino (2021) 12. This approximation does not require the numerical evaluation of any integral. Default is False.

Nint, optional

Number of terms in the approximation of the FLS solution. This parameter is unused if approximation is set to False. Default is 10. Maximum is 25.

Returns
fcallable

Integrand of the finite line source solution. Can be vector-valued.

Notes

This is a vectorized version of the finite_line_source() function using scipy.integrate.quad_vec to speed up calculations. All arrays (x1, y1, H1, D1, tilt1, orientation1, x2, y2, H2, D2, tilt2, orientation2) must follow numpy array broadcasting rules.

References

9

Lazzarotto, A. (2016). A methodology for the calculation of response functions for geothermal fields with arbitrarily oriented boreholes – Part 1, Renewable Energy, 86, 1380-1393.

pygfunction.heat_transfer.finite_line_source_vectorized(time, alpha, dis, H1, D1, H2, D2, reaSource=True, imgSource=True, approximation=False, N=10)

Evaluate the Finite Line Source (FLS) solution.

This function uses a numerical quadrature to evaluate the one-integral form of the FLS solution, as proposed by Claesson and Javed 10 and extended to boreholes with different vertical positions by Cimmino and Bernier 11. The FLS solution is given by:

\[ \begin{align}\begin{aligned}h_{1\rightarrow2}(t) &= \frac{1}{2H_2} \int_{\frac{1}{\sqrt{4\alpha t}}}^{\infty} e^{-d_{12}^2s^2}(I_{real}(s)+I_{imag}(s))ds\\I_{real}(s) &= erfint((D_2-D_1+H_2)s) - erfint((D_2-D_1)s)\\&+ erfint((D_2-D_1-H_1)s) - erfint((D_2-D_1+H_2-H_1)s)\\I_{imag}(s) &= erfint((D_2+D_1+H_2)s) - erfint((D_2+D_1)s)\\&+ erfint((D_2+D_1+H_1)s) - erfint((D_2+D_1+H_2+H_1)s)\\erfint(X) &= \int_{0}^{X} erf(x) dx\\ &= Xerf(X) - \frac{1}{\sqrt{\pi}}(1-e^{-X^2})\end{aligned}\end{align} \]

Note

The reciprocal thermal response factor \(h_{2\rightarrow1}(t)\) can be conveniently calculated by:

\[h_{2\rightarrow1}(t) = \frac{H_2}{H_1} h_{1\rightarrow2}(t)\]
Parameters
timefloat or array, shape (K)

Value of time (in seconds) for which the FLS solution is evaluated.

alphafloat

Soil thermal diffusivity (in m2/s).

disfloat or array

Radial distances to evaluate the FLS solution.

H1float or array

Lengths of the emitting heat sources.

D1float or array

Buried depths of the emitting heat sources.

H2float or array

Lengths of the receiving heat sources.

D2float or array

Buried depths of the receiving heat sources.

reaSourcebool

True if the real part of the FLS solution is to be included. Default is True.

imgSourcebool

True if the image part of the FLS solution is to be included. Default is True.

approximationbool, optional

Set to true to use the approximation of the FLS solution of Cimmino (2021) 12. This approximation does not require the numerical evaluation of any integral. Default is False.

Nint, optional

Number of terms in the approximation of the FLS solution. This parameter is unused if approximation is set to False. Default is 10. Maximum is 25.

Returns
hfloat

Value of the FLS solution. The average (over the length) temperature drop on the wall of borehole2 due to heat extracted from borehole1 is:

\[\Delta T_{b,2} = T_g - \frac{Q_1}{2\pi k_s H_2} h\]

Notes

This is a vectorized version of the finite_line_source() function using scipy.integrate.quad_vec to speed up calculations. All arrays (dis, H1, D1, H2, D2) must follow numpy array broadcasting rules. If time is an array, the integrals for different time values are stacked on the last axis.

References

10

Claesson, J., & Javed, S. (2011). An analytical method to calculate borehole fluid temperatures for time-scales from minutes to decades. ASHRAE Transactions, 117(2), 279-288.

11

Cimmino, M., & Bernier, M. (2014). A semi-analytical method to generate g-functions for geothermal bore fields. International Journal of Heat and Mass Transfer, 70, 641-650.

12(1,2)

Cimmino, M. (2021). An approximation of the finite line source solution to model thermal interactions between geothermal boreholes. International Communications in Heat and Mass Transfer, 127, 105496.