コード例 #1
0
        //---------------------------------------------------------------------
        // Generates new climate parameters at an annual time step.
        //
        public static void GenerateNewClimate(int year, int years)
        {
            //PlugIn.ModelCore.UI.WriteLine("   Generating new climate for simulation year {0}.", year);

            AnnualClimateArray = new Ecoregions.AuxParm<AnnualClimate[]>(PlugIn.ModelCore.Ecoregions);

            foreach(IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if(ecoregion.Active)
                {
                    AnnualClimate[] tempClimate = new AnnualClimate[years];

                    for (int y = 0; y < years; y++)
                    {

                        int actualYear = year + y;

                        if(Climate.AllData.ContainsKey(actualYear))
                        {
                            Climate.TimestepData = Climate.AllData[actualYear];
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  Yr={0}, Eco={1}.", actualYear, ecoregion.Name);
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  AllData  Jan Ppt = {0:0.00}.", Climate.AllData[actualYear][ecoregion.Index,0].AvgPpt);
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  Timestep Jan Ppt = {0:0.00}.", Climate.TimestepData[ecoregion.Index,0].AvgPpt);
                        }

                        AnnualClimate.AnnualClimateInitialize();  // Synchronizes temperature and precipitation deviation across ecoregions.
                        tempClimate[y] = new AnnualClimate(ecoregion, actualYear, Latitude[ecoregion]);

                    }

                    AnnualClimateArray[ecoregion] = tempClimate;
                }
            }
        }
コード例 #2
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            ActiveSiteCount    = new Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);
            AnnualWeather      = new Ecoregions.AuxParm <AnnualClimate_Monthly>(PlugIn.ModelCore.Ecoregions);
            MonthlyNDeposition = new Ecoregions.AuxParm <double[]>(PlugIn.ModelCore.Ecoregions);

            AnnualNDeposition = new Ecoregions.AuxParm <double>(PlugIn.ModelCore.Ecoregions);

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
                ActiveSiteCount[ecoregion]++;
            }

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                MonthlyNDeposition[ecoregion] = new double[12];

                if (ecoregion.Active)
                {
                    Climate.GenerateEcoregionClimateData(ecoregion, 0, PlugIn.Parameters.Latitude);
                    SetSingleAnnualClimate(ecoregion, 0, Climate.Phase.SpinUp_Climate);  // Some placeholder data to get things started.
                }
            }
        }
コード例 #3
0
        //---------------------------------------------------------------------
        public static void Initialize(IParameters parameters)
        {
            MinRelativeBiomass  = parameters.MinRelativeBiomass;
            B_MAX               = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);

            ChangeParameters(parameters);
        }
コード例 #4
0
 //---------------------------------------------------------------------
 public static void UpdateParameters(DynamicChange.IInputParameters parameters)
 {
     DepositionN = parameters.DepositionN;
     DepositionP = parameters.DepositionP;
     AET = parameters.AET;
     WeatheringP = parameters.WeatheringP;
     MinRelativeBiomass = parameters.MinRelativeBiomass;
 }
コード例 #5
0
 //---------------------------------------------------------------------
 public static void Initialize(IInputParameters parameters)
 {
     UpdateParameters(parameters);
     ActiveSiteCount = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);
     foreach (ActiveSite site in Model.Core.Landscape)
     {
         IEcoregion ecoregion = Model.Core.Ecoregion[site];
         ActiveSiteCount[ecoregion]++;
     }
 }
コード例 #6
0
        //---------------------------------------------------------------------

        private static Species.AuxParm <Ecoregions.AuxParm <double> > CreateSpeciesEcoregionParm <T>(ISpeciesDataset speciesDataset, IEcoregionDataset ecoregionDataset)
        {
            Species.AuxParm <Ecoregions.AuxParm <double> > newParm;
            newParm = new Species.AuxParm <Ecoregions.AuxParm <double> >(speciesDataset);
            foreach (ISpecies species in speciesDataset)
            {
                newParm[species] = new Ecoregions.AuxParm <double>(ecoregionDataset);
            }
            return(newParm);
        }
コード例 #7
0
        //---------------------------------------------------------------------

        private Species.AuxParm <Ecoregions.AuxParm <T> > CreateSpeciesEcoregionParm <T>()
        {
            Species.AuxParm <Ecoregions.AuxParm <T> > newParm;
            newParm = new Species.AuxParm <Ecoregions.AuxParm <T> >(speciesDataset);
            foreach (ISpecies species in speciesDataset)
            {
                newParm[species] = new Ecoregions.AuxParm <T>(ecoregionDataset);
            }
            return(newParm);
        }
コード例 #8
0
        //---------------------------------------------------------------------

        private Ecoregions.AuxParm <T> ConvertToActualValues <T>(Ecoregions.AuxParm <InputValue <T> > inputValues)
        {
            Ecoregions.AuxParm <T> actualValues = new Ecoregions.AuxParm <T>(PlugIn.ModelCore.Ecoregions); //ecoregionDataset);
            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)                                  //ecoregionDataset)
            {
                if (inputValues[ecoregion] != null)
                {
                    actualValues[ecoregion] = inputValues[ecoregion].Actual;
                }
            }
            return(actualValues);
        }
コード例 #9
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            AET = parameters.AET;  //FINISH LATER

            B_MAX               = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);
            ActiveSiteCount     = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
                ActiveSiteCount[ecoregion]++;
            }
        }
コード例 #10
0
        public static void ChangeParameters(ClimateChange.IParameters parameters)
        {
            AET = parameters.AET;

            //  Fill in B_MAX array
            foreach (IEcoregion ecoregion in Model.Core.Ecoregions)
            {
                int largest_B_MAX_Spp = 0;
                foreach (ISpecies species in Model.Core.Species)
                {
                    largest_B_MAX_Spp = Math.Max(largest_B_MAX_Spp, SpeciesData.B_MAX_Spp[species][ecoregion]);
                }
                B_MAX[ecoregion] = largest_B_MAX_Spp;
            }
        }
コード例 #11
0
 //---------------------------------------------------------------------
 public Parameters(Ecoregions.AuxParm<Percentage>[]            minRelativeBiomass,
                   Species.AuxParm<double>                     leafLongevity,
                   Species.AuxParm<double>                     woodyDecayRate,
                   Species.AuxParm<double>                     mortCurveShapeParm,
                   Species.AuxParm<Ecoregions.AuxParm<double>> establishProbability,
                   Species.AuxParm<Ecoregions.AuxParm<int>>    maxANPP,
                   Species.AuxParm<Ecoregions.AuxParm<double>> leafLitterDecayRate)
 {
     this.minRelativeBiomass = minRelativeBiomass;
     this.leafLongevity = leafLongevity;
     this.woodyDecayRate = woodyDecayRate;
     this.mortCurveShapeParm = mortCurveShapeParm;
     this.establishProbability = establishProbability;
     this.maxANPP = maxANPP;
     this.leafLitterDecayRate = leafLitterDecayRate;
 }
コード例 #12
0
        //---------------------------------------------------------------------
        public static void ChangeParameters(Dynamic.IParameters parameters)
        {
            B_MAX = new Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);

            //  Fill in B_MAX array
            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if (ecoregion.Active)
                {
                    int largest_B_MAX_Spp = 0;
                    foreach (ISpecies species in PlugIn.ModelCore.Species)
                    {
                        largest_B_MAX_Spp = Math.Max(largest_B_MAX_Spp, SpeciesData.B_MAX_Spp[species][ecoregion]);
                        //PlugIn.ModelCore.UI.WriteLine("B_MAX={0}. species={1}, ecoregion={2}", largest_B_MAX_Spp, species.Name, ecoregion.Name);
                    }
                    B_MAX[ecoregion] = largest_B_MAX_Spp;
                }
            }
        }
コード例 #13
0
 //---------------------------------------------------------------------
 public InputParameters()
 {
     sufficientLight = new List<ISufficientLight>();
     /*pctSun1 = new double();
     pctSun2 = new double();
     pctSun3 = new double();
     pctSun4 = new double();
     pctSun5 = new double();*/
     leafLongevity       = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     woodyDecayRate = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     mortCurveShapeParm = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     growthCurveShapeParm = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     leafLignin = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     maxLAI = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     lightExtinctionCoeff = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     pctBioMaxLAI = new Species.AuxParm<double>(PlugIn.ModelCore.Species);
     aet = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);
     //this.dynamicChangeUpdates = new List<DynamicChange.ParametersUpdate>();
 }
コード例 #14
0
        //---------------------------------------------------------------------
        public static void ChangeParameters(Dynamic.IParameters parameters)
        {
            B_MAX               = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);

            //  Fill in B_MAX array
            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if(ActiveSiteCount[ecoregion] > 0)
                {
                    int largest_B_MAX_Spp = 0;
                    foreach (ISpecies species in PlugIn.ModelCore.Species)
                    {
                        largest_B_MAX_Spp = Math.Max(largest_B_MAX_Spp, SpeciesData.B_MAX_Spp[species][ecoregion]);
                        //PlugIn.ModelCore.Log.WriteLine("B_MAX={0}. species={1}, ecoregion={2}", largest_B_MAX_Spp, species.Name, ecoregion.Name);
                    }
                    B_MAX[ecoregion] = largest_B_MAX_Spp;
                }
            }
        }
コード例 #15
0
        //---------------------------------------------------------------------
        // Generates new climate parameters at an annual time step.
        //
        public static void GenerateNewClimate(int year, int years)
        {
            //PlugIn.ModelCore.UI.WriteLine("   Generating new climate for simulation year {0}.", year);

            AnnualClimateArray = new Ecoregions.AuxParm<AnnualClimate[]>(PlugIn.ModelCore.Ecoregions);

            // Issues with this approach:  Each ecoregion will have unique variability associated with
            // temperature and precipitation.  In reality, we expect some regional synchronicity.  An
            // easy-ish solution would be to use the same random number in combination with standard
            // deviations for all ecoregions.  The converse problem is over synchronization of climate, but
            // that would certainly be preferrable over smaller regions.

            foreach(IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if(ecoregion.Active)
                {
                    AnnualClimate[] tempClimate = new AnnualClimate[years];

                    for (int y = 0; y < years; y++)
                    {

                        int actualYear = year + y;

                        if(Climate.AllData.ContainsKey(actualYear))
                        {
                            Climate.TimestepData = Climate.AllData[actualYear];
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  Yr={0}, Eco={1}.", actualYear, ecoregion.Name);
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  AllData  Jan Ppt = {0:0.00}.", Climate.AllData[actualYear][ecoregion.Index,0].AvgPpt);
                            //PlugIn.ModelCore.UI.WriteLine("  Changing TimestepData:  Timestep Jan Ppt = {0:0.00}.", Climate.TimestepData[ecoregion.Index,0].AvgPpt);
                        }

                        AnnualClimate.AnnualClimateInitialize();
                        tempClimate[y] = new AnnualClimate(ecoregion, actualYear, Latitude[ecoregion]);

                    }

                    AnnualClimateArray[ecoregion] = tempClimate;
                }
            }
        }
コード例 #16
0
 //---------------------------------------------------------------------
 public Parameters(int                                         timestep,
     SeedingAlgorithms                           seedAlgorithm,
     Ecoregions.AuxParm<Percentage>[]            minRelativeBiomass,
     Species.AuxParm<double>                     leafLongevity,
     Species.AuxParm<double>                     woodyDecayRate,
     Species.AuxParm<double>                     mortCurveShapeParm,
     Species.AuxParm<Ecoregions.AuxParm<double>> establishProbability,
     Species.AuxParm<Ecoregions.AuxParm<int>>    maxANPP,
     Species.AuxParm<Ecoregions.AuxParm<double>> leafLitterDecayRate,
     string                                      ageOnlyDisturbanceParms)
 {
     this.timestep = timestep;
     this.seedAlg = seedAlgorithm;
     this.minRelativeBiomass = minRelativeBiomass;
     this.leafLongevity = leafLongevity;
     this.woodyDecayRate = woodyDecayRate;
     this.mortCurveShapeParm = mortCurveShapeParm;
     this.establishProbability = establishProbability;
     this.maxANPP = maxANPP;
     this.leafLitterDecayRate = leafLitterDecayRate;
     this.ageOnlyDisturbanceParms = ageOnlyDisturbanceParms;
 }
コード例 #17
0
 //---------------------------------------------------------------------
 public Parameters(Ecoregions.AuxParm<Percentage>[]            minRelativeBiomass,
     Species.AuxParm<double>                     leafLongevity,
     Species.AuxParm<double>                     woodyDecayRate,
     Species.AuxParm<double>                     mortCurveShapeParm,
     Species.AuxParm<double>                     leafLignin,
     Ecoregions.AuxParm<int>                     aet,
     ISufficientLight[]                          sufficientLight,
     Species.AuxParm<Ecoregions.AuxParm<double>> establishProbability,
     Species.AuxParm<Ecoregions.AuxParm<int>>    maxANPP,
     Species.AuxParm<Ecoregions.AuxParm<int>>    maxBiomass)
 {
     this.minRelativeBiomass = minRelativeBiomass;
     this.leafLongevity = leafLongevity;
     this.woodyDecayRate = woodyDecayRate;
     this.mortCurveShapeParm = mortCurveShapeParm;
     this.leafLignin = leafLignin;
     this.aet = aet;
     this.sufficientLight = sufficientLight;
     this.establishProbability = establishProbability;
     this.maxANPP = maxANPP;
     this.maxBiomass = maxBiomass;
     //this.leafLitterDecayRate = leafLitterDecayRate;
 }
コード例 #18
0
 //---------------------------------------------------------------------
 public static void UpdateParameters(DynamicChange.IInputParameters parameters)
 {
     DecayRateSOM = parameters.DecayRateSOM;
 }
コード例 #19
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            PercentClay         = parameters.PercentClay;
            PercentSand         = parameters.PercentSand;
            SoilDepth           = parameters.SoilDepth;
            FieldCapacity       = parameters.FieldCapacity;
            WiltingPoint        = parameters.WiltingPoint;
            StormFlowFraction   = parameters.StormFlowFraction;
            BaseFlowFraction    = parameters.BaseFlowFraction;
            Drain               = parameters.Drain;
            //MonthlyNDeposition = parameters.MonthlyNDeposition;
            AtmosNslope         = parameters.AtmosNslope;
            AtmosNintercept     = parameters.AtmosNintercept;
            Latitude            = parameters.Latitude;
            ShadeBiomass        = parameters.MinRelativeBiomass;

            ActiveSiteCount = new Ecoregions.AuxParm<double>(PlugIn.ModelCore.Ecoregions);
            ClimateUpdates  = new Ecoregions.AuxParm<bool[]>(PlugIn.ModelCore.Ecoregions);

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];

                SiteVars.SOM1surface[site].Carbon     = parameters.InitialSOM1surfC[ecoregion];
                SiteVars.SOM1surface[site].Nitrogen   = parameters.InitialSOM1surfN[ecoregion];

                SiteVars.SOM1soil[site].Carbon          = parameters.InitialSOM1soilC[ecoregion];
                SiteVars.SOM1soil[site].Nitrogen        = parameters.InitialSOM1soilN[ecoregion];

                SiteVars.SOM2[site].Carbon              = parameters.InitialSOM2C[ecoregion];
                SiteVars.SOM2[site].Nitrogen            = parameters.InitialSOM2N[ecoregion];

                SiteVars.SOM3[site].Carbon              = parameters.InitialSOM3C[ecoregion];
                SiteVars.SOM3[site].Nitrogen            = parameters.InitialSOM3N[ecoregion];

                SiteVars.MineralN[site]               = parameters.InitialMineralN[ecoregion];

                ActiveSiteCount[ecoregion]++;
            }

            GenerateNewClimate(0, parameters.Timestep);

            AnnualWeather = new Ecoregions.AuxParm<AnnualClimate>(PlugIn.ModelCore.Ecoregions);
            foreach(IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
                if(ActiveSiteCount[ecoregion] > 0)
                {
                    SetAnnualClimate(ecoregion, 0);
                    ClimateUpdates[ecoregion] = new bool[PlugIn.ModelCore.EndTime + parameters.Timestep + 1];
                    ClimateUpdates[ecoregion][0] = true;
                }
        }
コード例 #20
0
        // AnnualClimateArray contains climates for N years whereby N is the succession time step.
        // AnnualClimate is the active (current) year's climate, one of the elements in AnnualClimateArray.
        //public static AnnualClimate_Monthly[] AnnualWeather;  //index by ecoregion
        //public static Ecoregions.AuxParm<bool[]> ClimateUpdates;
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            PercentClay         = parameters.PercentClay;
            PercentSand         = parameters.PercentSand;
            SoilDepth           = parameters.SoilDepth;
            FieldCapacity       = parameters.FieldCapacity;
            WiltingPoint        = parameters.WiltingPoint;
            StormFlowFraction   = parameters.StormFlowFraction;
            BaseFlowFraction    = parameters.BaseFlowFraction;
            Drain               = parameters.Drain;
            //MonthlyNDeposition = parameters.MonthlyNDeposition;
            AtmosNslope         = parameters.AtmosNslope;
            AtmosNintercept     = parameters.AtmosNintercept;
            Latitude            = parameters.Latitude;
            DecayRateSurf       = parameters.DecayRateSurf;
            DecayRateSOM1       = parameters.DecayRateSOM1;
            DecayRateSOM2       = parameters.DecayRateSOM2;
            DecayRateSOM3       = parameters.DecayRateSOM3;
            Denitrif             = parameters.Denitrif;

            ShadeBiomass = parameters.MinRelativeBiomass;

            ActiveSiteCount = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);
            LastYearUpdated = new Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);
            AnnualWeather = new Ecoregions.AuxParm<AnnualClimate_Monthly>(PlugIn.ModelCore.Ecoregions);
            //ClimateUpdates  = new Ecoregions.AuxParm<bool[]>(PlugIn.ModelCore.Ecoregions);

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
                //PlugIn.ModelCore.UI.WriteLine("Latitude for {0} = {1}.", ecoregion.Name, parameters.Latitude[ecoregion]);

                SiteVars.SOM1surface[site].Carbon     = parameters.InitialSOM1surfC[ecoregion];
                SiteVars.SOM1surface[site].Nitrogen   = parameters.InitialSOM1surfN[ecoregion];

                SiteVars.SOM1soil[site].Carbon          = parameters.InitialSOM1soilC[ecoregion];
                SiteVars.SOM1soil[site].Nitrogen        = parameters.InitialSOM1soilN[ecoregion];

                SiteVars.SOM2[site].Carbon              = parameters.InitialSOM2C[ecoregion];
                SiteVars.SOM2[site].Nitrogen            = parameters.InitialSOM2N[ecoregion];

                SiteVars.SOM3[site].Carbon              = parameters.InitialSOM3C[ecoregion];
                SiteVars.SOM3[site].Nitrogen            = parameters.InitialSOM3N[ecoregion];

                SiteVars.MineralN[site]               = parameters.InitialMineralN[ecoregion];

                ActiveSiteCount[ecoregion]++;
            }

            //GenerateNewClimate(0, parameters.Timestep, Climate.Phase.SpinUp_Climate);
            //AnnualWeather = Climate.Future_MonthlyData[0];

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if (ecoregion.Active)
                {
                    Climate.GenerateEcoregionClimateData(ecoregion, 0, Latitude[ecoregion], FieldCapacity[ecoregion], WiltingPoint[ecoregion]);
                    SetSingleAnnualClimate(ecoregion, 0, Climate.Phase.SpinUp_Climate);  // Some placeholder data to get things started.
                }
            }
        }
コード例 #21
0
        //---------------------------------------------------------------------
        //---------------------------------------------------------------------

        public Parameters(IEcoregionDataset ecoregionDataset,
                          ISpeciesDataset speciesDataset,
                          int litterCnt, int functionalCnt)
            : base(ecoregionDataset,
                   speciesDataset)
        {
            this.speciesDataset   = speciesDataset;
            this.ecoregionDataset = ecoregionDataset;

            functionalTypes        = new FunctionalTypeTable(functionalCnt);
            fireReductionsTable    = new FireReductions[6];
            harvestReductionsTable = new List <HarvestReductions>();

            sppFunctionalType = new Species.AuxParm <int>(speciesDataset);
            nFixer            = new Species.AuxParm <bool>(speciesDataset);
            gddMin            = new Species.AuxParm <int>(speciesDataset);
            gddMax            = new Species.AuxParm <int>(speciesDataset);
            minJanTemp        = new Species.AuxParm <int>(speciesDataset);
            maxDrought        = new Species.AuxParm <double>(speciesDataset);
            leafLongevity     = new Species.AuxParm <double>(speciesDataset);
            epicormic         = new Species.AuxParm <bool>(speciesDataset);
            leafLignin        = new Species.AuxParm <double>(speciesDataset);
            woodLignin        = new Species.AuxParm <double>(speciesDataset);
            coarseRootLignin  = new Species.AuxParm <double>(speciesDataset);
            fineRootLignin    = new Species.AuxParm <double>(speciesDataset);
            leafCN            = new Species.AuxParm <double>(speciesDataset);
            woodCN            = new Species.AuxParm <double>(speciesDataset);
            coarseRootCN      = new Species.AuxParm <double>(speciesDataset);
            foliageLitterCN   = new Species.AuxParm <double>(speciesDataset);
            fineRootCN        = new Species.AuxParm <double>(speciesDataset);

            minRelativeBiomass = new Ecoregions.AuxParm <Percentage> [6];
            for (byte shadeClass = 1; shadeClass <= 5; shadeClass++)
            {
                minRelativeBiomass[shadeClass] = new Ecoregions.AuxParm <Percentage>(ecoregionDataset);
            }
            sufficientLight = new List <ISufficientLight>();

            percentClay       = new Ecoregions.AuxParm <double>(ecoregionDataset);
            percentSand       = new Ecoregions.AuxParm <double>(ecoregionDataset);
            soilDepth         = new Ecoregions.AuxParm <int>(ecoregionDataset);
            fieldCapacity     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            wiltingPoint      = new Ecoregions.AuxParm <double>(ecoregionDataset);
            stormFlowFraction = new Ecoregions.AuxParm <double>(ecoregionDataset);
            baseFlowFraction  = new Ecoregions.AuxParm <double>(ecoregionDataset);
            drain             = new Ecoregions.AuxParm <double>(ecoregionDataset);
            atmosNslope       = new Ecoregions.AuxParm <double>(ecoregionDataset);
            atmosNintercept   = new Ecoregions.AuxParm <double>(ecoregionDataset);
            latitude          = new Ecoregions.AuxParm <double>(ecoregionDataset);
            decayRateSurf     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            decayRateSOM1     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            decayRateSOM2     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            decayRateSOM3     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            denitrif          = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM1surfC     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM1surfN     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM1soilC     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM1soilN     = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM2C         = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM2N         = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM3C         = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initSOM3N         = new Ecoregions.AuxParm <double>(ecoregionDataset);
            initMineralN      = new Ecoregions.AuxParm <double>(ecoregionDataset);


            this.dynamicUpdates = new List <Dynamic.ParametersUpdate>();
        }
コード例 #22
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            PercentClay       = parameters.PercentClay;
            PercentSand       = parameters.PercentSand;
            SoilDepth         = parameters.SoilDepth;
            FieldCapacity     = parameters.FieldCapacity;
            WiltingPoint      = parameters.WiltingPoint;
            StormFlowFraction = parameters.StormFlowFraction;
            BaseFlowFraction  = parameters.BaseFlowFraction;
            Drain             = parameters.Drain;
            AtmosNslope       = parameters.AtmosNslope;
            AtmosNintercept   = parameters.AtmosNintercept;
            Latitude          = parameters.Latitude;
            DecayRateSurf     = parameters.DecayRateSurf;
            DecayRateSOM1     = parameters.DecayRateSOM1;
            DecayRateSOM2     = parameters.DecayRateSOM2;
            DecayRateSOM3     = parameters.DecayRateSOM3;
            Denitrif          = parameters.Denitrif;

            ShadeBiomass = parameters.MinRelativeBiomass;

            ActiveSiteCount    = new Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);
            LastYearUpdated    = new Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);
            AnnualWeather      = new Ecoregions.AuxParm <AnnualClimate_Monthly>(PlugIn.ModelCore.Ecoregions);
            MonthlyNDeposition = new Ecoregions.AuxParm <double[]>(PlugIn.ModelCore.Ecoregions);

            AnnualNDeposition = new Ecoregions.AuxParm <double>(PlugIn.ModelCore.Ecoregions);

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
                //PlugIn.ModelCore.UI.WriteLine("Latitude for {0} = {1}.", ecoregion.Name, parameters.Latitude[ecoregion]);

                SiteVars.SOM1surface[site].Carbon   = parameters.InitialSOM1surfC[ecoregion];
                SiteVars.SOM1surface[site].Nitrogen = parameters.InitialSOM1surfN[ecoregion];

                SiteVars.SOM1soil[site].Carbon   = parameters.InitialSOM1soilC[ecoregion];
                SiteVars.SOM1soil[site].Nitrogen = parameters.InitialSOM1soilN[ecoregion];

                SiteVars.SOM2[site].Carbon   = parameters.InitialSOM2C[ecoregion];
                SiteVars.SOM2[site].Nitrogen = parameters.InitialSOM2N[ecoregion];

                SiteVars.SOM3[site].Carbon   = parameters.InitialSOM3C[ecoregion];
                SiteVars.SOM3[site].Nitrogen = parameters.InitialSOM3N[ecoregion];

                SiteVars.MineralN[site] = parameters.InitialMineralN[ecoregion];

                ActiveSiteCount[ecoregion]++;
            }

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                MonthlyNDeposition[ecoregion] = new double[12];

                //for (int i = 0; i < 12; i++)
                //    MonthlyNDeposition[ecoregion][i] = 0.0;

                if (ecoregion.Active)
                {
                    Climate.GenerateEcoregionClimateData(ecoregion, 0, Latitude[ecoregion], FieldCapacity[ecoregion], WiltingPoint[ecoregion]);
                    SetSingleAnnualClimate(ecoregion, 0, Climate.Phase.SpinUp_Climate);  // Some placeholder data to get things started.
                }
            }
        }
コード例 #23
0
        //---------------------------------------------------------------------
        public static void Initialize(IParameters           parameters,
                                      ISiteVar<SiteCohorts> cohorts)
        {
            minRelativeBiomass = parameters.MinRelativeBiomass; // FIXME

            LeafLongevity = parameters.LeafLongevity;
            MortCurveShapeParm = parameters.MortCurveShapeParm;
            EstablishProbability = parameters.EstablishProbability;
            ANPP_MAX_i = parameters.MaxANPP;

            B_MAX_i = new Species.AuxParm<Ecoregions.AuxParm<int>>(Model.Core.Species);
            foreach (ISpecies species in Model.Core.Species) {
                B_MAX_i[species] = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);
                foreach (IEcoregion ecoregion in Model.Core.Ecoregions) {
                    B_MAX_i[species][ecoregion] = ComputeMaxBiomass(ANPP_MAX_i[species][ecoregion]);
                }
            }

            B_MAX = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);
            foreach (IEcoregion ecoregion in Model.Core.Ecoregions) {
                int largest_ANPP_MAX_i = 0;
                foreach (ISpecies species in Model.Core.Species) {
                    largest_ANPP_MAX_i = Math.Max(largest_ANPP_MAX_i,
                                                  ANPP_MAX_i[species][ecoregion]);
                }
                B_MAX[ecoregion] = ComputeMaxBiomass(largest_ANPP_MAX_i);
            }

            LivingBiomass.cohorts = cohorts;
            successionTimestep = parameters.Timestep;
        }
コード例 #24
0
        //---------------------------------------------------------------------
        public static void Initialize(IParameters           parameters,
            ISiteVar<SiteCohorts> cohorts)
        {
            B_MAX_i = new Species.AuxParm<Ecoregions.AuxParm<int>>(Model.Core.Species);
            B_MAX = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);
            ChangeParameters(parameters);

            LivingBiomass.cohorts = cohorts;
            successionTimestep = parameters.Timestep;
        }
コード例 #25
0
        //---------------------------------------------------------------------
        /// <summary>
        /// Changes the biomass parameters because of a change in climate.
        /// </summary>
        public static void ChangeParameters(ClimateChange.IParameters parameters)
        {
            minRelativeBiomass = parameters.MinRelativeBiomass; // FIXME

            LeafLongevity = parameters.LeafLongevity;
            MortCurveShapeParm = parameters.MortCurveShapeParm;
            EstablishProbability = parameters.EstablishProbability;
            ANPP_MAX_i = parameters.MaxANPP;

            //  Fill in B_MAX_i table
            foreach (ISpecies species in Model.Core.Species) {
                B_MAX_i[species] = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions);
                foreach (IEcoregion ecoregion in Model.Core.Ecoregions) {
                    B_MAX_i[species][ecoregion] = ComputeMaxBiomass(ANPP_MAX_i[species][ecoregion]);
                }
            }

            //  Fill in B_MAX array
            foreach (IEcoregion ecoregion in Model.Core.Ecoregions) {
                int largest_ANPP_MAX_i = 0;
                foreach (ISpecies species in Model.Core.Species) {
                    largest_ANPP_MAX_i = Math.Max(largest_ANPP_MAX_i,
                                                  ANPP_MAX_i[species][ecoregion]);
                }
                B_MAX[ecoregion] = ComputeMaxBiomass(largest_ANPP_MAX_i);
            }
        }