From 16bc157785ed6e118fe60ec3f8269ac6d2021bb1 Mon Sep 17 00:00:00 2001 From: DirkEilander <15379728+DirkEilander@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:45:34 +0100 Subject: [PATCH 01/28] simplify ind method (#189) * simplify ind method * add unittest for index * bump version to 1.0.4.dev --- envs/hydromt-sfincs-dev.yml | 2 +- hydromt_sfincs/__init__.py | 2 +- hydromt_sfincs/regulargrid.py | 4 +--- tests/conftest.py | 24 ++++++++++++++++++++++++ tests/test_regulargrid.py | 8 ++++++++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tests/test_regulargrid.py diff --git a/envs/hydromt-sfincs-dev.yml b/envs/hydromt-sfincs-dev.yml index fc949877..4458ad0c 100644 --- a/envs/hydromt-sfincs-dev.yml +++ b/envs/hydromt-sfincs-dev.yml @@ -9,7 +9,7 @@ dependencies: - descartes - ffmpeg - geopandas>=0.8 -- hydromt>=0.9.1 +- hydromt>=0.9.1, <0.10 - jupyterlab - matplotlib - nbsphinx diff --git a/hydromt_sfincs/__init__.py b/hydromt_sfincs/__init__.py index e4d47b46..9c051e8d 100644 --- a/hydromt_sfincs/__init__.py +++ b/hydromt_sfincs/__init__.py @@ -3,7 +3,7 @@ from os.path import dirname, join, abspath -__version__ = "1.0.3" +__version__ = "1.0.4.dev" DATADIR = join(dirname(abspath(__file__)), "data") diff --git a/hydromt_sfincs/regulargrid.py b/hydromt_sfincs/regulargrid.py index b8db21df..e4fe71e0 100644 --- a/hydromt_sfincs/regulargrid.py +++ b/hydromt_sfincs/regulargrid.py @@ -103,9 +103,7 @@ def empty_mask(self) -> xr.DataArray: def ind(self, mask: np.ndarray) -> np.ndarray: """Return indices of active cells in mask.""" assert mask.shape == (self.nmax, self.mmax) - iok = np.where(np.transpose(mask) > 0) - iok = (iok[1], iok[0]) - ind = np.ravel_multi_index(iok, (self.nmax, self.mmax), order="F") + ind = np.where(mask.ravel(order="F"))[0] return ind def write_ind( diff --git a/tests/conftest.py b/tests/conftest.py index 247d693b..9f95fe29 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,13 +3,37 @@ from os.path import abspath, dirname, join import pytest +import numpy as np from hydromt_sfincs.sfincs import SfincsModel +from hydromt_sfincs.regulargrid import RegularGrid TESTDATADIR = join(dirname(abspath(__file__)), "data") TESTMODELDIR = join(TESTDATADIR, "sfincs_test") +@pytest.fixture +def reggrid(): + # create a simple regular grid + grid = RegularGrid( + x0=318650, + y0=5040000, + dx=150, + dy=150, + nmax=84, # height + mmax=36, # width + ) + return grid + + +@pytest.fixture +def mask(reggrid): + # create a simple mask + mask = np.zeros((reggrid.nmax, reggrid.mmax), dtype="u1") + mask[2:, 3:-1] = 1 + return mask + + @pytest.fixture def weirs(): feats = [ diff --git a/tests/test_regulargrid.py b/tests/test_regulargrid.py new file mode 100644 index 00000000..c64f88b2 --- /dev/null +++ b/tests/test_regulargrid.py @@ -0,0 +1,8 @@ +import numpy as np + + +def test_ind(reggrid, mask): + ind = reggrid.ind(mask) + assert ind[0] == 254 + assert ind[-1] == 2939 + assert ind.size == np.sum(mask > 0) From d7e1d26a58b6f5687ef47da320ea3b95faaba75a Mon Sep 17 00:00:00 2001 From: DirkEilander <15379728+DirkEilander@users.noreply.github.com> Date: Wed, 10 Apr 2024 17:16:42 +0200 Subject: [PATCH 02/28] Added functionality to add source points at headwater locations (#170) * [WIP] start with including headwater points * update tests * remove river based masking of active cells * run pre-commit * remove basin_mask functionality since not used * fix tests --------- Co-authored-by: roeldegoede --- docs/api.rst | 2 +- hydromt_sfincs/sfincs.py | 88 +++++++--- hydromt_sfincs/workflows/flwdir.py | 162 +++++++++++------- tests/conftest.py | 20 +++ .../sfincs_test/gis/rivers_inflow.geojson | 17 +- tests/data/sfincs_test/gis/src.geojson | 6 +- tests/data/sfincs_test/sfincs.src | 6 +- tests/test_flwdir.py | 65 +++++++ 8 files changed, 260 insertions(+), 106 deletions(-) create mode 100644 tests/test_flwdir.py diff --git a/docs/api.rst b/docs/api.rst index b55cdf88..63f450e9 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -154,7 +154,7 @@ SFINCS workflows workflows.merge_dataarrays workflows.burn_river_rect workflows.snap_discharge - workflows.river_boundary_points + workflows.river_source_points workflows.river_centerline_from_hydrography workflows.landuse workflows.cn_to_s diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index ca4cbf47..774079d0 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -787,6 +787,7 @@ def setup_river_inflow( first_index: int = 1, keep_rivers_geom: bool = False, reverse_river_geom: bool = False, + src_type: str = "inflow", ): """Setup discharge (src) points where a river enters the model domain. @@ -833,13 +834,18 @@ def setup_river_inflow( reverse_river_geom: bool, optional If True, assume that segments in 'rivers' are drawn from downstream to upstream. Only used if 'rivers' is not None, By default False + src_type: {'inflow', 'headwater'}, optional + Source type, by default 'inflow' + If 'inflow', return points where the river flows into the model domain. + If 'headwater', return all headwater (including inflow) points within the model domain. See Also -------- setup_discharge_forcing setup_discharge_forcing_from_grid """ - da_flwdir, da_uparea, gdf_riv = None, None, None + # get hydrography data + da_uparea = None if hydrography is not None: ds = self.data_catalog.get_rasterdataset( hydrography, @@ -847,9 +853,10 @@ def setup_river_inflow( variables=["uparea", "flwdir"], buffer=5, ) - da_flwdir = ds["flwdir"] - da_uparea = ds["uparea"] - elif ( + da_uparea = ds["uparea"] # reused in river_source_points + + # get river centerlines + if ( isinstance(rivers, str) and rivers == "rivers_outflow" and rivers in self.geoms @@ -860,24 +867,35 @@ def setup_river_inflow( gdf_riv = self.data_catalog.get_geodataframe( rivers, geom=self.region ).to_crs(self.crs) - else: + elif hydrography is not None: + gdf_riv = workflows.river_centerline_from_hydrography( + da_flwdir=ds["flwdir"], + da_uparea=da_uparea, + river_upa=river_upa, + river_len=river_len, + gdf_mask=self.region, + ) + elif hydrography is None: raise ValueError("Either hydrography or rivers must be provided.") - gdf_src, gdf_riv = workflows.river_boundary_points( - region=self.region, - res=self.reggrid.dx, + # estimate buffer based on model resolution + buffer = self.reggrid.dx + if self.crs.is_geographic: + buffer = buffer * 111111.0 + + # get river inflow / headwater source points + gdf_src = workflows.river_source_points( gdf_riv=gdf_riv, - da_flwdir=da_flwdir, - da_uparea=da_uparea, - river_len=river_len, + gdf_mask=self.region, + src_type=src_type, + buffer=buffer, river_upa=river_upa, - inflow=True, + river_len=river_len, + da_uparea=da_uparea, reverse_river_geom=reverse_river_geom, logger=self.logger, ) - n = len(gdf_src.index) - self.logger.info(f"Found {n} river inflow points.") - if n == 0: + if gdf_src.empty: return # set forcing src pnts @@ -968,7 +986,8 @@ def setup_river_outflow( -------- setup_mask_bounds """ - da_flwdir, da_uparea, gdf_riv = None, None, None + # get hydrography data + da_uparea = None if hydrography is not None: ds = self.data_catalog.get_rasterdataset( hydrography, @@ -976,9 +995,10 @@ def setup_river_outflow( variables=["uparea", "flwdir"], buffer=5, ) - da_flwdir = ds["flwdir"] - da_uparea = ds["uparea"] - elif ( + da_uparea = ds["uparea"] # reused in river_source_points + + # get river centerlines + if ( isinstance(rivers, str) and rivers == "rivers_inflow" and rivers in self.geoms @@ -989,22 +1009,36 @@ def setup_river_outflow( gdf_riv = self.data_catalog.get_geodataframe( rivers, geom=self.region ).to_crs(self.crs) + elif hydrography is not None: + gdf_riv = workflows.river_centerline_from_hydrography( + da_flwdir=ds["flwdir"], + da_uparea=da_uparea, + river_upa=river_upa, + river_len=river_len, + gdf_mask=self.region, + ) else: raise ValueError("Either hydrography or rivers must be provided.") - # TODO reproject region and gdf_riv to utm zone if model crs is geographic - gdf_out, gdf_riv = workflows.river_boundary_points( - region=self.region, - res=self.reggrid.dx, + # estimate buffer based on model resolution + buffer = self.reggrid.dx + if self.crs.is_geographic: + buffer = buffer * 111111.0 + + # get river inflow / headwater source points + gdf_out = workflows.river_source_points( gdf_riv=gdf_riv, - da_flwdir=da_flwdir, - da_uparea=da_uparea, - river_len=river_len, + gdf_mask=self.region, + src_type="outflow", + buffer=buffer, river_upa=river_upa, - inflow=False, + river_len=river_len, + da_uparea=da_uparea, reverse_river_geom=reverse_river_geom, logger=self.logger, ) + if gdf_out.empty: + return if len(gdf_out) > 0: if "rivwth" in gdf_out.columns: diff --git a/hydromt_sfincs/workflows/flwdir.py b/hydromt_sfincs/workflows/flwdir.py index 0756d8f2..e13e33fe 100644 --- a/hydromt_sfincs/workflows/flwdir.py +++ b/hydromt_sfincs/workflows/flwdir.py @@ -11,7 +11,7 @@ logger = logging.getLogger(__name__) __all__ = [ - "river_boundary_points", + "river_source_points", "river_centerline_from_hydrography", ] @@ -21,7 +21,7 @@ def river_centerline_from_hydrography( da_uparea: xr.DataArray, river_upa: float = 10, river_len: float = 1e3, - mask: gpd.GeoDataFrame = None, + gdf_mask: gpd.GeoDataFrame = None, ) -> gpd.GeoDataFrame: """Returns the centerline of rivers based on a flow direction raster data (`da_flwdir`). @@ -37,7 +37,7 @@ def river_centerline_from_hydrography( river_len: float, optional Mimimum river length [m] within the model domain to define river cells, by default 1000 m. - mask: geopandas.GeoDataFrame, optional + gdf_mask: geopandas.GeoDataFrame, optional Polygon to clip river center lines before calculating the river length, by default None. @@ -47,108 +47,142 @@ def river_centerline_from_hydrography( River line vector data. """ # get river network from hydrography based on upstream area mask - flwdir = hydromt.flw.flwdir_from_da(da_flwdir, mask=da_uparea >= river_upa) - gdf_riv = gpd.GeoDataFrame.from_features(flwdir.streams(), crs=da_flwdir.raster.crs) + riv_mask = da_uparea >= river_upa + if not riv_mask.any(): + return gpd.GeoDataFrame() + flwdir = hydromt.flw.flwdir_from_da(da_flwdir, mask=riv_mask) + feats = flwdir.streams(uparea=da_uparea.values) + gdf_riv = gpd.GeoDataFrame.from_features(feats, crs=da_flwdir.raster.crs) # clip to mask and remove empty geometries - if mask is not None: - gdf_riv = gdf_riv.to_crs(mask.crs).clip(mask.unary_union) + if gdf_mask is not None and isinstance(gdf_mask, gpd.GeoDataFrame): + gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.unary_union) gdf_riv = gdf_riv[~gdf_riv.is_empty] # create river network from gdf to get distance from outlet 'rivlen' - gdf_riv["rivlen"] = gdf_riv.geometry.length + # length of river segments + if gdf_riv.crs.is_geographic: + gdf_riv["seglen"] = gdf_riv.to_crs("epsg:3857").geometry.length + else: + gdf_riv["seglen"] = gdf_riv.geometry.length + gdf_riv = gdf_riv[gdf_riv["seglen"] > 0] + if gdf_riv.empty or river_len == 0: + return gdf_riv + # accumulate to get river length from outlet flwdir = pyflwdir.from_dataframe(gdf_riv.set_index("idx"), ds_col="idx_ds") - gdf_riv["rivlen"] = flwdir.accuflux(gdf_riv["rivlen"].values, direction="down") + gdf_riv["rivdst"] = flwdir.accuflux(gdf_riv["seglen"].values, direction="down") + # get maximum river length from outlet (at headwater segments) for each river segment + gdf_riv["rivlen"] = flwdir.fillnodata( + np.where(flwdir.n_upstream == 0, gdf_riv["rivdst"], 0), 0 + ) + # filter river network based on total length gdf_riv = gdf_riv[gdf_riv["rivlen"] >= river_len] return gdf_riv -def river_boundary_points( - region: gpd.GeoDataFrame, - res: float, - gdf_riv: gpd.GeoDataFrame = None, - da_flwdir: xr.DataArray = None, - da_uparea: xr.DataArray = None, +def river_source_points( + gdf_riv: gpd.GeoDataFrame, + gdf_mask: gpd.GeoDataFrame, + src_type: str = "inflow", + buffer: float = 100, river_upa: float = 10, river_len: float = 1e3, - inflow: bool = True, + da_uparea: xr.DataArray = None, reverse_river_geom: bool = False, logger: logging.Logger = logger, ) -> Tuple[gpd.GeoDataFrame, gpd.GeoDataFrame]: """Returns the locations where a river flows in (`inflow=True`) - or out (`inflow=False`) of the model region. + or out (`inflow=False`) of the model gdf_mask. Rivers are based on either a river network vector data (`gdf_riv`) or a flow direction raster data (`da_flwdir`). Parameters ---------- - region: geopandas.GeoDataFrame - Polygon of model region of interest. - res: float - Model resolution [m]. - gdf_riv: geopandas.GeoDataFrame, optional + gdf_riv: geopandas.GeoDataFrame River network vector data, by default None. - da_flwdir: xarray.DataArray, optional - D8 flow direction raster data, by default None. - da_uparea: xarray.DataArray, optional - River upstream area raster data, by default None. + Requires 'uparea' and 'rivlen' attributes to + check for river length and upstream area thresholds. + gdf_mask: geopandas.GeoDataFrame + Polygon of model gdf_mask of interest. + src_type: ['inflow', 'outflow', 'headwater'], optional + Type of river source points to return, by default 'inflow'. + If 'inflow', return points where the river flows into the model domain. + If 'outflow', return points where the river flows out of the model domain. + If 'headwater', return all headwater (including inflow) points within the model domain. + buffer: float, optional + Buffer around gdf_mask to select river source points, by default 100 m. river_upa : float, optional Minimum upstream area threshold for rivers [km2], by default 10.0 river_len: float, optional Mimimum river length [m] within the model domain to define river cells, by default 1000 m. - inflow: bool, optional - If True, return inflow otherwise outflow boundary points, by default True. + da_uparea: xarray.DataArray, optional + River upstream area raster data, by default None. reverse_river_geom: bool, optional If True, assume that segments in 'rivers' are drawn from downstream to upstream. Only used if 'rivers' is not None, By default False Returns ------- - gdf_src, gdf_riv: geopandas.GeoDataFrame - In-/outflow points and river line vector data. + gdf_pnt: geopandas.GeoDataFrame + Source points """ - if not isinstance(region, (gpd.GeoDataFrame, gpd.GeoSeries)) and np.all( - region.geometry.type == "Polygon" + # data checks + if not ( + isinstance(gdf_mask, (gpd.GeoDataFrame, gpd.GeoSeries)) + and np.all(np.isin(gdf_mask.geometry.type, ["Polygon", "MultiPolygon"])) + ): + raise TypeError("gdf_mask must be a GeoDataFrame of Polygons.") + if not ( + isinstance(gdf_riv, (gpd.GeoDataFrame, gpd.GeoSeries)) + and np.all(np.isin(gdf_riv.geometry.type, ["LineString", "MultiLineString"])) ): - raise ValueError("Boundary must be a GeoDataFrame of LineStrings.") - if res > 0.01 and region.crs.is_geographic: - # provide warning + raise TypeError("gdf_riv must be a GeoDataFrame of LineStrings.") + if src_type not in ["inflow", "outflow", "headwater"]: + raise ValueError("src_type must be either 'inflow', 'outflow', or 'headwater'.") + if gdf_mask.crs.is_geographic: # to pseudo mercator + gdf_mask = gdf_mask.to_crs("epsg:3857") + + # clip river to model gdf_mask + gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.unary_union) + # filter river network based on uparea and length + if "uparea" in gdf_riv.columns: + gdf_riv = gdf_riv[gdf_riv["uparea"] >= river_upa] + if "rivlen" in gdf_riv.columns: + gdf_riv = gdf_riv[gdf_riv["rivlen"] > river_len] + if gdf_riv.empty: logger.warning( - "The region crs is geographic, while the resolution seems to be in meters." + "No rivers matching the uparea and rivlen thresholds found in gdf_riv." ) + return gpd.GeoDataFrame() - if gdf_riv is None and (da_flwdir is None or da_uparea is None): - raise ValueError("Either gdf_riv or da_flwdir and da_uparea must be provided.") - elif gdf_riv is None: # get river network from hydrography - gdf_riv = river_centerline_from_hydrography( - da_flwdir, da_uparea, river_upa, river_len, mask=region - ) - else: - # clip river to model region - gdf_riv = gdf_riv.to_crs(region.crs).clip(region.unary_union) - # filter river network based on uparea and length - if "uparea" in gdf_riv.columns: - gdf_riv = gdf_riv[gdf_riv["uparea"] >= river_upa] - if "rivlen" in gdf_riv.columns: - gdf_riv = gdf_riv[gdf_riv["rivlen"] > river_len] + # get source points 1m before the start/end of the river # a positive dx results in a point near the start of the line (inflow) # a negative dx results in a point near the end of the line (outflow) - dx = res / 5 if inflow else -res / 5 - if reverse_river_geom: - dx = -dx - - # move point a bit into the model domain - gdf_pnt = gdf_riv.interpolate(dx).to_frame("geometry") - # keep points on boundary cells - bnd = region.boundary.buffer(res).unary_union # NOTE should be single geom - gdf_pnt = gdf_pnt[gdf_pnt.within(bnd)].reset_index(drop=True) + dx = -1 if reverse_river_geom else 1 + gdf_up = gdf_riv.interpolate(dx).to_frame("geometry") + gdf_up["riv_idx"] = gdf_riv.index + gdf_ds = gdf_riv.interpolate(-dx).to_frame("geometry") + gdf_ds["riv_idx"] = gdf_riv.index + + # get points that do not intersect with up/downstream end of other river segments + # use a small buffer of 5m around these points to account for dx and avoid issues with inprecise river geometries + if src_type in ["inflow", "headwater"]: + pnts_ds = gdf_ds.buffer(5).unary_union + gdf_pnt = gdf_up[~gdf_up.intersects(pnts_ds)].reset_index(drop=True) + elif src_type == "outflow": + pnts_up = gdf_up.buffer(5).unary_union + gdf_pnt = gdf_ds[~gdf_ds.intersects(pnts_up)].reset_index(drop=True) + + # get buffer around gdf_mask, in- and outflow points should be within this buffer + if src_type in ["inflow", "outflow"]: + bnd = gdf_mask.boundary.buffer(buffer).unary_union + gdf_pnt = gdf_pnt[gdf_pnt.intersects(bnd)].reset_index(drop=True) + + # log numer of source points + logger.info(f"Found {gdf_pnt.index.size} {src_type} points.") # add uparea attribute if da_uparea is provided if da_uparea is not None: gdf_pnt["uparea"] = da_uparea.raster.sample(gdf_pnt).values gdf_pnt = gdf_pnt.sort_values("uparea", ascending=False).reset_index(drop=True) - if "rivwth" in gdf_riv.columns: - gdf_pnt = hydromt.gis_utils.nearest_merge( - gdf_pnt, gdf_riv, columns=["rivwth"], max_dist=10 - ) - return gdf_pnt, gdf_riv + return gdf_pnt diff --git a/tests/conftest.py b/tests/conftest.py index 9f95fe29..94980b57 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,10 +1,12 @@ """add global fixtures""" from os.path import abspath, dirname, join +import numpy as np import pytest import numpy as np +from hydromt import DataCatalog from hydromt_sfincs.sfincs import SfincsModel from hydromt_sfincs.regulargrid import RegularGrid @@ -61,3 +63,21 @@ def mod(tmpdir): mod.read() mod.set_root(str(tmpdir), mode="r+") return mod + + +@pytest.fixture +def data_catalog(): + return DataCatalog("artifact_data") + + +@pytest.fixture +def hydrography(data_catalog): + bbox = [12.64, 45.48, 12.82, 45.59] + ds_hydro = data_catalog.get_rasterdataset( + "merit_hydro", variables=["flwdir", "uparea", "basins"], bbox=bbox + ).load() + da_mask = (ds_hydro["basins"] == 210000039).astype(np.uint8) + da_mask.raster.set_crs(ds_hydro.raster.crs) + da_mask.raster.set_nodata(0) + gdf_mask = da_mask.raster.vectorize() + return ds_hydro["flwdir"], ds_hydro["uparea"], gdf_mask diff --git a/tests/data/sfincs_test/gis/rivers_inflow.geojson b/tests/data/sfincs_test/gis/rivers_inflow.geojson index 75169010..5221ab44 100644 --- a/tests/data/sfincs_test/gis/rivers_inflow.geojson +++ b/tests/data/sfincs_test/gis/rivers_inflow.geojson @@ -2,13 +2,14 @@ "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::32633" } }, "features": [ -{ "type": "Feature", "properties": { "idx": 16152, "idx_ds": 14884, "pit": false, "rivlen": 6648.7090264593971 }, "geometry": { "type": "LineString", "coordinates": [ [ 317317.852918574120849, 5044630.720567373558879 ], [ 317320.552235712530091, 5044723.300652908161283 ], [ 317323.251591718173586, 5044815.880749752745032 ], [ 317260.885173859074712, 5044910.358359371311963 ], [ 317263.585570152092259, 5045002.938477858901024 ], [ 317266.286005324334837, 5045095.518607657402754 ], [ 317268.986479375278577, 5045188.098748766817153 ], [ 317334.049404400866479, 5045186.201250261627138 ], [ 317399.112330119940452, 5045184.304428238421679 ], [ 317464.175256532384083, 5045182.408282697200775 ], [ 317529.238183637848124, 5045180.512813637033105 ], [ 317594.301111436099745, 5045178.618021056056023 ], [ 317662.058777295635082, 5045269.30406329780817 ], [ 317727.120743889186997, 5045267.410624660551548 ], [ 317792.182711175875738, 5045265.517862500622869 ], [ 317857.244679155293852, 5045263.625776817090809 ], [ 317922.306647827266715, 5045261.73436760995537 ], [ 317987.368617191677913, 5045259.843634877353907 ], [ 318052.430587247945368, 5045257.953578618355095 ], [ 318117.492557995952666, 5045256.064198832958937 ], [ 318182.554529435408767, 5045254.175495520234108 ], [ 318247.616501565964427, 5045252.287468680180609 ], [ 318312.678474387503229, 5045250.400118310004473 ], [ 318377.740447899850551, 5045248.513444410637021 ], [ 318442.802422102424316, 5045246.627446980215609 ], [ 318507.864396995282732, 5045244.742126018740237 ], [ 318572.92637257790193, 5045242.857481524348259 ], [ 318637.988348849990871, 5045240.973513497970998 ], [ 318703.050325811491348, 5045239.090221939608455 ], [ 318768.112303461995907, 5045237.207606843672693 ], [ 318833.174281801097095, 5045235.325668213889003 ], [ 318898.236260828853119, 5045233.44440604839474 ], [ 318963.298240544856526, 5045231.563820346258581 ], [ 319028.360220948699862, 5045229.683911105617881 ], [ 319093.422202040324919, 5045227.804678327403963 ], [ 319158.484183819324244, 5045225.926122009754181 ], [ 319223.546166285465006, 5045224.048242151737213 ], [ 319288.608149438456167, 5045222.171038753353059 ], [ 319353.670133278064895, 5045220.294511813670397 ], [ 319416.063369960756972, 5045125.83847651258111 ], [ 319483.794103015912697, 5045216.543487306684256 ], [ 319548.8560889136279, 5045214.668989739380777 ], [ 319613.918075496912934, 5045212.795168625190854 ], [ 319678.980062765418552, 5045210.922023965977132 ], [ 319744.042050718911923, 5045209.049555762670934 ], [ 319809.104039357160218, 5045207.177764010615647 ], [ 319874.166028679697774, 5045205.306648711673915 ], [ 319939.228018686524592, 5045203.436209863983095 ], [ 320004.290009377291426, 5045201.566447466611862 ], [ 320069.352000751474407, 5045199.69736152049154 ], [ 320131.755833059898578, 5045105.248756496235728 ], [ 320196.818788348115049, 5045103.381022477522492 ], [ 320261.88174431794323, 5045101.513964904472232 ], [ 320326.944700969266705, 5045099.647583779878914 ], [ 320392.007658301736228, 5045097.781879100948572 ], [ 320457.070616315118968, 5045095.916850868612528 ], [ 320522.13357500906568, 5045094.052499081008136 ], [ 320587.196534383459948, 5045092.188823738135397 ], [ 320652.259494437894318, 5045090.325824838131666 ], [ 320717.322455172252376, 5045088.463502380996943 ], [ 320782.385416586068459, 5045086.601856365799904 ], [ 320847.448378679226153, 5045084.740886791609228 ], [ 320912.511341451434419, 5045082.880593657493591 ], [ 320977.574304902402218, 5045081.020976963452995 ], [ 321042.637269031780306, 5045079.162036708556116 ], [ 321107.700233839452267, 5045077.303772890940309 ], [ 321172.763199325068854, 5045075.446185510605574 ], [ 321237.826165488222614, 5045073.589274567551911 ], [ 321302.889132328913547, 5045071.733040058985353 ], [ 321367.952099846675992, 5045069.877481986768544 ], [ 321433.015068041277118, 5045068.022600349038839 ], [ 321498.07803691260051, 5045066.168395143002272 ], [ 321563.141006460238714, 5045064.314866369590163 ], [ 321628.203976683900692, 5045062.462014029733837 ], [ 321693.26694758341182, 5045060.609838119708002 ], [ 321758.329919158364646, 5045058.758338641375303 ], [ 321823.392891408409923, 5045056.907515591010451 ], [ 321885.823730876029003, 5044962.477158785797656 ], [ 321950.887666980037466, 5044960.62768763396889 ], [ 322015.951603757217526, 5044958.77889291010797 ], [ 322081.015541207627393, 5044956.930774612352252 ], [ 322146.079479330859613, 5044955.08333274256438 ], [ 322213.770739075145684, 5045045.816782272420824 ], [ 322278.833716044609901, 5045043.970694209448993 ] ] } }, -{ "type": "Feature", "properties": { "idx": 10859, "idx_ds": 14884, "pit": false, "rivlen": 2839.9998192306093 }, "geometry": { "type": "LineString", "coordinates": [ [ 322781.434200728777796, 5046697.512981650419533 ], [ 322713.767283682827838, 5046606.773889691568911 ], [ 322646.098479583044536, 5046516.035487552173436 ], [ 322581.050901019130833, 5046517.878178010694683 ], [ 322578.427788468194194, 5046425.297775230370462 ], [ 322575.804713668418117, 5046332.717383888550103 ], [ 322573.181676620384678, 5046240.137003984302282 ], [ 322570.55867732455954, 5046147.556635519489646 ], [ 322632.988107778073754, 5046053.133583151735365 ], [ 322630.366146633517928, 5045960.553236592561007 ], [ 322692.798541183350608, 5045866.130880603566766 ], [ 322690.177618135814555, 5045773.55055595561862 ], [ 322752.612976667878684, 5045679.128896361216903 ], [ 322749.993091663403902, 5045586.548593632876873 ], [ 322747.373244373477064, 5045493.968302347697318 ], [ 322679.694303225143813, 5045403.229371787980199 ], [ 322612.013475374842528, 5045312.491131012327969 ], [ 322544.330760861688759, 5045221.753580015152693 ], [ 322479.269706231192686, 5045223.596960472874343 ], [ 322414.208652275206987, 5045225.441017352975905 ], [ 322346.52212744060671, 5045134.70551089476794 ], [ 322278.833716044609901, 5045043.970694209448993 ] ] } }, -{ "type": "Feature", "properties": { "idx": 896, "idx_ds": 10859, "pit": false, "rivlen": 4779.930632428006 }, "geometry": { "type": "LineString", "coordinates": [ [ 321482.641141249216162, 5047503.86443398706615 ], [ 321501.639048813842237, 5047475.111896035261452 ], [ 321566.676987534854561, 5047473.257716386578977 ], [ 321629.076994014380034, 5047378.823710976168513 ], [ 321626.439099021023139, 5047286.243220208212733 ], [ 321688.842070675455034, 5047191.809911049902439 ], [ 321753.882900070631877, 5047189.957757667638361 ], [ 321816.28879955841694, 5047095.525809776969254 ], [ 321881.330593178281561, 5047093.675008241087198 ], [ 321946.372387497220188, 5047091.824883125722408 ], [ 322008.782178246765397, 5046997.394971938803792 ], [ 322073.82493676955346, 5046995.546198667958379 ], [ 322138.86769598943647, 5046993.698101814836264 ], [ 322203.910455906065181, 5046991.850681381300092 ], [ 322268.953216519148555, 5046990.00393736269325 ], [ 322333.995977828453761, 5046988.157869760878384 ], [ 322399.038739833747968, 5046986.312478574924171 ], [ 322464.0815025344491, 5046984.467763802036643 ], [ 322529.124265930848196, 5046982.623725444078445 ], [ 322594.167030022246763, 5046980.780363499186933 ], [ 322659.209794808411971, 5046978.937677966430783 ], [ 322724.252560289227404, 5046977.095668844878674 ], [ 322789.295326464285608, 5046975.254336133599281 ], [ 322851.718643160886131, 5046880.833215908147395 ], [ 322849.09923068160424, 5046788.25276342779398 ], [ 322781.434200728777796, 5046697.512981650419533 ] ] } }, -{ "type": "Feature", "properties": { "idx": 8412, "idx_ds": 10859, "pit": false, "rivlen": 4801.4498644109563 }, "geometry": { "type": "LineString", "coordinates": [ [ 323915.856173059903085, 5047684.699420366436243 ], [ 323848.215789249981754, 5047593.948675882071257 ], [ 323783.179751736810431, 5047595.779179214499891 ], [ 323715.536518208216876, 5047505.029801967553794 ], [ 323650.49951922748005, 5047506.861659084446728 ], [ 323582.853436042438261, 5047416.113649071194232 ], [ 323517.815475604846142, 5047417.946859977208078 ], [ 323450.166542825230863, 5047327.200217196717858 ], [ 323382.515722643816844, 5047236.454264258034527 ], [ 323314.863015099545009, 5047145.709001156501472 ], [ 323247.208420231530908, 5047054.96442788746208 ], [ 323244.594709105964284, 5046962.383946596644819 ], [ 323176.937301789526828, 5046871.640075599774718 ], [ 323109.27800725447014, 5046780.896894428879023 ], [ 323106.662483467254788, 5046688.316449463367462 ], [ 323039.000376657466404, 5046597.573970547877252 ], [ 322971.336382734123617, 5046506.832181451842189 ], [ 322973.953756684320979, 5046599.412601556628942 ], [ 322911.525511753861792, 5046693.83233954757452 ], [ 322846.479855896090157, 5046695.672322393395007 ], [ 322781.434200728777796, 5046697.512981650419533 ] ] } }, -{ "type": "Feature", "properties": { "idx": 7081, "idx_ds": 8412, "pit": false, "rivlen": 5935.9603288002381 }, "geometry": { "type": "LineString", "coordinates": [ [ 324776.863968961988576, 5048216.456981705501676 ], [ 324709.241647010203451, 5048125.69735639449209 ], [ 324641.617437186010648, 5048034.938420946709812 ], [ 324576.586205770261586, 5048036.760802630335093 ], [ 324508.959145894623362, 5047946.003234423696995 ], [ 324443.926952959271148, 5047947.826969872228801 ], [ 324376.297043094295077, 5047857.070768904872239 ], [ 324311.263888650108129, 5047858.895858122967184 ], [ 324246.230734904180281, 5047860.721623728983104 ], [ 324181.19758185709361, 5047862.548065725713968 ], [ 324113.56289767078124, 5047771.794586765579879 ], [ 324048.528783124231268, 5047773.622382535599172 ], [ 323980.891249095089734, 5047682.870270816609263 ], [ 323915.856173059903085, 5047684.699420366436243 ] ] } }, -{ "type": "Feature", "properties": { "idx": 7059, "idx_ds": 8412, "pit": false, "rivlen": 6087.3256808398864 }, "geometry": { "type": "LineString", "coordinates": [ [ 323346.219378565321676, 5048256.675819529220462 ], [ 323408.636396655580029, 5048162.259956204332411 ], [ 323471.055378940887749, 5048067.844778727740049 ], [ 323533.476325376657769, 5047973.430287101306021 ], [ 323601.117818619997706, 5048064.177694470621645 ], [ 323666.149039515061304, 5048062.345166937448084 ], [ 323731.180261113564484, 5048060.513315798714757 ], [ 323728.572876859572716, 5047967.93270149640739 ], [ 323796.211483415099792, 5048058.682141054421663 ], [ 323858.637248025392182, 5047964.271026403643191 ], [ 323856.031827110797167, 5047871.69042157009244 ], [ 323788.392331925220788, 5047780.940329549834132 ], [ 323853.426443676406052, 5047779.109828205779195 ], [ 323915.856173059903085, 5047684.699420366436243 ] ] } }, -{ "type": "Feature", "properties": { "idx": 4226, "idx_ds": 7081, "pit": false, "rivlen": 10509.221184722774 }, "geometry": { "type": "LineString", "coordinates": [ [ 328209.030331759888213, 5048993.231382192112505 ], [ 328181.268359407375101, 5048955.922479469329119 ], [ 328113.704410359845497, 5048865.127519024536014 ], [ 328046.138572573894635, 5048774.333248464390635 ], [ 327978.570846088579856, 5048683.539667789824307 ], [ 327916.093371216848027, 5048777.908328552730381 ], [ 327851.070771580096334, 5048779.696883112192154 ], [ 327786.04817263816949, 5048781.486114014871418 ], [ 327721.025574391474947, 5048783.27602126263082 ], [ 327656.00297684018733, 5048785.066604854539037 ], [ 327590.980379984597676, 5048786.857864793390036 ], [ 327525.957783824880607, 5048788.649801079183817 ], [ 327463.488054458110128, 5048883.023199899122119 ], [ 327398.466422700206749, 5048884.816487887874246 ], [ 327335.999620497226715, 5048979.191247972659767 ], [ 327270.978953160112724, 5048980.985887664370239 ], [ 327205.958286522538401, 5048982.781203705817461 ], [ 327138.379902650369331, 5048891.996403333730996 ], [ 327073.358274384750985, 5048893.793073072098196 ], [ 327005.777039637905546, 5048803.009639935567975 ], [ 326940.7544497550698, 5048804.807663375511765 ], [ 326873.170364196063019, 5048714.0255974708125 ], [ 326870.608904660621192, 5048621.44484331086278 ], [ 326805.584390180418268, 5048623.244221447966993 ], [ 326737.996527747309301, 5048532.463535306043923 ], [ 326672.971051682892721, 5048534.264267148450017 ], [ 326605.380338601884432, 5048443.484948233701289 ], [ 326540.353900964139029, 5048445.287033787928522 ], [ 326475.327464022557251, 5048447.089795700274408 ], [ 326410.301027777604759, 5048448.89323397539556 ], [ 326345.274592229456175, 5048450.697348609566689 ], [ 326277.678141783049796, 5048359.921428979374468 ], [ 326212.650744670594577, 5048361.726897332817316 ], [ 326147.623348254826851, 5048363.533042050898075 ], [ 326082.59595253597945, 5048365.339863134548068 ], [ 326017.568557514343411, 5048367.147360583767295 ], [ 325955.11599359055981, 5048461.536240063607693 ], [ 325890.089562928362284, 5048463.345089253969491 ], [ 325825.063132965238765, 5048465.154614810831845 ], [ 325760.036703701538499, 5048466.964816735126078 ], [ 325697.588994490448385, 5048561.356408222578466 ], [ 325632.56352960865479, 5048563.167961890809238 ], [ 325567.538065428147092, 5048564.980191928334534 ], [ 325499.930993646383286, 5048474.212388136424124 ], [ 325434.904567883873824, 5048476.025971915572882 ], [ 325369.878142822592054, 5048477.840232067741454 ], [ 325304.851718462596182, 5048479.655168594792485 ], [ 325239.825294804293662, 5048481.470781493932009 ], [ 325174.798871847859118, 5048483.287070769816637 ], [ 325172.212485807249323, 5048390.706377064809203 ], [ 325107.185100576141849, 5048392.523343715816736 ], [ 325039.569441279105376, 5048301.760306535288692 ], [ 324974.541094485786743, 5048303.578626939095557 ], [ 324906.922584951040335, 5048212.816957004368305 ], [ 324841.893276606220752, 5048214.636631164699793 ], [ 324774.271916895755567, 5048123.876328473910689 ], [ 324776.863968961988576, 5048216.456981705501676 ] ] } }, -{ "type": "Feature", "properties": { "idx": 3269, "idx_ds": 7081, "pit": false, "rivlen": 6897.1489752897605 }, "geometry": { "type": "LineString", "coordinates": [ [ 324537.761280027509201, 5049060.525895957835019 ], [ 324540.111560188117437, 5049056.971507646143436 ], [ 324537.515320308331866, 5048964.390755049884319 ], [ 324534.919117764104158, 5048871.810013936832547 ], [ 324597.346479434694629, 5048777.406234257854521 ], [ 324529.726824684301391, 5048686.648566163145006 ], [ 324592.156187070882879, 5048592.244807437993586 ], [ 324654.587513500766363, 5048497.841734572313726 ], [ 324717.020803929539397, 5048403.439347565174103 ], [ 324714.427714325021952, 5048310.858672353439033 ], [ 324776.863968961988576, 5048216.456981705501676 ] ] } } +{ "type": "Feature", "properties": { "idx": 14884, "idx_ds": 16458, "pit": false, "uparea": 4464.71875, "seglen": 771.83868994732154, "rivdst": 771.83868994732154, "rivlen": 10509.221184746086 }, "geometry": { "type": "LineString", "coordinates": [ [ 322278.833716050314251, 5045043.970694203861058 ], [ 322341.271297740284353, 5044949.545065672136843 ], [ 322338.645939589070622, 5044856.964860216714442 ], [ 322401.08648500306299, 5044762.539928111247718 ], [ 322463.528993797488511, 5044668.115681963041425 ], [ 322525.973465927876532, 5044573.692121772095561 ], [ 322588.419901350163855, 5044479.269247545860708 ], [ 322650.868300019472372, 5044384.847059288993478 ] ] } }, +{ "type": "Feature", "properties": { "idx": 16152, "idx_ds": 14884, "pit": false, "uparea": 11.159213066101074, "seglen": 5876.8703365176552, "rivdst": 6648.7090264649769, "rivlen": 6648.7090264649769 }, "geometry": { "type": "LineString", "coordinates": [ [ 317317.852918575285003, 5044630.720567367970943 ], [ 317320.55223571381066, 5044723.300652902573347 ], [ 317323.251591719337739, 5044815.880749748088419 ], [ 317260.88517386035528, 5044910.358359365724027 ], [ 317263.58557015331462, 5045002.938477852381766 ], [ 317266.286005325498991, 5045095.518607651814818 ], [ 317268.986479376559146, 5045188.09874876216054 ], [ 317334.049404402030632, 5045186.201250256970525 ], [ 317399.112330121221021, 5045184.304428233765066 ], [ 317464.175256533664651, 5045182.408282692544162 ], [ 317529.2381836391869, 5045180.512813631445169 ], [ 317594.301111437613145, 5045178.61802105139941 ], [ 317662.058777297148481, 5045269.304063292220235 ], [ 317727.120743890875019, 5045267.41062465403229 ], [ 317792.182711177505553, 5045265.517862495034933 ], [ 317857.244679156923667, 5045263.625776811502874 ], [ 317922.306647829129361, 5045261.734367604367435 ], [ 317987.368617193424143, 5045259.843634870834649 ], [ 318052.430587249866221, 5045257.953578611835837 ], [ 318117.492557997698896, 5045256.064198826439679 ], [ 318182.554529437213205, 5045254.175495514646173 ], [ 318247.616501568001695, 5045252.287468674592674 ], [ 318312.678474389598705, 5045250.400118304416537 ], [ 318377.740447902062442, 5045248.513444404117763 ], [ 318442.802422104636207, 5045246.627446973696351 ], [ 318507.864396997552831, 5045244.742126012220979 ], [ 318572.926372580230236, 5045242.857481518760324 ], [ 318637.988348852319177, 5045240.973513492383063 ], [ 318703.05032581393607, 5045239.090221933089197 ], [ 318768.112303464440629, 5045237.207606838084757 ], [ 318833.174281803774647, 5045235.325668208301067 ], [ 318898.236260831588879, 5045233.444406042806804 ], [ 318963.298240547534078, 5045231.563820339739323 ], [ 319028.360220951493829, 5045229.683911100029945 ], [ 319093.422202043177094, 5045227.804678320884705 ], [ 319158.484183822292835, 5045225.926122003234923 ], [ 319223.546166288258974, 5045224.048242146149278 ], [ 319288.60814944136655, 5045222.171038747765124 ], [ 319353.670133281033486, 5045220.294511808082461 ], [ 319416.063369963841978, 5045125.838476506993175 ], [ 319483.794103018997703, 5045216.54348730109632 ], [ 319548.856088916771114, 5045214.668989732861519 ], [ 319613.918075500172563, 5045212.795168619602919 ], [ 319678.980062768678181, 5045210.922023960389197 ], [ 319744.04205072222976, 5045209.049555757082999 ], [ 319809.104039360536262, 5045207.177764004096389 ], [ 319874.166028683190234, 5045205.30664870608598 ], [ 319939.228018690133467, 5045203.436209858395159 ], [ 320004.290009380783886, 5045201.566447461023927 ], [ 320069.352000755257905, 5045199.697361513972282 ], [ 320131.755833063740283, 5045105.248756491579115 ], [ 320196.818788351723924, 5045103.381022471934557 ], [ 320261.881744321726728, 5045101.513964899815619 ], [ 320326.944700973108411, 5045099.647583774290979 ], [ 320392.007658305694349, 5045097.781879095360637 ], [ 320457.070616319077089, 5045095.916850863955915 ], [ 320522.133575013023801, 5045094.052499075420201 ], [ 320587.196534387534484, 5045092.188823733478785 ], [ 320652.259494442143477, 5045090.325824833475053 ], [ 320717.32245517661795, 5045088.46350237634033 ], [ 320782.385416590492241, 5045086.601856360211968 ], [ 320847.448378683708142, 5045084.740886786952615 ], [ 320912.511341455916408, 5045082.880593652836978 ], [ 320977.574304906884208, 5045081.020976958796382 ], [ 321042.637269036378711, 5045079.16203670296818 ], [ 321107.70023384410888, 5045077.303772886283696 ], [ 321172.763199329725467, 5045075.446185505948961 ], [ 321237.826165492879227, 5045073.589274562895298 ], [ 321302.88913233357016, 5045071.73304005432874 ], [ 321367.952099851565436, 5045069.877481982111931 ], [ 321433.015068046166562, 5045068.022600343450904 ], [ 321498.078036917606369, 5045066.168395137414336 ], [ 321563.141006465186365, 5045064.314866364002228 ], [ 321628.203976689022966, 5045062.462014024145901 ], [ 321693.266947588417679, 5045060.609838114120066 ], [ 321758.329919163370505, 5045058.758338635787368 ], [ 321823.392891413765028, 5045056.907515586353838 ], [ 321885.823730881325901, 5044962.47715878020972 ], [ 321950.88766698539257, 5044960.627687628380954 ], [ 322015.951603762689047, 5044958.778892903588712 ], [ 322081.015541212982498, 5044956.930774606764317 ], [ 322146.07947933638934, 5044955.083332736045122 ], [ 322213.77073908073362, 5045045.816782267764211 ], [ 322278.833716050314251, 5045043.970694203861058 ] ] } }, +{ "type": "Feature", "properties": { "idx": 10859, "idx_ds": 14884, "pit": false, "uparea": 4449.14501953125, "seglen": 2068.1611292829434, "rivdst": 2839.9998192302651, "rivlen": 10509.221184746086 }, "geometry": { "type": "LineString", "coordinates": [ [ 322781.434200734831393, 5046697.512981644831598 ], [ 322713.767283688823227, 5046606.773889687843621 ], [ 322646.098479588981718, 5046516.035487548448145 ], [ 322581.0509010249516, 5046517.878178006969392 ], [ 322578.42778847401496, 5046425.297775225713849 ], [ 322575.804713674238883, 5046332.717383882962167 ], [ 322573.181676626205444, 5046240.137003980576992 ], [ 322570.558677330496721, 5046147.556635513901711 ], [ 322632.988107783952728, 5046053.13358314614743 ], [ 322630.36614663945511, 5045960.553236587904394 ], [ 322692.798541189171374, 5045866.130880598910153 ], [ 322690.177618141751736, 5045773.55055595189333 ], [ 322752.612976673990488, 5045679.128896355628967 ], [ 322749.993091669399291, 5045586.548593627288938 ], [ 322747.373244379530661, 5045493.968302343040705 ], [ 322679.694303231080994, 5045403.229371782392263 ], [ 322612.013475380837917, 5045312.491131006740034 ], [ 322544.330760867451318, 5045221.753580009564757 ], [ 322479.269706236955244, 5045223.596960467286408 ], [ 322414.208652280969545, 5045225.441017346456647 ], [ 322346.522127446136437, 5045134.705510889180005 ], [ 322278.833716050314251, 5045043.970694203861058 ] ] } }, +{ "type": "Feature", "properties": { "idx": 896, "idx_ds": 10859, "pit": false, "uparea": 4036.349609375, "seglen": 1939.9308131965008, "rivdst": 4779.9306324267654, "rivlen": 4779.9306324267654 }, "geometry": { "type": "LineString", "coordinates": [ [ 321482.64114125672495, 5047503.864433980546892 ], [ 321501.639048818673473, 5047475.111896032467484 ], [ 321566.67698753986042, 5047473.257716383785009 ], [ 321629.076994019327685, 5047378.823710975237191 ], [ 321626.439099026028998, 5047286.243220204487443 ], [ 321688.842070680577308, 5047191.809911046177149 ], [ 321753.882900075754151, 5047189.957757663913071 ], [ 321816.288799563539214, 5047095.525809773243964 ], [ 321881.330593183636665, 5047093.675008237361908 ], [ 321946.372387502575293, 5047091.824883121065795 ], [ 322008.782178252236918, 5046997.394971935078502 ], [ 322073.82493677502498, 5046995.546198663301766 ], [ 322138.86769599490799, 5046993.698101812042296 ], [ 322203.910455911653116, 5046991.850681376643479 ], [ 322268.953216524794698, 5046990.00393735896796 ], [ 322333.995977834216319, 5046988.157869757153094 ], [ 322399.038739839335904, 5046986.312478571198881 ], [ 322464.081502540386282, 5046984.467763798311353 ], [ 322529.124265936668962, 5046982.623725440353155 ], [ 322594.167030028067529, 5046980.780363495461643 ], [ 322659.209794814349152, 5046978.937677962705493 ], [ 322724.252560295164585, 5046977.095668840222061 ], [ 322789.295326470397413, 5046975.254336130805314 ], [ 322851.718643166939728, 5046880.833215903490782 ], [ 322849.099230687657837, 5046788.252763424068689 ], [ 322781.434200734831393, 5046697.512981644831598 ] ] } }, +{ "type": "Feature", "properties": { "idx": 8412, "idx_ds": 10859, "pit": false, "uparea": 407.14508056640625, "seglen": 1961.4500451814827, "rivdst": 4801.4498644117475, "rivlen": 10509.221184746086 }, "geometry": { "type": "LineString", "coordinates": [ [ 323915.85617306700442, 5047684.699420362710953 ], [ 323848.215789256966673, 5047593.948675878345966 ], [ 323783.179751743678935, 5047595.779179209843278 ], [ 323715.53651821508538, 5047505.029801963828504 ], [ 323650.499519234348554, 5047506.861659081652761 ], [ 323582.853436049132142, 5047416.113649068400264 ], [ 323517.815475611481816, 5047417.946859973482788 ], [ 323450.166542831866536, 5047327.200217193923891 ], [ 323382.515722650277894, 5047236.454264254309237 ], [ 323314.863015106122475, 5047145.709001152776182 ], [ 323247.208420238108374, 5047054.964427883736789 ], [ 323244.59470911254175, 5046962.383946592919528 ], [ 323176.937301796046086, 5046871.640075594186783 ], [ 323109.278007260872982, 5046780.896894425153732 ], [ 323106.662483473774046, 5046688.316449458710849 ], [ 323039.000376663752832, 5046597.573970545083284 ], [ 322971.336382740293629, 5046506.832181447185576 ], [ 322973.953756690607406, 5046599.412601552903652 ], [ 322911.525511759973597, 5046693.832339542917907 ], [ 322846.479855902143754, 5046695.672322388738394 ], [ 322781.434200734831393, 5046697.512981644831598 ] ] } }, +{ "type": "Feature", "properties": { "idx": 7081, "idx_ds": 8412, "pit": false, "uparea": 395.60482788085938, "seglen": 1134.5104643920597, "rivdst": 5935.960328803807, "rivlen": 10509.221184746086 }, "geometry": { "type": "LineString", "coordinates": [ [ 324776.863968969788402, 5048216.45698170363903 ], [ 324709.241647018003277, 5048125.697356392629445 ], [ 324641.617437193635851, 5048034.938420943915844 ], [ 324576.586205777886789, 5048036.760802627541125 ], [ 324508.959145902073942, 5047946.003234419971704 ], [ 324443.926952966838144, 5047947.826969868503511 ], [ 324376.297043101862073, 5047857.070768902078271 ], [ 324311.263888657558709, 5047858.895858119241893 ], [ 324246.230734911630861, 5047860.721623726189137 ], [ 324181.19758186431136, 5047862.548065721988678 ], [ 324113.56289767799899, 5047771.794586761854589 ], [ 324048.528783131507225, 5047773.622382532805204 ], [ 323980.891249102249276, 5047682.870270811952651 ], [ 323915.85617306700442, 5047684.699420362710953 ] ] } }, +{ "type": "Feature", "properties": { "idx": 7059, "idx_ds": 8412, "pit": false, "uparea": 10.091493606567383, "seglen": 1285.8758164290573, "rivdst": 6087.325680840805, "rivlen": 6087.325680840805 }, "geometry": { "type": "LineString", "coordinates": [ [ 323346.21937857195735, 5048256.675819526426494 ], [ 323408.636396662099287, 5048162.259956203401089 ], [ 323471.055378947523423, 5048067.844778724946082 ], [ 323533.476325383235235, 5047973.430287098512053 ], [ 323601.117818626749795, 5048064.177694467827678 ], [ 323666.149039521929808, 5048062.345166934654117 ], [ 323731.180261120432988, 5048060.513315795920789 ], [ 323728.57287686644122, 5047967.932701493613422 ], [ 323796.211483422084711, 5048058.682141051627696 ], [ 323858.637248032377101, 5047964.271026399917901 ], [ 323856.031827117782086, 5047871.690421567298472 ], [ 323788.392331932263914, 5047780.940329547040164 ], [ 323853.426443683449179, 5047779.109828202053905 ], [ 323915.85617306700442, 5047684.699420362710953 ] ] } }, +{ "type": "Feature", "properties": { "idx": 4226, "idx_ds": 7081, "pit": false, "uparea": 10.004246711730957, "seglen": 4573.2608559422788, "rivdst": 10509.221184746086, "rivlen": 10509.221184746086 }, "geometry": { "type": "LineString", "coordinates": [ [ 328209.030331772693899, 5048993.231382194906473 ], [ 328181.268359418259934, 5048955.922479469329119 ], [ 328113.704410370555706, 5048865.127519022673368 ], [ 328046.138572584663052, 5048774.33324846252799 ], [ 327978.570846099290065, 5048683.539667786099017 ], [ 327916.093371227441821, 5048777.908328551799059 ], [ 327851.070771590690129, 5048779.696883110329509 ], [ 327786.048172648646869, 5048781.486114013008773 ], [ 327721.025574401952326, 5048783.276021261699498 ], [ 327656.002976850490086, 5048785.066604853607714 ], [ 327590.980379994900431, 5048786.857864792458713 ], [ 327525.957783835299779, 5048788.649801078252494 ], [ 327463.488054468354676, 5048883.023199897259474 ], [ 327398.466422710451297, 5048884.816487885080278 ], [ 327335.999620507354848, 5048979.191247972659767 ], [ 327270.978953170240857, 5048980.985887663438916 ], [ 327205.958286532608327, 5048982.781203703954816 ], [ 327138.379902660264634, 5048891.996403331868351 ], [ 327073.358274394646287, 5048893.793073071166873 ], [ 327005.777039647684433, 5048803.009639932774007 ], [ 326940.754449764848687, 5048804.80766337364912 ], [ 326873.170364205667283, 5048714.025597468018532 ], [ 326870.608904670225456, 5048621.444843308068812 ], [ 326805.58439019008074, 5048623.244221446104348 ], [ 326737.996527756971773, 5048532.463535303249955 ], [ 326672.97105169238057, 5048534.264267147518694 ], [ 326605.380338611488696, 5048443.484948230907321 ], [ 326540.353900973510463, 5048445.287033784203231 ], [ 326475.327464031986892, 5048447.089795696549118 ], [ 326410.301027786976192, 5048448.89323397167027 ], [ 326345.274592238711193, 5048450.697348606772721 ], [ 326277.678141792246606, 5048359.921428975649178 ], [ 326212.65074467973318, 5048361.726897329092026 ], [ 326147.623348263965454, 5048363.533042048104107 ], [ 326082.59595254494343, 5048365.3398631317541 ], [ 326017.568557523307391, 5048367.147360580042005 ], [ 325955.11599359952379, 5048461.536240060813725 ], [ 325890.089562937093433, 5048463.3450892502442 ], [ 325825.063132974028122, 5048465.154614808037877 ], [ 325760.036703710153233, 5048466.964816733263433 ], [ 325697.588994499179535, 5048561.356408221647143 ], [ 325632.563529617269523, 5048563.167961889877915 ], [ 325567.538065436645411, 5048564.980191926471889 ], [ 325499.930993654881604, 5048474.212388133630157 ], [ 325434.90456789243035, 5048476.025971912778914 ], [ 325369.878142830915749, 5048477.840232064947486 ], [ 325304.851718470919877, 5048479.655168591067195 ], [ 325239.82529481255915, 5048481.470781490206718 ], [ 325174.798871856066398, 5048483.287070767022669 ], [ 325172.21248581551481, 5048390.706377062015235 ], [ 325107.185100584290922, 5048392.523343712091446 ], [ 325039.569441287196241, 5048301.760306532494724 ], [ 324974.541094493819401, 5048303.578626936301589 ], [ 324906.922584958956577, 5048212.816957001574337 ], [ 324841.893276614253409, 5048214.636631162837148 ], [ 324774.271916903497186, 5048123.876328472048044 ], [ 324776.863968969788402, 5048216.45698170363903 ] ] } }, +{ "type": "Feature", "properties": { "idx": 3269, "idx_ds": 7081, "pit": false, "uparea": 372.01608276367188, "seglen": 961.18864648479268, "rivdst": 6897.1489752886, "rivlen": 6897.1489752886 }, "geometry": { "type": "LineString", "coordinates": [ [ 324537.761280037520919, 5049060.525895952247083 ], [ 324540.111560195684433, 5049056.971507644280791 ], [ 324537.515320315840654, 5048964.390755048952997 ], [ 324534.919117771671154, 5048871.810013936832547 ], [ 324597.346479442261625, 5048777.406234255060554 ], [ 324529.726824691868387, 5048686.648566162213683 ], [ 324592.156187078508083, 5048592.244807437062263 ], [ 324654.587513508391567, 5048497.841734569519758 ], [ 324717.020803937222809, 5048403.439347562380135 ], [ 324714.427714332705364, 5048310.858672351576388 ], [ 324776.863968969788402, 5048216.45698170363903 ] ] } } ] } diff --git a/tests/data/sfincs_test/gis/src.geojson b/tests/data/sfincs_test/gis/src.geojson index 027c2d24..544e09cf 100644 --- a/tests/data/sfincs_test/gis/src.geojson +++ b/tests/data/sfincs_test/gis/src.geojson @@ -2,8 +2,8 @@ "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::32633" } }, "features": [ -{ "type": "Feature", "properties": { "index": 1, "uparea": 4039.6552734375 }, "geometry": { "type": "Point", "coordinates": [ 321499.179280363314319, 5047478.834652632474899 ] } }, -{ "type": "Feature", "properties": { "index": 2, "uparea": 372.2264404296875 }, "geometry": { "type": "Point", "coordinates": [ 324539.39005017321324, 5049031.24278330616653 ] } }, -{ "type": "Feature", "properties": { "index": 3, "uparea": 10.424988746643066 }, "geometry": { "type": "Point", "coordinates": [ 328191.121168049343396, 5048969.163522810675204 ] } } +{ "type": "Feature", "properties": { "index": 1, "riv_idx": 0, "uparea": 4039.6552734375 }, "geometry": { "type": "Point", "coordinates": [ 321483.19241256051464, 5047503.030107934959233 ] } }, +{ "type": "Feature", "properties": { "index": 2, "riv_idx": 5, "uparea": 372.2264404296875 }, "geometry": { "type": "Point", "coordinates": [ 324538.312838675745297, 5049059.691759831272066 ] } }, +{ "type": "Feature", "properties": { "index": 3, "riv_idx": 2, "uparea": 10.424988746643066 }, "geometry": { "type": "Point", "coordinates": [ 328208.433359648974147, 5048992.429120215587318 ] } } ] } diff --git a/tests/data/sfincs_test/sfincs.src b/tests/data/sfincs_test/sfincs.src index bfe2e7ea..8c3ff568 100644 --- a/tests/data/sfincs_test/sfincs.src +++ b/tests/data/sfincs_test/sfincs.src @@ -1,3 +1,3 @@ -321499.2 5047478.8 -324539.4 5049031.2 -328191.1 5048969.2 +321483.2 5047503.0 +324538.3 5049059.7 +328208.4 5048992.4 diff --git a/tests/test_flwdir.py b/tests/test_flwdir.py new file mode 100644 index 00000000..b6d55b1b --- /dev/null +++ b/tests/test_flwdir.py @@ -0,0 +1,65 @@ +import pytest +from hydromt_sfincs.workflows.flwdir import ( + river_centerline_from_hydrography, + river_source_points, +) +import geopandas as gpd +import numpy as np + + +def test_river_centerline_from_hydrography(hydrography): + # get data + da_flwdir, da_uparea, gdf_mask = hydrography + # get river centerlines + gdf_riv = river_centerline_from_hydrography(da_flwdir, da_uparea, gdf_mask=gdf_mask) + # check + assert isinstance(gdf_riv, gpd.GeoDataFrame) + assert np.isin(["geometry", "rivlen", "uparea"], gdf_riv.columns).all() + assert np.isclose(gdf_riv["rivlen"].max(), 19665.50) + assert gdf_riv.index.size == 11 + # no rivers (uparea threshold too high) + gdf_riv = river_centerline_from_hydrography(da_flwdir, da_uparea, river_upa=1e6) + assert gdf_riv.empty + # no rivers (river length threshold too high) + gdf_riv = river_centerline_from_hydrography(da_flwdir, da_uparea, river_len=1e6) + assert gdf_riv.empty + + +def test_river_source_points(hydrography, data_catalog): + # get data + da_flwdir, da_uparea, gdf_mask = hydrography + gdf_mask = gdf_mask.to_crs("EPSG:32633") + + # test with derived centerline + gdf_riv = river_centerline_from_hydrography(da_flwdir, da_uparea, gdf_mask=gdf_mask) + kwargs = dict(gdf_riv=gdf_riv, gdf_mask=gdf_mask) + gdf_src = river_source_points(src_type="inflow", **kwargs) + assert gdf_src.index.size == 3 + gdf_src = river_source_points(src_type="headwater", **kwargs) + assert gdf_src.index.size == 6 + gdf_src = river_source_points(src_type="outflow", da_uparea=da_uparea, **kwargs) + assert gdf_src.index.size == 1 + assert np.isin(["geometry", "riv_idx", "uparea"], gdf_src.columns).all() + + # test reverse oriented line + gdf_riv = data_catalog.get_geodataframe("rivers_lin2019_v1") + kwargs = dict(gdf_riv=gdf_riv, gdf_mask=gdf_mask, reverse_river_geom=True) + gdf_src = river_source_points(src_type="inflow", **kwargs) + assert gdf_src.index.size == 1 # this data only one river + assert gdf_src["riv_idx"].values[0] == 38 + gdf_src = river_source_points(src_type="outflow", **kwargs) + assert gdf_src.index.size == 1 # this data only one river + assert gdf_src["riv_idx"].values[0] == 34 + gdf_src = river_source_points(src_type="headwater", **kwargs) + assert gdf_src.index.size == 2 + assert np.isin(38, gdf_src["riv_idx"].values) + + # test errors + with pytest.raises(ValueError, match="src_type must be either"): + gdf_src = river_source_points( + gdf_riv=gdf_riv, gdf_mask=gdf_mask, src_type="wrong" + ) + with pytest.raises(TypeError, match="gdf_mask must be"): + gdf_src = river_source_points(gdf_riv=gdf_riv, gdf_mask=gdf_riv) + with pytest.raises(TypeError, match="gdf_riv must be"): + gdf_src = river_source_points(gdf_riv=gdf_mask, gdf_mask=gdf_mask) From 75cd92d4aaa8720b8e53047d537e51fdfcddeca9 Mon Sep 17 00:00:00 2001 From: Tim Leijnse Date: Wed, 10 Apr 2024 17:47:44 +0200 Subject: [PATCH 03/28] New subgrid formulations including the wet-fraction (#160) * updated subgridregular and added subgridquadtree subgrid regular now also computes pwet etc. reads and writes to netcdf. sfincs may still need to be updated to account for this. subgrid quadtree added. still slow because no numba. both still need testing. * - Cherrypick changes by mvo in branch quadtree_subgrid, and remove additions of subgrid netcdf and quadtree, so online subgrid v08 changes for regular grid remain * - patch 'added correct subgrid_q_table' from 'quadtree-subgrid' * - to overcome error that np.size is not supported in numba * black formatting * bugfixes in subgrid.py * and now with numba on again * enable read/write netcdf subgrid file, should be backward compatible * bugfix in workflows.bathymetry * write output according to what SFINCS (fortran expects) * major speed-up in writing the netcdf subgrid tables (now not a bottleneck anymore) * delete old code * Changed bins to levels. Update of volume table method to reflect this. * nlevels now input argument for setup_subgrid * fix tests subgrid rivers; order of geodataframe provided by hydromt changed somehow * pre commit formatting * now really according to black, but my version looked prettier ... * bugfix in reading binary subgrids * add version to subgrid to make distinction between binary and netcdf * Merge main into regular_subgrid * add proper reading of netcdf subgrid * update subgrid file and fix last test * update changelog * pre-commit * Update docs/changelog.rst Co-authored-by: DirkEilander <15379728+DirkEilander@users.noreply.github.com> * improved readability of new subgrid methods * removed extrapolate option since that is not supported by xarray * Revert "removed extrapolate option since that is not supported by xarray" This reverts commit 9409382f335b2e999c248fc1070e322e90362752. --------- Co-authored-by: Maarten van Ormondt Co-authored-by: roeldegoede Co-authored-by: roeldegoede <83765910+roeldegoede@users.noreply.github.com> Co-authored-by: DirkEilander <15379728+DirkEilander@users.noreply.github.com> Co-authored-by: Kees Nederhoff --- docs/changelog.rst | 17 + hydromt_sfincs/sfincs.py | 44 +- hydromt_sfincs/subgrid.py | 602 +++++++++++++++++------ hydromt_sfincs/utils.py | 101 ++++ tests/data/sfincs_test/sfincs.inp | 2 +- tests/data/sfincs_test/sfincs.sbg | Bin 451792 -> 451792 bytes tests/data/sfincs_test/sfincs_subgrid.nc | Bin 0 -> 1121609 bytes tests/test_1model_class.py | 51 ++ 8 files changed, 668 insertions(+), 149 deletions(-) create mode 100644 tests/data/sfincs_test/sfincs_subgrid.nc diff --git a/docs/changelog.rst b/docs/changelog.rst index cb8b1682..f2d17a17 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,23 @@ Distinction is made between new methods (Added), changes to existing methods (Ch The format is based on `Keep a Changelog`_, and this project adheres to `Semantic Versioning`_. +v1.0.4 (Unreleased) +=================== + +Added +----- +- improved subgrid tables that account for the wet fraction of the cell (#160) + +Changed +------- +- improved subgrid tables are saved as NetCDF (#160) + +Fixed +----- +- rounding errors in `workflows.tile_window` which resulted in erronuous slippy-tiles (#178) +- "active geometry column to use has not been set" error for GeoDataFrame (#180) + + v1.0.3 (3 January 2024) ======================= This release contains several changes and fixes. Most notably, models with a geographical CRS can now be build. diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 774079d0..5a22a067 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -23,6 +23,7 @@ from . import DATADIR, plots, utils, workflows from .regulargrid import RegularGrid +from .subgrid import SubgridTableRegular from .sfincs_input import SfincsInput __all__ = ["SfincsModel"] @@ -614,7 +615,8 @@ def setup_subgrid( datasets_rgh: List[dict] = [], datasets_riv: List[dict] = [], buffer_cells: int = 0, - nbins: int = 10, + nlevels: int = 10, + nbins: int = None, nr_subgrid_pixels: int = 20, nrmax: int = 2000, # blocksize max_gradient: float = 5.0, @@ -695,6 +697,9 @@ def setup_subgrid( by default 0 nbins : int, optional Number of bins in which hypsometry is subdivided, by default 10 + Note that this keyword is deprecated and will be removed in future versions. + nlevels: int, optional + Number of levels to describe hypsometry, by default 10 nr_subgrid_pixels : int, optional Number of subgrid pixels per computational cell, by default 20 nrmax : int, optional @@ -742,6 +747,12 @@ def setup_subgrid( else: highres_dir = None + if nbins is not None: + logger.warning( + "Keyword nbins is deprecated and will be removed in future versions. Please use nlevels instead." + ) + nlevels = nbins + if self.grid_type == "regular": self.reggrid.subgrid.build( da_mask=self.mask, @@ -749,7 +760,7 @@ def setup_subgrid( datasets_rgh=datasets_rgh, datasets_riv=datasets_riv, buffer_cells=buffer_cells, - nbins=nbins, + nlevels=nlevels, nr_subgrid_pixels=nr_subgrid_pixels, nrmax=nrmax, max_gradient=max_gradient, @@ -768,8 +779,11 @@ def setup_subgrid( elif self.grid_type == "quadtree": pass - if "sbgfile" not in self.config: # only add sbgfile if not already present - self.config.update({"sbgfile": "sfincs.sbg"}) + # when building a new subgrid table, always update config + # NOTE from now onwards, netcdf subgrid tables are used + self.config.update({"sbgfile": "sfincs_subgrid.nc"}) + # if "sbgfile" not in self.config: # only add sbgfile if not already present + # self.config.update({"sbgfile": "sfincs.sbg"}) # subgrid is used so no depfile or manningfile needed if "depfile" in self.config: self.config.pop("depfile") # remove depfile from config @@ -2886,7 +2900,16 @@ def read_subgrid(self): self.logger.warning(f"sbgfile not found at {fn}") return - self.reggrid.subgrid.load(file_name=fn, mask=self.mask) + # re-initialize subgrid (different variables for old/new version) + # TODO: come up with a better way to handle this + self.reggrid.subgrid = SubgridTableRegular() + self.subgrid = xr.Dataset() + + # read subgrid file + if fn.parts[-1].endswith(".sbg"): # read binary file + self.reggrid.subgrid.read_binary(file_name=fn, mask=self.mask) + else: # read netcdf file + self.reggrid.subgrid.read(file_name=fn, mask=self.mask) self.subgrid = self.reggrid.subgrid.to_xarray( dims=self.mask.raster.dims, coords=self.mask.raster.coords ) @@ -2897,9 +2920,16 @@ def write_subgrid(self): if self.subgrid: if "sbgfile" not in self.config: - self.set_config("sbgfile", "sfincs.sbg") + # apparently no subgrid was read, so set default filename + self.set_config("sbgfile", "sfincs_subgrid.nc") + fn = self.get_config("sbgfile", abs_path=True) - self.reggrid.subgrid.save(file_name=fn, mask=self.mask) + if fn.parts[-1].endswith(".sbg"): + # write binary file + self.reggrid.subgrid.write_binary(file_name=fn, mask=self.mask) + else: + # write netcdf file + self.reggrid.subgrid.write(file_name=fn, mask=self.mask) def read_geoms(self): """Read geometry files and save to `geoms` attribute. diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index 22130548..3fda9464 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -18,13 +18,188 @@ class SubgridTableRegular: - def __init__(self, version=0): + def __init__(self, version=1): # A regular subgrid table contains only for cells with msk>0 self.version = version - def load(self, file_name, mask): + # new way of reading netcdf subgrid tables + def read(self, file_name, mask): + """Load subgrid table from netcdf file.""" + + self.version = 1 + + # Read data from netcdf file with xarray + ds = xr.open_dataset(file_name) + + # transpose to have level as first dimension + ds = ds.transpose("levels", "npuv", "np") + + # grid dimensions + grid_dim = mask.shape + + # get number of levels, point and uv points + self.nlevels, self.nr_cells, self.nr_uv_points = ( + ds.dims["levels"], + ds.dims["np"], + ds.dims["npuv"], + ) + + # find indices of active cells + index_nm, index_mu1, index_nu1 = utils.find_uv_indices(mask) + active_indices = np.where(index_nm > -1)[0] + active_indices_u = np.where(index_mu1 > -1)[0] + active_indices_v = np.where(index_nu1 > -1)[0] + + # convert 1D indices to 2D indices + active_z = np.unravel_index(active_indices, grid_dim, order="F") + active_u = np.unravel_index(active_indices_u, grid_dim, order="F") + active_v = np.unravel_index(active_indices_v, grid_dim, order="F") + + # Initialize the data-arrays + # Z points + self.z_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.z_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.z_volmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.z_level = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + + # U points + self.u_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.u_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.u_havg = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.u_nrep = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.u_pwet = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.u_ffit = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_navg = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + + # V points + self.v_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.v_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + self.v_havg = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.v_nrep = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.v_pwet = np.full( + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) + self.v_ffit = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_navg = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + + # Now read the data and add it to the data-arrays + # use index_nm of the active cells in the new dataset + self.z_zmin[active_z] = ds["z_zmin"].values.flatten() + self.z_zmax[active_z] = ds["z_zmax"].values.flatten() + self.z_volmax[active_z] = ds["z_volmax"].values.flatten() + for ilevel in range(self.nlevels): + self.z_level[ilevel, active_z[0], active_z[1]] = ds["z_level"][ + ilevel + ].values.flatten() + + # now use index_mu1 and index_nu1 to put the values of the active cells in the new dataset + var_list = ["zmin", "zmax", "ffit", "navg"] + for var in var_list: + uv_var = ds["uv_" + var].values.flatten() + self.u_zmin[active_u] = uv_var[index_mu1[active_indices_u]] + self.v_zmin[active_v] = uv_var[index_nu1[active_indices_v]] + + var_list_levels = ["havg", "nrep", "pwet"] + for var in var_list_levels: + for ilevel in range(self.nlevels): + uv_var = ds["uv_" + var][ilevel].values.flatten() + self.u_havg[ilevel, active_u[0], active_u[1]] = uv_var[ + index_mu1[active_indices_u] + ] + self.v_havg[ilevel, active_v[0], active_v[1]] = uv_var[ + index_nu1[active_indices_v] + ] + + # close the dataset + ds.close() + + # new way of writing netcdf subgrid tables + def write(self, file_name, mask): + """Write subgrid table to netcdf file for a regular grid with given mask. + Values are only written for active cells (mask > 0).""" + + ds = self.to_xarray(dims=mask.raster.dims, coords=mask.raster.coords) + + # Need to transpose to match the FORTRAN convention in SFINCS + ds = ds.transpose("levels", "x", "y") + + # find indices of active cells + index_nm, index_mu1, index_nu1 = utils.find_uv_indices(mask) + + # get number of levels + nlevels = self.nlevels + + active_cells = index_nm > -1 + active_indices = np.where(active_cells)[0] + + # get nr of active points (where index_nm > -1) + nr_z_points = index_nm.max() + 1 + nr_uv_points = max(index_mu1.max(), index_nu1.max()) + 1 + + # Make a new xarray dataset where we only keep the values of the active cells (index_nm > -1) + # use index_nm to put the values of the active cells in the new dataset + ds_new = xr.Dataset(attrs={"_FillValue": np.nan}) + + # Z points + variables = ["z_zmin", "z_zmax", "z_volmax"] + for var in variables: + ds_new[var] = xr.DataArray( + ds[var].values.flatten()[active_cells], dims=("np") + ) + + z_level = np.zeros((nlevels, nr_z_points)) + for ilevel in range(nlevels): + z_level[ilevel] = ds["z_level"][ilevel].values.flatten()[active_cells] + ds_new["z_level"] = xr.DataArray(z_level, dims=("levels", "np")) + + # u and v points + var_list = ["zmin", "zmax", "ffit", "navg"] + for var in var_list: + uv_var = np.zeros(nr_uv_points) + uv_var[index_mu1[active_indices]] = ds["u_" + var].values.flatten()[ + active_cells + ] + uv_var[index_nu1[active_indices]] = ds["v_" + var].values.flatten()[ + active_cells + ] + ds_new[f"uv_{var}"] = xr.DataArray(uv_var, dims=("npuv")) + + var_list_levels = ["havg", "nrep", "pwet"] + for var in var_list_levels: + uv_var = np.zeros((nlevels, nr_uv_points)) + for ilevel in range(nlevels): + uv_var[ilevel, index_mu1[active_indices]] = ds["u_" + var][ + ilevel + ].values.flatten()[active_cells] + uv_var[ilevel, index_nu1[active_indices]] = ds["v_" + var][ + ilevel + ].values.flatten()[active_cells] + ds_new[f"uv_{var}"] = xr.DataArray(uv_var, dims=("levels", "npuv")) + + # ensure levels is last dimension + ds_new = ds_new.transpose("npuv", "np", "levels") + + # Write to netcdf file + ds_new.to_netcdf(file_name) + + # Following remains for backward compatibility, but should soon not be used anymore + def read_binary(self, file_name, mask): """Load subgrid table from file for a regular grid with given mask.""" + self.version = 0 + if isinstance(mask, xr.DataArray): mask = mask.values @@ -40,9 +215,11 @@ def load(self, file_name, mask): # File version # self.version = np.fromfile(file, dtype=np.int32, count=1)[0] + + # Initialize the data-arrays self.nr_cells = np.fromfile(file, dtype=np.int32, count=1)[0] self.nr_uv_points = np.fromfile(file, dtype=np.int32, count=1)[0] - self.nbins = np.fromfile(file, dtype=np.int32, count=1)[0] + self.nlevels = np.fromfile(file, dtype=np.int32, count=1)[0] # Z points self.z_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) @@ -50,43 +227,41 @@ def load(self, file_name, mask): # self.z_zmean = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.z_volmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.z_depth = np.full( - (self.nbins, *grid_dim), fill_value=np.nan, dtype=np.float32 + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 ) # U points self.u_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.u_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.u_hrep = np.full( - (self.nbins, *grid_dim), fill_value=np.nan, dtype=np.float32 + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 ) self.u_navg = np.full( - (self.nbins, *grid_dim), fill_value=np.nan, dtype=np.float32 + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 ) # V points self.v_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.v_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.v_hrep = np.full( - (self.nbins, *grid_dim), fill_value=np.nan, dtype=np.float32 + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 ) self.v_navg = np.full( - (self.nbins, *grid_dim), fill_value=np.nan, dtype=np.float32 + (self.nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 ) + # Now read the data self.z_zmin[iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) self.z_zmax[iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) - # self.z_zmean[iok[0], iok[1]] = np.fromfile( - # file, dtype=np.float32, count=self.nr_cells - # ) self.z_volmax[iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) - for ibin in range(self.nbins): - self.z_depth[ibin, iok[0], iok[1]] = np.fromfile( + for ilevel in range(self.nlevels): + self.z_depth[ilevel, iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) @@ -97,12 +272,12 @@ def load(self, file_name, mask): file, dtype=np.float32, count=self.nr_cells ) _ = np.fromfile(file, dtype=np.float32, count=self.nr_cells) # not used - for ibin in range(self.nbins): - self.u_hrep[ibin, iok[0], iok[1]] = np.fromfile( + for ilevel in range(self.nlevels): + self.u_hrep[ilevel, iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) - for ibin in range(self.nbins): - self.u_navg[ibin, iok[0], iok[1]] = np.fromfile( + for ilevel in range(self.nlevels): + self.u_navg[ilevel, iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) @@ -113,19 +288,21 @@ def load(self, file_name, mask): file, dtype=np.float32, count=self.nr_cells ) _ = np.fromfile(file, dtype=np.float32, count=self.nr_cells) # not used - for ibin in range(self.nbins): - self.v_hrep[ibin, iok[0], iok[1]] = np.fromfile( + for ilevel in range(self.nlevels): + self.v_hrep[ilevel, iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) - for ibin in range(self.nbins): - self.v_navg[ibin, iok[0], iok[1]] = np.fromfile( + for ilevel in range(self.nlevels): + self.v_navg[ilevel, iok[0], iok[1]] = np.fromfile( file, dtype=np.float32, count=self.nr_cells ) file.close() - def save(self, file_name, mask): + # Following remains for backward compatibility, but should soon not be used anymore + def write_binary(self, file_name, mask): """Save the subgrid data to a binary file.""" + if isinstance(mask, xr.DataArray): mask = mask.values @@ -142,7 +319,7 @@ def save(self, file_name, mask): # file.write(np.int32(self.version)) # version file.write(np.int32(np.size(ind))) # Nr of active points file.write(np.int32(1)) # min - file.write(np.int32(self.nbins)) + file.write(np.int32(self.nlevels)) # Z v = self.z_zmin[iok] @@ -151,8 +328,8 @@ def save(self, file_name, mask): file.write(np.float32(v)) v = self.z_volmax[iok] file.write(np.float32(v)) - for ibin in range(self.nbins): - v = np.squeeze(self.z_depth[ibin, :, :])[iok] + for ilevel in range(self.nlevels): + v = np.squeeze(self.z_depth[ilevel, :, :])[iok] file.write(np.float32(v)) # U @@ -162,11 +339,11 @@ def save(self, file_name, mask): file.write(np.float32(v)) dhdz = np.full(np.shape(v), 1.0) file.write(np.float32(dhdz)) # Not used in SFINCS anymore - for ibin in range(self.nbins): - v = np.squeeze(self.u_hrep[ibin, :, :])[iok] + for ilevel in range(self.nlevels): + v = np.squeeze(self.u_hrep[ilevel, :, :])[iok] file.write(np.float32(v)) - for ibin in range(self.nbins): - v = np.squeeze(self.u_navg[ibin, :, :])[iok] + for ilevel in range(self.nlevels): + v = np.squeeze(self.u_navg[ilevel, :, :])[iok] file.write(np.float32(v)) # V @@ -175,26 +352,28 @@ def save(self, file_name, mask): v = self.v_zmax[iok] file.write(np.float32(v)) file.write(np.float32(dhdz)) # Not used in SFINCS anymore - for ibin in range(self.nbins): - v = np.squeeze(self.v_hrep[ibin, :, :])[iok] + for ilevel in range(self.nlevels): + v = np.squeeze(self.v_hrep[ilevel, :, :])[iok] file.write(np.float32(v)) - for ibin in range(self.nbins): - v = np.squeeze(self.v_navg[ibin, :, :])[iok] + for ilevel in range(self.nlevels): + v = np.squeeze(self.v_navg[ilevel, :, :])[iok] file.write(np.float32(v)) file.close() + # This is the new way of building subgrid tables, that will end up in netcdf files def build( self, da_mask: xr.DataArray, datasets_dep: list[dict], datasets_rgh: list[dict] = [], datasets_riv: list[dict] = [], - nbins=10, - nr_subgrid_pixels=20, - nrmax=2000, - max_gradient=5.0, - z_minimum=-99999.0, + nlevels: int = 10, + nr_subgrid_pixels: int = 20, + nrmax: int = 2000, + max_gradient: float = 5.0, + z_minimum: float = -99999.0, + huthresh: float = 0.01, manning_land: float = 0.04, manning_sea: float = 0.02, rgh_lev_land: float = 0.0, @@ -235,8 +414,8 @@ def build( "rivwth" in river is not used and can be omitted. * arguments for :py:function:~hydromt.workflows.bathymetry.burn_river_rect e.g.: [{'gdf_riv': , 'gdf_riv_mask': }] - nbins : int, optional - Number of bins in which hypsometry is subdivided, by default 10 + nlevels : int, optional + Number of levels in which hypsometry is subdivided, by default 10 nr_subgrid_pixels : int, optional Number of subgrid pixels per computational cell, by default 20 nrmax : int, optional @@ -247,6 +426,8 @@ def build( prevent numerical stability problems, by default 5.0 z_minimum : float, optional Minimum depth in the subgrid tables, by default -99999.0 + huthresh : float, optional + Threshold depth in SFINCS model, by default 0.01 m manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 @@ -269,16 +450,18 @@ def build( are stored, by default None """ + self.version = 1 + if write_dep_tif or write_man_tif: assert highres_dir is not None, "highres_dir must be specified" refi = nr_subgrid_pixels - self.nbins = nbins + self.nlevels = nlevels grid_dim = da_mask.raster.shape x_dim, y_dim = da_mask.raster.x_dim, da_mask.raster.y_dim # determine the output dimensions and transform to match da_mask grid - # NOTE: this is only usef for writing the cloud optimized geotiffs + # NOTE: this is only used for writing the cloud optimized geotiffs output_width = da_mask.sizes[x_dim] * nr_subgrid_pixels output_height = da_mask.sizes[y_dim] * nr_subgrid_pixels output_transform = da_mask.raster.transform * da_mask.raster.transform.scale( @@ -320,19 +503,27 @@ def build( self.z_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) # self.z_zmean = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.z_volmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - self.z_depth = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.z_level = np.full( + (nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32 + ) # U points self.u_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.u_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - self.u_hrep = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) - self.u_navg = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_havg = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_nrep = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_pwet = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_ffit = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + self.u_navg = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) # V points self.v_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) self.v_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - self.v_hrep = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) - self.v_navg = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_havg = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_nrep = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_pwet = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_ffit = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) + self.v_navg = np.full((grid_dim), fill_value=np.nan, dtype=np.float32) dx, dy = da_mask.raster.res dxp = dx / refi # size of subgrid pixel @@ -499,25 +690,32 @@ def build( self.z_zmin[sn, sm], self.z_zmax[sn, sm], self.z_volmax[sn, sm], - self.z_depth[:, sn, sm], + self.z_level[:, sn, sm], self.u_zmin[sn, sm], self.u_zmax[sn, sm], - self.u_hrep[:, sn, sm], - self.u_navg[:, sn, sm], + self.u_havg[:, sn, sm], + self.u_nrep[:, sn, sm], + self.u_pwet[:, sn, sm], + self.u_ffit[sn, sm], + self.u_navg[sn, sm], self.v_zmin[sn, sm], self.v_zmax[sn, sm], - self.v_hrep[:, sn, sm], - self.v_navg[:, sn, sm], - ) = process_tile( + self.v_havg[:, sn, sm], + self.v_nrep[:, sn, sm], + self.v_pwet[:, sn, sm], + self.v_ffit[sn, sm], + self.v_navg[sn, sm], + ) = process_tile_regular( da_mask_block.values, da_dep.values, da_man.values, dxp, dyp, refi, - nbins, + nlevels, yg, max_gradient, + huthresh, da_mask.raster.crs.is_geographic, ) @@ -541,13 +739,36 @@ def build( ) def to_xarray(self, dims, coords): - """Convert subgrid class to xarray dataset.""" - ds_sbg = xr.Dataset(coords={"bins": np.arange(self.nbins), **coords}) + """Convert old binary subgrid class to xarray dataset.""" + ds_sbg = xr.Dataset(coords={"levels": np.arange(self.nlevels), **coords}) ds_sbg.attrs.update({"_FillValue": np.nan}) - zlst2 = ["z_zmin", "z_zmax", "z_zmin", "z_volmax"] # "z_zmean", - uvlst2 = ["u_zmin", "u_zmax", "v_zmin", "v_zmax"] - lst3 = ["z_depth", "u_hrep", "u_navg", "v_hrep", "v_navg"] + zlst2 = ["z_zmin", "z_zmax", "z_volmax"] + if self.version == 0: + uvlst2 = ["u_zmin", "u_zmax", "v_zmin", "v_zmax"] + lst3 = ["z_depth", "u_hrep", "u_navg", "v_hrep", "v_navg"] + + elif self.version == 1: + uvlst2 = [ + "u_zmin", + "u_zmax", + "u_ffit", + "u_navg", + "v_zmin", + "v_zmax", + "v_ffit", + "v_navg", + ] + lst3 = [ + "z_level", + "u_havg", + "u_nrep", + "u_pwet", + "v_havg", + "v_nrep", + "v_pwet", + ] + # 2D arrays for name in zlst2 + uvlst2: if hasattr(self, name): @@ -555,7 +776,7 @@ def to_xarray(self, dims, coords): # 3D arrays for name in lst3: if hasattr(self, name): - ds_sbg[name] = xr.Variable(("bins", *dims), getattr(self, name)) + ds_sbg[name] = xr.Variable(("levels", *dims), getattr(self, name)) return ds_sbg def from_xarray(self, ds_sbg): @@ -565,29 +786,44 @@ def from_xarray(self, ds_sbg): @njit -def process_tile( - mask, zg, manning_grid, dxp, dyp, refi, nbins, yg, max_gradient, is_geographic=False +def process_tile_regular( + mask, + zg, + manning_grid, + dxp, + dyp, + refi, + nlevels, + yg, + max_gradient, + huthresh, + is_geographic=False, ): """calculate subgrid properties for a single tile""" # Z points grid_dim = mask.shape z_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) z_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - # z_zmean = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) z_volmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - z_depth = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + z_level = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) # U points u_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) u_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - u_hrep = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) - u_navg = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + u_havg = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + u_nrep = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + u_pwet = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + u_ffit = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + u_navg = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) # V points v_zmin = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) v_zmax = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) - v_hrep = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) - v_navg = np.full((nbins, *grid_dim), fill_value=np.nan, dtype=np.float32) + v_havg = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + v_nrep = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + v_pwet = np.full((nlevels, *grid_dim), fill_value=np.nan, dtype=np.float32) + v_ffit = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) + v_navg = np.full(grid_dim, fill_value=np.nan, dtype=np.float32) # Loop through all active cells in this block for n in range(mask.shape[0]): # row @@ -612,12 +848,12 @@ def process_tile( zgc = zg[nn : nn + refi, mm : mm + refi] zvmin = -20.0 z, v, zmin, zmax = subgrid_v_table( - zgc.flatten(), dxpm, dypm, nbins, zvmin, max_gradient + zgc.flatten(), dxpm, dypm, nlevels, zvmin, max_gradient ) z_zmin[n, m] = zmin z_zmax[n, m] = zmax z_volmax[n, m] = v[-1] - z_depth[:, n, m] = z[1:] + z_level[:, n, m] = z # Now the U/V points # U @@ -627,40 +863,51 @@ def process_tile( zgu = np.transpose(zgu) manning = manning_grid[nn : nn + refi, mm : mm + refi] manning = np.transpose(manning) - zmin, zmax, hrep, navg, zz = subgrid_q_table( - zgu.flatten(), manning.flatten(), nbins + zmin, zmax, havg, nrep, pwet, ffit, navg, zz = subgrid_q_table( + zgu.flatten(), manning.flatten(), nlevels, huthresh ) u_zmin[n, m] = zmin u_zmax[n, m] = zmax - u_hrep[:, n, m] = hrep - u_navg[:, n, m] = navg + u_havg[:, n, m] = havg + u_nrep[:, n, m] = nrep + u_pwet[:, n, m] = pwet + u_ffit[n, m] = ffit + u_navg[n, m] = navg # V nn = n * refi + int(0.5 * refi) mm = m * refi zgu = zg[nn : nn + refi, mm : mm + refi] manning = manning_grid[nn : nn + refi, mm : mm + refi] - zmin, zmax, hrep, navg, zz = subgrid_q_table( - zgu.flatten(), manning.flatten(), nbins + zmin, zmax, havg, nrep, pwet, ffit, navg, zz = subgrid_q_table( + zgu.flatten(), manning.flatten(), nlevels, huthresh ) v_zmin[n, m] = zmin v_zmax[n, m] = zmax - v_hrep[:, n, m] = hrep - v_navg[:, n, m] = navg + v_havg[:, n, m] = havg + v_nrep[:, n, m] = nrep + v_pwet[:, n, m] = pwet + v_ffit[n, m] = ffit + v_navg[n, m] = navg return ( z_zmin, z_zmax, - # z_zmean, z_volmax, - z_depth, + z_level, u_zmin, u_zmax, - u_hrep, + u_havg, + u_nrep, + u_pwet, + u_ffit, u_navg, v_zmin, v_zmax, - v_hrep, + v_havg, + v_nrep, + v_pwet, + v_ffit, v_navg, ) @@ -684,7 +931,7 @@ def subgrid_v_table( elevation: np.ndarray, dx: float, dy: float, - nbins: int, + nlevels: int, zvolmin: float, max_gradient: float, ): @@ -700,8 +947,8 @@ def subgrid_v_table( x-directional cell size (typically not known at this level) [m] dy: float y-directional cell size (typically not known at this level) [m] - nbins: int - number of bins to use for the hypsometric curve + nlevels: int + number of levels to use for the hypsometric curve zvolmin: float minimum elevation value to use for volume calculation (typically -20 m) max_gradient: float @@ -731,10 +978,10 @@ def subgrid_v_table( volume = np.zeros_like(depth) volume[1:] = np.cumsum((np.diff(depth) * dx * dy) * np.arange(1, depth.size)) - # Resample volumes to discrete bins - steps = np.arange(nbins + 1) / nbins + # Resample volumes to discrete levels + steps = np.arange(nlevels) / (nlevels - 1) V = steps * volume.max() - dvol = volume.max() / nbins + dvol = volume.max() / (nlevels - 1) # scipy not supported in numba jit # z = interpolate.interp1d(volume, ele_sort)(V) z = np.interp(V, volume, ele_sort) @@ -742,7 +989,7 @@ def subgrid_v_table( n = 0 while ( dzdh.max() > max_gradient and not (isclose(dzdh.max(), max_gradient)) - ) and n < nbins: + ) and n < nlevels: # reshape until gradient is satisfactory idx = np.where(dzdh == dzdh.max())[0] z[idx + 1] = z[idx] + max_gradient * (dvol / a) @@ -752,63 +999,136 @@ def subgrid_v_table( @njit -def subgrid_q_table(elevation: np.ndarray, manning: np.ndarray, nbins: int): +def subgrid_q_table( + elevation: np.ndarray, manning: np.ndarray, nlevels: int, huthresh: float +): """ - map elevation values into a hypsometric hydraulic radius - depth relationship - + map vector of elevation values into a hypsometric hydraulic radius - depth relationship for one u/v point Parameters ---------- - elevation: np.ndarray - subgrid elevation values for one grid cell [m] - manning: np.ndarray - subgrid manning roughness values for one grid cell [s m^(-1/3)] - nbins: int - number of bins to use for the hypsometric curve - + elevation : np.ndarray (nr of pixels in one cell) containing subgrid elevation values for one grid cell [m] + manning : np.ndarray (nr of pixels in one cell) containing subgrid manning roughness values for one grid cell [s m^(-1/3)] + nlevels : int, number of vertical levels [-] + huthresh : float, threshold depth [m] Returns ------- - zmin, zmax: float - minimum and maximum elevation values used for hypsometric curve - hrep, navg, zz: np.ndarray - conveyance depth, average manning roughness, and elevation values - for each bin + zmin : float, minimum elevation [m] + zmax : float, maximum elevation [m] + havg : np.ndarray (nlevels) grid-average depth for vertical levels [m] + nrep : np.ndarray (nlevels) representative roughness for vertical levels [m1/3/s] ? + pwet : np.ndarray (nlevels) wet fraction for vertical levels [-] ? + navg : float, grid-average Manning's n [m 1/3 / s] + ffit : float, fitting coefficient [-] + zz : np.ndarray (nlevels) elevation of vertical levels [m] """ - hrep = np.zeros(nbins, dtype=np.float32) - navg = np.zeros(nbins, dtype=np.float32) - zz = np.zeros(nbins, dtype=np.float32) + # Initialize output arrays + havg = np.zeros(nlevels) + nrep = np.zeros(nlevels) + pwet = np.zeros(nlevels) + zz = np.zeros(nlevels) n = int(elevation.size) # Nr of pixels in grid cell - n05 = int(n / 2) - - zmin_a = np.min(elevation[0:n05]) - zmax_a = np.max(elevation[0:n05]) - - zmin_b = np.min(elevation[n05:]) - zmax_b = np.max(elevation[n05:]) - - zmin = max(zmin_a, zmin_b) - zmax = max(zmax_a, zmax_b) - - # Make sure zmax is a bit higher than zmin - if zmax < zmin + 0.01: - zmax += 0.01 - - # Determine bin size - dbin = (zmax - zmin) / nbins - - # Loop through bins - for ibin in range(nbins): - # Top of bin - zbin = zmin + (ibin + 1) * dbin - zz[ibin] = zbin - - ibelow = np.where(elevation <= zbin) # index of pixels below bin level - # water depth in each pixel - h = np.maximum(zbin - np.maximum(elevation, zmin), 0.0) - qi = h ** (5.0 / 3.0) / manning # unit discharge in each pixel - q = np.sum(qi) / n # combined unit discharge for cell - - navg[ibin] = manning[ibelow].mean() # mean manning's n - hrep[ibin] = (q * navg[ibin]) ** (3.0 / 5.0) # conveyance depth - - return zmin, zmax, hrep, navg, zz + # n = int(np.size(elevation)) # Nr of pixels in grid cell + + n05 = int(n / 2) # Index of middle pixel + + dd_a = elevation[0:n05] # Pixel elevations side A + dd_b = elevation[n05:] # Pixel elevations side B + manning_a = manning[0:n05] # Pixel manning side A + manning_b = manning[n05:] # Pixel manning side B + + zmin_a = np.min(dd_a) # Minimum elevation side A + zmax_a = np.max(dd_a) # Maximum elevation side A + + zmin_b = np.min(dd_b) # Minimum elevation side B + zmax_b = np.max(dd_b) # Maximum elevation side B + + zmin = max(zmin_a, zmin_b) + huthresh # Minimum elevation of uv point + zmax = max(zmax_a, zmax_b) # Maximum elevation of uv point + + # Make sure zmax is always a bit higher than zmin + if zmax < zmin + 0.001: + zmax = max(zmax, zmin + 0.001) + + # Determine level size (metres) + dlevel = (zmax - zmin) / (nlevels - 1) + + # Grid mean roughness + navg = np.mean(manning) + + # Loop through levels + for ilevel in range(nlevels): + # Top of level + zlevel = zmin + ilevel * dlevel + zz[ilevel] = zlevel + + # ibelow = np.where(elevation<=zlevel) # index of pixels below level level + h = np.maximum(zlevel - elevation, 0.0) # water depth in each pixel + iwet = np.where(zlevel - elevation > -1.0e-6)[0] # indices of wet pixels + hmean = np.mean(h) + havg[ilevel] = hmean # conveyance depth + pwet[ilevel] = len(iwet) / n # wet fraction + + # Side A + h_a = np.maximum( + zlevel - dd_a, 0.0 + ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_a = h_a ** (5.0 / 3.0) / manning_a # Determine 'flux' for each pixel + q_a = np.mean(q_a) # Wet-average flux through all the pixels + + # Side B + h_b = np.maximum( + zlevel - dd_b, 0.0 + ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_b = h_b ** (5.0 / 3.0) / manning_b # Determine 'flux' for each pixel + q_b = np.mean(q_b) # Wet-average flux through all the pixels + + q_ab = np.minimum(q_a, q_b) + + q_all = h ** (5.0 / 3.0) / manning # Determine 'flux' for each pixel + q_all = np.mean(q_all) # Wet-average flux through all the pixels + + # Weighted average of q_ab and q_all + w = (ilevel) / (nlevels - 1) + q = (1.0 - w) * q_ab + w * q_all + + nrep[ilevel] = hmean ** (5.0 / 3.0) / q # Representative n for qmean and hmean + + nrep_top = nrep[-1] + havg_top = havg[-1] + + ### Fitting for nrep above zmax + + # Determine nfit at zfit + zfit = zmax + zmax - zmin + h = np.maximum(zfit - elevation, 0.0) # water depth in each pixel + hfit = ( + havg_top + zmax - zmin + ) # mean water depth in cell as computed in SFINCS (assuming linear relation between water level and water depth above zmax) + q = h ** (5.0 / 3.0) / manning # unit discharge in each pixel + qmean = np.mean(q) # combined unit discharge for cell + + nfit = hfit ** (5.0 / 3.0) / qmean + + # Actually apply fit on gn2 (this is what is used in sfincs) + gnavg2 = 9.81 * navg**2 + gnavg_top2 = 9.81 * nrep_top**2 + + if gnavg2 / gnavg_top2 > 0.99 and gnavg2 / gnavg_top2 < 1.01: + # gnavg2 and gnavg_top2 are almost identical + ffit = 0.0 + else: + if navg > nrep_top: + if nfit > navg: + nfit = nrep_top + 0.9 * (navg - nrep_top) + if nfit < nrep_top: + nfit = nrep_top + 0.1 * (navg - nrep_top) + else: + if nfit < navg: + nfit = nrep_top + 0.9 * (navg - nrep_top) + if nfit > nrep_top: + nfit = nrep_top + 0.1 * (navg - nrep_top) + gnfit2 = 9.81 * nfit**2 + ffit = (((gnavg2 - gnavg_top2) / (gnavg2 - gnfit2)) - 1) / (zfit - zmax) + + return zmin, zmax, havg, nrep, pwet, ffit, navg, zz diff --git a/hydromt_sfincs/utils.py b/hydromt_sfincs/utils.py index 5c56ad22..48a1324c 100644 --- a/hydromt_sfincs/utils.py +++ b/hydromt_sfincs/utils.py @@ -52,6 +52,7 @@ "downscale_floodmap", "rotated_grid", "build_overviews", + "find_uv_indices", ] logger = logging.getLogger(__name__) @@ -1184,3 +1185,103 @@ def _downscale_floodmap_da( hmax = hmax.where(mask) return hmax + + +def find_uv_indices(mask: xr.DataArray): + """The subgrid tables for a regular SFINCS grid are organized as flattened arrays, meaning + 2D arrays (y,x) are transformed into 1D arrays, only containing values for active cells. + + For the cell centers, this is straightforward, we just find the indices of the active cells. + However, the u and v points are saved in combined arrays. Since u and v points are absent + at the boundaries of the domain, the index arrays are used to determine the location of the + u and v points in the combined flattened arrays. + + + + Parameters + ---------- + mask: xr.DataArray + Mask with integer values specifying the active cells of the SFINCS domain. + + Returns + ------- + index_nm: np.ndarray + Index array for the active cell centers. + index_mu1: np.ndarray + Index of upstream u-point in combined uv-array. + index_nu1: np.ndarray + Index of upstream v-point in combined uv-array. + + """ + + mask = mask.values + + # nr of cells + nr_cells = mask.shape[0] * mask.shape[1] + + # get the index of the u and v points in a combined array + mu1 = np.zeros(nr_cells, dtype=int) - 1 + nu1 = np.zeros(nr_cells, dtype=int) - 1 + + ms = np.linspace(0, mask.shape[1] - 1, mask.shape[1], dtype=int) + ns = np.linspace(0, mask.shape[0] - 1, mask.shape[0], dtype=int) + + m, n = np.meshgrid(ms, ns) + + m = np.transpose(m).flatten() + n = np.transpose(n).flatten() + + mask = mask.transpose().flatten() + + nmax = n.max() + 1 + nms = m * nmax + n + + for ic in range(nr_cells): + # nu1 + nn = n[ic] + 1 + if nn < nmax: + mm = m[ic] + nm = mm * nmax + nn + j = binary_search(nms, nm) + if j is not None: + nu1[ic] = j + # mu1 + nn = n[ic] + mm = m[ic] + 1 + nm = mm * nmax + nn + j = binary_search(nms, nm) + if j is not None: + mu1[ic] = j + + # For regular grids, only the points with mask > 0 are stored + # The index arrays determine the location in the flattened arrays (with values for all active points) + # Initialize index arrays with -1, inactive cells will remain -1 + index_nm = np.zeros(nr_cells, dtype=int) - 1 + index_mu1 = np.zeros(nr_cells, dtype=int) - 1 + index_nu1 = np.zeros(nr_cells, dtype=int) - 1 + npuv = 0 + npc = 0 + # Loop through all cells + for ip in range(nr_cells): + # Check if this cell is active + if mask[ip] > 0: + index_nm[ip] = npc + npc += 1 + if mu1[ip] >= 0: + if mask[mu1[ip]] > 0: + index_mu1[ip] = npuv + npuv += 1 + if nu1[ip] >= 0: + if mask[nu1[ip]] > 0: + index_nu1[ip] = npuv + npuv += 1 + + return index_nm, index_mu1, index_nu1 + + +def binary_search(vals, val): + indx = np.searchsorted(vals, val) + if indx < np.size(vals): + if vals[indx] == val: + return indx + return None diff --git a/tests/data/sfincs_test/sfincs.inp b/tests/data/sfincs_test/sfincs.inp index 5b0c70fd..2ccebd03 100644 --- a/tests/data/sfincs_test/sfincs.inp +++ b/tests/data/sfincs_test/sfincs.inp @@ -44,7 +44,7 @@ bndfile = sfincs.bnd bzsfile = sfincs.bzs srcfile = sfincs.src disfile = sfincs.dis -sbgfile = sfincs.sbg +sbgfile = sfincs_subgrid.nc obsfile = sfincs.obs crsfile = sfincs.crs thdfile = sfincs.thd diff --git a/tests/data/sfincs_test/sfincs.sbg b/tests/data/sfincs_test/sfincs.sbg index e0452c832bc60b7e8873ca5b5e21a2c0d923cc95..1a9fbaafefe4f46c1b62b20416d5556579848c54 100644 GIT binary patch delta 1224 zcmdUu+e=hY6vo+eW|SDnYAmY}r6Oe|Pd7WKUdUSh)vBA#qzZOYepp=h|m7HyR36Gz+FFoUQiie{A(|8*nkd&8V0nQKp*RvksGLzO``V>tF^(BC-1R~PAWH7EbEh;5n*F#a1`!`Y#=q` zYWXfLR(Td4+}q8<7%Y0b|H<6f!*0rsp&s^_8JWil3lvo?Gb*pOIF)s4*%-OI$AOHN zxZjpiI_Ec2@X^SBLU%;)?P)E77lu!#iy<@f?14>Yng*)u%9=H2L|@T8P~#n>d!VNM zwa00vz|q;16gy$!YMUI{3y$Mr@NFd@gIgU-jS*3`k3MSPID2=%+g$4*NwnD z%|&M6C(T9X^5VEd2L2?CgB1DYaU#%0ez!u=+$-UfutJkik-NIpuEgV`hJT#~P{8LH zEw5iM7H4c&UOe6}N*!1p#HBPgt5{aMm`G=|J`&A8v_53oH?a>6Ssut>G@r^v=N7Du z%=p|kS{s$owzEv>?!wy8n6VpsfqT@=TH(NRvuS72Ae%HhMJ5lq*$#dU`)TfS6B^wdC&>86}h4|-T+T>v5Gh$f;Z2cF+d^wOYtL+cH*?L4HiM%go{;tK!g WZ||btPRB+^p<}1x5JNp_p1Qy35(hj0 delta 1228 zcmdUu?@N2}&Y4MP zbjvPnH5HNGOKem_#1pNoO-rWorT+?BvQR2454W*V2GN+_J4c#dMBLAqoupVY6{6!8 z{(Tiz&7})D(ZM=U8y5MVYSkpeH(8wpmOOErU9?kqY$cU?uV#eU>kK$b=RG!*o^iEe zs}Zd_4G&(@%>o!K!`=U6?(SjNRmVsV>t!PQ$nIh-mGX$HYb|yy9#4wrw+d{?7}Iy! z(n{yTdQI2gh@w8aBZ7|)>kteIw@DX6X7aw#^lF}V0CEB+J@c0J>q1oaNzm5v^QmtOPZCU8235ZW_}=#omWkR zdCb(b0rQ3QY{%21h%fFWa<^V6Yj%Nr!0eS?7sw$diizB2 z<%hsb5nrw*=6RQ!RgItFHl-;NV=zZsCzC%{ai`Y_0ZPBQv2=YlWghcoyw zX!O>A9{%@hK~J`Pxt{2$ff_SoYEA>_VUcqIgqS0nh@KpHQ8UpigXT3Y9AKNcFUT5I d&u|b|_&B(@_{{;Xw8GQf% diff --git a/tests/data/sfincs_test/sfincs_subgrid.nc b/tests/data/sfincs_test/sfincs_subgrid.nc new file mode 100644 index 0000000000000000000000000000000000000000..1d60533f2847a9ce5c761739eb81d13b02b8c069 GIT binary patch literal 1121609 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

S7qT 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

p>ffK@Xz1 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

qBn! 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 Co 0).sum(), 351.10803) +def test_subgrid_io(tmpdir): + # test the backward compatibility of reading/writing subgrid + root = TESTMODELDIR + datadir = TESTDATADIR + + mod0 = SfincsModel(root=root, mode="r") + # read-in the current subgrid (netcdf format) + mod0.read() + # check version and new parameter + assert mod0.reggrid.subgrid.version == 1 + # u and v paramters should be separated internally + assert "u_pwet" in mod0.subgrid + assert "uv_pwet" not in mod0.subgrid + sbg_net = mod0.subgrid.copy() + + # write the subgrid (new format) + tmp_root = str(tmpdir.join("subgrid_io_test")) + mod0.set_root(tmp_root, mode="w") + mod0.write() + assert isfile(join(mod0.root, "sfincs_subgrid.nc")) + + # read back-in + mod1 = SfincsModel(root=tmp_root, mode="r") + mod1.read() + # Check if variables are the same + assert mod0.subgrid.variables.keys() == mod1.subgrid.variables.keys() + + # Check if values are almost equal + for var_name in mod0.subgrid.variables: + assert np.isclose(np.sum(mod0.subgrid[var_name] - mod1.subgrid[var_name]), 0.0) + + # copy old sbgfile to new location + sbgfile = join(datadir, "sfincs_test", "sfincs.sbg") + + # change the subgrid to the old format (binary format) + mod1.set_config("sbgfile", sbgfile) + mod1.read_subgrid() + + # check version and new parameter + assert mod1.reggrid.subgrid.version == 0 + assert "u_pwet" not in mod1.subgrid + assert "uv_pwet" not in mod1.subgrid + sbg_bin = mod1.subgrid.copy() + + # compare z_zmin and z_zmax + assert np.isclose(np.sum(sbg_net["z_zmin"] - sbg_bin["z_zmin"]), 0.0) + # TODO: check with Maarten whether this is meant to be different + # difference comes from different discretization of volume bins + assert np.isclose(np.sum(sbg_net["z_zmax"] - sbg_bin["z_zmax"]), 1.0714283) + + def test_subgrid_rivers(mod): gdf_riv = mod.data_catalog.get_geodataframe( "rivers_lin2019_v1", geom=mod.region, buffer=1e3 From 7d64e7a6f7fadb7cf38b489949bc73c23256e129 Mon Sep 17 00:00:00 2001 From: roeldegoede <83765910+roeldegoede@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:05:30 +0200 Subject: [PATCH 04/28] update changelog (#193) --- docs/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index f2d17a17..29b356c4 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -12,6 +12,7 @@ v1.0.4 (Unreleased) Added ----- - improved subgrid tables that account for the wet fraction of the cell (#160) +- add source points at headwater locations with `SfincsModel.setup_river_inflow` (#170) Changed ------- From 2d32528502c23bc51705b6a3d15e304798c1956b Mon Sep 17 00:00:00 2001 From: maartenvanormondt Date: Wed, 15 May 2024 10:47:09 -0400 Subject: [PATCH 05/28] update weigths between zmin and zmax in uv points --- hydromt_sfincs/subgrid.py | 100 +++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index 3fda9464..113dbeed 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -1053,62 +1053,72 @@ def subgrid_q_table( # Determine level size (metres) dlevel = (zmax - zmin) / (nlevels - 1) - # Grid mean roughness - navg = np.mean(manning) + # Option can be either 1 ("old") or 2 ("new") + option = 2 # Loop through levels - for ilevel in range(nlevels): - # Top of level - zlevel = zmin + ilevel * dlevel - zz[ilevel] = zlevel - - # ibelow = np.where(elevation<=zlevel) # index of pixels below level level - h = np.maximum(zlevel - elevation, 0.0) # water depth in each pixel - iwet = np.where(zlevel - elevation > -1.0e-6)[0] # indices of wet pixels - hmean = np.mean(h) - havg[ilevel] = hmean # conveyance depth - pwet[ilevel] = len(iwet) / n # wet fraction + for ibin in range(nlevels): - # Side A - h_a = np.maximum( - zlevel - dd_a, 0.0 - ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). - q_a = h_a ** (5.0 / 3.0) / manning_a # Determine 'flux' for each pixel - q_a = np.mean(q_a) # Wet-average flux through all the pixels - - # Side B - h_b = np.maximum( - zlevel - dd_b, 0.0 - ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). - q_b = h_b ** (5.0 / 3.0) / manning_b # Determine 'flux' for each pixel - q_b = np.mean(q_b) # Wet-average flux through all the pixels - - q_ab = np.minimum(q_a, q_b) + # Top of bin + zbin = zmin + ibin * dlevel + zz[ibin] = zbin - q_all = h ** (5.0 / 3.0) / manning # Determine 'flux' for each pixel - q_all = np.mean(q_all) # Wet-average flux through all the pixels + h = np.maximum(zbin - elevation, 0.0) # water depth in each pixel - # Weighted average of q_ab and q_all - w = (ilevel) / (nlevels - 1) - q = (1.0 - w) * q_ab + w * q_all - nrep[ilevel] = hmean ** (5.0 / 3.0) / q # Representative n for qmean and hmean + pwet[ibin] = (zbin - elevation > -1.0e-6).sum() / n - nrep_top = nrep[-1] + # Side A + h_a = np.maximum(zbin - dd_a, 0.0) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_a = h_a**(5.0 / 3.0) / manning_a # Determine 'flux' for each pixel + q_a = np.mean(q_a) # Grid-average flux through all the pixels + h_a = np.mean(h_a) # Grid-average depth through all the pixels + + # Side B + h_b = np.maximum(zbin - dd_b, 0.0) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_b = h_b**(5.0 / 3.0) / manning_b # Determine 'flux' for each pixel + q_b = np.mean(q_b) # Grid-average flux through all the pixels + h_b = np.mean(h_b) # Grid-average depth through all the pixels + + # Compute q and h + q_all = np.mean(h**(5.0 / 3.0) / manning) # Determine grid average 'flux' for each pixel + h_all = np.mean(h) # grid averaged depth of A and B combined + q_min = np.minimum(q_a, q_b) + h_min = np.minimum(h_a, h_b) + + if option == 1: + # Use old 1 option (weighted average of q_ab and q_all) option (min at bottom bin, mean at top bin) + w = (ibin) / (nlevels - 1) # Weight (increase from 0 to 1 from bottom to top bin) + q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all + hmean = h_all + + elif option == 2: + # Use newer 2 option (minimum of q_a an q_b, minimum of h_a and h_b increasing to h_all, using pwet for weighting) option + pwet_a = (zbin - dd_a > -1.0e-6).sum() / (n / 2) + pwet_b = (zbin - dd_b > -1.0e-6).sum() / (n / 2) + # Weight increases linearly from 0 to 1 from bottom to top bin use percentage wet in sides A and B + w = 2 * np.minimum(pwet_a, pwet_b) / (pwet_a + pwet_b) + q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all + hmean = (1.0 - w) * h_min + w * h_all # Weighted average of h_min and h_all + + havg[ibin] = hmean # conveyance depth + nrep[ibin] = hmean**(5.0 / 3.0) / q # Representative n for qmean and hmean + + nrep_top = nrep[-1] havg_top = havg[-1] ### Fitting for nrep above zmax # Determine nfit at zfit - zfit = zmax + zmax - zmin - h = np.maximum(zfit - elevation, 0.0) # water depth in each pixel - hfit = ( - havg_top + zmax - zmin - ) # mean water depth in cell as computed in SFINCS (assuming linear relation between water level and water depth above zmax) - q = h ** (5.0 / 3.0) / manning # unit discharge in each pixel - qmean = np.mean(q) # combined unit discharge for cell + zfit = zmax + zmax - zmin + hfit = havg_top + zmax - zmin # mean water depth in cell as computed in SFINCS (assuming linear relation between water level and water depth above zmax) - nfit = hfit ** (5.0 / 3.0) / qmean + # Compute q and navg + h = np.maximum(zfit - elevation, 0.0) # water depth in each pixel + q = np.mean(h**(5.0 / 3.0) / manning) # combined unit discharge for cell + navg = np.mean(manning) + + nfit = hfit**(5.0 / 3.0) / q # Actually apply fit on gn2 (this is what is used in sfincs) gnavg2 = 9.81 * navg**2 @@ -1130,5 +1140,5 @@ def subgrid_q_table( nfit = nrep_top + 0.1 * (navg - nrep_top) gnfit2 = 9.81 * nfit**2 ffit = (((gnavg2 - gnavg_top2) / (gnavg2 - gnfit2)) - 1) / (zfit - zmax) - - return zmin, zmax, havg, nrep, pwet, ffit, navg, zz + + return zmin, zmax, havg, nrep, pwet, ffit, navg, zz From 89a1e7687cee46bbf04493f87e91ca986b1a81ef Mon Sep 17 00:00:00 2001 From: dalmijn <92092029+dalmijn@users.noreply.github.com> Date: Fri, 24 May 2024 11:00:09 +0200 Subject: [PATCH 06/28] Update plots.py (#196) When shaded and no rotation, `kwargs` is still used instead of `kwargs0` --- hydromt_sfincs/plots.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydromt_sfincs/plots.py b/hydromt_sfincs/plots.py index 7cbe43e4..17e4b888 100644 --- a/hydromt_sfincs/plots.py +++ b/hydromt_sfincs/plots.py @@ -258,8 +258,8 @@ def plot_basemap( dx, dy = da.raster.res _rgb = ls.shade( da.fillna(0).values, - norm=kwargs["norm"], - cmap=kwargs["cmap"], + norm=kwargs0["norm"], + cmap=kwargs0["cmap"], blend_mode="soft", dx=dx, dy=dy, From c84c590067b32ebb5e7ba7053488c655905ceb8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Guti=C3=A9rrez-Barcel=C3=B3?= <38423310+gutierrad@users.noreply.github.com> Date: Mon, 3 Jun 2024 01:31:29 -0700 Subject: [PATCH 07/28] Added nodata value to raster before writing (#199) * Added nodata value to raster before writing * checked variable type to set nodata * removed trailing whitespace * removed trailing whitespace --- hydromt_sfincs/sfincs.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 5a22a067..dafde8bf 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -3398,6 +3398,9 @@ def write_raster( f"Variable {attr}.{layer} has more than 2 dimensions: skipping." ) continue + # If the raster type is float, set nodata to np.nan + if da.dtype == "float32" or da.dtype == "float64": + da.raster.set_nodata(np.nan) # only write active cells to gis files da = da.where(self.mask > 0, da.raster.nodata).raster.mask_nodata() if da.raster.res[1] > 0: # make sure orientation is N->S From 0893a8e0be2907d192a0ce2db766883445d9fd67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 07:55:39 +0200 Subject: [PATCH 08/28] Update hydromt requirement from <0.10,>=0.9.1 to >=0.9.1,<0.11 (#201) * Update hydromt requirement from <0.10,>=0.9.1 to >=0.9.1,<0.11 Updates the requirements on [hydromt](https://github.com/Deltares/hydromt) to permit the latest version. - [Release notes](https://github.com/Deltares/hydromt/releases) - [Changelog](https://github.com/Deltares/hydromt/blob/main/docs/changelog.rst) - [Commits](https://github.com/Deltares/hydromt/compare/v0.9.1...v0.10.0) --- updated-dependencies: - dependency-name: hydromt dependency-type: direct:production ... Signed-off-by: dependabot[bot] * temp pin numpy --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: DirkEilander <15379728+DirkEilander@users.noreply.github.com> --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dd6d25c5..03c9f952 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,9 +13,9 @@ authors = [ dependencies = [ "affine", "geopandas>=0.8", - "hydromt>=0.9.1, <0.10", + "hydromt>=0.9.1, <0.11", "numba", - "numpy", + "numpy<2.0", # temp pin until bottleneck release v1.4 "pandas", "pillow", "pyflwdir>=0.5.5", From 33be56ec7d6cc1559ea293e971ead17a05933ac8 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Mon, 26 Aug 2024 13:55:10 +0200 Subject: [PATCH 09/28] run pre-commit --- hydromt_sfincs/subgrid.py | 70 ++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index 113dbeed..fd5c1780 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -1058,67 +1058,75 @@ def subgrid_q_table( # Loop through levels for ibin in range(nlevels): - # Top of bin zbin = zmin + ibin * dlevel zz[ibin] = zbin h = np.maximum(zbin - elevation, 0.0) # water depth in each pixel - pwet[ibin] = (zbin - elevation > -1.0e-6).sum() / n # Side A - h_a = np.maximum(zbin - dd_a, 0.0) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). - q_a = h_a**(5.0 / 3.0) / manning_a # Determine 'flux' for each pixel - q_a = np.mean(q_a) # Grid-average flux through all the pixels - h_a = np.mean(h_a) # Grid-average depth through all the pixels - + h_a = np.maximum( + zbin - dd_a, 0.0 + ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_a = h_a ** (5.0 / 3.0) / manning_a # Determine 'flux' for each pixel + q_a = np.mean(q_a) # Grid-average flux through all the pixels + h_a = np.mean(h_a) # Grid-average depth through all the pixels + # Side B - h_b = np.maximum(zbin - dd_b, 0.0) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). - q_b = h_b**(5.0 / 3.0) / manning_b # Determine 'flux' for each pixel - q_b = np.mean(q_b) # Grid-average flux through all the pixels - h_b = np.mean(h_b) # Grid-average depth through all the pixels + h_b = np.maximum( + zbin - dd_b, 0.0 + ) # Depth of all pixels (but set min pixel height to zbot). Can be negative, but not zero (because zmin = zbot + huthresh, so there must be pixels below zb). + q_b = h_b ** (5.0 / 3.0) / manning_b # Determine 'flux' for each pixel + q_b = np.mean(q_b) # Grid-average flux through all the pixels + h_b = np.mean(h_b) # Grid-average depth through all the pixels # Compute q and h - q_all = np.mean(h**(5.0 / 3.0) / manning) # Determine grid average 'flux' for each pixel - h_all = np.mean(h) # grid averaged depth of A and B combined + q_all = np.mean( + h ** (5.0 / 3.0) / manning + ) # Determine grid average 'flux' for each pixel + h_all = np.mean(h) # grid averaged depth of A and B combined q_min = np.minimum(q_a, q_b) h_min = np.minimum(h_a, h_b) if option == 1: - # Use old 1 option (weighted average of q_ab and q_all) option (min at bottom bin, mean at top bin) - w = (ibin) / (nlevels - 1) # Weight (increase from 0 to 1 from bottom to top bin) - q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all + # Use old 1 option (weighted average of q_ab and q_all) option (min at bottom bin, mean at top bin) + w = (ibin) / ( + nlevels - 1 + ) # Weight (increase from 0 to 1 from bottom to top bin) + q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all hmean = h_all elif option == 2: # Use newer 2 option (minimum of q_a an q_b, minimum of h_a and h_b increasing to h_all, using pwet for weighting) option - pwet_a = (zbin - dd_a > -1.0e-6).sum() / (n / 2) - pwet_b = (zbin - dd_b > -1.0e-6).sum() / (n / 2) + pwet_a = (zbin - dd_a > -1.0e-6).sum() / (n / 2) + pwet_b = (zbin - dd_b > -1.0e-6).sum() / (n / 2) # Weight increases linearly from 0 to 1 from bottom to top bin use percentage wet in sides A and B w = 2 * np.minimum(pwet_a, pwet_b) / (pwet_a + pwet_b) - q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all - hmean = (1.0 - w) * h_min + w * h_all # Weighted average of h_min and h_all + q = (1.0 - w) * q_min + w * q_all # Weighted average of q_min and q_all + hmean = (1.0 - w) * h_min + w * h_all # Weighted average of h_min and h_all - havg[ibin] = hmean # conveyance depth - nrep[ibin] = hmean**(5.0 / 3.0) / q # Representative n for qmean and hmean + havg[ibin] = hmean # conveyance depth + nrep[ibin] = hmean ** (5.0 / 3.0) / q # Representative n for qmean and hmean - nrep_top = nrep[-1] + nrep_top = nrep[-1] havg_top = havg[-1] ### Fitting for nrep above zmax # Determine nfit at zfit - zfit = zmax + zmax - zmin - hfit = havg_top + zmax - zmin # mean water depth in cell as computed in SFINCS (assuming linear relation between water level and water depth above zmax) + zfit = zmax + zmax - zmin + hfit = ( + havg_top + zmax - zmin + ) # mean water depth in cell as computed in SFINCS (assuming linear relation between water level and water depth above zmax) # Compute q and navg - h = np.maximum(zfit - elevation, 0.0) # water depth in each pixel - q = np.mean(h**(5.0 / 3.0) / manning) # combined unit discharge for cell - navg = np.mean(manning) + h = np.maximum(zfit - elevation, 0.0) # water depth in each pixel + q = np.mean(h ** (5.0 / 3.0) / manning) # combined unit discharge for cell + navg = np.mean(manning) - nfit = hfit**(5.0 / 3.0) / q + nfit = hfit ** (5.0 / 3.0) / q # Actually apply fit on gn2 (this is what is used in sfincs) gnavg2 = 9.81 * navg**2 @@ -1140,5 +1148,5 @@ def subgrid_q_table( nfit = nrep_top + 0.1 * (navg - nrep_top) gnfit2 = 9.81 * nfit**2 ffit = (((gnavg2 - gnavg_top2) / (gnavg2 - gnfit2)) - 1) / (zfit - zmax) - - return zmin, zmax, havg, nrep, pwet, ffit, navg, zz + + return zmin, zmax, havg, nrep, pwet, ffit, navg, zz From 0c2eb7d9131c10b5b9f3d152b63c079f54367a26 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Wed, 28 Aug 2024 13:42:19 +0200 Subject: [PATCH 10/28] added q_table_option for backward compatability and changed max_gradient accordingly --- hydromt_sfincs/sfincs.py | 12 +++++++++++- hydromt_sfincs/subgrid.py | 25 +++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index dafde8bf..1a2b8d81 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -619,8 +619,10 @@ def setup_subgrid( nbins: int = None, nr_subgrid_pixels: int = 20, nrmax: int = 2000, # blocksize - max_gradient: float = 5.0, + max_gradient: float = 999.0, z_minimum: float = -99999.0, + huthresh: float = 0.01, + q_table_option: int = 2, manning_land: float = 0.04, manning_sea: float = 0.02, rgh_lev_land: float = 0.0, @@ -710,6 +712,12 @@ def setup_subgrid( to prevent numerical stability problems, by default 5.0 z_minimum : float, optional Minimum depth in the subgrid tables, by default -99999.0 + huthresh : float, optional + Threshold depth in SFINCS model, by default 0.01 m + q_table_option : int, optional + Option for the computation of the conveyance depth at u/v points, by default 2. + 1: "old" method, compliant with SFINCS < v2.1.0 + 2: "new" method, recommended for SFINCS >= v2.1.0 manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 Note that these values are only used when no Manning's n datasets are provided, @@ -765,6 +773,8 @@ def setup_subgrid( nrmax=nrmax, max_gradient=max_gradient, z_minimum=z_minimum, + huthresh=huthresh, + q_table_option=q_table_option, manning_land=manning_land, manning_sea=manning_sea, rgh_lev_land=rgh_lev_land, diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index fd5c1780..1f0c7026 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -371,9 +371,10 @@ def build( nlevels: int = 10, nr_subgrid_pixels: int = 20, nrmax: int = 2000, - max_gradient: float = 5.0, + max_gradient: float = 999.0, z_minimum: float = -99999.0, huthresh: float = 0.01, + q_table_option: int = 2, manning_land: float = 0.04, manning_sea: float = 0.02, rgh_lev_land: float = 0.0, @@ -428,6 +429,10 @@ def build( Minimum depth in the subgrid tables, by default -99999.0 huthresh : float, optional Threshold depth in SFINCS model, by default 0.01 m + q_table_option : int, optional + Option for the computation of the conveyance depth at u/v points, by default 2. + 1: "old" method, compliant with SFINCS < v2.1.0 + 2: "new" method, recommended for SFINCS >= v2.1.0 manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 @@ -716,6 +721,7 @@ def build( yg, max_gradient, huthresh, + q_table_option, da_mask.raster.crs.is_geographic, ) @@ -797,6 +803,7 @@ def process_tile_regular( yg, max_gradient, huthresh, + q_table_option, is_geographic=False, ): """calculate subgrid properties for a single tile""" @@ -864,7 +871,7 @@ def process_tile_regular( manning = manning_grid[nn : nn + refi, mm : mm + refi] manning = np.transpose(manning) zmin, zmax, havg, nrep, pwet, ffit, navg, zz = subgrid_q_table( - zgu.flatten(), manning.flatten(), nlevels, huthresh + zgu.flatten(), manning.flatten(), nlevels, huthresh, q_table_option ) u_zmin[n, m] = zmin u_zmax[n, m] = zmax @@ -880,7 +887,7 @@ def process_tile_regular( zgu = zg[nn : nn + refi, mm : mm + refi] manning = manning_grid[nn : nn + refi, mm : mm + refi] zmin, zmax, havg, nrep, pwet, ffit, navg, zz = subgrid_q_table( - zgu.flatten(), manning.flatten(), nlevels, huthresh + zgu.flatten(), manning.flatten(), nlevels, huthresh, q_table_option ) v_zmin[n, m] = zmin v_zmax[n, m] = zmax @@ -1000,7 +1007,11 @@ def subgrid_v_table( @njit def subgrid_q_table( - elevation: np.ndarray, manning: np.ndarray, nlevels: int, huthresh: float + elevation: np.ndarray, + manning: np.ndarray, + nlevels: int, + huthresh: float, + option: int, ): """ map vector of elevation values into a hypsometric hydraulic radius - depth relationship for one u/v point @@ -1010,6 +1021,8 @@ def subgrid_q_table( manning : np.ndarray (nr of pixels in one cell) containing subgrid manning roughness values for one grid cell [s m^(-1/3)] nlevels : int, number of vertical levels [-] huthresh : float, threshold depth [m] + option : int, option to use "old" or "new" method for computing conveyance depth at u/v points + Returns ------- zmin : float, minimum elevation [m] @@ -1053,8 +1066,8 @@ def subgrid_q_table( # Determine level size (metres) dlevel = (zmax - zmin) / (nlevels - 1) - # Option can be either 1 ("old") or 2 ("new") - option = 2 + # Option can be either 1 ("old, compliant with SFINCS < v2.1.0") or 2 ("new", recommended SFINCS >= v2.1.0) + option = option # Loop through levels for ibin in range(nlevels): From e7d0e37383c8e0a88c68dea179878d5145106cad Mon Sep 17 00:00:00 2001 From: Tim Leijnse Date: Wed, 28 Aug 2024 16:47:18 +0200 Subject: [PATCH 11/28] =?UTF-8?q?Default=20for=20baro=20should=20be=20set?= =?UTF-8?q?=20to=201!=20As=20is=20default=20in=20SFINCS=20itself,=20?= =?UTF-8?q?=E2=80=A6=20(#208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Default for baro should be set to 1! As is default in SFINCS itself, otherwise any pressure input is ignored.... * cahnge default value also in test-inputs --------- Co-authored-by: roeldegoede --- hydromt_sfincs/sfincs_input.py | 2 +- tests/data/sfincs_test/sfincs.inp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hydromt_sfincs/sfincs_input.py b/hydromt_sfincs/sfincs_input.py index a5faa9d2..a504f6fa 100644 --- a/hydromt_sfincs/sfincs_input.py +++ b/hydromt_sfincs/sfincs_input.py @@ -45,7 +45,7 @@ def __init__(self): self.rhow = 1024.0 self.dtmax = 60.0 self.advection = 1 - self.baro = 0 + self.baro = 1 self.pavbnd = 0 self.gapres = 101200.0 self.stopdepth = 100.0 diff --git a/tests/data/sfincs_test/sfincs.inp b/tests/data/sfincs_test/sfincs.inp index 2ccebd03..6e210f7f 100644 --- a/tests/data/sfincs_test/sfincs.inp +++ b/tests/data/sfincs_test/sfincs.inp @@ -30,7 +30,7 @@ rhoa = 1.25 rhow = 1024.0 dtmax = 60.0 advection = 1 -baro = 0 +baro = 1 pavbnd = 0 gapres = 101200.0 stopdepth = 100.0 From ca7f23c6e3ef5c154eca0c17a0b57e105f453cf2 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 29 Aug 2024 09:28:10 +0200 Subject: [PATCH 12/28] fix dependencies and deprecation warnings --- hydromt_sfincs/sfincs.py | 6 +++--- hydromt_sfincs/subgrid.py | 6 +++--- hydromt_sfincs/utils.py | 6 +++--- hydromt_sfincs/workflows/bathymetry.py | 4 ++-- hydromt_sfincs/workflows/flwdir.py | 10 +++++----- pyproject.toml | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 1a2b8d81..635e0647 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -292,7 +292,7 @@ def setup_grid_from_region( # create grid from region # NOTE keyword rotated is added to still have the possibility to create unrotated grids if needed (e.g. for FEWS?) if rotated: - geom = self.geoms["region"].unary_union + geom = self.geoms["region"].union_all() x0, y0, mmax, nmax, rot = utils.rotated_grid( geom, res, dec_origin=dec_origin, dec_rotation=dec_rotation ) @@ -1072,11 +1072,11 @@ def setup_river_outflow( if np.any(self.mask == 2) and btype == "outflow": gdf_msk2 = utils.get_bounds_vector(self.mask) # NOTE: this should be a single geom - geom = gdf_msk2[gdf_msk2["value"] == 2].unary_union + geom = gdf_msk2[gdf_msk2["value"] == 2].union_all() gdf_out = gdf_out[~gdf_out.intersects(geom)] # remove outflow points near source points if "dis" in self.forcing and len(gdf_out) > 0: - geom = self.forcing["dis"].vector.to_gdf().unary_union + geom = self.forcing["dis"].vector.to_gdf().union_all() gdf_out = gdf_out[~gdf_out.intersects(geom)] # update mask diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index 1f0c7026..add6ea3d 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -39,9 +39,9 @@ def read(self, file_name, mask): # get number of levels, point and uv points self.nlevels, self.nr_cells, self.nr_uv_points = ( - ds.dims["levels"], - ds.dims["np"], - ds.dims["npuv"], + ds.sizes["levels"], + ds.sizes["np"], + ds.sizes["npuv"], ) # find indices of active cells diff --git a/hydromt_sfincs/utils.py b/hydromt_sfincs/utils.py index 48a1324c..b4060ab9 100644 --- a/hydromt_sfincs/utils.py +++ b/hydromt_sfincs/utils.py @@ -221,7 +221,7 @@ def read_xy(fn: Union[str, Path], crs: Union[int, CRS] = None) -> gpd.GeoDataFra def read_xyn(fn: str, crs: int = None): - df = pd.read_csv(fn, index_col=False, header=None, delim_whitespace=True).rename( + df = pd.read_csv(fn, index_col=False, header=None, sep="\s+").rename( columns={0: "x", 1: "y"} ) if len(df.columns) > 2: @@ -280,7 +280,7 @@ def read_timeseries(fn: Union[str, Path], tref: Union[str, datetime]) -> pd.Data Dataframe of timeseries with parsed time index. """ tref = parse_datetime(tref) - df = pd.read_csv(fn, delim_whitespace=True, index_col=0, header=None) + df = pd.read_csv(fn, index_col=0, header=None, sep="\s+") df.index = pd.to_datetime(df.index.values, unit="s", origin=tref) df.columns = df.columns.values.astype(int) df.index.name = "time" @@ -800,7 +800,7 @@ def read_sfincs_map_results( continue if "x" in ds_map[var].dims and "y" in ds_map[var].dims: # drop to overwrite with ds_like.raster.coords - ds_face[var] = ds_map[var].drop(["xc", "yc"]) + ds_face[var] = ds_map[var].drop_vars(["xc", "yc"]) elif ds_map[var].ndim == 0: ds_face[var] = ds_map[var] else: diff --git a/hydromt_sfincs/workflows/bathymetry.py b/hydromt_sfincs/workflows/bathymetry.py index f4e3e010..e7969a8d 100644 --- a/hydromt_sfincs/workflows/bathymetry.py +++ b/hydromt_sfincs/workflows/bathymetry.py @@ -257,7 +257,7 @@ def burn_river_rect( # get gdf_riv outside of mask and buffer these lines # then merge with gdf_riv_mask to get the full river mask gdf_mask = gpd.GeoDataFrame( - geometry=[gdf_riv_mask.buffer(0).unary_union], + geometry=[gdf_riv_mask.buffer(0).union_all()], crs=gdf_riv_mask.crs, ) # create single polygon to clip gdf_riv_clip = gdf_riv.overlay(gdf_mask, how="difference") @@ -318,7 +318,7 @@ def burn_river_rect( # merge river lines > z points are interpolated along merged line if gdf_riv.index.size > 1: gdf_riv_merged = gpd.GeoDataFrame( - geometry=[linemerge(gdf_riv.unary_union)], crs=gdf_riv.crs + geometry=[linemerge(gdf_riv.union_all())], crs=gdf_riv.crs ) gdf_riv_merged = gdf_riv_merged.explode(index_parts=True).reset_index(drop=True) else: diff --git a/hydromt_sfincs/workflows/flwdir.py b/hydromt_sfincs/workflows/flwdir.py index e13e33fe..18d5a7ea 100644 --- a/hydromt_sfincs/workflows/flwdir.py +++ b/hydromt_sfincs/workflows/flwdir.py @@ -55,7 +55,7 @@ def river_centerline_from_hydrography( gdf_riv = gpd.GeoDataFrame.from_features(feats, crs=da_flwdir.raster.crs) # clip to mask and remove empty geometries if gdf_mask is not None and isinstance(gdf_mask, gpd.GeoDataFrame): - gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.unary_union) + gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.union_all()) gdf_riv = gdf_riv[~gdf_riv.is_empty] # create river network from gdf to get distance from outlet 'rivlen' # length of river segments @@ -142,7 +142,7 @@ def river_source_points( gdf_mask = gdf_mask.to_crs("epsg:3857") # clip river to model gdf_mask - gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.unary_union) + gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.union_all()) # filter river network based on uparea and length if "uparea" in gdf_riv.columns: gdf_riv = gdf_riv[gdf_riv["uparea"] >= river_upa] @@ -166,15 +166,15 @@ def river_source_points( # get points that do not intersect with up/downstream end of other river segments # use a small buffer of 5m around these points to account for dx and avoid issues with inprecise river geometries if src_type in ["inflow", "headwater"]: - pnts_ds = gdf_ds.buffer(5).unary_union + pnts_ds = gdf_ds.buffer(5).union_all() gdf_pnt = gdf_up[~gdf_up.intersects(pnts_ds)].reset_index(drop=True) elif src_type == "outflow": - pnts_up = gdf_up.buffer(5).unary_union + pnts_up = gdf_up.buffer(5).union_all() gdf_pnt = gdf_ds[~gdf_ds.intersects(pnts_up)].reset_index(drop=True) # get buffer around gdf_mask, in- and outflow points should be within this buffer if src_type in ["inflow", "outflow"]: - bnd = gdf_mask.boundary.buffer(buffer).unary_union + bnd = gdf_mask.boundary.buffer(buffer).union_all() gdf_pnt = gdf_pnt[gdf_pnt.intersects(bnd)].reset_index(drop=True) # log numer of source points diff --git a/pyproject.toml b/pyproject.toml index 03c9f952..b7e0d34d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,8 +12,8 @@ authors = [ ] dependencies = [ "affine", - "geopandas>=0.8", - "hydromt>=0.9.1, <0.11", + "geopandas>=1.0", + "hydromt>=0.10, <0.11", "numba", "numpy<2.0", # temp pin until bottleneck release v1.4 "pandas", From 562da59bcc75861e46412596404946250467a0cc Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 29 Aug 2024 09:29:56 +0200 Subject: [PATCH 13/28] version bump --- hydromt_sfincs/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydromt_sfincs/__init__.py b/hydromt_sfincs/__init__.py index 9c051e8d..41d287be 100644 --- a/hydromt_sfincs/__init__.py +++ b/hydromt_sfincs/__init__.py @@ -3,7 +3,7 @@ from os.path import dirname, join, abspath -__version__ = "1.0.4.dev" +__version__ = "1.1.0" DATADIR = join(dirname(abspath(__file__)), "data") From 213bfcfa1946a774f1ac72bc670ae9b36b877971 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 29 Aug 2024 09:53:39 +0200 Subject: [PATCH 14/28] update changelog --- docs/changelog.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 29b356c4..5acc7b7e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,22 +6,28 @@ Distinction is made between new methods (Added), changes to existing methods (Ch The format is based on `Keep a Changelog`_, and this project adheres to `Semantic Versioning`_. -v1.0.4 (Unreleased) +v1.1.0 (Unreleased) =================== Added ----- - improved subgrid tables that account for the wet fraction of the cell (#160) - add source points at headwater locations with `SfincsModel.setup_river_inflow` (#170) +- it's now possible to provide a format/precision in `SfincsModel.write_forcing` (#197) +- river bed levels for burn-in can now be provided at point locations in `SfincsModel.setup_subgrid` (#209) Changed ------- - improved subgrid tables are saved as NetCDF (#160) +- improved weighting of adjacent cells in u/v points for determining representative Manning roughness and conveyance depth (#200) +- turned on "baro", the atmospheric pressure term in the momentum equation, in sfincs.inp by default (#208) +- the expected variable names for wind and pressure forcing have been changed to "wind10_u", "wind10_v" and "press_msl" to match hydromt-core conventions (#211) Fixed ----- - rounding errors in `workflows.tile_window` which resulted in erronuous slippy-tiles (#178) - "active geometry column to use has not been set" error for GeoDataFrame (#180) +- added nodata value to raster before writing (#199) v1.0.3 (3 January 2024) From 4200bcddec5ebc0676ee8be2f0c2f0e3692c7f2f Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 29 Aug 2024 10:16:32 +0200 Subject: [PATCH 15/28] add valueerror for max_gradient when using old q_table_option --- hydromt_sfincs/sfincs.py | 13 +++++++++---- hydromt_sfincs/subgrid.py | 10 +++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 1a2b8d81..da09adb4 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -619,7 +619,7 @@ def setup_subgrid( nbins: int = None, nr_subgrid_pixels: int = 20, nrmax: int = 2000, # blocksize - max_gradient: float = 999.0, + max_gradient: float = 99999.0, z_minimum: float = -99999.0, huthresh: float = 0.01, q_table_option: int = 2, @@ -715,9 +715,9 @@ def setup_subgrid( huthresh : float, optional Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional - Option for the computation of the conveyance depth at u/v points, by default 2. - 1: "old" method, compliant with SFINCS < v2.1.0 - 2: "new" method, recommended for SFINCS >= v2.1.0 + Option for the computation of the representative roughness and conveyance depth at u/v points, by default 2. + 1: "old" weighting method, compliant with SFINCS < v2.1.0, taking the avarage of the adjecent cells + 2: "improved" weighting method, recommended for SFINCS >= v2.1.0, that takes into account the wet fractions of the adjacent cells manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 Note that these values are only used when no Manning's n datasets are provided, @@ -761,6 +761,11 @@ def setup_subgrid( ) nlevels = nbins + if q_table_option == 1 and max_gradient > 20.0: + raise ValueError( + "For the old q_table_option, a max_gradient of 5.0 is recommended to improve numerical stability" + ) + if self.grid_type == "regular": self.reggrid.subgrid.build( da_mask=self.mask, diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index 1f0c7026..1a741864 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -371,7 +371,7 @@ def build( nlevels: int = 10, nr_subgrid_pixels: int = 20, nrmax: int = 2000, - max_gradient: float = 999.0, + max_gradient: float = 99999.0, z_minimum: float = -99999.0, huthresh: float = 0.01, q_table_option: int = 2, @@ -430,9 +430,9 @@ def build( huthresh : float, optional Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional - Option for the computation of the conveyance depth at u/v points, by default 2. - 1: "old" method, compliant with SFINCS < v2.1.0 - 2: "new" method, recommended for SFINCS >= v2.1.0 + Option for the computation of the representative roughness and conveyance depth at u/v points, by default 2. + 1: "old" weighting method, compliant with SFINCS < v2.1.0, taking the avarage of the adjecent cells + 2: "improved" weighting method, recommended for SFINCS >= v2.1.0, that takes into account the wet fractions of the adjacent cells manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 @@ -959,7 +959,7 @@ def subgrid_v_table( zvolmin: float minimum elevation value to use for volume calculation (typically -20 m) max_gradient: float - maximum gradient to use for volume calculation (typically 0.1) + maximum gradient to use for volume calculation Return ------ From e5245a90c59ee9534773d4ddde900716a2a7352c Mon Sep 17 00:00:00 2001 From: DirkEilander <15379728+DirkEilander@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:17:09 +0200 Subject: [PATCH 16/28] move inflow points to confluence if within buffer from model boundary (#202) * move inflow points to confluence * fix of test_river_source_points * force river_inflow buffer to be 100 to match old default value (and fix the test) * update test and changelog --------- Co-authored-by: roeldegoede --- docs/changelog.rst | 2 ++ hydromt_sfincs/sfincs.py | 13 +++++++------ hydromt_sfincs/workflows/flwdir.py | 20 ++++++++++++++------ tests/data/sfincs_test.yml | 1 + tests/test_flwdir.py | 8 ++++---- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 29b356c4..aed8bcb5 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -17,6 +17,8 @@ Added Changed ------- - improved subgrid tables are saved as NetCDF (#160) +- In `SfincsModel.setup_river_inflow`, in case of a confluence within a user-defined buffer of the + model boundary the confluence rather than both tributaries is selected as inflow point. (#202) Fixed ----- diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index dafde8bf..65327bcb 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -794,6 +794,7 @@ def setup_river_inflow( self, rivers: Union[str, Path, gpd.GeoDataFrame] = None, hydrography: Union[str, Path, xr.Dataset] = None, + buffer: float = 200, river_upa: float = 10.0, river_len: float = 1e3, river_width: float = 500, @@ -814,7 +815,8 @@ def setup_river_inflow( Discharge is set to zero at these points, but can be updated using the `setup_discharge_forcing` or `setup_discharge_forcing_from_grid` methods. - Note: this method assumes the rivers are directed from up- to downstream. + Note: this method assumes the rivers are directed from up- to downstream. Use + `reverse_river_geom=True` if the rivers are directed from downstream to upstream. Adds model layers: @@ -831,6 +833,10 @@ def setup_river_inflow( Path, data source name, or a xarray raster object for hydrography data. * Required layers: ['uparea', 'flwdir']. + buffer: float, optional + Buffer around the model region boundary to define in/outflow points [m], + by default 200 m. We suggest to use a buffer of at least twice the hydrography + resolution. Inflow points are moved to a downstreawm confluence if within the buffer. river_upa : float, optional Minimum upstream area threshold for rivers [km2], by default 10.0 river_len: float, optional @@ -892,11 +898,6 @@ def setup_river_inflow( elif hydrography is None: raise ValueError("Either hydrography or rivers must be provided.") - # estimate buffer based on model resolution - buffer = self.reggrid.dx - if self.crs.is_geographic: - buffer = buffer * 111111.0 - # get river inflow / headwater source points gdf_src = workflows.river_source_points( gdf_riv=gdf_riv, diff --git a/hydromt_sfincs/workflows/flwdir.py b/hydromt_sfincs/workflows/flwdir.py index e13e33fe..f59ff334 100644 --- a/hydromt_sfincs/workflows/flwdir.py +++ b/hydromt_sfincs/workflows/flwdir.py @@ -1,4 +1,5 @@ """Flow direction and river network workflows for SFINCS models.""" + import logging from typing import Tuple @@ -82,7 +83,7 @@ def river_source_points( gdf_riv: gpd.GeoDataFrame, gdf_mask: gpd.GeoDataFrame, src_type: str = "inflow", - buffer: float = 100, + buffer: float = 200, river_upa: float = 10, river_len: float = 1e3, da_uparea: xr.DataArray = None, @@ -109,7 +110,8 @@ def river_source_points( If 'outflow', return points where the river flows out of the model domain. If 'headwater', return all headwater (including inflow) points within the model domain. buffer: float, optional - Buffer around gdf_mask to select river source points, by default 100 m. + Buffer around gdf_mask to select river source points, by default 200 m. + Inflow points are moved to a downstream confluence if within the buffer. river_upa : float, optional Minimum upstream area threshold for rivers [km2], by default 10.0 river_len: float, optional @@ -143,6 +145,11 @@ def river_source_points( # clip river to model gdf_mask gdf_riv = gdf_riv.to_crs(gdf_mask.crs).clip(gdf_mask.unary_union) + # keep only lines + gdf_riv = gdf_riv[ + [t.endswith("LineString") for t in gdf_riv.geom_type] + ].reset_index(drop=True) + # filter river network based on uparea and length if "uparea" in gdf_riv.columns: gdf_riv = gdf_riv[gdf_riv["uparea"] >= river_upa] @@ -154,17 +161,19 @@ def river_source_points( ) return gpd.GeoDataFrame() + # remove lines that fully are within the buffer of the mask boundary + bnd = gdf_mask.boundary.buffer(buffer).unary_union + gdf_riv = gdf_riv[~gdf_riv.within(bnd)] + # get source points 1m before the start/end of the river # a positive dx results in a point near the start of the line (inflow) # a negative dx results in a point near the end of the line (outflow) dx = -1 if reverse_river_geom else 1 gdf_up = gdf_riv.interpolate(dx).to_frame("geometry") - gdf_up["riv_idx"] = gdf_riv.index gdf_ds = gdf_riv.interpolate(-dx).to_frame("geometry") - gdf_ds["riv_idx"] = gdf_riv.index # get points that do not intersect with up/downstream end of other river segments - # use a small buffer of 5m around these points to account for dx and avoid issues with inprecise river geometries + # use a small buffer of 5m around these points to account for dx and avoid issues with imprecise river geometries if src_type in ["inflow", "headwater"]: pnts_ds = gdf_ds.buffer(5).unary_union gdf_pnt = gdf_up[~gdf_up.intersects(pnts_ds)].reset_index(drop=True) @@ -174,7 +183,6 @@ def river_source_points( # get buffer around gdf_mask, in- and outflow points should be within this buffer if src_type in ["inflow", "outflow"]: - bnd = gdf_mask.boundary.buffer(buffer).unary_union gdf_pnt = gdf_pnt[gdf_pnt.intersects(bnd)].reset_index(drop=True) # log numer of source points diff --git a/tests/data/sfincs_test.yml b/tests/data/sfincs_test.yml index e0f37222..a5089958 100644 --- a/tests/data/sfincs_test.yml +++ b/tests/data/sfincs_test.yml @@ -56,6 +56,7 @@ setup_drainage_structures: setup_river_inflow: hydrography: merit_hydro + buffer: 100 river_upa: 10 river_len: 1000 keep_rivers_geom: True diff --git a/tests/test_flwdir.py b/tests/test_flwdir.py index b6d55b1b..9e416661 100644 --- a/tests/test_flwdir.py +++ b/tests/test_flwdir.py @@ -39,20 +39,20 @@ def test_river_source_points(hydrography, data_catalog): assert gdf_src.index.size == 6 gdf_src = river_source_points(src_type="outflow", da_uparea=da_uparea, **kwargs) assert gdf_src.index.size == 1 - assert np.isin(["geometry", "riv_idx", "uparea"], gdf_src.columns).all() + assert np.isin(["geometry", "uparea"], gdf_src.columns).all() + np.allclose(gdf_src.geometry[0].coords[:], [(322650.3, 5044385.7)]) # test reverse oriented line gdf_riv = data_catalog.get_geodataframe("rivers_lin2019_v1") kwargs = dict(gdf_riv=gdf_riv, gdf_mask=gdf_mask, reverse_river_geom=True) gdf_src = river_source_points(src_type="inflow", **kwargs) assert gdf_src.index.size == 1 # this data only one river - assert gdf_src["riv_idx"].values[0] == 38 + np.allclose(gdf_src.geometry[0].coords[:], [(322650.3, 5044385.7)]) gdf_src = river_source_points(src_type="outflow", **kwargs) + np.allclose(gdf_src.geometry[0].coords[:], [(322554.0, 5044434.7)]) assert gdf_src.index.size == 1 # this data only one river - assert gdf_src["riv_idx"].values[0] == 34 gdf_src = river_source_points(src_type="headwater", **kwargs) assert gdf_src.index.size == 2 - assert np.isin(38, gdf_src["riv_idx"].values) # test errors with pytest.raises(ValueError, match="src_type must be either"): From 74039aff1be81690e9ce45034b0e7c3d7c66571b Mon Sep 17 00:00:00 2001 From: roeldegoede <83765910+roeldegoede@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:35:49 +0200 Subject: [PATCH 17/28] update variable names for wind and pressure according to hydromt-core (#211) --- hydromt_sfincs/sfincs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 65327bcb..4691bfb2 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -2326,7 +2326,7 @@ def setup_pressure_forcing_from_grid( press, str, Path, xr.Dataset, xr.DataArray Path to pressure rasterdataset netcdf file or xarray dataset. - * Required variables: ['press' (Pa)] + * Required variables: ['press_msl' (Pa)] * Required coordinates: ['time', 'y', 'x'] dst_res: float @@ -2342,7 +2342,7 @@ def setup_pressure_forcing_from_grid( geom=self.region, buffer=2, time_tuple=self.get_model_time(), - variables=["press"], + variables=["press_msl"], ) # reproject to model utm crs @@ -2384,7 +2384,7 @@ def setup_wind_forcing_from_grid(self, wind, dst_res=None, **kwargs): wind, str, Path, xr.Dataset Path to wind rasterdataset (including eastward and northward components) netcdf file or xarray dataset. - * Required variables: ['wind_u' (m/s), 'wind_v' (m/s)] + * Required variables: ['wind10_u' (m/s), 'wind10_v' (m/s)] * Required coordinates: ['time', 'y', 'x'] dst_res: float @@ -2396,7 +2396,7 @@ def setup_wind_forcing_from_grid(self, wind, dst_res=None, **kwargs): geom=self.region, buffer=2, time_tuple=self.get_model_time(), - variables=["wind_u", "wind_v"], + variables=["wind10_u", "wind10_v"], ) # reproject to model utm crs From 84262d03e9d76d14bd2c49708e33e8987563c0d5 Mon Sep 17 00:00:00 2001 From: roeldegoede <83765910+roeldegoede@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:40:39 +0200 Subject: [PATCH 18/28] Parse forcing precision (#210) * Default for baro should be set to 1! As is default in SFINCS itself, otherwise any pressure input is ignored.... * cahnge default value also in test-inputs * added option to parse precision of forcing timeseries * remove "auto" derivation of timeseries format because it's prone to errors * fix tests --------- Co-authored-by: Tim Leijnse --- hydromt_sfincs/sfincs.py | 12 +++++++----- tests/test_1model_class.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 4691bfb2..5ea70510 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -3113,7 +3113,7 @@ def read_forcing(self, data_vars: List = None): else: logger.warning(f"No forcing variables found in {fname}file") - def write_forcing(self, data_vars: Union[List, str] = None): + def write_forcing(self, data_vars: Union[List, str] = None, fmt: str = "%7.2f"): """Write forcing to ascii or netcdf (netampr) files. Filenames are based on the `config` attribute. @@ -3121,14 +3121,16 @@ def write_forcing(self, data_vars: Union[List, str] = None): ---------- data_vars : list of str, optional List of data variables to write, by default None (all) + fmt : str, optional + Format string for timeseries data, by default "%7.2f". """ self._assert_write_mode # change precision of coordinates according to crs if self.crs.is_geographic: - fmt = "%.6f" + fmt_xy = "%.6f" else: - fmt = "%.1f" + fmt_xy = "%.1f" if self.forcing: self.logger.info("Write forcing files") @@ -3166,7 +3168,7 @@ def write_forcing(self, data_vars: Union[List, str] = None): self.set_config(f"{ts_name}file", f"sfincs.{ts_name}") fn = self.get_config(f"{ts_name}file", abs_path=True) # write timeseries - utils.write_timeseries(fn, df, tref) + utils.write_timeseries(fn, df, tref, fmt=fmt) # write xy if xy_name and da is not None: # parse data to geodataframe @@ -3179,7 +3181,7 @@ def write_forcing(self, data_vars: Union[List, str] = None): self.set_config(f"{xy_name}file", f"sfincs.{xy_name}") fn_xy = self.get_config(f"{xy_name}file", abs_path=True) # write xy - hydromt.io.write_xy(fn_xy, gdf, fmt=fmt) + hydromt.io.write_xy(fn_xy, gdf, fmt=fmt_xy) if self._write_gis: # write geojson file to gis folder self.write_vector(variables=f"forcing.{ts_names[0]}") diff --git a/tests/test_1model_class.py b/tests/test_1model_class.py index 98850e63..785af152 100644 --- a/tests/test_1model_class.py +++ b/tests/test_1model_class.py @@ -359,6 +359,37 @@ def test_observations(tmpdir): assert len(mod.geoms["crs"].index) == nr_observation_lines * 2 +def test_forcing_io(tmpdir): + root = TESTMODELDIR + mod = SfincsModel(root=root, mode="r") + # read + mod.read_forcing() + + # write forcing + tmp_root = str(tmpdir.join("forcing_test")) + mod.set_root(tmp_root, mode="w") + mod.write_forcing() + mod.write_config() + + # read and check if identical + mod1 = SfincsModel(root=tmp_root, mode="r") + mod1.read_forcing() + assert np.allclose(mod1.forcing["bzs"], mod.forcing["bzs"]) + + # now change the timeseries-format and write again + tmp_root = str(tmpdir.join("forcing_test2")) + mod1.set_root(tmp_root, mode="w+") + mod1.write_forcing(fmt="%7.1f") + mod1.write_config() + + # read and check if identical + mod2 = SfincsModel(root=tmp_root, mode="r") + mod2.read_forcing() + assert np.isclose( + np.sum(mod2.forcing["bzs"].values - mod1.forcing["bzs"].values), 0.73 + ) + + def test_read_results(): root = TESTMODELDIR mod = SfincsModel(root=root, mode="r") From aef72a3bd72a5fd693da193344f0d32567c99c0b Mon Sep 17 00:00:00 2001 From: vanasseltk <167875592+vanasseltk@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:01:23 +0200 Subject: [PATCH 19/28] Dca rivers (#209) * key_zb * compatible with burnign in rivers through elevation dataset * changes_review (to be cotinued) * commnets_roel (continued) * new adjustment for parsing * last edit * pre_commit * small update; point zb could be combined with gdf_riv so it should be outside the if centerlines statement --------- Co-authored-by: roeldegoede --- hydromt_sfincs/sfincs.py | 21 ++++++++++++++++++--- hydromt_sfincs/workflows/bathymetry.py | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 5ea70510..683e9d5d 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -680,6 +680,7 @@ def setup_subgrid( rivdph or rivbed (river depth [m]; river bedlevel [m+REF]), manning (Manning's n [s/m^(1/3)]; optional) * mask (optional): filename (or Path) of river mask + * point_zb (optional): filename (or Path) of river points with bed (z) values * river attributes (optional): "rivdph", "rivbed", "rivwth", "manning" to fill missing values * arguments to the river burn method (optional): @@ -3720,6 +3721,8 @@ def _parse_datasets_riv(self, datasets_riv): "mask", "gdf_riv", "gdf_riv_mask", + "gdf_zb", + "point_zb", ] copy_keys = [] attrs = ["rivwth", "rivdph", "rivbed", "manning"] @@ -3747,11 +3750,24 @@ def _parse_datasets_riv(self, datasets_riv): gdf_riv[key] = value elif np.any(np.isnan(gdf_riv[key])): # fill na gdf_riv[key] = gdf_riv[key].fillna(value) - if not gdf_riv.columns.isin(["rivbed", "rivdph"]).any(): + dd.update({"gdf_riv": gdf_riv}) + + # parse bed_level on points + if "point_zb" in dataset: + gdf_zb = self.data_catalog.get_geodataframe( + dataset.get("point_zb"), + geom=self.mask.raster.box, + ) + dd.update({"gdf_zb": gdf_zb}) + + if "gdf_riv" in dd: + if ( + not gdf_riv.columns.isin(["rivbed", "rivdph"]).any() + and "gdf_zb" not in dd + ): raise ValueError("No 'rivbed' or 'rivdph' attribute found.") else: raise ValueError("No 'centerlines' dataset provided.") - dd.update({"gdf_riv": gdf_riv}) # parse mask if "mask" in dataset: @@ -3765,7 +3781,6 @@ def _parse_datasets_riv(self, datasets_riv): "Either mask must be provided or centerlines " "should contain a 'rivwth' attribute." ) - # copy remaining keys for key, value in dataset.items(): if key in copy_keys and key not in dd: diff --git a/hydromt_sfincs/workflows/bathymetry.py b/hydromt_sfincs/workflows/bathymetry.py index f4e3e010..adb68d60 100644 --- a/hydromt_sfincs/workflows/bathymetry.py +++ b/hydromt_sfincs/workflows/bathymetry.py @@ -311,6 +311,7 @@ def burn_river_rect( if np.any(np.isnan(gdf_zb[manning_name])): gdf_zb["idx0"], _ = nearest(gdf_zb, gdf_riv) man_nearest = gdf_riv.loc[gdf_zb["idx0"], manning_name] + man_nearest.index = gdf_zb.index gdf_zb[manning_name] = gdf_zb[manning_name].fillna(man_nearest) elif rivbed_name not in gdf_zb.columns: raise ValueError(f"Missing {rivbed_name} or {rivdph_name} attributes") From 97c803c4fcfda410a9cc7ba06a62d5204022749a Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 29 Aug 2024 11:07:43 +0200 Subject: [PATCH 20/28] don't show working_with_data_example anymore on the docs --- docs/user_guide/sfincs_build_update.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user_guide/sfincs_build_update.rst b/docs/user_guide/sfincs_build_update.rst index e3f95145..e75ccdf5 100644 --- a/docs/user_guide/sfincs_build_update.rst +++ b/docs/user_guide/sfincs_build_update.rst @@ -147,4 +147,4 @@ See `Example: Build from Script <../_examples/build_from_script.ipynb>`_ for a m Example: Build from CLI <../_examples/build_from_cli.ipynb> Example: Build from script <../_examples/build_from_script.ipynb> Example: Setup model forcing <../_examples/example_forcing.ipynb> - Example: Working with data <../_examples/example_datasources.ipynb> + .. Example: Working with data <../_examples/example_datasources.ipynb> From 36c11ffd4bc2575f1e7808da921f6afc1bcfe844 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Tue, 3 Sep 2024 15:20:19 +0200 Subject: [PATCH 21/28] solve deprecation warning --- hydromt_sfincs/workflows/flwdir.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydromt_sfincs/workflows/flwdir.py b/hydromt_sfincs/workflows/flwdir.py index 4f1188e2..00a5b370 100644 --- a/hydromt_sfincs/workflows/flwdir.py +++ b/hydromt_sfincs/workflows/flwdir.py @@ -162,7 +162,7 @@ def river_source_points( return gpd.GeoDataFrame() # remove lines that fully are within the buffer of the mask boundary - bnd = gdf_mask.boundary.buffer(buffer).unary_union + bnd = gdf_mask.boundary.buffer(buffer).union_all() gdf_riv = gdf_riv[~gdf_riv.within(bnd)] # get source points 1m before the start/end of the river From 7c3330ab44bd1f839cabe2c8bfd725c687ebc67a Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Wed, 4 Sep 2024 14:19:24 +0200 Subject: [PATCH 22/28] update environment and sfincs release name --- envs/hydromt-sfincs-dev.yml | 4 ++-- hydromt_sfincs/sfincs.py | 4 ++-- hydromt_sfincs/subgrid.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/envs/hydromt-sfincs-dev.yml b/envs/hydromt-sfincs-dev.yml index 4458ad0c..ebb3ce98 100644 --- a/envs/hydromt-sfincs-dev.yml +++ b/envs/hydromt-sfincs-dev.yml @@ -8,8 +8,8 @@ dependencies: - cartopy - descartes - ffmpeg -- geopandas>=0.8 -- hydromt>=0.9.1, <0.10 +- geopandas>=1.0 +- hydromt>=0.10, <0.11 - jupyterlab - matplotlib - nbsphinx diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index 7fca5fde..2c534769 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -717,8 +717,8 @@ def setup_subgrid( Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional Option for the computation of the conveyance depth at u/v points, by default 2. - 1: "old" method, compliant with SFINCS < v2.1.0 - 2: "new" method, recommended for SFINCS >= v2.1.0 + 1: "old" method, compliant with SFINCS < v2.1. + 2: "new" method, recommended for SFINCS >= v2.1. manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 Note that these values are only used when no Manning's n datasets are provided, diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index add6ea3d..32d0b7b6 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -431,8 +431,8 @@ def build( Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional Option for the computation of the conveyance depth at u/v points, by default 2. - 1: "old" method, compliant with SFINCS < v2.1.0 - 2: "new" method, recommended for SFINCS >= v2.1.0 + 1: "old" method, compliant with SFINCS < v2.1. + 2: "new" method, recommended for SFINCS >= v2.1. manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 @@ -1066,7 +1066,7 @@ def subgrid_q_table( # Determine level size (metres) dlevel = (zmax - zmin) / (nlevels - 1) - # Option can be either 1 ("old, compliant with SFINCS < v2.1.0") or 2 ("new", recommended SFINCS >= v2.1.0) + # Option can be either 1 ("old, compliant with SFINCS < v2.1.") or 2 ("new", recommended SFINCS >= v2.1.) option = option # Loop through levels From cbc59232be1690d4d4370d0220e2d851ca4683e4 Mon Sep 17 00:00:00 2001 From: Tim Leijnse Date: Wed, 4 Sep 2024 14:25:55 +0200 Subject: [PATCH 23/28] Update sfincs.py --- hydromt_sfincs/sfincs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index da09adb4..f0920980 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -716,7 +716,7 @@ def setup_subgrid( Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional Option for the computation of the representative roughness and conveyance depth at u/v points, by default 2. - 1: "old" weighting method, compliant with SFINCS < v2.1.0, taking the avarage of the adjecent cells + 1: "old" weighting method, compliant with SFINCS < v2.1.0, taking the avarage of the adjacent cells 2: "improved" weighting method, recommended for SFINCS >= v2.1.0, that takes into account the wet fractions of the adjacent cells manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 From 9c422abeb6c5ab172db3cfc06de2385c5f1dbf00 Mon Sep 17 00:00:00 2001 From: Tim Leijnse Date: Wed, 4 Sep 2024 14:26:37 +0200 Subject: [PATCH 24/28] Update sfincs.py --- hydromt_sfincs/sfincs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index f0920980..e82c633f 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -716,8 +716,8 @@ def setup_subgrid( Threshold depth in SFINCS model, by default 0.01 m q_table_option : int, optional Option for the computation of the representative roughness and conveyance depth at u/v points, by default 2. - 1: "old" weighting method, compliant with SFINCS < v2.1.0, taking the avarage of the adjacent cells - 2: "improved" weighting method, recommended for SFINCS >= v2.1.0, that takes into account the wet fractions of the adjacent cells + 1: "old" weighting method, compliant with SFINCS < v2.1.1, taking the avarage of the adjacent cells + 2: "improved" weighting method, recommended for SFINCS >= v2.1.1, that takes into account the wet fractions of the adjacent cells manning_land, manning_sea : float, optional Constant manning roughness values for land and sea, by default 0.04 and 0.02 s.m-1/3 Note that these values are only used when no Manning's n datasets are provided, From 12f1081d65e40bac81d5b934b4cb5ae48eefa7e7 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Wed, 4 Sep 2024 16:01:08 +0200 Subject: [PATCH 25/28] bugfixes related to renaming wind and pressure variables in #211 --- hydromt_sfincs/plots.py | 4 ++-- hydromt_sfincs/sfincs.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hydromt_sfincs/plots.py b/hydromt_sfincs/plots.py index 17e4b888..350ae31a 100644 --- a/hydromt_sfincs/plots.py +++ b/hydromt_sfincs/plots.py @@ -73,8 +73,8 @@ def plot_forcing(forcing: Dict, **kwargs): df.plot(drawstyle="steps", ax=axes[i]) elif ( name.startswith("press") - or name.startswith("wind_u") - or name.startswith("wind_v") + or name.startswith("wind10_u") + or name.startswith("wind10_v") ): df.plot.line(ax=axes[i]) elif name.startswith("wnd"): diff --git a/hydromt_sfincs/sfincs.py b/hydromt_sfincs/sfincs.py index b3bf6d59..ab8a86e7 100644 --- a/hydromt_sfincs/sfincs.py +++ b/hydromt_sfincs/sfincs.py @@ -61,7 +61,7 @@ class SfincsModel(GridModel): "press_2d": ("netamp", {"barometric_pressure": "press_2d"}), "wind_2d": ( "netamuamv", - {"eastward_wind": "wind_u", "northward_wind": "wind_v"}, + {"eastward_wind": "wind10_u", "northward_wind": "wind10_v"}, ), } _FORCING_SPW = {"spiderweb": "spw"} # TODO add read and write functions @@ -87,8 +87,8 @@ class SfincsModel(GridModel): "precip": {"standard_name": "precipitation", "unit": "mm.hr-1"}, "precip_2d": {"standard_name": "precipitation", "unit": "mm.hr-1"}, "press_2d": {"standard_name": "barometric pressure", "unit": "Pa"}, - "wind_u": {"standard_name": "eastward wind", "unit": "m/s"}, - "wind_v": {"standard_name": "northward wind", "unit": "m/s"}, + "wind10_u": {"standard_name": "eastward wind", "unit": "m/s"}, + "wind10_v": {"standard_name": "northward wind", "unit": "m/s"}, "wnd": {"standard_name": "wind", "unit": "m/s"}, } From cdfb0b4ff2d0bf059cc8f0dc2b19b1ca982dc9aa Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Wed, 4 Sep 2024 23:23:48 +0200 Subject: [PATCH 26/28] bugfix in reading of subgrid netcdf file --- hydromt_sfincs/subgrid.py | 54 ++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/hydromt_sfincs/subgrid.py b/hydromt_sfincs/subgrid.py index c76a8a1f..b40446b5 100644 --- a/hydromt_sfincs/subgrid.py +++ b/hydromt_sfincs/subgrid.py @@ -47,13 +47,9 @@ def read(self, file_name, mask): # find indices of active cells index_nm, index_mu1, index_nu1 = utils.find_uv_indices(mask) active_indices = np.where(index_nm > -1)[0] - active_indices_u = np.where(index_mu1 > -1)[0] - active_indices_v = np.where(index_nu1 > -1)[0] # convert 1D indices to 2D indices - active_z = np.unravel_index(active_indices, grid_dim, order="F") - active_u = np.unravel_index(active_indices_u, grid_dim, order="F") - active_v = np.unravel_index(active_indices_v, grid_dim, order="F") + active_cells = np.unravel_index(active_indices, grid_dim, order="F") # Initialize the data-arrays # Z points @@ -96,11 +92,11 @@ def read(self, file_name, mask): # Now read the data and add it to the data-arrays # use index_nm of the active cells in the new dataset - self.z_zmin[active_z] = ds["z_zmin"].values.flatten() - self.z_zmax[active_z] = ds["z_zmax"].values.flatten() - self.z_volmax[active_z] = ds["z_volmax"].values.flatten() + self.z_zmin[active_cells] = ds["z_zmin"].values.flatten() + self.z_zmax[active_cells] = ds["z_zmax"].values.flatten() + self.z_volmax[active_cells] = ds["z_volmax"].values.flatten() for ilevel in range(self.nlevels): - self.z_level[ilevel, active_z[0], active_z[1]] = ds["z_level"][ + self.z_level[ilevel, active_cells[0], active_cells[1]] = ds["z_level"][ ilevel ].values.flatten() @@ -108,20 +104,48 @@ def read(self, file_name, mask): var_list = ["zmin", "zmax", "ffit", "navg"] for var in var_list: uv_var = ds["uv_" + var].values.flatten() - self.u_zmin[active_u] = uv_var[index_mu1[active_indices_u]] - self.v_zmin[active_v] = uv_var[index_nu1[active_indices_v]] + + # Dynamically set the attribute for self.u_var and self.v_var + u_attr_name = f"u_{var}" + v_attr_name = f"v_{var}" + + # Retrieve the current attribute values + u_array = getattr(self, u_attr_name) + v_array = getattr(self, v_attr_name) + + # Update only the active indices + u_array[active_cells] = uv_var[index_mu1[active_indices]] + v_array[active_cells] = uv_var[index_nu1[active_indices]] + + # Set the modified arrays back to the attributes + setattr(self, u_attr_name, u_array) + setattr(self, v_attr_name, v_array) var_list_levels = ["havg", "nrep", "pwet"] for var in var_list_levels: for ilevel in range(self.nlevels): uv_var = ds["uv_" + var][ilevel].values.flatten() - self.u_havg[ilevel, active_u[0], active_u[1]] = uv_var[ - index_mu1[active_indices_u] + + # Dynamically set the attribute for self.u_var and self.v_var + u_attr_name = f"u_{var}" + v_attr_name = f"v_{var}" + + # Retrieve the current attribute values + u_array = getattr(self, u_attr_name) + v_array = getattr(self, v_attr_name) + + # Update only the active indices + u_array[ilevel, active_cells[0], active_cells[1]] = uv_var[ + index_mu1[active_indices] ] - self.v_havg[ilevel, active_v[0], active_v[1]] = uv_var[ - index_nu1[active_indices_v] + v_array[ilevel, active_cells[0], active_cells[1]] = uv_var[ + index_nu1[active_indices] ] + # Set the modified arrays back to the attributes + setattr(self, u_attr_name, u_array) + setattr(self, v_attr_name, v_array) + # close the dataset ds.close() From 3f648d8d126887cb9dfb60f804b3f981e58ef436 Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 5 Sep 2024 09:33:01 +0200 Subject: [PATCH 27/28] update changelog and environment.yml --- docs/changelog.rst | 9 ++++++++- environment.yml | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 7966c706..6a2a9878 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,8 +6,15 @@ Distinction is made between new methods (Added), changes to existing methods (Ch The format is based on `Keep a Changelog`_, and this project adheres to `Semantic Versioning`_. -v1.1.0 (Unreleased) +v1.1.0 (05-09-2024) =================== +**This release contains some breaking changes and can only be used in combination with SFINCS versions ≥ 2.1.1 +`SFINCS model `_.** + +The most important change is the implementation of a new subgrid methodology including wet fraction as in Van Ormondt et al. (2024, in review), +which is now written as a NetCDF file! The old implementation is still available when providing the original binary file, but then all wet fractions are assumed to be 1. + +Next to this, some minor additions and bugfixes are made that improve the overall functionality of the package. Added ----- diff --git a/environment.yml b/environment.yml index 98ea9cec..af93b103 100644 --- a/environment.yml +++ b/environment.yml @@ -10,8 +10,8 @@ dependencies: - descartes # to run examples - ffmpeg # to run examples (animation) # - git - - hydromt>=0.8.0 - - hydromt_sfincs>=1.0 + - hydromt>=0.10.0, <0.11 + - hydromt_sfincs>=1.1.0 - jupyterlab # to run examples - matplotlib # to run examples - pip From 872bde61edc750cb8da4585cd31ca31f7476395c Mon Sep 17 00:00:00 2001 From: roeldegoede Date: Thu, 5 Sep 2024 10:08:56 +0200 Subject: [PATCH 28/28] update lay-out changelog --- docs/changelog.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 6a2a9878..10553a24 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,8 +8,8 @@ The format is based on `Keep a Changelog`_, and this project adheres to v1.1.0 (05-09-2024) =================== -**This release contains some breaking changes and can only be used in combination with SFINCS versions ≥ 2.1.1 -`SFINCS model `_.** +**This release contains some breaking changes and can only be used in combination with +`SFINCS versions ≥ 2.1.1 `_.** The most important change is the implementation of a new subgrid methodology including wet fraction as in Van Ormondt et al. (2024, in review), which is now written as a NetCDF file! The old implementation is still available when providing the original binary file, but then all wet fractions are assumed to be 1.