/// <summary> /// Scale the grazing inputs /// </summary> /// <param name="inputs">The grazing inputs</param> /// <param name="scale">The scale value</param> /// <returns>The scaled grazing input</returns> public static GrazingInputs ScaleGrazingInputs(GrazingInputs inputs, double scale) { int iClass; int iSpecies; int iRipe; GrazingInputs Result = new GrazingInputs(inputs); if (scale != 1.0) { for (iClass = 1; iClass <= DigClassNo; iClass++) { Result.Herbage[iClass].Biomass = scale * inputs.Herbage[iClass].Biomass; } Result.TotalGreen = scale * inputs.TotalGreen; Result.TotalDead = scale * inputs.TotalDead; for (iSpecies = 1; iSpecies <= MaxPlantSpp; iSpecies++) { for (iRipe = UNRIPE; iRipe <= RIPE; iRipe++) { Result.Seeds[iSpecies, iRipe].Biomass = scale * inputs.Seeds[iSpecies, iRipe].Biomass; } } } return(Result); }
/// <summary> /// Zero the grazing inputs /// </summary> /// <param name="inputs">The grazing inputs to clear</param> public static void zeroGrazingInputs(ref GrazingInputs inputs) { inputs.Herbage = new IntakeRecord[DigClassNo + 1]; inputs.TotalGreen = 0; inputs.TotalDead = 0; inputs.LegumePropn = 0; inputs.Seeds = new IntakeRecord[MaxPlantSpp + 1, RIPE + 1]; inputs.SeedClass = new int[MaxPlantSpp + 1, RIPE + 1]; inputs.SelectFactor = 0; inputs.LegumeTrop = 0; }
/// <summary> /// Copy constructor /// </summary> /// <param name="src">The grazing inputs source object</param> public GrazingInputs(GrazingInputs src) { Array.Copy(src.Herbage, this.Herbage, src.Herbage.Length); this.TotalGreen = src.TotalGreen; this.TotalDead = src.TotalDead; this.LegumePropn = src.LegumePropn; Array.Copy(src.Seeds, this.Seeds, src.Seeds.Length); Array.Copy(src.SeedClass, this.SeedClass, src.SeedClass.Length); this.SelectFactor = src.SelectFactor; this.LegumeTrop = src.LegumeTrop; }
/// <summary> /// Add grazing inputs to total inputs /// </summary> /// <param name="iPopn">The seed population</param> /// <param name="partInputs">Partial inputs</param> /// <param name="totalInputs">Total inputs</param> public static void addGrazingInputs(int iPopn, GrazingInputs partInputs, ref GrazingInputs totalInputs) { int iClass; // IntakeRecord intakeRec; { for (iClass = 1; iClass <= DigClassNo; iClass++) { IntakeRecord intake = totalInputs.Herbage[iClass]; intake.HeightRatio = WeightAverage( intake.HeightRatio, intake.Biomass, partInputs.Herbage[iClass].HeightRatio, partInputs.Herbage[iClass].Biomass); intake.Degradability = WeightAverage( intake.Degradability, intake.Biomass * intake.CrudeProtein, partInputs.Herbage[iClass].Degradability, partInputs.Herbage[iClass].Biomass * partInputs.Herbage[iClass].CrudeProtein); intake.Digestibility = WeightAverage( intake.Digestibility, intake.Biomass, partInputs.Herbage[iClass].Digestibility, partInputs.Herbage[iClass].Biomass); intake.CrudeProtein = WeightAverage( intake.CrudeProtein, intake.Biomass, partInputs.Herbage[iClass].CrudeProtein, partInputs.Herbage[iClass].Biomass); intake.PhosContent = WeightAverage( intake.PhosContent, intake.Biomass, partInputs.Herbage[iClass].PhosContent, partInputs.Herbage[iClass].Biomass); intake.SulfContent = WeightAverage( intake.SulfContent, intake.Biomass, partInputs.Herbage[iClass].SulfContent, partInputs.Herbage[iClass].Biomass); intake.AshAlkalinity = WeightAverage( intake.AshAlkalinity, intake.Biomass, partInputs.Herbage[iClass].AshAlkalinity, partInputs.Herbage[iClass].Biomass); intake.Biomass = intake.Biomass + partInputs.Herbage[iClass].Biomass; totalInputs.Herbage[iClass] = intake; } totalInputs.LegumePropn = WeightAverage( totalInputs.LegumePropn, totalInputs.TotalGreen + totalInputs.TotalDead, partInputs.LegumePropn, partInputs.TotalGreen + partInputs.TotalDead); totalInputs.SelectFactor = WeightAverage( totalInputs.SelectFactor, totalInputs.TotalGreen + totalInputs.TotalDead, partInputs.SelectFactor, partInputs.TotalGreen + partInputs.TotalDead); totalInputs.TotalGreen = totalInputs.TotalGreen + partInputs.TotalGreen; totalInputs.TotalDead = totalInputs.TotalDead + partInputs.TotalDead; for (int i = 0; i <= 2; i++) { totalInputs.Seeds[iPopn, i] = partInputs.Seeds[1, i]; totalInputs.SeedClass[iPopn, i] = partInputs.SeedClass[1, i]; } totalInputs.LegumeTrop = WeightAverage( totalInputs.LegumeTrop, totalInputs.TotalGreen + totalInputs.TotalDead, partInputs.LegumeTrop, partInputs.TotalGreen + partInputs.TotalDead); } }