public void Run() { var logger = new Logging.Logger(null); var pm = new PlotMaker(new MapDrawer(logger), logger, null); const string targetDir = @"c:\work\simzukunft\Stadtprofile"; //read profiles const string filename = @"U:\SimZukunft\StadtProfil\BKWLast_1h.csv"; const string profilename = "01-bkwlast"; var bkwRaw = ZZ_ProfileImportHelper.ReadCSV(filename, profilename); var bkwScaled = bkwRaw.ScaleToTargetSum(103_000_000, "BKW"); VisualizeOneProfile(targetDir, bkwScaled, pm, false); const string filename2 = @"U:\SimZukunft\StadtProfil\PVEinspeisung_1h.csv"; const string profilename2 = "01-pv"; var evProfile = Profile.MakeConstantProfile(15_000_000, "EV", Profile.ProfileResolution.Hourly); var pv = ZZ_ProfileImportHelper.ReadCSV(filename2, profilename2); VisualizeOneProfile(targetDir, pv, pm, false); //scaling const string filename3 = @"U:\SimZukunft\StadtProfil\temperaturen.csv"; const string profilename3 = "01-temperaturen"; var temperaturen = ZZ_ProfileImportHelper.ReadCSV(filename3, profilename3); const string filename4 = @"U:\SimZukunft\StadtProfil\pv_einspeisung_pvgis_2016_35_süd.csv"; const string profilename4 = "pvgis_süd_35"; var pvgis35 = ZZ_ProfileImportHelper.ReadCSV(filename4, profilename4); const string filename5 = @"U:\SimZukunft\StadtProfil\pv_einspeisung_pvgis_2016_90_süd.csv"; const string profilename5 = "pvgis_süd_90"; var pvgis90 = ZZ_ProfileImportHelper.ReadCSV(filename5, profilename5); VisualizeOneProfile(targetDir, temperaturen, pm, false); var degreeDayPowerProfile = temperaturen.MakeDegreeDayPowerProfile("02-HeatingDegreedays", 15, 22_000_000); var coolingdegreeDayPowerProfile = temperaturen.MakeCoolingDegreeHours("02-CoolingDegreeHours", 20, 15_000_000); VisualizeOneProfile(targetDir, coolingdegreeDayPowerProfile, pm, false); var summedLoadProfile = bkwScaled.Add(evProfile, "with ev").Add(degreeDayPowerProfile, "with heating").Add(coolingdegreeDayPowerProfile, "with cooling"); var bkwsum = summedLoadProfile.EnergySum(); var scaledPv1 = pv.ScaleToTargetSum(bkwsum, "02-PV Scaled"); var scaledPv35 = pvgis35.ScaleToTargetSum(bkwsum, "pvgis_süd_35_scaled"); VisualizeOneProfile(targetDir, scaledPv35, pm, false); var scaledPv90 = pvgis90.ScaleToTargetSum(bkwsum, "pvgis_süd_90_scaled"); VisualizeOneProfile(targetDir, scaledPv90, pm, false); VisualizeOneProfile(targetDir, degreeDayPowerProfile, pm, false); const string targetdir1 = @"c:\work\simzukunft\Stadtprofile\measured"; AnalyzePVProfile(bkwScaled, scaledPv1, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir1, pm, summedLoadProfile); const string targetdir2 = @"c:\work\simzukunft\Stadtprofile\35süd"; AnalyzePVProfile(bkwScaled, scaledPv35, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir2, pm, summedLoadProfile); const string targetdir3 = @"c:\work\simzukunft\Stadtprofile\90süd"; AnalyzePVProfile(bkwScaled, scaledPv90, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir3, pm, summedLoadProfile); //var withStorage50KWh = residualAfterPv.IntegrateStorage(50 * 4000, "06-50kwhStorage", out var storageValues50Kwh); //VisualizeOneProfile(withStorage50KWh, pm, true); //VisualizeOneProfile(storageValues50Kwh, pm, false); //var onlypositiveBattery50Kwh = withStorage50KWh.GetOnlyPositive("06-50kwhBatterly only positive"); //VisualizeOneProfile(onlypositiveBattery50Kwh, pm, false); //level target for 10 kWh //var targetLoad = FindMinimumTargetLoad(summedLoadProfile, residualAfterPv,10); //var leveledProfile =residualAfterPv.IntegrateStorageWithAdjustedCurrentValue(20 * 4000,"07-20kwhStoragePredictive-target-" + targetLoad,out var _, targetLoad); //VisualizeOneProfile(leveledProfile, pm, true); //VisualizeOneProfile(leveledProfile.GetOnlyPositive("07-20kwh_predicitive_onlypositive"), pm, true); //look at minimum power draw over different storage sizes //Profile minimumTargetLoads = new Profile("08-MinimumTargetLoads"); //double maxLoad = summedLoadProfile.Values.Max(); //for (int i = 0; i < 3000; i+=10) { //var targetLoad1 = FindMinimumTargetLoad(summedLoadProfile, residualAfterPv,i); //double relativeLoad = targetLoad1 / maxLoad; //minimumTargetLoads.Values.Add(relativeLoad); //} //VisualizeOneProfile(minimumTargetLoads, pm, true); pm.Finish(); }
// ReSharper disable once FunctionComplexityOverflow public void Run() { var logger = new Logging.Logger(null); using (var db = new Database("Data Source=v:\\Test.sqlite", DatabaseType.SQLite, System.Data.SQLite.SQLiteFactory.Instance)) { var ebd = db.Fetch <RasterDatenEnergiebedarfKanton>(); var dict = GetLongNames(); var pm = new PlotMaker(new MapDrawer(logger), logger, null); const string path = "v:\\plots\\"; //anzahl gebäude var bses = new List <BarSeriesEntry>(); var colNames = new List <string>(); var col = 0; colNames.Add("Summe"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_gwr)], ebd.Sum(x => x.wg_gwr), col)); col++; colNames.Add("GEAK"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_geak)], ebd.Sum(x => x.wg_geak), col)); col++; colNames.Add("Gebäude nach Typ"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1010)], ebd.Sum(x => x.wg_1010), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1021)], ebd.Sum(x => x.wg_1021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1025)], ebd.Sum(x => x.wg_1025), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1030)], ebd.Sum(x => x.wg_1030), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1040)], ebd.Sum(x => x.wg_1040), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1060)], ebd.Sum(x => x.wg_1060), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1080)], ebd.Sum(x => x.wg_1080), col)); pm.MakeBarChart(Path.Combine(path, "Gebäudeanzahl" + ".png"), "Gebäude-Anzahl", bses, colNames); //wärme/energiebedarfe bses = new List <BarSeriesEntry>(); colNames = new List <string>(); col = 0; colNames.Add("Wärmebedarf für \nHeizen und\nWarmwasser "); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whzww)], ebd.Sum(x => x.whzww), col)); col++; colNames.Add("Wärmebedarf \naufgeteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whz)], ebd.Sum(x => x.whz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.www)], ebd.Sum(x => x.www), col)); col++; colNames.Add("Energiebedarf \nGesamt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww)], ebd.Sum(x => x.ehzww), col)); col++; colNames.Add("Energiebedarf \nWarmwasser und\nHeizen"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz)], ebd.Sum(x => x.ehz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww)], ebd.Sum(x => x.eww), col)); col++; colNames.Add("Energiebedarf \nHeizen \naufteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ol)], ebd.Sum(x => x.ehz_ol), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_gz)], ebd.Sum(x => x.ehz_gz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ho)], ebd.Sum(x => x.ehz_ho), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_el)], ebd.Sum(x => x.ehz_el), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ko)], ebd.Sum(x => x.ehz_ko), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_wp)], ebd.Sum(x => x.ehz_wp), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_so)], ebd.Sum(x => x.ehz_so), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_fw)], ebd.Sum(x => x.ehz_fw), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_a)], ebd.Sum(x => x.ehz_a), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_u)], ebd.Sum(x => x.ehz_u), col)); col++; colNames.Add("Energiebedarf \nWarmwasser \naufteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ol)], ebd.Sum(x => x.eww_ol), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_gz)], ebd.Sum(x => x.eww_gz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ho)], ebd.Sum(x => x.eww_ho), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_el)], ebd.Sum(x => x.eww_el), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ko)], ebd.Sum(x => x.eww_ko), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_wp)], ebd.Sum(x => x.eww_wp), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_so)], ebd.Sum(x => x.eww_so), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_fw)], ebd.Sum(x => x.eww_fw), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_a)], ebd.Sum(x => x.eww_a), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_u)], ebd.Sum(x => x.eww_u), col)); col++; colNames.Add("Energiebedarf \nGesamt\nnach Haustyp"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1010)], ebd.Sum(x => x.ehzww_1010), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1021)], ebd.Sum(x => x.ehzww_1021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1025)], ebd.Sum(x => x.ehzww_1025), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1030)], ebd.Sum(x => x.ehzww_1030), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1040)], ebd.Sum(x => x.ehzww_1040), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1060)], ebd.Sum(x => x.ehzww_1060), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1080)], ebd.Sum(x => x.ehzww_1080), col)); col++; colNames.Add("Energiebedarf \nGesamt\nnach Baujahr"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8011)], ebd.Sum(x => x.ehzww_8011), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8012)], ebd.Sum(x => x.ehzww_8012), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8013)], ebd.Sum(x => x.ehzww_8013), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8014)], ebd.Sum(x => x.ehzww_8014), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8015)], ebd.Sum(x => x.ehzww_8015), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8016)], ebd.Sum(x => x.ehzww_8016), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8017)], ebd.Sum(x => x.ehzww_8017), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8018)], ebd.Sum(x => x.ehzww_8018), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8019)], ebd.Sum(x => x.ehzww_8019), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8020)], ebd.Sum(x => x.ehzww_8020), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8021)], ebd.Sum(x => x.ehzww_8021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8022)], ebd.Sum(x => x.ehzww_8022), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8023)], ebd.Sum(x => x.ehzww_8023), col)); col++; colNames.Add("Energiebedarf \nGesamt\nRichtplan 2012"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio("Richtplan 2012 Total", 111131000, col)); pm.MakeBarChart(Path.Combine(path, "WärmeBedarfe" + ".png"), "Wärme", bses, colNames); pm.Finish(); } }