{"id":314830,"name":"GermanRenewableEnergy","description":"Calculates renewable energy power for all German solar panels and wind turbines.","url":"https://github.com/openkfw/germanrenewableenergy","last_synced_at":"2026-04-09T04:01:42.787Z","repository":{"id":266811944,"uuid":"847714909","full_name":"openkfw/GermanRenewableEnergy","owner":"openkfw","description":"Calculates renewable energy power for all German solar panels and wind turbines.","archived":true,"fork":false,"pushed_at":"2025-03-07T07:08:31.000Z","size":26743,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-28T02:48:58.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openkfw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-26T12:07:41.000Z","updated_at":"2025-12-16T08:29:55.000Z","dependencies_parsed_at":"2025-04-29T03:39:28.191Z","dependency_job_id":"f45b5432-f73b-4763-a3f9-834b0da48009","html_url":"https://github.com/openkfw/GermanRenewableEnergy","commit_stats":null,"previous_names":["openkfw/germanrenewableenergy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/openkfw/GermanRenewableEnergy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2FGermanRenewableEnergy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2FGermanRenewableEnergy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2FGermanRenewableEnergy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2FGermanRenewableEnergy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openkfw","download_url":"https://codeload.github.com/openkfw/GermanRenewableEnergy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2FGermanRenewableEnergy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31323555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T00:28:04.943Z","status":"ssl_error","status_checked_at":"2026-04-03T00:27:17.904Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":"openkfw","name":"KfW Bankengruppe","uuid":"45228888","kind":"organization","description":"This is the repository for KfW open source projects","email":null,"website":"https://www.kfw.de/kfw.de.html","location":"Frankfurt","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/45228888?v=4","repositories_count":9,"last_synced_at":"2023-03-05T04:44:11.531Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/openkfw","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-15T06:08:42.080Z","updated_at":"2023-03-05T04:44:11.598Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openkfw","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openkfw/repositories"},"packages":[],"commits":{"id":9752339,"full_name":"openkfw/germanrenewableenergy","default_branch":"main","total_commits":23,"total_committers":4,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":5.75,"dds":0.5652173913043479,"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-04-07T03:06:04.500Z","last_synced_commit":"d689b3ea33abc633d5e042ebaa65150df0052276","created_at":"2025-04-22T00:04:29.894Z","updated_at":"2026-04-07T03:05:06.193Z","committers":[{"name":"DanielMuellerKfW","email":"172247461+DanielMuellerKfW","login":"DanielMuellerKfW","count":10},{"name":"FabianC-BPt","email":"147167822+FabianC-BPt","login":"FabianC-BPt","count":9},{"name":"Sven","email":"86719356+svenb78","login":"svenb78","count":3},{"name":"IngmarM","email":"554423+IngmarM","login":"IngmarM","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2Fgermanrenewableenergy/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:23.197Z","repositories_count":6212614,"commits_count":914507440,"contributors_count":35327904,"owners_count":1143345,"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":"openkfw/germanrenewableenergy","html_url":"https://github.com/openkfw/germanrenewableenergy","last_synced_at":"2026-03-23T20:00:35.849Z","status":"error","issues_count":0,"pull_requests_count":3,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":3976.6666666666665,"issues_closed_count":0,"pull_requests_closed_count":3,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":3,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":3,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":3976.6666666666665,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":3,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"created_at":"2025-04-22T00:04:30.281Z","updated_at":"2026-03-23T20:00:35.849Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2Fgermanrenewableenergy","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/openkfw%2Fgermanrenewableenergy/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{},"pull_request_author_associations_count":{"COLLABORATOR":3},"issue_authors":{},"pull_request_authors":{"FabianC-BPt":2,"DanielMuellerKfW":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-07T00:00:09.463Z","repositories_count":14118440,"issues_count":34499516,"pull_requests_count":112639646,"authors_count":11228092,"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":[{"login":"FabianC-BPt","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/FabianC-BPt"},{"login":"DanielMuellerKfW","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DanielMuellerKfW"}],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":2,"WatchEvent":4,"PushEvent":3,"CreateEvent":1},"last_year":{"WatchEvent":3}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2024-12-06T09:42:49.519Z","updated_at":"2024-12-06T09:42:49.519Z","repository_link":"https://github.com/openkfw/GermanRenewableEnergy/blob/main/requirements.txt","dependencies":[]},{"ecosystem":"conda","filepath":"environment.yaml","sha":null,"kind":"manifest","created_at":"2025-04-29T03:39:27.107Z","updated_at":"2025-04-29T03:39:27.107Z","repository_link":"https://github.com/openkfw/GermanRenewableEnergy/blob/main/environment.yaml","dependencies":[{"id":22903554107,"package_name":"pip","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":22903554108,"package_name":"python","ecosystem":"conda","requirements":"3.11.*","direct":true,"kind":"runtime","optional":false}]}],"score":3.465735902799726,"created_at":"2025-04-22T00:04:28.782Z","updated_at":"2026-04-09T04:01:42.788Z","avatar_url":"https://github.com/openkfw.png","language":"Python","category":"Energy Systems","sub_category":"Renewable Energy Integration","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# GermanRenewableEnergy\nModel renewable energy power for all german solar panels and wind turbines.\n\nThe capacity factor is calcuted for all german solar panels and wind wind turbines for each hour in all set years (2000-2023).\nThe calculation is described in chapter [Wind.py](#Wind.py) and [Solar.py](#Solar.py).\n\nThe Solar panels and wind wind turbines data is downloaded once from [MaStr](https://www.marktstammdatenregister.de/MaStR) using OpenMaStr.\nand ERA5-Wheater downloaded once during installation.\n\n\n## :wrench: Installation and setup environment\n\nFollow the steps [here](/docs/setup_and_install.md) to setup the project.\n\n## :running: Run the programm\n\nSee [here](/docs/run.md) how to execute the software with the correct parameters.\n\n## Project structure\n\n### General structure\n\nKey\n```\n| link | meaning          |\n|------|------------------|\n| ...\u003e | information flow |  \n| ---\u003e | data flow        |  \n| ---  | connected with   | \n```\n\n\n```mermaid\nflowchart LR\n    subgraph postgresql-db\n    db[(kfw-mastr)]\n    db --- Calculation_solar\n    db --- Calculation_wind\n    db --- municipalities_geoboundaries\n    db --- results_wind_hourly\n    db --- results_solar_hourly\n    db --- results_wind_monthly\n    db --- results_solar_monthly\n    db --- results_wind_yearly\n    db --- results_solar_yearly\n    \n    end\n    \n    \n    subgraph config[configyaml]\n    conf_line[\"CALC_SOLAR\n    SPECIFIC_SOLAR_UNITS\n    CURTAILMENT_SOLAR\n\n    CALC_WIND\n    SPECIFIC_WIND_UNITS\n    CURTAILMENT_WIND\n    \n    ...\n    \"]\n    end\n\n\n    subgraph extweatherdata[Weather data]\n    ERA5db[(ERA5)]\n    end\n\n    subgraph extdata[External data]\n    Markstammdatenregister[(Markstammdatenregister)]\n    muncipalities[(Gemeinde Geodaten)]\n    end\n\n\n   \n\n    results ==\u003e  results_wind_hourly\n    results ==\u003e  results_solar_hourly\n    results ==\u003e  results_wind_monthly ==\u003e  |\"export_and_copy_files()\"| output\n    results ==\u003e  results_solar_monthly ==\u003e  |\"export_and_copy_files()\"| output\n    results ==\u003e  results_wind_yearly ==\u003e  |\"export_and_copy_files()\"| output\n    results ==\u003e  results_solar_yearly ==\u003e  |\"export_and_copy_files()\"|output\n\n\n    config -.-\u003e main(((main.py)))\n    era5py(((era5.py))) -.-\u003e |\"download_era5_data()\"| extweatherdata ===\u003e hourly\n    setupdb(((setup_database.py)))-.-\u003e |\"main()\"|extdata ===\u003e postgresql-db\n    main -.-\u003e |\"calculate_cf_wind()\"| calc_wind(((calculate_cf_wind.py))) -.-\u003e |\"load_era5_weather_wind()\"|wind_w ==\u003e wind_calculations{\" \"} ==\u003e |\"wind.calculate_power()\"| results{\"results\"}\n    main -.-\u003e |\"calculate_cf_solar()\"| calc_solar(((calculate_cf_solar.py))) -.-\u003e |\"load_era5_weather_solar()\"|solar_w ==\u003e solar_calculations{\" \"}  ==\u003e |\"solar_calculations()\"| results{\"results\"}\n    calc_solar(((calculate_cf_solar.py))) -.-\u003e |\"load_calculation_solar_data()\"| Calculation_solar ==\u003e solar_calculations\n    calc_wind(((calculate_cf_wind.py))) -.-\u003e |\"load_calculation_wind_data()\"| Calculation_wind ==\u003e wind_calculations \n\n\n    subgraph output\n        csv[/CSVs\\]\n        config_out[/config_SOFTWARE_VERSION_OUTFILE_POSTFIX.yaml\\]\n        log[/kfw-mastr_SOFTWARE_VERSION_OUTFILE_POSTFIX.log\\]\n        \n    end\n\n    subgraph input\n        subgraph era5\n            subgraph hourly\n            \n            solar_w[\"10m_u_component_of_wind.nc\n            10m_v_component_of_wind.nc\n            surface_solar_radiation_downwards.nc\n            total_sky_direct_solar_radiation_at_surface.nc\n            surface_pressure.nc\n            2m_temperature.nc\n            near_ir_albedo_for_diffuse_radiation.nc\"]\n\n\n            wind_w[\"100m_u_component_of_wind.nc\n            100m_v_component_of_wind.nc\n            forecast_surface_roughness.nc\n            surface_pressure.nc\n            2m_temperature.nc\"]\n\n            end\n        end\n\n    end\n\n    click main \"https://github.com/chrwm/kfw-mastr/blob/main/main.py\" _blank\n    click conf_line \"https://github.com/chrwm/kfw-mastr/blob/main/config.yaml\" _blank\n    click calc_wind \"https://github.com/chrwm/kfw-mastr/blob/main/kfw_mastr/calculate_cf_wind.py\" _blank\n    click calc_solar \"https://github.com/chrwm/kfw-mastr/blob/main/kfw_mastr/calculate_cf_solar.py\" _blank\n    click setupdb \"https://github.com/chrwm/kfw-mastr/blob/main/kfw_mastr/setup_database.py#L867-L931\" _blank\n    click Markstammdatenregister \"https://www.marktstammdatenregister.de/MaStR\" _blank\n    click muncipalities \"https://daten.gdz.bkg.bund.de/produkte/vg/vg5000_1231/aktuell/\" _blank\n    click era5py \"https://github.com/chrwm/kfw-mastr/blob/main/kfw_mastr/utils/era5.py\" _blank\n    click ERA5db \"https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels\" _blank\n    click solar_calculations \"https://github.com/chrwm/kfw-mastr/blob/259e1606cd9ea5b6e278f61ed3bb3414f6ecc74a/kfw_mastr/solar.py#L58-L108\" _blank\n    click wind_calculations \"https://github.com/chrwm/kfw-mastr/blob/259e1606cd9ea5b6e278f61ed3bb3414f6ecc74a/kfw_mastr/wind.py#L141-L185\" _blank\n```\n\n# Methodological background\n\n## ERA5 weather data\n\nFind information about weather parameters in [ERA5 data documentation](https://confluence.ecmwf.int/display/CKB/ERA5%3A+data+documentation) and information about the grid in [ERA5 grid documentation](https://confluence.ecmwf.int/display/CKB/ERA5%3A+What+is+the+spatial+reference).\n\n```\n| calcType | count | name                                        | units   | variable name in CDS                        | shortName | paramID |\n|----------|-------|---------------------------------------------|---------|---------------------------------------------|-----------|---------|\n| wind     | 71    | 100 metre U wind component                  | m s**-1 | 100m_u-component_of_wind                    | 100u      | 228246  |\n| wind     | 72    | 100 metre V wind component                  | m s**-1 | 100m_v-component_of_wind                    | 100v      | 228247  |\n| wind     | 69    | Forecast surface roughness                  | m       | forecast_surface_roughness                  | fsr       | 244     |\n| wind     | 39    | Surface pressure                            | Pa      | surface_pressure                            | sp        | 134     |\n| wind     | 48    | 2 metre temperature                         | K       | 2m_temperature                              | 2t        | 167     |\n| solar    | 46    | 10 metre U wind component                   | m s**-1 | 10m_u_component_of_wind                     | 10u       | 165     |\n| solar    | 47    | 10 metre V wind component                   | m s**-1 | 10m_v_component_of_wind                     | 10v       | 166     |\n| solar    | 6     | Surface solar radiation downwards           | J m**-2 | surface_solar_radiation_downwards           | ssrd      | 169     |\n| solar    | 23    | Total sky direct solar radiation at surface | J m**-2 | total_sky_direct_solar_radiation_at_surface | fdir      | 228021  |\n| solar    | 39    | Surface pressure                            | Pa      | surface_pressure                            | sp        | 134     |\n| solar    | 48    | 2 metre temperature                         | K       | 2m_temperature                              | 2t        | 167     |\n| solar    | 4     | Near IR albedo for diffuse radiation        | (0 - 1) | near_ir_albedo_for_diffuse_radiation        | alnid     | 18      |\n```\n\n## Download ERA5 weather data via API\n\nFollow this [manual](/docs/download_era5.md) to download new weather data.\n\n## Wind.py\n\nFormulas implemented in wind.py\n\n![wind_method.png](docs/wind_method.png)\n\n## Solar.py\n\nFormulas implemented in solar.py\n\n![solar_method.png](docs/solar_method.png)\n\n# License (Code)\n\nThis repository is licensed under the **GNU Affero General Public License v3.0 or later** ([AGPL-3.0-or-later](https://www.gnu.org/licenses/agpl-3.0.txt)).\nSee [LICENSE](LICENSE) for rights and obligations.\nCopyright: © [Reiner Lemoine Institut](https://reiner-lemoine-institut.de) © KfW\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/314830","html_url":"https://ost.ecosyste.ms/projects/314830"}