//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 { } } }
// 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)); }
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); }
// ========================================= // 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(); }
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; } } } }