From cf4cb625f4e2ff3e09578e7acb4b0ea3adbfcadb 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 fb4f09aa22..edf6294588 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] add 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 edf6294588..530257c4b6 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 71d8c25bca..17e3006282 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() @@ -348,6 +348,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): """ @@ -750,3 +761,17 @@ def cell2d(self): else: vertices, cell2d = None, None return vertices, cell2d + + @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 a16b748d25dc7547e1ff2509e27bd837bb3afbae 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 17e3006282..8cc7e0f7b0 100644 --- a/flopy/mf6/utils/binarygrid_util.py +++ b/flopy/mf6/utils/binarygrid_util.py @@ -355,7 +355,7 @@ def version(self): Returns ------- - version : str + version : int """ return self._version