River#

class timflow.transient.linesink.River(model, x1=-1, y1=0, x2=1, y2=0, tsandh=[(0, 1)], res=0, wh='H', layers=0, label=None, addtomodel=True)#

Bases: LineSinkBase, timflow.transient.equation.HeadEquation

Create a head-specified line-sink with optional width and resistance.

Inflow per unit length of line-sink is computed as:

\[\sigma = w(h_{aq} - h_{ls})/c\]

where \(c\) is the resistance of the bottom of the line-sink, \(w\) is the width over which water enters the line-sink, \(h_{aq}\) is the head in the aquifer at the center of the line-sink, \(h_{ls}\) is the specified head inside the line-sink Note that all that matters is the conductance term \(w/c\) but both are specified separately

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

  • x1 (scalar) – x-coordinate of fist point of line-sink

  • y1 (scalar) – y-coordinate of fist point of line-sink

  • x2 (scalar) – x-coordinate of second point of line-sink

  • y2 (scalar) – y-coordinate of second point of line-sink

  • tsandh (list or 2D array of (time, head) values or string) – if list or 2D array: pairs of time and head after that time if ‘fixed’: head is fixed (no change in head) during entire simulation

  • res (scalar (default is 0)) – resistance of line-sink

  • wh (scalar or str) – distance over which water enters line-sink if ‘H’: (default) distance is equal to the thickness of the aquifer layer (when flow comes mainly from one side) if ‘2H’: distance is twice the thickness of the aquifer layer (when flow comes from both sides) if scalar: the width of the stream that partially penetrates the aquifer layer

  • layers (scalar, list or array) – layer(s) in which element is placed if scalar: element is placed in this layer if list or array: element is placed in all these layers

  • label (str or None) – label of element

See also

RiverString

initialize()#

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()#

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

potinf(x, y, aq=None)#

Can be called with only one x,y value.

disvecinf(x, y, aq=None)#

Can be called with only one x,y value.

headinside(t)#

The head inside the line-sink.

Parameters:

t (array or float) – time(s) for whih head is computed

Returns:

Head inside the line-sink for each layer that the line-sink is screened in

Return type:

array (length number of layers)

plot(ax=None, layer=None)#

Plot the element.

potential(x, y, aq=None)#

Returns complex array of size (ngvbc, naq, npval).

unitpotential(x, y, aq=None)#

Returns complex array of size (naq, npval).

Can be more efficient for given elements.

unitpotentialone(x, y, jtime, aq=None)#

Returns complex array of size (naq, npval).

Can be more efficient for given elements.

disvec(x, y, aq=None)#

Returns 2 complex arrays of size (ngvbc, naq, npval).

unitdisvec(x, y, aq=None)#

Returns 2 complex arrays of size (naq, npval).

Can be more efficient for given elements.

potinflayers(x, y, layers=0, aq=None)#

Layers can be scalar, list, or array.

returns array of size (len(layers),nparam,npval) only used in building equations

potentiallayers(x, y, layers=0, aq=None)#

Returns complex array of size (ngvbc, len(layers),npval).

Only used in building equations.

unitpotentiallayers(x, y, layers=0, aq=None)#

Returns complex array of size (len(layers), npval).

Only used in building equations.

disvecinflayers(x, y, layers=0, aq=None)#

Layers can be scalar, list, or array.

returns 2 arrays of size (len(layers),nparam,npval) only used in building equations

disveclayers(x, y, layers=0, aq=None)#

Returns 2 complex array of size (ngvbc, len(layers), npval).

Only used in building equations.

unitdisveclayers(x, y, layers=0, aq=None)#

Returns complex array of size (len(layers), npval).

Only used in building equations.

discharge(t, derivative=0)#

The discharge in each layer.

Parameters:
  • t (scalar, list or array) – times at which discharge is computed. t must be ordered and tmin <= t <= tmax

  • derivative (when derivative=0, returns discharge (default)) – when derivative=1, returns derivative of the discharge when derivative=-1, returns integrated discharge

Returns:

Discharge in each screen with zeros for layers that are not screened

Return type:

array of discharges (nlayers,len(t))

dischargeold(t, derivative=0)#

The discharge in each layer.

Parameters:

t (scalar, list or array) – times at which discharge is computed. t must be ordered and tmin <= t <= tmax

Returns:

Discharge in each screen with zeros for layers that are not screened

Return type:

array of discharges (nlayers,len(t))

run_after_solve()#

Function to run after a solution is completed.

For most elements nothing needs to be done, but for strings of elements some arrays may need to be filled.

equation()#

Matrix rows for head-specified conditions.

Really written as constant potential element. Works for nunknowns = 1 Returns matrix part nunknowns,neq,npval, complex.

Returns rhs part nunknowns,nvbc,npval, complex Phi_out - c*T*q_s = Phi_in Well: q_s = Q / (2*pi*r_w*H) LineSink: q_s = sigma / H = Q / (L*H)