diff --git a/autotest/test_binarygrid_util.py b/autotest/test_binarygrid_util.py index fb4f09aa22..530257c4b6 100644 --- a/autotest/test_binarygrid_util.py +++ b/autotest/test_binarygrid_util.py @@ -17,6 +17,28 @@ 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] + 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) + + assert grb.crs is None + + +def test_mfgrddis_MfGrdFile_v2(mfgrd_test_path): + 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] @@ -30,6 +52,8 @@ def test_mfgrddis_MfGrdFile(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" @@ -62,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 @@ -114,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/flow_v2.dis.grb b/examples/data/mfgrd_test/flow_v2.dis.grb new file mode 100644 index 0000000000..fd2649528c Binary files /dev/null and b/examples/data/mfgrd_test/flow_v2.dis.grb differ diff --git a/flopy/mf6/utils/binarygrid_util.py b/flopy/mf6/utils/binarygrid_util.py index 4fe45e0b0b..8cc7e0f7b0 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() @@ -152,7 +152,10 @@ def __init__(self, filename, precision="double", verbose=False): self._datadict[key] = v if self.verbose: - if nd == 0: + if ( + nd == 0 or + dt == str + ): print(f" {key} = {v}") else: print(f" {key}: min = {v.min()} max = {v.max()}") @@ -345,6 +348,17 @@ def _get_cellcenters(self): return xycellcenters # properties + @property + def version(self): + """ + MODFLOW 6 grid file version. + + Returns + ------- + version : int + """ + return self._version + @property def grid_type(self): """ @@ -747,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