ttim.well ========= .. py:module:: ttim.well Classes ------- .. autoapisummary:: ttim.well.WellBase ttim.well.DischargeWell ttim.well.Well ttim.well.HeadWell ttim.well.WellTest Module Contents --------------- .. py:class:: WellBase(model, xw=0, yw=0, rw=0.1, tsandbc=[(0, 1)], res=0, layers=0, type='', name='WellBase', label=None) Bases: :py:obj:`ttim.element.Element` Well Base Class. All Well elements are derived from this class .. !! processed by numpydoc !! .. py:attribute:: nparam .. py:attribute:: xw .. py:attribute:: yw .. py:attribute:: rw .. py:attribute:: res .. py:method:: __repr__() .. py:method:: 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 .. !! processed by numpydoc !! .. py:method:: setflowcoef() Separate function so that this can be overloaded for other types. .. !! processed by numpydoc !! .. py:method:: potinf(x, y, aq=None) Can be called with only one x,y value. .. !! processed by numpydoc !! .. py:method:: potinfone(x, y, jtime, aq=None) Can be called with only one x,y value for time interval jtime. .. !! processed by numpydoc !! .. py:method:: disvecinf(x, y, aq=None) Can be called with only one x,y value. .. !! processed by numpydoc !! .. py:method:: headinside(t, derivative=0) Returns head inside the well for the layers that the well is screened in. :param t: time for which head is computed :type t: float, list or array :returns: **Q** -- nsreens is the number of layers with a well screen :rtype: array of size `nscreens, ntimes` .. !! processed by numpydoc !! .. py:method:: plot(ax=None) Plot the element. .. !! processed by numpydoc !! .. py:method:: changetrace(xyzt1, xyzt2, aq, layer, ltype, modellayer, direction, hstepmax) .. py:class:: DischargeWell(model, xw=0, yw=0, tsandQ=[(0, 1)], rw=0.1, res=0, layers=0, label=None) Bases: :py:obj:`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 :math:`Q_i` in layer :math:`i` is computed as .. math:: Q_i = 2\pi r_wH_i(h_i - h_w)/c where :math:`c` is the resistance of the well screen and :math:`h_w` is the head inside the well. :param model: model to which the element is added :type model: Model object :param xw: x-coordinate of the well :type xw: float :param yw: y-coordinate of the well :type yw: float :param tsandQ: tuples of starting time and discharge after starting time :type tsandQ: list of tuples :param rw: radius of the well :type rw: float :param res: resistance of the well screen :type res: float :param layers: layer (int) or layers (list or array) where well is screened :type layers: int, array or list :param label: label of the well :type label: string or None (default: None) .. rubric:: 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)]) .. !! processed by numpydoc !! .. py:class:: Well(model, xw=0, yw=0, rw=0.1, tsandQ=[(0, 1)], res=0, rc=None, layers=0, wbstype='pumping', label=None) Bases: :py:obj:`WellBase`, :py:obj:`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 :math:`Q_i` in layer :math:`i` is computed as .. math:: Q_i = 2\pi r_wH_i(h_i - h_w)/c where :math:`c` is the resistance of the well screen and :math:`h_w` is the head inside the well. :param model: model to which the element is added :type model: Model object :param xw: x-coordinate of the well :type xw: float :param yw: y-coordinate of the well :type yw: float :param rw: radius of the well :type rw: float :param tsandQ: tuples of starting time and discharge after starting time :type tsandQ: list of tuples :param res: resistance of the well screen :type res: float :param rc: radius of the caisson, the pipe where the water table inside the well flucuates, which accounts for the wellbore storage :type rc: float :param layers: layer (int) or layers (list or array) where well is screened :type layers: int, array or list :param wbstype: 'pumping': Q is the discharge of the well 'slug': volume of water instantaneously taken out of the well :type wbstype: string :param label: label of the well :type label: string (default: None) .. !! processed by numpydoc !! .. py:attribute:: hdiff :value: None .. py:attribute:: nunknowns .. py:attribute:: wbstype :value: 'pumping' .. py:method:: 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 .. !! processed by numpydoc !! .. py:method:: setflowcoef() Separate function so that this can be overloaded for other types. .. !! processed by numpydoc !! .. py:class:: HeadWell(model, xw=0, yw=0, rw=0.1, tsandh=[(0, 1)], res=0, layers=0, label=None) Bases: :py:obj:`WellBase`, :py:obj:`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 :math:`Q_i` in layer :math:`i` is computed as .. math:: Q_i = 2\pi r_wH_i(h_i - h_w)/c where :math:`c` is the resistance of the well screen and :math:`h_w` is the head inside the well. :param model: model to which the element is added :type model: Model object :param xw: x-coordinate of the well :type xw: float :param yw: y-coordinate of the well :type yw: float :param rw: radius of the well :type rw: float :param tsandh: tuples of starting time and discharge after starting time :type tsandh: list of tuples :param res: resistance of the well screen :type res: float :param layers: layer (int) or layers (list or array) where well is screened :type layers: int, array or list :param label: label of the well :type label: string (default: None) .. !! processed by numpydoc !! .. py:attribute:: nunknowns .. py:method:: 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 .. !! processed by numpydoc !! .. py:class:: WellTest(model, xw=0, yw=0, tsandQ=[(0, 1)], rw=0.1, res=0, layers=0, label=None, fp=None) Bases: :py:obj:`WellBase` Well Base Class. All Well elements are derived from this class .. !! processed by numpydoc !! .. py:attribute:: fp :value: None .. py:method:: setflowcoef() Separate function so that this can be overloaded for other types. .. !! processed by numpydoc !!