{"id":20083,"name":"Multiscale Solar Water Heating","description":"Solar water heating system modeling and simulation for individual and community scale projects.","url":"https://github.com/LBNL-ETA/MSWH","last_synced_at":"2026-05-13T20:05:56.497Z","repository":{"id":55411705,"uuid":"188114606","full_name":"LBNL-ETA/MSWH","owner":"LBNL-ETA","description":"Multiscale Solar Water Heating","archived":false,"fork":false,"pushed_at":"2025-06-13T16:42:57.000Z","size":55498,"stargazers_count":10,"open_issues_count":3,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-04-11T12:02:20.734Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/LBNL-ETA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE.md","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}},"created_at":"2019-05-22T21:13:45.000Z","updated_at":"2023-07-16T21:06:01.000Z","dependencies_parsed_at":"2025-07-02T22:45:54.529Z","dependency_job_id":null,"html_url":"https://github.com/LBNL-ETA/MSWH","commit_stats":{"total_commits":240,"total_committers":7,"mean_commits":"34.285714285714285","dds":"0.14166666666666672","last_synced_commit":"5b1559be5a2fc71fbc0ce4d67ae06271306c5ab7"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/LBNL-ETA/MSWH","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LBNL-ETA","download_url":"https://codeload.github.com/LBNL-ETA/MSWH/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32012787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":"LBNL-ETA","name":"LBNL Energy Technologies Area","uuid":"14825882","kind":"organization","description":"Software produced by the Energy Technologies Area of Lawrence Berkeley National Laboratory","email":null,"website":"http://eta.lbl.gov","location":"Berkeley, CA","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/14825882?v=4","repositories_count":65,"last_synced_at":"2023-04-26T15:47:26.093Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/LBNL-ETA","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-04T23:03:48.563Z","updated_at":"2023-04-26T15:47:26.543Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LBNL-ETA","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LBNL-ETA/repositories"},"packages":[{"id":4132323,"name":"github.com/lbnl-eta/mswh","ecosystem":"go","description":"","homepage":null,"licenses":"other","normalized_licenses":["Other"],"repository_url":"https://github.com/lbnl-eta/mswh","keywords_array":[],"namespace":"github.com/lbnl-eta","versions_count":1,"first_release_published_at":"2020-12-03T20:19:16.000Z","latest_release_published_at":"2020-12-03T20:19:16.000Z","latest_release_number":"v2.0.0+incompatible","last_synced_at":"2026-03-28T05:00:39.150Z","created_at":"2022-04-12T15:50:09.397Z","updated_at":"2026-03-28T05:00:39.150Z","registry_url":"https://pkg.go.dev/github.com/lbnl-eta/mswh","install_command":"go get github.com/lbnl-eta/mswh","documentation_url":"https://pkg.go.dev/github.com/lbnl-eta/mswh#section-documentation","metadata":{},"repo_metadata":{"uuid":"188114606","full_name":"LBNL-ETA/MSWH","owner":"LBNL-ETA","description":"Multiscale Solar Water Heating","archived":false,"fork":false,"pushed_at":"2022-05-12T15:59:57.000Z","size":28734,"stargazers_count":9,"open_issues_count":2,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2023-03-14T14:50:21.376Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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,"logo_url":null,"metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-22T21:13:45.000Z","updated_at":"2022-11-25T13:34:08.000Z","dependencies_parsed_at":"2022-08-14T23:50:15.680Z","dependency_job_id":null,"html_url":"https://github.com/LBNL-ETA/MSWH","commit_stats":null,"repository_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH","tags_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/tags","manifests_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/manifests","owner_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LBNL-ETA","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":108921946,"host_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"http://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names"}},"repo_metadata_updated_at":"2023-03-21T19:38:27.670Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":9.345852080216646,"dependent_packages_count":6.999148183520997,"stargazers_count":null,"forks_count":null,"average":8.172500131868823},"purl":"pkg:golang/github.com/lbnl-eta/mswh","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/lbnl-eta/mswh","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/lbnl-eta/mswh","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/lbnl-eta/mswh/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2023-08-17T10:06:41.090Z","issues_count":30,"pull_requests_count":16,"avg_time_to_close_issue":806153.4285714285,"avg_time_to_close_pull_request":219281.875,"issues_closed_count":28,"pull_requests_closed_count":16,"pull_request_authors_count":3,"issue_authors_count":4,"avg_comments_per_issue":3.3,"avg_comments_per_pull_request":1.9375,"merged_pull_requests_count":16,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flbnl-eta%2Fmswh/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flbnl-eta%2Fmswh/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flbnl-eta%2Fmswh/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flbnl-eta%2Fmswh/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flbnl-eta%2Fmswh/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2081643,"maintainers_count":0,"namespaces_count":777389,"keywords_count":0,"github":"golang","metadata":{"funded_packages_count":53358},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-03-27T08:13:51.512Z","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"}},{"id":4128088,"name":"github.com/LBNL-ETA/MSWH","ecosystem":"go","description":"","homepage":null,"licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/LBNL-ETA/MSWH","keywords_array":[],"namespace":"github.com/LBNL-ETA","versions_count":1,"first_release_published_at":"2020-12-03T20:19:16.000Z","latest_release_published_at":"2020-12-03T20:19:16.000Z","latest_release_number":"v2.0.0+incompatible","last_synced_at":"2026-03-28T05:00:39.365Z","created_at":"2022-04-12T15:29:02.425Z","updated_at":"2026-03-28T05:00:39.365Z","registry_url":"https://pkg.go.dev/github.com/LBNL-ETA/MSWH","install_command":"go get github.com/LBNL-ETA/MSWH","documentation_url":"https://pkg.go.dev/github.com/LBNL-ETA/MSWH#section-documentation","metadata":{},"repo_metadata":{},"repo_metadata_updated_at":"2023-03-21T19:37:37.537Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":9.345852080216646,"dependent_packages_count":6.999148183520997,"stargazers_count":null,"forks_count":null,"average":8.172500131868823},"purl":"pkg:golang/github.com/%21l%21b%21n%21l-%21e%21t%21a/%21m%21s%21w%21h","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/LBNL-ETA/MSWH","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/LBNL-ETA/MSWH","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/LBNL-ETA/MSWH/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FLBNL-ETA%2FMSWH/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FLBNL-ETA%2FMSWH/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FLBNL-ETA%2FMSWH/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FLBNL-ETA%2FMSWH/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FLBNL-ETA%2FMSWH/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2081643,"maintainers_count":0,"namespaces_count":777389,"keywords_count":0,"github":"golang","metadata":{"funded_packages_count":53358},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-03-27T08:13:51.512Z","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":1254100,"full_name":"LBNL-ETA/MSWH","default_branch":"master","total_commits":240,"total_committers":7,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":34.285714285714285,"dds":0.14166666666666672,"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-27T16:20:07.966Z","last_synced_commit":"5b1559be5a2fc71fbc0ce4d67ae06271306c5ab7","created_at":"2023-03-27T10:58:20.851Z","updated_at":"2026-03-27T16:19:48.616Z","committers":[{"name":"Milica Grahovac","email":"mgrahovac@lbl.gov","login":"milicag","count":206},{"name":"Hannes","email":"hannesg256@gmail.com","login":"hannesb0","count":23},{"name":"Milica Grahovac","email":"mgrahovac@milicag.local.dhcp.lbl.gov","login":null,"count":7},{"name":"Stefan Pfenninger","email":"stefan@pfenninger.org","login":"sjpfenninger","count":1},{"name":"CJKohler","email":"cjkohler@lbl.gov","login":"CJKohler","count":1},{"name":"unknown","email":"Milica Grahovac","login":null,"count":1},{"name":"Milica Grahovac","email":"mgrahovac@milicag.local","login":null,"count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-27T00:00:09.539Z","repositories_count":6204224,"commits_count":927067008,"contributors_count":35824977,"owners_count":1144654,"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":"LBNL-ETA/MSWH","html_url":"https://github.com/LBNL-ETA/MSWH","last_synced_at":"2025-08-31T19:38:46.119Z","status":"error","issues_count":31,"pull_requests_count":16,"avg_time_to_close_issue":806153.4285714285,"avg_time_to_close_pull_request":219281.875,"issues_closed_count":28,"pull_requests_closed_count":16,"pull_request_authors_count":3,"issue_authors_count":4,"avg_comments_per_issue":3.193548387096774,"avg_comments_per_pull_request":1.9375,"merged_pull_requests_count":16,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:35:30.657Z","updated_at":"2025-09-02T10:19:25.147Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/LBNL-ETA%2FMSWH/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"CONTRIBUTOR":17,"NONE":14},"pull_request_author_associations_count":{"CONTRIBUTOR":16},"issue_authors":{"milicag":14,"brynpickering":10,"nmstreethran":4,"hannesb0":3},"pull_request_authors":{"milicag":10,"hannesb0":5,"sjpfenninger":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-26T00:00:54.173Z","repositories_count":13926275,"issues_count":34713660,"pull_requests_count":113445287,"authors_count":11209732,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"PushEvent":16},"last_year":{}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2022-08-14T23:50:15.239Z","updated_at":"2022-08-14T23:50:15.239Z","repository_link":"https://github.com/LBNL-ETA/MSWH/blob/master/setup.py","dependencies":[{"id":1717684763,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=0.24.1","direct":true,"kind":"runtime","optional":false},{"id":1717684764,"package_name":"numpy","ecosystem":"pypi","requirements":"\u003e=1.16.1","direct":true,"kind":"runtime","optional":false},{"id":1717684765,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":1717684766,"package_name":"plotly","ecosystem":"pypi","requirements":"\u003e=3.2.0","direct":true,"kind":"runtime","optional":false},{"id":1717684767,"package_name":"nbformat","ecosystem":"pypi","requirements":"\u003e=5.0.4","direct":true,"kind":"runtime","optional":false},{"id":1717684768,"package_name":"psutil","ecosystem":"pypi","requirements":"\u003e=5.4.7","direct":true,"kind":"runtime","optional":false},{"id":1717684769,"package_name":"django","ecosystem":"pypi","requirements":"\u003e=2.1.7","direct":true,"kind":"runtime","optional":false},{"id":1717684770,"package_name":"sphinx_rtd_theme","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":null,"created_at":"2023-09-11T14:52:09.515Z","updated_at":"2026-05-13T20:05:56.500Z","avatar_url":"https://github.com/LBNL-ETA.png","language":"Jupyter Notebook","category":"Consumption","sub_category":"Buildings and Heating","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Multiscale Solar Water Heating\n**Solar water heating system modeling and simulation for individual and community scale projects**\n\n## Repository Content\n\nFolder | Content\n------ | ------\n[mswh](mswh) | Python module to calculate solar irradiation on a tilted surface ([mswh/system/source_and_sink.py](mswh/system/source_and_sink.py)). \u003cbr\u003e\u003cbr\u003e Python module with simplified component models ([mswh/system/components.py](mswh/system/components.py)) for Converter (solar collectors, electric resistance heater, gas burner, photovoltaic panels, heat pump), Storage (solar thermal tank, heat pump thermal tank, conventional gas tank water heater), and Distribution (distribution and solar pump, piping losses) components. \u003cbr\u003e\u003cbr\u003e Python module with preconfigured system simulation models ([mswh/system/models.py](mswh/system/models.py)) for: base case gas tank water heaters, solar thermal water heaters (solar collector feeding a storage tank, with a tankless gas water heater backup in a new installation cases and a base case gas tank water heater in a retrofit case) and solar electric water heaters (heat pump storage tank with an electric resistance backup). \u003cbr\u003e\u003cbr\u003e Database with component performance parameters, California specific weather data and domestic hot water end-use load profiles ([mswh/comm/swh_system_input.db](mswh/comm/mswh_system_input.db)). \u003cbr\u003e\u003cbr\u003e Modules to communicate with the database ([mswh/comm/sql.py](mswh/comm/sql.py)), unit conversion and plotting modules in [mswh/tools](mswh/tools).\n[scripts](scripts) | Jupyter notebooks with preconfigured models and any side analysis if applicable. Navigate to scripts in [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/LBNL-ETA/MSWH/632fd9860c66e3d5b5cafe0af61a6b42f4c6b4f7) to try them out quickly.\n[web](web) | Django web framework to configure project, parametrize components and run simulation from a web browser.\n[docs](docs) | API documentation, including a short methodology documentation can be found [here](https://lbnl-eta.github.io/MSWH/). To build HTML or LaTeX use `make html` or `make latex`. A `pdf` version of the Code Documentation can be viewed and downloaded [here](https://github.com/LBNL-ETA/MSWH/blob/v2.0.0/docs/MSWH.pdf).\n\n## Statement of Need\n\nWe envision four main groups of users for the MSWH software:\n\n* Researchers and policy developers.\n* Solar water heating planners, designers and contractors.\n* Homeowners.\n* Educators.\n\nThe policy developers and researchers could utilize the existing MSWH software by embedding it into some larger analysis framework they construct such that it provides answers to their specific research questions.\n\nThe professional planners, designers, and contractors of solar thermal water heating systems might find it useful to have access to a freely available simulation tool such as the MSWH software, that they can use to evaluate alternative system designs.\n\nHomeowners considering transitioning to a solar water heating system may be interested in doing the math before seeking further professional help, or just for their own education and curiosity about both solar water heating systems and system simulation in general.\n\nEducators may wish and find it useful to utilize the MSWH simulation tool in the classroom when teaching the basics of energy simulation.\n\n## Usage\n\nThe fastest way to explore the preset simulations is to use the [`MSWH System Tool`](scripts/MSWH\u0026#32;System\u0026#32;Tool.ipynb) notebook. In the notebook the user provides a climate zone for a project, an occupancy for each household and whether any of the occupants stay at home during the day. The notebook can then load a set of example California specific hourly domestic hot water end-use load profiles from a database, size and locate the systems. The user can now simulate the hourly system performance over a period of one representative year, visualize and explore the simulation results using time-series plots for temperature profiles, heat and power rates, or look at annual summaries. Similarly the user can model individual household solar water heating projects and base case conventional gas tank water heater systems, such that the results can be compared between the individual, community and base case systems. All simulation and sizing parameters are exposed in the notebook and the user can easily change them if needed.\n\nIf you opt to use the web framework the shortest path to explore the simulaton results after [setting up a local server](#django-web-framework-deployment) is to:\n\n* Click on `Configurations` on the landing page.\n* Click on `Simulate` for any of the example preconfigured systems (`Solar Thermal New` or `Solar Electric`). This leads the user to a visualization page with hourly timeseries results for a representative year.\n* Play with sizes and performance parameters of preconfigured components.\n\nTo configure new system types in the web framework (such as `Solar Thermal Retrofit`) one would need to map it through the backend analogously to the currently preconfigured systems.\n\nAn example demonstrating usage of the simulation models for an additional climate outside\nof California, that is Banja Luka in Bosnia \u0026 Herzegovina, is provided in [this notebook](scripts/MSWH\u0026#32;System\u0026#32;Tool\u0026#32;-\u0026#32;Additional\u0026#32;Climate.ipynb).\n\n## Setup and Installation\n\n1. Make sure that `pip` [is installed](https://pip.pypa.io/en/stable/installing/).\n\n2. Unless you already have [`conda`](https://docs.conda.io/en/latest/) installed, please install the lightweight option [`Miniconda`](https://docs.conda.io/en/latest/miniconda.html) or [`Anaconda`](https://docs.anaconda.com/anaconda/install/) software.\n\n### Simple Installation Using `Conda`\n\n1. If you are familiar with `conda` and experienced with virtual environments\n you can perform the package installation using the following set of commands:\n\n        conda create -n mswh -c conda-forge -c plotly python=3.8 pip git-lfs jupyterlab plotly-orca\n        conda activate mswh\n        git lfs install\n        git clone https://github.com/LBNL-ETA/MSWH.git\n        cd MSWH\n        pip install -e .\n\n    To ensure functionality of the example notebooks install the following:\n\n        python -m ipykernel install --user --name mswh\n        jupyter labextension install jupyterlab-plotly\n\nThe examples are best explored using `JupyterLab`. Please check out the\n[JupyterLab documentation](https://jupyterlab.readthedocs.io/en/latest/)\nfor further help as needed.\n\n### Detailed Installation Steps\n\nIf for any reason a user encounters difficulties with the simple installation\ninstructions, the user is encouraged to consult a [more detailed installation guide that is\nposted with the code documentation](https://lbnl-eta.github.io/MSWH/source/installation.html).\n\n## Django Web Framework Deployment\n\n### 1. Local\n\nIf the installation succeeded, to run the Django application navigate to the `web` folder (there should be a `manage.py` file) and start the development server on your local machine with:\n\n        python manage.py runserver\n\n   Now you can open your browser and type in `localhost:8000` (or `127.0.0.1:8000` if you are on a Windows machine) to start the web interface.\n\n   Note that to build python extensions one needs to have `python3.x-dev` installed.\n\n   Make sure that `DEBUG = True` in `settings.py`, this will ensure that the development server is able to serve local static files.\n\n### 2. Public\n\n#### Override settings locally\n\nTo deploy publicly, rename the file `local_settings_TEMPLATE.py` to `local_settings.py` and update the constants.\n\n* `SECRET_KEY = '\u003crandom_string\u003e'`\n\n  The random string should be 50 characters long and can created (on Linux) by using the following command as super user:\n\n        \u003c/dev/urandom tr -dc '1234567890!#$?*#-.,+qwertyuiopQWERTYUIOPasdfghjklASDFGHJKLzxcvbnmZXCVBNM' | head -c50; echo \"\"\n\n    An example for a good secret key is this: `SECRET_KEY = 'O\u00262aYmv%)0B5#U-'9qsLTpfItC9N*V?%3L#fOHxDO,zyUm*S,U'`\n\n* `DEBUG = False`\n\n  Keep the `Debug` constant set to `True` in `settings.py` to get more debugging info for local deployement (using the Django development server). For the public deployement, you should set it to `False` (in `local_settings.py`).\n\n#### Serving static files\n\n\u003e For detailed documentation on how to serve static files, see the official Django documentation:\n\u003e * [Managing static files](https://docs.djangoproject.com/en/3.1/howto/static-files/)\n\u003e * [Deploying static files](https://docs.djangoproject.com/en/3.1/howto/static-files/deployment/)\n\nAs the Django devlopment server is not meant for production and only serves static files if `Debug` is set to `True`, the static files used in the Django project need to be served another way.\n\nAt this point, two important aspects regarding how to deploy static files in production will be named:\n\n1. Running this command, will create a folder `static` that will contain a copy of all static files from different directories across the Django project.\n    ```\n    python manage.py collectstatic\n    ```\n    \u003e :warning: Run this command every time you update one of the static files in their respective location in the Django project folder.\n\n2. Configure `nginx` to serve static files from the generated `static` folder by adding a `location /static` block to the server block of the `nginx` config file for the domain you serve the Django app with. This is an example  `nginx` server block:\n    ```\n    server {\n      listen 80;\n      server_name \u003cdomain\u003e;\n\n      access_log  /var/log/nginx/access.log;\n      error_log  /var/log/nginx/error.log;\n\n      location / {\n        # For testing, using the django development server:\n        # proxy_pass http://127.0.0.1:8000/;\n        # For production, using gunicorn:\n        proxy_pass http://unix:/run/swhweb.sock;\n      }\n\n      # Run 'python manage.py collectstatic' command in Django root project folder, so this folder will be created\n      location /static {\n        root \u003cpath_to_repo\u003e/MSWH/web;\n        try_files $uri $uri/ =404;\n      }\n    }\n    ```\n    Replace `\u003cpath_to_repo\u003e` with the actual path to the MSWH repository and `\u003cdomain\u003e` with your domain.\n\n## Contributing\n\nAll are invited to contribute to the MSWH software through following the [Guidelines for Contributors](contributing.md).\n\n### Automated tests\n\nTo run tests, from the `MSWH` folder use the following command modified according to the test module and method you intend to run:\n\n    python -m unittest mswh.{my_module}.tests.{test_my_module}.{MyModuleTests}.{test_my_method}\n\n## Publications\n\nThe code was used for the following publications:\n* Coughlin, Katie, Milica Grahovac, Mohan Ganeshalingam, Robert Hosbach, and Vagelis Vossos. 2020. Costs and Benefits of Community versus Individual End-use Infrastructure for Solar Water Heating. California Energy Commission. CEC-XXX-2020-XXX. (in press)\n\n* Grahovac, Milica, Katie Coughlin, Mohan Ganeshalingam, Robert Hosbach and Vagelis Vossos. 2020. Costs and Benefits of Community Scale Solar Water Heating. 2020 ACEEE Study on Energy Efficiency in Buildings. Pacific Grove, California. [Link to the paper with a video presentation](https://aceee2020.conferencespot.org/event-data/pdf/catalyst_activity_10923/catalyst_activity_paper_20200812133157248_498ce455_3a9c_4278_9088_6e3fdce5745b)\n\n* Milica Grahovac, Katie Coughlin, Robert Hosbach, Hannes Gerhart, (2020). Multiscale Solar Water Heating. Journal of Open Source Software, 5(56), 2695, [![DOI](https://joss.theoj.org/papers/10.21105/joss.02695/status.svg)](https://doi.org/10.21105/joss.02695)\n\n* Gerhart, H. (2019). Implementation of a Flexible Web Framework for Simulating Python System Models (p. 82). Technical University of Munich; Technical University of Munich. Research performed at LBNL. [Download link](https://gerhart.xyz/thesis.pdf)\n\n* Web deployed version of the Django app is under construction [on this publicly available private website](https://solar.floweragenda.org/).\n\n## About\n\nThe software may be distributed under the copyright and a BSD license provided in [legal.md](legal.md).\n\nMilica Grahovac, Robert Hosbach, Katie Coughlin, Mohan Ganeshalingam and Hannes Gerhart created the contents of this repo\nin the scope of the CEC \"Costs and Benefits of Community vs. Individual End-Use Infrastructure for Solar Water Heating\" project.\n\nTo cite use format provided at the [DOE CODE](https://www.osti.gov/doecode/biblio/26000) MSWH record.\n\n## Acknowledgements\n\nThis work was supported by the California Energy Commission, Public Interest Energy Research Program, under Contract No. PIR-16-022.\n\nWe thank the reviewers and the editor of [The Journal of Open Source Software (JOSS)](https://joss.theoj.org/), [Bryn Pickering](https://github.com/brynpickering), [Nithiya Streethran](https://github.com/nmstreethran), and [Stefan Pfenninger](https://github.com/sjpfenninger) for their contributions in improving the code, the examples and the code documentation for the code release 2.0.0.\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.21105/joss.02695"],"works":{"https://doi.org/10.21105/joss.02695":{"id":"https://openalex.org/W3112019319","doi":"https://doi.org/10.21105/joss.02695","title":"Multiscale Solar Water Heating","display_name":"Multiscale Solar Water Heating","publication_year":2020,"publication_date":"2020-12-14","ids":{"openalex":"https://openalex.org/W3112019319","doi":"https://doi.org/10.21105/joss.02695","mag":"3112019319"},"language":"en","primary_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.21105/joss.02695","pdf_url":"https://joss.theoj.org/papers/10.21105/joss.02695.pdf","source":{"id":"https://openalex.org/S4210214273","display_name":"Journal of open source software","issn_l":"2475-9066","issn":["2475-9066"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310315853","host_organization_name":"Open Journals","host_organization_lineage":["https://openalex.org/P4310315853"],"host_organization_lineage_names":["Open Journals"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"type":"article","type_crossref":"journal-article","open_access":{"is_oa":true,"oa_status":"gold","oa_url":"https://joss.theoj.org/papers/10.21105/joss.02695.pdf","any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5037656985","display_name":"Milica Grahovac","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Milica Grahovac","raw_affiliation_string":"","raw_affiliation_strings":[]},{"author_position":"middle","author":{"id":"https://openalex.org/A5005150034","display_name":"Katie Coughlin","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Katie Coughlin","raw_affiliation_string":"","raw_affiliation_strings":[]},{"author_position":"middle","author":{"id":"https://openalex.org/A5088796273","display_name":"Hannes Gerhart","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Hannes Gerhart","raw_affiliation_string":"","raw_affiliation_strings":[]},{"author_position":"last","author":{"id":"https://openalex.org/A5033807794","display_name":"Robert Hosbach","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Robert Hosbach","raw_affiliation_string":"","raw_affiliation_strings":[]}],"countries_distinct_count":0,"institutions_distinct_count":0,"corresponding_author_ids":[],"corresponding_institution_ids":[],"apc_list":{"value":0,"currency":"USD","value_usd":0,"provenance":"doaj"},"apc_paid":{"value":0,"currency":"USD","value_usd":0,"provenance":"doaj"},"has_fulltext":true,"fulltext_origin":"pdf","cited_by_count":0,"cited_by_percentile_year":{"min":0,"max":68},"biblio":{"volume":"5","issue":"56","first_page":"2695","last_page":"2695"},"is_retracted":false,"is_paratext":false,"keywords":[{"keyword":"solar","score":0.4149},{"keyword":"heating","score":0.407}],"concepts":[{"id":"https://openalex.org/C2777031842","wikidata":"https://www.wikidata.org/wiki/Q1136659","display_name":"Solar water heating","level":3,"score":0.56720793},{"id":"https://openalex.org/C39432304","wikidata":"https://www.wikidata.org/wiki/Q188847","display_name":"Environmental science","level":0,"score":0.52505136},{"id":"https://openalex.org/C192562407","wikidata":"https://www.wikidata.org/wiki/Q228736","display_name":"Materials science","level":0,"score":0.40238616},{"id":"https://openalex.org/C541104983","wikidata":"https://www.wikidata.org/wiki/Q40015","display_name":"Solar energy","level":2,"score":0.34953016},{"id":"https://openalex.org/C127413603","wikidata":"https://www.wikidata.org/wiki/Q11023","display_name":"Engineering","level":0,"score":0.12638503},{"id":"https://openalex.org/C119599485","wikidata":"https://www.wikidata.org/wiki/Q43035","display_name":"Electrical engineering","level":1,"score":0.08747968}],"mesh":[],"locations_count":1,"locations":[{"is_oa":true,"landing_page_url":"https://doi.org/10.21105/joss.02695","pdf_url":"https://joss.theoj.org/papers/10.21105/joss.02695.pdf","source":{"id":"https://openalex.org/S4210214273","display_name":"Journal of open source software","issn_l":"2475-9066","issn":["2475-9066"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310315853","host_organization_name":"Open Journals","host_organization_lineage":["https://openalex.org/P4310315853"],"host_organization_lineage_names":["Open Journals"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true}],"best_oa_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.21105/joss.02695","pdf_url":"https://joss.theoj.org/papers/10.21105/joss.02695.pdf","source":{"id":"https://openalex.org/S4210214273","display_name":"Journal of open source software","issn_l":"2475-9066","issn":["2475-9066"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310315853","host_organization_name":"Open Journals","host_organization_lineage":["https://openalex.org/P4310315853"],"host_organization_lineage_names":["Open Journals"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"sustainable_development_goals":[{"id":"https://metadata.un.org/sdg/7","display_name":"Affordable and clean energy","score":0.62},{"id":"https://metadata.un.org/sdg/6","display_name":"Clean water and sanitation","score":0.14}],"grants":[],"referenced_works_count":0,"referenced_works":[],"related_works":["https://openalex.org/W2899084033","https://openalex.org/W1550830900","https://openalex.org/W79956895","https://openalex.org/W2891859018","https://openalex.org/W2587928440","https://openalex.org/W2737279355","https://openalex.org/W129750266","https://openalex.org/W2146327286","https://openalex.org/W2611049677","https://openalex.org/W1966204102"],"ngrams_url":"https://api.openalex.org/works/W3112019319/ngrams","abstract_inverted_index":null,"cited_by_api_url":"https://api.openalex.org/works?filter=cites:W3112019319","counts_by_year":[],"updated_date":"2023-12-13T17:09:08.232316","created_date":"2020-12-21"}},"citation_counts":{"https://doi.org/10.21105/joss.02695":0},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20083","html_url":"https://ost.ecosyste.ms/projects/20083"}