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();
        }
Esempio n. 2
0
        // 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();
            }
        }