//--------------------------------------------------------------------- public static void WritePrimaryLogFile(int CurrentTime) { double[] avgAnnualPPT = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgJJAtemp = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNEEc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOMtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgAGB = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgAGNPPtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgBGNPPtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgLittertc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodMortality = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgMineralN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgGrossMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgTotalN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortLeafC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortFRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortWoodC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortCRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortLeafN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortFRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortWoodN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortCRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2C = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3C = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2N = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3N = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2NetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3NetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; //double[] avgNDeposition = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgStreamC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgStreamN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgFireCEfflux = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgFireNEfflux = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNvol = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNresorbed = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgTotalSoilN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNuptake = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgfrassC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avglai = new double[PlugIn.ModelCore.Ecoregions.Count]; foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) { avgAnnualPPT[ecoregion.Index] = 0.0; avgJJAtemp[ecoregion.Index] = 0.0; avgNEEc[ecoregion.Index] = 0.0; avgSOMtc[ecoregion.Index] = 0.0; avgAGB[ecoregion.Index] = 0.0; avgAGNPPtc[ecoregion.Index] = 0.0; avgBGNPPtc[ecoregion.Index] = 0.0; avgLittertc[ecoregion.Index] = 0.0; avgWoodMortality[ecoregion.Index] = 0.0; avgMineralN[ecoregion.Index] = 0.0; avgGrossMin[ecoregion.Index] = 0.0; avgTotalN[ecoregion.Index] = 0.0; avgCohortLeafC[ecoregion.Index] = 0.0; avgCohortFRootC[ecoregion.Index] = 0.0; avgCohortWoodC[ecoregion.Index] = 0.0; avgCohortCRootC[ecoregion.Index] = 0.0; avgWoodC[ecoregion.Index] = 0.0; avgCRootC[ecoregion.Index] = 0.0; avgSurfStrucC[ecoregion.Index] = 0.0; avgSurfMetaC[ecoregion.Index] = 0.0; avgSoilStrucC[ecoregion.Index] = 0.0; avgSoilMetaC[ecoregion.Index] = 0.0; avgCohortLeafN[ecoregion.Index] = 0.0; avgCohortFRootN[ecoregion.Index] = 0.0; avgCohortWoodN[ecoregion.Index] = 0.0; avgCohortCRootN[ecoregion.Index] = 0.0; avgWoodN[ecoregion.Index] = 0.0; avgCRootN[ecoregion.Index] = 0.0; avgSurfStrucN[ecoregion.Index] = 0.0; avgSurfMetaN[ecoregion.Index] = 0.0; avgSoilStrucN[ecoregion.Index] = 0.0; avgSoilMetaN[ecoregion.Index] = 0.0; avgSurfStrucNetMin[ecoregion.Index] = 0.0; avgSurfMetaNetMin[ecoregion.Index] = 0.0; avgSoilStrucNetMin[ecoregion.Index] = 0.0; avgSoilMetaNetMin[ecoregion.Index] = 0.0; avgSOM1surfC[ecoregion.Index] = 0.0; avgSOM1soilC[ecoregion.Index] = 0.0; avgSOM2C[ecoregion.Index] = 0.0; avgSOM3C[ecoregion.Index] = 0.0; avgSOM1surfN[ecoregion.Index] = 0.0; avgSOM1soilN[ecoregion.Index] = 0.0; avgSOM2N[ecoregion.Index] = 0.0; avgSOM3N[ecoregion.Index] = 0.0; avgSOM1surfNetMin[ecoregion.Index] = 0.0; avgSOM1soilNetMin[ecoregion.Index] = 0.0; avgSOM2NetMin[ecoregion.Index] = 0.0; avgSOM3NetMin[ecoregion.Index] = 0.0; //avgNDeposition[ecoregion.Index] = 0.0; avgStreamC[ecoregion.Index] = 0.0; avgStreamN[ecoregion.Index] = 0.0; avgFireCEfflux[ecoregion.Index] = 0.0; avgFireNEfflux[ecoregion.Index] = 0.0; avgNuptake[ecoregion.Index] = 0.0; avgNresorbed[ecoregion.Index] = 0.0; avgTotalSoilN[ecoregion.Index] = 0.0; avgNvol[ecoregion.Index] = 0.0; avgfrassC[ecoregion.Index] = 0.0; } foreach (ActiveSite site in PlugIn.ModelCore.Landscape) { IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site]; avgNEEc[ecoregion.Index] += SiteVars.AnnualNEE[site]; avgSOMtc[ecoregion.Index] += GetOrganicCarbon(site); avgAGB[ecoregion.Index] += Main.ComputeLivingBiomass(SiteVars.Cohorts[site]); avgAGNPPtc[ecoregion.Index] += SiteVars.AGNPPcarbon[site]; avgBGNPPtc[ecoregion.Index] += SiteVars.BGNPPcarbon[site]; avgLittertc[ecoregion.Index] += SiteVars.LitterfallC[site]; avgWoodMortality[ecoregion.Index] += SiteVars.WoodMortality[site] * 0.47; avgMineralN[ecoregion.Index] += SiteVars.MineralN[site]; avgTotalN[ecoregion.Index] += GetTotalNitrogen(site); avgGrossMin[ecoregion.Index] += SiteVars.GrossMineralization[site]; avgCohortLeafC[ecoregion.Index] += SiteVars.CohortLeafC[site]; avgCohortFRootC[ecoregion.Index] += SiteVars.CohortFRootC[site]; avgCohortWoodC[ecoregion.Index] += SiteVars.CohortWoodC[site]; avgCohortCRootC[ecoregion.Index] += SiteVars.CohortCRootC[site]; avgWoodC[ecoregion.Index] += SiteVars.SurfaceDeadWood[site].Carbon; avgCRootC[ecoregion.Index] += SiteVars.SoilDeadWood[site].Carbon; avgSurfStrucC[ecoregion.Index] += SiteVars.SurfaceStructural[site].Carbon; avgSurfMetaC[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].Carbon; avgSoilStrucC[ecoregion.Index] += SiteVars.SoilStructural[site].Carbon; avgSoilMetaC[ecoregion.Index] += SiteVars.SoilMetabolic[site].Carbon; avgSOM1surfC[ecoregion.Index] += SiteVars.SOM1surface[site].Carbon; avgSOM1soilC[ecoregion.Index] += SiteVars.SOM1soil[site].Carbon; avgSOM2C[ecoregion.Index] += SiteVars.SOM2[site].Carbon; avgSOM3C[ecoregion.Index] += SiteVars.SOM3[site].Carbon; avgCohortLeafN[ecoregion.Index] += SiteVars.CohortLeafN[site]; avgCohortFRootN[ecoregion.Index] += SiteVars.CohortFRootN[site]; avgCohortWoodN[ecoregion.Index] += SiteVars.CohortWoodN[site]; avgCohortCRootN[ecoregion.Index] += SiteVars.CohortCRootN[site]; avgWoodN[ecoregion.Index] += SiteVars.SurfaceDeadWood[site].Nitrogen; avgCRootN[ecoregion.Index] += SiteVars.SoilDeadWood[site].Nitrogen; avgSurfStrucN[ecoregion.Index] += SiteVars.SurfaceStructural[site].Nitrogen; avgSurfMetaN[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].Nitrogen; avgSoilStrucN[ecoregion.Index] += SiteVars.SoilStructural[site].Nitrogen; avgSoilMetaN[ecoregion.Index] += SiteVars.SoilMetabolic[site].Nitrogen; avgSOM1surfN[ecoregion.Index] += SiteVars.SOM1surface[site].Nitrogen; avgSOM1soilN[ecoregion.Index] += SiteVars.SOM1soil[site].Nitrogen; avgSOM2N[ecoregion.Index] += SiteVars.SOM2[site].Nitrogen; avgSOM3N[ecoregion.Index] += SiteVars.SOM3[site].Nitrogen; avgTotalSoilN[ecoregion.Index] += GetTotalSoilNitrogen(site); avgSurfStrucNetMin[ecoregion.Index] += SiteVars.SurfaceStructural[site].NetMineralization; avgSurfMetaNetMin[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].NetMineralization; avgSoilStrucNetMin[ecoregion.Index] += SiteVars.SoilStructural[site].NetMineralization; avgSoilMetaNetMin[ecoregion.Index] += SiteVars.SoilMetabolic[site].NetMineralization; avgSOM1surfNetMin[ecoregion.Index] += SiteVars.SOM1surface[site].NetMineralization; avgSOM1soilNetMin[ecoregion.Index] += SiteVars.SOM1soil[site].NetMineralization; avgSOM2NetMin[ecoregion.Index] += SiteVars.SOM2[site].NetMineralization; avgSOM3NetMin[ecoregion.Index] += SiteVars.SOM3[site].NetMineralization; //avgNDeposition[ecoregion.Index] = EcoregionData.AnnualNDeposition[ecoregion]; avgStreamC[ecoregion.Index] += SiteVars.Stream[site].Carbon; avgStreamN[ecoregion.Index] += SiteVars.Stream[site].Nitrogen; //+ SiteVars.NLoss[site]; avgFireCEfflux[ecoregion.Index] += SiteVars.FireCEfflux[site]; avgFireNEfflux[ecoregion.Index] += SiteVars.FireNEfflux[site]; avgNresorbed[ecoregion.Index] += SiteVars.ResorbedN[site]; avgNuptake[ecoregion.Index] += GetSoilNuptake(site); avgNvol[ecoregion.Index] += SiteVars.Nvol[site]; avgfrassC[ecoregion.Index] += SiteVars.FrassC[site]; } foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) { if (!ecoregion.Active) continue; //if(EcoregionData.ActiveSiteCount[ecoregion] > 0) //{ primaryLog.Clear(); PrimaryLog pl = new PrimaryLog(); //primary.AddObject(new PrimaryLog()); // { EcoregionName = ecoregion.Name }); //log.Write("{0}, {1}, {2}, ", pl.Time = CurrentTime; pl.EcoregionName = ecoregion.Name; pl.EcoregionIndex = ecoregion.Index; pl.NumSites = EcoregionData.ActiveSiteCount[ecoregion]; pl.NEEC = (avgNEEc[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SOMTC = (avgSOMtc[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.AGB = (avgAGB[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.00}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.AG_NPPC = (avgAGNPPtc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.BG_NPPC = (avgBGNPPtc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Litterfall = (avgLittertc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.AgeMortality = (avgWoodMortality[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, ", pl.MineralN = (avgMineralN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalN = (avgTotalN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.GrossMineralization = (avgGrossMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalNdep = (EcoregionData.AnnualNDeposition[ecoregion] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.C_Leaf = (avgCohortLeafC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_FRoot = (avgCohortFRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_Wood = (avgCohortWoodC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_CRoot = (avgCohortCRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadWood = (avgWoodC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadCRoot = (avgCRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.C_DeadLeaf_Struc = (avgSurfStrucC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadLeaf_Meta = (avgSurfMetaC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadFRoot_Struc = (avgSoilStrucC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadFRoot_Meta = (avgSoilMetaC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.C_SOM1surf = (avgSOM1surfC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM1soil = (avgSOM1soilC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM2 = (avgSOM2C[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM3 = (avgSOM3C[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.00}, {1:0.00}, {2:0.00}, {3:0.00}, ", pl.N_Leaf = (avgCohortLeafN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_FRoot = (avgCohortFRootN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_Wood = (avgCohortWoodN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_CRoot = (avgCohortCRootN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadWood = (avgWoodN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadCRoot = (avgCRootN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.00}, {1:0.00}, {2:0.00}, {3:0.00}, ", pl.N_DeadLeaf_Struc = (avgSurfStrucN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadLeaf_Meta = (avgSurfMetaN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadFRoot_Struc = (avgSoilStrucN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadFRoot_Meta = (avgSoilMetaN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.00}, {1:0.00}, {2:0.00}, {3:0.00}, ", pl.N_SOM1surf = (avgSOM1surfN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM1soil = (avgSOM1soilN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM2 = (avgSOM2N[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM3 = (avgSOM3N[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.SurfStrucNetMin = (avgSurfStrucNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SurfMetaNetMin = (avgSurfMetaNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SoilStrucNetMin = (avgSoilStrucNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SoilMetaNetMin = (avgSoilMetaNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}, ", pl.SOM1surfNetMin = (avgSOM1surfNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM1soilNetMin = (avgSOM1soilNetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM2NetMin = (avgSOM2NetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM3NetMin = (avgSOM3NetMin[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0000}, {1:0.0000}, {2:0.000}, {3:0.0}, ", //pl.NitrogenDeposition = (EcoregionData.AnnualNDeposition[ecoregion] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.StreamC = (avgStreamC[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.StreamN = (avgStreamN[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.FireCEfflux = (avgFireCEfflux[ecoregion.Index] / (double) EcoregionData.ActiveSiteCount[ecoregion]); pl.FireNEfflux = (avgFireNEfflux[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0000}, {1:0.0000}, {2:0.000}, {3:0.0}, ", pl.Nuptake = (avgNuptake[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Nresorbed = (avgNresorbed[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalSoilN = (avgTotalSoilN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Nvol = (avgNvol[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.Write("{0:0.0000}, ", pl.FrassC = (avgfrassC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); //); //log.WriteLine(""); primaryLog.AddObject(pl); primaryLog.WriteToFile(); //} } //Reset back to zero: //These are being reset here because fire effects are handled in the first year of the //growth loop but the reporting doesn't happen until after all growth is finished. SiteVars.FireCEfflux.ActiveSiteValues = 0.0; SiteVars.FireNEfflux.ActiveSiteValues = 0.0; }
//--------------------------------------------------------------------- public static void WritePrimaryLogFile(int CurrentTime) { double[] avgAnnualPPT = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgJJAtemp = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNEEc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOMtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgAGB = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgAGNPPtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgBGNPPtc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgLittertc = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodMortality = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgMineralN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgGrossMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgTotalN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortLeafC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortFRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortWoodC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortCRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCRootC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortLeafN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortFRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortWoodN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCohortCRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgWoodN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgCRootN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfStrucNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSurfMetaNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilStrucNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSoilMetaNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2C = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3C = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2N = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3N = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1surfNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM1soilNetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM2NetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgSOM3NetMin = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgStreamC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgStreamN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgFireCEfflux = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgFireNEfflux = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNvol = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNresorbed = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgTotalSoilN = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgNuptake = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avgfrassC = new double[PlugIn.ModelCore.Ecoregions.Count]; double[] avglai = new double[PlugIn.ModelCore.Ecoregions.Count]; foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) { avgAnnualPPT[ecoregion.Index] = 0.0; avgJJAtemp[ecoregion.Index] = 0.0; avgNEEc[ecoregion.Index] = 0.0; avgSOMtc[ecoregion.Index] = 0.0; avgAGB[ecoregion.Index] = 0.0; avgAGNPPtc[ecoregion.Index] = 0.0; avgBGNPPtc[ecoregion.Index] = 0.0; avgLittertc[ecoregion.Index] = 0.0; avgWoodMortality[ecoregion.Index] = 0.0; avgMineralN[ecoregion.Index] = 0.0; avgGrossMin[ecoregion.Index] = 0.0; avgTotalN[ecoregion.Index] = 0.0; avgCohortLeafC[ecoregion.Index] = 0.0; avgCohortFRootC[ecoregion.Index] = 0.0; avgCohortWoodC[ecoregion.Index] = 0.0; avgCohortCRootC[ecoregion.Index] = 0.0; avgWoodC[ecoregion.Index] = 0.0; avgCRootC[ecoregion.Index] = 0.0; avgSurfStrucC[ecoregion.Index] = 0.0; avgSurfMetaC[ecoregion.Index] = 0.0; avgSoilStrucC[ecoregion.Index] = 0.0; avgSoilMetaC[ecoregion.Index] = 0.0; avgCohortLeafN[ecoregion.Index] = 0.0; avgCohortFRootN[ecoregion.Index] = 0.0; avgCohortWoodN[ecoregion.Index] = 0.0; avgCohortCRootN[ecoregion.Index] = 0.0; avgWoodN[ecoregion.Index] = 0.0; avgCRootN[ecoregion.Index] = 0.0; avgSurfStrucN[ecoregion.Index] = 0.0; avgSurfMetaN[ecoregion.Index] = 0.0; avgSoilStrucN[ecoregion.Index] = 0.0; avgSoilMetaN[ecoregion.Index] = 0.0; avgSurfStrucNetMin[ecoregion.Index] = 0.0; avgSurfMetaNetMin[ecoregion.Index] = 0.0; avgSoilStrucNetMin[ecoregion.Index] = 0.0; avgSoilMetaNetMin[ecoregion.Index] = 0.0; avgSOM1surfC[ecoregion.Index] = 0.0; avgSOM1soilC[ecoregion.Index] = 0.0; avgSOM2C[ecoregion.Index] = 0.0; avgSOM3C[ecoregion.Index] = 0.0; avgSOM1surfN[ecoregion.Index] = 0.0; avgSOM1soilN[ecoregion.Index] = 0.0; avgSOM2N[ecoregion.Index] = 0.0; avgSOM3N[ecoregion.Index] = 0.0; avgSOM1surfNetMin[ecoregion.Index] = 0.0; avgSOM1soilNetMin[ecoregion.Index] = 0.0; avgSOM2NetMin[ecoregion.Index] = 0.0; avgSOM3NetMin[ecoregion.Index] = 0.0; //avgNDeposition[ecoregion.Index] = 0.0; avgStreamC[ecoregion.Index] = 0.0; avgStreamN[ecoregion.Index] = 0.0; avgFireCEfflux[ecoregion.Index] = 0.0; avgFireNEfflux[ecoregion.Index] = 0.0; avgNuptake[ecoregion.Index] = 0.0; avgNresorbed[ecoregion.Index] = 0.0; avgTotalSoilN[ecoregion.Index] = 0.0; avgNvol[ecoregion.Index] = 0.0; avgfrassC[ecoregion.Index] = 0.0; } foreach (ActiveSite site in PlugIn.ModelCore.Landscape) { IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site]; avgNEEc[ecoregion.Index] += SiteVars.AnnualNEE[site]; avgSOMtc[ecoregion.Index] += GetOrganicCarbon(site); avgAGB[ecoregion.Index] += Main.ComputeLivingBiomass(SiteVars.Cohorts[site]); avgAGNPPtc[ecoregion.Index] += SiteVars.AGNPPcarbon[site]; avgBGNPPtc[ecoregion.Index] += SiteVars.BGNPPcarbon[site]; avgLittertc[ecoregion.Index] += SiteVars.LitterfallC[site]; avgWoodMortality[ecoregion.Index] += SiteVars.WoodMortality[site] * 0.47; avgMineralN[ecoregion.Index] += SiteVars.MineralN[site]; avgTotalN[ecoregion.Index] += GetTotalNitrogen(site); avgGrossMin[ecoregion.Index] += SiteVars.GrossMineralization[site]; avgCohortLeafC[ecoregion.Index] += SiteVars.CohortLeafC[site]; avgCohortFRootC[ecoregion.Index] += SiteVars.CohortFRootC[site]; avgCohortWoodC[ecoregion.Index] += SiteVars.CohortWoodC[site]; avgCohortCRootC[ecoregion.Index] += SiteVars.CohortCRootC[site]; avgWoodC[ecoregion.Index] += SiteVars.SurfaceDeadWood[site].Carbon; avgCRootC[ecoregion.Index] += SiteVars.SoilDeadWood[site].Carbon; avgSurfStrucC[ecoregion.Index] += SiteVars.SurfaceStructural[site].Carbon; avgSurfMetaC[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].Carbon; avgSoilStrucC[ecoregion.Index] += SiteVars.SoilStructural[site].Carbon; avgSoilMetaC[ecoregion.Index] += SiteVars.SoilMetabolic[site].Carbon; avgSOM1surfC[ecoregion.Index] += SiteVars.SOM1surface[site].Carbon; avgSOM1soilC[ecoregion.Index] += SiteVars.SOM1soil[site].Carbon; avgSOM2C[ecoregion.Index] += SiteVars.SOM2[site].Carbon; avgSOM3C[ecoregion.Index] += SiteVars.SOM3[site].Carbon; avgCohortLeafN[ecoregion.Index] += SiteVars.CohortLeafN[site]; avgCohortFRootN[ecoregion.Index] += SiteVars.CohortFRootN[site]; avgCohortWoodN[ecoregion.Index] += SiteVars.CohortWoodN[site]; avgCohortCRootN[ecoregion.Index] += SiteVars.CohortCRootN[site]; avgWoodN[ecoregion.Index] += SiteVars.SurfaceDeadWood[site].Nitrogen; avgCRootN[ecoregion.Index] += SiteVars.SoilDeadWood[site].Nitrogen; avgSurfStrucN[ecoregion.Index] += SiteVars.SurfaceStructural[site].Nitrogen; avgSurfMetaN[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].Nitrogen; avgSoilStrucN[ecoregion.Index] += SiteVars.SoilStructural[site].Nitrogen; avgSoilMetaN[ecoregion.Index] += SiteVars.SoilMetabolic[site].Nitrogen; avgSOM1surfN[ecoregion.Index] += SiteVars.SOM1surface[site].Nitrogen; avgSOM1soilN[ecoregion.Index] += SiteVars.SOM1soil[site].Nitrogen; avgSOM2N[ecoregion.Index] += SiteVars.SOM2[site].Nitrogen; avgSOM3N[ecoregion.Index] += SiteVars.SOM3[site].Nitrogen; avgTotalSoilN[ecoregion.Index] += GetTotalSoilNitrogen(site); avgSurfStrucNetMin[ecoregion.Index] += SiteVars.SurfaceStructural[site].NetMineralization; avgSurfMetaNetMin[ecoregion.Index] += SiteVars.SurfaceMetabolic[site].NetMineralization; avgSoilStrucNetMin[ecoregion.Index] += SiteVars.SoilStructural[site].NetMineralization; avgSoilMetaNetMin[ecoregion.Index] += SiteVars.SoilMetabolic[site].NetMineralization; avgSOM1surfNetMin[ecoregion.Index] += SiteVars.SOM1surface[site].NetMineralization; avgSOM1soilNetMin[ecoregion.Index] += SiteVars.SOM1soil[site].NetMineralization; avgSOM2NetMin[ecoregion.Index] += SiteVars.SOM2[site].NetMineralization; avgSOM3NetMin[ecoregion.Index] += SiteVars.SOM3[site].NetMineralization; //avgNDeposition[ecoregion.Index] = EcoregionData.AnnualNDeposition[ecoregion]; avgStreamC[ecoregion.Index] += SiteVars.Stream[site].Carbon; avgStreamN[ecoregion.Index] += SiteVars.Stream[site].Nitrogen; avgFireCEfflux[ecoregion.Index] += SiteVars.FireCEfflux[site]; avgFireNEfflux[ecoregion.Index] += SiteVars.FireNEfflux[site]; avgNresorbed[ecoregion.Index] += SiteVars.ResorbedN[site]; avgNuptake[ecoregion.Index] += GetSoilNuptake(site); avgNvol[ecoregion.Index] += SiteVars.Nvol[site]; avgfrassC[ecoregion.Index] += SiteVars.FrassC[site]; } foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) { if (!ecoregion.Active) { continue; } primaryLog.Clear(); PrimaryLog pl = new PrimaryLog(); pl.Time = CurrentTime; pl.EcoregionName = ecoregion.Name; pl.EcoregionIndex = ecoregion.Index; pl.NumSites = EcoregionData.ActiveSiteCount[ecoregion]; pl.NEEC = (avgNEEc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SOMTC = (avgSOMtc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.AGB = (avgAGB[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.AG_NPPC = (avgAGNPPtc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.BG_NPPC = (avgBGNPPtc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Litterfall = (avgLittertc[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.AgeMortality = (avgWoodMortality[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.MineralN = (avgMineralN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalN = (avgTotalN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.GrossMineralization = (avgGrossMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalNdep = (EcoregionData.AnnualNDeposition[ecoregion] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_Leaf = (avgCohortLeafC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_FRoot = (avgCohortFRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_Wood = (avgCohortWoodC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_CRoot = (avgCohortCRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadWood = (avgWoodC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadCRoot = (avgCRootC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadLeaf_Struc = (avgSurfStrucC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadLeaf_Meta = (avgSurfMetaC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadFRoot_Struc = (avgSoilStrucC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_DeadFRoot_Meta = (avgSoilMetaC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM1surf = (avgSOM1surfC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM1soil = (avgSOM1soilC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM2 = (avgSOM2C[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.C_SOM3 = (avgSOM3C[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_Leaf = (avgCohortLeafN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_FRoot = (avgCohortFRootN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_Wood = (avgCohortWoodN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_CRoot = (avgCohortCRootN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadWood = (avgWoodN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadCRoot = (avgCRootN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadLeaf_Struc = (avgSurfStrucN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadLeaf_Meta = (avgSurfMetaN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadFRoot_Struc = (avgSoilStrucN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_DeadFRoot_Meta = (avgSoilMetaN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM1surf = (avgSOM1surfN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM1soil = (avgSOM1soilN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM2 = (avgSOM2N[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.N_SOM3 = (avgSOM3N[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SurfStrucNetMin = (avgSurfStrucNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SurfMetaNetMin = (avgSurfMetaNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SoilStrucNetMin = (avgSoilStrucNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SoilMetaNetMin = (avgSoilMetaNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM1surfNetMin = (avgSOM1surfNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM1soilNetMin = (avgSOM1soilNetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM2NetMin = (avgSOM2NetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.SOM3NetMin = (avgSOM3NetMin[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.StreamC = (avgStreamC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.StreamN = (avgStreamN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.FireCEfflux = (avgFireCEfflux[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.FireNEfflux = (avgFireNEfflux[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Nuptake = (avgNuptake[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Nresorbed = (avgNresorbed[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.TotalSoilN = (avgTotalSoilN[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.Nvol = (avgNvol[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); pl.FrassC = (avgfrassC[ecoregion.Index] / (double)EcoregionData.ActiveSiteCount[ecoregion]); primaryLog.AddObject(pl); primaryLog.WriteToFile(); } //Reset back to zero: //These are being reset here because fire effects are handled in the first year of the //growth loop but the reporting doesn't happen until after all growth is finished. SiteVars.FireCEfflux.ActiveSiteValues = 0.0; SiteVars.FireNEfflux.ActiveSiteValues = 0.0; }