//--------------------------------------------------------------------- // 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; } } }
//--------------------------------------------------------------------- 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. } } }
//--------------------------------------------------------------------- public static void Initialize(IParameters parameters) { MinRelativeBiomass = parameters.MinRelativeBiomass; B_MAX = new Ecoregions.AuxParm<int>(Model.Core.Ecoregions); ChangeParameters(parameters); }
//--------------------------------------------------------------------- public static void UpdateParameters(DynamicChange.IInputParameters parameters) { DepositionN = parameters.DepositionN; DepositionP = parameters.DepositionP; AET = parameters.AET; WeatheringP = parameters.WeatheringP; MinRelativeBiomass = parameters.MinRelativeBiomass; }
//--------------------------------------------------------------------- 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]++; } }
//--------------------------------------------------------------------- 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); }
//--------------------------------------------------------------------- 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); }
//--------------------------------------------------------------------- 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); }
//--------------------------------------------------------------------- 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]++; } }
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; } }
//--------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------- 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; } } }
//--------------------------------------------------------------------- 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>(); }
//--------------------------------------------------------------------- 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; } } }
//--------------------------------------------------------------------- // 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; } } }
//--------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------- public static void UpdateParameters(DynamicChange.IInputParameters parameters) { DecayRateSOM = parameters.DecayRateSOM; }
//--------------------------------------------------------------------- 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; } }
// 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. } } }
//--------------------------------------------------------------------- //--------------------------------------------------------------------- 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>(); }
//--------------------------------------------------------------------- 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. } } }
//--------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------- /// <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); } }