public FireEffects(int numberOfSeverities) { ReductionsTable = new FireReductions[numberOfSeverities + 1]; //will ignore zero for (int i = 0; i <= numberOfSeverities; i++) { ReductionsTable[i] = new FireReductions(); } }
//--------------------------------------------------------------------- protected override IInputParameters Parse() { ReadLandisDataVar(); int numLitterTypes = 4; int numFunctionalTypes = 25; InputParameters parameters = new InputParameters(speciesDataset, numLitterTypes, numFunctionalTypes); InputVar <int> timestep = new InputVar <int>("Timestep"); ReadVar(timestep); parameters.Timestep = timestep.Value; InputVar <SeedingAlgorithms> seedAlg = new InputVar <SeedingAlgorithms>("SeedingAlgorithm"); ReadVar(seedAlg); parameters.SeedAlgorithm = seedAlg.Value; //--------------------------------------------------------------------------------- InputVar <string> initCommunities = new InputVar <string>("InitialCommunities"); ReadVar(initCommunities); parameters.InitialCommunities = initCommunities.Value; InputVar <string> communitiesMap = new InputVar <string>("InitialCommunitiesMap"); ReadVar(communitiesMap); parameters.InitialCommunitiesMap = communitiesMap.Value; InputVar <string> climateConfigFile = new InputVar <string>("ClimateConfigFile"); ReadVar(climateConfigFile); parameters.ClimateConfigFile = climateConfigFile.Value; InputVar <string> soilDepthMapName = new InputVar <string>("SoilDepthMapName"); ReadVar(soilDepthMapName); parameters.SoilDepthMapName = soilDepthMapName.Value; InputVar <string> soilDrainMapName = new InputVar <string>("SoilDrainMapName"); ReadVar(soilDrainMapName); parameters.SoilDrainMapName = soilDrainMapName.Value; InputVar <string> soilBaseFlowMapName = new InputVar <string>("SoilBaseFlowMapName"); ReadVar(soilBaseFlowMapName); parameters.SoilBaseFlowMapName = soilBaseFlowMapName.Value; InputVar <string> soilStormFlowMapName = new InputVar <string>("SoilStormFlowMapName"); ReadVar(soilStormFlowMapName); parameters.SoilStormFlowMapName = soilStormFlowMapName.Value; InputVar <string> soilFCMapName = new InputVar <string>("SoilFieldCapacityMapName"); ReadVar(soilFCMapName); parameters.SoilFieldCapacityMapName = soilFCMapName.Value; InputVar <string> soilWPMapName = new InputVar <string>("SoilWiltingPointMapName"); ReadVar(soilWPMapName); parameters.SoilWiltingPointMapName = soilWPMapName.Value; InputVar <string> soilSandMapName = new InputVar <string>("SoilPercentSandMapName"); ReadVar(soilSandMapName); parameters.SoilPercentSandMapName = soilSandMapName.Value; InputVar <string> soilClayMapName = new InputVar <string>("SoilPercentClayMapName"); ReadVar(soilClayMapName); parameters.SoilPercentClayMapName = soilClayMapName.Value; InputVar <string> som1CsurfMapName = new InputVar <string>("InitialSOM1CsurfMapName"); ReadVar(som1CsurfMapName); parameters.InitialSOM1CSurfaceMapName = som1CsurfMapName.Value; InputVar <string> som1NsurfMapName = new InputVar <string>("InitialSOM1NsurfMapName"); ReadVar(som1NsurfMapName); parameters.InitialSOM1NSurfaceMapName = som1NsurfMapName.Value; InputVar <string> som1CsoilMapName = new InputVar <string>("InitialSOM1CsoilMapName"); ReadVar(som1CsoilMapName); parameters.InitialSOM1CSoilMapName = som1CsoilMapName.Value; InputVar <string> som1NsoilMapName = new InputVar <string>("InitialSOM1NsoilMapName"); ReadVar(som1NsoilMapName); parameters.InitialSOM1NSoilMapName = som1NsoilMapName.Value; InputVar <string> som2CMapName = new InputVar <string>("InitialSOM2CMapName"); ReadVar(som2CMapName); parameters.InitialSOM2CMapName = som2CMapName.Value; InputVar <string> som2NMapName = new InputVar <string>("InitialSOM2NMapName"); ReadVar(som2NMapName); parameters.InitialSOM2NMapName = som2NMapName.Value; InputVar <string> som3CMapName = new InputVar <string>("InitialSOM3CMapName"); ReadVar(som3CMapName); parameters.InitialSOM3CMapName = som3CMapName.Value; InputVar <string> som3NMapName = new InputVar <string>("InitialSOM3NMapName"); ReadVar(som3NMapName); parameters.InitialSOM3NMapName = som3NMapName.Value; InputVar <string> deadSurfMapName = new InputVar <string>("InitialDeadWoodSurfaceMapName"); ReadVar(deadSurfMapName); parameters.InitialDeadSurfaceMapName = deadSurfMapName.Value; InputVar <string> deadSoilMapName = new InputVar <string>("InitialDeadCoarseRootsMapName"); ReadVar(deadSoilMapName); parameters.InitialDeadSoilMapName = deadSoilMapName.Value; InputVar <bool> calimode = new InputVar <bool>("CalibrateMode"); if (ReadOptionalVar(calimode)) { parameters.CalibrateMode = calimode.Value; } else { parameters.CalibrateMode = false; } InputVar <bool> smokemode = new InputVar <bool>("SmokeModelOutputs"); if (ReadOptionalVar(smokemode)) { parameters.SmokeModelOutputs = smokemode.Value; } else { parameters.SmokeModelOutputs = false; } InputVar <bool> version64 = new InputVar <bool>("Version64SoilWater"); if (ReadOptionalVar(version64)) { parameters.SoilWater64 = version64.Value; } else { parameters.SoilWater64 = false; } InputVar <string> wt = new InputVar <string>("WaterDecayFunction"); ReadVar(wt); parameters.WType = WParse(wt.Value); InputVar <double> pea = new InputVar <double>("ProbabilityEstablishAdjust"); ReadVar(pea); parameters.ProbEstablishAdjustment = pea.Value; InputVar <double> iMN = new InputVar <double>("InitialMineralN"); ReadVar(iMN); parameters.SetInitMineralN(iMN.Value); InputVar <double> iFF = new InputVar <double>("InitialFineFuels"); ReadVar(iFF); parameters.SetInitFineFuels(iFF.Value); InputVar <double> ans = new InputVar <double>("AtmosphericNSlope"); ReadVar(ans); parameters.SetAtmosNslope(ans.Value); InputVar <double> ani = new InputVar <double>("AtmosphericNIntercept"); ReadVar(ani); parameters.SetAtmosNintercept(ani.Value); InputVar <double> lat = new InputVar <double>("Latitude"); ReadVar(lat); parameters.SetLatitude(lat.Value); InputVar <double> denits = new InputVar <double>("DenitrificationRate"); ReadVar(denits); parameters.SetDenitrif(denits.Value); InputVar <double> drsoms = new InputVar <double>("DecayRateSurf"); ReadVar(drsoms); parameters.SetDecayRateSurf(drsoms.Value); InputVar <double> drsom1 = new InputVar <double>("DecayRateSOM1"); ReadVar(drsom1); parameters.SetDecayRateSOM1(drsom1.Value); InputVar <double> drsom2 = new InputVar <double>("DecayRateSOM2"); ReadVar(drsom2); parameters.SetDecayRateSOM2(drsom2.Value); InputVar <double> drsom3 = new InputVar <double>("DecayRateSOM3"); ReadVar(drsom3); parameters.SetDecayRateSOM3(drsom3.Value); InputVar <double> stormFlowOverride = new InputVar <double>("StormFlowOverride"); if (ReadOptionalVar(stormFlowOverride)) { PlugIn.StormFlowOverride = stormFlowOverride.Value; } InputVar <double> wf1Override = new InputVar <double>("WaterLossFactor1Override"); if (ReadOptionalVar(wf1Override)) { OtherData.WaterLossFactor1 = wf1Override.Value; } InputVar <double> wf2Override = new InputVar <double>("WaterLossFactor2Override"); if (ReadOptionalVar(wf2Override)) { OtherData.WaterLossFactor2 = wf2Override.Value; } InputVar <string> anppMaps = new InputVar <string>("ANPPMapNames"); if (ReadOptionalVar(anppMaps)) { PlugIn.ANPPMapNames = anppMaps.Value; InputVar <int> anppMapFreq = new InputVar <int>("ANPPMapFrequency"); ReadVar(anppMapFreq); PlugIn.ANPPMapFrequency = anppMapFreq.Value; } InputVar <string> aneeMaps = new InputVar <string>("ANEEMapNames"); if (ReadOptionalVar(aneeMaps)) { PlugIn.ANEEMapNames = aneeMaps.Value; InputVar <int> aneeMapFreq = new InputVar <int>("ANEEMapFrequency"); ReadVar(aneeMapFreq); PlugIn.ANEEMapFrequency = aneeMapFreq.Value; } InputVar <string> soilCarbonMaps = new InputVar <string>("SoilCarbonMapNames"); if (ReadOptionalVar(soilCarbonMaps)) { PlugIn.SoilCarbonMapNames = soilCarbonMaps.Value; InputVar <int> soilCarbonMapFreq = new InputVar <int>("SoilCarbonMapFrequency"); ReadVar(soilCarbonMapFreq); PlugIn.SoilCarbonMapFrequency = soilCarbonMapFreq.Value; } InputVar <string> soilNitrogenMaps = new InputVar <string>("SoilNitrogenMapNames"); if (ReadOptionalVar(soilNitrogenMaps)) { PlugIn.SoilNitrogenMapNames = soilNitrogenMaps.Value; InputVar <int> soilNitrogenMapFreq = new InputVar <int>("SoilNitrogenMapFrequency"); ReadVar(soilNitrogenMapFreq); PlugIn.SoilNitrogenMapFrequency = soilNitrogenMapFreq.Value; } InputVar <string> totalCMaps = new InputVar <string>("TotalCMapNames"); if (ReadOptionalVar(totalCMaps)) { PlugIn.TotalCMapNames = totalCMaps.Value; InputVar <int> totalCMapFreq = new InputVar <int>("TotalCMapFrequency"); ReadVar(totalCMapFreq); PlugIn.TotalCMapFrequency = totalCMapFreq.Value; } InputVar <string> inputCommunityMaps = new InputVar <string>("CreateInputCommunityMaps"); if (ReadOptionalVar(inputCommunityMaps)) { PlugIn.InputCommunityMapNames = inputCommunityMaps.Value; InputVar <int> inputMapFreq = new InputVar <int>("InputCommunityMapFrequency"); ReadVar(inputMapFreq); PlugIn.InputCommunityMapFrequency = inputMapFreq.Value; } //-------------------------- // LAI and light table ReadName("MaximumLAI"); InputVar <byte> shadeClassVar = new InputVar <byte>("Shade Class"); InputVar <double> maxLAI = new InputVar <double>("Maximum LAI"); for (byte shadeClass = 1; shadeClass <= 5; shadeClass++) { if (AtEndOfInput) { throw NewParseException("Expected a line with available light class {0}", shadeClass); } StringReader currentLine = new StringReader(CurrentLine); ReadValue(shadeClassVar, currentLine); if (shadeClassVar.Value.Actual != shadeClass) { throw new InputValueException(shadeClassVar.Value.String, "Expected the available light class {0}", shadeClass); } ReadValue(maxLAI, currentLine); parameters.SetMaximumShadeLAI(shadeClass, maxLAI.Value); CheckNoDataAfter("the " + maxLAI + " column", currentLine); GetNextLine(); } //---------------------------------------------------------- // Read table of sufficient light probabilities. // Available light classes are in increasing order. ReadName("LightEstablishmentTable"); InputVar <byte> sc = new InputVar <byte>("Available Light Class"); InputVar <double> pl0 = new InputVar <double>("Probability of Germination - Light Level 0"); InputVar <double> pl1 = new InputVar <double>("Probability of Germination - Light Level 1"); InputVar <double> pl2 = new InputVar <double>("Probability of Germination - Light Level 2"); InputVar <double> pl3 = new InputVar <double>("Probability of Germination - Light Level 3"); InputVar <double> pl4 = new InputVar <double>("Probability of Germination - Light Level 4"); InputVar <double> pl5 = new InputVar <double>("Probability of Germination - Light Level 5"); int previousNumber = 0; while (!AtEndOfInput && CurrentName != Names.SpeciesParameters && previousNumber != 6) { StringReader currentLine = new StringReader(CurrentLine); ISufficientLight suffLight = new SufficientLight(); ReadValue(sc, currentLine); suffLight.ShadeClass = sc.Value; // Check that the current shade class is 1 more than // the previous number (numbers are must be in increasing order). if (sc.Value.Actual != (byte)previousNumber + 1) { throw new InputValueException(sc.Value.String, "Expected the severity number {0}", previousNumber + 1); } previousNumber = (int)sc.Value.Actual; ReadValue(pl0, currentLine); suffLight.ProbabilityLight0 = pl0.Value; ReadValue(pl1, currentLine); suffLight.ProbabilityLight1 = pl1.Value; ReadValue(pl2, currentLine); suffLight.ProbabilityLight2 = pl2.Value; ReadValue(pl3, currentLine); suffLight.ProbabilityLight3 = pl3.Value; ReadValue(pl4, currentLine); suffLight.ProbabilityLight4 = pl4.Value; ReadValue(pl5, currentLine); suffLight.ProbabilityLight5 = pl5.Value; parameters.LightClassProbabilities.Add(suffLight); CheckNoDataAfter("the " + pl5.Name + " column", currentLine); GetNextLine(); } if (parameters.LightClassProbabilities.Count == 0) { throw NewParseException("No sufficient light probabilities defined."); } if (previousNumber != 5) { throw NewParseException("Expected shade class {0}", previousNumber + 1); } //------------------------- // Read Species Parameters table PlugIn.ModelCore.UI.WriteLine(" Begin parsing NECN SPECIES table."); InputVar <string> csv = new InputVar <string>("Species_CSV_File"); ReadName("SpeciesParameters"); if (ReadOptionalVar(csv)) { CSVParser speciesParser = new CSVParser(); DataTable speciesTable = speciesParser.ParseToDataTable(csv.Value); foreach (DataRow row in speciesTable.Rows) { ISpecies species = ReadSpecies(System.Convert.ToString(row["SpeciesCode"])); parameters.SetFunctionalType(species, System.Convert.ToInt32(row["FunctionalGroupIndex"])); parameters.NFixer[species] = System.Convert.ToBoolean(row["NitrogenFixer"]); parameters.SetGDDmin(species, System.Convert.ToInt32(row["GDDMinimum"])); parameters.SetGDDmax(species, System.Convert.ToInt32(row["GDDMaximum"])); parameters.SetMinJanTemp(species, System.Convert.ToInt32(row["MinJanuaryT"])); parameters.SetMaxDrought(species, System.Convert.ToDouble(row["MaxDrought"])); parameters.SetLeafLongevity(species, System.Convert.ToDouble(row["LeafLongevity"])); parameters.Epicormic[species] = System.Convert.ToBoolean(row["Epicormic"]); parameters.SetLeafLignin(species, System.Convert.ToDouble(row["LeafLignin"])); parameters.SetFineRootLignin(species, System.Convert.ToDouble(row["FineRootLignin"])); parameters.SetWoodLignin(species, System.Convert.ToDouble(row["WoodLignin"])); parameters.SetCoarseRootLignin(species, System.Convert.ToDouble(row["CoarseRootLignin"])); parameters.SetLeafCN(species, System.Convert.ToDouble(row["LeafCN"])); parameters.SetFineRootCN(species, System.Convert.ToDouble(row["FineRootCN"])); parameters.SetWoodCN(species, System.Convert.ToDouble(row["WoodCN"])); parameters.SetCoarseRootCN(species, System.Convert.ToDouble(row["CoarseRootCN"])); parameters.SetFoliageLitterCN(species, System.Convert.ToDouble(row["FoliageLitterCN"])); parameters.SetMaxANPP(species, System.Convert.ToInt32(row["MaximumANPP"])); parameters.SetMaxBiomass(species, System.Convert.ToInt32(row["MaximumBiomass"])); } } else { speciesLineNums.Clear(); // If parser re-used (i.e., for testing purposes) InputVar <int> ft = new InputVar <int>("Functional Type"); InputVar <bool> nt = new InputVar <bool>("Nitrogen Fixer"); InputVar <int> gddmn = new InputVar <int>("Growing Degree Day Minimum"); InputVar <int> gddmx = new InputVar <int>("Growing Degree Day Maximum"); InputVar <int> mjt = new InputVar <int>("Minimum January Temperature"); InputVar <double> maxd = new InputVar <double>("Maximum Allowable Drought"); InputVar <double> leafLongevity = new InputVar <double>("Leaf Longevity"); InputVar <bool> epicorm = new InputVar <bool>("Epicormic: Y/N"); InputVar <double> leafLignin = new InputVar <double>("Leaf Percent Lignin"); InputVar <double> wLignin = new InputVar <double>("Wood Percent Lignin"); InputVar <double> crLignin = new InputVar <double>("Coarse Root Percent Lignin"); InputVar <double> frLignin = new InputVar <double>("Fine Root Percent Lignin"); InputVar <double> leafCN = new InputVar <double>("Leaf CN Ratio"); InputVar <double> woodCN = new InputVar <double>("Wood CN Ratio"); InputVar <double> cRootCN = new InputVar <double>("Coarse Root CN Ratio"); InputVar <double> foliarCN = new InputVar <double>("Foliage CN Ratio"); InputVar <double> fRootCN = new InputVar <double>("Fine Root CN Ratio"); InputVar <int> maxANPP = new InputVar <int>("Maximum ANPP"); InputVar <int> maxBiomass = new InputVar <int>("Maximum Aboveground Biomass"); string lastColumn = "the " + maxBiomass.Name + " column"; while (!AtEndOfInput && CurrentName != Names.FunctionalGroupParameters) { StringReader currentLine = new StringReader(CurrentLine); ISpecies species = ReadSpecies(currentLine); ReadValue(ft, currentLine); parameters.SetFunctionalType(species, ft.Value); ReadValue(nt, currentLine); parameters.NFixer[species] = nt.Value; ReadValue(gddmn, currentLine); parameters.SetGDDmin(species, gddmn.Value); ReadValue(gddmx, currentLine); parameters.SetGDDmax(species, gddmx.Value); ReadValue(mjt, currentLine); parameters.SetMinJanTemp(species, mjt.Value); ReadValue(maxd, currentLine); parameters.SetMaxDrought(species, maxd.Value); ReadValue(leafLongevity, currentLine); parameters.SetLeafLongevity(species, leafLongevity.Value); ReadValue(epicorm, currentLine); parameters.Epicormic[species] = epicorm.Value; ReadValue(leafLignin, currentLine); parameters.SetLeafLignin(species, leafLignin.Value); ReadValue(frLignin, currentLine); parameters.SetFineRootLignin(species, frLignin.Value); ReadValue(wLignin, currentLine); parameters.SetWoodLignin(species, wLignin.Value); ReadValue(crLignin, currentLine); parameters.SetCoarseRootLignin(species, crLignin.Value); ReadValue(leafCN, currentLine); parameters.SetLeafCN(species, leafCN.Value); ReadValue(fRootCN, currentLine); parameters.SetFineRootCN(species, fRootCN.Value); ReadValue(woodCN, currentLine); parameters.SetWoodCN(species, woodCN.Value); ReadValue(cRootCN, currentLine); parameters.SetCoarseRootCN(species, cRootCN.Value); ReadValue(foliarCN, currentLine); parameters.SetFoliageLitterCN(species, foliarCN.Value); ReadValue(maxANPP, currentLine); parameters.SetMaxANPP(species, maxANPP.Value); ReadValue(maxBiomass, currentLine); parameters.SetMaxBiomass(species, maxBiomass.Value); CheckNoDataAfter(lastColumn, currentLine); GetNextLine(); } } //--------- Read In Functional Group Table ------------------------------- PlugIn.ModelCore.UI.WriteLine(" Begin parsing FUNCTIONAL GROUP table."); InputVar <string> func_csv = new InputVar <string>("Functional_CSV_File"); ReadName("FunctionalGroupParameters"); if (ReadOptionalVar(func_csv)) { CSVParser functionalParser = new CSVParser(); DataTable functionalTable = functionalParser.ParseToDataTable(func_csv.Value); foreach (DataRow row in functionalTable.Rows) { string FunctionalTypeName = System.Convert.ToString(row["FunctionalGroupName"]); int funcIndex = System.Convert.ToInt32(row["FunctionalGroupIndex"]); if (funcIndex >= numFunctionalTypes) { throw new InputValueException(funcIndex.ToString(), "The index: {0} exceeds the allowable number of functional groups, {1}", funcIndex.ToString(), numFunctionalTypes); } FunctionalType funcTParms = new FunctionalType(); parameters.FunctionalTypes[funcIndex] = funcTParms; funcTParms.TempCurve1 = System.Convert.ToDouble(row["TemperatureCurve1"]); funcTParms.TempCurve2 = System.Convert.ToDouble(row["TemperatureCurve2"]); funcTParms.TempCurve3 = System.Convert.ToDouble(row["TemperatureCurve3"]); funcTParms.TempCurve4 = System.Convert.ToDouble(row["TemperatureCurve4"]); funcTParms.FractionANPPtoLeaf = System.Convert.ToDouble(row["FractionANPPtoLeaf"]); funcTParms.BiomassToLAI = System.Convert.ToDouble(row["BiomassToLAI"]); funcTParms.KLAI = System.Convert.ToDouble(row["KLAI"]); funcTParms.MaxLAI = System.Convert.ToDouble(row["MaximumLAI"]); funcTParms.MoistureCurve2 = System.Convert.ToDouble(row["MoistureCurve2"]); funcTParms.MoistureCurve3 = System.Convert.ToDouble(row["MoistureCurve3"]); funcTParms.WoodDecayRate = System.Convert.ToDouble(row["WoodDecayRate"]); funcTParms.MonthlyWoodMortality = System.Convert.ToDouble(row["MonthlyWoodMortality"]); funcTParms.LongevityMortalityShape = System.Convert.ToDouble(row["LongevityMortalityShape"]); funcTParms.FoliageDropMonth = System.Convert.ToInt32(row["FoliageDropMonth"]); funcTParms.CoarseRootFraction = System.Convert.ToDouble(row["CoarseRootFraction"]); funcTParms.FineRootFraction = System.Convert.ToDouble(row["FineRootFraction"]); } } else { InputVar <string> ftname = new InputVar <string>("Name"); InputVar <int> ftindex = new InputVar <int>("Index (< 25)"); InputVar <double> tempcurve1 = new InputVar <double>("TempCurve(1)"); InputVar <double> tempcurve2 = new InputVar <double>("TempCurve(2)"); InputVar <double> tempcurve3 = new InputVar <double>("TempCurve(3)"); InputVar <double> tempcurve4 = new InputVar <double>("TempCurve(4)"); InputVar <double> fcfleaf = new InputVar <double>("FCFRAC: Leaf"); InputVar <double> btolai = new InputVar <double>("BTOLAI"); InputVar <double> klai = new InputVar <double>("KLAI"); InputVar <double> maxlai = new InputVar <double>("MAXLAI"); InputVar <double> mwm = new InputVar <double>("Monthly Wood Mortality"); InputVar <double> wdr = new InputVar <double>("Wood Decay Rate"); InputVar <double> mortCurveShapeParm = new InputVar <double>("Mortality Curve Shape Parameter"); InputVar <int> leafNeedleDrop = new InputVar <int>("Leaf or Needle Drop Month"); InputVar <double> ppr2 = new InputVar <double>("MoistureCurve2"); InputVar <double> ppr3 = new InputVar <double>("MoistureCurve3"); InputVar <double> coarseRootFraction = new InputVar <double>("CRootFrac"); InputVar <double> fineRootFraction = new InputVar <double>("FRootFrac"); while (!AtEndOfInput && CurrentName != Names.FireReductionParameters) { StringReader currentLine = new StringReader(CurrentLine); ReadValue(ftname, currentLine); ReadValue(ftindex, currentLine); int ln = (int)ftindex.Value.Actual; if (ln >= numFunctionalTypes) { throw new InputValueException(ftindex.Value.String, "The index: {0} exceeds the allowable number of functional groups, {1}", ftindex.Value.String, numFunctionalTypes - 1); } FunctionalType funcTParms = new FunctionalType(); parameters.FunctionalTypes[ln] = funcTParms; ReadValue(tempcurve1, currentLine); funcTParms.TempCurve1 = tempcurve1.Value; ReadValue(tempcurve2, currentLine); funcTParms.TempCurve2 = tempcurve2.Value; ReadValue(tempcurve3, currentLine); funcTParms.TempCurve3 = tempcurve3.Value; ReadValue(tempcurve4, currentLine); funcTParms.TempCurve4 = tempcurve4.Value; ReadValue(fcfleaf, currentLine); funcTParms.FractionANPPtoLeaf = fcfleaf.Value; ReadValue(btolai, currentLine); funcTParms.BiomassToLAI = btolai.Value; ReadValue(klai, currentLine); funcTParms.KLAI = klai.Value; ReadValue(maxlai, currentLine); funcTParms.MaxLAI = maxlai.Value; ReadValue(ppr2, currentLine); funcTParms.MoistureCurve2 = ppr2.Value; ReadValue(ppr3, currentLine); funcTParms.MoistureCurve3 = ppr3.Value; ReadValue(wdr, currentLine); funcTParms.WoodDecayRate = wdr.Value; ReadValue(mwm, currentLine); funcTParms.MonthlyWoodMortality = mwm.Value; ReadValue(mortCurveShapeParm, currentLine); funcTParms.LongevityMortalityShape = mortCurveShapeParm.Value; ReadValue(leafNeedleDrop, currentLine); funcTParms.FoliageDropMonth = leafNeedleDrop.Value; ReadValue(coarseRootFraction, currentLine); funcTParms.CoarseRootFraction = coarseRootFraction.Value; ReadValue(fineRootFraction, currentLine); funcTParms.FineRootFraction = fineRootFraction.Value; //PlugIn.ModelCore.UI.WriteLine("PPRPTS2={0}.", parameters.FunctionalTypeTable[ln].PPRPTS2); CheckNoDataAfter("the " + fineRootFraction.Name + " column", currentLine); GetNextLine(); } } //--------- Read In Fire Reductions Table --------------------------- PlugIn.ModelCore.UI.WriteLine(" Begin reading FIRE REDUCTION parameters."); ReadName(Names.FireReductionParameters); InputVar <int> frindex = new InputVar <int>("Fire Severity Index MUST = 1-5"); InputVar <double> wred = new InputVar <double>("Coarse Litter Reduction"); InputVar <double> lred = new InputVar <double>("Fine Litter Reduction"); InputVar <double> live_wood_red = new InputVar <double>("Cohort Wood Reduction"); InputVar <double> live_leaf_red = new InputVar <double>("Cohort Litter Reduction"); InputVar <double> som_red = new InputVar <double>("SOM Reduction"); while (!AtEndOfInput && CurrentName != Names.HarvestReductionParameters) { StringReader currentLine = new StringReader(CurrentLine); ReadValue(frindex, currentLine); int ln = (int)frindex.Value.Actual; if (ln < 1 || ln > 5) { throw new InputValueException(frindex.Value.String, "The fire severity index: {0} must be 1-5,", frindex.Value.String); } FireReductions inputFireReduction = new FireReductions(); // ignoring severity = zero parameters.FireReductionsTable[ln] = inputFireReduction; ReadValue(wred, currentLine); inputFireReduction.CoarseLitterReduction = wred.Value; ReadValue(lred, currentLine); inputFireReduction.FineLitterReduction = lred.Value; ReadValue(live_wood_red, currentLine); inputFireReduction.CohortWoodReduction = live_wood_red.Value; ReadValue(live_leaf_red, currentLine); inputFireReduction.CohortLeafReduction = live_leaf_red.Value; ReadValue(som_red, currentLine); inputFireReduction.SOMReduction = som_red.Value; CheckNoDataAfter("the " + som_red.Name + " column", currentLine); GetNextLine(); } //--------- Read In Harvest Reductions Table --------------------------- InputVar <string> hreds = new InputVar <string>("HarvestReductions"); ReadName(Names.HarvestReductionParameters); PlugIn.ModelCore.UI.WriteLine(" Begin reading HARVEST REDUCTION parameters."); InputVar <string> prescriptionName = new InputVar <string>("Prescription"); InputVar <double> wred_pr = new InputVar <double>("Coarse Litter Reduction"); InputVar <double> lred_pr = new InputVar <double>("Fine Litter Reduction"); InputVar <double> som_red_pr = new InputVar <double>("SOM Reduction"); InputVar <double> cohortw_red_pr = new InputVar <double>("Cohort Wood Removal"); InputVar <double> cohortl_red_pr = new InputVar <double>("Cohort Leaf Removal"); while (!AtEndOfInput) { StringReader currentLine = new StringReader(CurrentLine); HarvestReductions harvReduction = new HarvestReductions(); parameters.HarvestReductionsTable.Add(harvReduction); ReadValue(prescriptionName, currentLine); harvReduction.PrescriptionName = prescriptionName.Value; ReadValue(wred_pr, currentLine); harvReduction.CoarseLitterReduction = wred_pr.Value; ReadValue(lred_pr, currentLine); harvReduction.FineLitterReduction = lred_pr.Value; ReadValue(som_red_pr, currentLine); harvReduction.SOMReduction = som_red_pr.Value; ReadValue(cohortw_red_pr, currentLine); harvReduction.CohortWoodReduction = cohortw_red_pr.Value; ReadValue(cohortl_red_pr, currentLine); harvReduction.CohortLeafReduction = cohortl_red_pr.Value; GetNextLine(); } return(parameters); }