private void SetSimulationNamesInView() { // populate the simulation names in the view. IModel scopedParent = ScopingRules.FindScopedParentModel(summaryModel); if (scopedParent is Simulation parentSimulation) { if (scopedParent.Parent is Experiment) { scopedParent = scopedParent.Parent; } else { summaryView.SimulationDropDown.Values = new string[] { parentSimulation.Name }; summaryView.SimulationDropDown.SelectedValue = parentSimulation.Name; return; } } if (scopedParent is Experiment experiment) { string[] simulationNames = experiment.GenerateSimulationDescriptions().Select(s => s.Name).ToArray(); summaryView.SimulationDropDown.Values = simulationNames; if (simulationNames != null && simulationNames.Count() > 0) { summaryView.SimulationDropDown.SelectedValue = simulationNames.First(); } } else { List <ISimulationDescriptionGenerator> simulations = summaryModel.FindAllInScope <ISimulationDescriptionGenerator>().Cast <ISimulationDescriptionGenerator>().ToList(); simulations.RemoveAll(s => s is Simulation && (s as IModel).Parent is Experiment); List <string> simulationNames = simulations.SelectMany(m => m.GenerateSimulationDescriptions()).Select(m => m.Name).ToList(); simulationNames.AddRange(summaryModel.FindAllInScope <Models.Optimisation.CroptimizR>().Select(x => x.Name)); summaryView.SimulationDropDown.Values = simulationNames.ToArray(); if (simulationNames != null && simulationNames.Count > 0) { summaryView.SimulationDropDown.SelectedValue = simulationNames[0]; } } }
/// <summary> /// Locates and returns all models in scope. /// </summary> /// <param name="model">The reference model</param> /// <returns>The found models or an empty array if not found.</returns> public static List<IModel> FindAll(IModel model) { var simulation = Apsim.Parent(model, typeof(Simulation)) as Simulation; if (simulation == null || simulation.Scope == null) { ScopingRules scope = new ScopingRules(); return scope.FindAll(model).ToList(); } return simulation.Scope.FindAll(model).ToList(); }
/// <summary>Constructor</summary> public Simulation() { locater = new Locater(); scope = new ScopingRules(); }
/// <summary>Connect all links and events in simulation</summary> public void ConnectLinksAndEvents() { scope = new ScopingRules(); events = new Events(this); events.ConnectEvents(); links = new Core.Links(); links.Resolve(this); }