예제 #1
0
        private void LogEvent(int currentTime, HurricaneEvent hurricaneEvent = null)
        {
            // commented out in case I want to use it later.
            // commented out to eliminate a warning.
            //string cvtKilometersToMiles(double kValue, unitType unitType)
            //{
            //    double milesValue = kValue * 0.621371;
            //    string kUnits = unitType == unitType.Dist ? "kilometers" : "kph";
            //    string mUnits = unitType == unitType.Dist ? " miles" : " mph";
            //    return $"{kValue:F1} {kUnits} / {milesValue:F1} {mUnits}";
            //}

            eventLog.Clear();
            EventsLog el = new EventsLog();

            el.Time                 = currentTime;
            el.HurricaneNumber      = hurricaneEvent.hurricaneNumber;
            el.ImpactsStudyArea     = hurricaneEvent.studyAreaImpacts;
            el.StudyAreaMaxWS       = hurricaneEvent.StudyAreaMaxWindspeed;
            el.StudyAreaMinWS       = hurricaneEvent.StudyAreaMinWindspeed;
            el.LandfallLatitude     = hurricaneEvent.landfallLatitude;
            el.LandfallMaxWindSpeed = hurricaneEvent.landfallMaxWindSpeed;
            el.PathHeading          = hurricaneEvent.stormTrackHeading;
            eventLog.AddObject(el);
            eventLog.WriteToFile();

            if (hurricaneEvent.studyAreaImpacts)
            {
                summaryEventCount++;
            }
            //summaryTotalSites += hurricaneEvent.studyAreaImpacts;
        }
예제 #2
0
        //---------------------------------------------------------------------

        ///<summary>
        /// Run the plug-in at a particular timestep.
        ///</summary>
        public override void Run()
        {
            ModelCore.UI.WriteLine("Processing landscape for hurricane events ...");

            foreach (var year in Enumerable.Range(0, this.parameters.Timestep))
            {
                int stormsThisYear = -1;
                var randomNum      = PlugIn.ModelCore.GenerateUniform();
                if (HurricaneEvent.HurricaneRandomNumber)
                {
                    randomNum = PlugIn.HurricaneGeneratorStandard.NextDouble();
                }

                var cummProb = 0.0;
                foreach (var probability in this.parameters.StormOccurenceProbabilities)
                {
                    cummProb += probability;
                    stormsThisYear++;
                    if (randomNum < cummProb)
                    {
                        break;
                    }
                }
                string message = stormsThisYear + " storms.";
                if (stormsThisYear == 1)
                {
                    message = "1 storm.";
                }
                foreach (var stormCount in Enumerable.Range(0, stormsThisYear))
                {
                    var storm = HurricaneEvent.Initiate(this.ContinentalGrid);
                    //storm.hurricaneYear =
                    //    year + PlugIn.ModelCore.CurrentTime -
                    //    this.parameters.Timestep;

                    storm.hurricaneNumber = stormCount + 1;

                    bool impactsStudyArea =
                        storm.GenerateWindFieldRaster(this.mapNameTemplate,
                                                      PlugIn.modelCore, this.ContinentalGrid);

                    LogEvent(PlugIn.ModelCore.CurrentTime, storm);
                }
            }

            WriteSummaryLog(PlugIn.modelCore.CurrentTime);
        }
예제 #3
0
        public static HurricaneEvent Initiate(ContinentalGrid continentalGrid)
        {
            HurricaneEvent hurrEvent = new HurricaneEvent(continentalGrid);

            return(hurrEvent);
        }