{"id":956,"name":"Next Gen Water Modeling Framework","description":"This framework includes an encapsulation strategy which focuses on the hydrologic data first, and then builds a functional abstraction of hydrologic behavior.","url":"https://github.com/NOAA-OWP/ngen","last_synced_at":"2026-04-27T12:30:33.979Z","repository":{"id":37519305,"uuid":"241711422","full_name":"NOAA-OWP/ngen","owner":"NOAA-OWP","description":"Next Generation Water Modeling Engine and Framework Prototype","archived":false,"fork":false,"pushed_at":"2026-03-26T14:47:09.000Z","size":279659,"stargazers_count":97,"open_issues_count":190,"forks_count":82,"subscribers_count":13,"default_branch":"master","last_synced_at":"2026-03-27T05:50:43.956Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"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/NOAA-OWP.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2020-02-19T19:52:57.000Z","updated_at":"2026-03-26T14:46:46.000Z","dependencies_parsed_at":"2024-01-15T05:10:19.186Z","dependency_job_id":"b73b83ab-b5e8-421d-9a70-83dc1c094741","html_url":"https://github.com/NOAA-OWP/ngen","commit_stats":{"total_commits":3056,"total_committers":41,"mean_commits":74.53658536585365,"dds":0.619109947643979,"last_synced_commit":"baf28e8a45051b5a8c9d659927c64f5f0382d210"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":"NOAA-OWP/owp-open-source-project-template","purl":"pkg:github/NOAA-OWP/ngen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NOAA-OWP","download_url":"https://codeload.github.com/NOAA-OWP/ngen/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31822903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"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":"NOAA-OWP","name":"NOAA-OWP","uuid":"60660814","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/60660814?v=4","repositories_count":28,"last_synced_at":"2023-03-04T04:01:13.237Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/NOAA-OWP","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-14T09:15:07.386Z","updated_at":"2023-03-04T04:01:13.290Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NOAA-OWP","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NOAA-OWP/repositories"},"packages":[],"commits":{"id":1254507,"full_name":"NOAA-OWP/ngen","default_branch":"master","total_commits":3089,"total_committers":40,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":77.225,"dds":0.6231790223373259,"past_year_total_commits":33,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":8.25,"past_year_dds":0.12121212121212122,"last_synced_at":"2025-11-27T09:09:01.640Z","last_synced_commit":"ff74dc21c8fef9b9ec2238cca9f5593e22f6e915","created_at":"2023-03-27T11:48:19.383Z","updated_at":"2025-11-27T09:06:35.748Z","committers":[{"name":"Robert Bartel","email":"robert.bartel@noaa.gov","login":"robertbartel","count":1164},{"name":"Nels Frazier","email":"nels.frazier@noaa.gov","login":"hellkite500","count":595},{"name":"program--","email":"justin@justinsingh.me","login":"program--","count":279},{"name":"Phil Miller","email":"philip.miller@noaa.gov","login":"PhilMiller","count":257},{"name":"Matt Williamson","email":"87771120+mattw-nws","login":"mattw-nws","count":190},{"name":"Shengting Cui","email":"shengting.cui@noaa.gov","login":"stcui007","count":132},{"name":"Donald Johnson","email":"Donald.W.Johnson@noaa.gov","login":"donaldwj","count":93},{"name":"Matt Williamson","email":"matthew.williamson@gov","login":null,"count":74},{"name":"John David Mattern","email":"jdmattern@localhost.localdomain","login":null,"count":69},{"name":"Chris Tubbs","email":"christopher.tubbs@noaa.gov","login":"christophertubbs","count":49},{"name":"David Mattern","email":"41338082+jdmattern-noaa","login":"jdmattern-noaa","count":35},{"name":"David Mattern","email":"dmattern@cheyenne4.cheyenne.ucar.edu","login":null,"count":20},{"name":"David Mattern","email":"dmattern@cheyenne6.cheyenne.ucar.edu","login":null,"count":15},{"name":"ZacharyWills-NOAA","email":"60660437+ZacharyWills","login":"ZacharyWills","count":14},{"name":"David Mattern","email":"dmattern@cheyenne5.cheyenne.ucar.edu","login":null,"count":13},{"name":"madMatchstick","email":"jlgred88@gmail.com","login":"madMatchstick","count":10},{"name":"Austin Raney","email":"austin.raney@noaa.gov","login":"aaraney","count":10},{"name":"Jonathan Frame","email":"jmframe@crimson.ua.edu","login":"jmframe","count":9},{"name":"john mattern","email":"john.mattern@nwcal-apd-dev1.nwc.nws.noaa.gov","login":null,"count":9},{"name":"David Mattern","email":"dmattern@cheyenne3.cheyenne.ucar.edu","login":null,"count":8},{"name":"David Blodgett","email":"dblodgett@usgs.gov","login":"dblodgett-usgs","count":7},{"name":"David Mattern","email":"dmattern@cheyenne1.cheyenne.ucar.edu","login":null,"count":6},{"name":"David Mattern","email":"dmattern@cheyenne5.ib0.cheyenne.ucar.edu","login":null,"count":5},{"name":"Cham Pham","email":"cham.pham@nwcal-apd-dev1.nwc.nws.noaa.gov","login":null,"count":5},{"name":"Ahmad Jan","email":"ajkhattak@gmail.com","login":"ajkhattak","count":4},{"name":"Keith Jennings","email":"keithjennings@keiths-mbp.lan","login":null,"count":2},{"name":"David Mattern","email":"dmattern@cheyenne6.ib0.cheyenne.ucar.edu","login":null,"count":2},{"name":"champham","email":"cham.pham@noaa.gov","login":"champham","count":1},{"name":"Austin Raney","email":"arthur.raney@noaa.gov","login":null,"count":1},{"name":"David Mattern","email":"dmattern@cheyenne2.cheyenne.ucar.edu","login":null,"count":1},{"name":"David Mattern","email":"dmattern@cheyenne3.ib0.cheyenne.ucar.edu","login":null,"count":1},{"name":"James Halgren","email":"jshalgren@ua.edu","login":null,"count":1},{"name":"Matthew Williamson","email":"matthew.williamson@nwcal-apd-dev1.nwc.nws.noaa.gov","login":null,"count":1},{"name":"Z","email":"zachary.wills@Z.local","login":null,"count":1},{"name":"Trupesh Patel","email":"pateltrupesh27@gmail.com","login":"TrupeshKumarPatel","count":1},{"name":"K. Jennings","email":"32177682+SnowHydrology","login":"SnowHydrology","count":1},{"name":"Josh Kotrous","email":"43544333+joshkotrous","login":"joshkotrous","count":1},{"name":"Brian-Cosgrove","email":"131808837+Brian-Cosgrove","login":"Brian-Cosgrove","count":1},{"name":"Ben-Choat","email":"liminal.engr@gmail.com","login":"Ben-Choat","count":1},{"name":"Andrew Dunkman","email":"adunkman@gmail.com","login":"adunkman","count":1}],"past_year_committers":[{"name":"hellkite500","email":"nfrazier@lynker.com","login":"hellkite500","count":29},{"name":"Phil Miller","email":"philip.miller@noaa.gov","login":"PhilMiller","count":2},{"name":"Brian-Cosgrove","email":"131808837+Brian-Cosgrove","login":"Brian-Cosgrove","count":1},{"name":"Austin Raney","email":"austin.raney@noaa.gov","login":"aaraney","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-11-28T00:00:11.340Z","repositories_count":6118639,"commits_count":925359336,"contributors_count":36018626,"owners_count":1119970,"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":"NOAA-OWP/ngen","html_url":"https://github.com/NOAA-OWP/ngen","last_synced_at":"2025-11-01T06:05:34.040Z","status":"active","issues_count":328,"pull_requests_count":681,"avg_time_to_close_issue":13409136.6875,"avg_time_to_close_pull_request":2175485.432835821,"issues_closed_count":192,"pull_requests_closed_count":603,"pull_request_authors_count":31,"issue_authors_count":32,"avg_comments_per_issue":1.6920731707317074,"avg_comments_per_pull_request":1.4434654919236416,"merged_pull_requests_count":514,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":3,"past_year_pull_requests_count":22,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":768412.3333333334,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":12,"past_year_pull_request_authors_count":8,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.8636363636363636,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"created_at":"2023-05-09T10:37:04.070Z","updated_at":"2025-11-01T06:05:34.040Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/NOAA-OWP%2Fngen/issues","issue_labels_count":{"bug":39,"enhancement":33,"documentation":17,"build":15,"good first issue":13,"Compatibility Issues":13,"CI/CD":6,"invalid":6,"wontfix":3,"optimization":3,"performance":2,"help wanted":2,"duplicate":2,"question":2,"QA/QC":2,"partitioner":1,"epic":1},"pull_request_labels_count":{"build":26,"bug":24,"enhancement":20,"CI/CD":10,"QA/QC":10,"documentation":9,"performance":2,"Compatibility Issues":2,"optimization":1},"issue_author_associations_count":{"CONTRIBUTOR":198,"MEMBER":102,"NONE":28},"pull_request_author_associations_count":{"CONTRIBUTOR":506,"MEMBER":153,"NONE":22},"issue_authors":{"hellkite500":95,"PhilMiller":45,"mattw-nws":35,"robertbartel":25,"program--":21,"christophertubbs":15,"ZacharyWills":12,"stcui007":12,"aaraney":9,"jdmattern":9,"donaldwj":9,"SnowHydrology":6,"jameshalgren":5,"jduckerOWP":4,"lcunha0118":3,"dblodgett-usgs":2,"ajkhattak":2,"RY4GIT":2,"rburghol":2,"adlzanchetta":2,"TrupeshKumarPatel":2,"hariteja-jajula":1,"pvbangalore":1,"peckhams":1,"ADHydro-devel":1,"Ben-Choat":1,"jawad-UA":1,"BrianAvant":1,"madMatchstick":1,"aniketgupta2009":1,"jarq6c":1,"chp2001":1},"pull_request_authors":{"hellkite500":139,"PhilMiller":98,"stcui007":81,"robertbartel":76,"program--":67,"mattw-nws":66,"jdmattern":39,"donaldwj":22,"aaraney":19,"ZacharyWills":15,"christophertubbs":14,"dblodgett-usgs":6,"cmaynard-ngwpc":5,"madMatchstick":5,"JoshCu":5,"jduckerOWP":3,"Brian-Cosgrove":3,"SnowHydrology":3,"Ben-Choat":2,"champham":2,"ajkhattak":1,"ashleymedin":1,"jmframe":1,"babetoduarte":1,"TrupeshKumarPatel":1,"andywood":1,"BrianAvant":1,"adunkman":1,"sivasankkar":1,"joshkotrous":1,"jameshalgren":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-11-01T00:00:09.245Z","repositories_count":11302758,"issues_count":35111128,"pull_requests_count":113956732,"authors_count":11042436,"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":{"bug":2},"past_year_pull_request_labels_count":{"bug":1,"QA/QC":1},"past_year_issue_author_associations_count":{"CONTRIBUTOR":3},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":12,"NONE":9,"MEMBER":1},"past_year_issue_authors":{"hellkite500":1,"PhilMiller":1,"robertbartel":1},"past_year_pull_request_authors":{"cmaynard-ngwpc":5,"hellkite500":5,"PhilMiller":4,"Brian-Cosgrove":3,"JoshCu":2,"aaraney":1,"robertbartel":1,"sivasankkar":1},"maintainers":[{"login":"hellkite500","count":227,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/hellkite500"},{"login":"aaraney","count":28,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/aaraney"}],"active_maintainers":[{"login":"aaraney","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/aaraney"}]},"events":{"total":{"IssuesEvent":10,"WatchEvent":9,"DeleteEvent":2,"IssueCommentEvent":26,"PushEvent":15,"PullRequestReviewCommentEvent":18,"PullRequestReviewEvent":34,"PullRequestEvent":27,"ForkEvent":10,"CreateEvent":6},"last_year":{"IssuesEvent":10,"WatchEvent":9,"DeleteEvent":1,"IssueCommentEvent":23,"PushEvent":6,"PullRequestReviewCommentEvent":18,"PullRequestReviewEvent":30,"PullRequestEvent":21,"ForkEvent":9,"CreateEvent":3}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"extern/test_bmi_py/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-07-12T16:21:17.452Z","updated_at":"2022-07-12T16:21:17.452Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/extern/test_bmi_py/requirements.txt","dependencies":[{"id":168702810,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":168702811,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":168702812,"package_name":"pyyaml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":168702813,"package_name":"bmipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":168702814,"package_name":"netCDF4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/actions/ngen-build/action.yaml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:29.452Z","updated_at":"2023-02-18T08:31:29.452Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/actions/ngen-build/action.yaml","dependencies":[{"id":7757587599,"package_name":"actions/cache","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/Example_model_run.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:30.003Z","updated_at":"2023-02-18T08:31:30.003Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/workflows/Example_model_run.yml","dependencies":[{"id":7757589918,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/anchor_containerized_test.yml.disabled","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:30.598Z","updated_at":"2023-02-18T08:31:30.598Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/workflows/anchor_containerized_test.yml.disabled","dependencies":[{"id":7757590776,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757590777,"package_name":"anchore/scan-action","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false},{"id":7757590783,"package_name":"github/codeql-action/upload-sarif","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/documentation.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:30.949Z","updated_at":"2023-02-18T08:31:30.949Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/workflows/documentation.yml","dependencies":[{"id":7757590930,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757590931,"package_name":"mattnotmitt/doxygen-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/module_integration.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:31.326Z","updated_at":"2023-02-18T08:31:31.326Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/workflows/module_integration.yml","dependencies":[{"id":7757594488,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757594489,"package_name":"./.github/actions/ngen-submod-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false},{"id":7757594496,"package_name":"./.github/actions/ngen-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test_and_validate.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:31:31.981Z","updated_at":"2023-02-18T08:31:31.981Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/workflows/test_and_validate.yml","dependencies":[{"id":7757598157,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757598160,"package_name":"./.github/actions/ngen-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false},{"id":7757598162,"package_name":"./.github/actions/clean-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false},{"id":7757598214,"package_name":"./.github/actions/ngen-submod-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/actions/clean-build/action.yaml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:45:42.282Z","updated_at":"2023-09-21T19:45:42.282Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/actions/clean-build/action.yaml","dependencies":[]},{"ecosystem":"actions","filepath":".github/actions/ngen-submod-build/action.yaml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:45:42.832Z","updated_at":"2023-09-21T19:45:42.832Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/.github/actions/ngen-submod-build/action.yaml","dependencies":[]},{"ecosystem":"conda","filepath":"extern/test_bmi_py/environment.yml","sha":null,"kind":"manifest","created_at":"2024-01-15T05:10:13.349Z","updated_at":"2024-01-15T05:10:13.349Z","repository_link":"https://github.com/NOAA-OWP/ngen/blob/master/extern/test_bmi_py/environment.yml","dependencies":[{"id":15619040416,"package_name":"bmipy","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":15619041012,"package_name":"bokeh","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":15619041803,"package_name":"netcdf4","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":15619041804,"package_name":"pandas","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":15619041805,"package_name":"python","ecosystem":"conda","requirements":"3.7.*","direct":true,"kind":"runtime","optional":false},{"id":15619041806,"package_name":"ruamel.yaml","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false}]}],"score":9.348361669873558,"created_at":"2023-09-11T11:54:36.459Z","updated_at":"2026-04-27T12:30:33.986Z","avatar_url":"https://github.com/NOAA-OWP.png","language":"C++","category":"Natural Resources","sub_category":"Water Supply and Quality","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"![](https://github.com/noaa-owp/ngen/workflows/Testing%20and%20Validation/badge.svg)\n[![](https://github.com/noaa-owp/ngen/workflows/Documentation/badge.svg)](https://noaa-owp.github.io/ngen/)\n\n# Next Gen Water Modeling Framework Prototype\n[![July 2020 webinar recording](https://img.youtube.com/vi/6XKPX4g9agY/0.jpg)](https://www.youtube.com/watch?v=6XKPX4g9agY)\n\n[July 2020 webinar slide deck](./doc/presentations/Next_Generation_Modeling_System_Seminar-15July2020.pdf)\n\n[Next Gen Github Pages Documentation](https://noaa-owp.github.io/ngen/)\n\n**Description**:  \nAs we attempt to apply hydrological modeling at different scales, the traditional organizational structure and algorithms of model software begin to interfere with the ability of the model to represent complex and heterogeneous processes at appropriate scales.  While it is possible to do so, the code becomes highly specialized, and reasoning about the model and its states becomes more difficult.  Model implementations are often the result of taking for granted the availability of a particular form of data **and** solution -- attempting to map the solution to that data. This framework takes a data centric approach, organizing the data first and mapping appropriate solutions to the existing data.\n\nThis framework includes an encapsulation strategy which focuses on the hydrologic data first, and then builds a functional abstraction of hydrologic behavior.  This abstraction is naturally recursive, and unlocks a higher level of modeling and reasoning using computational modeling for hydrology.  This is done by organizing model components along well-defined flow boundaries, and then implementing strict API’s to define the movement of water amongst these components.  This organization also allows control and orchestration of first-class model components to leverage more sophisticated programming techniques and data structures.\n\n\n  - **Technology stack**: Core Framework using C++ (minimum standard c++14) to provide polymorphic interfaces with reasonable systems integration.\n  - **Status**:  Version 0.1.0 in initial development including interfaces, logical data model, and framework structure.  See  [CHANGELOG](CHANGELOG.md) for revision details.\n\n## Structural Diagrams\n\n![Catchments](https://raw.githubusercontent.com/NOAA-OWP/ngen/master/doc/images/hy_features_catchment_diagram.png)\n\n**Catchments**: Catchments represent arbitrary spatial areas. They are the abstraction used to encapsulate a model. The three marked catchments could use three different models, 3 copies of the same model, or some combination of the previous options. \n\n![Realizations](https://raw.githubusercontent.com/NOAA-OWP/ngen/master/doc/images/realization_relations.png)\n\n**Realizations**: Different kinds of catchment realizations can be used to encapsulate different types of models. These models will have different types of relations with neighbors. When a relation exists between two adjacent catchments synchronization is necessary.\n\n![Complex Realizations](https://raw.githubusercontent.com/NOAA-OWP/ngen/master/doc/images/complex_realizations.png)\n\n**Complex Realizations**: An important type of catchment realization is the complex catchment realization. This allows a single catchment to be represented by a network of higher detail catchment realizations and their relationships. This allows the modeled area to be represented at multiple levels of detail and supports dynamic high resolution nesting.\n\n## Dependencies\n\nSee the [Dependencies](doc/DEPENDENCIES.md).\n\n## Installation\n\nSee [INSTALL](INSTALL.md).\n\n## Configuration\n\nTo view the compile-time configuration of an pre-compiled NextGen binary use the `--info` flag, as in `ngen --info`.\nfor more info see: https://github.com/NOAA-OWP/ngen/pull/679\n\n## Usage\n\nTo run the *ngen* engine, the following command line positional arguments are supported:\n- _catchment_data_path_ -- path to catchment data geojson input file.\n- _catchment subset ids_ -- list of comma separated ids (NO SPACES!!!) to subset the catchment data, i.e. 'cat-0,cat-1', an empty string or \"all\" will use all catchments in the hydrofabric\n- _nexus_data_path_ -- path to nexus data geojson input file\n- _nexus subset ids_ -- list of comma separated ids (NO SPACES!!!) to subset the nexus data, i.e. 'nex-0,nex-1', an empty string or \"all\" will use all nexus points\n- _realization_config_path_ -- path to json configuration file for realization/formulations associated with the hydrofabric inputs\n- _partition_config_path_ -- path to the partition json config file, when using the driver with [distributed processing](doc/DISTRIBUTED_PROCESSING.md).\n- `--subdivided-hydrofabric` -- an explicit, optional flag, when using the driver with [distributed processing](doc/DISTRIBUTED_PROCESSING.md), to indicate to the driver processes that they should operate on process-specific subdivided hydrofabric files.\n\nAn example of a complete invocation to run a subset of a hydrofabric.  If the realization configuration doesn't contain catchment definitions for the subset keys provided, the default `global` configuration is used.  Alternatively, if the realization configuration contains definitions that are not in the subset (or hydrofabric) keys, then a warning is produced and the formulation isn't created.\n`./cmake-build-debug/ngen ./data/catchment_data.geojson \"cat-27,cat-52\" ./data/nexus_data.geojson \"nex-26,nex-34\" ./data/example_realization_config.json`\n\nTo simulate every catchment in the input hydrofabric, leave the subset lists empty, or use \"all\" i.e.:\n`ngen ./data/catchment_data.geojson \"\" ./data/nexus_data.geojson \"\" ./data/refactored_example_realization_config.json`\n`ngen ./data/catchment_data.geojson \"all\" ./data/nexus_data.geojson \"all\" ./data/refactored_example_realization_config.json`\n\nExamples specific to running with with distributed processing can be found [here](doc/DISTRIBUTED_PROCESSING.md#examples).\n\n## How to test the software\n\nThe project uses the **Google Test** framework for creating automated tests for C++ code.\n\nTo execute the full collection of automated C++ tests, run the `test_all` target in **CMake**, then execute the generated executable.  Alternatively, replace `test_all` with `test_unit` or `test_integration` to run only those tests.\nFor example:\n  \n    cmake --build cmake-build-debug --target test_all -- -j 4\n    ./cmake-build-debug/test/test_all\n    \nOr, if the build system has not yet been properly generated:\n\n    git submodule update --init --recursive -- test/googletest\n    cmake -DCMAKE_BUILD_TYPE=Debug -DNGEN_WITH_TESTS:BOOL=ON -B cmake-build-debug -S .\n    cmake --build cmake-build-debug --target test_all -- -j 4\n    ./cmake-build-debug/test/test_all\n\nSee the [Testing ReadMe](test/README.md) file and [wiki/Quickstart](https://github.com/NOAA-OWP/ngen/wiki/NGen-Tutorial) for a more thorough discussion of testing.\n\n## How to debug the software\n\nThis is all developed via **CMake**, so a specific setting must be active within the root `CMakeList.txt` file:\n\n    target_compile_options(ngen PUBLIC -g)\n    \nThis will ensure that ngen and all of the code that is compiled with it has debugging flags enabled. From \nthere, the application may be run via `gdb`, `lldb`, or through your IDE.\n\nIf you do not have administrative rights on your workstation, there's a chance you do _not_ have access to \n`gdb` or `lldb`, meaning that you cannot step through your code and inspect variables. To get around this, you \ncan use GitPod to start an editor (based on VSCode) in your browser and edit and debug to your heart's content. \nYou can access an individualized GitPod environment through: https://gitpod.io/#https://github.com/\u003cyour github username\u003e/ngen. \nEntering it for the first time will generate a new git branch.\n\nThere are a few things required, however. When you first enter, gitpod will ask you if you want to set up your \nenvironment. Let it create a `.yml` configuration file. It will then ask if you want it to create a custom docker \nimage. Say yes, then choose the default image. At the end, you should have a `.gitpod.yml` and `.gitpod.dockerfile` \nat the root of the project.\n\nNext, you will need to add the above `target_compile_options(ngen PUBLIC -g)` just about anywhere in the `CMakeLists.txt` \nfile within the root of your project.\n\nNext, you will need to make sure that **all** dependencies are installed within your environment. The image GitPod supplies \nuses an application name HomeBrew to allow you to install dependencies. You will need to run:\n\n    brew install boost\n    \nto proceed further. Now clear all of your previously built binaries and build your application (`ngen` or any test routine \nthat you're interested in, such as `test_all`).\n\nA debugging extension should be installed into your workspace. Select the bottom icon on the left hand side of your screen; \nit should look like a box with a square in it. CodeLLDB is a good extension to use.\n\nLastly, a debugging configuration must be set up. There is an icon on the left hand side of your screen that should be a \nbug with a slash through it, somewhat like a 'No Parking' sign. If you click it, it will open a debugging tab on the left \nhand side of your screen. Within it, you should see a play button next to a drop down menu that says 'No Configurations'. \nClick on that, then click on the option named \"Add Configuration...\". This will create a file named `launch.json`. Within it, \nadd a configuration so that it looks like:\n\n\n    {\n      // Use IntelliSense to learn about possible attributes.\n      // Hover to view descriptions of existing attributes.\n      \"version\": \"0.2.0\",\n      \"configurations\": [\n        {\n            \"name\": \"ngen\",\n            \"type\": \"lldb\",\n            \"request\": \"launch\",\n            \"program\": \"${workspaceFolder}/\u003cyour build directory\u003e/ngen\",\n            \"args\": [],\n        }\n      ]\n    }\n\nYou will now have the configuration named `ngen` after saving your `launch.json` file. You may now add a break point within \nyour code by clicking to the left of the line number within your code. This should make a red circle appear. Now, when you run \nit by clicking the play button in the debugging window, your code will stop on the line where you put your break point, as long \nas it executes code. It will **not** stop on whitespace or comments.\n\n## Known issues\n\nDocument any known significant shortcomings with the software.\n\n## Getting help\n\nInstruct users how to get help with this software; this might include links to an issue tracker, wiki, mailing list, etc.\n\n**Example**\n\nIf you have questions, concerns, bug reports, etc, please file an issue in this repository's Issue Tracker.\n\n## Getting involved\n\nThis section should detail why people should get involved and describe key areas you are\ncurrently focusing on; e.g., trying to get feedback on features, fixing certain bugs, building\nimportant pieces, etc.\n\nGeneral instructions on _how_ to contribute should be stated with a link to [CONTRIBUTING](CONTRIBUTING.md).\n\n\n----\n\n## Open source licensing info\n1. [TERMS](TERMS.md)\n2. [LICENSE](LICENSE)\n\n\n----\n\n## Credits and references\n\n1. Projects that inspired you\n2. Related projects\n3. Books, papers, talks, or other sources that have meaningful impact or influence on this project\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["hydrology","bmi","csdms","noaa","earth-science","hydrologic-modeling","wrf-hydro","observations","verification","flooding"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/956","html_url":"https://ost.ecosyste.ms/projects/956"}