//public const double AG_National_MAX_GPDD = 20.0;
        //public const double AG_National_Shift = 1.2;
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Constructor </summary>
        ///
        /// <param name="aName"> The name of the process </param>
        /// <param name="WSim"> The WaterSimManager Using the Process. </param>
        ///  <remarks> It should not be assumed that the WaterSimManager value being passed is the WaterSimManager that will make'
        ///            pre and post process calls</remarks>
        ///-------------------------------------------------------------------------------------------------

        public RateDataProcess(string aName, WaterSimManager WSim, RateDataClass rData)
        {
            BuildDescStrings();
            Fname     = aName;
            this.Name = this.GetType().Name;
            FWsim     = WSim;
            FRData    = rData;
        }
 static public void ManagePolicies(WaterSimManager WSim, int year, ProviderIntArray BeingManaged, ProviderIntArray TriggerCnt)
 {
     for (int i = 0; i < 2; i++)
     {
         if (0 < BeingManaged[i])
         {
         }
         else
         {
         }
     }
 }
示例#3
0
        // Construictor
        public Models(int RegionN, WaterSimDCDC.WaterSimManager TheWaterSimManager)
        {
            FWSIM = TheWaterSimManager;
            // Construct the stream model
            FStreamModel = new StreamModel(RegionN);
            // create submodels
            for (int i = 0; i < RegionN; i++)
            {
                FSubModelList.Add(new Submodel());
            }

            // Create WaterSim Parameters

            // This parameter accesses the array of regional stream allocation
            StreamAllocation = new providerArrayProperty(FWSIM.ParamManager, epP_StreamAllocation, geti_StreamAllocation, eProviderAggregateMode.agSum);
            FWSIM.ParamManager.AddParameter(new ModelParameterClass(epP_StreamAllocation, "Regional Stream Allocation", "RSTALLOC", rangeChecktype.rctNoRangeCheck, 0, 0, null, StreamAllocation));

            // This parameter sets or get value from the stream model
            FWSIM.ParamManager.AddParameter(new ModelParameterClass(ep_StreamWithdraw, "Stream Withdrawal", "STRWD", rangeChecktype.rctCheckRange, 0, 100000000, geti_StremWithdraw, seti_StreamWithdraw, null));
        }
示例#4
0
        public static void AddWestParameterGroups(WaterSimManager WSim)
        {
            // Create a supply group
            // epP_SurfaceFresh = 1031; epP_SurfaceLake = 1032; epP_SurfaceSaline = 1033; epP_Groundwater = 1034;
            //  epP_Effluent = 1035;  epP_Augmented = 1036; epP_TotalSupplies = 1037;  epP_UrbanWasteWater = 1038;

            int[] TempSupplies = new int[8] {
                eModelParam.epP_SurfaceFresh, eModelParam.epP_SurfaceLake, eModelParam.epP_SurfaceSaline, eModelParam.epP_Groundwater,
                eModelParam.epP_Effluent, eModelParam.epP_Augmented, eModelParam.epP_TotalSupplies, eModelParam.epP_UrbanWasteWater
            };
            ModelParameterGroupClass MPGC = new ModelParameterGroupClass("Supplies", TempSupplies);

            WSim.ParamManager.GroupManager.Add(MPGC);
            AddGroupToParameterTopics(WSim.ParamManager, MPGC);

            // Create Consumer Group
            // epUrban = 1051;epAgriculture = 1052;epIndustrial = 1053;epPower = 1054; epP_TotalDemand = 1111;
            int[] TempConsumer = new int[5] {
                eModelParam.epP_Urban, eModelParam.epP_Agriculture, eModelParam.epP_Industrial, eModelParam.epP_Power, eModelParam.epP_TotalDemand
            };
            MPGC = new ModelParameterGroupClass("Consumers", TempConsumer);
            WSim.ParamManager.GroupManager.Add(MPGC);
            AddGroupToParameterTopics(WSim.ParamManager, MPGC);
        }
示例#5
0
        // =========================================
        //
        protected override void initialize_ModelParameters()
        {
            WaterSimManager WSim = (this as WaterSimManager);

            //  WSim.ProcessManager.AddProcess(WM);
            base.initialize_ModelParameters();
            ParameterManagerClass            FPM       = ParamManager;
            Extended_Parameter_Documentation ExtendDoc = FPM.Extended;

            // =======================================================

            // Provider parameters
            // Inputs/Outputs
            //
            // Template(s)
            // ExtendDoc.Add(new WaterSimDescripItem(eModelParam.ep, "", "", "", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            // _pm.AddParameter(new ModelParameterClass(eModelParam.ep,"", "", rangeChecktype.rctCheckRange, 0, 0, geti_, seti_, RangeCheck.NoSpecialBase));
            //
            // NEW STUFF - State
            _pm.AddParameter(new ModelParameterClass(eModelParam.epState, "State Code", "ST", rangeChecktype.rctCheckRange, 0, 14, WSmith.geti_StateIndex, WSmith.seti_StateIndex, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epState, "The State Currently being Examined: one of five (Florida, Idaho, Illinois, Minnesota, Wyoming, Arizona,Colorado,Nevada,California,Utah,New Mexic, Alabama,Kansas, Tennessee, Virginia) in the initial work.", "", "The State Examined", "State", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            // Drivers
            _pm.AddParameter(new ModelParameterClass(eModelParam.epPopulation, "Population Served", "POP", geti_Pop));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPopulation, "State Population People in any given year- we use an estimate of slope to project out to 2065", "ppl", "State Population (ppl)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            // Outputs
            _pm.AddParameter(new ModelParameterClass(eModelParam.epGPCD_urban, "Urban GPCD", "UGPCD", WSmith.geti_gpcd));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epGPCD_urban, "The GPCD (Gallons per Capita per Day) for delivered water for the Urban water sector.", "GPCD", "Gallons per Capita per Day (GPCD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epGPCD_ag, "Agricultural GPCD", "AGPCD", WSmith.geti_gpcdAg));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epGPCD_ag, "The GPCD (Gallons per Capita per Day) for delivered water for Agricultural Uses.", "GPCD", "Gallons per Capita per Day (GPCD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epGPCD_other, "Other GPCD: Power and Industry", "OGPCD", WSmith.geti_gpcdOther));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epGPCD_other, "The GPCD (Gallons per Capita per Day) for delivered water for Industrial Uses and Power Combined.", "GPCD", "Gallons per Capita per Day (GPCD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            //

            // Resources
            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceFresh, "Surface Water (Fresh)", "SUR", rangeChecktype.rctCheckRange, 0, 20000 /* 50000000 */, WSmith.geti_SurfaceWaterFresh, WSmith.seti_SurfaceWaterFresh, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epSurfaceFresh, "Fresh Water Deliveries from Surface Sources; this is total fresh water withdrawals.", "MGD", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceFreshNet, "Surface Water (Fresh) Net", "SURN", WSmith.geti_SurfaceWaterFreshNet));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceSaline, "Surface Water (Saline)", "SAL", rangeChecktype.rctCheckRange, 0, 20000 /* 50000000 */, WSmith.geti_SurfaceWaterSaline, WSmith.seti_SurfaceWaterSaline, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epSurfaceSaline, "Saline Water Deliveries from Surface Sources; this is total saline water withdrawals.", "MGD", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceSalineNet, "Surface Water (Saline) Net", "SALN", WSmith.geti_SurfaceWaterSalineNet));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epGroundwater, "Groundwater (Fresh)", "GW", rangeChecktype.rctCheckRange, 0, 20000 /* 500000008*/, WSmith.geti_Groundwater, WSmith.seti_Groundwater, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epGroundwater, "Fresh Water Deliveries from Pumped Groundwater; this is total water withdrawals.", "MGD", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            _pm.AddParameter(new ModelParameterClass(eModelParam.epGroundwaterNet, "Groundwater (Fresh) Net", "GWN", WSmith.geti_GroundwaterNet));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epEffluent, "Effluent (Reclaimed)", "REC", rangeChecktype.rctCheckRange, 0, 20000 /*50000000*/, WSmith.geti_Effluent, WSmith.seti_Effluent, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epEffluent, "Effluent (reclaimed) Water Deliveries from Waste Water Treatment Plants; total withdrawals.", "MGD", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            _pm.AddParameter(new ModelParameterClass(eModelParam.epEffluentNet, "Effluent (Reclaimed) Net", "RECN", WSmith.geti_EffluentNet));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceLake, "Surface Lake Water", "SURL", rangeChecktype.rctCheckRange, 0, 20000, WSmith.geti_SurfaceLake, WSmith.seti_SurfaceLake, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epSurfaceLake, "Surface Lake Water", "mgd", "Million Gallons Per Day", "Surface Lake Water", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceLakeNet, "Surface Lake Water Net", "SURLN", WSmith.geti_SurfaceLakeNet));

            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epTotalSupplies, "Total Supplies", "TS", WSmith.geti_TotalSupplies));


            // CONSUMERS
            _pm.AddParameter(new ModelParameterClass(eModelParam.epUrban, "Urban Demand", "UD", rangeChecktype.rctCheckRange, 0, 30000 /*50000000*/, WSmith.geti_Urban, WSmith.seti_Urban, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epUrban, "Urban Water Demand", "MGD ", "Million Gallons per Day", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epUrbanNet, "Urban Demand (Net)", "UDN", WSmith.geti_Urban_Net));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epUrbanNet, "Urban (residential) Net Water Balance; the difference between source withdrawals and demand.", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAgriculture, "Agriculture Demand", "AD", rangeChecktype.rctCheckRange, 0, 30000 /*50000000*/, WSmith.geti_Agriculture, WSmith.seti_Agriculture, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAgriculture, "Agriculture Water Demand; total withdrawals.", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAgricultureNet, "Agriculture Demand (Net)", "ADN", WSmith.geti_Agriculture_Net));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAgricultureNet, "Agricultural Net Water Balance; the difference between source withdrawals and demand.", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epIndustrial, "Industrial Demand", "ID", rangeChecktype.rctCheckRange, 0, 30000 /* 50000000*/, WSmith.geti_Industrial, WSmith.seti_Industrial, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epIndustrial, "Industrial Water Demand; total withdrawals. Water used for industries such as steel, chemical, paper, and petroleum refining. ", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epIndustrialNet, "Industrial Demand (Net)", "IDN", WSmith.geti_Industrial_Net));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epIndustrialNet, "Industrial Net Water Balance; the difference between source withdrawals and demand.", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epPower, "Power Demand", "PD", rangeChecktype.rctCheckRange, 0, 30000 /*50000000*/, WSmith.geti_PowerWater, WSmith.seti_PowerWater, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPower, "Water Use by Power: total withdrawals. Water used in the process of generating electricity with steam-driven turbine generators [Thermoelectric power, subcategories by cooling-system type (once-through, closed-loop/recirculation)].", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epPowerNet, "Power Demand (Net)", "PDN", WSmith.geti_PowerWater_Net));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPowerNet, "Power Net Water Balance; the difference between source withdrawals and demand.", "MGD ", "Million Gallons per Day (MGD)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epPowerEnergy, "Power Produced", "PE", WSmith.geti_PowerEnergy));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epNetDemandDifference, "Net Demand Difference", "DDIF", rangeChecktype.rctCheckRange, 0, 100 /*50000000*/, WSmith.geti_NetDemandDifference, null, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epNetDemandDifference, "The ratio of net demand to total demand for all consumers; ", "% ", "Percent (%)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));


            //
            // Controls - Policy

            _pm.AddParameter(new ModelParameterClass(eModelParam.epUrbanWaterConservation, "Water Conservation (urban & rural)", "UCON", rangeChecktype.rctCheckRange, 50, 100, WSmith.geti_UrbanConservation, WSmith.seti_UrbanConservation, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epUrbanWaterConservation, "Urban Water Conservation: reduction in annual water use.", "", "Percent reduction in water use", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                100, 80, 65, 50
            }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAgWaterConservation, "Ag Water Conservation", "ACON", rangeChecktype.rctCheckRange, 50, 100, WSmith.geti_AgConservation, WSmith.seti_AgConservation, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAgWaterConservation, "Agricultural Water Conservation: reduction in annual water used by the Ag sector.", "", "Percent reduction in water use", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                100, 80, 65, 50
            }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epPowerWaterConservation, "Power Water Conservation", "PCON", rangeChecktype.rctCheckRange, 50, 100, WSmith.geti_PowerConservation, WSmith.seti_PowerConservation, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPowerWaterConservation, "Power Water Conservation: reduction in annual water use for Thermoelectric power generation.", "", "Percent reduction in water use", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                100, 80, 65, 50
            }, new ModelParameterGroupClass[] { }));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epIndustrialWaterConservation, "Industrial Water Conservation", "ICON", rangeChecktype.rctCheckRange, 50, 100, WSmith.geti_IndustryConservation, WSmith.seti_IndustryConservation, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epIndustrialWaterConservation, "Industrial Water Conservation: reduction in annual water use for Industry.", "", "Percent reduction in water use", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                100, 80, 65, 50
            }, new ModelParameterGroupClass[] { }));


            // Index Values
            _pm.AddParameter(new ModelParameterClass(eModelParam.epSurfaceWaterManagement, "Use More Surface Water", "SWM", rangeChecktype.rctCheckRange, 80, 150, WSmith.geti_SurfaceWaterControl, WSmith.seti_SurfaceWaterControl, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epSurfaceWaterManagement, "Controls Scenario Chosen for alteration in surface water supply: increased surface water withdrawals.", "", "Alteration in Available Surface Water", "", new string[4] {
                "Less", "None", "Med", "High"
            }, new int[4] {
                80, 100, 120, 140
            }, new ModelParameterGroupClass[] { }));
            // 0=20% decrease, 1=contenporary, 2=20% increase, 3 = 40% increase in river water
            _pm.AddParameter(new ModelParameterClass(eModelParam.epGroundwaterManagement, "Change Groundwater Use", "GWM", rangeChecktype.rctCheckRange, 80, 150, WSmith.geti_GroundwaterControl, WSmith.seti_GroundwaterControl, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epGroundwaterManagement, "Controls Scenario Chosen for alteration in groundwater supplies: increased or decreased groundwater withdrawals.", "", "Alteration in Groundwater Used", "", new string[4] {
                "Less", "None", "More", "Most"
            }, new int[4] {
                80, 100, 120, 140
            }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epReclainedWaterUse, "Use Reclaimed Water", "RECM", rangeChecktype.rctNoRangeCheck, 0, 100, WSmith.geti_ReclaimedWaterManagement, WSmith.seti_ReclaimedWaterManagement, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epReclainedWaterUse, "Alteration in reclaimed (effluent) supplies: increased effluent withdrawals.", "", "% of indoor water use", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                0, 33, 66, 100
            }, new ModelParameterGroupClass[] { }));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epLakeWaterManagement, "Increase Lake Water use", "LWM", rangeChecktype.rctCheckRange, 80, 150, WSmith.geti_LakeWaterManagement, WSmith.seti_LakeWaterManagement, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epLakeWaterManagement, "Controls Lake Water Management: increased or decreased groundwater withdrawals.", "", "Scenario changes in lake later withdrawals", "", new string[4] {
                "Less", "None", "More", "Most"
            }, new int[4] {
                80, 100, 120, 140
            }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAugmented, "Augmented Desal", "DESAL", rangeChecktype.rctCheckRange, 0, 200, WSmith.geti_Desalinization, WSmith.seti_Desalinization, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAugmented, "Adds a percent of desalinaiton: increased surface saline withdrawals.", "", "Scenario changes in lake later withdrawals", "", new string[4] {
                "None", "Low", "Med", "High"
            }, new int[4] {
                0, 100, 150, 200
            }, new ModelParameterGroupClass[] { }));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epPolicyStartYear, "Policy Start Year", "PST", rangeChecktype.rctCheckRange, 2016, 2060, geti_PolicyStartYear, seti_PolicyStartYear, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPolicyStartYear, "Year that the Policies are implemented", "yr", "Year", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            //
            // Controls - External Forcings
            _pm.AddParameter(new ModelParameterClass(eModelParam.epPopGrowthAdjustment, "Population Growth Projected", "POPGR", rangeChecktype.rctCheckRange, 0, 150, WSmith.geti_PopGrowthRate, WSmith.seti_PopGrowthRate, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epPopGrowthAdjustment, "Adjustment in the Projected Population Growth Rate.", "%", "Population Growth", "", new string[4] {
                "Low", "Some", "Planned", "High"
            }, new int[4] {
                60, 80, 100, 120
            }, new ModelParameterGroupClass[] { }));

            //_pm.AddParameter(new ModelParameterClass(eModelParam.epClimateDrought, "Drought Impacts on Rivers/Lakes ", "CLIM", rangeChecktype.rctCheckRange, 0, 4, WSmith.geti_DroughtImpacts, WSmith.seti_DroughtImpacts, RangeCheck.NoSpecialBase));
            //   ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epClimateDrought, "Alteration in Fresh Water Withdrawals as a result of drought on supplies.", "Scenario-driven", "Drought Reductions in Surface Water", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));
            //
            _pm.AddParameter(new ModelParameterClass(eModelParam.epDroughtControl, "Drought Impacts Control- controls rate", "DC", rangeChecktype.rctCheckRange, 50, 150, WSmith.geti_DroughtControl, WSmith.seti_DroughtControl, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epDroughtControl, "Percent reduction in Surface flows due to drought", "%", "Percent (%)", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAgricultureProduction, "Agriculture Net $", "ANP", WSmith.geti_AgricutureProduction));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAgricultureProduction, "Agriculture Net Annual Farm Income.", "M$", "Million Dollars ", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            _pm.AddParameter(new ModelParameterClass(eModelParam.epAgriculturalGrowth, "Agriculture Growth", "AGGR", rangeChecktype.rctCheckRange, 50, 150, WSmith.geti_AgGrowthRate, WSmith.seti_AgGrowthRate, RangeCheck.NoSpecialBase));
            ExtendDoc.Add(new WaterSimDescripItem(eModelParam.epAgriculturalGrowth, "Agriculture Growth Rate Applied.", "%", "Percent of current growth", "", new string[] { }, new int[] { }, new ModelParameterGroupClass[] { }));

            // -----------------------------
            // Initialize Other
            WSmith.startYear   = _StartYear;
            WSmith.endYear     = _EndYear;
            WSmith.currentYear = _StartYear;
            // =============================
            //
            defaultSettings();
            //
            // 12.14.16 added
            WSmith.policyStartYear = geti_PolicyStartYear();
        }
示例#6
0
        static public void LimitAndReallocateGrowth(WaterSimManager WSim, int year, ProviderIntArray BeingManaged, ProviderIntArray TriggerCnt, int TriggerLimit, ref ProviderIntArray NewPopOn, ref ProviderIntArray NewPopOff)
        {
            ProviderIntArray LastYearOnPop  = WSim.Population_On_Project.getvalues();
            ProviderIntArray LastYearOffPop = WSim.Population_Other.getvalues();

            ProviderIntArray PulledPopOn   = WSim.Projected_OnProject_Pop.getvalues();
            ProviderIntArray PulledPopOff  = WSim.Projected_Other_Pop.getvalues();
            bool             ReallocatePop = false;


            for (int i = 0; i < NewPopOn.Length; i++)
            {
                if (TriggerCnt[i] >= TriggerLimit)
                {
                    ReallocatePop = true;
                    NewPopOn[i]   = LastYearOnPop[i];
                    NewPopOff[i]  = LastYearOffPop[i];
                }
                else
                if (BeingManaged[i] > 0)
                {
                    ReallocatePop = true;
                    double LastOn  = Convert.ToDouble(LastYearOnPop[i]);
                    double RateOn  = WSim.PopData.GetYearRatePopOnData(year).Values[i];
                    double LastOff = Convert.ToDouble(LastYearOffPop[i]);
                    double RateOff = WSim.PopData.GetYearRatePopOffData(year).Values[i];
                    int    Addon   = Convert.ToInt32(LastOn * RateOn);
                    int    Addoff  = Convert.ToInt32(LastOff * RateOff);
                    NewPopOff[i] = Addoff;
                    NewPopOn[i]  = Addon;
                    //NewPopOn[i] = Convert.ToInt32(Convert.ToDouble(LastYearOnPop[i]) * PopData.GetYearRatePopOnData(year).Values[i]);
                    //NewPopOff[i] = Convert.ToInt32(Convert.ToDouble(LastYearOffPop[i]) * PopData.GetYearRatePopOffData(year).Values[i]);
                }
                else
                {
                    // Check and see if on trajectory for higher
                    if (PulledPopOn[i] > LastYearOnPop[i])
                    {
                        NewPopOn[i] = PulledPopOn[i];
                    }
                    else
                    {
                        NewPopOn[i] = LastYearOnPop[i];
                    }
                    // Check and see if on trajectory for higher
                    if (PulledPopOff[i] > LastYearOffPop[i])
                    {
                        NewPopOff[i] = PulledPopOff[i];
                    }
                    else
                    {
                        NewPopOff[i] = LastYearOffPop[i];
                    }
                }
            }  // For newPop
            // OK Now reallocate unused growth

            if (ReallocatePop)
            // Only reason not doing this is if no one has been ever been triggered to stop growth
            {
                // Calc Total Potential growth and Modified Growth
                // On Possible Total
                int TotalPossibleOnGrowth = 0;

                foreach (int value in PulledPopOn.Values)
                {
                    TotalPossibleOnGrowth += value;
                }
                // off Possible Total
                int TotalPossibleOffGrowth = 0;
                foreach (int value in PulledPopOff.Values)
                {
                    TotalPossibleOffGrowth += value;
                }
                // on Actual Modified
                int TotalModifiedOnGrowth = 0;
                foreach (int value in NewPopOn.Values)
                {
                    TotalModifiedOnGrowth += value;
                }
                // off Possible Total
                int TotalModifiedOffGrowth = 0;
                foreach (int value in NewPopOff.Values)
                {
                    TotalModifiedOffGrowth += value;
                }
                // Calculate Difference

                double PopDifferenceOn  = Convert.ToDouble(TotalPossibleOnGrowth - TotalModifiedOnGrowth);
                double PopDifferenceOff = Convert.ToDouble(TotalPossibleOffGrowth - TotalModifiedOffGrowth);

                // Calculate Totals of NonDeficit People
                double TotalNotDeficitOn  = 0;
                double TotalNotDeficitOff = 0;
                for (int i = 0; i < NewPopOff.Length; i++)
                {
                    if (TriggerCnt[i] < TriggerLimit)
                    {
                        TotalNotDeficitOff += NewPopOff[i];
                    }
                }
                for (int i = 0; i < NewPopOn.Length; i++)
                {
                    if (TriggerCnt[i] < TriggerLimit)
                    {
                        TotalNotDeficitOn += NewPopOn[i];
                    }
                }
                // Calculate Ratios for those not in deficit
                ProviderDoubleArray ShareOn  = new ProviderDoubleArray(0);
                ProviderDoubleArray ShareOff = new ProviderDoubleArray(0);
                for (int i = 0; i < NewPopOn.Length; i++)
                {
                    if ((TotalNotDeficitOn > 0) && (TriggerCnt[i] < TriggerLimit))
                    {
                        ShareOn[i] = Convert.ToDouble(NewPopOn[i]) / TotalNotDeficitOn;
                    }
                }
                for (int i = 0; i < NewPopOff.Length; i++)
                {
                    if ((TotalNotDeficitOff > 0) && (TriggerCnt[i] < TriggerLimit))
                    {
                        ShareOff[i] = Convert.ToDouble(NewPopOff[i]) / TotalNotDeficitOff;
                    }
                }
                // Now allocate Extra growth based on ratio
                for (int i = 0; i < NewPopOff.Length; i++)
                {
                    if (TriggerCnt[i] < TriggerLimit)
                    {
                        // Calculate how much to add this year
                        int addmore = Convert.ToInt32(PopDifferenceOff * ShareOff[i]);
                        // Re add this added amount.
                        NewPopOff[i] += addmore;
                    }
                }
                for (int i = 0; i < NewPopOn.Length; i++)
                {
                    if (TriggerCnt[i] < TriggerLimit)
                    {
                        // Calculate how much to add this year
                        int addmore = Convert.ToInt32(PopDifferenceOn * ShareOn[i]);
                        // Re add this added amount.
                        NewPopOn[i] += addmore;
                    }
                }
            }
        }