From a4192b04b9e69c2d1fd2a18fd3f13c28c6beaa50 Mon Sep 17 00:00:00 2001 From: mjreno Date: Thu, 12 Feb 2026 17:41:49 -0500 Subject: [PATCH 1/3] fix grb v2 reading verbose logging --- autotest/test_binarygrid_util.py | 16 ++++++++++++++++ examples/data/mfgrd_test/gwf_uzf01.dis.grb | Bin 0 -> 5174 bytes flopy/mf6/utils/binarygrid_util.py | 5 ++++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 examples/data/mfgrd_test/gwf_uzf01.dis.grb diff --git a/autotest/test_binarygrid_util.py b/autotest/test_binarygrid_util.py index 5d56e03203..1e5c67e5b3 100644 --- a/autotest/test_binarygrid_util.py +++ b/autotest/test_binarygrid_util.py @@ -31,6 +31,22 @@ def test_mfgrddis_MfGrdFile(mfgrd_test_path): assert isinstance(modelgrid, StructuredGrid) +def test_mfgrddis_MfGrdFile_v2(mfgrd_test_path): + grb = MfGrdFile(mfgrd_test_path / "gwf_uzf01.dis.grb", verbose=True) + nodes = grb.nodes + ia = grb.ia + shape = ia.shape[0] + assert shape == nodes + 1, f"ia size ({shape}) not equal to {nodes + 1}" + + nnz = ia[-1] + ja = grb.ja + shape = ja.shape[0] + assert shape == nnz, f"ja size ({shape}) not equal to {nnz}" + + modelgrid = grb.modelgrid + assert isinstance(modelgrid, StructuredGrid) + + def test_mfgrddis_modelgrid(mfgrd_test_path): fn = mfgrd_test_path / "nwtp3.dis.grb" modelgrid = StructuredGrid.from_binary_grid_file(fn, verbose=True) diff --git a/examples/data/mfgrd_test/gwf_uzf01.dis.grb b/examples/data/mfgrd_test/gwf_uzf01.dis.grb new file mode 100644 index 0000000000000000000000000000000000000000..fd2649528c9a8021b771854e0df7a705921f3936 GIT binary patch literal 5174 zcmeIze`p(Z9LDkMbXspZH?3~YO>b-Mwr;CQyY<()HED87)22zAq`#)q>4qQ(f*=Tj zoFE8-AP9mW2!bF8!axuNAs`5XAP9mW2!bF8!axuNL7!)R7iqO7lh(f)`r_&5`6m75 za(8K=TFgiJVl8U*5zfceTCq}&`dWTPxxQGB(u1u&KZ?Rqy!@I}s>K(D4U)uLj# z9v9+jRL&Qtqg2!xrCa_JO?L{*rR>tC?w}(tS1Swuut(E3cO6gAXH_X}`W}s&!c=c+)uY)TTW397`XBblmJ8KNeKQXu3iENP zx@w1XlwRkU|7-0%a+|$Jy)v`OTSVb_r9QoOla2ctx%Tmf#WlBwPDg5kPe{1-7EDJQ zdjsl7!eYKMoz*?K>WkM0)9N>O^Q$c^`n$cpG!t*$E@7@(i*gg$YBpD2`S;w<%bAcFG9ViZtdkisARF_nlNmA~8*{9a88RRn zb=JuY8IX+{>tu!u$VQcQGD8MrW0rL?Lk47HhIKMS1}lAKc|9PLGBcS>Gm}Y)nM|gb z$z+n5Op458GQmtH1!gii$4n+MGnwR>$t1^2CgaRxl4T~74D(8kF`p&RkfY>ja)cZv zhsZ&4fILN>B>TxeGEJt)Uh+8ELmnZ!$u9B`8Ik+Ry<`Wui)<$Ya^?P5zPD}&g5V~( zMQ)YbK%12Qb5;+t?>VwsRBDa)+XWkJr%1-U4fx8>5xO)KZy5a6H+#P|tqj1*)cgNuFINY6pyI#0^5bjcNmxjAOxa)_zlW=zm z?grp)5blQHZW!)H;O;csjl$g-xH}7XV{n&&yDZ#|!(9&U@^BZ!-8r}`z}*Dg72$3Y z?xx_b1b5SLSBAR^+|9t Date: Thu, 12 Feb 2026 19:35:41 -0500 Subject: [PATCH 2/3] Xadd version and crs properties --- autotest/test_binarygrid_util.py | 12 +++++++- .../{gwf_uzf01.dis.grb => flow_v2.dis.grb} | Bin flopy/mf6/utils/binarygrid_util.py | 27 +++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) rename examples/data/mfgrd_test/{gwf_uzf01.dis.grb => flow_v2.dis.grb} (100%) diff --git a/autotest/test_binarygrid_util.py b/autotest/test_binarygrid_util.py index 1e5c67e5b3..0dcfbb192e 100644 --- a/autotest/test_binarygrid_util.py +++ b/autotest/test_binarygrid_util.py @@ -17,6 +17,8 @@ def mfgrd_test_path(example_data_path): def test_mfgrddis_MfGrdFile(mfgrd_test_path): grb = MfGrdFile(mfgrd_test_path / "nwtp3.dis.grb", verbose=True) + assert grb.version == 1 + nodes = grb.nodes ia = grb.ia shape = ia.shape[0] @@ -30,9 +32,13 @@ def test_mfgrddis_MfGrdFile(mfgrd_test_path): modelgrid = grb.modelgrid assert isinstance(modelgrid, StructuredGrid) + assert grb.crs is None + def test_mfgrddis_MfGrdFile_v2(mfgrd_test_path): - grb = MfGrdFile(mfgrd_test_path / "gwf_uzf01.dis.grb", verbose=True) + grb = MfGrdFile(mfgrd_test_path / "flow_v2.dis.grb", verbose=True) + assert grb.version == 2 + nodes = grb.nodes ia = grb.ia shape = ia.shape[0] @@ -46,6 +52,8 @@ def test_mfgrddis_MfGrdFile_v2(mfgrd_test_path): modelgrid = grb.modelgrid assert isinstance(modelgrid, StructuredGrid) + assert grb.crs == "EPSG:26916" + def test_mfgrddis_modelgrid(mfgrd_test_path): fn = mfgrd_test_path / "nwtp3.dis.grb" @@ -78,6 +86,7 @@ def test_mfgrddis_modelgrid(mfgrd_test_path): def test_mfgrddisv_MfGrdFile(mfgrd_test_path): fn = mfgrd_test_path / "flow.disv.grb" grb = MfGrdFile(fn, verbose=True) + assert grb.version == 1 nodes = grb.nodes ia = grb.ia @@ -130,6 +139,7 @@ def test_mfgrddisv_modelgrid(mfgrd_test_path): def test_mfgrddisu_MfGrdFile(mfgrd_test_path): fn = mfgrd_test_path / "keating.disu.grb" grb = MfGrdFile(fn, verbose=True) + assert grb.version == 1 nodes = grb.nodes ia = grb.ia diff --git a/examples/data/mfgrd_test/gwf_uzf01.dis.grb b/examples/data/mfgrd_test/flow_v2.dis.grb similarity index 100% rename from examples/data/mfgrd_test/gwf_uzf01.dis.grb rename to examples/data/mfgrd_test/flow_v2.dis.grb diff --git a/flopy/mf6/utils/binarygrid_util.py b/flopy/mf6/utils/binarygrid_util.py index 0ed8c235da..ea8e8cf963 100644 --- a/flopy/mf6/utils/binarygrid_util.py +++ b/flopy/mf6/utils/binarygrid_util.py @@ -81,7 +81,7 @@ def __init__(self, filename, precision="double", verbose=False): # version line = self.read_text(self._initial_len).strip() t = line.split() - self._version = t[1] + self._version = int(t[1]) # ntxt line = self.read_text(self._initial_len).strip() @@ -347,6 +347,17 @@ def _get_cellcenters(self): return xycellcenters # properties + @property + def version(self): + """ + MODFLOW 6 grid file version. + + Returns + ------- + version : str + """ + return self._version + @property def grid_type(self): """ @@ -934,3 +945,17 @@ def export(self, filename, precision=None, version=1, verbose=False): if verbose: print(f"Successfully wrote {filename}") + + @property + def crs(self): + """ + CRS user input string (version 2 GRB file only). + + Returns + ------- + crs : str or None + """ + crs = None + if "CRS" in self._datadict: + crs = self._datadict["CRS"] + return crs From c13a2f1789aa9f07235dd8a499b8be7a1f72e3ff Mon Sep 17 00:00:00 2001 From: mjreno Date: Thu, 12 Feb 2026 20:06:51 -0500 Subject: [PATCH 3/3] version is int not str --- flopy/mf6/utils/binarygrid_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flopy/mf6/utils/binarygrid_util.py b/flopy/mf6/utils/binarygrid_util.py index ea8e8cf963..11b0ec1e18 100644 --- a/flopy/mf6/utils/binarygrid_util.py +++ b/flopy/mf6/utils/binarygrid_util.py @@ -354,7 +354,7 @@ def version(self): Returns ------- - version : str + version : int """ return self._version