Commit 0a044d42 authored by Eric Duminil's avatar Eric Duminil
Browse files

Port SimStadt library code from old/ into src/simstadtpy/



Add results.py (KPI, SimStadtResults ABC + HeatDemand/PV/GreenWater subclasses),
runner.py (workflow execution), workflows.py (high-level simulation helpers),
and utils.py. Add pytest-based test suite (46 tests, all passing).

Co-Authored-By: default avatarClaude Sonnet 4.6 <noreply@anthropic.com>
parent 1bd8aad3
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="eu.simstadt.citygml.steps.ImportCityGml" id="ImportCityGml0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="ImportCityGml0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="ImportCityGml0"/>
<string>01_ShadowProcessing.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="de.hftstuttgart.simstadtworkflowsteps.shadow.ShadowProcessingStep" id="ShadowProcessingStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="ShadowProcessingStep0"/>
<string>02_WeatherProcessor.step</string>
</void>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.WeatherProcessorStep" id="WeatherProcessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="WeatherProcessorStep0"/>
<string>03_GreenWater.step</string>
</void>
</void>
<void property="inputFilename">
<string>Wuerzburg-hour.csv</string>
</void>
<void property="name">
<string>Base</string>
</void>
<void property="weatherDataSource">
<object class="java.lang.Enum" method="valueOf">
<class>de.hft.stuttgart.simstadt2.weather.WeatherDataSourceType</class>
<string>TMY3_HOURLY_FILE</string>
</object>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GreenWaterStep">
<void property="name">
<string>Base</string>
</void>
<void property="minStressFactor"><double>1.0</double></void></object>
</object>
</java>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflows.CityGmlWorkflow" id="CityGmlWorkflow0">
<void class="de.hftstuttgart.hierarchicworkflow.Workflow" method="getField">
<string>selectedStartStepPath</string>
<void method="set">
<object idref="CityGmlWorkflow0" />
<string>00_ImportCityGml.step</string>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="CityGmlWorkflow0" />
<boolean>true</boolean>
</void>
</void>
<void property="name">
<string>CGSC_GreenWater</string>
</void>
<void property="shortName">
<string>GreenWater</string>
</void>
<void property="workflowProvider">
<object class="de.hftstuttgart.simstadtworkflows.greenwater.GreenWaterWorkflowProvider" />
</void>
<void property="cityGmlFileNames"><void method="add"><string>Gromb&#252;hl_mini_with_trees.gml</string></void></void></object>
</java>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.citygml.steps.ImportCityGml" id="ImportCityGml0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="ImportCityGml0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="ImportCityGml0"/>
<string>01_Preprocessing.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GeometricPreprocessorStep" id="GeometricPreprocessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="GeometricPreprocessorStep0"/>
<boolean>true</boolean>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.Preprocessing" id="Preprocessing0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="Preprocessing0"/>
<string>02_WeatherProcessor.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_345" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.WeatherProcessorStep" id="WeatherProcessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="WeatherProcessorStep0"/>
<string>03_GreenWater.step</string>
</void>
</void>
<void property="inputFilename">
<string>Wuerzburg-hour.csv</string>
</void>
<void property="name">
<string>Base</string>
</void>
<void property="weatherDataSource">
<object class="java.lang.Enum" method="valueOf">
<class>de.hft.stuttgart.simstadt2.weather.WeatherDataSourceType</class>
<string>TMY3_HOURLY_FILE</string>
</object>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.IrradianceProcessorStep" id="IrradianceProcessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="IrradianceProcessorStep0"/>
<string>04_PhotovoltaicPotential.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
SimStadt PV potential analysis
Data source;meteonorm tmy3 file 2000-2009
Location;Wuerzburg
Latitude;49,77;°
Longitude;9,97;°
Radiation model;meteonorm_Hay
Irradiance azimuth resolution;5;°
Irradiance tilt resolution;5;°
Max tilt;100;°
Include Tilted Roofs?;true
Include Flat Roofs?;true
Include Facades?;false
Include LOD1?;false
Max flat roof elevation;10;°
Min surface area;40;m²
Min roof insolation;1100;kWh/(m²·a)
Min facade insolation;800;kWh/(m²·a)
Module area to flat roof area;30;%
Module area to tilted roof area;40;%
Module area to LOD1 roof area;15;%
Module area to facade area;5;%
Module efficiency;15;%
Performance Ratio;85;%
Module azimuth on flat roof;180;°
Module tilt on flat roof;25;°
SimStadt version;0.14.0-SNAPSHOT (develop, rev. a5cbb2b, 20250317)
Created at;2025/04/23 09:41:43
Cache version;7
Irradiance on unshadowed tilted modules on flat roof;148,6;W/m²
Calculation time ;0,14;s
Building ID;Year;Surface area to volume ratio;MeanHeight;BuildingSurface ID;BuildingSurface Hash;LOD;Usage Code;X-Coordinate;Y-Coordinate;Azimuth;Tilt;Area;Module area/Surface area;Irradiance in module plane;PV potential nominal power;PV potential yield;PV specific yield;January irradiance on roof plane;February irradiance on roof plane;March irradiance on roof plane;April irradiance on roof plane;May irradiance on roof plane;June irradiance on roof plane;July irradiance on roof plane;August irradiance on roof plane;September irradiance on roof plane;October irradiance on roof plane;November irradiance on roof plane;December irradiance on roof plane;Total investment;Maintenance costs;LCOE;Net present value;Internal rate of return;Payback period;Discounted payback period;Financial feasibility
[-];[-];[1/m];[m];[-];[-];[-];[-];[m];[m];[°];[°];[m²];[%];[W/m²];[kWp];[MWh/a];[kWh/(kWp.a)];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[W/m²];[€];[€/a];[c€/kWh];[€];[%];[a];[a];[0/1]
DEBY_LOD2_604868;1973;0,323;15,736;DEBY_LOD2_604868_372e3911-250b-486a-8208-c52f0e75ebc6;931786349;LOD_2;31001_1000;568195,6;5517202,9;180;27;78,8;40,00;148,6;4;4,43;1106;56;91;145;205;220;240;234;210;173;108;55;43;
DEBY_LOD2_604870;1960;0,346;16,685;DEBY_LOD2_604870_7fe0e415-2943-4a06-9575-e5bee32d79e5;1358898765;LOD_2;31001_1000;568165,4;5517202,1;180;41;106,9;40,00;149,9;6;6,70;1116;66;100;153;205;209;225;222;206;180;117;62;51;
DEBY_LOD2_604869;2014;0,352;16,334;DEBY_LOD2_604869_dc5d277a-3ee5-4a5c-abfc-995899320a81;1997785852;LOD_2;31001_1000;568127,2;5517202,2;180;37;91,7;40,00;150,3;5;5,60;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604871;1978;0,354;15,574;DEBY_LOD2_604871_c444ac47-0b66-4f66-93a2-b26da96876de;1836048466;LOD_2;31001_1000;568142,7;5517202,2;180;36;94,0;40,00;150,3;5;5,60;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604872;1974;0,362;14,880;DEBY_LOD2_604872_407953a6-067c-4bba-9574-8841735485aa;9446727;LOD_2;31001_1000;568127,2;5517178,8;180;35;89,3;40,00;150,3;5;5,60;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604874;1990;0,340;14,686;DEBY_LOD2_604874_b593d17f-c052-4d46-96ff-5a176a3fa26d;2049074537;LOD_2;31001_1000;568180,5;5517178,2;180;36;102,5;40,00;150,3;6;6,72;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604873;1960;0,363;14,583;DEBY_LOD2_604873_e75f1fdf-e59e-48b9-a342-3a9b7d357514;1445213959;LOD_2;31001_1000;568142,7;5517178,7;180;34;92,1;40,00;150,3;5;5,60;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604876;1922;0,371;14,604;DEBY_LOD2_604876_23aaf533-2e75-4c08-83ce-8abc0b887d97;1466355128;LOD_2;31001_1000;568165,3;5517178,3;180;36;90,7;40,00;150,3;5;5,60;1119;63;97;152;206;213;231;227;209;179;115;60;49;
DEBY_LOD2_604875;1916;0,294;17,207;DEBY_LOD2_604875_9f0770bb-a03e-475c-a22e-84575e17dc14;194378008;LOD_2;31001_1000;568181,0;5517202,1;179;40;112,4;40,00;149,9;6;6,70;1116;66;100;153;205;209;225;222;206;180;117;62;51;
DEBY_LOD2_604877;1988;0,319;17,340;DEBY_LOD2_604877_ee7860ef-072d-46bb-b8b5-2d8b0b391ecd;405408959;LOD_2;31001_1000;568209,8;5517202,8;180;40;90,1;40,00;149,9;5;5,58;1116;66;100;153;205;209;225;222;206;180;117;62;51;
DEBY_LOD2_604878;1956;0,383;17,249;DEBY_LOD2_604878_0c00cd6d-d496-4b95-a9a7-db2f6c349dab;1474337150;LOD_2;31001_1000;568223,8;5517202,7;180;39;90,3;40,00;149,9;5;5,58;1116;66;100;153;205;209;225;222;206;180;117;62;51;
DEBY_LOD2_604879;1968;0,356;15,001;DEBY_LOD2_604879_9812a0f0-6138-4578-8ab3-114c889f43a9;1321918019;LOD_2;31001_1000;568209,3;5517177,3;180;27;77,5;40,00;148,6;4;4,43;1106;56;91;145;205;220;240;234;210;173;108;55;43;
DEBY_LOD2_604880;1937;0,399;14,950;DEBY_LOD2_604880_83becd2e-13eb-44e9-b2a1-a889a7a88cf0;1816622066;LOD_2;31001_1000;568223,4;5517177,2;180;27;78,2;40,00;148,6;4;4,43;1106;56;91;145;205;220;240;234;210;173;108;55;43;
DEBY_LOD2_604882;1882;0,426;9,000;DEBY_LOD2_604882_478123d2-bd8c-41c9-94d5-677008e72e75;862922897;LOD_2;31001_1000;568195,1;5517177,4;180;0;142,2;30,00;148,6;6;6,64;1106;33;65;116;185;216;243;234;197;143;80;37;26;
<?xml version="1.0" encoding="UTF-8"?>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.PhotovoltaicPotential">
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<java version="17.0.14" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflows.CityGmlWorkflow" id="CityGmlWorkflow0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="CityGmlWorkflow0" />
<boolean>true</boolean>
</void>
</void>
<void property="name">
<string>CGSC_PV</string>
</void>
<void property="shortName">
<string>PV</string>
</void>
<void property="workflowProvider">
<object class="de.hftstuttgart.simstadtworkflows.energy.PhotovoltaicPotentialAnalysisWorkflowProvider" />
</void>
<void property="cityGmlFileNames"><void method="add"><string>Gromb&#252;hl_mini_with_trees.gml</string></void></void></object>
</java>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.citygml.steps.ImportCityGml" id="ImportCityGml0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="ImportCityGml0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="ImportCityGml0"/>
<string>01_Preprocessing.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GeometricPreprocessorStep" id="GeometricPreprocessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="GeometricPreprocessorStep0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="GeometricPreprocessorStep0"/>
<string>01_GeometricEstimator.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GeometricEstimatorStep" id="GeometricEstimatorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="GeometricEstimatorStep0"/>
<string>02_PhysicsPreprocessor.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment