Source code for imod.flow.bas
import scipy.ndimage
from imod.flow.pkgbase import Package
[docs]
class Boundary(Package):
"""
Specify the locations of active, inactive, and specified head in cells
Parameters
----------
ibound: xr.DataArray of ints
is the boundary variable with dimensions ``("layer", "y", "x")``.
* If IBOUND(J,I,K) < 0, cell J,I,K has a constant head.
* If IBOUND(J,I,K) = 0, cell J,I,K is inactive.
* If IBOUND(J,I,K) > 0, cell J,I,K is active.
"""
_pkg_id = "bnd"
_variable_order = ["ibound"]
[docs]
def __init__(self, ibound):
super().__init__()
self.dataset["ibound"] = ibound
def _pkgcheck(self, active_cells=None):
_, nlabels = scipy.ndimage.label(active_cells.values)
if nlabels > 1:
raise ValueError(
f"{nlabels} disconnected model domain detected in the ibound"
)
[docs]
class Top(Package):
"""
The top of the aquifers
Parameters
----------
top: xr.DataArray of floats
is the top elevation with dimensions ``("layer", "y", "x")``. For the
common situation in which the top layer represents a water-table
aquifer, it may be reasonable to set`top` equal to land-surface
elevation. The DataArray should at least include the `layer`
dimension.
"""
_pkg_id = "top"
_variable_order = ["top"]
[docs]
def __init__(self, top):
super().__init__()
self.dataset["top"] = top
def _pkgcheck(self, active_cells=None):
vars_to_check = ["top"]
self._check_if_nan_in_active_cells(
active_cells=active_cells, vars_to_check=vars_to_check
)
[docs]
class Bottom(Package):
"""
The bottom of the aquifers
Parameters
----------
bottom: xr.DataArray of floats
is the bottom elevation of model layers or Quasi-3d confining beds,
with dimensions ``("layer", "y", "x")``. The DataArray should at least
include the `layer` dimension.
"""
_pkg_id = "bot"
_variable_order = ["bottom"]
[docs]
def __init__(self, bottom):
super().__init__()
self.dataset["bottom"] = bottom
def _pkgcheck(self, active_cells=None):
vars_to_check = ["bottom"]
self._check_if_nan_in_active_cells(
active_cells=active_cells, vars_to_check=vars_to_check
)
[docs]
class StartingHead(Package):
"""
The initial head in all cells
Parameters
----------
starting_head: float or xr.DataArray of floats
is initial (starting) head—that is, head at the beginning of the
simulation (SHD). starting_head must be specified for all simulations,
including steady-state simulations. One value is read for every model
cell. Usually, these values are read a layer at a time.
"""
_pkg_id = "shd"
_variable_order = ["starting_head"]
[docs]
def __init__(self, starting_head):
super().__init__()
self.dataset["starting_head"] = starting_head
def _pkgcheck(self, active_cells=None):
vars_to_check = ["starting_head"]
self._check_if_nan_in_active_cells(
active_cells=active_cells, vars_to_check=vars_to_check
)