Skip to content

Commit

Permalink
1691 initialize on batch create (#1694)
Browse files Browse the repository at this point in the history
* wip

* Fixes #1691 Clone simulation on batch creation

* Fixes #1691 Clone simulation on batch creation

* Fixes #1691 Clone simulation on batch creation

* Fixes #1691 Clone simulation on batch creation
  • Loading branch information
rwmcintosh authored Sep 21, 2022
1 parent 1a9e634 commit adf6f9f
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/OSPSuite.Core/Domain/ModelCoreSimulation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public interface IModelCoreSimulation : IObjectBase, IWithCreationMetaData, IWit
/// <summary>
/// Build configuration used to create the simulation. May be null
/// </summary>
IBuildConfiguration BuildConfiguration { get; }
IBuildConfiguration BuildConfiguration { get; set; }

OutputSelections OutputSelections { get; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ public SimulationPersistableUpdater(IEntitiesInSimulationRetriever entitiesInSim
public void UpdateSimulationPersistable(IModelCoreSimulation simulation)
{
var allQuantities = _entitiesInSimulationRetriever.QuantitiesFrom(simulation);
updatePersitable(allQuantities, simulation.OutputSelections);
updatePersistable(allQuantities, simulation.OutputSelections);
}

private void updatePersitable(PathCache<IQuantity> allQuantities, OutputSelections outputSelections)
private void updatePersistable(PathCache<IQuantity> allQuantities, OutputSelections outputSelections)
{
SetPersistable(allQuantities, false);

Expand Down
2 changes: 2 additions & 0 deletions src/OSPSuite.R/Api.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ public static void InitializeOnce(ApiConfig apiConfig)

public static IDataImporterTask GetDataImporterTask() => resolveTask<IDataImporterTask>();

public static ISimulationTask GetSimulationTask() => resolveTask<ISimulationTask>();

/// <summary>
/// Forces the Garbage collection
/// </summary>
Expand Down
2 changes: 1 addition & 1 deletion src/OSPSuite.R/Domain/ConcurrentRunSimulationBatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class ConcurrentRunSimulationBatch : IDisposable, IWithId

public ConcurrentRunSimulationBatch(IModelCoreSimulation simulation, SimulationBatchOptions simulationBatchOptions)
{
Simulation = simulation;
Simulation = Api.GetSimulationTask().Clone(simulation);
SimulationBatchOptions = simulationBatchOptions;
Id = generateId();
}
Expand Down
6 changes: 5 additions & 1 deletion src/OSPSuite.R/Domain/Simulation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ public IModel Model
set => CoreSimulation.Model = value;
}

public IBuildConfiguration BuildConfiguration => CoreSimulation.BuildConfiguration;
public IBuildConfiguration BuildConfiguration
{
get => CoreSimulation.BuildConfiguration;
set => CoreSimulation.BuildConfiguration = value;
}

public OutputSelections OutputSelections => CoreSimulation.OutputSelections;

Expand Down
2 changes: 0 additions & 2 deletions src/OSPSuite.R/Services/ConcurrentSimulationRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ namespace OSPSuite.R.Services
{
internal class SimulationBatchRunOptions : IWithId
{
public IModelCoreSimulation Simulation { get; set; }
public SimulationBatch SimulationBatch { get; set; }
public SimulationBatchRunValues SimulationBatchRunValues { get; set; }
public SimulationBatchOptions SimulationBatchOptions { get; set; }
Expand Down Expand Up @@ -140,7 +139,6 @@ public async Task<IEnumerable<ConcurrencyManagerResult<SimulationResults>>> RunC

var simulationBatchRunOptionsList = _listOfConcurrentRunSimulationBatch.SelectMany(sb => sb.SimulationBatchRunValues.Select((rv, i) => new SimulationBatchRunOptions
{
Simulation = sb.Simulation,
SimulationBatch = sb.SimulationBatches.ElementAt(i),
SimulationBatchOptions = sb.SimulationBatchOptions,
SimulationBatchRunValues = rv
Expand Down
38 changes: 38 additions & 0 deletions src/OSPSuite.R/Services/SimulationTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using OSPSuite.Core.Domain;
using OSPSuite.Core.Domain.Builder;
using OSPSuite.Core.Domain.Services;
using OSPSuite.R.Domain;

namespace OSPSuite.R.Services
{
public interface ISimulationTask
{
IModelCoreSimulation Clone(IModelCoreSimulation simulation);
}
public class SimulationTask : ISimulationTask
{
private readonly ICloneManagerForModel _cloneManagerForModel;

public SimulationTask(ICloneManagerForModel cloneManagerForModel)
{
_cloneManagerForModel = cloneManagerForModel;
}
public IModelCoreSimulation Clone(IModelCoreSimulation simulationToClone)
{
var simulation = new ModelCoreSimulation
{
Model = _cloneManagerForModel.CloneModel(simulationToClone.Model)
};

// Initialize a BuildConfiguration with only SimulationSettings because some of the properties to complete the initialization are required
// None of the other properties are required to complete the simulation
var simulationBuildConfiguration = new BuildConfiguration
{
SimulationSettings = _cloneManagerForModel.Clone(simulationToClone.SimulationSettings)
};
simulation.BuildConfiguration = simulationBuildConfiguration;

return simulation;
}
}
}
44 changes: 44 additions & 0 deletions tests/OSPSuite.R.Tests/Domain/ConcurrentRunSimulationBatchSpecs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using OSPSuite.BDDHelper;
using OSPSuite.BDDHelper.Extensions;
using OSPSuite.R.Services;

namespace OSPSuite.R.Domain
{
public class concern_for_ConcurrentRunSimulationBatch : ContextForIntegration<ConcurrentRunSimulationBatch>
{
protected ISimulationPersister _simulationPersister;

public override void GlobalContext()
{
base.GlobalContext();
_simulationPersister = Api.GetSimulationPersister();
}
}

public class When_creating_a_new_simulation_batch : concern_for_ConcurrentRunSimulationBatch
{
private Simulation _simulation;


protected override void Context()
{
base.Context();
_simulation = _simulationPersister.LoadSimulation(HelperForSpecs.DataFile("S1.pkml"));
}

protected override void Because()
{
sut = new ConcurrentRunSimulationBatch
(
_simulation,
new SimulationBatchOptions()
);
}

[Observation]
public void should_not_be_reference_to_the_original_simulation()
{
sut.Simulation.ShouldNotBeEqualTo(_simulation);
}
}
}

0 comments on commit adf6f9f

Please sign in to comment.