{"id":50268940,"url":"https://github.com/CNES/aviso-fes","last_synced_at":"2026-06-13T07:01:23.045Z","repository":{"id":38302436,"uuid":"394902059","full_name":"CNES/aviso-fes","owner":"CNES","description":"FES is the last version of the FES (Finite Element Solution) tide model.","archived":false,"fork":false,"pushed_at":"2026-05-18T14:11:56.000Z","size":1724,"stargazers_count":131,"open_issues_count":1,"forks_count":47,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-06-11T20:02:52.036Z","etag":null,"topics":["cxx-library","ocean","prediction","prediction-model","python","radial","tide"],"latest_commit_sha":null,"homepage":"https://cnes.github.io/aviso-fes","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CNES.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-08-11T07:29:06.000Z","updated_at":"2026-06-06T14:15:16.000Z","dependencies_parsed_at":"2024-09-12T14:44:28.623Z","dependency_job_id":"24d43736-1405-41fe-91b2-d7714d5658e7","html_url":"https://github.com/CNES/aviso-fes","commit_stats":{"total_commits":179,"total_committers":10,"mean_commits":17.9,"dds":0.5139664804469274,"last_synced_commit":"8a5debcab4a94fb140fc7057544a81b021dbe139"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/CNES/aviso-fes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CNES","download_url":"https://codeload.github.com/CNES/aviso-fes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34275068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cxx-library","ocean","prediction","prediction-model","python","radial","tide"],"created_at":"2026-05-27T16:00:20.999Z","updated_at":"2026-06-13T07:01:23.034Z","avatar_url":"https://github.com/CNES.png","language":"C++","funding_links":[],"categories":["Hydrosphere"],"sub_categories":["Waves and Currents"],"readme":"![build](https://github.com/CNES/aviso-fes/actions/workflows/ci.yaml/badge.svg)\n[![platforms](https://anaconda.org/conda-forge/pyfes/badges/platforms.svg?service=github)](https://anaconda.org/conda-forge/pyfes)\n[![latest-release-date](https://anaconda.org/conda-forge/pyfes/badges/latest_release_date.svg?service=github)](https://github.com/CNES/aviso-fes/commits/main)\n[![license](https://anaconda.org/conda-forge/pyfes/badges/license.svg?service=github)](https://opensource.org/licenses/BSD-3-Clause)\n[![download](https://anaconda.org/conda-forge/pyfes/badges/downloads.svg?service=github)](https://anaconda.org/conda-forge/pyfes)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/CNES/aviso-fes/main?urlpath=lab/tree/notebooks/auto_examples)\n\n# PyFES - Ocean Tide Prediction Software\n\nPyFES is a Python library for predicting ocean tides anywhere on Earth. Using\nglobal tidal atlases such as FES2022 and GOT5.6, it evaluates tidal heights and\ncurrents through harmonic analysis -- the same scientific method developed by\nLord Kelvin over 150 years ago.\n\n## Features\n\n- **Tidal height prediction** at any coastal or oceanic location from global\n  atlases (FES2022, GOT5.6, etc.)\n- **Tidal current computation** for marine navigation and oceanographic studies\n- **Harmonic analysis** to extract tidal constituents from observed sea-level\n  time series\n- **Prediction from known constituents** without requiring a tidal atlas\n- **Long-period equilibrium tide** computation from Cartwright-Tayler-Edden\n  spectral tables\n- **Multiple tidal model formats**: regular Cartesian grids and unstructured\n  finite-element meshes (LGP1/LGP2)\n- **Dual prediction engines** supporting both Darwin (FES) and Doodson (GOT)\n  harmonic notation systems\n- **Configurable inference modes** (zero, linear, spline, Fourier) for minor\n  constituent estimation\n\n## Try It -- No Installation Required\n\n**[Launch interactive notebooks in Binder](https://mybinder.org/v2/gh/CNES/aviso-fes/main?urlpath=lab/tree/notebooks/auto_examples)**\nto explore examples including tidal prediction, harmonic analysis,\ninterpolation techniques, and engine comparison. Everything runs in the cloud.\n\n## Installation\n\n### From conda-forge\n\n```bash\nconda install -c conda-forge pyfes\n```\n\n### From source\n\nPyFES requires a C++14 compiler and CMake:\n\n```bash\ngit clone https://github.com/CNES/aviso-fes.git\ncd aviso-fes\npip install -e .\n```\n\n## Quick Start\n\n### Predicting tides from a tidal atlas\n\nCreate a YAML configuration file describing your tidal model:\n\n```yaml\nengine: darwin\ntide:\n  cartesian:\n    paths:\n      M2: ${FES_DATA}/M2_tide.nc\n      S2: ${FES_DATA}/S2_tide.nc\n      K1: ${FES_DATA}/K1_tide.nc\n      O1: ${FES_DATA}/O1_tide.nc\n```\n\nThen load and predict:\n\n```python\nimport numpy as np\nimport pyfes\n\nconfig = pyfes.config.load('ocean_tide.yaml')\n\ndates = np.arange(\n    np.datetime64('2024-01-01'),\n    np.datetime64('2024-01-02'),\n    np.timedelta64(1, 'h'),\n)\nlons = np.full(dates.shape, -7.688)\nlats = np.full(dates.shape, 59.195)\n\ntide, lp, flags = pyfes.evaluate_tide(\n    config.models['tide'], dates, lons, lats,\n    settings=config.settings,\n)\ntotal_tide = tide + lp  # in the same units as the tidal atlas\n```\n\n### Predicting from known constituents\n\n```python\nconstituents = {\n    'M2': (205.1, 109.0),  # (amplitude_cm, phase_deg)\n    'S2': (74.9, 148.3),\n    'K1': (6.4, 75.1),\n    'O1': (6.6, 327.9),\n}\n\ntide, lp = pyfes.evaluate_tide_from_constituents(\n    constituents, dates, latitude=48.38,\n)\n```\n\n## Prediction Engines\n\nPyFES provides two prediction engines to support different tidal atlas formats:\n\n| Feature | FES/Darwin | PERTH/Doodson |\n|---|---|---|\n| **YAML key** | `engine: darwin` | `engine: perth` |\n| **Notation** | Darwin notation | Doodson numbers |\n| **Constituents** | 99 | 80 |\n| **Nodal corrections** | Individual Schureman factors | Individual (group modulations optional) |\n| **Default inference** | `SPLINE` | `LINEAR` |\n| **Compatible atlases** | FES2014, FES2022 | GOT4.10, GOT5.5, GOT5.6 |\n\nBoth engines share the same high-level API and support the same set of\nconfigurable inference types. The choice depends on your tidal atlas format:\n**FES atlases use the Darwin engine**, while **GOT atlases use the PERTH\nengine**.\n\nSee the [Prediction Engines documentation](https://cnes.github.io/aviso-fes/engines.html)\nfor a detailed comparison and usage guidance.\n\n## Tidal Constituents\n\nPyFES provides two catalogues of tidal constituents, one for each prediction\nengine. Every constituent is characterised by its name, angular speed, and XDO\nnotation encoding.\n\n- **Darwin catalogue** -- 99 constituents used by the FES/Darwin engine. See\n  the [full list](https://cnes.github.io/aviso-fes/constituents/darwin.html).\n- **Doodson catalogue** -- 80 constituents used by the PERTH/Doodson engine.\n  See the [full list](https://cnes.github.io/aviso-fes/constituents/perth.html).\n\n## About FES2022\n\nThis package is the fully revised version of the FES2022 distribution, including\nboth the PyFES prediction software and access to the\n[FES2022 tides databases](data/fes2022b/README.md). FES2022 represents the\nstate-of-the-art in global tidal modeling, with improved accuracy especially for\nsatellite altimetry applications.\n\nA full technical description is available in the\n[FES2022 handbook](https://www.aviso.altimetry.fr/fileadmin/documents/data/tools/hdbk_FES2022.pdf)\nand the scientific paper (Lyard et al. 2024).\n\n### Operational Use\n\nPyFES (release [`2026.3.1`](https://github.com/CNES/aviso-fes/releases/tag/2026.3.1))\nis the tidal correction component embedded in the **SWOT KaRIn ground segment**\nfor Level-2 product generation. It is also being extended to integrate Richard\nRay's GOT model (via the Perth engine) for upcoming SWOT product versions, so\nthat the same code path produces both FES- and GOT-based corrections in the\noperational pipeline.\n\n## Documentation\n\nThe complete documentation is available on\n[GitHub Pages](https://cnes.github.io/aviso-fes/), including:\n\n- [Getting Started](https://cnes.github.io/aviso-fes/getting_started.html) --\n  installation and quickstart examples\n- [User Guide](https://cnes.github.io/aviso-fes/user_guide.html) --\n  configuration, settings, inference modes, and prediction functions\n- [Prediction Engines](https://cnes.github.io/aviso-fes/engines.html) --\n  Darwin vs Doodson engine comparison\n- [Tidal Constituents](https://cnes.github.io/aviso-fes/constituents/index.html) --\n  complete constituent catalogues\n- [Theoretical Background](https://cnes.github.io/aviso-fes/theory/index.html) --\n  mathematical foundations of the harmonic method\n- [API Reference](https://cnes.github.io/aviso-fes/api.html) --\n  detailed function documentation\n- [Examples](https://cnes.github.io/aviso-fes/auto_examples/index.html) --\n  worked examples with plots\n\n## C++ API\n\nThis library provides a C++ API for high-performance tide prediction. The C++\npart of the library is documented using Doxygen. You can generate the\ndocumentation by running `doxygen` in the `docs` directory after installing\nDoxygen.\n\n## Legacy C Version\n\nFor users requiring the original C implementation, the legacy version remains\navailable on its\n[own branch](https://github.com/CNES/aviso-fes/tree/legacy-c-version-archive).\nThe reference version used to compute the FES2022b tidal solution is\n[2.9.7](https://github.com/CNES/aviso-fes/releases/tag/2.9.7).\n\n\u003e **Note:** The legacy C version is archived and will not receive further\n\u003e updates. For new projects, we recommend using the current Python version or\n\u003e the C++ library.\u003cbr/\u003e\n*Please note: The C++ library does not include a reader for the tidal\n\u003e databases -- you will need to implement your own reader to access them.*\n\n## Credits\n\nWhen using FES2022, please mention: *FES2022 was produced by LEGOS, NOVELTIS\nand CLS Ocean and Climate Division; the project was funded by CNES. It is\ndistributed by AVISO, with support from CNES (http://www.aviso.altimetry.fr/)*\n\nThe PERTH engine is a C++ port of the original Fortran\n[PERTH5 library](https://codeberg.org/rray/perth5) by Richard Ray (NASA GSFC).\nThe integration into pyfes was developed under CNES funding to support tidal\ncorrection for SWOT (Surface Water and Ocean Topography) altimetry products.\n\n## Related Projects\n\nPyFES focuses on high-performance tidal prediction from FES atlases (Darwin\nengine) and GOT atlases (Perth engine), including loaders for FES2022's\nunstructured native grid. For a broader pure-Python tide-modeling toolbox\ncovering OTIS, IERS pole tides, ocean and solid-Earth tides, and\ntide-generating force computations -- complementary to the FES / GOT scope\ncovered here -- see\n[pyTMD](https://github.com/pyTMD/pyTMD) by Tyler Sutterley (NASA GSFC).\n\n## References\n\n* Lyard, F., Carrere, L., Fouchet, E., Cancet, M., Greenberg, D., Dibarboure,\n  G., and Picot, N.: FES2022 a step towards a SWOT-compliant tidal correction,\n  Submitted to J. Geophy. Res., in review, 2025\n\n* Lyard, F. H., Allain, D. J., Cancet, M., Carrere, L., and Picot, N.: FES2014\n  global ocean tide atlas: design and performance, Ocean Sci., 17, 615-649,\n  https://doi.org/10.5194/os-17-615-2021, 2021.\n\n* Carrere L., F. Lyard, M. Cancet, A. Guillot, N. Picot: *FES 2014, a new tidal\n  model - Validation results and perspectives for improvements*, presentation\n  to ESA Living Planet Conference, Prague 2016.\n\n## Contact\n\nQuestions, suggestions, or need support? Reach out to the AVISO team:\n[aviso@altimetry.fr](mailto:aviso@altimetry.fr)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCNES%2Faviso-fes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCNES%2Faviso-fes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCNES%2Faviso-fes/lists"}