Source code for imod.prepare.layer
"""
This module contains all kinds of utilities to work with layers.
"""
from imod.typing import GridDataArray
from imod.typing.grid import preserve_gridtype
[docs]
@preserve_gridtype
def get_upper_active_layer_number(active: GridDataArray) -> GridDataArray:
"""
Returns planar grid of integers with the layer number of the upper most
active cell.
Parameters
----------
active: {DataArray, UgridDataArray}
Grid of booleans designating active cell.
"""
layer = active.coords["layer"]
# Set nodata to sentinel value to prevent a dtype shift from integer to
# float as np.nan forces float.
nodata = layer.max() + 1
return layer.where(active, nodata).min("layer")
[docs]
@preserve_gridtype
def get_upper_active_grid_cells(active: GridDataArray) -> GridDataArray:
"""
Returns grid of booleans designating location of the uppermost active grid
cell.
Parameters
----------
active: {DataArray, UgridDataArray}
Grid of booleans designating active cell.
"""
layer = active.coords["layer"]
upper_active_layer = get_upper_active_layer_number(active)
return layer == upper_active_layer
[docs]
@preserve_gridtype
def get_lower_active_layer_number(active: GridDataArray) -> GridDataArray:
"""
Returns two-dimensional grid of integers with the layer number of the lower
most active cell.
Parameters
----------
active: {DataArray, UgridDataArray}
Grid of booleans designating active cell.
"""
layer = active.coords["layer"]
# Set nodata to sentinel value to prevent a dtype shift from integer to
# float as np.nan forces float.
nodata = layer.min() - 1
return layer.where(active, nodata).max("layer")
[docs]
@preserve_gridtype
def get_lower_active_grid_cells(active: GridDataArray) -> GridDataArray:
"""
Returns grid of booleans designating location of the lowermost active grid
cell.
Parameters
----------
active: {DataArray, UgridDataArray}
Grid of booleans designating active cell.
"""
layer = active.coords["layer"]
lower_active_layer = get_lower_active_layer_number(active)
return layer == lower_active_layer