Esempio n. 1
0
        private void OnEndOfDay(object sender, EventArgs e)
        {
            consumedFoodPP = new Food();
            intakeFoodPP   = new Food();
            digestedFoodPP = new Food();

            consumedFood = new Food();
            intakeFood   = new Food();
            digestedFood = new Food();
            wastedFood   = new Food();

            stressStock    = Stress_Stock(prawns.StockingDensity(PondWater.SurfaceArea));
            stressTemp     = Stress_Temp(PondWater.PondTemp);
            stressSalinity = Stress_Salinity(PondWater.Salinity);

            double totalDMConsumedPP = PotentialDMConsumedPerPrawn(prawns, stressStock, stressTemp);

            totalDMConsumedPP = CheckEnoughFoodToConsumeToday(FoodInPond.Food, prawns, totalDMConsumedPP);


            foreach (Feed feed in FoodInPond.Food)
            {
                Feed consumedFeedPP = FeedConsumedPerPrawn(FoodInPond.Food, feed, totalDMConsumedPP);
                Feed intakeFeedPP   = FeedIntakePerPrawn(consumedFeedPP);
                Feed digestedFeedPP = FeedDigestedPerPrawn(intakeFeedPP);

                consumedFoodPP.AddFeed(consumedFeedPP);
                intakeFoodPP.AddFeed(intakeFeedPP);
                digestedFoodPP.AddFeed(digestedFeedPP);
            }


            energyMaintenancePP = EnergyMaintenance(prawns, stressTemp, stressSalinity);
            weightGainPP        = WeightGainPerPrawn(digestedFoodPP, energyMaintenancePP);
            nitrogenGainPP      = NitrogenGainPerPrawn(weightGainPP);

            prawns.LiveWeight   = prawns.LiveWeight + weightGainPP;
            prawns.NitrogenMass = prawns.NitrogenMass + nitrogenGainPP;


            deaths = Mortality(prawns, PondWater.Salinity, PondWater.N);  //TODO: PondWater.N should be PondWater.NH4
            prawns.NumberOfPrawns = Math.Max(prawns.NumberOfPrawns - deaths, 0);


            //Calculate the total outputs now we have the correct number of prawns still alive.
            foreach (Feed consumedFeedPP in consumedFoodPP)
            {
                Feed consumedFeed = FeedConsumed(prawns, consumedFeedPP);
                Feed wastedFeed   = FeedWasted(consumedFeed);

                consumedFood.AddFeed(consumedFeed);
                wastedFood.AddFeed(wastedFeed);
            }

            foreach (Feed intakeFeedPP in intakeFoodPP)
            {
                Feed intakeFeed = FeedIntake(prawns, intakeFeedPP);
                intakeFood.AddFeed(intakeFeed);
            }

            foreach (Feed digestedFeedPP in digestedFoodPP)
            {
                Feed digestedFeed = FeedDigested(prawns, digestedFeedPP);
                digestedFood.AddFeed(digestedFeed);
            }


            faecesDM         = intakeFood.TotalDM - digestedFood.TotalDM;
            faecesN          = intakeFood.TotalN - digestedFood.TotalN;
            excretedAmmonium = Math.Max(0, digestedFood.TotalN - (nitrogenGainPP * prawns.NumberOfPrawns));  //can't be negative.


            FoodInPond.Food.RemoveFromExisting(consumedFood);


            deadPrawnsAsFeed = DeadPrawnsAsFeed(deaths, prawns);
            FoodInPond.Food.AddFeed(deadPrawnsAsFeed);
        }