flopy/flopy/mf6/modflow/mfgwfnpf.py

495 lines
20 KiB
Python

# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY
# mf6/utils/createpackages.py
from .. import mfpackage
from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator
class ModflowGwfnpf(mfpackage.MFPackage):
"""
ModflowGwfnpf defines a npf package within a gwf6 model.
Parameters
----------
model : MFModel
Model that this package is a part of. Package is automatically
added to model when it is initialized.
loading_package : bool
Do not set this parameter. It is intended for debugging and internal
processing purposes only.
save_flows : boolean
* save_flows (boolean) keyword to indicate that budget flow terms will
be written to the file specified with "BUDGET SAVE FILE" in Output
Control.
alternative_cell_averaging : string
* alternative_cell_averaging (string) is a text keyword to indicate
that an alternative method will be used for calculating the
conductance for horizontal cell connections. The text value for
ALTERNATIVE_CELL_AVERAGING can be "LOGARITHMIC", "AMT-LMK", or "AMT-
HMK". "AMT-LMK" signifies that the conductance will be calculated
using arithmetic-mean thickness and logarithmic-mean hydraulic
conductivity. "AMT-HMK" signifies that the conductance will be
calculated using arithmetic-mean thickness and harmonic-mean
hydraulic conductivity. If the user does not specify a value for
ALTERNATIVE_CELL_AVERAGING, then the harmonic-mean method will be
used. This option cannot be used if the XT3D option is invoked.
thickstrt : boolean
* thickstrt (boolean) indicates that cells having a negative ICELLTYPE
are confined, and their cell thickness for conductance calculations
will be computed as STRT-BOT rather than TOP-BOT.
cvoptions : [dewatered]
* dewatered (string) If the DEWATERED keyword is specified, then the
vertical conductance is calculated using only the saturated thickness
and properties of the overlying cell if the head in the underlying
cell is below its top.
perched : boolean
* perched (boolean) keyword to indicate that when a cell is overlying a
dewatered convertible cell, the head difference used in Darcy's Law
is equal to the head in the overlying cell minus the bottom elevation
of the overlying cell. If not specified, then the default is to use
the head difference between the two cells.
rewet_record : [wetfct, iwetit, ihdwet]
* wetfct (double) is a keyword and factor that is included in the
calculation of the head that is initially established at a cell when
that cell is converted from dry to wet.
* iwetit (integer) is a keyword and iteration interval for attempting
to wet cells. Wetting is attempted every IWETIT iteration. This
applies to outer iterations and not inner iterations. If IWETIT is
specified as zero or less, then the value is changed to 1.
* ihdwet (integer) is a keyword and integer flag that determines which
equation is used to define the initial head at cells that become wet.
If IHDWET is 0, h = BOT + WETFCT (hm - BOT). If IHDWET is not 0, h =
BOT + WETFCT (THRESH).
xt3doptions : [rhs]
* rhs (string) If the RHS keyword is also included, then the XT3D
additional terms will be added to the right-hand side. If the RHS
keyword is excluded, then the XT3D terms will be put into the
coefficient matrix.
save_specific_discharge : boolean
* save_specific_discharge (boolean) keyword to indicate that x, y, and
z components of specific discharge will be calculated at cell centers
and written to the budget file, which is specified with "BUDGET SAVE
FILE" in Output Control. If this option is activated, then additional
information may be required in the discretization packages and the
GWF Exchange package (if GWF models are coupled). Specifically,
ANGLDEGX must be specified in the CONNECTIONDATA block of the DISU
Package; ANGLDEGX must also be specified for the GWF Exchange as an
auxiliary variable.
save_saturation : boolean
* save_saturation (boolean) keyword to indicate that cell saturation
will be written to the budget file, which is specified with "BUDGET
SAVE FILE" in Output Control. Saturation will be saved to the budget
file as an auxiliary variable saved with the DATA-SAT text label.
Saturation is a cell variable that ranges from zero to one and can be
used by post processing programs to determine how much of a cell
volume is saturated. If ICELLTYPE is 0, then saturation is always
one.
k22overk : boolean
* k22overk (boolean) keyword to indicate that specified K22 is a ratio
of K22 divided by K. If this option is specified, then the K22 array
entered in the NPF Package will be multiplied by K after being read.
k33overk : boolean
* k33overk (boolean) keyword to indicate that specified K33 is a ratio
of K33 divided by K. If this option is specified, then the K33 array
entered in the NPF Package will be multiplied by K after being read.
icelltype : [integer]
* icelltype (integer) flag for each cell that specifies how saturated
thickness is treated. 0 means saturated thickness is held constant;
>0 means saturated thickness varies with computed head when head is
below the cell top; <0 means saturated thickness varies with computed
head unless the THICKSTRT option is in effect. When THICKSTRT is in
effect, a negative value of icelltype indicates that saturated
thickness will be computed as STRT-BOT and held constant.
k : [double]
* k (double) is the hydraulic conductivity. For the common case in
which the user would like to specify the horizontal hydraulic
conductivity and the vertical hydraulic conductivity, then K should
be assigned as the horizontal hydraulic conductivity, K33 should be
assigned as the vertical hydraulic conductivity, and K22 and the
three rotation angles should not be specified. When more
sophisticated anisotropy is required, then K corresponds to the K11
hydraulic conductivity axis. All included cells (IDOMAIN > 0) must
have a K value greater than zero.
k22 : [double]
* k22 (double) is the hydraulic conductivity of the second ellipsoid
axis (or the ratio of K22/K if the K22OVERK option is specified); for
an unrotated case this is the hydraulic conductivity in the y
direction. If K22 is not included in the GRIDDATA block, then K22 is
set equal to K. For a regular MODFLOW grid (DIS Package is used) in
which no rotation angles are specified, K22 is the hydraulic
conductivity along columns in the y direction. For an unstructured
DISU grid, the user must assign principal x and y axes and provide
the angle for each cell face relative to the assigned x direction.
All included cells (IDOMAIN > 0) must have a K22 value greater than
zero.
k33 : [double]
* k33 (double) is the hydraulic conductivity of the third ellipsoid
axis (or the ratio of K33/K if the K33OVERK option is specified); for
an unrotated case, this is the vertical hydraulic conductivity. When
anisotropy is applied, K33 corresponds to the K33 tensor component.
All included cells (IDOMAIN > 0) must have a K33 value greater than
zero.
angle1 : [double]
* angle1 (double) is a rotation angle of the hydraulic conductivity
tensor in degrees. The angle represents the first of three sequential
rotations of the hydraulic conductivity ellipsoid. With the K11, K22,
and K33 axes of the ellipsoid initially aligned with the x, y, and z
coordinate axes, respectively, ANGLE1 rotates the ellipsoid about its
K33 axis (within the x - y plane). A positive value represents
counter-clockwise rotation when viewed from any point on the positive
K33 axis, looking toward the center of the ellipsoid. A value of zero
indicates that the K11 axis lies within the x - z plane. If ANGLE1 is
not specified, default values of zero are assigned to ANGLE1, ANGLE2,
and ANGLE3, in which case the K11, K22, and K33 axes are aligned with
the x, y, and z axes, respectively.
angle2 : [double]
* angle2 (double) is a rotation angle of the hydraulic conductivity
tensor in degrees. The angle represents the second of three
sequential rotations of the hydraulic conductivity ellipsoid.
Following the rotation by ANGLE1 described above, ANGLE2 rotates the
ellipsoid about its K22 axis (out of the x - y plane). An array can
be specified for ANGLE2 only if ANGLE1 is also specified. A positive
value of ANGLE2 represents clockwise rotation when viewed from any
point on the positive K22 axis, looking toward the center of the
ellipsoid. A value of zero indicates that the K11 axis lies within
the x - y plane. If ANGLE2 is not specified, default values of zero
are assigned to ANGLE2 and ANGLE3; connections that are not user-
designated as vertical are assumed to be strictly horizontal (that
is, to have no z component to their orientation); and connection
lengths are based on horizontal distances.
angle3 : [double]
* angle3 (double) is a rotation angle of the hydraulic conductivity
tensor in degrees. The angle represents the third of three sequential
rotations of the hydraulic conductivity ellipsoid. Following the
rotations by ANGLE1 and ANGLE2 described above, ANGLE3 rotates the
ellipsoid about its K11 axis. An array can be specified for ANGLE3
only if ANGLE1 and ANGLE2 are also specified. An array must be
specified for ANGLE3 if ANGLE2 is specified. A positive value of
ANGLE3 represents clockwise rotation when viewed from any point on
the positive K11 axis, looking toward the center of the ellipsoid. A
value of zero indicates that the K22 axis lies within the x - y
plane.
wetdry : [double]
* wetdry (double) is a combination of the wetting threshold and a flag
to indicate which neighboring cells can cause a cell to become wet.
If WETDRY < 0, only a cell below a dry cell can cause the cell to
become wet. If WETDRY > 0, the cell below a dry cell and horizontally
adjacent cells can cause a cell to become wet. If WETDRY is 0, the
cell cannot be wetted. The absolute value of WETDRY is the wetting
threshold. When the sum of BOT and the absolute value of WETDRY at a
dry cell is equaled or exceeded by the head at an adjacent cell, the
cell is wetted. WETDRY must be specified if "REWET" is specified in
the OPTIONS block. If "REWET" is not specified in the options block,
then WETDRY can be entered, and memory will be allocated for it, even
though it is not used.
filename : String
File name for this package.
pname : String
Package name for this package.
parent_file : MFPackage
Parent package file that references this package. Only needed for
utility packages (mfutl*). For example, mfutllaktab package must have
a mfgwflak package parent_file.
"""
rewet_record = ListTemplateGenerator(
("gwf6", "npf", "options", "rewet_record")
)
icelltype = ArrayTemplateGenerator(
("gwf6", "npf", "griddata", "icelltype")
)
k = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "k"))
k22 = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "k22"))
k33 = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "k33"))
angle1 = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "angle1"))
angle2 = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "angle2"))
angle3 = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "angle3"))
wetdry = ArrayTemplateGenerator(("gwf6", "npf", "griddata", "wetdry"))
package_abbr = "gwfnpf"
_package_type = "npf"
dfn_file_name = "gwf-npf.dfn"
dfn = [
[
"block options",
"name save_flows",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name alternative_cell_averaging",
"type string",
"valid logarithmic amt-lmk amt-hmk",
"reader urword",
"optional true",
],
[
"block options",
"name thickstrt",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name cvoptions",
"type record variablecv dewatered",
"reader urword",
"optional true",
],
[
"block options",
"name variablecv",
"in_record true",
"type keyword",
"reader urword",
],
[
"block options",
"name dewatered",
"in_record true",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name perched",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name rewet_record",
"type record rewet wetfct iwetit ihdwet",
"reader urword",
"optional true",
],
[
"block options",
"name rewet",
"type keyword",
"in_record true",
"reader urword",
"optional false",
],
[
"block options",
"name wetfct",
"type double precision",
"in_record true",
"reader urword",
"optional false",
],
[
"block options",
"name iwetit",
"type integer",
"in_record true",
"reader urword",
"optional false",
],
[
"block options",
"name ihdwet",
"type integer",
"in_record true",
"reader urword",
"optional false",
],
[
"block options",
"name xt3doptions",
"type record xt3d rhs",
"reader urword",
"optional true",
],
[
"block options",
"name xt3d",
"in_record true",
"type keyword",
"reader urword",
],
[
"block options",
"name rhs",
"in_record true",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name save_specific_discharge",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name save_saturation",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name k22overk",
"type keyword",
"reader urword",
"optional true",
],
[
"block options",
"name k33overk",
"type keyword",
"reader urword",
"optional true",
],
[
"block griddata",
"name icelltype",
"type integer",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional",
"default_value 0",
],
[
"block griddata",
"name k",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional",
"default_value 1.0",
],
[
"block griddata",
"name k22",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
[
"block griddata",
"name k33",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
[
"block griddata",
"name angle1",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
[
"block griddata",
"name angle2",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
[
"block griddata",
"name angle3",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
[
"block griddata",
"name wetdry",
"type double precision",
"shape (nodes)",
"valid",
"reader readarray",
"layered true",
"optional true",
],
]
def __init__(
self,
model,
loading_package=False,
save_flows=None,
alternative_cell_averaging=None,
thickstrt=None,
cvoptions=None,
perched=None,
rewet_record=None,
xt3doptions=None,
save_specific_discharge=None,
save_saturation=None,
k22overk=None,
k33overk=None,
icelltype=0,
k=1.0,
k22=None,
k33=None,
angle1=None,
angle2=None,
angle3=None,
wetdry=None,
filename=None,
pname=None,
parent_file=None,
):
super(ModflowGwfnpf, self).__init__(
model, "npf", filename, pname, loading_package, parent_file
)
# set up variables
self.save_flows = self.build_mfdata("save_flows", save_flows)
self.alternative_cell_averaging = self.build_mfdata(
"alternative_cell_averaging", alternative_cell_averaging
)
self.thickstrt = self.build_mfdata("thickstrt", thickstrt)
self.cvoptions = self.build_mfdata("cvoptions", cvoptions)
self.perched = self.build_mfdata("perched", perched)
self.rewet_record = self.build_mfdata("rewet_record", rewet_record)
self.xt3doptions = self.build_mfdata("xt3doptions", xt3doptions)
self.save_specific_discharge = self.build_mfdata(
"save_specific_discharge", save_specific_discharge
)
self.save_saturation = self.build_mfdata(
"save_saturation", save_saturation
)
self.k22overk = self.build_mfdata("k22overk", k22overk)
self.k33overk = self.build_mfdata("k33overk", k33overk)
self.icelltype = self.build_mfdata("icelltype", icelltype)
self.k = self.build_mfdata("k", k)
self.k22 = self.build_mfdata("k22", k22)
self.k33 = self.build_mfdata("k33", k33)
self.angle1 = self.build_mfdata("angle1", angle1)
self.angle2 = self.build_mfdata("angle2", angle2)
self.angle3 = self.build_mfdata("angle3", angle3)
self.wetdry = self.build_mfdata("wetdry", wetdry)
self._init_complete = True