diff --git a/modelskill/model/factory.py b/modelskill/model/factory.py index e4bbdbdd1..da1cbf935 100644 --- a/modelskill/model/factory.py +++ b/modelskill/model/factory.py @@ -110,6 +110,8 @@ def _guess_gtype(data: Any) -> GeometryType: elif file_ext == ".nc": # could also be point or track, but we don't know return GeometryType.GRID + elif file_ext == ".dfs2": + return GeometryType.GRID else: raise ValueError( "Could not guess gtype from file extension, please specify gtype, e.g. gtype='track'" diff --git a/modelskill/model/grid.py b/modelskill/model/grid.py index a7821de56..c3c12397d 100644 --- a/modelskill/model/grid.py +++ b/modelskill/model/grid.py @@ -2,6 +2,7 @@ from pathlib import Path from typing import Optional, Sequence, get_args +import mikeio import pandas as pd import xarray as xr @@ -51,7 +52,14 @@ def __init__( ds = xr.open_mfdataset(data) else: assert Path(data).exists(), f"{data}: File does not exist." - ds = xr.open_dataset(data) + fp = Path(data) + if fp.suffix == ".dfs2": + # how robust is it to rely on Dataset.to_xarray()? + ds = mikeio.read(data).to_xarray() + for v in ds.data_vars: + ds[v].attrs["long_name"] = ds[v].name + else: + ds = xr.open_dataset(data) elif isinstance(data, Sequence) and all( isinstance(file, (str, Path)) for file in data diff --git a/tests/model/test_grid.py b/tests/model/test_grid.py index f59c5678e..73f15e10e 100644 --- a/tests/model/test_grid.py +++ b/tests/model/test_grid.py @@ -41,6 +41,22 @@ def trackobs_c2_hm0(): ) +def test_grid_from_dfs2(): + mr = ms.model_result("tests/testdata/SW/ERA5_DutchCoast.dfs2", item="swh") + assert mr.quantity.name == "swh" + assert mr.quantity.unit == "meter" + + +def test_grid_from_dfs_explicit(): + mr = ms.GridModelResult( + "tests/testdata/SW/ERA5_DutchCoast.dfs2", + item="swh", + quantity=ms.Quantity("Significant height", unit="meter"), + ) + assert mr.quantity.name == "Significant height" + assert mr.quantity.unit == "meter" + + def test_grid_from_nc(mr_ERA5_pp1d): mr = mr_ERA5_pp1d assert mr.name == "ERA5_DutchCoast" diff --git a/tests/testdata/SW/ERA5_DutchCoast.dfs2 b/tests/testdata/SW/ERA5_DutchCoast.dfs2 new file mode 100644 index 000000000..55a652f87 Binary files /dev/null and b/tests/testdata/SW/ERA5_DutchCoast.dfs2 differ