https://github.com/cheginit/curviriver
Curvilinear Mesh Generator for Rivers
https://github.com/cheginit/curviriver
curvilinear hydrology mesh mesh-generator river
Last synced: about 1 year ago
JSON representation
Curvilinear Mesh Generator for Rivers
- Host: GitHub
- URL: https://github.com/cheginit/curviriver
- Owner: cheginit
- License: other
- Created: 2023-10-13T17:41:11.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-24T18:39:48.000Z (over 1 year ago)
- Last Synced: 2025-03-22T04:03:06.977Z (about 1 year ago)
- Topics: curvilinear, hydrology, mesh, mesh-generator, river
- Language: Python
- Homepage: https://curviriver.readthedocs.io
- Size: 2.89 MB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
- Authors: AUTHORS.rst
Awesome Lists containing this project
README
.. image:: https://raw.githubusercontent.com/cheginit/curviriver/main/doc/source/_static/logo-text.png
:target: https://curviriver.readthedocs.io
|
CurviRiver: Curvilinear Mesh Generator for Rivers
=================================================
.. image:: https://github.com/cheginit/curviriver/actions/workflows/test.yml/badge.svg
:target: https://github.com/cheginit/curviriver/actions/workflows/test.yml
:alt: CI
.. image:: https://img.shields.io/pypi/v/curviriver.svg
:target: https://pypi.python.org/pypi/curviriver
:alt: PyPi
.. image:: https://img.shields.io/conda/vn/conda-forge/curviriver.svg
:target: https://anaconda.org/conda-forge/curviriver
:alt: Conda Version
.. image:: https://codecov.io/gh/cheginit/curviriver/graph/badge.svg
:target: https://codecov.io/gh/cheginit/curviriver
:alt: CodeCov
.. image:: https://img.shields.io/pypi/pyversions/curviriver.svg
:target: https://pypi.python.org/pypi/curviriver
:alt: Python Versions
|
.. image:: https://static.pepy.tech/badge/curviriver
:target: https://pepy.tech/project/curviriver
:alt: Downloads
.. image:: https://www.codefactor.io/repository/github/cheginit/curviriver/badge/main
:target: https://www.codefactor.io/repository/github/cheginit/curviriver/overview/main
:alt: CodeFactor
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
:alt: black
.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white
:target: https://github.com/pre-commit/pre-commit
:alt: pre-commit
|
Features
--------
CurviRiver takes as input a Polygon of a river segment and generates a 2/3D
curvilinear mesh that can be used for hydrodynamic or hydrological modeling.
The mesh is generated in the following main steps:
- Determining the centerline of the input Polygon using Voroni diagram
and Dijkstra's algorithm,
- Smoothing the generated centerline with a B-spline curve,
- Computing the tangent angles of the centerline at each point along
the centerline and generating cross-sections perpendicular to the
centerline at given intervals,
- Generating a 2D mesh from vertices of the cross-sections,
- Generating a 3D mesh if depth data is provided, by determining the depth of
2D mesh vertices from the depth data using Inverse Distance Weighting (IDW).
Installation
------------
You can install CurviRiver using ``pip``:
.. code-block:: console
$ pip install curviriver
or using ``conda`` (``mamba``):
.. code-block:: console
$ conda install -c conda-forge curviriver
Quick start
-----------
We demonstrate capabilities of CurviRiver by generating a
curvilinear mesh along a portion of the Columbia River and
interpolating
`eHydro `__
topobathy data on to the generated mesh vertices. Please visit the
`example gallery `__
for more examples.
First, we use `PyGeoHydro `__
to retrieve eHydro data for a part of the Columbia River that topobathy data are
available. We get both the survey outline and the bathymetry data.
Then, we use the survey outline polygon to generate a curvilinear mesh.
We use the ``poly_segmentize`` function for this purpose that has two
parameters: Spacing in streamwise direction and number of points in
cross-stream direction. The function returns a ``geopandas.GeoSeries``
of the cross-sections, vertices of which are the mesh points.
.. code:: python
from pygeohydro import EHydro
import curviriver as cr
ehydro = EHydro("outlines")
geom = ehydro.survey_grid.loc[ehydro.survey_grid["OBJECTID"] == 210, "geometry"].iloc[0]
outline = ehydro.bygeom(geom, ehydro.survey_grid.crs)
poly = outline.convex_hull.unary_union
spacing_streamwise = 2000
xs_npts = 5
stream = cr.poly_segmentize(poly, outline.crs, spacing_streamwise, xs_npts)
.. image:: https://raw.githubusercontent.com/cheginit/curviriver/main/doc/source/_static/curvilinear.png
:target: https://github.com/cheginit/curviriver
Contributing
------------
Contributions are very welcomed. Please read
`CONTRIBUTING.rst `__
file for instructions.
Support
-------
The work for this project is funded by USGS through Water Resources Research Institutes
(`WRRI `__).