MODFLOW 6 version 6.9.0.dev0
USGS Modular Hydrologic Model
Loading...
Searching...
No Matches
FlowReductionInterface.f90
Go to the documentation of this file.
2 use kindmodule, only: dp, i4b
3
4 implicit none
5 private
6 public :: flowreductiontype
7
8 !> @brief Interface for supplying a flow-reduction factor.
9 !!
10 !! A stress package that reduces a withdrawal, such as the Well Package
11 !! with AUTO_FLOW_REDUCE, multiplies the requested rate by a factor that
12 !! falls from one to zero as the fluid runs out. On its own the package
13 !! judges that from the cell: the factor tapers over a length measured up
14 !! from the cell bottom, and only a convertible cell can run dry.
15 !!
16 !! A flow formulation may know better how much of the fluid being
17 !! withdrawn the cell holds: a sharp interface knows the elevation range
18 !! the fluid occupies, and an unsaturated-flow formulation knows its
19 !! saturation. Such a formulation implements this interface and returns the
20 !! factor itself, with its derivative, so the stress package applies it
21 !! without knowing which formulation provided it, or whether one did at all.
22 !<
23 type, abstract :: flowreductiontype
24 contains
25 procedure(reduce_if), deferred :: reduce !< Factor for node n
26 end type flowreductiontype
27
28 abstract interface
29 !> @brief Flow-reduction factor for a node, and its derivative
30 !!
31 !! The taper length is what the stress package was asked to taper over,
32 !! resolved to a length: the per-boundary auxiliary value or the package
33 !! value, a fraction of the cell thickness already converted. An
34 !! implementation decides how much of its fluid the cell holds, tapers
35 !! the factor over that length from where the fluid runs out, and may
36 !! ignore the length if its fluid never runs out at a definite elevation.
37 !! The factor is one where nothing limits the withdrawal and zero where
38 !! there is nothing to withdraw; the derivative is with respect to the
39 !! head of the cell in this model.
40 !<
41 subroutine reduce_if(this, n, h, taper, f, dfdh)
42 ! -- import
43 import :: flowreductiontype, dp, i4b
44 ! -- dummy
45 class(flowreductiontype), intent(in) :: this !< flow reduction provider
46 integer(I4B), intent(in) :: n !< reduced node number
47 real(DP), intent(in) :: h !< head in the cell
48 real(DP), intent(in) :: taper !< length to taper the factor over
49 real(DP), intent(out) :: f !< factor to apply to the requested rate
50 real(DP), intent(out) :: dfdh !< derivative of the factor with respect to head
51 end subroutine reduce_if
52 end interface
53
Flow-reduction factor for a node, and its derivative.
This module defines variable data types.
Definition kind.f90:8
Interface for supplying a flow-reduction factor.