{"id":348939,"name":"GHEDesigner","description":"A Flexible and Automatic Ground Heat Exchanger Design Tool.","url":"https://github.com/betsrg/ghedesigner","last_synced_at":"2026-04-29T20:01:53.948Z","repository":{"id":164601638,"uuid":"460977662","full_name":"BETSRG/GHEDesigner","owner":"BETSRG","description":"Flexible and Automatic Ground Heat Exchanger Design Tool","archived":false,"fork":false,"pushed_at":"2026-04-01T21:35:35.000Z","size":80847,"stargazers_count":21,"open_issues_count":23,"forks_count":12,"subscribers_count":12,"default_branch":"develop","last_synced_at":"2026-04-03T13:19:14.501Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://betsrg.github.io/GHEDesigner/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BETSRG.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing.md","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":"2022-02-18T19:19:42.000Z","updated_at":"2026-04-01T20:39:40.000Z","dependencies_parsed_at":"2025-12-07T03:11:01.426Z","dependency_job_id":null,"html_url":"https://github.com/BETSRG/GHEDesigner","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/BETSRG/GHEDesigner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BETSRG","download_url":"https://codeload.github.com/BETSRG/GHEDesigner/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31428645,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T02:22:46.605Z","status":"ssl_error","status_checked_at":"2026-04-05T02:22:33.263Z","response_time":75,"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":"BETSRG","name":"Building \u0026 Environmental Thermal Systems Research Group (OK State)","uuid":"7966120","kind":"organization","description":"Oklahoma State University Thermal Systems Research Group","email":null,"website":"hvac.okstate.edu","location":"Stillwater, OK","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/7966120?v=4","repositories_count":1,"last_synced_at":"2023-03-01T13:00:39.856Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/BETSRG","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-12T10:28:14.941Z","updated_at":"2023-03-01T13:00:39.878Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BETSRG","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BETSRG/repositories"},"packages":[],"commits":{"id":11689595,"full_name":"betsrg/ghedesigner","default_branch":"master","total_commits":588,"total_committers":10,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":58.8,"dds":0.41496598639455784,"past_year_total_commits":64,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":16.0,"past_year_dds":0.40625,"last_synced_at":"2026-04-27T19:01:24.614Z","last_synced_commit":"82ebe54cad4aa9d87d9225ea583d34ae3e3a1db1","created_at":"2026-03-20T00:01:58.553Z","updated_at":"2026-04-27T19:01:14.153Z","committers":[{"name":"Matt Mitchell","email":"matt.mitchell@nrel.gov","login":"mitchute","count":344},{"name":"Edwin Lee","email":"leeed2001@gmail.com","login":"Myoldmopar","count":98},{"name":"Nathan Moore","email":"nathan.moore@nrel.gov","login":"vtnate","count":59},{"name":"TNWest","email":"mastertigerwest@gmail.com","login":"TNWest","count":29},{"name":"Alex Swindler","email":"Alex.Swindler@nrel.gov","login":"axelstudios","count":26},{"name":"Matt Mitchell","email":"matt.s.mitchell@okstate.edu","login":null,"count":24},{"name":"TNWest","email":"ultratigerofthewest@gmail.com","login":null,"count":3},{"name":"jeffreyspitler","email":"spitler@okstate.edu","login":"jeffreyspitler","count":2},{"name":"Ishraque","email":"58135460+ishraque2008","login":"ishraque2008","count":2},{"name":"MaHolb","email":"madiholberg@gmail.com","login":"MaHolb","count":1}],"past_year_committers":[{"name":"Matt Mitchell","email":"matt.mitchell@nrel.gov","login":"mitchute","count":38},{"name":"Alex Swindler","email":"Alex.Swindler@nrel.gov","login":"axelstudios","count":11},{"name":"Edwin Lee","email":"leeed2001@gmail.com","login":"Myoldmopar","count":11},{"name":"TNWest","email":"timothy.west@okstate.edu","login":"TNWest","count":4}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/betsrg%2Fghedesigner/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-29T00:00:10.453Z","repositories_count":6223002,"commits_count":899915332,"contributors_count":34898917,"owners_count":1147513,"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":"BETSRG/GHEDesigner","html_url":"https://github.com/BETSRG/GHEDesigner","last_synced_at":"2026-04-19T15:00:45.983Z","status":"active","issues_count":47,"pull_requests_count":122,"avg_time_to_close_issue":11165455.172413792,"avg_time_to_close_pull_request":458772.62376237626,"issues_closed_count":29,"pull_requests_closed_count":101,"pull_request_authors_count":8,"issue_authors_count":11,"avg_comments_per_issue":0.7446808510638298,"avg_comments_per_pull_request":1.0081967213114753,"merged_pull_requests_count":93,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":20,"past_year_avg_time_to_close_issue":134914.0,"past_year_avg_time_to_close_pull_request":1181188.6,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":10,"past_year_pull_request_authors_count":7,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.6,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":6,"created_at":"2023-05-15T09:16:06.008Z","updated_at":"2026-04-19T15:00:45.983Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/BETSRG%2FGHEDesigner/issues","issue_labels_count":{"enhancement":18,"bug":6,"documentation":2,"refactoring":2,"good first issue":1},"pull_request_labels_count":{"enhancement":31,"refactoring":16,"bug":15,"documentation":8,"help wanted":1},"issue_author_associations_count":{"CONTRIBUTOR":39,"NONE":6,"COLLABORATOR":2},"pull_request_author_associations_count":{"CONTRIBUTOR":96,"COLLABORATOR":26},"issue_authors":{"mitchute":30,"TNWest":8,"NicholasFry":1,"apreimann":1,"tanushree04":1,"Vbraciszewski":1,"RobertNewton-Nomura":1,"p-klebo":1,"vtnate":1,"LoneMeertens":1,"Myoldmopar":1},"pull_request_authors":{"mitchute":82,"axelstudios":13,"vtnate":10,"Myoldmopar":7,"TNWest":7,"thaque25":1,"niranjan-bas":1,"DrewMcNair":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-25T00:00:14.967Z","repositories_count":14386555,"issues_count":34396482,"pull_requests_count":112636650,"authors_count":11244842,"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":{"enhancement":1},"past_year_pull_request_labels_count":{"enhancement":1},"past_year_issue_author_associations_count":{"CONTRIBUTOR":1,"NONE":1},"past_year_pull_request_author_associations_count":{"COLLABORATOR":9,"CONTRIBUTOR":8},"past_year_issue_authors":{"RobertNewton-Nomura":1,"TNWest":1},"past_year_pull_request_authors":{"axelstudios":6,"mitchute":6,"TNWest":2,"DrewMcNair":1,"niranjan-bas":1,"thaque25":1},"maintainers":[{"login":"axelstudios","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/axelstudios"},{"login":"vtnate","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vtnate"},{"login":"thaque25","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thaque25"},{"login":"niranjan-bas","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/niranjan-bas"},{"login":"tanushree04","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tanushree04"},{"login":"DrewMcNair","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DrewMcNair"}],"active_maintainers":[{"login":"axelstudios","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/axelstudios"},{"login":"DrewMcNair","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DrewMcNair"},{"login":"niranjan-bas","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/niranjan-bas"},{"login":"thaque25","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thaque25"}]},"events":{"total":{"DeleteEvent":18,"MemberEvent":2,"PullRequestEvent":46,"ForkEvent":2,"IssuesEvent":9,"WatchEvent":9,"IssueCommentEvent":25,"PushEvent":121,"PullRequestReviewCommentEvent":45,"PullRequestReviewEvent":35,"CreateEvent":27,"CommitCommentEvent":1},"last_year":{"DeleteEvent":7,"MemberEvent":2,"PullRequestEvent":21,"ForkEvent":2,"IssuesEvent":3,"WatchEvent":3,"IssueCommentEvent":10,"PushEvent":67,"PullRequestReviewEvent":13,"PullRequestReviewCommentEvent":21,"CreateEvent":13,"CommitCommentEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/tests.yml","sha":null,"kind":"manifest","created_at":"2025-12-07T03:10:46.403Z","updated_at":"2025-12-07T03:10:46.403Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/.github/workflows/tests.yml","dependencies":[{"id":25760136779,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25760136780,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25760136781,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/release.yml","sha":null,"kind":"manifest","created_at":"2025-12-07T03:10:46.334Z","updated_at":"2025-12-07T03:10:46.334Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/.github/workflows/release.yml","dependencies":[{"id":25760136775,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25760136776,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25760136777,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25760136778,"package_name":"pypa/gh-action-pypi-publish","ecosystem":"actions","requirements":"release/v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/install.yml","sha":null,"kind":"manifest","created_at":"2025-12-07T03:10:45.738Z","updated_at":"2025-12-07T03:10:45.738Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/.github/workflows/install.yml","dependencies":[{"id":25760136763,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25760136764,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25760136765,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2025-12-07T03:11:01.315Z","updated_at":"2025-12-07T03:11:01.315Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/pyproject.toml","dependencies":[{"id":25760138339,"package_name":"python","ecosystem":"pypi","requirements":"\u003e=3.10, \u003c3.14","direct":true,"kind":"runtime","optional":false},{"id":25760138340,"package_name":"click","ecosystem":"pypi","requirements":"^8.1","direct":true,"kind":"runtime","optional":false},{"id":25760138341,"package_name":"jsonschema","ecosystem":"pypi","requirements":"^4.19","direct":true,"kind":"runtime","optional":false},{"id":25760138342,"package_name":"numpy","ecosystem":"pypi","requirements":"^2.0.0","direct":true,"kind":"runtime","optional":false},{"id":25760138343,"package_name":"pygfunction","ecosystem":"pypi","requirements":"^2.3.1","direct":true,"kind":"runtime","optional":false},{"id":25760138344,"package_name":"bhresist","ecosystem":"pypi","requirements":"^0.2.0","direct":true,"kind":"runtime","optional":false},{"id":25760138345,"package_name":"scipy","ecosystem":"pypi","requirements":"^1.14","direct":true,"kind":"runtime","optional":false},{"id":25760138346,"package_name":"secondarycoolantprops","ecosystem":"pypi","requirements":"^1.3","direct":true,"kind":"runtime","optional":false},{"id":25760138347,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"^9.5","direct":true,"kind":"develop","optional":false},{"id":25760138348,"package_name":"mkdocs-schema-reader","ecosystem":"pypi","requirements":"^0.11.1","direct":true,"kind":"develop","optional":false},{"id":25760138349,"package_name":"mkdocstrings","ecosystem":"pypi","requirements":"^0.27.0","direct":true,"kind":"develop","optional":false},{"id":25760138350,"package_name":"pre-commit","ecosystem":"pypi","requirements":"^4.0.0","direct":true,"kind":"develop","optional":false},{"id":25760138351,"package_name":"pytest","ecosystem":"pypi","requirements":"^8.0.0","direct":true,"kind":"develop","optional":false},{"id":25760138352,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"^6.0.0","direct":true,"kind":"develop","optional":false},{"id":25760138353,"package_name":"pytest-xdist","ecosystem":"pypi","requirements":"^3.6","direct":true,"kind":"develop","optional":false},{"id":25760138354,"package_name":"recursive-diff","ecosystem":"pypi","requirements":"^1.1.0","direct":true,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"poetry.lock","sha":null,"kind":"lockfile","created_at":"2025-12-07T03:10:46.472Z","updated_at":"2025-12-07T03:10:46.472Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/poetry.lock","dependencies":[{"id":25760136783,"package_name":"attrs","ecosystem":"pypi","requirements":"25.3.0","direct":false,"kind":"runtime","optional":false},{"id":25760136784,"package_name":"babel","ecosystem":"pypi","requirements":"2.17.0","direct":false,"kind":"develop","optional":false},{"id":25760136785,"package_name":"backrefs","ecosystem":"pypi","requirements":"5.9","direct":false,"kind":"develop","optional":false},{"id":25760136799,"package_name":"bhresist","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":25760136802,"package_name":"certifi","ecosystem":"pypi","requirements":"2025.7.14","direct":false,"kind":"develop","optional":false},{"id":25760136803,"package_name":"cfgv","ecosystem":"pypi","requirements":"3.4.0","direct":false,"kind":"develop","optional":false},{"id":25760136914,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.2","direct":false,"kind":"develop","optional":false},{"id":25760136915,"package_name":"click","ecosystem":"pypi","requirements":"8.2.1","direct":false,"kind":"runtime","optional":false},{"id":25760136916,"package_name":"click","ecosystem":"pypi","requirements":"8.2.1","direct":false,"kind":"develop","optional":false},{"id":25760136917,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":25760136918,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"develop","optional":false},{"id":25760136919,"package_name":"coverage","ecosystem":"pypi","requirements":"7.9.2","direct":false,"kind":"develop","optional":false},{"id":25760136920,"package_name":"distlib","ecosystem":"pypi","requirements":"0.4.0","direct":false,"kind":"develop","optional":false},{"id":25760136921,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"develop","optional":false},{"id":25760136952,"package_name":"execnet","ecosystem":"pypi","requirements":"2.1.1","direct":false,"kind":"develop","optional":false},{"id":25760136953,"package_name":"filelock","ecosystem":"pypi","requirements":"3.18.0","direct":false,"kind":"develop","optional":false},{"id":25760136963,"package_name":"ghp-import","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"develop","optional":false},{"id":25760136968,"package_name":"griffe","ecosystem":"pypi","requirements":"1.7.3","direct":false,"kind":"develop","optional":false},{"id":25760136970,"package_name":"identify","ecosystem":"pypi","requirements":"2.6.12","direct":false,"kind":"develop","optional":false},{"id":25760136977,"package_name":"idna","ecosystem":"pypi","requirements":"3.10","direct":false,"kind":"develop","optional":false},{"id":25760136978,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"develop","optional":false},{"id":25760136979,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"develop","optional":false},{"id":25760136980,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.25.0","direct":false,"kind":"runtime","optional":false},{"id":25760136981,"package_name":"jsonschema-specifications","ecosystem":"pypi","requirements":"2025.4.1","direct":false,"kind":"runtime","optional":false},{"id":25760136982,"package_name":"jsonschema2md","ecosystem":"pypi","requirements":"1.6.1","direct":false,"kind":"develop","optional":false},{"id":25760137073,"package_name":"markdown","ecosystem":"pypi","requirements":"3.8.2","direct":false,"kind":"develop","optional":false},{"id":25760137074,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.2","direct":false,"kind":"develop","optional":false},{"id":25760137075,"package_name":"mergedeep","ecosystem":"pypi","requirements":"1.3.4","direct":false,"kind":"develop","optional":false},{"id":25760137165,"package_name":"mkdocs","ecosystem":"pypi","requirements":"1.6.1","direct":false,"kind":"develop","optional":false},{"id":25760137166,"package_name":"mkdocs-autorefs","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"develop","optional":false},{"id":25760137167,"package_name":"mkdocs-get-deps","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"develop","optional":false},{"id":25760137204,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"9.6.15","direct":false,"kind":"develop","optional":false},{"id":25760137205,"package_name":"mkdocs-material-extensions","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"develop","optional":false},{"id":25760137214,"package_name":"mkdocs-schema-reader","ecosystem":"pypi","requirements":"0.11.1","direct":false,"kind":"develop","optional":false},{"id":25760137654,"package_name":"mkdocstrings","ecosystem":"pypi","requirements":"0.27.0","direct":false,"kind":"develop","optional":false},{"id":25760137667,"package_name":"mkdocstrings-python","ecosystem":"pypi","requirements":"1.13.0","direct":false,"kind":"develop","optional":false},{"id":25760137690,"package_name":"nodeenv","ecosystem":"pypi","requirements":"1.9.1","direct":false,"kind":"develop","optional":false},{"id":25760137727,"package_name":"numpy","ecosystem":"pypi","requirements":"2.2.6","direct":false,"kind":"runtime","optional":false},{"id":25760137728,"package_name":"numpy","ecosystem":"pypi","requirements":"2.2.6","direct":false,"kind":"develop","optional":false},{"id":25760137729,"package_name":"numpy","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"runtime","optional":false},{"id":25760137730,"package_name":"numpy","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"develop","optional":false},{"id":25760137731,"package_name":"packaging","ecosystem":"pypi","requirements":"25.0","direct":false,"kind":"develop","optional":false},{"id":25760137732,"package_name":"paginate","ecosystem":"pypi","requirements":"0.5.7","direct":false,"kind":"develop","optional":false},{"id":25760137745,"package_name":"pandas","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"develop","optional":false},{"id":25760137746,"package_name":"pathspec","ecosystem":"pypi","requirements":"0.12.1","direct":false,"kind":"develop","optional":false},{"id":25760137747,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.3.8","direct":false,"kind":"develop","optional":false},{"id":25760137748,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"develop","optional":false},{"id":25760137749,"package_name":"pre-commit","ecosystem":"pypi","requirements":"4.2.0","direct":false,"kind":"develop","optional":false},{"id":25760137833,"package_name":"pygfunction","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"runtime","optional":false},{"id":25760137931,"package_name":"pygments","ecosystem":"pypi","requirements":"2.19.2","direct":false,"kind":"develop","optional":false},{"id":25760137932,"package_name":"pymdown-extensions","ecosystem":"pypi","requirements":"10.16","direct":false,"kind":"develop","optional":false},{"id":25760137933,"package_name":"pytest","ecosystem":"pypi","requirements":"8.4.1","direct":false,"kind":"develop","optional":false},{"id":25760137934,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"6.2.1","direct":false,"kind":"develop","optional":false},{"id":25760138006,"package_name":"pytest-xdist","ecosystem":"pypi","requirements":"3.8.0","direct":false,"kind":"develop","optional":false},{"id":25760138007,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"develop","optional":false},{"id":25760138008,"package_name":"pytz","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"develop","optional":false},{"id":25760138009,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.2","direct":false,"kind":"develop","optional":false},{"id":25760138010,"package_name":"pyyaml-env-tag","ecosystem":"pypi","requirements":"1.1","direct":false,"kind":"develop","optional":false},{"id":25760138086,"package_name":"recursive-diff","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"develop","optional":false},{"id":25760138197,"package_name":"referencing","ecosystem":"pypi","requirements":"0.36.2","direct":false,"kind":"runtime","optional":false},{"id":25760138198,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.4","direct":false,"kind":"develop","optional":false},{"id":25760138199,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.26.0","direct":false,"kind":"runtime","optional":false},{"id":25760138200,"package_name":"scipy","ecosystem":"pypi","requirements":"1.15.3","direct":false,"kind":"runtime","optional":false},{"id":25760138201,"package_name":"scipy","ecosystem":"pypi","requirements":"1.16.0","direct":false,"kind":"runtime","optional":false},{"id":25760138202,"package_name":"secondarycoolantprops","ecosystem":"pypi","requirements":"1.3","direct":false,"kind":"runtime","optional":false},{"id":25760138205,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"develop","optional":false},{"id":25760138206,"package_name":"tomli","ecosystem":"pypi","requirements":"2.2.1","direct":false,"kind":"develop","optional":false},{"id":25760138207,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.14.1","direct":false,"kind":"runtime","optional":false},{"id":25760138208,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.14.1","direct":false,"kind":"develop","optional":false},{"id":25760138209,"package_name":"tzdata","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"develop","optional":false},{"id":25760138210,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.5.0","direct":false,"kind":"develop","optional":false},{"id":25760138211,"package_name":"virtualenv","ecosystem":"pypi","requirements":"20.31.2","direct":false,"kind":"develop","optional":false},{"id":25760138216,"package_name":"watchdog","ecosystem":"pypi","requirements":"6.0.0","direct":false,"kind":"develop","optional":false},{"id":25760138295,"package_name":"xarray","ecosystem":"pypi","requirements":"2025.6.1","direct":false,"kind":"develop","optional":false},{"id":25760138296,"package_name":"xarray","ecosystem":"pypi","requirements":"2025.7.1","direct":false,"kind":"develop","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/mkdocs.yml","sha":null,"kind":"manifest","created_at":"2025-12-07T03:10:46.264Z","updated_at":"2025-12-07T03:10:46.264Z","repository_link":"https://github.com/BETSRG/GHEDesigner/blob/develop/.github/workflows/mkdocs.yml","dependencies":[{"id":25760136771,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25760136772,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25760136773,"package_name":"actions/cache","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25760136774,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]}],"score":6.0867747269123065,"created_at":"2026-03-20T00:01:53.926Z","updated_at":"2026-04-29T20:01:53.949Z","avatar_url":"https://github.com/BETSRG.png","language":"Python","category":"Renewable Energy","sub_category":"Geothermal Energy","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# GHEDesigner – A Flexible and Automatic Ground Heat Exchanger Design Tool\n\n![PyPI](https://img.shields.io/pypi/v/ghedesigner)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/ghedesigner?label=PyPI%20Downloads)\n![Python Versions](https://img.shields.io/pypi/pyversions/ghedesigner)\n[![Tests](https://github.com/BETSRG/GHEDesigner/actions/workflows/tests.yml/badge.svg)](https://github.com/BETSRG/GHEDesigner/actions/workflows/tests.yml)\n\n## Documentation\n\nProject documentation is available at [https://betsrg.github.io/GHEDesigner/](https://betsrg.github.io/GHEDesigner/)\n\n## Introduction\n\nGHEDesigner is a Python package for designing ground heat exchangers (GHE) used with ground source heat pump (GSHP)\nsystems. Compared to currently available tools such\nas [GLHEPRO](https://betsrg.org/ground-loop-heat-exchanger-design-software), GHEDesigner:\n\n- is flexible. It can synthesize borehole fields that are custom fit to the user's property description,\n- implements the RowWise algorithm ([Spitler, et al. 2022a](https://doi.org/10.22488/okstate.22.000016)) for\n  automatically placing and sizing boreholes in any land area with complex geometry,\n- is highly automated. It can select library configurations or custom configurations and determine the final number and\n  depth requirement of boreholes,\n- can make automated conversion of hourly loads to an improved hybrid time step\n  representation ([Cullin and Spitler 2011](https://doi.org/10.1016/j.geothermics.2011.01.001)), and\n- is under continuing development at Oklahoma State University (OSU), Oak Ridge National Laboratory (ORNL), and the\n  National Laboratory of the Rockies (NLR). (GLHEPRO remains under development at OSU.)\n\n## Background\n\nGHEDesigner was originally funded through US Department of Energy contract DE-AC05-00OR22725 via a subcontract from Oak\nRidge National Laboratory. The project led by Dr. Xiaobing Liu developed an\nonline [screening tool](https://gshp.ornl.gov/login) ([Liu, et al. 2022](http://dx.doi.org/10.22488/okstate.22.000042))\nfor techno-economic analysis and design of ground-source heat pump systems. The Oklahoma State University team led by\nProf. Jeffrey D. Spitler was contracted to investigate fast methods for computing g-functions. An outgrowth of this\nresearch was a tool for automatically selecting and sizing borehole configurations. This tool, originally called GHEDT,\nis described in an MS thesis ([Cook 2021](https://hdl.handle.net/11244/335489)). Since that time, the tool has been\nrenamed GHEDesigner, and work has continued at Oklahoma State University, Oak Ridge National Laboratory, and the\nNational Laboratory of the Rockies.\n\nUpdates since [Cook (2021)](https://hdl.handle.net/11244/335489) include:\n\n- Development and addition of RowWise algorithm to efficiently place boreholes in the available land area.\n- Extensive refactoring for creating a user-focused, stable API.\n- Simplification of library dependencies.\n- Development of automated testing and deployment procedures.\n\n## Borehole Field Design Algorithms\n\n- Long time-step g-functions are calculated using pygfunction (Cimmino 2018) using the equivalent borehole\n  method ([Prieto and Cimmino 2021](https://doi.org/10.1080/19401493.2021.1968953)). It's also possible to read\n  g-functions from a library ([Spitler, et al. 2021](https://doi.org/10.15121/1811518)).\n- Borehole thermal resistance is computed for single and double U-tube configurations via the multipole\n  method ([Claesson and Hellström 2011](https://doi.org/10.1080/10789669.2011.609927)). For coaxial ground heat\n  exchangers, it is computed from fundamental heat transfer relationships.\n- Short time-step g-functions are computed using the\n  [Xu and Spitler (2006)](https://hvac.okstate.edu/sites/default/files/pubs/papers/2006/07-Xu_Spitler_06.pdf) method.\n- GHEDesigner contains a novel design methodology for automated selection of borehole fields. The advanced methodology\n  performs optimization based on a target drilling depth. An integer bisection routine is utilized to quickly search\n  over a uni-modal domain of boreholes. GHEDesigner can consider the available land area for drilling and no-drilling\n  zones defined as polygons.\n- GHEDesigner can synthesize a range of regularly shaped borehole configurations, including previously available\n  shapes (rectangles, open rectangles, L-shape, U-shape, line) and shapes not previously available (C-shapes and zoned\n  rectangles). More information about these shapes can be found in the documentation for a publicly available g-function\n  library. ([Spitler, et al. 2021](https://doi.org/10.15121/1811518), [2022b](https://doi.org/10.22488/okstate.22.000040))\n- GHEDesigner can synthesize on the fly irregularly shaped borehole configurations using the RowWise\n  algorithm ([Spitler, et al. 2022a](https://doi.org/10.22488/okstate.22.000016)) or the bi-uniform polygonal constrained\n  rectangular search (BUPCRS) ([Cook 2021](https://hdl.handle.net/11244/335489)). Both configurations are adapted to the\n  user-specified property boundaries and no-drill zones, if any. [Spitler, et al. 2022a](https://doi.org/10.22488/okstate.22.000016)\n  gives an example where the RowWise algorithm saves 12-18% compared to the BUPCRS algorithm. The RowWise algorithm takes\n  longer to run, though.\n- A set of search routines can be used to size different types of configurations:\n  - The unconstrained square/near-square search will search a domain of square (_n_ x _n_) and near-square\n    (_n-1_ x _n_) boreholes fields, with uniform spacing between the boreholes.\n  - Uniform and bi-uniform constrained rectangular searches will search domains of rectangular configurations that\n    have either uniform spacing or \"bi-uniform\" spacing – that is, uniform in the x direction and uniform in the y\n    direction, but the two spacings may be different.\n  - The bi-uniform constrained zoned rectangular search allows for rectangular configurations with different interior\n    and perimeter spacings.\n  - The bi-uniform polygonal constrained rectangular search (BUPCRS) can search configurations with an outer perimeter\n    and no-go zones described as irregular polygons. This is still referred to as a rectangular search because it is\n    still based on a rectangular grid, from which boreholes that are outside the perimeter or inside a no-go zone are\n    removed.\n  - The RowWise method generates and searches custom borehole fields that make full use of the available property. The\n    RowWise algorithms are described by [Spitler et al. (2022a)](https://shareok.org/handle/11244/336846).\n\n## Limitations\n\nGHEDesigner does not have every feature that is found in a tool like GLHEPRO. Features that are currently missing\ninclude:\n\n- Heat pumps are not modeled. Users input heat rejection/extraction rates.\n- An hourly simulation is available, but it doesn't make use of load aggregation, so is very slow.\n- GHEDesigner only covers vertical borehole ground heat exchangers. Horizontal ground heat exchangers are not treated.\n- GHEDesigner does not calculate the head loss in the ground heat exchanger or warn the user that head loss may be\n  excessive.\n- GHEDesigner does not have a graphical user interface.\n- GHEDesigner is a Python package and requires some Python knowledge to use.\n\n## Requirements\n\nGHEDesigner is supported for Python versions \u003e= 3.10 and is tested with Python 3.10–3.14. GHEDesigner is dependent on\nthe following packages:\n\n- [bhresist][bhresist]\n- [click][click]\n- [jsonschema][jsonschema]\n- [numpy][numpy]\n- [pygfunction][pygfunction]\n- [scipy][scipy]\n- [secondarycoolantprops][secondarycoolantprops]\n\n## Quick Start\n\n**Users** - Install `GHEDesigner` via the package installer for Python ([pip][pip]):\n\n```bash\npip install ghedesigner\n```\n\nRun a demo file using GHEDesigner:\n\n```bash\nghedesigner demos/find_design_rectangle_single_u_tube.json ./tmp\n```\n\n**Developers** - Clone the repository via git:\n\n```\ngit clone git@github.com:BETSRG/GHEDesigner.git\n```\n\n- [uv](https://docs.astral.sh/uv/) is used to manage the project \u0026 dependencies. After cloning, run\n  `uv sync`.\n- Developers can then call `pytest` (which may take 10-30 minutes to run the full test suite) to confirm all dev\n  dependencies have been installed and everything is working as expected.\n- Activate [pre-commit](https://pre-commit.com/) (only required once, after cloning the repo) with:\n  `pre-commit install`. On your first commit it will install the pre-commit environments, then run pre-commit hooks at\n  every commit.\n- Before pushing to GitHub, run pre-commit on all files with `pre-commit run -a` to highlight any linting/formatting\n  errors that will cause CI to fail.\n- PyCharm users may need to add Ruff as a [3rd-party plugin][ruff-plugin] or install it as an\n  [external tool][ruff-editors] to their IDE to ensure linting \u0026 formatting is consistent.\n\n### Updating documentation\n\nDuring development, we can [serve docs locally](https://squidfunk.github.io/mkdocs-material/creating-your-site/#previewing-as-you-write) and view updates with every save.\n\n1. Start a documentation update branch: `git checkout -b \u003cbranch_name\u003e`\n2. Ensure that the environment variable `LANGUAGE` is set to `en_US` before running `mkdocs serve` to avoid babel errors\n3. `uv run mkdocs serve`\n4. Point browser to [http://localhost:8000/](http://localhost:8000/)\n\n## Questions\n\nIf there are any questions, comments or concerns please [create][create] an issue, comment on an [open][issue] issue,\ncomment on a [closed][closed] issue.\n\n## Acknowledgements\n\nThe initial release of this work was financially supported by the U.S. Department of Energy through research\nsubcontracts from Oak Ridge National Laboratory and the National Laboratory of the Rockies, and by OSU through the\nCenter for Integrated Building Systems, the OG\u0026E Energy Technology Chair, and Oklahoma State University via return of\nindirect costs to Dr. Jeffrey D. Spitler.\n\n## References\n\n- Cimmino, M. 2018. pygfunction: an open-source toolbox for the evaluation of thermal. eSim 2018, Montreál, IBPSA Canada.\n  492-501. http://www.ibpsa.org/proceedings/eSimPapers/2018/2-3-A-4.pdf\n\n- Claesson, J. and G. Hellström. 2011. Multipole method to calculate borehole thermal resistances in a borehole heat\n  exchanger. HVAC\u0026R Research 17(6): 895-911. https://doi.org/10.1080/10789669.2011.609927\n\n- Cook, J.C. (2021). Development of Computer Programs for Fast Computation of g-Functions and Automated Ground Heat\n  Exchanger Design. Master's Thesis, Oklahoma State University, Stillwater, OK. https://hdl.handle.net/11244/335489\n\n- Cullin, J.R. and J.D. Spitler. 2011. A Computationally Efficient Hybrid Time Step Methodology for Simulation of Ground\n  Heat Exchangers. Geothermics. 40(2): 144-156. https://doi.org/10.1016/j.geothermics.2011.01.001\n\n- Liu X., J. Degraw, M. Malhotra, W. Forman, M. Adams, G. Accawi, B. Brass, N. Kunwar, J. New, J. Guo. 2022. Development\n  of a Web-based Screening Tool for Ground Source Heat Pump Applications. 2022. IGSHPA Research Conference Proceedings.\n  Pp. 280-290. December 6-8. Las Vegas. http://dx.doi.org/10.22488/okstate.22.000042\n\n- Prieto, C. and M. Cimmino. 2021. Thermal interactions in large irregular fields of geothermal boreholes: the method of\n  equivalent boreholes. Journal of Building Performance Simulation 14(4):\n  446-460. https://doi.org/10.1080/19401493.2021.1968953\n\n- Spitler, J. D., J. Cook, T. West and X. Liu 2021. G-Function Library for Modeling Vertical Bore Ground Heat Exchanger,\n  Oak Ridge National Laboratory. https://doi.org/10.15121/1811518\n\n- Spitler, J.D., T.N. West and X. Liu. 2022a. Ground Heat Exchanger Design Tool with RowWise Placement of Boreholes.\n  IGSHPA Research Conference Proceedings. Pp. 53-60. Las Vegas. Dec. 6-8. https://doi.org/10.22488/okstate.22.000016\n\n- Spitler, J.D., T.N. West, X. Liu and I. Borshon. 2022b. An open library of g-functions for 34,321 configurations. IGSHPA\n  Research Conference Proceedings. Pp. 264-271. Las Vegas. Dec. 6-8 https://doi.org/10.22488/okstate.22.000040\n\n- Xu, X. and J. D. Spitler. 2006. Modelling of Vertical Ground Loop Heat Exchangers with Variable Convective Resistance\n  and Thermal Mass of the Fluid. 10th International Conference on Thermal Energy Storage - Ecostock 2006, Pomona,\n  NJ. https://hvac.okstate.edu/sites/default/files/pubs/papers/2006/07-Xu_Spitler_06.pdf\n\n[bhresist]: https://github.com/NatLabRockies/BHResist\n[click]: https://click.palletsprojects.com/en/8.1.x/\n[closed]: https://github.com/BETSRG/GHEDesigner/issues?q=is%3Aissue+is%3Aclosed\n[create]: https://github.com/BETSRG/GHEDesigner/issues/new\n[issue]: https://github.com/BETSRG/GHEDesigner/issues\n[jsonschema]: https://pypi.org/project/jsonschema/\n[numpy]: https://numpy.org/doc/stable/\n[pip]: https://pip.pypa.io/en/latest/\n[pygfunction]: https://github.com/MassimoCimmino/pygfunction\n[ruff-editors]: https://docs.astral.sh/ruff/editors/setup/#pycharm\n[ruff-plugin]: https://docs.astral.sh/ruff/editors/setup/#via-third-party-plugin\n[scipy]: https://docs.scipy.org/doc/scipy/\n[secondarycoolantprops]: https://github.com/NatLabRockies/SecondaryCoolantProps\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.22488/okstate.22.000016","https://doi.org/10.1016/j.geothermics.2011.01.001","http://dx.doi.org/10.22488/okstate.22.000042","https://doi.org/10.1080/19401493.2021.1968953","https://doi.org/10.15121/1811518","https://doi.org/10.1080/10789669.2011.609927","https://doi.org/10.22488/okstate.22.000040"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["buildings","energyplus"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/348939","html_url":"https://ost.ecosyste.ms/projects/348939"}