{"id":45586,"name":"dwarf-p-cloudsc","description":"Standalone mini-app of the ECMWF cloud microphysics parameterization.","url":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc","last_synced_at":"2026-04-10T18:30:22.915Z","repository":{"id":41184404,"uuid":"431052913","full_name":"ecmwf-ifs/dwarf-p-cloudsc","owner":"ecmwf-ifs","description":"Standalone mini-app of the ECMWF cloud microphysics parameterization","archived":false,"fork":false,"pushed_at":"2026-02-24T15:04:07.000Z","size":9694,"stargazers_count":12,"open_issues_count":5,"forks_count":26,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-03-05T04:44:27.887Z","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":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-11-23T10:16:46.000Z","updated_at":"2026-01-28T13:17:11.000Z","dependencies_parsed_at":"2025-12-23T14:02:33.545Z","dependency_job_id":"243181a9-65c0-41ab-a9df-4959325fc1bb","html_url":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc","commit_stats":{"total_commits":664,"total_committers":26,"mean_commits":25.53846153846154,"dds":0.6596385542168675,"last_synced_commit":"95125c267e5baed113ef7671c9f346979bd84029"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ecmwf-ifs/dwarf-p-cloudsc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf-ifs","download_url":"https://codeload.github.com/ecmwf-ifs/dwarf-p-cloudsc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30370234,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"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"}},"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":[{"id":11729531,"name":"github.com/ecmwf-ifs/dwarf-p-cloudsc","ecosystem":"go","description":null,"homepage":null,"licenses":"apache-2.0","normalized_licenses":["Apache-2.0"],"repository_url":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc","keywords_array":[],"namespace":null,"versions_count":7,"first_release_published_at":"2022-02-11T11:39:23.000Z","latest_release_published_at":"2025-03-05T15:20:36.000Z","latest_release_number":"v1.5.3","last_synced_at":"2026-03-13T05:03:01.783Z","created_at":"2025-06-04T10:54:58.860Z","updated_at":"2026-03-13T05:03:01.784Z","registry_url":"https://pkg.go.dev/github.com/ecmwf-ifs/dwarf-p-cloudsc","install_command":"go get github.com/ecmwf-ifs/dwarf-p-cloudsc","documentation_url":"https://pkg.go.dev/github.com/ecmwf-ifs/dwarf-p-cloudsc#section-documentation","metadata":{},"repo_metadata":{"id":41184404,"uuid":"431052913","full_name":"ecmwf-ifs/dwarf-p-cloudsc","owner":"ecmwf-ifs","description":"Standalone mini-app of the ECMWF cloud microphysics parameterization","archived":false,"fork":false,"pushed_at":"2025-10-21T12:02:36.000Z","size":9675,"stargazers_count":11,"open_issues_count":6,"forks_count":26,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-22T21:02:03.121Z","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":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-11-23T10:16:46.000Z","updated_at":"2025-09-04T08:09:12.000Z","dependencies_parsed_at":"2023-12-14T20:52:51.902Z","dependency_job_id":"7690bccf-8198-4280-b2d1-4fe6bd513776","html_url":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc","commit_stats":{"total_commits":664,"total_committers":26,"mean_commits":25.53846153846154,"dds":0.6596385542168675,"last_synced_commit":"95125c267e5baed113ef7671c9f346979bd84029"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ecmwf-ifs/dwarf-p-cloudsc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf-ifs","download_url":"https://codeload.github.com/ecmwf-ifs/dwarf-p-cloudsc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280872031,"owners_count":26405606,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-24T02:00:06.418Z","response_time":73,"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"},"owner_record":{"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"},"tags":[]},"repo_metadata_updated_at":"2025-10-25T12:21:50.817Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.764254255794306,"dependent_packages_count":5.401293307900869,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.582773781847587},"purl":"pkg:golang/github.com/ecmwf-ifs/dwarf-p-cloudsc","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/ecmwf-ifs/dwarf-p-cloudsc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/ecmwf-ifs/dwarf-p-cloudsc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/ecmwf-ifs/dwarf-p-cloudsc/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-10-24T21:48:49.073Z","issues_count":2,"pull_requests_count":172,"avg_time_to_close_issue":754245.0,"avg_time_to_close_pull_request":3753553.476821192,"issues_closed_count":1,"pull_requests_closed_count":151,"pull_request_authors_count":15,"issue_authors_count":1,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":1.0581395348837208,"merged_pull_requests_count":137,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":45,"past_year_avg_time_to_close_issue":754245.0,"past_year_avg_time_to_close_pull_request":955784.59375,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":32,"past_year_pull_request_authors_count":6,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":2.0,"past_year_avg_comments_per_pull_request":0.9777777777777777,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/issues","maintainers":[{"login":"reuterbal","count":58,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/reuterbal"},{"login":"mlange05","count":31,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mlange05"},{"login":"sbrdar","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sbrdar"},{"login":"msleigh","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/msleigh"}],"active_maintainers":[{"login":"mlange05","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mlange05"},{"login":"reuterbal","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/reuterbal"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fecmwf-ifs%2Fdwarf-p-cloudsc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fecmwf-ifs%2Fdwarf-p-cloudsc/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fecmwf-ifs%2Fdwarf-p-cloudsc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fecmwf-ifs%2Fdwarf-p-cloudsc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fecmwf-ifs%2Fdwarf-p-cloudsc/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2069812,"maintainers_count":0,"namespaces_count":775160,"keywords_count":0,"github":"golang","metadata":{"funded_packages_count":53241},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-03-15T05:36:01.653Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":1355875,"full_name":"ecmwf-ifs/dwarf-p-cloudsc","default_branch":"main","total_commits":758,"total_committers":23,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":32.95652173913044,"dds":0.6688654353562005,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-03-13T05:04:20.600Z","last_synced_commit":"f7ba9f85ebd91c710496c680db037f3d46f8e82b","created_at":"2023-09-12T11:43:13.676Z","updated_at":"2026-03-13T05:03:47.342Z","committers":[{"name":"Balthasar Reuter","email":"balthasar.reuter@ecmwf.int","login":"reuterbal","count":251},{"name":"Michael Lange","email":"Michael.Lange@ecmwf.int","login":"mlange05","count":248},{"name":"Michael Staneker","email":"michael.staneker@ecmwf.int","login":"MichaelSt98","count":92},{"name":"Slavko Brdar","email":"slavko.brdar@ecmwf.int","login":"sbrdar","count":34},{"name":"Johan Ericsson","email":"johan.ericsson@ecmwf.int","login":"wertysas","count":23},{"name":"Ahmad Nawab","email":"ahmad.nawab@ecmwf.int","login":"awnawab","count":21},{"name":"Loris Lucido","email":"loris.lucido@atos.net","login":"dindon-sournois","count":21},{"name":"mengaldo","email":"gianmarco.mengaldo@ecmwf.int","login":null,"count":13},{"name":"Willem Deconinck","email":"willem.deconinck@ecmwf.int","login":"wdeconinck","count":11},{"name":"Olivier Marsden","email":"olivier.marsden@ecmwf.int","login":"marsdeno","count":9},{"name":"Zbigniew Piotrowski","email":"zbigniew.piotrowski@ecmwf.int","login":"piotrows","count":8},{"name":"Gianmarco Mengaldo","email":"Gianmarco.Mengaldo@ecmwf.int","login":null,"count":5},{"name":"Stefano Ubbiali","email":"subbiali@phys.ethz.ch","login":"stubbiali","count":4},{"name":"mengaldo","email":"gianmarco.mengaldo@gmail.com","login":"mengaldo","count":4},{"name":"Antoine Morvan","email":"antoine.morvan.phd@gmail.com","login":"antoine-morvan","count":3},{"name":"msleigh","email":"msleigh","login":"msleigh","count":3},{"name":"Gian","email":"gian@Spencer-Sherwins-MacBook-Air-2.local","login":null,"count":2},{"name":"7schroet","email":"niclas.schroeter@googlemail.com","login":"7schroet","count":1},{"name":"Andrew Beggs","email":"andrew.beggs@ecmwf.int","login":"Andrew-Beggs-ECMWF","count":1},{"name":"Erwan Raffin","email":"erwan.raffin@atos.net","login":"eraffin","count":1},{"name":"Michael Lange","email":"naml@ccb-login4.ecmwf.int","login":null,"count":1},{"name":"Michael Lange","email":"Michael.Lange@ecwmf.int","login":null,"count":1},{"name":"Valentin Clement","email":"clementval@gmail.com","login":"clementval","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-15T00:00:35.572Z","repositories_count":6204358,"commits_count":934657667,"contributors_count":36189606,"owners_count":1149708,"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/dwarf-p-cloudsc","html_url":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc","last_synced_at":"2026-02-24T18:02:36.525Z","status":null,"issues_count":2,"pull_requests_count":173,"avg_time_to_close_issue":754245.0,"avg_time_to_close_pull_request":3819318.736842105,"issues_closed_count":1,"pull_requests_closed_count":152,"pull_request_authors_count":15,"issue_authors_count":1,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":1.0520231213872833,"merged_pull_requests_count":138,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":17,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":2163194.4,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":10,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.1764705882352942,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":9,"created_at":"2023-09-12T11:43:48.661Z","updated_at":"2026-02-24T18:02:36.525Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf-ifs%2Fdwarf-p-cloudsc/issues","issue_labels_count":{},"pull_request_labels_count":{"approved-for-ci":5,"contributor":2,"bug":1},"issue_author_associations_count":{"CONTRIBUTOR":2},"pull_request_author_associations_count":{"COLLABORATOR":94,"CONTRIBUTOR":65,"NONE":12,"MEMBER":2},"issue_authors":{"MichaelSt98":2},"pull_request_authors":{"reuterbal":59,"MichaelSt98":39,"mlange05":31,"piotrows":12,"wertysas":9,"awnawab":5,"sbrdar":4,"Andrew-Beggs-ECMWF":2,"antoine-morvan":2,"msleigh":2,"PouyanLaleh":2,"stubbiali":2,"7schroet":2,"dindon-sournois":1,"wdeconinck":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-07T00:00:07.995Z","repositories_count":13606443,"issues_count":34884723,"pull_requests_count":113769660,"authors_count":11185484,"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":{"approved-for-ci":5,"contributor":2,"bug":1},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":10,"COLLABORATOR":5},"past_year_issue_authors":{},"past_year_pull_request_authors":{"wertysas":6,"reuterbal":5,"piotrows":4},"maintainers":[{"login":"reuterbal","count":59,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/reuterbal"},{"login":"mlange05","count":31,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mlange05"},{"login":"sbrdar","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sbrdar"},{"login":"msleigh","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/msleigh"}],"active_maintainers":[{"login":"reuterbal","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/reuterbal"}]},"events":{"total":{"DeleteEvent":22,"PullRequestEvent":52,"ForkEvent":2,"WatchEvent":4,"IssueCommentEvent":37,"PushEvent":201,"PullRequestReviewEvent":151,"PullRequestReviewCommentEvent":128,"CreateEvent":37},"last_year":{"DeleteEvent":5,"PullRequestEvent":14,"WatchEvent":1,"IssueCommentEvent":17,"PushEvent":92,"PullRequestReviewCommentEvent":100,"PullRequestReviewEvent":89,"CreateEvent":12}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/build.yml","sha":null,"kind":"manifest","created_at":"2023-02-19T08:16:04.660Z","updated_at":"2023-02-19T08:16:04.660Z","repository_link":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc/blob/main/.github/workflows/build.yml","dependencies":[{"id":7781708437,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"benchmark/requirements.txt","sha":null,"kind":"manifest","created_at":"2023-09-23T07:11:03.389Z","updated_at":"2023-09-23T07:11:03.389Z","repository_link":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc/blob/main/benchmark/requirements.txt","dependencies":[]},{"ecosystem":"pypi","filepath":"src/cloudsc_python/pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-23T07:11:04.199Z","updated_at":"2023-09-23T07:11:04.199Z","repository_link":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc/blob/main/src/cloudsc_python/pyproject.toml","dependencies":[]},{"ecosystem":"pypi","filepath":"src/cloudsc_pyiface/pyproject.toml","sha":null,"kind":"manifest","created_at":"2025-12-23T14:02:30.106Z","updated_at":"2025-12-23T14:02:30.106Z","repository_link":"https://github.com/ecmwf-ifs/dwarf-p-cloudsc/blob/main/src/cloudsc_pyiface/pyproject.toml","dependencies":[{"id":25776755096,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25776755097,"package_name":"f90wrap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25776755337,"package_name":"click","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25776755338,"package_name":"h5py","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":null,"created_at":"2023-09-12T07:52:11.561Z","updated_at":"2026-04-10T18:30:22.929Z","avatar_url":"https://github.com/ecmwf-ifs.png","language":"Fortran","category":"Atmosphere","sub_category":"Atmospheric Chemistry and Aerosol","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# dwarf-p-cloudsc\n\n[![license](https://img.shields.io/github/license/ecmwf-ifs/dwarf-p-cloudsc)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![build](https://github.com/ecmwf-ifs/dwarf-p-cloudsc/actions/workflows/build.yml/badge.svg)](https://github.com/ecmwf-ifs/dwarf-p-cloudsc/actions/workflows/build.yml)\n\n`dwarf-p-cloudsc` is intended to test the CLOUDSC cloud microphysics scheme of the IFS.\n\n*This package is made available to support research collaborations and is not\nofficially supported by ECMWF*\n\n## Contact\n\nMichael Lange (michael.lange@ecmwf.int),\nWillem Deconinck (willem.deconinck@ecmwf.int),\nBalthasar Reuter (balthasar.reuter@ecmwf.int)\n\n## Licence\n\n`dwarf-p-cloudsc` is distributed under the Apache Licence Version 2.0. See\n[LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions to `dwarf-p-cloudsc` are welcome. \nIn order to do so, please create a pull request with your contribution and sign the [contributors license agreement (CLA)](https://bol-claassistant.ecmwf.int/ecmwf-ifs/dwarf-p-cloudsc).\n\n## Prototypes available\n\n- **dwarf-P-cloudMicrophysics-IFSScheme**: The original cloud scheme\n  from IFS that is naturally suited to host-type machines and\n  optimized on the Cray system at ECMWF.\n- **dwarf-cloudsc-fortran**: A cleaned up version of the CLOUDSC\n  prototype that validates runs against platform and language-agnostic\n  off-line reference data via HDF5 or the Serialbox package. The kernel code\n  also is slightly cleaner than the original version.\n- **dwarf-cloudsc-fortran-field**: A fortran version of CLOUDSC that uses Field API\n  for the data structures. The intent of this version is to show how\n  Field API is used in newer versions of the IFS.\n- **dwarf-cloudsc-c**: Standalone C version of the kernel that has\n  been generated by ECMWF tools. This relies exclusively on the Serialbox\n  validation mechanism.\n- **dwarf-cloudsc-gpu-kernels**: GPU-enabled version of the CLOUDSC dwarf\n  that uses OpenACC and relies on the `!$acc kernels` directive to offload\n  the computational kernel.\n- **dwarf-cloudsc-gpu-scc**: GPU-enabled and optimized version of\n  CLOUDSC that utilises the native blocked IFS memory layout via a\n  \"single-column coalesced\" (SCC) loop layout. Here the outer NPROMA\n  block loop is mapped to the OpenACC \"gang\" level and the kernel uses\n  an inverted loop-nest where the outer horizontal loop is mapped to\n  OpenACC \" vector\" parallelism. This variant lets the CUDA runtime\n  manage temporary arrays and needs a large `PGI_ACC_CUDA_HEAPSIZE`\n  (eg. `PGI_ACC_CUDA_HEAPSIZE=8GB` for 160K columns.)\n- **dwarf-cloudsc-gpu-scc-hoist**: GPU-enabled and optimized version of\n  CLOUDSC that also uses the SCC loop layout, but promotes the inner\n  \"vector\" loop to the driver and declares the kernel as sequential.\n  The block array arguments are fully dimensioned though, and\n  multi-dimensional temporaries have been declared explicitly at the\n  driver level.\n- **dwarf-cloudsc-gpu-scc-k-caching**: GPU-enabled and further \n  optimized version of CLOUDSC that also uses the SCC loop layout in\n  combination with loop fusion and temporary local array demotion.\n- **dwarf-cloudsc-gpu-scc-cuf**: GPU-enabled and optimized version of\n  CLOUDSC that uses the SCC loop layout in combination with CUDA-Fortran\n  (CUF) to explicitly allocate temporary arrays in device memory and\n  move parameter structures to constant memory. To enable this variant,\n  a suitable CUDA installation is required and the `--with-cuda` flag\n  needs to be passed at the build stage.\n- **dwarf-cloudsc-gpu-scc-cuf-k-caching**: GPU-enabled and further\n  optimized version of CLOUDSC that uses the SCC loop layout in\n  combination with loop fusion and temporary local array demotion, implemented\n  using CUDA-Fortran (CUF). To enable this variant,\n  a suitable CUDA installation is required and the `--with-cuda` flag\n  needs to be passed at the build stage.\n- **CUDA C prototypes**: To enable these variants, a suitable \n  CUDA installation is required and the `--with-cuda` flag needs\n  to be pased at the build stage.\n  - **dwarf-cloudsc-cuda**: GPU-enabled, CUDA C version of CLOUDSC.\n  - **dwarf-cloudsc-cuda-hoist**: GPU-enabled, optimized CUDA C version \n    of CLOUDSC including host side hoisted temporary local variables.\n  - **dwarf-cloudsc-cuda-k-caching**: GPU-enabled, further optimized CUDA\n    C version of CLOUDSC including loop fusion and temporary local \n    array demotion. \n  - **dwarf-cloudsc-cuda-opt**: GPU-enabled, further optimized beyond\n    k-caching CUDA C version that buffers some variables and\n    uses pipelined global-to-shared memory copies that are overlapped\n    with compute (TMA loads). \n- **dwarf-cloudsc-gpu-scc-field**: GPU-enabled and optimized version of\n  CLOUDSC that uses the SCC loop layout, and uses [FIELD API](https://github.com/ecmwf-ifs/field_api) (a Fortran library purpose-built for IFS data-structures that facilitates the\n  creation and management of field objects in scientific code) to perform device offload \n  and copyback.\n  The field api variant supports modern features of the FIELD API such as *field gangs* that group\n  multiple fields and allocates them in one larger field, in order to reduce allocations and\n  data transfers. Field gang support can be enabled at runtime by setting the environment\n  variable `CLOUDSC_PACKED_STORAGE=ON`. If CUDA is available, then the field api variant also supports\n  the use of allocating fields in pinned memory. This is enabled by setting the\n  environemnt variable `CLOUDSC_FIELD_API_PINNED=ON` and will speed up data transfers between host and device.\n  To enable this variant, a suitable CUDA installation is required and the\n  `--with-cuda` flag needs to be passed at the build stage. This variant lets the CUDA runtime \n  manage temporary arrays and needs a large `NV_ACC_CUDA_HEAPSIZE` (eg. `NV_ACC_CUDA_HEAPSIZE=8GB` for 160K columns.).\n  It is possible to disable Field API registering fields in the OpenACC data map, by passing the\n  `--without-mapped-fields` flag at build stage.\n- **cloudsc-pyiface.py**: a combination of the cloudsc/cloudsc-driver routines\n  of cloudsc-fortran with the uppermost `dwarf` program replaced with a\n  corresponding Python script capable of HDF5 data load and \n  verification of computation results. The computation is realized by the\n  Fortran subprogram, mimicking cloudsc-fortran and equipped with only \n  minor modifications (i.e. derived types/global paramters handling).\n  Turned off by default, activate at the build stage with \n  `--cloudsc-fortran-pyiface=ON`.\n- **dwarf-cloudsc-fortran-atlas**: A version of **dwarf-cloudsc-fortran** which uses the [Atlas library](https://github.com/ecmwf/atlas) \n  and its Field and FieldSet data stuctures. There are two storage settings for variables. If the environment variable\n  CLOUDSC_ATLAS_MULTIFIELD is \"0\", \"OFF\", or \"FALSE\", the variables are managed as atlas::FieldSet, which is an array of atlas::Fields. For other values of CLOUDSC_ATLAS_MULTIFIELD, a batching of variables is used as (BLK_IDX, LEV, VAR_ID, BLK_ID).\n  \n\n## Download and Installation\n\nThe code is written in Fortran 2003 and it has been tested using the various compilers, including:\n\n    GCC 7.3, 9.3, 11.2\n    Cray 8.7.7\n    NVHPC 20.9, 22.1\n    Intel (classic)\n\nThis application does not need MPI nor BLAS libraries for performance. Just a compiler that understands\nOpenMP directives. Fortran must be at least level F2003.\n\nInside the dwarf directory you can find some example of outputs inside the example-outputs/ directory.\n\nIn addition, to run the dwarf it is necessary to use an input file that can be found inside the config-files/\ndirectory winthin the dwarf folder.\n\nThe preferred method to install the CLOUDSC dwarf uses the bundle\ndefinition shipped in the main repository. For this please\ninstall the bundle via:\n\n```sh\n./cloudsc-bundle create  # Checks out dependency packages\n./cloudsc-bundle build [--build-type=debug|bit|release] [--arch=./arch/ecmwf/machine/compiler/version]\n```\n\nThe individual prototype variants of the dwarf are managed as ECBuild features\nand can be enable or disabled via `--cloudsc-\u003cfeature\u003e=[ON|OFF]` arguments to\n`cloudsc-bundle build`.\n\nThe use of the `boost` library or module is required by the Serialbox\nutility package for filesystem utilities. If `boost` is not available\non a given system, Serialbox's internal \"experimental filesystem\" can\nbe used via the `--serialbox-experimental=ON` argument, although this\nhas proven difficult with certain compiler toolchains.\n\n### GPU versions of CLOUDSC\n\nThe GPU-enabled versions of the dwarf are by default disabled. To\nenable them use the `--with-gpu` flag. For example to build on the ECMWF's ATOS\nA100 nodes:\n\n```sh\n./cloudsc-bundle create  # Checks out dependency packages\n./cloudsc-bundle build --clean --with-gpu --arch=./arch/ecmwf/hpc2020/nvhpc/22.1\n```\n\n### MPI-enabled versions of CLOUDSC\n\nOptionally, dwarf-cloudsc-fortran and the GPU versions can be built with\nMPI support by providing the `--with-mpi` flag. For example on ATOS:\n\n```sh\n./cloudsc-bundle create\n./cloudsc-bundle build --clean --with-mpi --with-gpu --arch=./arch/ecmwf/hpc2020/nvhpc/22.1\n```\n\nRunning with MPI parallelization distributes the columns of the working set\namong all ranks. The specified number of OpenMP threads is then spawned on\neach rank. Results are gathered from all ranks and reported for the global\nworking set. Performance numbers are also gathered and reported per thread,\nper rank and total.\n\n**Important:** If the total size of the working set (2nd argument, see\n\"[Running and testing](#running-and-testing)\") **exceeds** the number of\ncolumns in the input file (the input data in the repository consists of just\n100 columns), every rank derives its working set by replicating the columns in\nthe input file, starting with the first column in the file. This means, all\nranks effectively work on the same data set.\nIf the total size of the working set is **less than or equal** to the number of\ncolumns in the input file, these are truly distributed and every rank ends up\nwith a different working set.\n\nWhen running with multiple GPUs each rank needs to be assigned a different\ndevice. This can be achieved using the `CUDA_VISIBLE_DEVICES` environment\nvariable:\n\n```sh\nmpirun -np 2 bash -c \"CUDA_VISIBLE_DEVICES=\\${OMPI_COMM_WORLD_RANK} bin/dwarf-cloudsc-gpu-scc-stack 1 163840 128\"\n```\n\n### Choosing between HDF5 and Serialbox input file format\n\nThe default build configuration relies on HDF5 input and reference data for\ndwarf-cloudsc-fortran as well as GPU and Loki versions. The original\ndwarf-P-cloudMicrophysics-IFSScheme always uses raw Fortran binary format.\n\n**Please note:** The HDF55 installation needs to have the f03 interfaces installed (default with HDF5 1.10+).\n\nAs an alternative to HDF5, the [Serialbox](https://github.com/GridTools/serialbox)\nlibrary can be used to load input and reference data. This, however, requires\ncertain boost libraries or its own internal experimental filesystem, both of\nwhich proved difficult on certain compiler toolchains or more exotic hardware\narchitectures.\n\nThe original input is provided as raw Fortran binary in prototype1, but\ninput and reference data can be regenerated from this variant by running\n\n```sh\nCLOUDSC_WRITE_INPUT=1 ./bin/dwarf-P-cloudMicrophysics-IFSScheme 1 100 100\nCLOUDSC_WRITE_REFERENCE=1 ./bin/dwarf-P-cloudMicrophysics-IFSScheme 1 100 100\n```\n\nNote that this is only available via Serialbox at the moment. Updates to HDF5\ninput or reference data have to be done via manual conversion. A small\nPython script for this with usage instructions can be found in the\n[serialbox2hdf5](serialbox2hdf5/README.md) directory.\n\n### Building on ECMWF's Atos BullSequana XH2000\n\nTo build on ECMWF's Atos BullSequana XH2000 supercomputer, run the following commands:\n\n```sh\n./cloudsc-bundle create\n./cloudsc-bundle build --arch arch/ecmwf/hpc2020/compiler/version [--single-precision] [--with-mpi]\n```\n\nCurrently available `compiler/version` selections are:\n\n* `gnu/9.3.0` and `gnu/11.2.0`\n* `intel/2021.4.0`\n* `nvhpc/22.1` (use with `--with-gpu` on AC's GPU partition)\n\n### A64FX version of CLOUDSC\n\nPreliminary results for CLOUDSC have been generated for A64FX CPUs on\nIsambard. A set of arch and toolchain files and detailed installation\nand run instructions are provided\n[here](https://confluence.ecmwf.int/display/~nabr/3rd+Isambard+Hackathon).\n\n### SYCL version of CLOUDSC\n\nA preliminary SYCL code variant has been added and tested with a custom\nDPCPP install on ECMWF's AC partition. To build this, please use the\nSYCL-specific environment setups:\n\n```\n./cloudsc-bundle build --clean --build-dir=build-sycl --with-gpu --with-sycl --with-serialbox --arch=arch/ecmwf/hpc2020/intel-sycl/2021.4.0\n\n# Then run with\ncd build-sycl \u0026\u0026 . env.sh\n./bin/dwarf-cloudsc-scc-sycl 1 240000 128\n./bin/dwarf-cloudsc-scc-hoist-sycl 1 240000 128\n./bin/dwarf-cloudsc-scc-k-caching-sycl 1 240000 128\n```\n\n## Running and testing\n\nThe different prototype variants of the dwarf create different binaries that\nall behave similarly. The basic three arguments define (in this order):\n\n- Number of OpenMP threads\n  - 1 : single thread mode, skip multithread MPI init; default value;\n  - 2 or higher : force OpenMP thread count, enables multithread MPI;\n  - 0 or negative : read OMP_NUM_THREADS variable if present or defaults to CPU count (`omp_get_max_threads()`);\n- Size of overall working set in columns\n- Block size (NPROMA) in columns\n\nAn example:\n\n```sh\ncd build\n./bin/dwarf-P-cloudMicrophysics-IFSScheme 4 16384 32  # The original\n./bin/dwarf-cloudsc-fortran 4 16384 32   # The cleaned-up Fortran\n./bin/dwarf-cloudsc-c 4 16384 32   # The standalone C version\n```\n\n### Running on ECMWF's Atos BullSequana XH2000\n\nOn the Atos system, a high-watermark run on a single socket can be performed as follows:\n\n```sh\nexport OMP_NUM_THREADS=64\nOMP_PLACES=\"{$(seq -s '},{' 0 $(($OMP_NUM_THREADS-1)) )}\" srun -q np --ntasks=1 --hint=nomultithread --cpus-per-task=$OMP_NUM_THREADS ./bin/dwarf-cloudsc-fortran $OMP_NUM_THREADS 163840 32\n```\n\nFor a double-precision build with the GNU 11.2.0 compiler, performance of\n~73 GF/s is achieved.\n\nTo run the GPU variant on AC, which includes some GPU nodes, allocate\nan interactive session on a GPU node and run the binary as usual:\n\n```sh\nsrun -N1 -q ng -p gpu --gres=gpu:4 --mem 200G --pty /bin/bash\nbin/dwarf-cloudsc-gpu-scc-hoist 1 262144 128\n```\n\nFor a double-precision build with NVHPC 22.1, performance of ~340 GF/s\non a single GPU is achieved.\n\nA multi-GPU run requires MPI (build with `--with-mpi`) with a dedicated MPI\ntask for each GPU and (at the moment) manually assigning CUDA devices to each\nrank, as Slurm is not yet fully configured for the GPU partition.\n\nTo use four GPUs on one node, allocate the relevant resources\n```sh\nsalloc -N 1 --tasks-per-node 4 -q ng -p gpu --gres=gpu:4 --mem 200G\n```\n\nand then run the binary like this:\n\n```sh\nsrun bash -c \"CUDA_VISIBLE_DEVICES=\\$SLURM_LOCALID bin/dwarf-cloudsc-gpu-scc-hoist 1 \\$((\\$SLURM_NPROCS*262144)) 128\"\n```\n\nIn principle, the same should work for multi-node execution (`-N 2`, `-N 4` etc.) once interconnect issues are resolved.\n\n### GPU runs: Timing device kernels and data transfers\n\nFor GPU-enabled runs two internal timer results are reported:\n\n* The isolated compute time of the main compute kernel on device (where `#BLKS == 1`)\n* The overall time of the execution loop including data offload and copyback\n\nIt is important to note that due to the nature of the kernel, data\ntransfer overheads will dominate timings, and that most supported GPU\nvariants aim to optimise compute kernel timings only. However, a\ndedicated variant `dwarf-cloudsc-gpu-scc-field` has been added to\nexplore host-side memory pinning, which improves data transfer times\nand alternative data layout strategies. By default, pinned memory is turned off\nbut can be turned on by setting the environment variable `CLOUDSC_FIELD_API_PINNED=ON`.\nThis will allocate each array variable individually in pinned memory. A runtime flag\n`CLOUDSC_PACKED_STORAGE=ON` can be used to enable \"packed\" storage,\nwhere multiple arrays are stored in a single base allocation, eg.\n\n```sh\nNV_ACC_CUDA_HEAPSIZE=8G CLOUDSC_PACKED_STORAGE=ON ./bin/dwarf-cloudsc-gpu-scc-field 1 80000 128\n```\n\n## Loki transformations for CLOUDSC\n\n[Loki](https://github.com/ecmwf-ifs/loki) is an in-house developed\nsource-to-source translation tool that allows us to create bespoke\ntransformations for the IFS to target and experiment with emerging HPC\narchitectures and programming models. We use the CLOUDSC dwarf as a demonstrator\nfor targeted transformation capabilities of physics and grid point computations\nkernels, including conversion to C and GPU.\n\nThe following build flags enable the demonstrator build targets on the\nECMWF Atos HPC facility's GPU partition:\n\n```sh\n./cloudsc-bundle build --clean [--with-gpu] --with-loki --loki-frontend=fp --arch=./arch/ecmwf/hpc2020/nvhpc/22.1\n```\n\nThe following Loki modes are included in the dwarf, each with a bespoke demonstrator build:\n\n- **cloudsc-loki-idem**: \"Idempotence\" mode that performs a full\n  parse-unparse cycle of the kernel and performs various housekeeping\n  transformations, including the driver-level source injection\n  mechanism currently facilitated by Loki.\n- **cloudsc-loki-sca**: Pure single-column mode that strips all horizontal\n  vector loops from the kernel and introduces an outer \"column-loop\"\n  at the driver level.\n- **cloudsc-loki-c**: A prototype C transpilation pipeline that converts\n  the kernel to C and calls it via iso_c_bindings interfaces from the\n  driver.\n\n## Python-driven CLOUDSC variants\nThe following partly or fully Python-based CLOUDSC are available:\n- **cloudsc-python**: GT4PY based Python-only implementation. Refer to `src/cloudsc_python`\n  for information on how to bootstrap/execute this variant\n- **cloudsc-pyiface**: Fortran-based CLOUDSC variant driven by the Python script.\n  Activate with: \n```sh\n./cloudsc-bundle build --clean --cloudsc-fortran-pyiface=ON\n```\nThese variants are disabled by default. Refer to README.md in corresponding subdirectories\nfor further information.\n  \n### A note on frontends\n\nLoki currently supports three frontends to parse the Fortran source code:\n\n- [FParser](https://github.com/stfc/fparser) (`loki-frontend=fp`):\n  The preferred default; developed by STFC for PsyClone.\n- [OMNI](https://github.com/omni-compiler/omni-compiler) frontend (`loki-frontend=omni`):\n\nFor completeness, all three frontends are tested in our CI, which\nmeans we require the `.xmod` module description files for utility\nroutines in `src/common` for processing the CLOUDSC source files with\nthe OMNI frontend. These are stored in the source under\n`src/cloudsc_loki/xmod`.\n\n## Benchmarking\n\nTo automate parameter space sweeps and ease testing across various platforms, a\n[JUBE](https://www.fz-juelich.de/jsc/jube) benchmark definition is included in\nthe directory `benchmark`. See the included [README](benchmark/README.md) for\nfurther details and usage instructions.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["source-to-source"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/45586","html_url":"https://ost.ecosyste.ms/projects/45586"}