//--------------------------------------------------------------------- protected override void AgeCohorts(ActiveSite site, ushort years, int?successionTimestep) { // Date starts at 1/15/Year DateTime date = new DateTime(PlugIn.StartDate.Year + PlugIn.ModelCore.CurrentTime - Timestep, 1, 15); DateTime EndDate = date.AddYears(years); IEcoregionPnET ecoregion_pnet = EcoregionData.GetPnETEcoregion(PlugIn.ModelCore.Ecoregion[site]); List <IEcoregionPnETVariables> climate_vars = UsingClimateLibrary ? EcoregionData.GetClimateRegionData(ecoregion_pnet, date, EndDate, Climate.Phase.Future_Climate) : EcoregionData.GetData(ecoregion_pnet, date, EndDate); SiteVars.SiteCohorts[site].Grow(climate_vars); SiteVars.SiteCohorts[site].DisturbanceTypesReduced.Clear(); Date = EndDate; }
//--------------------------------------------------------------------- public override void Initialize() { PlugIn.ModelCore.UI.WriteLine("Initializing " + Names.ExtensionName + " version " + typeof(PlugIn).Assembly.GetName().Version); Cohort.DeathEvent += DeathEvent; Globals.InitializeCore(ModelCore, ((Parameter <ushort>)Names.GetParameter(Names.IMAX)).Value); EcoregionData.Initialize(); SiteVars.Initialize(); Landis.Utilities.Directory.EnsureExists("output"); Timestep = ((Parameter <int>)Names.GetParameter(Names.Timestep)).Value; Parameter <string> CohortBinSizeParm = null; if (Names.TryGetParameter(Names.CohortBinSize, out CohortBinSizeParm)) { if (Int32.TryParse(CohortBinSizeParm.Value, out CohortBinSize)) { if (CohortBinSize < Timestep) { throw new System.Exception("CohortBinSize cannot be smaller than Timestep."); } else { PlugIn.ModelCore.UI.WriteLine("Succession timestep = " + Timestep + "; CohortBinSize = " + CohortBinSize + "."); } } else { throw new System.Exception("CohortBinSize is not an integer value."); } } else { CohortBinSize = Timestep; } string Parallel = ((Parameter <string>)Names.GetParameter(Names.Parallel)).Value; if (Parallel == "false") { ParallelThreads = 1; PlugIn.ModelCore.UI.WriteLine(" MaxParallelThreads = " + ParallelThreads.ToString() + "."); } else if (Parallel == "true") { ParallelThreads = -1; PlugIn.ModelCore.UI.WriteLine(" MaxParallelThreads determined by system."); } else { if (Int32.TryParse(Parallel, out ParallelThreads)) { if (ParallelThreads < 1) { throw new System.Exception("Parallel cannot be < 1."); } else { PlugIn.ModelCore.UI.WriteLine(" MaxParallelThreads = " + ParallelThreads.ToString() + "."); } } else { throw new System.Exception("Parallel must be 'true', 'false' or an integer >= 1."); } } this.ThreadCount = ParallelThreads; FTimeStep = 1.0F / Timestep; //Latitude = ((Parameter<float>)PlugIn.GetParameter(Names.Latitude, 0, 90)).Value; // Now an ecoregion parameter ObservedClimate.Initialize(); SpeciesPnET = new SpeciesPnET(); Landis.Library.PnETCohorts.SpeciesParameters.LoadParameters(SpeciesPnET); Hydrology.Initialize(); SiteCohorts.Initialize(); string PARunits = ((Parameter <string>)Names.GetParameter(Names.PARunits)).Value; if (PARunits != "umol" && PARunits != "W/m2") { throw new System.Exception("PARunits are not 'umol' or 'W/m2'."); } InitializeClimateLibrary(); // John McNabb: initialize climate library after EcoregionPnET has been initialized //EstablishmentProbability.Initialize(Timestep); // Not used // Initialize Reproduction routines: Reproduction.SufficientResources = SufficientResources; Reproduction.Establish = Establish; Reproduction.AddNewCohort = AddNewCohort; Reproduction.MaturePresent = MaturePresent; Reproduction.PlantingEstablish = PlantingEstablish; SeedingAlgorithms SeedAlgorithm = (SeedingAlgorithms)Enum.Parse(typeof(SeedingAlgorithms), Names.parameters["SeedingAlgorithm"].Value); base.Initialize(ModelCore, SeedAlgorithm); StartDate = new DateTime(((Parameter <int>)Names.GetParameter(Names.StartYear)).Value, 1, 15); PlugIn.ModelCore.UI.WriteLine("Spinning up biomass or reading from maps..."); string InitialCommunitiesTXTFile = Names.GetParameter(Names.InitialCommunities).Value; string InitialCommunitiesMapFile = Names.GetParameter(Names.InitialCommunitiesMap).Value; InitialCommunitiesSpinup = Names.GetParameter(Names.InitialCommunitiesSpinup).Value; Parameter <string> LitterMapFile; bool litterMapFile = Names.TryGetParameter(Names.LitterMap, out LitterMapFile); Parameter <string> WoodyDebrisMapFile; bool woodyDebrisMapFile = Names.TryGetParameter(Names.WoodyDebrisMap, out WoodyDebrisMapFile); InitializeSites(InitialCommunitiesTXTFile, InitialCommunitiesMapFile, ModelCore); if (litterMapFile) { MapReader.ReadLitterFromMap(LitterMapFile.Value); } if (woodyDebrisMapFile) { MapReader.ReadWoodyDebrisFromMap(WoodyDebrisMapFile.Value); } // Convert PnET cohorts to biomasscohorts ISiteVar <Landis.Library.BiomassCohorts.ISiteCohorts> biomassCohorts = PlugIn.ModelCore.Landscape.NewSiteVar <Landis.Library.BiomassCohorts.ISiteCohorts>(); foreach (ActiveSite site in PlugIn.ModelCore.Landscape) { biomassCohorts[site] = SiteVars.SiteCohorts[site]; if (SiteVars.SiteCohorts[site] != null && biomassCohorts[site] == null) { throw new System.Exception("Cannot convert PnET SiteCohorts to biomass site cohorts"); } } ModelCore.RegisterSiteVar(biomassCohorts, "Succession.BiomassCohorts"); ISiteVar <Landis.Library.AgeOnlyCohorts.ISiteCohorts> AgeCohortSiteVar = PlugIn.ModelCore.Landscape.NewSiteVar <Landis.Library.AgeOnlyCohorts.ISiteCohorts>(); ISiteVar <ISiteCohorts> PnETCohorts = PlugIn.ModelCore.Landscape.NewSiteVar <ISiteCohorts>(); foreach (ActiveSite site in PlugIn.ModelCore.Landscape) { AgeCohortSiteVar[site] = SiteVars.SiteCohorts[site]; PnETCohorts[site] = SiteVars.SiteCohorts[site]; SiteVars.FineFuels[site] = SiteVars.Litter[site].Mass; IEcoregionPnET ecoregion = EcoregionData.GetPnETEcoregion(PlugIn.ModelCore.Ecoregion[site]); IHydrology hydrology = new Hydrology(ecoregion.FieldCap); SiteVars.PressureHead[site] = hydrology.GetPressureHead(ecoregion); if (UsingClimateLibrary) { SiteVars.ExtremeMinTemp[site] = ((float)Enumerable.Min(Climate.Future_MonthlyData[Climate.Future_MonthlyData.Keys.Min()][ecoregion.Index].MonthlyTemp) - (float)(3.0 * ecoregion.WinterSTD)); } else { SiteVars.ExtremeMinTemp[site] = 999; } } ModelCore.RegisterSiteVar(AgeCohortSiteVar, "Succession.AgeCohorts"); ModelCore.RegisterSiteVar(PnETCohorts, "Succession.CohortsPnET"); }