public PressureHeadVanGenuchten()
        {
            Landis.Library.Parameters.Ecoregions.AuxParm<float> RootingDepth = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter(Names.RootingDepth, 0, float.MaxValue);

            table = new Library.Parameters.Ecoregions.AuxParm<ushort[]>(PlugIn.ModelCore.Ecoregions);

            Landis.Library.Parameters.Ecoregions.AuxParm<string> SoilType = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)PlugIn.GetParameter(Names.SoilType);

            thetar = (Parameter<float>)PlugIn.GetParameter("thetar");
            thetas = (Parameter<float>)PlugIn.GetParameter("thetas");
            alpha = (Parameter<float>)PlugIn.GetParameter("alpha");
            n = (Parameter<float>)PlugIn.GetParameter("n");

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) if (ecoregion.Active)
            {
                List<ushort> PressureHead = new List<ushort>();

                int watercontent = 0;

                ushort ph = ushort.MaxValue;
                while(ph > 0)
                {
                    ph = CalculateWaterPressure(watercontent / RootingDepth[ecoregion], SoilType[ecoregion]);
                    //System.Console.WriteLine(watercontent + "\t" + ph);
                    PressureHead.Add(ph);
                    watercontent++;
                }
                table[ecoregion] = PressureHead.ToArray();
            }
        }
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            ActiveSiteCount    = new Landis.Library.Parameters.Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);
            AnnualWeather      = new Landis.Library.Parameters.Ecoregions.AuxParm <AnnualClimate_Monthly>(PlugIn.ModelCore.Ecoregions);
            MonthlyNDeposition = new Landis.Library.Parameters.Ecoregions.AuxParm <double[]>(PlugIn.ModelCore.Ecoregions);

            AnnualNDeposition = new Landis.Library.Parameters.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.
                }
            }
        }
Exemplo n.º 3
0
        public static void Initialize()
        {
            ClimateFileName = (Landis.Library.Parameters.Ecoregions.AuxParm <string>)PlugIn.GetParameter("climateFileName");

            Dictionary <IEcoregion, IObservedClimate> dict = new Dictionary <IEcoregion, IObservedClimate>();

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if (ecoregion.Active == false)
                {
                    continue;
                }

                else
                {
                    if (dict.ContainsKey(ecoregion))
                    {
                        ClimateData[ClimateFileName[ecoregion]] = dict[ecoregion];
                    }
                    else
                    {
                        ClimateData[ClimateFileName[ecoregion]] = new ObservedClimate(ClimateFileName[ecoregion]);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public static void EcoregionDynamicChange(IDynamicEcoregionRecord[] TimestepData)
        {
            //if (DynamicEcoregions.EcoRegData.ContainsKey(year))
            //{
            GSO1 = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(ModelCore.Ecoregions);
            GSO2 = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(ModelCore.Ecoregions);
            GSO3 = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(ModelCore.Ecoregions);
            GSO4 = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(ModelCore.Ecoregions);

            //DynamicEcoregions.TimestepData = DynamicEcoregions.EcoRegData[year];

            foreach (IEcoregion ecoregion in ModelCore.Ecoregions)
            {
                if (!ecoregion.Active)
                {
                    continue;
                }

                if (TimestepData[ecoregion.Index] == null)
                {
                    continue;
                }

                GSO1[ecoregion] = TimestepData[ecoregion.Index].GSO1;
                GSO2[ecoregion] = TimestepData[ecoregion.Index].GSO2;
                GSO3[ecoregion] = TimestepData[ecoregion.Index].GSO3;
                GSO4[ecoregion] = TimestepData[ecoregion.Index].GSO4;
            }
            //}
        }
Exemplo n.º 5
0
        public static void Initialize()
        {
            soiltype          = (Landis.Library.Parameters.Ecoregions.AuxParm <string>)(Parameter <string>) PlugIn.GetParameter("SoilType");
            climateFileName   = (Landis.Library.Parameters.Ecoregions.AuxParm <string>)(Parameter <string>) PlugIn.GetParameter("ClimateFileName");
            rootingdepth      = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("RootingDepth", 0, 1000);
            precintconst      = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("PrecIntConst", 0, 1);
            preclossfrac      = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("PrecLossFrac", 0, 1);
            snowsublimfrac    = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("SnowSublimFrac", 0, 1);
            latitude          = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("Latitude", -90, 90);
            leakageFrostDepth = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("LeakageFrostDepth", 0, 999999);
            precipEvents      = (Landis.Library.Parameters.Ecoregions.AuxParm <int>)(Parameter <int>) PlugIn.GetParameter("PrecipEvents", 1, 100);
            winterSTD         = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("WinterSTD", 0, 100);
            mossDepth         = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("MossDepth", 0, 1000);

            wythers = ((Parameter <bool>)PlugIn.GetParameter("Wythers")).Value;
            dtemp   = ((Parameter <bool>)PlugIn.GetParameter("DTemp")).Value;

            leakagefrac   = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter("LeakageFrac", 0, 1);
            runoffcapture = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter(Names.RunoffCapture, 0, 999999);
            AllEcoregions = new Dictionary <IEcoregion, IEcoregionPnET>();
            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                AllEcoregions.Add(ecoregion, new EcoregionPnET(ecoregion));
            }

            all_values = new Dictionary <IEcoregionPnET, Dictionary <DateTime, IEcoregionPnETVariables> >();
            foreach (IEcoregionPnET ecoregion in EcoregionPnET.AllEcoregions.Values)
            {
                all_values[ecoregion] = new Dictionary <DateTime, IEcoregionPnETVariables>();
            }
        }
Exemplo n.º 6
0
 public static void Initialize()
 {
     latitude      = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) GetParameter("Latitude", -90, 90);
     AllEcoregions = new Dictionary <IEcoregion, IEcoregionData>();
     foreach (IEcoregion ecoregion in ModelCore.Ecoregions)
     {
         AllEcoregions.Add(ecoregion, new EcoregionData(ecoregion));
     }
 }
 public static void Initialize()
 {
     leakageFrac = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("LeakageFrac", 0, float.MaxValue);
     precLossFrac = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("PrecLossFrac", 0, float.MaxValue);
     rootingDepth = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("RootingDepth", 0, float.MaxValue);
     precIntConst = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("PrecIntConst", 0, float.MaxValue);
     soilType = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)PlugIn.GetParameter("SoilType");
     climateFileName = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)PlugIn.GetParameter("ClimateFileName");
 }
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            AET = parameters.AET;  //FINISH LATER
             MinRelativeBiomass = parameters.MinRelativeBiomass;

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

            foreach (ActiveSite site in PlugIn.ModelCore.Landscape)
            {
                IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
                ActiveSiteCount[ecoregion]++;
            }
        }
Exemplo n.º 9
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters, IInputClimateParms paramClimate)
        {
            m_iCParams   = paramClimate;
            ShadeBiomass = parameters.MinRelativeBiomass;

            FieldCapacity = parameters.FieldCapacity;
            Latitude      = parameters.Latitude;

            ActiveSiteCount = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(PlugIn.ModelCore.Ecoregions);
            //ClimateUpdates  = new Ecoregions.AuxParm<bool[]>(PlugIn.ModelCore.Ecoregions);    //LANDIS CLIMATE LIBRARIES
            AET = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(PlugIn.ModelCore.Ecoregions);

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

                ActiveSiteCount[ecoregion]++;
            }
            //NEW ForCS specific Climate
            AnnualTemperature = new Landis.Library.Parameters.Ecoregions.AuxParm <double>(PlugIn.ModelCore.Ecoregions);
            GetAnnualTemperature(parameters.Timestep, 0);

            /*  CODE RELATED TO THE USE OF ONE OF THE BIGGER LANDIS CLIMATE LIBRARIES
             *
             * GenerateNewClimate(0, parameters.Timestep);
             *
             * AnnualWeather = new Ecoregions.AuxParm<AnnualClimate_Monthly>(PlugIn.ModelCore.Ecoregions); //Climate Library v2.0
             * //AnnualWeather = new Ecoregions.AuxParm<AnnualClimate>(PlugIn.ModelCore.Ecoregions);   //Climate Library on GitHub
             * 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;
             *  }
             * }
             * foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
             * {
             *  if (ActiveSiteCount[ecoregion] > 0)
             *  {
             *      SetAnnualClimate(ecoregion, 0);
             *  }
             * }
             */
        }
Exemplo n.º 10
0
        //---------------------------------------------------------------------
        public static void UpdateB_MAX()
        {
            B_MAX = new Landis.Library.Parameters.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 = System.Math.Max(largest_B_MAX_Spp, SpeciesData.B_MAX_Spp[species][ecoregion]);
                    }
                    B_MAX[ecoregion] = largest_B_MAX_Spp;
                }
            }
        }
Exemplo n.º 11
0
        //---------------------------------------------------------------------

        public InputParameters()
        {
            sufficientLight      = new List <ISufficientLight>();
            leafLongevity        = new Landis.Library.Parameters.Species.AuxParm <double>(PlugIn.ModelCore.Species);
            woodyDecayRate       = new Landis.Library.Parameters.Species.AuxParm <double>(PlugIn.ModelCore.Species);
            mortCurveShapeParm   = new Landis.Library.Parameters.Species.AuxParm <double>(PlugIn.ModelCore.Species);
            growthCurveShapeParm = new Landis.Library.Parameters.Species.AuxParm <double>(PlugIn.ModelCore.Species);
            leafLignin           = new Landis.Library.Parameters.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 Landis.Library.Parameters.Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);

            minRelativeBiomass = new Landis.Library.Parameters.Ecoregions.AuxParm <Percentage> [6];
            for (byte shadeClass = 1; shadeClass <= 5; shadeClass++)
            {
                minRelativeBiomass[shadeClass] = new Landis.Library.Parameters.Ecoregions.AuxParm <Percentage>(PlugIn.ModelCore.Ecoregions);
            }
        }
        //---------------------------------------------------------------------
        public InputParameters()
        {
            sufficientLight = new List<ISufficientLight>();
            leafLongevity = new Landis.Library.Parameters.Species.AuxParm<double>(PlugIn.ModelCore.Species);
            woodyDecayRate = new Landis.Library.Parameters.Species.AuxParm<double>(PlugIn.ModelCore.Species);
            mortCurveShapeParm = new Landis.Library.Parameters.Species.AuxParm<double>(PlugIn.ModelCore.Species);
            growthCurveShapeParm = new Landis.Library.Parameters.Species.AuxParm<double>(PlugIn.ModelCore.Species);
            leafLignin = new Landis.Library.Parameters.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 Landis.Library.Parameters.Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);

            minRelativeBiomass = new Landis.Library.Parameters.Ecoregions.AuxParm<Percentage>[6];
            for (byte shadeClass = 1; shadeClass <= 5; shadeClass++)
            {
                minRelativeBiomass[shadeClass] = new Landis.Library.Parameters.Ecoregions.AuxParm<Percentage>(PlugIn.ModelCore.Ecoregions);
            }
        }
Exemplo n.º 13
0
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            AET = parameters.AET;
            MinRelativeBiomass = parameters.MinRelativeBiomass;

            B_MAX           = new Landis.Library.Parameters.Ecoregions.AuxParm <int>(PlugIn.ModelCore.Ecoregions);
            ActiveSiteCount = new Landis.Library.Parameters.Ecoregions.AuxParm <int>(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)
            {
                if (EcoregionData.AET[ecoregion] <= 0.0 && ecoregion.Active)
                {
                    PlugIn.ModelCore.UI.WriteLine("   CAUTION: Ecoregion {0} has AET set to zero.", ecoregion.Name);
                }
            }
        }
        //---------------------------------------------------------------------
        public static void Initialize(IInputParameters parameters)
        {
            AET = parameters.AET;
             MinRelativeBiomass = parameters.MinRelativeBiomass;

             B_MAX = new Landis.Library.Parameters.Ecoregions.AuxParm<int>(PlugIn.ModelCore.Ecoregions);
             ActiveSiteCount = new Landis.Library.Parameters.Ecoregions.AuxParm<int>(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)
            {
                if (EcoregionData.AET[ecoregion] <= 0.0 && ecoregion.Active)
                {
                    PlugIn.ModelCore.UI.WriteLine("   CAUTION: Ecoregion {0} has AET set to zero.", ecoregion.Name);
                }

            }
        }
        public static void Initialize()
        {
            soiltype = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)(Parameter<string>)PlugIn.GetParameter("SoilType");
            climateFileName = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)(Parameter<string>)PlugIn.GetParameter("ClimateFileName");
            rootingdepth = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("RootingDepth", 0, 1000);
            precintconst = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("PrecIntConst", 0, 1);
            preclossfrac = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("PrecLossFrac", 0, 1);
            snowsublimfrac = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("SnowSublimFrac", 0, 1);

            wythers = ((Parameter<bool>)PlugIn.GetParameter("Wythers")).Value;
            dtemp = ((Parameter<bool>)PlugIn.GetParameter("DTemp")).Value;

            leakagefrac = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter("LeakageFrac", 0, 1);
            AllEcoregions = new Dictionary<IEcoregion, IEcoregionPnET>();
            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                AllEcoregions.Add(ecoregion, new EcoregionPnET(ecoregion));
            }

            all_values = new Dictionary<IEcoregionPnET, Dictionary<DateTime, IEcoregionPnETVariables>>();
            foreach (IEcoregionPnET ecoregion in EcoregionPnET.AllEcoregions.Values)
            {
                all_values[ecoregion] = new Dictionary<DateTime, IEcoregionPnETVariables>();
            }
        }
        public static void Initialize()
        {
            Parameter<string> PressureHeadCalculationMethod = null;
            if (PlugIn.TryGetParameter(Names.PressureHeadCalculationMethod, out PressureHeadCalculationMethod))
            {
                Parameter<string> p = PlugIn.GetParameter(Names.PressureHeadCalculationMethod);

                if (p.Value == Names.VanGenuchten) Pressureheadtable = new PressureHeadVanGenuchten();
                else if (PlugIn.GetParameter(Names.PressureHeadCalculationMethod).Value == Names.SaxtonAndRawls) Pressureheadtable = new PressureHeadSaxton_Rawls();
                else
                {
                    string msg = "Unknown presciption for calculating pressurehead, value for " + Names.PressureHeadCalculationMethod + " can be "+ Names.VanGenuchten+" or " + Names.SaxtonAndRawls;
                    throw new System.Exception(msg);
                }
            }
            else
            {
                string msg = "Missing presciption for calculating pressurehead, expected keyword " + Names.PressureHeadCalculationMethod + " in " + PlugIn.GetParameter(Names.PnETGenericParameters).Value + " or in " + PlugIn.GetParameter(Names.ExtensionName).Value;
                throw new System.Exception(msg);
            }

            WiltPnt = new Library.Parameters.Ecoregions.AuxParm<float>(PlugIn.ModelCore.Ecoregions);
            FieldCap = new Library.Parameters.Ecoregions.AuxParm<float>(PlugIn.ModelCore.Ecoregions);
            Porosity = new Library.Parameters.Ecoregions.AuxParm<float>(PlugIn.ModelCore.Ecoregions);

            SoilType = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)PlugIn.GetParameter(Names.SoilType);

            PlugIn.ModelCore.UI.WriteLine("Eco\tSoilt\tWiltPnt\tFieldCap(mm)\tFC-WP\tPorosity");
            foreach (IEcoregion eco in PlugIn.ModelCore.Ecoregions) if (eco.Active)
            {
                // takes PH (MPa)
                // Calculates water content (m3H2O/m3 SOIL)

                // Water content at field capacity (calculated as an output variable)
                //  −33 kPa (or −0.33 bar)
                // mH2O value =  kPa value x 0.101972
                FieldCap[eco] = (float)Hydrology.Pressureheadtable.CalculateWaterContent((ushort)3.36, SoilType[eco]) * eco.RootingDepth();

                WiltPnt[eco] = (float)Hydrology.Pressureheadtable.CalculateWaterContent((ushort)150, SoilType[eco]) * eco.RootingDepth();

                Porosity[eco] = (float)Hydrology.Pressureheadtable.Porosity(eco.RootingDepth(), SoilType[eco]);

                float f = FieldCap[eco] - WiltPnt[eco];
                PlugIn.ModelCore.UI.WriteLine(eco.Name + "\t" + SoilType[eco] + "\t" + WiltPnt[eco] + "\t" + FieldCap[eco] + "\t" + f + "\t" + Porosity[eco] );
            }
        }
        //---------------------------------------------------------------------
        public PressureHeadSaxton_Rawls()
        {
            Landis.Library.Parameters.Ecoregions.AuxParm <string> SoilType     = (Landis.Library.Parameters.Ecoregions.AuxParm <string>)PlugIn.GetParameter(Names.SoilType);
            Landis.Library.Parameters.Ecoregions.AuxParm <float>  RootingDepth = (Landis.Library.Parameters.Ecoregions.AuxParm <float>)(Parameter <float>) PlugIn.GetParameter(Names.RootingDepth, 0, float.MaxValue);

            table = new Library.Parameters.Ecoregions.AuxParm <float[]>(PlugIn.ModelCore.Ecoregions);

            Sand       = PlugIn.GetParameter("sand");
            Clay       = PlugIn.GetParameter("clay");
            PctOM      = PlugIn.GetParameter("pctOM");
            DensFactor = PlugIn.GetParameter("densFactor");
            Gravel     = PlugIn.GetParameter("gravel");

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions)
            {
                if (ecoregion.Active)
                {
                    List <float> PressureHead = new List <float>();

                    if (tensionB.ContainsKey(SoilType[ecoregion]) == false)
                    {
                        double sand       = double.Parse(Sand[SoilType[ecoregion]]);
                        double clay       = double.Parse(Clay[SoilType[ecoregion]]);
                        double pctOM      = double.Parse(PctOM[SoilType[ecoregion]]);
                        double densFactor = double.Parse(DensFactor[SoilType[ecoregion]]);
                        double gravel     = double.Parse(Gravel[SoilType[ecoregion]]);

                        // Moisture at wilting point
                        double predMoist1500    = -0.024 * sand + 0.487 * clay + 0.006 * pctOM + 0.005 * sand * pctOM - 0.013 * clay * pctOM + 0.068 * sand * clay + 0.031;
                        double predMoist1500adj = predMoist1500 + 0.14 * predMoist1500 - 0.02;

                        // Moisture at field capacity
                        double predMoist33     = -0.251 * sand + 0.195 * clay + 0.011 * pctOM + 0.006 * sand * pctOM - 0.027 * clay * pctOM + 0.452 * sand * clay + 0.299;
                        double predMoist33Adj  = predMoist33 + (1.283 * predMoist33 * predMoist33 - 0.374 * predMoist33 - 0.015);
                        double porosMoist33    = 0.278 * sand + 0.034 * clay + 0.022 * pctOM - 0.018 * sand * pctOM - 0.027 * clay * pctOM - 0.584 * sand * clay + 0.078;
                        double porosMoist33Adj = porosMoist33 + (0.636 * porosMoist33 - 0.107);
                        double satPor33        = porosMoist33Adj + predMoist33Adj;
                        double satSandAdj      = -0.097 * sand + 0.043;
                        double sandAdjSat      = satPor33 + satSandAdj;
                        double density_OM      = (1.0 - sandAdjSat) * 2.65;
                        double density_comp    = density_OM * (densFactor);
                        porosity_OM_comp.Add(SoilType[ecoregion], (float)(1.0 - (density_comp / 2.65)));
                        double porosity_change_comp  = (1.0 - density_comp / 2.65) - (1.0 - density_OM / 2.65);
                        double moist33_comp          = predMoist33Adj + 0.2 * porosity_change_comp;
                        double porosity_moist33_comp = porosity_OM_comp[SoilType[ecoregion]] - moist33_comp;
                        double lambda = (Math.Log(moist33_comp) - Math.Log(predMoist1500adj)) / (Math.Log(1500) - Math.Log(33));
                        double gravel_red_sat_cond = (1.0 - gravel) / (1.0 - gravel * (1.0 - 1.5 * (density_comp / 2.65)));
                        double satcond_mmhr        = 1930 * Math.Pow((porosity_moist33_comp), (3.0 - lambda)) * gravel_red_sat_cond;
                        double gravels_vol         = ((density_comp / 2.65) * gravel) / (1 - gravel * (1 - density_comp / 2.65));
                        double bulk_density        = gravels_vol * 2.65 + (1 - gravels_vol) * density_comp; // g/cm3

                        tensionB.Add(SoilType[ecoregion], (float)((Math.Log(1500) - Math.Log(33.0)) / (Math.Log(moist33_comp) - Math.Log(predMoist1500adj))));
                        tensionA.Add(SoilType[ecoregion], (float)Math.Exp(Math.Log(33.0) + (tensionB[SoilType[ecoregion]] * Math.Log(moist33_comp))));

                        // For Permafrost
                        clayProp.Add(SoilType[ecoregion], (float)clay);
                        double cTheta_temp = Constants.cs * (1.0 - porosity_OM_comp[SoilType[ecoregion]]) + Constants.cw * porosity_OM_comp[SoilType[ecoregion]];                                                                 //specific heat of soil	kJ/m3/K
                        cTheta.Add(SoilType[ecoregion], (float)cTheta_temp);
                        double lambda_s_temp = (1.0 - clay) * Constants.lambda_0 + clay * Constants.lambda_clay;                                                                                                                  //thermal conductivity soil	kJ/m/d/K
                        lambda_s.Add(SoilType[ecoregion], (float)lambda_s_temp);
                        double Fs_temp = ((2.0 / 3.0) / (1.0 + Constants.gs * ((lambda_s_temp / Constants.lambda_w) - 1.0))) + ((1.0 / 3.0) / (1.0 + (1.0 - 2.0 * Constants.gs) * ((lambda_s_temp / Constants.lambda_w) - 1.0))); //ratio of solid temp gradient
                        Fs.Add(SoilType[ecoregion], (float)Fs_temp);
                    }
                    double watercontent = 0.0;

                    float pressureHead = float.MaxValue;
                    while (pressureHead > 0.01)
                    {
                        pressureHead = CalculateWaterPressure(watercontent, SoilType[ecoregion]);

                        PressureHead.Add(pressureHead);
                        watercontent += 0.01;
                    }
                    table[ecoregion] = PressureHead.ToArray();
                }
            }
        }
        public PressureHeadSaxton_Rawls()
        {
            Landis.Library.Parameters.Ecoregions.AuxParm<string> SoilType = (Landis.Library.Parameters.Ecoregions.AuxParm<string>)PlugIn.GetParameter(Names.SoilType);
            Landis.Library.Parameters.Ecoregions.AuxParm<float> RootingDepth = (Landis.Library.Parameters.Ecoregions.AuxParm<float>)(Parameter<float>)PlugIn.GetParameter(Names.RootingDepth, 0, float.MaxValue);

            table = new Library.Parameters.Ecoregions.AuxParm<ushort[]>(PlugIn.ModelCore.Ecoregions);

            Sand = PlugIn.GetParameter("sand");
            Clay = PlugIn.GetParameter("clay");
            PctOM  = PlugIn.GetParameter("pctOM");
            DensFactor = PlugIn.GetParameter("densFactor");
            Gravel = PlugIn.GetParameter("gravel");

            foreach (IEcoregion ecoregion in PlugIn.ModelCore.Ecoregions) if (ecoregion.Active)
            {
                List<ushort> PressureHead = new List<ushort>();

                if (tensionB.ContainsKey(SoilType[ecoregion]) == false)
                {

                    double sand = double.Parse(Sand[SoilType[ecoregion]]);
                    double clay = double.Parse(Clay[SoilType[ecoregion]]);
                    double pctOM = double.Parse(PctOM[SoilType[ecoregion]]);
                    double densFactor = double.Parse(DensFactor[SoilType[ecoregion]]);
                    double gravel = double.Parse(Gravel[SoilType[ecoregion]]);

                    // Moisture at wilting point
                    double predMoist1500 = -0.024 * sand + 0.487 * clay + 0.006 * pctOM + 0.005 * sand * pctOM - 0.013 * clay * pctOM + 0.068 * sand * clay + 0.031;
                    double predMoist1500adj = predMoist1500 + 0.14 * predMoist1500 - 0.02;

                    // Moisture at field capacity
                    double predMoist33 = -0.251 * sand + 0.195 * clay + 0.011 * pctOM + 0.006 * sand * pctOM - 0.027 * clay * pctOM + 0.452 * sand * clay + 0.299;
                    double predMoist33Adj = predMoist33 + (1.283 * predMoist33 * predMoist33 - 0.374 * predMoist33 - 0.015);
                    double porosMoist33 = 0.278 * sand + 0.034 * clay + 0.022 * pctOM - 0.018 * sand * pctOM - 0.027 * clay * pctOM - 0.584 * sand * clay + 0.078;
                    double porosMoist33Adj = porosMoist33 + (0.636 * porosMoist33 - 0.107);
                    double satPor33 = porosMoist33Adj + predMoist33Adj;
                    double satSandAdj = -0.097 * sand + 0.043;
                    double sandAdjSat = satPor33 + satSandAdj;
                    double density_OM = (1 - sandAdjSat) * 2.65;
                    double density_comp = density_OM * (densFactor);
                    porosity_OM_comp.Add(SoilType[ecoregion], (float)(1 - (density_comp / 2.65)));
                    double porosity_change_comp = (1 - density_comp / 2.65) - (1 - density_OM / 2.65);
                    double moist33_comp = predMoist33Adj + 0.2 * porosity_change_comp;
                    double porosity_moist33_comp = porosity_OM_comp[SoilType[ecoregion]] - moist33_comp;
                    double lambda = (Math.Log(moist33_comp) - Math.Log(predMoist1500adj)) / (Math.Log(1500) - Math.Log(33));
                    double gravel_red_sat_cond = (1 - gravel) / (1 - gravel * (1 - 1.5 * (density_comp / 2.65)));
                    double satcond_mmhr = 1930 * Math.Pow((porosity_moist33_comp), (3 - lambda)) * gravel_red_sat_cond;

                    tensionB.Add(SoilType[ecoregion], (float)((Math.Log(1500) - Math.Log(33)) / (Math.Log(moist33_comp) - Math.Log(predMoist1500adj))));
                    tensionA.Add(SoilType[ecoregion], (float)Math.Exp(Math.Log(33) + (tensionB[SoilType[ecoregion]] * Math.Log(moist33_comp))));
                }
                double watercontent = 0.0;

                ushort pressureHead = ushort.MaxValue;
                while (pressureHead > 0)
                {

                    pressureHead = CalculateWaterPressure(watercontent / RootingDepth[ecoregion], SoilType[ecoregion]);

                    PressureHead.Add(pressureHead);
                    watercontent +=1.0;
                }
                table[ecoregion] = PressureHead.ToArray();
            }
        }