コード例 #1
0
        //---------------------------------------------------------------------

        public override void Initialize(string        dataFile,
                                        PlugIns.ICore modelCore)
        {
            Model.Core = modelCore;

            InputParametersParser.SpeciesDataset     = Model.Core.Species;
            InputParametersParser parser             = new InputParametersParser();
            IInputParameters parameters              = Data.Load<IInputParameters>(dataFile, parser);

            if(parameters == null)
                UI.WriteLine("Parameters are not loading.");


            Timestep                    = parameters.Timestep;
            mapNameTemplate             = parameters.MapFileNames;
            pctConiferMapNameTemplate   = parameters.PctConiferFileName;
            pctDeadFirMapNameTemplate   = parameters.PctDeadFirFileName;
            fuelTypes                   = parameters.FuelTypes;
            disturbanceTypes            = parameters.DisturbanceTypes;
            fuelCoefs                   = parameters.FuelCoefficients;
            hardwoodMax                 = parameters.HardwoodMax;
            deadFirMaxAge               = parameters.DeadFirMaxAge;

            cohorts = modelCore.SuccessionCohorts as ILandscapeCohorts;
            if (cohorts == null)
                throw new ApplicationException("Error: Cohorts don't support LEAF BIOMASS interface");

            SiteVars.Initialize();

        }
コード例 #2
0
        //---------------------------------------------------------------------

        public override void LoadParameters(string dataFile,
                                            ICore mCore)
        {
            ExtensionMain baseHarvest = new BaseHarvest.PlugIn();
            try
            {
                baseHarvest.LoadParameters(null, mCore);
            }
            catch (System.ArgumentNullException)
            {
                // ignore
            }

            modelCore = mCore;

            // Add local event handler for cohorts death due to age-only
            // disturbances.
            Landis.Library.LeafBiomassCohorts.Cohort.AgeOnlyDeathEvent += CohortKilledByAgeOnlyDisturbance;

            InputParametersParser parser = new InputParametersParser(modelCore.Species);

            BaseHarvest.IInputParameters baseParameters = Landis.Data.Load<BaseHarvest.IInputParameters>(dataFile, parser);
            parameters = baseParameters as IInputParameters;
            if (parser.RoundedRepeatIntervals.Count > 0)
            {
                modelCore.UI.WriteLine("NOTE: The following repeat intervals were rounded up to");
                modelCore.UI.WriteLine("      ensure they were multiples of the harvest timestep:");
                modelCore.UI.WriteLine("      File: {0}", dataFile);
                foreach (RoundedInterval interval in parser.RoundedRepeatIntervals)
                    modelCore.UI.WriteLine("      At line {0}, the interval {1} rounded up to {2}",
                                 interval.LineNumber,
                                 interval.Original,
                                 interval.Adjusted);
            }
        }
コード例 #3
0
 //---------------------------------------------------------------------
 public override void LoadParameters(string dataFile,
                                     ICore mCore)
 {
     modelCore = mCore;
     InputParametersParser parser = new InputParametersParser();
     parameters = modelCore.Load<IInputParameters>(dataFile, parser);
 }
コード例 #4
0
 //---------------------------------------------------------------------
 public override void LoadParameters(string dataFile, ICore mCore)
 {
     modelCore = mCore;
     InputParametersParser.SpeciesDataset = modelCore.Species;
     InputParametersParser parser = new InputParametersParser();
     parameters = Landis.Data.Load<IInputParameters>(dataFile, parser);
 }
コード例 #5
0
 //---------------------------------------------------------------------
 public override void LoadParameters(string dataFile, ICore mCore)
 {
     modelCore = mCore;
     SiteVars.Initialize();
     InputParametersParser parser = new InputParametersParser();
     parameters = Landis.Data.Load<IInputParameters>(dataFile, parser);
 }
コード例 #6
0
        //---------------------------------------------------------------------
        public override void Initialize(string        dataFile,
                                        PlugIns.ICore modelCore)
        {
            this.modelCore = modelCore;

            InputParametersParser parser = new InputParametersParser(modelCore.Species);
            IInputParameters parameters = Data.Load<IInputParameters>(dataFile, parser);

            Timestep = parameters.Timestep;
            this.selectedSpecies = parameters.SelectedSpecies;
            this.speciesMapNameTemplate = parameters.SpeciesMapNames;
            this.ageClasses = parameters.AgeClasses;

            cohorts = modelCore.SuccessionCohorts as ILandscapeCohorts;
            if (cohorts == null)
                throw new ApplicationException("Error: Cohorts don't support biomass interface");
        }
コード例 #7
0
        //---------------------------------------------------------------------
        public static void Initialize(string climateConfigFilename, bool writeOutput, ICore mCore)
        {
            InputParametersParser inParamsParser = new InputParametersParser();
            configParameters = Landis.Data.Load<IInputParameters>(climateConfigFilename, inParamsParser);

            TextLog = Landis.Data.CreateTextFile("Landis-climate-log.txt");
            TextLog.AutoFlush = true;

            modelCore = mCore;
            MetadataHandler.InitializeMetadata(1, modelCore);

            ModelCore.UI.WriteLine("   Loading weather data ...");
            Climate.future_allData = new Dictionary<int, ClimateRecord[][]>();
            Climate.spinup_allData = new Dictionary<int, ClimateRecord[][]>();

            Future_MonthlyData = new Dictionary<int, AnnualClimate_Monthly[]>();
            Spinup_MonthlyData = new Dictionary<int, AnnualClimate_Monthly[]>();
            Future_DailyData = new Dictionary<int, AnnualClimate_Daily[]>();
            Spinup_DailyData = new Dictionary<int, AnnualClimate_Daily[]>();
            LandscapeAnnualPDSI = new double[Climate.ModelCore.EndTime - Climate.ModelCore.StartTime + 1];

            TextLog.WriteLine("   Loading spin-up weather data from file {0} ...", configParameters.SpinUpClimateFile);
            Climate.ConvertFileFormat_FillOutAllData(configParameters.SpinUpClimateTimeSeries, configParameters.SpinUpClimateFile, configParameters.SpinUpClimateFileFormat, Climate.Phase.SpinUp_Climate);

            TextLog.WriteLine("   Loading future weather data from file {0} ...", configParameters.ClimateFile);
            Climate.ConvertFileFormat_FillOutAllData(configParameters.ClimateTimeSeries, configParameters.ClimateFile, configParameters.ClimateFileFormat, Climate.Phase.Future_Climate);

            // **
            // spinup

            // write input data to the log
            foreach (KeyValuePair<int, ClimateRecord[][]> timeStep in spinup_allData)
            {
                Climate.WriteSpinupInputLog(timeStep.Value, timeStep.Key); //, Climate.Phase.SpinUp_Climate.ToString());
            }

            // find maxSpeciesAge as the maximum possible time step count for spin up
            int maxSpeciesAge = 0;
            foreach (ISpecies sp in ModelCore.Species)
            {
                if (sp.Longevity > maxSpeciesAge)
                    maxSpeciesAge = sp.Longevity;
            }

            var spinupTimeStepKeys = new List<int>();
            var spinupKeyList = new List<int>(Climate.spinup_allData.Keys);
            var spinupStartYear = spinupKeyList.Min();
            var spinupTimeStepCount = maxSpeciesAge;

            for (var i = 0; i < spinupTimeStepCount; ++i)
                spinupTimeStepKeys.Add(spinupStartYear + i);

            if (Climate.ConfigParameters.SpinUpClimateTimeSeries.ToLower().Contains("random"))
            {
                // generate random keys for the length of maxSpeciesAge
                Climate.randSelectedTimeKeys_spinup = new List<int>();

                // pick a random year key from allData
                for (var i = 0; i < spinupTimeStepCount; ++i)
                    Climate.randSelectedTimeKeys_spinup.Add(spinupKeyList[(int)(spinupKeyList.Count * Climate.ModelCore.GenerateUniform())]);
            }

            // initialize Spinup data arrays
            foreach (var timeStepKey in spinupTimeStepKeys)
            {
                Spinup_MonthlyData.Add(timeStepKey, new AnnualClimate_Monthly[modelCore.Ecoregions.Count]);
                Spinup_DailyData.Add(timeStepKey, new AnnualClimate_Daily[modelCore.Ecoregions.Count]);
            }

            // **
            // future

            // write input data to the log
            foreach (KeyValuePair<int, ClimateRecord[][]> timeStep in future_allData)
            {
                Climate.WriteFutureInputLog(timeStep.Value, timeStep.Key); //, future_allData_granularity);
            }

            var futureTimeStepKeys = new List<int>();
            var futureKeyList = new List<int>(Climate.future_allData.Keys);
            var futureStartYear = futureKeyList.Min();
            var futureTimeStepCount = ModelCore.EndTime - ModelCore.StartTime;

            for (var i = 0; i < futureTimeStepCount; ++i)
                futureTimeStepKeys.Add(futureStartYear + i);

            if (Climate.ConfigParameters.ClimateTimeSeries.ToLower().Contains("random"))
            {
                // generate random keys for the length of the simulation
                Climate.randSelectedTimeKeys_future = new List<int>();

                // pick a random year key from allData
                for (var i = 0; i < futureTimeStepCount; ++i)
                    Climate.randSelectedTimeKeys_future.Add(futureKeyList[(int)(futureKeyList.Count * Climate.ModelCore.GenerateUniform())]);
            }

            // initialize Future data arrays
            foreach (var timeStepKey in futureTimeStepKeys)
            {
                Future_MonthlyData.Add(timeStepKey, new AnnualClimate_Monthly[modelCore.Ecoregions.Count]);
                Future_DailyData.Add(timeStepKey, new AnnualClimate_Daily[modelCore.Ecoregions.Count]);
            }
        }
コード例 #8
0
 //---------------------------------------------------------------------
 public override void LoadParameters(string dataFile, ICore mCore)
 {
     modelCore = mCore;
     InputParametersParser.SpeciesDataset = modelCore.Species;
     InputParametersParser parser = new InputParametersParser();
     parameters = Landis.Data.Load<IInputParameters>(dataFile, parser);
     foreach(ClimateVariableDefinition climateVarDfn in parameters.ClimateVars)
     {
         if(climateVarDfn.SourceName != "Library")
         {
             DataTable weatherTable = ClimateVariableDefinition.ReadWeatherFile(climateVarDfn.SourceName);
             parameters.ClimateDataTable = weatherTable;
         }
     }
 }
コード例 #9
0
        //---------------------------------------------------------------------
        public override void Initialize(string dataFile,
            PlugIns.ICore modelCore)
        {
            Model.Core = modelCore;
            InputParametersParser parser = new InputParametersParser(Model.Core.Ecoregions,
                                                           Model.Core.Species,
                                                           Model.Core.StartTime,
                                                           Model.Core.EndTime);
            IInputParameters parameters = Landis.Data.Load<IInputParameters>(dataFile, parser);

            Timestep = parameters.Timestep;
            sufficientLight = parameters.LightClassProbabilities;

            SiteVars.Initialize();
            FireEffects.Initialize(parameters);

            SpeciesData.Initialize(parameters);
            EcoregionData.Initialize(parameters);

            SoilOrganicMatter.Initialize(parameters);

            MineralSoil.Initialize(parameters);
            Rock.Initialize(parameters);
            Outputs.Initialize(parameters);

            //  Cohorts must be created before the base class is initialized
            //  because the base class' reproduction module uses the core's
            //  SuccessionCohorts property in its Initialization method.
            CohortBiomass.Calculator = new CohortBiomass();
            Biomass.Cohorts.Initialize(Timestep, CohortBiomass.Calculator);

            Cohorts = new LandscapeCohorts(SiteVars.Cohorts);
            Reproduction.SufficientLight = SufficientLight;

            InitialBiomass.Initialize(Timestep);

            base.Initialize(modelCore,
                            SpeciesData.ToArray<double>(parameters.EstablishProbability),
                            parameters.SeedAlgorithm,
                            (Reproduction.Delegates.AddNewCohort)AddNewCohort);

            Cohort.DeathEvent += CohortDied;

            AgeOnlyDisturbances.Module.Initialize(parameters.AgeOnlyDisturbanceParms);
            DynamicChange.Module.Initialize(parameters.DynamicChangeUpdates);
        }
コード例 #10
0
        //---------------------------------------------------------------------
        public override void Initialize(string dataFile,
            PlugIns.ICore modelCore)
        {
            Model.Core = modelCore;
            InputParametersParser parser = new InputParametersParser();
            IInputParameters parameters = Landis.Data.Load<IInputParameters>(dataFile, parser);

            Timestep = parameters.Timestep;
            CalibrateMode = parameters.CalibrateMode;
            CohortBiomass.SpinupMortalityFraction = parameters.SpinupMortalityFraction;

            sufficientLight = parameters.LightClassProbabilities;
            pctSun1 = parameters.PctSun1;
            pctSun2 = parameters.PctSun2;
            pctSun3 = parameters.PctSun3;
            pctSun4 = parameters.PctSun4;
            pctSun5 = parameters.PctSun5;

            SiteVars.Initialize();
            SpeciesData.Initialize(parameters);
            EcoregionData.Initialize(parameters);
            DynamicInputs.Initialize(parameters.DynamicInputFile, false);
            SpeciesData.ChangeDynamicParameters(0);  // Year 0
            Outputs.Initialize(parameters);

            //  Cohorts must be created before the base class is initialized
            //  because the base class' reproduction module uses the core's
            //  SuccessionCohorts property in its Initialization method.
            Biomass.Cohorts.Initialize(Timestep, new CohortBiomass());

            //cohorts = SiteVars.Cohorts; //Model.Core.Landscape.NewSiteVar<SiteCohorts>();
            landscapeCohorts = new LandscapeCohorts(SiteVars.Cohorts);
            Cohorts = landscapeCohorts;

            Reproduction.SufficientLight = SufficientLight;

            InitialBiomass.Initialize(Timestep);
            //LivingBiomass.Initialize(parameters, cohorts);

            base.Initialize(modelCore,
                            Util.ToArray<double>(SpeciesData.EstablishProbability),
                            parameters.SeedAlgorithm,
                            (Reproduction.Delegates.AddNewCohort)AddNewCohort);

            Cohort.DeathEvent += CohortDied;
            AgeOnlyDisturbances.Module.Initialize(parameters.AgeOnlyDisturbanceParms);

            //DynamicChange.Module.Initialize(parameters.DynamicChangeUpdates);
        }
コード例 #11
0
        //---------------------------------------------------------------------
        public static void Initialize(string climateConfigFilename, bool writeOutput, ICore mCore)
        {
            InputParametersParser inParamsParser = new InputParametersParser();
            configParameters = Landis.Data.Load<IInputParameters>(climateConfigFilename, inParamsParser);

            modelCore = mCore;
            MetadataHandler.InitializeMetadata(1, modelCore);

            ModelCore.UI.WriteLine("   Loading weather data ...");
            Climate.future_allData = new Dictionary<int, IClimateRecord[,]>();
            Climate.spinup_allData = new Dictionary<int, IClimateRecord[,]>();

            Future_MonthlyData = new Dictionary<int, AnnualClimate_Monthly[]>();
            Spinup_MonthlyData = new Dictionary<int, AnnualClimate_Monthly[]>();
            Future_DailyData = new Dictionary<int, AnnualClimate_Daily[]>();
            Spinup_DailyData = new Dictionary<int, AnnualClimate_Daily[]>();
            LandscapeAnnualPDSI = new double[Climate.ModelCore.EndTime - Climate.ModelCore.StartTime + 1];

            ModelCore.UI.WriteLine("   Loading spin-up weather data from file {0} ...", configParameters.SpinUpClimateFile);
            Climate.ConvertFileFormat_FillOutAllData(configParameters.SpinUpClimateTimeSeries, configParameters.SpinUpClimateFile, configParameters.SpinUpClimateFileFormat, Climate.Phase.SpinUp_Climate);

            ModelCore.UI.WriteLine("   Loading future weather data from file {0} ...", configParameters.ClimateFile);
            Climate.ConvertFileFormat_FillOutAllData(configParameters.ClimateTimeSeries, configParameters.ClimateFile, configParameters.ClimateFileFormat, Climate.Phase.Future_Climate);
            

                //string climateOption = Climate.ConfigParameters.ClimateTimeSeries;
                //if (this.climatePhase == Climate.Phase.SpinUp_Climate)
                //    climateOption = Climate.ConfigParameters.SpinUpClimateTimeSeries;

                //switch (climateOption)
                //{
                //    case "MonthlyAverage":
                //        {
                //            break;
                //        }
                //    case "MonthlyRandom":
                //        {
                //            break;
                //        }
                //    case "DailyHistRandom":
                //        {
                //            break;
                //        }
                //    case "DailyHistAverage":
                //        {
                //            return;
                //        }
                //    case "MonthlyStandard":
                //        {
                //            break;
                //        }
                //    case "DailyGCM":
                //        {
                //        }
                //    case "MonthlyGCM":
                //        {
                //            break;
                //        }
                //    default:
                //        throw new ApplicationException(String.Format("Unknown Climate Time Series: {}", climateOption));

                //}


            if (Climate.ConfigParameters.ClimateTimeSeries.ToLower().Contains("random")) 
            {
                Climate.randSelectedTimeSteps_future = new int[Climate.future_allData.Count];//should be future_allData.Count or it needs to be different?
                for (int i = 0; i < Climate.future_allData.Count; i++)
                {
                    Climate.randSelectedTimeSteps_future[i] = (int)Math.Round(Climate.ModelCore.GenerateUniform() * (Climate.future_allData.Count - 1));
                }

            }

            if (Climate.ConfigParameters.SpinUpClimateTimeSeries.ToLower().Contains("random"))
            {

                //int maxSpeciesAge = modelCore.Species.Max(sp => sp.Longevity);
                int maxSpeciesAge = 0;
                foreach (ISpecies sp in ModelCore.Species)
                {
                    if (sp.Longevity > maxSpeciesAge)
                        maxSpeciesAge = sp.Longevity;
                }

                Climate.randSelectedTimeSteps_spinup = new int[maxSpeciesAge]; 
                for (int i = 0; i < maxSpeciesAge; i++)
                    Climate.randSelectedTimeSteps_spinup[i] = (int)Math.Round(Climate.ModelCore.GenerateUniform() * (Climate.spinup_allData.Count - 1));

            }
            foreach (KeyValuePair<int, IClimateRecord[,]> timeStep in spinup_allData)
            {
                //Climate.TimestepData = timeStep.Value;
                IClimateRecord[,] timestepData = timeStep.Value;
                int year = timeStep.Key;
                //Write(timestepData, year, "SpinUp");
                
                Spinup_MonthlyData.Add(timeStep.Key, new AnnualClimate_Monthly[modelCore.Ecoregions.Count]);  
                Spinup_DailyData.Add(timeStep.Key, new AnnualClimate_Daily[modelCore.Ecoregions.Count]);
                Climate.Write(timestepData, timeStep.Key, Climate.Phase.SpinUp_Climate.ToString()); 
            }
            foreach (KeyValuePair<int, IClimateRecord[,]> timeStep in future_allData)
            {
                //Climate.TimestepData = timeStep.Value;
                IClimateRecord[,] timestepData = timeStep.Value;
                int year = timeStep.Key;
                //Write(timestepData, year, "Future");
                
                Future_MonthlyData.Add(timeStep.Key, new AnnualClimate_Monthly[modelCore.Ecoregions.Count]);  
                Future_DailyData.Add(timeStep.Key, new AnnualClimate_Daily[modelCore.Ecoregions.Count]);
                Climate.Write(timestepData, timeStep.Key, Climate.Phase.Future_Climate.ToString());
            }

        }