Ejemplo n.º 1
0
        private IndividualSimulation createAndRun(Func <ISimulationFactory, IndividualSimulation> individualSimulationCreator)
        {
            var individualSimulation = individualSimulationCreator(_simulationFactory);

            try
            {
                _registrationTask.Register(individualSimulation);
                _simulationEngine.Run(individualSimulation);
            }
            finally
            {
                _registrationTask.Unregister(individualSimulation);
            }

            return(individualSimulation);
        }
Ejemplo n.º 2
0
        public void Fertiliser_EnsureApplyWorks()
        {
            // Create a tree with a root node for our models.
            Simulation simulation = new Simulation();

            Clock clock = new Clock();

            clock.StartDate = new DateTime(2015, 1, 1);
            clock.EndDate   = new DateTime(2015, 1, 1);
            simulation.Children.Add(clock);

            MockSummary summary = new MockSummary();

            simulation.Children.Add(summary);

            MockSoil soil = new MockSoil();

            soil.Thickness = new double[] { 100, 100, 100 };
            soil.NO3       = new double[] { 1, 2, 3 };
            simulation.Children.Add(soil);

            Fertiliser fertiliser = new Fertiliser();

            fertiliser.Name = "Fertilise";
            simulation.Children.Add(fertiliser);

            Operations operations         = new Operations();
            Operation  fertiliseOperation = new Operation();

            fertiliseOperation.Date   = "1-jan";
            fertiliseOperation.Action = "[Fertilise].Apply(Amount: 100, Type:Fertiliser.Types.NO3N, Depth:300)";
            operations.Schedule       = new List <Operation>();
            operations.Schedule.Add(fertiliseOperation);
            simulation.Children.Add(operations);

            simulation.Children.Add(new SoluteManager());

            ISimulationEngine simulationEngine = Simulations.Create(new Model[] { simulation });

            simulationEngine.Run(simulation, doClone: false);

            Assert.AreEqual(soil.NO3, new double[] { 1, 2, 103 });
            Assert.AreEqual(MockSummary.messages[0], "100 kg/ha of NO3N added at depth 300 layer 3");
        }