Skip to content

Commit 92ee928

Browse files
committed
move hfb_data_to_linework to faceutil module
1 parent 5183e71 commit 92ee928

4 files changed

Lines changed: 61 additions & 65 deletions

File tree

flopy/mf6/mfpackage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2160,7 +2160,7 @@ def to_geodataframe(self, gdf=None, kper=0, full_grid=True, shorten_attr=False,
21602160
if modelgrid is not None:
21612161
if self.package_type == "hfb":
21622162
gpd = import_optional_dependency("geopandas")
2163-
from ..plot.plotutil import hfb_data_to_linework
2163+
from ..utils.faceutil import hfb_data_to_linework
21642164

21652165
recarray = self.stress_period_data.data[kper]
21662166
lines = hfb_data_to_linework(recarray, modelgrid)

flopy/modflow/mfhfb.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ def _get_hfb_lines(self):
190190
-------
191191
list : list of hfb lines
192192
"""
193-
from ..plot.plotutil import hfb_data_to_linework
193+
from ..utils.faceutil import hfb_data_to_linework
194194

195195
return hfb_data_to_linework(self.hfb_data, self.parent.modelgrid)
196196

flopy/plot/plotutil.py

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@
1919

2020
from ..datbase import DataInterface, DataType
2121
from ..utils import Util3d, import_optional_dependency
22-
from ..utils.faceutil import (
23-
get_shared_face,
24-
get_shared_face_3d,
25-
get_shared_face_indices,
26-
is_vertical,
27-
)
22+
from ..utils.faceutil import get_shared_face, get_shared_face_3d, is_vertical
2823

2924
warnings.simplefilter("ignore", RuntimeWarning)
3025

@@ -2956,60 +2951,3 @@ def to_prt_pathlines(
29562951
return df
29572952
else:
29582953
return ret
2959-
2960-
2961-
def hfb_data_to_linework(recarray, modelgrid):
2962-
"""
2963-
Method to get lines representing horizontal flow barriers
2964-
2965-
Parameters
2966-
----------
2967-
recarray : np.recarray
2968-
recarray of hfb input data
2969-
modelgrid : Grid
2970-
modelgrid instance
2971-
2972-
Returns
2973-
-------
2974-
list : list of line segments
2975-
"""
2976-
verts = modelgrid.verts
2977-
nodes = []
2978-
if modelgrid.grid_type == "structured":
2979-
if "k" in recarray.dtype.names:
2980-
for rec in recarray:
2981-
node1 = modelgrid.get_node([(0, rec["irow1"], rec["icol1"])])[0]
2982-
node2 = modelgrid.get_node([(0, rec["irow2"], rec["icol2"])])[0]
2983-
nodes.append((node1, node2))
2984-
else:
2985-
for rec in recarray:
2986-
node1 = modelgrid.get_node([(0,) + rec["cellid1"][1:]])[0]
2987-
node2 = modelgrid.get_node([(0,) + rec["cellid2"][1:]])[0]
2988-
nodes.append((node1, node2))
2989-
2990-
elif modelgrid.grid_type == "vertex":
2991-
for rec in recarray:
2992-
nodes.append((rec["cellid1"][-1], rec["cellid2"][-1]))
2993-
2994-
else:
2995-
if "node1" in recarray.dtype.names:
2996-
nodes = list(zip(recarray["node1"], recarray["node2"]))
2997-
else:
2998-
for rec in recarray:
2999-
nodes.append((rec["cellid1"][0], rec["cellid2"][0]))
3000-
3001-
shared_edges = []
3002-
for node0, node1 in nodes:
3003-
edge = get_shared_face_indices(modelgrid, node0, node1)
3004-
if edge is None:
3005-
raise AssertionError(
3006-
f"No shared cell edges found. Cannot represent HFB "
3007-
f"for nodes {node0} and {node1}"
3008-
)
3009-
shared_edges.append(edge)
3010-
3011-
lines = []
3012-
for edge in shared_edges:
3013-
lines.append((tuple(verts[edge[0]]), tuple(verts[edge[1]])))
3014-
3015-
return lines

flopy/utils/faceutil.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,3 +281,61 @@ def is_vertical(mg: Grid, cellid1: tuple[int, ...], cellid2: tuple[int, ...]) ->
281281

282282
# Connection not found between cells
283283
raise ValueError(f"No connection found between cells {cellid1} and {cellid2}")
284+
285+
286+
def hfb_data_to_linework(recarray, modelgrid):
287+
"""
288+
Convert HFB barrier data to line segments representing shared cell faces.
289+
290+
Parameters
291+
----------
292+
recarray : np.recarray
293+
recarray of hfb input data
294+
modelgrid : Grid
295+
modelgrid instance
296+
297+
Returns
298+
-------
299+
list
300+
list of line segments, each as a tuple of two (x, y) coordinate tuples
301+
"""
302+
verts = modelgrid.verts
303+
nodes = []
304+
if modelgrid.grid_type == "structured":
305+
if "k" in recarray.dtype.names:
306+
for rec in recarray:
307+
node1 = modelgrid.get_node([(0, rec["irow1"], rec["icol1"])])[0]
308+
node2 = modelgrid.get_node([(0, rec["irow2"], rec["icol2"])])[0]
309+
nodes.append((node1, node2))
310+
else:
311+
for rec in recarray:
312+
node1 = modelgrid.get_node([(0,) + rec["cellid1"][1:]])[0]
313+
node2 = modelgrid.get_node([(0,) + rec["cellid2"][1:]])[0]
314+
nodes.append((node1, node2))
315+
316+
elif modelgrid.grid_type == "vertex":
317+
for rec in recarray:
318+
nodes.append((rec["cellid1"][-1], rec["cellid2"][-1]))
319+
320+
else:
321+
if "node1" in recarray.dtype.names:
322+
nodes = list(zip(recarray["node1"], recarray["node2"]))
323+
else:
324+
for rec in recarray:
325+
nodes.append((rec["cellid1"][0], rec["cellid2"][0]))
326+
327+
shared_edges = []
328+
for node0, node1 in nodes:
329+
edge = get_shared_face_indices(modelgrid, node0, node1)
330+
if edge is None:
331+
raise AssertionError(
332+
f"No shared cell edges found. Cannot represent HFB "
333+
f"for nodes {node0} and {node1}"
334+
)
335+
shared_edges.append(edge)
336+
337+
lines = []
338+
for edge in shared_edges:
339+
lines.append((tuple(verts[edge[0]]), tuple(verts[edge[1]])))
340+
341+
return lines

0 commit comments

Comments
 (0)