{"id":45584,"name":"ecWAM","description":"The ECMWF Ocean Wave Model describes the development and evolution of wind generated surface waves and their height, direction and period.","url":"https://github.com/ecmwf-ifs/ecwam","last_synced_at":"2026-04-11T04:30:34.801Z","repository":{"id":151929211,"uuid":"616581255","full_name":"ecmwf-ifs/ecwam","owner":"ecmwf-ifs","description":"The ECMWF wave model ecWAM","archived":false,"fork":false,"pushed_at":"2026-03-05T15:46:45.000Z","size":6933,"stargazers_count":17,"open_issues_count":1,"forks_count":29,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-05T17:22:28.893Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecmwf-ifs.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":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-20T17:04:12.000Z","updated_at":"2026-03-05T15:58:44.000Z","dependencies_parsed_at":"2025-12-17T01:05:46.218Z","dependency_job_id":null,"html_url":"https://github.com/ecmwf-ifs/ecwam","commit_stats":{"total_commits":2769,"total_committers":36,"mean_commits":76.91666666666667,"dds":"0.17695919104369806","last_synced_commit":"fcadfe847025831cbeb88cd1d1078f2e36dd3932"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/ecmwf-ifs/ecwam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf-ifs","download_url":"https://codeload.github.com/ecmwf-ifs/ecwam/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30334412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T12:41:07.687Z","status":"ssl_error","status_checked_at":"2026-03-10T12:41:06.728Z","response_time":106,"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":"ecmwf-ifs","name":"European Centre for Medium-Range Weather Forecasts","uuid":"84339824","kind":"organization","description":"Open-source components of and auxiliary software closely related to ECMWF's Integrated Forecasting System","email":null,"website":"https://www.ecmwf.int","location":"Shinfield Park, Reading, United Kingdom","twitter":"ecmwf","company":null,"icon_url":"https://avatars.githubusercontent.com/u/84339824?v=4","repositories_count":7,"last_synced_at":"2023-03-06T13:04:00.059Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ecmwf-ifs","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-16T14:44:42.885Z","updated_at":"2023-03-06T13:04:00.070Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf-ifs","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf-ifs/repositories"},"packages":[],"commits":{"id":1355868,"full_name":"ecmwf-ifs/ecwam","default_branch":"main","total_commits":3544,"total_committers":44,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":80.54545454545455,"dds":0.28216704288939054,"past_year_total_commits":151,"past_year_total_committers":12,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":12.583333333333334,"past_year_dds":0.5298013245033113,"last_synced_at":"2026-03-02T01:42:12.526Z","last_synced_commit":"cdb202f3acef674013c3abd3b2781429746e2532","created_at":"2023-09-12T11:43:13.056Z","updated_at":"2026-03-02T01:38:38.445Z","committers":[{"name":"Jean Bidlot","email":"jean.bidlot@ecmwf.int","login":"jrbidlot","count":2544},{"name":"Ahmad Nawab","email":"ahmad.nawab@ecmwf.int","login":"awnawab","count":354},{"name":"Josh Kousal","email":"josh.kousal@ecmwf.int","login":"jkousal32","count":140},{"name":"p4rd_adm","email":"p4rd_adm@geirrod","login":null,"count":98},{"name":"Willem Deconinck","email":"willem.deconinck@ecmwf.int","login":"wdeconinck","count":91},{"name":"Jean Bidlot","email":"wab@ecmwf.int","login":null,"count":66},{"name":"James Hawkes","email":"majh@ecmwf.int","login":null,"count":38},{"name":"Tomas Wilhelmsson","email":"Tomas.Wilhelmsson@ecmwf.int","login":"towil1","count":32},{"name":"Fabio Di Sante","email":"fabio.disante@gmail.com","login":"fdisante","count":26},{"name":"Sami Saarinen","email":"sbs@iki.fi","login":null,"count":21},{"name":"Marcin Chrust","email":"Marcin.Chrust@ecmwf.int","login":"marcin85PL","count":16},{"name":"Sami Saarinen","email":"Sami.Saarinen@ecmwf.int","login":null,"count":14},{"name":"Peter Dueben","email":"peter.dueben@ecmwf.int","login":"dueben","count":13},{"name":"Ioan Hadade","email":"ioan.hadade@ecmwf.int","login":"ioanhadade","count":10},{"name":"Kristian S. Mogensen","email":"k.mogensen@ecmwf.int","login":null,"count":9},{"name":"Olivier Marsden","email":"Olivier.Marsden@ecmwf.int","login":"marsdeno","count":7},{"name":"Michael Sleigh","email":"michael.sleigh@ecmwf.int","login":"msleigh","count":7},{"name":"Andrew Dawson","email":"andrew.dawson@ecmwf.int","login":"dawson-ec","count":7},{"name":"Paul Cresswell","email":"paul.cresswell@ecmwf.int","login":"pcresswell-ec","count":5},{"name":"Emma Kuwertz","email":"emma.kuwertz@ecmwf.int","login":null,"count":4},{"name":"Frederic Vitart","email":"frederic.vitart@ecmwf.int","login":"FredericVitart","count":4},{"name":"Balthasar Reuter","email":"6384870+reuterbal","login":"reuterbal","count":4},{"name":"Zak Kipling","email":"zak.kipling@ecmwf.int","login":"cxzk","count":4},{"name":"Michael Lange","email":"Michael.Lange@ecmwf.int","login":"mlange05","count":3},{"name":"Philip Browne","email":"philip.browne@ecmwf.int","login":"pbrowne","count":3},{"name":"Patrick Gillies","email":"patrick.gillies@ecmwf.int","login":"prgillies","count":2},{"name":"Gabor Radnoti","email":"dag@ecmwf.int","login":null,"count":2},{"name":"Samuel Remy","email":"disr@ecmwf.int","login":null,"count":2},{"name":"Wayne Gaudin","email":"wayne.gaudin@ecmwf.int","login":null,"count":2},{"name":"nawab1","email":"nawab1@jpblt-s01-02.jupiter.internal","login":null,"count":2},{"name":"Paul Burton","email":"paul.burton@ecmwf.int","login":"pmburton","count":1},{"name":"Sam Hatfield","email":"samuel.hatfield@ecmwf.int","login":"samhatfield","count":1},{"name":"Stefanie Reuter","email":"stefanie.reuter@ecmwf.int","login":"stefaniereuter","count":1},{"name":"Massimo Bonavita","email":"dav@ecmwf.int","login":null,"count":1},{"name":"Kristian Mogensen","email":"ne1@ecmwf.int","login":null,"count":1},{"name":"Gabor Radnoti","email":"gabor.radnoti@ecmwf.int","login":null,"count":1},{"name":"Tomas Kral","email":"tomas.kral@ecmwf.int","login":null,"count":1},{"name":"Saleh Abdalla","email":"waa@ecmwf.int","login":null,"count":1},{"name":"Reima Eresmaa","email":"reima.eresmaa@ecmwf.int","login":null,"count":1},{"name":"Paddy Gillies","email":"paddy.gillies@ecmwf.int","login":null,"count":1},{"name":"Lukas Mosimann","email":"lumosimann@gmail.com","login":"lukasm91","count":1},{"name":"Michael Staneker","email":"michael.staneker@ecmwf.int","login":"MichaelSt98","count":1},{"name":"Mikko Byckling","email":"mikko.byckling@intel.com","login":"mbycklin","count":1},{"name":"Mirco Valentini","email":"127779084+MircoValentiniECMWF","login":"MircoValentiniECMWF","count":1}],"past_year_committers":[{"name":"Ahmad Nawab","email":"ahmad.nawab@ecmwf.int","login":"awnawab","count":71},{"name":"Josh Kousal","email":"josh.kousal@ecmwf.int","login":"jkousal32","count":39},{"name":"Jean Bidlot","email":"jean.bidlot@ecmwf.int","login":"jrbidlot","count":12},{"name":"Olivier Marsden","email":"Olivier.Marsden@ecmwf.int","login":"marsdeno","count":7},{"name":"Willem Deconinck","email":"willem.deconinck@ecmwf.int","login":"wdeconinck","count":6},{"name":"Kristian S. Mogensen","email":"k.mogensen@ecmwf.int","login":null,"count":4},{"name":"Emma Kuwertz","email":"emma.kuwertz@ecmwf.int","login":null,"count":4},{"name":"Michael Sleigh","email":"michael.sleigh@ecmwf.int","login":"msleigh","count":3},{"name":"nawab1","email":"nawab1@jpblt-s01-02.jupiter.internal","login":null,"count":2},{"name":"Stefanie Reuter","email":"stefanie.reuter@ecmwf.int","login":"stefaniereuter","count":1},{"name":"Michael Staneker","email":"michael.staneker@ecmwf.int","login":"MichaelSt98","count":1},{"name":"Lukas Mosimann","email":"lumosimann@gmail.com","login":"lukasm91","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-08T00:00:12.791Z","repositories_count":6189438,"commits_count":931684669,"contributors_count":36090501,"owners_count":1148398,"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":"ecmwf-ifs/ecwam","html_url":"https://github.com/ecmwf-ifs/ecwam","last_synced_at":"2026-02-19T13:04:57.420Z","status":null,"issues_count":2,"pull_requests_count":182,"avg_time_to_close_issue":624544.0,"avg_time_to_close_pull_request":875300.7852760736,"issues_closed_count":1,"pull_requests_closed_count":163,"pull_request_authors_count":14,"issue_authors_count":2,"avg_comments_per_issue":0.0,"avg_comments_per_pull_request":1.3021978021978022,"merged_pull_requests_count":144,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":61,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":404811.5294117647,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":51,"past_year_pull_request_authors_count":8,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.7704918032786885,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":38,"created_at":"2023-09-12T11:43:22.724Z","updated_at":"2026-02-19T13:04:57.421Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fecwam/issues","issue_labels_count":{},"pull_request_labels_count":{"contributor":40,"approved-for-ci":39},"issue_author_associations_count":{"CONTRIBUTOR":1,"COLLABORATOR":1},"pull_request_author_associations_count":{"CONTRIBUTOR":127,"COLLABORATOR":40,"NONE":9,"MEMBER":6},"issue_authors":{"reuterbal":1,"awnawab":1},"pull_request_authors":{"awnawab":124,"cxzk":16,"reuterbal":7,"msleigh":6,"ioanhadade":6,"jkousal32":5,"marsdeno":4,"mlange05":3,"jrbidlot":2,"stefaniereuter":2,"towil1":2,"lukasm91":2,"MircoValentiniECMWF":2,"fdisante":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-08T00:00:10.835Z","repositories_count":13627929,"issues_count":34737367,"pull_requests_count":113285460,"authors_count":11187756,"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":{"contributor":34,"approved-for-ci":33},"past_year_issue_author_associations_count":{"COLLABORATOR":1},"past_year_pull_request_author_associations_count":{"COLLABORATOR":40,"MEMBER":6,"CONTRIBUTOR":5,"NONE":4},"past_year_issue_authors":{"awnawab":1},"past_year_pull_request_authors":{"awnawab":40,"msleigh":6,"jkousal32":3,"jrbidlot":2,"lukasm91":2,"stefaniereuter":2},"maintainers":[{"login":"awnawab","count":38,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/awnawab"},{"login":"msleigh","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/msleigh"},{"login":"jkousal32","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkousal32"}],"active_maintainers":[{"login":"awnawab","count":38,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/awnawab"},{"login":"msleigh","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/msleigh"},{"login":"jkousal32","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkousal32"}]},"events":{"total":{"DeleteEvent":27,"MemberEvent":2,"PullRequestEvent":133,"ForkEvent":9,"WatchEvent":6,"IssueCommentEvent":65,"PushEvent":123,"PullRequestReviewCommentEvent":49,"PullRequestReviewEvent":130,"CreateEvent":27},"last_year":{"DeleteEvent":10,"MemberEvent":2,"PullRequestEvent":69,"ForkEvent":4,"WatchEvent":1,"IssueCommentEvent":37,"PushEvent":46,"PullRequestReviewEvent":64,"PullRequestReviewCommentEvent":31,"CreateEvent":12}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/build-hpc.yml","sha":null,"kind":"manifest","created_at":"2025-12-17T01:05:45.216Z","updated_at":"2025-12-17T01:05:45.216Z","repository_link":"https://github.com/ecmwf-ifs/ecwam/blob/main/.github/workflows/build-hpc.yml","dependencies":[{"id":25771271371,"package_name":"ecmwf-actions/reusable-workflows/ci-hpc-generic","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/build.yml","sha":null,"kind":"manifest","created_at":"2025-12-17T01:05:45.337Z","updated_at":"2025-12-17T01:05:45.337Z","repository_link":"https://github.com/ecmwf-ifs/ecwam/blob/main/.github/workflows/build.yml","dependencies":[{"id":25771271403,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25771271404,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25771271405,"package_name":"pat-s/always-upload-cache","ecosystem":"actions","requirements":"v2.1.5","direct":true,"kind":"composite","optional":false},{"id":25771271421,"package_name":"jlumbroso/free-disk-space","ecosystem":"actions","requirements":"main","direct":true,"kind":"composite","optional":false},{"id":25771271513,"package_name":"ecmwf-actions/build-package","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/label-public-pr.yml","sha":null,"kind":"manifest","created_at":"2025-12-17T01:05:46.044Z","updated_at":"2025-12-17T01:05:46.044Z","repository_link":"https://github.com/ecmwf-ifs/ecwam/blob/main/.github/workflows/label-public-pr.yml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/pr-check.yml","sha":null,"kind":"manifest","created_at":"2025-12-17T01:05:46.092Z","updated_at":"2025-12-17T01:05:46.092Z","repository_link":"https://github.com/ecmwf-ifs/ecwam/blob/main/.github/workflows/pr-check.yml","dependencies":[{"id":25771271520,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25771271521,"package_name":"astral-sh/setup-uv","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2025-12-17T01:05:46.150Z","updated_at":"2025-12-17T01:05:46.150Z","repository_link":"https://github.com/ecmwf-ifs/ecwam/blob/main/requirements.txt","dependencies":[]}],"score":6.674561391814425,"created_at":"2023-09-12T07:52:11.542Z","updated_at":"2026-04-11T04:30:34.814Z","avatar_url":"https://github.com/ecmwf-ifs.png","language":"Fortran","category":"Hydrosphere","sub_category":"Waves and Currents","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"ecWAM\n*****\n\nThe ECMWF wave model ecWAM\n\nIntroduction\n============\n\nThe ECMWF Ocean Wave Model (ecWAM) describes the development and evolution of wind generated surface waves and their height, direction and period.\necWAM is solely concerned with ocean wave forecasting and does not model the ocean itself: dynamical modelling of the ocean can be done by an ocean model such as NEMO.\n\n- ecWAM may be used as a standalone tool that can produce a wave forecast driven by external forcings provided via GRIB files.\n- Alternatively it can be used in a coupled mode where it provides feedback and receives forcings from\n  * the atmospheric forecast model IFS.\n  * the dynamic ocean model NEMO.\n\nFor more information, please go to https://confluence.ecmwf.int/display/FUG/2.2+Ocean+Wave+Model+-+ECWAM\n\nLicense\n=======\n\necWAM is distributed under the Apache License Version 2.0.\nSee `LICENSE` file for details.\n\nInstalling ecWAM\n================\n\nSupported Platforms\n-------------------\n\n- Linux\n- Apple MacOS\n\nOther UNIX-like operating systems may work too out of the box.\n\nRequirements\n------------\n- Fortran and C compiler, and optionally C++ compiler\n- CMake (see https://cmake.org)\n- ecbuild (see https://github.com/ecmwf/ecbuild)\n- fiat (see https://github.com/ecmwf-ifs/fiat)\n- eccodes (see https://github.com/ecmwf/eccodes)\n- field_api (see https://github.com/ecmwf-ifs/field_api)\n- Python with pyyaml + [fypp](https://github.com/aradi/fypp) or fckit (see https://github.com/ecmwf/fckit)\n\nFurther optional dependencies:\n- MPI Fortran libraries\n- multio (see https://github.com/ecmwf/multio)\n- ocean model (e.g. NEMO or FESOM)\n- loki (see https://github.com/ecmwf-ifs/loki)\n\nSome driver scripts to run tests and validate results rely on availability of:\n- md5sum (part of GNU Coreutils; on MacOS, install with `brew install coreutils`)\n- Python with pyyaml or fckit\n\nBuilding ecWAM\n--------------\n\nEnvironment variables\n\n    $ export ecbuild_ROOT=\u003cpath-to-ecbuild\u003e\n    $ export MPI_HOME=\u003cpath-to-MPI\u003e\n    $ export fiat_ROOT=\u003cpath-to-fiat\u003e\n    $ export eccodes_ROOT=\u003cpath-to-eccodes\u003e\n    $ export field_api_ROOT=\u003cpath-to-field_api\u003e\n    $ export fckit_ROOT=\u003cpath-to-fckit\u003e (optional)\n    $ export CC=\u003cpath-to-C-compiler\u003e\n    $ export FC=\u003cpath-to-Fortran-compiler\u003e\n    $ export CXX=\u003cpath-to-C++-compiler\u003e\n\nPrecision\n    An ecwam build will generate binaries and libraries in double precision (default), single precision, or both single and double precision if requested.\n    Precisions are requested by passing appropriate options (ENABLE_SINGLE_PRECISION, ENABLE_DOUBLE_PRECISION) to the `cmake` command, as described below. \n    Note that fiat and field_api dependencies must contain the necessary single and/or double libraries.\n\nIf you want to pre-download or install extra data files, run in the source-directory before CMake (re)configuration:\n\n    $ share/ecwam/data/populate.sh\n\nYou must compile ecWAM out-of-source, so create a build-directory\n\n    $ mkdir build \u0026\u0026 cd build\n\nConfiguration of the build happens through standard CMake\n\n    $ cmake \u003cpath-to-source\u003e\n\nExtra options can be added to the `cmake` command to control the build:\n\n - `-DCMAKE_BUILD_TYPE=\u003cDebug|RelWithDebInfo|Release|Bit\u003e` default=RelWithDebInfo (typically `-O2 -g`)\n - `-DENABLE_TESTS=\u003cON|OFF\u003e`\n - `-DENABLE_MPI=\u003cON|OFF\u003e`\n - `-DENABLE_OMP=\u003cON|OFF\u003e`\n - `-DCMAKE_INSTALL_PREFIX=\u003cinstall-prefix\u003e`\n - `-DENABLE_SINGLE_PRECISION=\u003cON|OFF\u003e`\n - `-DENABLE_DOUBLE_PRECISION=\u003cON|OFF\u003e`\n\nMore options to control compilation flags, only when defaults are not sufficient\n\n - `-DOpenMP_Fortran_FLAGS=\u003cflags\u003e`\n - `-DCMAKE_Fortran_FLAGS=\u003cfortran-flags\u003e`\n - `-DCMAKE_C_FLAGS=\u003cc-flags\u003e`\n\nOnce this has finished successfully, run `make` and `make install`.\n\nAn informational tool `ecwam [--help] [--info] [--version] [--git]` is available upon compilation\nand can be used the to verify compilation options and version information of ecWAM.\n\nOptionally, tests can be run to check succesful compilation, when the feature TESTS is enabled (`-DENABLE_TESTS=ON`, default ON)\n\n    $ ctest\n\n### Generate derived-types data structures\nThe derived-types storing grid-point data in ecWam can be configured in `src/ecwam/yowfield_mod_config.yaml`, which is used to expand the accompanying `src/ecwam/yowfield_mod.fypp` into Fortran derived-type objects. The glue-code required to turn the derived-types members into FIELD API objects is also generated.\n\n## Build using ecWAM bundle\n\nAnother way of building ecWAM is to use the bundle definition included in `package/bundle`:\n\n    $ ./package/bundle/ecwam-bundle create  --bundle package/bundle/bundle.yml # Checks out dependency packages\n    $ ./package/bundle/ecwam-bundle build [--build-type=\u003cbuild-type\u003e] [--arch=\u003cpath-to-arch\u003e] [--option]\n\nThe bundle also facilitates setting environment variables and compiler flags relevant to certain architectures by specifying the corresponding arch file at the build step. For example, to build on the ECMWF Atos system using Intel compilers and the hpcx-openmpi `MPI` library:\n\n`--arch=package/bundle/arch/ecmwf/hpc2020/intel/2021.4.0/hpcx-openmpi/2.9.0`\n\nThe following options can also be configured during the bundle build step:\n - `--without-mpi` - Disable MPI\n - `--without-omp` - Disable OpenMP\n - `--single-precision` - Build single-precision variant of ecWAM\n\n Finally, additional `CMake` options can also be set during the bundle build step:\n\n`--cmake=\"OPTION=\u003carg\u003e\"`\n\nRunning ecWAM\n=============\n\nFollowing are instructions to run ecWAM as a standalone wave forecasting tool.\n\nA YAML configuration file is required. See [tests](tests) directory for examples.\n\nTo run, use the commands listed in following steps, located in the build or install `bin` directory.\nEach of following commands can be inquired with the `--help` argument.\nIf `--run-dir` argument is not specified, or `ECWAM_RUN_DIR` environment variable is not set,\nthen the current directory is used.\nIf `--config` argument is not specified, it is assumed that a file called `config.yml`\nis present in the `\u003crun-dir\u003e`.\n\n\n1) Create bathymetry and grid tables\n\n```shell\necwam-run-preproc --run-dir=\u003crun-dir\u003e --config=\u003cpath-to-config.yml\u003e\n```\n\nThis command generates bathymetry data files as specified by configuration options.\nAs bathymetry data files are large and require heavy computations they are\ncached for later use in a directory which can be chosen with the `--cache` argument, or\n`ECWAM_CACHE_PATH` environment variable.\nBy default the cache path will be `$HOME/cache/ecwam` unless on the ECMWF HPC it is in\n`$HPCPERM/cache/ecwam`.\nBathymetry data files can also be searched for in a hierarchy of cache-like directories\nspecified with the `ECWAM_DATA_PATH` variable containing a ':'-separated list of paths\n(like `$PATH`). If not found, they are attempted to be downloaded from URL\nhttps://get.ecmwf.int/repository/ecwam. If still not available, they will be computed.\nThe cache path will then be populated with computed, or downloaded data,\nor with symbolic links to found data in the `ECWAM_DATA_PATH`s.\n\nGrid tables are always computed and never cached. THey are placed in the `\u003crun-dir\u003e`\n\n2) Create initial conditions\n\n```shell\necwam-run-preset --run-dir=\u003crun-dir\u003e --config=\u003cpath-to-config.yml\u003e\n```\n\nAs a result files, binary files of the form `\u003crun-dir\u003e/restart/BLS*` and `\u003crun-dir\u003e/restart/LAW*` are created.\nThey contain all initial conditions required for the wave model run from \"cold start\".\nThis command requires surface wind and sea-ice-cover input, at initial simulation time, provided in GRIB format.\nThe configuration file must specify this file. For several benchmark or test cases,\nthey are retrieved in similar fashion as the bathymetry files (see above).\n\nThis package also contains some scripts to generate MARS requests to retrieve data from the ECWMF operational\nforecast or from the ERA5 reanalysis data set. This is useful to generate new tests or for longer runs.\n\n3) Run wave model\n\n```shell\necwam-run-model --run-dir=\u003crun-dir\u003e --config=\u003cpath-to-config.yml\u003e\n```\n\nWith initial conditions, forcings, and grid tables in place we can run the actual wave model.\nThe advection and physics time step needs to be configured via the configuration file in accordance\nthe grid resolution.\nThe configuration file offers options to output GRIB output fields at regular time intervals, or\nbinary restart files similar to the initial condition files generated in step 2.\nAfter the run, the output files will be in `\u003crun-dir\u003e/output/` and log files will be in `\u003crun-dir\u003e/logs/model`.\nOne log file called `statistics.log` contains computed norms which can be used to validate results.\nSuch validation will occur automatically when the configuration file contains a `validation` section.\nSee [tests](tests) directory for example configuration files.\n\nRunning with MPI\n----------------\n\nAbove commands by default run without MPI.\nTo use MPI, or apply a custom command prefixed to the binary execution,\nthere are following options:\n\n- Use argument `--launch=\"ecwam-launch -np \u003cNTASKS\u003e -nt \u003cNTHREADS\u003e\"`.\n  `ecwam-launch` is an internal \"smart\" launcher that chooses a good launcher\n  depending on availability and the used platform. It will also set\n  `export OMP_NUM_THREADS=\u003cNTHREADS\u003e` for you. The unit-tests are automatically\n  configured to use this when invoked via `ctest`.\n\n- Use arguments `-np \u003cNTASKS\u003e -nt \u003cNTHREADS\u003e`. This is equivalent to the above, and\n  internally uses the `ecwam-launch` launcher.\n\n- Use any other custom command, e.g. `--launch=\"srun -n \u003cNTASKS\u003e -c \u003cNTHREADS\u003e\"` for full control.\n  Note that this does *not* automatically export the `OMP_NUM_THREADS` variable.\n\nNote that only `ecwam-run-model` currently supports MPI.\n\n\nGPU offload\n===========\necWAM can be offloaded for GPU execution. GPU optimised code for the wave propagation kernel is commited to source,\nwhereas GPU code for the source-term computation is generated at build-time build-time using ECMWF's source-to-source\ntranslation toolchain Loki. Currently, three Loki transformations are supported:\n- Single-column-coalesced (scc): Fuse vector loops and promote to the outermost level to target the SIMT execution model\n- scc-hoist: The scc transformation with temporary arrays hoisted to the driver-layer (the default)\n- scc-stack: The scc transformation with a pool allocator used to allocate temporary arrays\n\nThe scc-hoist and scc-stack transformations offer superior performance to the scc transformation. Currently, only the\nOpenACC programming model on Nvidia GPUs is supported.\n\nNB: GPU offload is not supported for ecWAM 1.4.0, 1.5.0 and 1.5.1.\n\nBuilding\n--------\nThe recommended option for building the GPU enabled ecWAM is to use the provided bundle, and pass the\n`--with-loki --with-acc --with-static-linking` options. Different Loki transformations can also be chosen at\nbuild-time via the following bundle option: `--loki-mode=\u003ctrafo\u003e`. Direct GPU-to-GPU MPI communications can be enabled by\npassing the `--with-gpu-aware-mpi` option. CPU to GPU data transfers can be accelerated (via pinning of host-side allocations)\nby building with the `--with-cuda` option.\n\nThe ecwam-bundle also provides appropriate arch files for the nvhpc suite on the ECMWF ATOS system.\n\nRunning\n-------\nNo extra run-time options are needed to run the GPU enabled ecWam. Please note that this means that if ecWam is built\nusing the `--with-loki` and `--with-acc` bundle arguments, it will necessarily be offloaded for GPU execution.\n\nEnvironment variables\n---------------------\n\nThe Loki SCC transformation uses the CUDA runtime to manage temporary arrays and needs a large\n `NV_ACC_CUDA_HEAPSIZE`, e.g. `NV_ACC_CUDA_HEAPSIZE=4G`.\n\nFor running with multiple OpenMP threads and grids finer than `O48`, `OMP_STACKSIZE` should be set to at least `256M`.\n\nKnown issues\n============\n\n1) On macOS arm64 with gfortran 12.2, and Open MPI 4.1.4, and with compilation\n   with flag `-ffpe-trap=overflow`, the execution of `ecwam-preproc` and `ecwam-chief`\n   needs to be launched with `mpirun -np 1`, even for serial runs in order to avoid\n   a floating point exception during during call to `MPI_INIT`.\n   The flag `-ffpe-trap=overflow` is set e.g. for `Debug` build type.\n   Floating point exceptions on arm64 manifest as a `SIGILL`.\n2) The coarsest configuration, i.e. `O48`, should be run with no more than one GPU.\n\nReporting Bugs\n==============\n\nPlease report bugs using a [GitHub issue](https://github.com/ecmwf-ifs/ecwam/issues).\nSupport is given on a best-effort basis by package developers.\n\nContributing\n============\n\nContributions to ecWAM are welcome.\nIn order to do so, please open a [GitHub issue](https://github.com/ecmwf-ifs/ecwam/issues) where\na feature request or bug can be discussed.\nThen create a [pull request](https://github.com/ecmwf-ifs/ecwam/pulls) with your contribution.\nAll contributors to the pull request need to sign the\n[contributors license agreement (CLA)](https://bol-claassistant.ecmwf.int/ecmwf-ifs/ecwam).\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["bufr","grib","meteorology","wmo","source-to-source"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/45584","html_url":"https://ost.ecosyste.ms/projects/45584"}