private void RunSimulation(CancellationToken cancellationToken) { var simulationTime = simulationSettings.SimulationTime; var dT = simulationSettings.TimeStep; for (CurrentTime = 0.To(Unit.Second); CurrentTime < simulationTime; CurrentTime += dT) { cancellationToken.ThrowIfCancellationRequested(); var compactnessForces = simulationSettings.UseCompactingForce ? compactnessForceCalculator.Calculate(CompactnessMeasurer.Measure(Peptide)) : new Dictionary <ApproximatedAminoAcid, ApproximateAminoAcidForces>(); var ramachandranForces = simulationSettings.UseRamachandranForce ? ramachandranForceCalculator.Calculate(Peptide) : new Dictionary <ApproximatedAminoAcid, ApproximateAminoAcidForces>(); var bondForces = bondForceCalculator.Calculate(Peptide); foreach (var aminoAcid in Peptide.AminoAcids) { var resultingForce = new ApproximateAminoAcidForces(); if (compactnessForces.ContainsKey(aminoAcid)) { var compactnessForce = compactnessForces[aminoAcid]; resultingForce += compactnessForce; } if (ramachandranForces.ContainsKey(aminoAcid)) { var ramachandranForce = ramachandranForces[aminoAcid]; resultingForce += ramachandranForce; } if (bondForces.ContainsKey(aminoAcid)) { var bondForce = bondForces[aminoAcid]; resultingForce += bondForce; } ApplyForce(aminoAcid, resultingForce, dT, simulationSettings.ReservoirTemperature); } OnSimulationTimestepComplete(new SimulationTimestepCompleteEventArgs(CurrentTime, Peptide)); } SimulationCompleted?.Invoke(this, EventArgs.Empty); IsSimulating = false; }
/// <summary> /// Measured time, invokes simulation completed event and logs simulation completed event. /// Simulation completed message: "Calculated *simulation name* simulation in *measured time*ms". /// </summary> /// <param name="schematic">Schematic for which to perform the simulation</param> /// <param name="simulationLogic">Action that is responsible for performing and saving simulation results</param> /// <param name="simulationName">Name to use in simulation ended message</param> /// <param name="simulationType">Type of the simulation, for simulation ended event purposes</param> private void SimulationRunWrapper(ISchematic schematic, Action <AdmittanceMatrixFactory> simulationLogic, string simulationName, SimulationType simulationType) { // Create a stopwatch to measure the duration of simulation Stopwatch watch = new Stopwatch(); // Start measuring time watch.Start(); // Create an admittance matrix factory and use it to invoke passed simulation logic simulationLogic(new AdmittanceMatrixFactory(schematic)); // Stop time measurement watch.Stop(); // Invoke simulation completed event SimulationCompleted?.Invoke(this, new SimulationCompletedEventArgs(simulationType)); // Log the simulation time IoC.Log("Completed " + simulationName + $" in {watch.ElapsedMilliseconds}ms", InfoLoggerMessageDuration.Short); }
/// <summary> /// Invoked when a job is completed. /// </summary> /// <param name="sender">The sender of the event.</param> /// <param name="e">The event arguments.</param> private void OnJobCompleted(object sender, JobCompleteArguments e) { AddException(e.ExceptionThrowByJob); SimulationCompleted?.Invoke(this, e); }
private void OnSimulationFinished() { SimulationCompleted?.Invoke(this, EventArgs.Empty); }