ttim.well#

Classes#

WellBase

Well Base Class.

DischargeWell

Well with a specified discharge for each layer that the well is screened in.

Well

Create a well with a specified discharge.

HeadWell

Create a well with a specified head inside the well.

WellTest

Well Base Class.

Module Contents#

class ttim.well.WellBase(model, xw=0, yw=0, rw=0.1, tsandbc=[(0, 1)], res=0, layers=0, type='', name='WellBase', label=None)[source]#

Bases: ttim.element.Element

Well Base Class.

All Well elements are derived from this class

nparam#
xw#
yw#
rw#
res#
__repr__()[source]#
initialize()[source]#

Initialize the element.

Initialization of terms that cannot be initialized before other elements or the aquifer is defined.

As we don’t want to require a certain order of entering elements, these terms are initialized when Model.solve is called The initialization class needs to be overloaded by all derived classes

setflowcoef()[source]#

Separate function so that this can be overloaded for other types.

potinf(x, y, aq=None)[source]#

Can be called with only one x,y value.

potinfone(x, y, jtime, aq=None)[source]#

Can be called with only one x,y value for time interval jtime.

disvecinf(x, y, aq=None)[source]#

Can be called with only one x,y value.

headinside(t, derivative=0)[source]#

Returns head inside the well for the layers that the well is screened in.

Parameters:

t (float, list or array) – time for which head is computed

Returns:

Q – nsreens is the number of layers with a well screen

Return type:

array of size nscreens, ntimes

plot(ax=None)[source]#

Plot the element.

changetrace(xyzt1, xyzt2, aq, layer, ltype, modellayer, direction, hstepmax)[source]#
class ttim.well.DischargeWell(model, xw=0, yw=0, tsandQ=[(0, 1)], rw=0.1, res=0, layers=0, label=None)[source]#

Bases: WellBase

Well with a specified discharge for each layer that the well is screened in.

This is not very common and is likely only used for testing and comparison with other codes. The discharge must be specified for each screened layer. The resistance of the screen may be specified. The head is computed such that the discharge \(Q_i\) in layer \(i\) is computed as

\[Q_i = 2\pi r_wH_i(h_i - h_w)/c\]

where \(c\) is the resistance of the well screen and \(h_w\) is the head inside the well.

Parameters:
  • model (Model object) – model to which the element is added

  • xw (float) – x-coordinate of the well

  • yw (float) – y-coordinate of the well

  • tsandQ (list of tuples) – tuples of starting time and discharge after starting time

  • rw (float) – radius of the well

  • res (float) – resistance of the well screen

  • layers (int, array or list) – layer (int) or layers (list or array) where well is screened

  • label (string or None (default: None)) – label of the well

Examples

Example of a well that pumps with a discharge of 100 between times 10 and 50, with a discharge of 20 between times 50 and 200, and zero discharge after time 200.

>>> Well(ml, tsandQ=[(10, 100), (50, 20), (200, 0)])
class ttim.well.Well(model, xw=0, yw=0, rw=0.1, tsandQ=[(0, 1)], res=0, rc=None, layers=0, wbstype='pumping', label=None)[source]#

Bases: WellBase, ttim.equation.WellBoreStorageEquation

Create a well with a specified discharge.

The well may be screened in multiple layers. The discharge is distributed across the layers such that the head inside the well is the same in all screened layers. Wellbore storage and skin effect may be taken into account. The head is computed such that the discharge \(Q_i\) in layer \(i\) is computed as

\[Q_i = 2\pi r_wH_i(h_i - h_w)/c\]

where \(c\) is the resistance of the well screen and \(h_w\) is the head inside the well.

Parameters:
  • model (Model object) – model to which the element is added

  • xw (float) – x-coordinate of the well

  • yw (float) – y-coordinate of the well

  • rw (float) – radius of the well

  • tsandQ (list of tuples) – tuples of starting time and discharge after starting time

  • res (float) – resistance of the well screen

  • rc (float) – radius of the caisson, the pipe where the water table inside the well flucuates, which accounts for the wellbore storage

  • layers (int, array or list) – layer (int) or layers (list or array) where well is screened

  • wbstype (string) – ‘pumping’: Q is the discharge of the well ‘slug’: volume of water instantaneously taken out of the well

  • label (string (default: None)) – label of the well

hdiff = None#
nunknowns#
wbstype = 'pumping'#
initialize()[source]#

Initialize the element.

Initialization of terms that cannot be initialized before other elements or the aquifer is defined.

As we don’t want to require a certain order of entering elements, these terms are initialized when Model.solve is called The initialization class needs to be overloaded by all derived classes

setflowcoef()[source]#

Separate function so that this can be overloaded for other types.

class ttim.well.HeadWell(model, xw=0, yw=0, rw=0.1, tsandh=[(0, 1)], res=0, layers=0, label=None)[source]#

Bases: WellBase, ttim.equation.HeadEquation

Create a well with a specified head inside the well.

The well may be screened in multiple layers. The resistance of the screen may be specified. The head is computed such that the discharge \(Q_i\) in layer \(i\) is computed as

\[Q_i = 2\pi r_wH_i(h_i - h_w)/c\]

where \(c\) is the resistance of the well screen and \(h_w\) is the head inside the well.

Parameters:
  • model (Model object) – model to which the element is added

  • xw (float) – x-coordinate of the well

  • yw (float) – y-coordinate of the well

  • rw (float) – radius of the well

  • tsandh (list of tuples) – tuples of starting time and discharge after starting time

  • res (float) – resistance of the well screen

  • layers (int, array or list) – layer (int) or layers (list or array) where well is screened

  • label (string (default: None)) – label of the well

nunknowns#
initialize()[source]#

Initialize the element.

Initialization of terms that cannot be initialized before other elements or the aquifer is defined.

As we don’t want to require a certain order of entering elements, these terms are initialized when Model.solve is called The initialization class needs to be overloaded by all derived classes

class ttim.well.WellTest(model, xw=0, yw=0, tsandQ=[(0, 1)], rw=0.1, res=0, layers=0, label=None, fp=None)[source]#

Bases: WellBase

Well Base Class.

All Well elements are derived from this class

fp = None#
setflowcoef()[source]#

Separate function so that this can be overloaded for other types.