Coverage for C:\src\imod-python\imod\mf6\clipped_boundary_condition_creator.py: 100%
14 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-08 13:27 +0200
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-08 13:27 +0200
1import imod
2from imod.mf6 import ConstantHead
3from imod.select.grid import active_grid_boundary_xy
4from imod.typing import GridDataArray
7def create_clipped_boundary(
8 idomain: GridDataArray,
9 state_for_clipped_boundary: GridDataArray,
10 original_constant_head_boundaries: list[ConstantHead],
11) -> ConstantHead:
12 """
13 Create a ConstantHead package on boundary cells that don't have any assigned to them. This is useful in
14 combination with the clip_box method which can produce a domain with missing boundary conditions.
16 Parameters
17 ----------
18 idomain:
19 The clipped domain
20 state_for_clipped_boundary :
21 The values to be assigned to the created ConstantHead package
22 original_constant_head_boundaries :
23 List of existing ConstantHead boundaries
25 Returns
26 -------
27 ConstantHead package providing values for boundary cells that are not
28 covered by other ConstantHead packages
30 """
31 active_grid_boundary = active_grid_boundary_xy(idomain == 1)
32 unassigned_grid_boundaries = _find_unassigned_grid_boundaries(
33 active_grid_boundary, original_constant_head_boundaries
34 )
36 constant_head = state_for_clipped_boundary.where(unassigned_grid_boundaries)
38 return imod.mf6.ConstantHead(
39 constant_head, print_input=True, print_flows=True, save_flows=True
40 )
43def _find_unassigned_grid_boundaries(
44 active_grid_boundary: GridDataArray,
45 boundary_conditions: list[ConstantHead],
46) -> GridDataArray:
47 unassigned_grid_boundaries = active_grid_boundary
48 for boundary_condition in boundary_conditions:
49 unassigned_grid_boundaries = (
50 unassigned_grid_boundaries & boundary_condition["head"].isnull()
51 )
53 return unassigned_grid_boundaries