Ejemplo n.º 1
0
        //---------------------------------------------------------------------

        public override void Initialize()
        {
            //initialize event id
            event_id = 1;

            MetadataHandler.InitializeMetadata(parameters.Timestep, parameters.PrescriptionMapNames, parameters.EventLog, parameters.SummaryLog);
            Timestep        = parameters.Timestep;
            managementAreas = parameters.ManagementAreas;
            PlugIn.ModelCore.UI.WriteLine("   Reading management-area map {0} ...", parameters.ManagementAreaMap);
            ManagementAreas.ReadMap(parameters.ManagementAreaMap, managementAreas);

            //readMap reads the stand map and adds all the stands to a management area
            PlugIn.ModelCore.UI.WriteLine("   Reading stand map {0} ...", parameters.StandMap);
            Stands.ReadMap(parameters.StandMap);

            //finish initializing SiteVars
            SiteVars.GetExternalVars();

            //finish each managementArea's initialization
            //after reading the stand map, finish the initializations
            foreach (ManagementArea mgmtArea in managementAreas)
            {
                mgmtArea.FinishInitialization();
            }

            prescriptionMaps = new PrescriptionMaps(parameters.PrescriptionMapNames);
        }
Ejemplo n.º 2
0
        //---------------------------------------------------------------------

        /// <summary>
        /// Initializes the plug-in with a data file.
        /// </summary>
        /// <param name="dataFile">
        /// Path to the file with initialization data.
        /// </param>
        /// <param name="startTime">
        /// Initial timestep (year): the timestep that will be passed to the
        /// first call to the component's Run method.
        /// </param>
        public override void Initialize()
        {
            Timestep = parameters.Timestep;

            SiteVars.Initialize(parameters);
            Impacts.Initialize();
            Outputs.Initialize();
            Dispersal.Initialize();

            /*
             * //Debug distribution
             * StreamWriter randLog = Landis.Data.CreateTextFile("G:/Budworm_model/TEST/E_TEST/rand.csv");
             * randLog.AutoFlush = true;
             * randLog.WriteLine("Rand1, Rand2");
             * //Troschuetz.Random.NormalDistribution r1 = new Troschuetz.Random.NormalDistribution();
             * for (int i = 0; i < 10000; i++)
             * {
             *
             * r1.Mu = 1;
             * r1.Sigma = 0.01;
             * double rand = r1.NextDouble();
             * rand = r1.NextDouble();
             *
             * r1.Mu = 2;
             * r1.Sigma = 0.01;
             * double rand2 = r1.NextDouble();
             * rand2 = r1.NextDouble();
             *
             *  PlugIn.ModelCore.NormalDistribution.Mu = 1;
             *  PlugIn.ModelCore.NormalDistribution.Sigma = 0.01;
             *  double rand = PlugIn.ModelCore.NormalDistribution.NextDouble();
             *  //rand = PlugIn.ModelCore.NormalDistribution.NextDouble();
             *
             *  PlugIn.ModelCore.NormalDistribution.Mu = 2;
             *  PlugIn.ModelCore.NormalDistribution.Sigma = 0.01;
             *  double rand2 = PlugIn.ModelCore.NormalDistribution.NextDouble();
             *  //rand2 = PlugIn.ModelCore.NormalDistribution.NextDouble();
             *
             *  randLog.Write("{0:0.000}, {1:0.000}",
             *           rand,rand2);
             *  randLog.WriteLine("");
             * }
             */
        }
Ejemplo n.º 3
0
        public static void CalculateDispersal()
        {
            SiteVars.Dispersed.ActiveSiteValues = 0;
            foreach (Site site in PlugIn.ModelCore.Landscape.ActiveSites)
            {
                // Calculate LDD/SDD ratio (16)
                double LDDHabitat = 0;
                double LDDFlight  = 0;
                double LDDRatio   = 0;
                double siteDefol  = SiteVars.TotalDefoliation[site] / SiteVars.CurrentHostFoliage[site];
                double minLDD     = PlugIn.Parameters.EmigrationMinLDD;
                double halfLDD    = PlugIn.Parameters.EmigrationHalfLDD;
                double maxLDD     = PlugIn.Parameters.EmigrationMaxLDD;
                double maxLDDProp = PlugIn.Parameters.EmigrationMaxLDDProp;

                if ((siteDefol > minLDD) && (siteDefol <= halfLDD))
                {
                    double m1 = 0;
                    if ((halfLDD - minLDD) > 0)
                    {
                        m1 = 0.5 / (halfLDD - minLDD);
                    }
                    double b1 = 0.5 - (m1 * halfLDD);
                    LDDHabitat = m1 * siteDefol + b1;
                }
                else if ((siteDefol > halfLDD) && (siteDefol <= maxLDD))
                {
                    double m2 = 0;
                    if ((maxLDD - halfLDD) > 0)
                    {
                        m2 = 0.5 / (maxLDD - halfLDD);
                    }
                    double b2 = 1.0 - (m2 * maxLDD);
                    LDDHabitat = m2 * siteDefol + b2;
                }
                else if (siteDefol > maxLDD)
                {
                    LDDHabitat = 1.0;
                }

                double slope     = (maxLDDProp - (1 - maxLDDProp)) / (1.0 - 0.46);
                double intercept = maxLDDProp - slope;
                double rprimeZ   = (-0.0054 * SiteVars.PctDefoliation[site] + 1);
                if (PlugIn.Parameters.PositiveFecundDispersal)
                {
                    if (rprimeZ < 0.46)
                    {
                        LDDFlight = 0.0;
                    }
                    else
                    {
                        LDDFlight = slope * rprimeZ + intercept;
                    }
                }
                else
                {
                    double slope2     = (-1.0) * slope;
                    double intercept2 = (-1.0) * intercept + 1.0;
                    if (rprimeZ < 0.46)
                    {
                        LDDFlight = 1.0;
                    }
                    else
                    {
                        LDDFlight = slope2 * rprimeZ + intercept2;
                    }
                }
                LDDRatio = LDDHabitat * LDDFlight;

                // Calculate LDD dispersers (16b)

                double LDDout = SiteVars.EggCountFall[site] * LDDRatio; //Units: eggs/m2
                SiteVars.LDDout[site] = LDDout;
                SiteVars.SDDout[site] = SiteVars.EggCountFall[site] - LDDout;
            }
            PlugIn.ModelCore.UI.WriteLine("LD Dispersal of moths...");
            SiteVars.Disperse_n.ActiveSiteValues = 0;
            SiteVars.Disperse_v.ActiveSiteValues = 0;
            SiteVars.Dispersed.ActiveSiteValues  = 0;
            foreach (Site site in PlugIn.ModelCore.Landscape.ActiveSites)
            {
                if (SiteVars.LDDout[site] > 0)
                {
                    // Distribute LDD dispersers (17)
                    if (PlugIn.Parameters.LDDSpeedUp)
                    {
                        //DisperseLDDSpeedUp(site, PlugIn.Parameters.WrapLDD);
                        DisperseLDDBinarySearch(site, PlugIn.Parameters.WrapLDD, PlugIn.Parameters.LDDEdgeWrapReduction);
                    }
                    else
                    {
                        DisperseLDD(site, PlugIn.Parameters.WrapLDD);
                    }
                }

                // Calculate SDD dispersers (16b)
                SiteVars.DisperseSDD(site, PlugIn.Parameters.SDDRadius, PlugIn.Parameters.SDDEdgeEffect, PlugIn.Parameters.EcoParameters);
            }
            foreach (Site site in PlugIn.ModelCore.Landscape.ActiveSites)
            {
                if (!PlugIn.Parameters.LDDSpeedUp)
                {
                    if (SiteVars.Disperse_n[site] > 0)
                    {
                        DisperseLDD_Part2(site);
                    }
                }

                SiteVars.BudwormCount[site] = SiteVars.EggCountFall[site] - SiteVars.LDDout[site] - SiteVars.SDDout[site] + SiteVars.Dispersed[site];
            }
        }
Ejemplo n.º 4
0
        //---------------------------------------------------------------------

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

            // Calculate host foliage
            SiteVars.CalculateHostFoliage(parameters.SBWHost, parameters.MinSusceptibleAge);
            double randWinter  = 1;
            double randFecund  = 1;
            double phenolLimit = 1;

            if (ModelCore.CurrentTime >= parameters.BudwormStartYear)
            {
                if (ModelCore.CurrentTime == parameters.BudwormStartYear)
                {
                    foreach (Site site in PlugIn.ModelCore.Landscape.ActiveSites)
                    {
                        SiteVars.BudwormCount[site] = SiteVars.BudwormDensityL2[site] * SiteVars.CurrentHostFoliage[site];
                        SiteVars.EnemyCount[site]   = SiteVars.EnemyDensity[site] * SiteVars.BudwormCount[site];
                    }
                }
                SiteVars.BiomassRemoved.ActiveSiteValues   = 0;
                SiteVars.TotalDefoliation.ActiveSiteValues = 0;

                // Draw random overwinter survival (to be applied globally)
                // To be replaced with spatially-autocorrelated winter temp function
                PlugIn.ModelCore.NormalDistribution.Mu    = parameters.OverwinterMean;
                PlugIn.ModelCore.NormalDistribution.Sigma = parameters.OverwinterStdev;
                randWinter = PlugIn.ModelCore.NormalDistribution.NextDouble();
                randWinter = PlugIn.ModelCore.NormalDistribution.NextDouble();
                if (parameters.OverwinterConstant)
                {
                    randWinter = parameters.OverwinterMean;
                }

                // Draw random fecundity (to be applied globally)
                // To be replaced by spatially autocorrelated function
                PlugIn.ModelCore.NormalDistribution.Mu    = parameters.FecundityMean;
                PlugIn.ModelCore.NormalDistribution.Sigma = parameters.FecundityStdev;
                randFecund = PlugIn.ModelCore.NormalDistribution.NextDouble();
                randFecund = PlugIn.ModelCore.NormalDistribution.NextDouble();
                if (parameters.FecundityConstant)
                {
                    randFecund = parameters.FecundityMean;
                }

                // Draw random phenological limitation (to be applied globally)
                // To be replaced by spatially autocorrelated function
                PlugIn.ModelCore.NormalDistribution.Mu    = parameters.PhenolMean;
                PlugIn.ModelCore.NormalDistribution.Sigma = parameters.PhenolStdev;
                phenolLimit = PlugIn.ModelCore.NormalDistribution.NextDouble();
                phenolLimit = PlugIn.ModelCore.NormalDistribution.NextDouble();
                if (parameters.PhenolConstant)
                {
                    phenolLimit = parameters.PhenolMean;
                }

                SiteVars.CalculatePopulation(randWinter, randFecund, phenolLimit);

                // Calculate cohort defoliation and impacts
                SiteVars.CalculateDefoliation();

                // Calculate long-distance dispersal
                Dispersal.CalculateDispersal();
            }
            Outputs.WriteLogFile(ModelCore.CurrentTime, randWinter, randFecund, phenolLimit);
            Outputs.WriteMaps(ModelCore.CurrentTime);
        }
Ejemplo n.º 5
0
        //---------------------------------------------------------------------

        /// <summary>
        /// Runs a model scenario.
        /// </summary>
        public static void Run(string scenarioPath)
        {
            //  Initialize plug-ins manager with the default plug-ins
            //	database in the folder where application resides.
            PlugIns.Manager.Initialize(PlugIns.Database.DefaultPath);

            IScenario scenario = LoadScenario(scenarioPath);

            cellLength = 29.0f;              // 29m hard-wired until metadata implemented in raster driver

            LoadSpecies(scenario.Species);
            LoadEcoregions(scenario.Ecoregions);

            Log.Info("Initializing landscape from ecoregions map \"{0}\" ...", scenario.EcoregionsMap);
            Ecoregions.Map ecoregionsMap = new Ecoregions.Map(scenario.EcoregionsMap,
                                                              Model.Ecoregions);
            using (Landscape.IInputGrid <bool> grid = ecoregionsMap.OpenAsInputGrid()) {
                landscape = new Landscape.Landscape(grid);
            }
            landscapeMapDims = new Raster.Dimensions((int)landscape.Rows,
                                                     (int)landscape.Columns);
            SiteVars.Initialize(ecoregionsMap);

            //  Load and initialize plug-ins.

            Log.Info("Loading {0} plug-in ...", scenario.Succession.Info.Name);
            succession = PlugIns.Manager.Load <ISuccession>(scenario.Succession.Info);
            succession.Initialize(scenario.Succession.InitFile);
            succession.InitializeSites(scenario.InitialCommunities,
                                       scenario.InitialCommunitiesMap);

            IDisturbance[] disturbancePlugIns = LoadPlugIns <IDisturbance>(scenario.Disturbances);
            IOutput[]      outputPlugIns      = LoadPlugIns <IOutput>(scenario.Outputs);

            //  Run those output plug-ins whose next time to run is 0.
            foreach (IOutput outPlugIn in GetPlugInsToRun <IOutput>(outputPlugIns, 0))
            {
                outPlugIn.Run(0);
            }

            //******************// for Rob
            //  Main time loop  //
            //******************//
            // currentTime (years)
            for (int currentTime = 1; currentTime <= scenario.Duration; ++currentTime)
            {
                List <IDisturbance> distPlugInsToRun;
                distPlugInsToRun = GetPlugInsToRun <IDisturbance>(disturbancePlugIns, currentTime);
                bool isDistTimestep = distPlugInsToRun.Count > 0;

                List <IOutput> outPlugInsToRun;
                outPlugInsToRun = GetPlugInsToRun <IOutput>(outputPlugIns, currentTime);
                bool isOutTimestep = outPlugInsToRun.Count > 0;

                bool isSuccTimestep = succession.NextTimeToRun == currentTime;

                //  If not a succession timestep, a disturance timestep or
                //  an output timestep, then go to the next timestep.
                if (!(isSuccTimestep || isDistTimestep || isOutTimestep))
                {
                    continue;
                }

                Log.Info("Current time: {0}", currentTime);

                if (isDistTimestep)
                {
                    if (scenario.DisturbancesRandomOrder)
                    {
                        distPlugInsToRun = Shuffle(distPlugInsToRun);
                    }
                    foreach (IDisturbance distPlugIn in distPlugInsToRun)
                    {
                        distPlugIn.Run(currentTime);
                    }
                }

                if (isSuccTimestep || isDistTimestep)
                {
                    IEnumerable <ActiveSite> sites;
                    if (isSuccTimestep)
                    {
                        sites = Model.Landscape.ActiveSites;
                    }
                    else
                    {
                        sites = DisturbedSites();
                    }
                    succession.AgeCohorts(sites, currentTime);
                    succession.ComputeShade(sites);
                    succession.ReproducePlants(sites);
                }

                //  Run output plug-ins.
                foreach (IOutput outPlugIn in outPlugInsToRun)
                {
                    outPlugIn.Run(currentTime);
                }

                if (!isSuccTimestep)
                {
                    SiteVars.Disturbed.ActiveSiteValues = false;
                }
            }              // main time loop
        }
Ejemplo n.º 6
0
        //---------------------------------------------------------------------

        public override void Run()
        {
            SiteVars.GetExternalVars(); // ReInitialize();
            SiteVars.Prescription.ActiveSiteValues   = null;
            SiteVars.CohortsDamaged.ActiveSiteValues = 0;


            //harvest each management area in the list
            foreach (ManagementArea mgmtArea in managementAreas)
            {
                totalSites           = new int[Prescription.Count];
                totalDamagedSites    = new int[Prescription.Count];
                totalSpeciesCohorts  = new int[Prescription.Count, PlugIn.ModelCore.Species.Count];
                prescriptionReported = new bool[Prescription.Count];

                mgmtArea.HarvestStands();
                //and record each stand that's been harvested

                foreach (Stand stand in mgmtArea)
                {
                    if (stand.Harvested)
                    {
                        WriteLogEntry(mgmtArea, stand);
                    }
                }

                // updating for preventing establishment
                foreach (Stand stand in mgmtArea)
                {
                    if (stand.Harvested && stand.LastPrescription.PreventEstablishment)
                    {
                        List <ActiveSite> sitesToDelete = new List <ActiveSite>();

                        foreach (ActiveSite site in stand)
                        {
                            if (SiteVars.CohortsDamaged[site] > 0)
                            {
                                Reproduction.PreventEstablishment(site);
                                sitesToDelete.Add(site);
                            }
                        }

                        foreach (ActiveSite site in sitesToDelete)
                        {
                            stand.DelistActiveSite(site);
                        }
                    }
                } // foreach (Stand stand in mgmtArea)

                foreach (AppliedPrescription aprescription in mgmtArea.Prescriptions)
                {
                    Prescription prescription = aprescription.Prescription;
                    //string species_string = "";
                    double[] species_count = new double[modelCore.Species.Count];
                    foreach (ISpecies species in PlugIn.ModelCore.Species)
                    {
                        species_count[species.Index] += totalSpeciesCohorts[prescription.Number, species.Index];
                    }

                    if (totalSites[prescription.Number] > 0 && prescriptionReported[prescription.Number] != true)
                    {
                        //summaryLog.WriteLine("{0},{1},{2},{3}{4}",
                        //    PlugIn.ModelCore.CurrentTime,
                        //    mgmtArea.MapCode,
                        //    prescription.Name,
                        //    totalDamagedSites[prescription.Number],
                        //    species_string);
                        summaryLog.Clear();
                        SummaryLog sl = new SummaryLog();
                        sl.Time              = modelCore.CurrentTime;
                        sl.ManagementArea    = mgmtArea.MapCode;
                        sl.Prescription      = prescription.Name;
                        sl.HarvestedSites    = totalDamagedSites[prescription.Number];
                        sl.CohortsHarvested_ = species_count;
                        summaryLog.AddObject(sl);
                        summaryLog.WriteToFile();

                        prescriptionReported[prescription.Number] = true;
                    }
                }
            }
            prescriptionMaps.WriteMap(PlugIn.ModelCore.CurrentTime);
        }