{"id":353042,"name":"PyFES","description":"The prediction of tides is based on the principle of harmonic analysis, a method developed into a practical application by Sir William Thomson (Lord Kelvin) around 1867.","url":"https://github.com/cnes/aviso-fes","last_synced_at":"2026-05-26T12:30:19.058Z","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":122,"open_issues_count":0,"forks_count":44,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-05-19T09:48:19.575Z","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-05-18T14:15:32.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":33297093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T02:57:32.698Z","status":"ssl_error","status_checked_at":"2026-05-21T02:57:31.990Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"owner":{"login":"CNES","name":"CNES","uuid":"30655936","kind":"organization","description":"","email":null,"website":"https://cnes.fr","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/30655936?v=4","repositories_count":67,"last_synced_at":"2024-05-07T18:05:20.164Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/CNES","funding_links":[],"total_stars":1036,"followers":83,"following":0,"created_at":"2022-11-09T22:18:19.955Z","updated_at":"2024-05-07T18:05:32.951Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CNES","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CNES/repositories"},"packages":[],"commits":{"id":1332095,"full_name":"CNES/aviso-fes","default_branch":"main","total_commits":730,"total_committers":14,"total_bot_commits":2,"total_bot_committers":1,"mean_commits":52.142857142857146,"dds":0.05068493150684927,"past_year_total_commits":344,"past_year_total_committers":4,"past_year_total_bot_commits":2,"past_year_total_bot_committers":1,"past_year_mean_commits":86.0,"past_year_dds":0.014534883720930258,"last_synced_at":"2026-05-23T11:01:23.282Z","last_synced_commit":"0765cb776fb7b8eab294579ac2efd07b612df1c2","created_at":"2023-09-11T17:10:55.917Z","updated_at":"2026-05-23T11:01:14.384Z","committers":[{"name":"Frédéric BRIOL","email":"fbriol@gmail.com","login":"fbriol","count":693},{"name":"jpolton","email":"jpolton@gmail.com","login":"jpolton","count":7},{"name":"Florian REY","email":"florianrey.info@gmail.com","login":"OrangeJuce82","count":5},{"name":"locarrere","email":"lcarrere@groupcls.com","login":"locarrere","count":4},{"name":"LudwigVonKoopa","email":"49512274+ludwigVonKoopa","login":"ludwigVonKoopa","count":4},{"name":"Loren Carrere","email":"lcarrere@cls.fr","login":null,"count":3},{"name":"tomsail","email":"saillour.thomas@gmail.com","login":"tomsail","count":2},{"name":"robin-cls","email":"74916839+robin-cls","login":"robin-cls","count":2},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"alcoat","email":"alain.coat@actimar.fr","login":"alcoat","count":2},{"name":"Robin Chevrier","email":"rchevrier@cls.fr","login":null,"count":2},{"name":"Frederic Briol","email":"fbriol@tux-briol.pc.cls.fr","login":null,"count":2},{"name":"Yuriy Chernyshov","email":"thegeorg@yandex-team.com","login":"georgthegreat","count":1},{"name":"Philippe Poilbarbe","email":"ppoilbarbe@groupcls.com","login":"ppoilbarbe","count":1}],"past_year_committers":[{"name":"Frédéric BRIOL","email":"fbriol@gmail.com","login":"fbriol","count":339},{"name":"tomsail","email":"saillour.thomas@gmail.com","login":"tomsail","count":2},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"Yuriy Chernyshov","email":"thegeorg@yandex-team.com","login":"georgthegreat","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-25T00:00:11.816Z","repositories_count":6241451,"commits_count":883264762,"contributors_count":34917374,"owners_count":1157384,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"CNES/aviso-fes","html_url":"https://github.com/CNES/aviso-fes","last_synced_at":"2026-04-27T08:38:43.312Z","status":"active","issues_count":36,"pull_requests_count":12,"avg_time_to_close_issue":9825498.862068966,"avg_time_to_close_pull_request":1028144.1,"issues_closed_count":29,"pull_requests_closed_count":10,"pull_request_authors_count":9,"issue_authors_count":30,"avg_comments_per_issue":1.6944444444444444,"avg_comments_per_pull_request":0.75,"merged_pull_requests_count":8,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":7,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":1020454.4,"past_year_avg_time_to_close_pull_request":353611.0,"past_year_issues_closed_count":5,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":6,"past_year_avg_comments_per_issue":1.2857142857142858,"past_year_avg_comments_per_pull_request":2.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"created_at":"2023-09-11T17:11:07.331Z","updated_at":"2026-04-27T08:38:43.312Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Faviso-fes/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":33,"CONTRIBUTOR":3},"pull_request_author_associations_count":{"NONE":6,"CONTRIBUTOR":3,"COLLABORATOR":3},"issue_authors":{"ezaron":2,"AimAlee":2,"remkos":2,"tomsail":2,"alcoat":2,"diegoiglesias":2,"SebSwan":1,"ruby-vallarino":1,"cseaton":1,"lherdman":1,"robbibt":1,"ricsatjr":1,"turekg":1,"xwanner":1,"nicholasmetherall":1,"peanutfun":1,"Alerovere":1,"kvos":1,"slimgana":1,"DanieTheron":1,"thomasvjr":1,"quentinjamet":1,"Phuongtran75":1,"apatlpo":1,"KuifengZhao":1,"G4occhi":1,"cyrilleponcelet":1,"jouArc":1,"AryanAdhau":1,"jakobchristiaanse":1},"pull_request_authors":{"alcoat":3,"ludwigVonKoopa":2,"tomsail":1,"florianwns":1,"georgthegreat":1,"remkos":1,"jpolton":1,"robin-cls":1,"Misiorama":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-23T00:00:30.079Z","repositories_count":14673156,"issues_count":34107797,"pull_requests_count":111614146,"authors_count":11270800,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":4,"CONTRIBUTOR":2},"past_year_pull_request_author_associations_count":{"NONE":2},"past_year_issue_authors":{"tomsail":2,"lherdman":1,"quentinjamet":1,"remkos":1,"thomasvjr":1},"past_year_pull_request_authors":{"georgthegreat":1,"tomsail":1},"maintainers":[{"login":"ludwigVonKoopa","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ludwigVonKoopa"},{"login":"robin-cls","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/robin-cls"}],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":7,"DeleteEvent":3,"PullRequestEvent":10,"ForkEvent":9,"IssuesEvent":22,"WatchEvent":40,"IssueCommentEvent":15,"PushEvent":116,"PullRequestReviewEvent":4,"PullRequestReviewCommentEvent":2,"CreateEvent":10},"last_year":{"ReleaseEvent":3,"DeleteEvent":3,"PullRequestEvent":5,"ForkEvent":2,"IssuesEvent":7,"WatchEvent":22,"IssueCommentEvent":6,"PushEvent":71,"PullRequestReviewEvent":2,"CreateEvent":3}},"keywords":["cxx-library","ocean","prediction","prediction-model","python","radial","tide"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/pre-commit.yml","sha":null,"kind":"manifest","created_at":"2024-06-04T16:55:52.262Z","updated_at":"2024-06-04T16:55:52.262Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/.github/workflows/pre-commit.yml","dependencies":[{"id":18408128332,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v2.0.0","direct":true,"kind":"composite","optional":false},{"id":18408128310,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":18408128331,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2024-06-04T16:55:53.110Z","updated_at":"2024-06-04T16:55:53.110Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/setup.py","dependencies":[{"id":18408128716,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ci.yaml","sha":null,"kind":"manifest","created_at":"2024-07-06T15:50:42.073Z","updated_at":"2024-07-06T15:50:42.073Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/.github/workflows/ci.yaml","dependencies":[{"id":18930906226,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":18930906227,"package_name":"mamba-org/setup-micromamba","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":18930906342,"package_name":"actions/configure-pages","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":18930906343,"package_name":"actions/upload-pages-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18930906344,"package_name":"actions/deploy-pages","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2024-07-06T15:50:56.480Z","updated_at":"2024-07-06T15:50:56.480Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/pyproject.toml","dependencies":[]},{"ecosystem":"conda","filepath":"conda/environment.yml","sha":null,"kind":"manifest","created_at":"2024-09-12T14:44:25.132Z","updated_at":"2024-09-12T14:44:25.132Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/conda/environment.yml","dependencies":[{"id":20104425645,"package_name":"binutils","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425650,"package_name":"boost-cpp","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425651,"package_name":"cartopy","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425652,"package_name":"cmake","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425653,"package_name":"cxx-compiler","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425654,"package_name":"eigen","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425655,"package_name":"gtest","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425656,"package_name":"make","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425657,"package_name":"matplotlib","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425658,"package_name":"netcdf4","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425659,"package_name":"pytest","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425660,"package_name":"pyyaml","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425661,"package_name":"setuptools_scm","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425662,"package_name":"sphinx","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425663,"package_name":"sphinx-book-theme","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20104425664,"package_name":"sphinx-gallery","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"binder/environment.yml","sha":null,"kind":"manifest","created_at":"2024-09-12T14:44:26.378Z","updated_at":"2024-09-12T14:44:26.378Z","repository_link":"https://github.com/CNES/aviso-fes/blob/main/binder/environment.yml","dependencies":[]}],"score":7.443078374348515,"created_at":"2026-04-27T08:38:43.928Z","updated_at":"2026-05-26T12:30:19.073Z","avatar_url":"https://github.com/CNES.png","language":"C++","category":"Hydrosphere","sub_category":"Waves and Currents","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"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","funding_links":[],"readme_doi_urls":["https://doi.org/10.5194/os-17-615-2021"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["c-library","ocean-sciences"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/353042","html_url":"https://ost.ecosyste.ms/projects/353042"}