Hantush type curves

Type curve, Hantush's well function

Hantush's well function involves leakage from an overlying layer. The leakage is parameterized by the characteristic length, with the simbol $\lambda$

$$ \lambda = \sqrt{ kD c}$$

where $c$ [dimentions time] is the vertical resistance of the overlying aquitard. It can also be expressed as $c = b/k_v$ with $b$ the thickness of the overlying aquitard and $k_v$ its averaged vertical conductivity.

with $\rho = r/\lambda$, Hantush's well function is given by

$$ W_h(u, \rho) = \intop_u^\infty \frac {e^{-y - \frac{ \left( \frac {\rho} 2 \right)^2} {y}}} {y} dy $$

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sp


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
~/anaconda3/lib/python3.6/site-packages/numpy/core/__init__.py in <module>
     16 try:
---> 17     from . import multiarray
     18 except ImportError as exc:

~/anaconda3/lib/python3.6/site-packages/numpy/core/multiarray.py in <module>
     13 
---> 14 from . import overrides
     15 from . import _multiarray_umath

~/anaconda3/lib/python3.6/site-packages/numpy/core/overrides.py in <module>
      6 
----> 7 from numpy.core._multiarray_umath import (
      8     add_docstring, implement_array_function, _get_implementing_args)

ImportError: dlopen(/Users/Theo/anaconda3/lib/python3.6/site-packages/numpy/core/_multiarray_umath.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libopenblas.dylib
  Referenced from: /Users/Theo/anaconda3/lib/python3.6/site-packages/numpy/core/_multiarray_umath.cpython-36m-darwin.so
  Reason: image not found

During handling of the above exception, another exception occurred:

ImportError                               Traceback (most recent call last)
<ipython-input-1-b8725310f2d6> in <module>
----> 1 import numpy as np
      2 import matplotlib.pyplot as plt
      3 import scipy.special as sp

~/anaconda3/lib/python3.6/site-packages/numpy/__init__.py in <module>
    140     from . import _distributor_init
    141 
--> 142     from . import core
    143     from .core import *
    144     from . import compat

~/anaconda3/lib/python3.6/site-packages/numpy/core/__init__.py in <module>
     45 """ % (sys.version_info[0], sys.version_info[1], sys.executable,
     46         __version__, exc)
---> 47     raise ImportError(msg)
     48 finally:
     49     for envkey in env_added:

ImportError: 

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy c-extensions failed.
- Try uninstalling and reinstalling numpy.
- If you have already done that, then:
  1. Check that you expected to use Python3.6 from "/Users/Theo/anaconda3/bin/python",
     and that you have no directories in your PATH or PYTHONPATH that can
     interfere with the Python and numpy version "1.17.4" you're trying to use.
  2. If (1) looks fine, you can open a new issue at
     https://github.com/numpy/numpy/issues.  Please include details on:
     - how you installed Python
     - how you installed numpy
     - your operating system
     - whether or not you have multiple versions of Python installed
     - if you built from source, your compiler versions and ideally a build log

- If you're working with a numpy git repository, try `git clean -xdf`
  (removes all files not under version control) and rebuild numpy.

Note: this error has many possible causes, so please don't comment on
an existing issue about this - open a new one instead.

Original error was: dlopen(/Users/Theo/anaconda3/lib/python3.6/site-packages/numpy/core/_multiarray_umath.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libopenblas.dylib
  Referenced from: /Users/Theo/anaconda3/lib/python3.6/site-packages/numpy/core/_multiarray_umath.cpython-36m-darwin.so
  Reason: image not found

Compute Hantush's well function by integration


In [17]:
def Wh(u, rho):
    '''Hantush's well function (with leakage)
    parameters
    ----------
    u : array of floats
    rho : float
    returns
    -------
    Wh : array like u with Hantush's well function values
    2018-01-12
    '''
    
    if np.isscalar(u): # u is a scalar?
        u = np.asarray([u]) # if so, turn it into an array

    w = np.zeros_like(u) # outcome array, initially all zeros
    
    for i, uu in enumerate(u):  # loop ver all values of u array
        y    = np.logspace(np.log10(uu), 8, 201)
        ym   = 0.5 * (y[:-1] + y[1:]) # y of midpoints
        arg  = np.exp(-ym - (rho/2)**2 /ym) / ym # arg at midpoints
        dy   = np.diff(y)       # same as y[1:] - y[:-1]
        w[i] = np.sum(arg * dy) # integration
    
    if len(u) == 1: # u was a scalar?
        return w[0] # then return first value of array w
    else:           # otherwise
        return w    # return the entire array of values

With Wh(u, rho) in place, we can now plot the Hantush type curves, i.e. the graphs of Wh(u, rho) versus 1/u for different values of rho.


In [23]:
u = np.logspace(-6, 1) # suitable range for values of u
Rho = [0.0, 0.01, 0.03, 0.1, 0.3, 1, 3 ] # some values of rho

# notice that for rho=0, W_Hantush = W_Theis

for rho in Rho: # for each rho plot one line
    plt.plot(1/u, Wh(u, rho), label='rho={:.2f}'.format(rho))

# embellishment of plot
plt.title('Hantush type curves')
plt.xlabel('1/u')
plt.ylabel('Wh(u)')
plt.xscale('log')   # x axis on log scale
plt.yscale('log')   # y axis on log scale
plt.legend()
plt.grid()
plt.show() # show it


Example, drawdown for a concrete case, using Wh(u, rho)


In [35]:
kD   = 500 # m2/d
S    = 0.2 # [-]
c    = 600 # d
t    = 1.2 # d
r    = 25. # m
Q    = 1200 # m3/d
lamb = np.sqrt(kD * c)
u    = r**2 * S / (4 * kD * t)
rho  = r/lamb

s    = Q/(4 * np.pi * kD) * Wh(u, rho)

print('Drawdown at r={} m and t={} d equals s={:.2f} m'.format(r, t, s[0]))


Drawdown at r=25.0 m and t=1.2 d equals s=0.46 m