private static JsonCalcSpecification MakeCalcSpec([NotNull] ScenarioSliceParameters parameters, DateTime endtime)
        {
            DateTime      startTime     = new DateTime(parameters.DstYear, 1, 1);
            JsonReference geoloc        = new JsonReference("(Germany) Chemnitz", "eddeb22c-fbd4-44c1-bf2d-fbde3342f1bd");
            JsonReference tempReference = new JsonReference("Berlin, Germany 1996 from Deutscher Wetterdienst DWD (www.dwd.de)",
                                                            "ec337ba6-60a1-404b-9db0-9be52c9e5702");
            JsonCalcSpecification jcs = new JsonCalcSpecification(null,
                                                                  null,
                                                                  false,
                                                                  null,
                                                                  false,
                                                                  endtime,
                                                                  "00:15:00",
                                                                  "00:01:00",
                                                                  geoloc,
                                                                  LoadTypePriority.RecommendedForHouses,
                                                                  null,
                                                                  false,
                                                                  startTime,
                                                                  tempReference,
                                                                  null,
                                                                  null)
            {
                DeleteDAT             = true,
                DefaultForOutputFiles = OutputFileDefault.None, SkipExisting = true
            };

            jcs.CalcOptions.Add(CalcOption.SumProfileExternalIndividualHouseholdsAsJson);
            jcs.LoadtypesForPostprocessing.Add("Electricity");
            jcs.LoadtypesForPostprocessing.Add("Car Charging Electricity");
            jcs.OutputDirectory = "Results";
            jcs.IgnorePreviousActivitiesWhenNeeded = true;
            return(jcs);
        }
Exemple #2
0
 public JsonDto(StrGuid guid, [CanBeNull] JsonReference personReference,
                [CanBeNull] JsonReference livingPatternTraitTagReference, string name)
 {
     Guid            = guid;
     PersonReference = personReference;
     LivingPatternTraitTagReference = livingPatternTraitTagReference;
     Name = name;
 }
 public JsonDto([CanBeNull] JsonReference traitTagReference, StrGuid guid, int traitCountMax, int traitCountMin, string name)
 {
     TraitTagReference = traitTagReference;
     Guid          = guid;
     TraitCountMax = traitCountMax;
     TraitCountMin = traitCountMin;
     Name          = name;
 }
 public JsonModularHousehold([NotNull] string name, [CanBeNull] string description, StrGuid guid, CreationType creationType, [CanBeNull] JsonReference deviceSelection, EnergyIntensityType energyIntensityType, JsonReference vacation)
 {
     Name                = name;
     Description         = description;
     Guid                = guid;
     CreationType        = creationType;
     DeviceSelection     = deviceSelection;
     EnergyIntensityType = energyIntensityType;
     Vacation            = vacation;
 }
 public JsonDto(JsonReference affordance, JsonReference timeLimit, int weight, int startMinusMinutes, int startPlusMinutes, int endMinusMinutes, int endPlusMinutes, StrGuid guid)
 {
     Affordance        = affordance;
     TimeLimit         = timeLimit;
     Weight            = weight;
     StartMinusMinutes = startMinusMinutes;
     StartPlusMinutes  = startPlusMinutes;
     EndMinusMinutes   = endMinusMinutes;
     EndPlusMinutes    = endPlusMinutes;
     Guid = guid;
 }
 public JsonDto(JsonReference desire, decimal decayTime, HealthStatus sicknessdesire, decimal threshold, decimal weight, int minAge, int maxAge, PermittedGender gender, StrGuid guid)
 {
     Desire         = desire;
     DecayTime      = decayTime;
     Sicknessdesire = sicknessdesire;
     Threshold      = threshold;
     Weight         = weight;
     MinAge         = minAge;
     MaxAge         = maxAge;
     Gender         = gender;
     Guid           = guid;
 }
 public JsonDto(StrGuid guid, JsonReference device, JsonReference location, JsonReference timeLimit, JsonReference timeProfile,
                decimal standardDeviation, JsonReference variable, VariableCondition variableCondition, double variableValue, JsonReference loadType)
 {
     Guid              = guid;
     Device            = device;
     Location          = location;
     TimeLimit         = timeLimit;
     TimeProfile       = timeProfile;
     StandardDeviation = standardDeviation;
     Variable          = variable;
     VariableCondition = variableCondition;
     VariableValue     = variableValue;
     LoadType          = loadType;
 }
        private static ICalcObject GetCalcObject([NotNull] Simulator sim, [CanBeNull] JsonReference calcReference)
        {
            if (calcReference == null)
            {
                throw new LPGException("No calc object was set. Can't continue.");
            }
            var house = sim.Houses.FindByJsonReference(calcReference);

            if (house != null)
            {
                return(house);
            }

            throw new LPGException("Could not find the Calculation object with the guid " + calcReference.Guid);
        }
        public T FindByJsonReference([CanBeNull] JsonReference reference)
        {
            if (reference == null)
            {
                return(null);
            }

            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            // ReSharper disable twice HeuristicUnreachableCode
            if (reference.Guid == null)
            {
                return(null);
            }

            foreach (var x in It)
            {
                if (x.Guid == reference.Guid)
                {
                    return(x);
                }
            }

            return(null);
        }
 public HouseholdNameSpecification([NotNull] JsonReference householdName) => HouseholdReference = householdName;
 public JsonDto(List <HHTAffordance.JsonDto> affordances, JsonReference location, StrGuid guid)
 {
     Affordances = affordances;
     Location    = location;
     Guid        = guid;
 }
        public void StartHousehold([NotNull] Simulator sim, [NotNull] JsonCalcSpecification jcs, [NotNull] JsonReference calcObjectReference, [CanBeNull] Action <CalculationProfiler, string> makeAllCharts)
        {
            if (!CheckSimulator(jcs, sim))
            {
                throw new LPGPBadParameterException("Invalid simulation state");
            }

            var calcObject = GetCalcObject(sim, calcObjectReference);

            if (jcs.OutputDirectory == null)
            {
                jcs.OutputDirectory = AutomationUtili.CleanFileName(calcObject.Name) + " - " + calcObject;
            }
            _calculationProfiler.StartPart(Utili.GetCurrentMethodAndClass());
            if (calcObjectReference == null)
            {
                throw new LPGException("No calculation object was selected.");
            }
            var calculationStartTime = DateTime.Now;

            if (calcObject == null)
            {
                throw new LPGException("Could not find the Calc Object with the guid " + calcObjectReference.Guid);
            }

            var generalResultsDirectory = new DirectoryInfo(jcs.OutputDirectory ?? throw new LPGException("Output directory was null."));
            var finishedFile            = Path.Combine(generalResultsDirectory.FullName, Constants.FinishedFileFlag);

            if (Directory.Exists(generalResultsDirectory.FullName))
            {
                if (jcs.SkipExisting)
                {
                    if (File.Exists(finishedFile))
                    {
                        Logger.Error("Directory already exists and calculation is finished. Exiting.");
                        _calculationProfiler.StopPart(Utili.GetCurrentMethodAndClass());
                        return;
                    }
                }

                Logger.Warning("Directory already exists, but calculation is not finished or skip existing is not specified. Deleting folder.");
                var files = generalResultsDirectory.GetFiles();
                foreach (FileInfo file in files)
                {
                    if (file.Name.StartsWith("Log.", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }
                    if (file.Name.EndsWith(".db3", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }
                    file.Delete();
                }

                var directories = generalResultsDirectory.GetDirectories();
                foreach (DirectoryInfo info in directories)
                {
                    info.Delete(true);
                }

                Thread.Sleep(1000);
            }

            generalResultsDirectory.Create();
            Thread.Sleep(500);
            Logger.SetLogFilePath(Path.Combine(generalResultsDirectory.FullName, "Log.CommandlineCalculation.txt"));
            Logger.LogToFile = true;
            Logger.Get().FlushExistingMessages();
            Logger.Info("---------------------------");
            Logger.Info("Used calculation specification:");
            Logger.Info(JsonConvert.SerializeObject(jcs, Formatting.Indented), true);
            Logger.Info("---------------------------");
            Logger.Info("Directory: " + generalResultsDirectory.FullName);
            sim.MyGeneralConfig.StartDateUIString      = jcs.StartDate.ToString();
            sim.MyGeneralConfig.EndDateUIString        = jcs.EndDate.ToString();
            sim.MyGeneralConfig.InternalTimeResolution = "00:01:00";
            sim.MyGeneralConfig.DestinationPath        = generalResultsDirectory.FullName;
            sim.MyGeneralConfig.ApplyOptionDefault(jcs.DefaultForOutputFiles);
            if (jcs.CalcOptions != null)
            {
                foreach (var option in jcs.CalcOptions)
                {
                    //var option = option;

                    /*if (option == null) {
                     *  throw  new LPGException("Could not identify Calc Option " + option + ". Stopping.");
                     * }*/
                    Logger.Info("Enabling option " + option);
                    sim.MyGeneralConfig.Enable(option);
                }
            }

            if (jcs.DeleteDAT)
            {
                sim.MyGeneralConfig.DeleteDatFiles = "TRUE";
            }
            else
            {
                sim.MyGeneralConfig.DeleteDatFiles = "FALSE";
            }

            if (jcs.ExternalTimeResolution == null)
            {
                sim.MyGeneralConfig.ExternalTimeResolution = sim.MyGeneralConfig.InternalTimeResolution;
            }
            else
            {
                sim.MyGeneralConfig.ExternalTimeResolution = jcs.ExternalTimeResolution;
            }

            sim.MyGeneralConfig.RandomSeed = jcs.RandomSeed;
            var eit = jcs.EnergyIntensityType;

            if (eit == EnergyIntensityType.AsOriginal)
            {
                eit = calcObject.EnergyIntensityType;
            }

            var cs = new CalcStarter(sim);
            var temperatureProfile = sim.TemperatureProfiles.FindByJsonReference(jcs.TemperatureProfile);

            if (temperatureProfile == null)
            {
                throw new LPGException("Temperature Profile not found.");
            }

            if (jcs.GeographicLocation == null)
            {
                throw new LPGPBadParameterException("No geographic location was set in the calculation request");
            }
            var geographicLocation = sim.GeographicLocations.FindByJsonReference(jcs.GeographicLocation);

            if (geographicLocation == null)
            {
                throw new LPGException("Geographic location not found.");
            }


            DeviceSelection deviceSelection = null;

            if (jcs.DeviceSelection != null)
            {
                deviceSelection = sim.DeviceSelections.FindByJsonReference(jcs.DeviceSelection);
                if (deviceSelection == null)
                {
                    throw new LPGException("Unknown device selection \"" + jcs.DeviceSelection.Guid + "\"");
                }
            }



            if (jcs.EnableTransportation)
            {
            }

            if (jcs.LoadTypePriority == LoadTypePriority.Undefined)
            {
                if (calcObject.CalcObjectType == CalcObjectType.ModularHousehold)
                {
                    jcs.LoadTypePriority = LoadTypePriority.RecommendedForHouseholds;
                }
                else
                {
                    jcs.LoadTypePriority = LoadTypePriority.RecommendedForHouses;
                }
            }

            var options = sim.MyGeneralConfig.AllEnabledOptions();
            //options.Add(CalcOption.OverallDats);
            var calcStartParameterSet = new CalcStartParameterSet(ReportFinishFuncForHouseAndSettlement,
                                                                  ReportFinishFuncForHousehold,
                                                                  OpenTabFunc,
                                                                  null,
                                                                  geographicLocation,
                                                                  temperatureProfile,
                                                                  calcObject,
                                                                  eit,
                                                                  ReportCancelFunc,
                                                                  false,
                                                                  deviceSelection,
                                                                  jcs.LoadTypePriority,
                                                                  null,
                                                                  null,
                                                                  options,
                                                                  sim.MyGeneralConfig.StartDateDateTime,
                                                                  sim.MyGeneralConfig.EndDateDateTime,
                                                                  sim.MyGeneralConfig.InternalStepSize,
                                                                  sim.MyGeneralConfig.CSVCharacter,
                                                                  jcs.RandomSeed,
                                                                  sim.MyGeneralConfig.ExternalStepSize,
                                                                  sim.MyGeneralConfig.DeleteDatFilesBool,
                                                                  sim.MyGeneralConfig.WriteExcelColumnBool,
                                                                  sim.MyGeneralConfig.ShowSettlingPeriodBool,
                                                                  3,
                                                                  sim.MyGeneralConfig.RepetitionCount,
                                                                  _calculationProfiler,
                                                                  null,
                                                                  jcs.LoadtypesForPostprocessing,
                                                                  sim.MyGeneralConfig.DeviceProfileHeaderMode,
                                                                  jcs.IgnorePreviousActivitiesWhenNeeded, jcs.OutputDirectory, jcs.EnableTransportation);

            calcStartParameterSet.PreserveLogfileWhileClearingFolder = true;
            cs.Start(calcStartParameterSet);
            if (jcs.CalcOptions != null && jcs.CalcOptions.Contains(CalcOption.CalculationFlameChart))
            {
                string targetfile = Path.Combine(generalResultsDirectory.FullName, Constants.CalculationProfilerJson);
                using (StreamWriter sw = new StreamWriter(targetfile))
                {
                    _calculationProfiler.WriteJson(sw);
                }
            }
            _calculationProfiler.StopPart(Utili.GetCurrentMethodAndClass());
            if (makeAllCharts != null)
            {
                makeAllCharts(_calculationProfiler, calcStartParameterSet.ResultPath);
            }

            var duration = DateTime.Now - calculationStartTime;

            if (jcs.DeleteAllButPDF)
            {
                var allFileInfos = generalResultsDirectory.GetFiles("*.*", SearchOption.AllDirectories);
                foreach (var fi in allFileInfos)
                {
                    if (fi.Name.ToUpperInvariant().EndsWith(".PDF", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    if (fi.Name.ToUpperInvariant().StartsWith("SUMPROFILES.", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    if (fi.Name.ToUpperInvariant().StartsWith("HOUSEHOLDNAME.", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    fi.Delete();
                }
            }

            if (jcs.DeleteSqlite)
            {
                var allFileInfos = generalResultsDirectory.GetFiles("*.sqlite", SearchOption.AllDirectories);
                GC.Collect();
                GC.WaitForPendingFinalizers();
                foreach (var fi in allFileInfos)
                {
                    try {
                        fi.Delete();
                    }
                    catch (Exception ex) {
                        Logger.Exception(ex);
                    }
                }
            }

            Logger.ImportantInfo("Calculation duration:" + duration);

            //cleanup empty directories
            var subdirs = generalResultsDirectory.GetDirectories();

            foreach (var subdir in subdirs)
            {
                var files      = subdir.GetFiles();
                var subsubdirs = subdir.GetDirectories();
                if (files.Length == 0 && subsubdirs.Length == 0)
                {
                    subdir.Delete();
                }
            }

            using (var sw = new StreamWriter(finishedFile)) {
                sw.WriteLine("Finished at " + DateTime.Now);
                sw.WriteLine("Duration in seconds:");
                sw.WriteLine(duration.TotalSeconds);
            }
        }
 public JsonModularHouseholdPerson([NotNull] JsonReference person, [CanBeNull] JsonReference traitTag, StrGuid guid)
 {
     Person   = person;
     TraitTag = traitTag;
     Guid     = guid;
 }