Skip to content

Possible inconsistency on radial distance of inclined finite line sources #330

@metab0t

Description

@metab0t

As mentioned in #50, the radial distance between inclined FLS is difficult to evaluate because they also depend on the depth.

I notice that the work of Lazzarotto (A methodology for the calculation of response functions for geothermal fields with arbitrarily oriented boreholes - Part I) does not mention the special case when the radial distance between heads of two inclined FLS are smaller than the radius of borehole: $\Delta x^2 + \Delta y^2 \leq r_b^2$.

In pygfunction, the radial distance is clamped to $r_b$ when it is too small for both vertical and inclined FLS.

The problem is that this will introduce inconsistency for two exactly same FLS when they are tilted.

Here we consider two short adjacent FLS.
When they are vertical, their radial distance is fixed to $r_b$ because $\Delta x = \Delta y = 0$.
If they are rotated a big angle, $\Delta x^2 + \Delta y^2 > r_b^2$ holds and $r_b$ will not impact their coupling factors.

Now it gives unrealistic result where the coupling between two FLS depends on their titled angles.

This is the small example to reproduce:

import numpy as np
import matplotlib.pyplot as plt

import pygfunction as gt

time = 86400.0 * 30
alpha = 1e-6

rb = np.array([0.1])

x = np.array([0.0])
y = np.array([0.0])

D = np.array([5.0])
H = np.array([0.5])

orientation = np.radians([0.0])

tilts = np.radians(np.linspace(0.0, 90.0, 90)).tolist()

inclined_factors = np.empty((len(tilts),))

for i, tilt in enumerate(tilts):
    x1 = x
    y1 = y
    D1 = D
    H1 = H

    x2 = x1 + H * np.sin(tilt)
    y2 = y1
    D2 = D1 + H * np.cos(tilt)
    H2 = H
    inclined_factors[i] = gt.heat_transfer.finite_line_source_inclined_vectorized(
        time,
        alpha,
        rb,
        x1,
        y1,
        H1,
        D1,
        tilt,
        orientation,
        x2,
        y2,
        H2,
        D2,
        tilt,
        orientation,
        reaSource=True,
        imgSource=False,
        approximation=False,
    )

fig, ax = plt.subplots(figsize=(5,3))

ax.plot(np.degrees(tilts), inclined_factors)

ax.set_xlabel('Tilt Angle (degrees)')
ax.set_ylabel('Heat Transfer')
ax.set_title('Heat Transfer for Different Tilt Angles')

The result:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions