/// <summary> /// /// </summary> /// <param name="RemoveRequest"></param> public void Remove(object RemoveRequest) { RuminantFeedRequest removeRequest = RemoveRequest as RuminantFeedRequest; // limit by available removeRequest.Amount = Math.Min(removeRequest.Amount, amount); // add to intake and update %N and %DMD values removeRequest.Requestor.AddIntake(removeRequest); // Remove from resource Remove(removeRequest.Amount, removeRequest.FeedActivity.Name, removeRequest.Requestor.BreedParams.Name); }
/// <summary> /// A funtion to add intake and track changes in %N and DietDryMatterDigestibility /// </summary> /// <param name="intake">Feed request contianing intake information kg, %n, DMD</param> public void AddIntake(RuminantFeedRequest intake) { if (intake.Amount > 0) { // determine the adjusted DMD of all intake this.DietDryMatterDigestibility = ((this.Intake * this.DietDryMatterDigestibility / 100.0) + (intake.FeedActivity.FeedType.DMD / 100.0 * intake.Amount)) / (this.Intake + intake.Amount) * 100.0; // determine the adjusted percentage N of all intake this.PercentNOfIntake = ((this.Intake * this.PercentNOfIntake / 100.0) + (intake.FeedActivity.FeedType.Nitrogen / 100.0 * intake.Amount)) / (this.Intake + intake.Amount) * 100.0;; this.Intake += intake.Amount; } }
private void OnWFRequestFeed(object sender, EventArgs e) { if (labourLimiter > 0) { RuminantHerd ruminantHerd = Resources.RuminantHerd(); List <Ruminant> herd = ruminantHerd.Herd; if (herd == null && herd.Count == 0) { return; } // get month from clock int month = Clock.Today.Month; // get list from filters foreach (var child in this.Children) { if (child.GetType() == typeof(RuminantFilterGroup)) { foreach (Ruminant ind in herd.Filter(child as RuminantFilterGroup)) { RuminantFeedRequest freqest = new RuminantFeedRequest(); freqest.FeedActivity = this; freqest.Requestor = ind; freqest.Amount = 0; switch (FeedStyle) { case RuminantFeedActivityTypes.SpecifiedDailyAmount: freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * 30.4; // * ind.Number; break; case RuminantFeedActivityTypes.ProportionOfWeight: freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * ind.Weight * 30.4; // * ind.Number; break; case RuminantFeedActivityTypes.ProportionOfPotentialIntake: freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * ind.PotentialIntake; // * ind.Number; break; case RuminantFeedActivityTypes.ProportionOfRemainingIntakeRequired: freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * (ind.PotentialIntake - ind.Intake); // * ind.Number; break; default: break; } freqest.Amount *= labourLimiter; FoodSource.Remove(freqest); } } } } }
/// <summary> /// /// </summary> /// <param name="RemoveRequest"></param> public void Remove(object RemoveRequest) { // Called if activity removes food directly from GrazeFoodStore (no Feed Arbitrator used) // Remove requested amount from all pools as proportion pool amount of whole biomass RuminantFeedRequest feedRequest = RemoveRequest as RuminantFeedRequest; double totalAvailable = Pools.Sum(a => a.Amount); double amountToTake = Math.Min(feedRequest.Amount, totalAvailable); foreach (var pool in Pools) { feedRequest.Amount = amountToTake * (pool.Amount / totalAvailable); pool.Remove(feedRequest); } }