Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 9a449d79 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

velocitydrop preprocessor: simulate traction interruption in single step

parent 2b90bd30
No related branches found
No related tags found
No related merge requests found
......@@ -77,6 +77,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
if (gearForSpeed == 0) {
continue;
}
for (var grad = MinGradient; grad <= MaxGradient; grad += GradientStep) {
var gradient = VectoMath.InclinationToAngle(grad / 100.0);
gearbox.Disengaged = false;
......@@ -100,48 +101,46 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
protected MeterPerSecond SimulateRollingVehicle(
Vehicle vehicle, Radian gradient, IVehicleContainer container)
{
var simulationInterval = Constants.SimulationSettings.TargetTimeInterval;
var simulationInterval = TractionInterruption;
var acceleration = 0.SI<MeterPerSquareSecond>();
var absTime = 0.SI<Second>();
while (absTime < TractionInterruption) {
var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
var delta = initialResponse.GearboxPowerRequest;
try {
var time = absTime;
acceleration = SearchAlgorithm.Search(
acceleration, delta, Constants.SimulationSettings.OperatingPointInitialSearchIntervalAccelerating,
getYValue: response => {
var r = (ResponseDryRun)response;
return r.GearboxPowerRequest;
},
evaluateFunction: acc => {
var response = vehicle.Request(time, simulationInterval, acc, gradient, true);
response.Acceleration = acc;
return response;
},
criterion: response => {
var r = (ResponseDryRun)response;
return r.GearboxPowerRequest.Value();
},
abortCriterion: (response, cnt) => {
var r = (ResponseDryRun)response;
return r != null && (vehicle.VehicleSpeed + r.Acceleration * simulationInterval) < 0.KMPHtoMeterPerSecond();
}
);
var step = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
if (!(step is ResponseSuccess)) {
throw new VectoSimulationException("failed to find acceleration for rolling");
var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
var delta = initialResponse.GearboxPowerRequest;
try {
var time = absTime;
acceleration = SearchAlgorithm.Search(
acceleration, delta, Constants.SimulationSettings.OperatingPointInitialSearchIntervalAccelerating,
getYValue: response => {
var r = (ResponseDryRun)response;
return r.GearboxPowerRequest;
},
evaluateFunction: acc => {
var response = vehicle.Request(time, simulationInterval, acc, gradient, true);
response.Acceleration = acc;
return response;
},
criterion: response => {
var r = (ResponseDryRun)response;
return r.GearboxPowerRequest.Value() * 100;
},
abortCriterion: (response, cnt) => {
var r = (ResponseDryRun)response;
return r != null && (vehicle.VehicleSpeed + r.Acceleration * simulationInterval) < 0.KMPHtoMeterPerSecond();
}
absTime += simulationInterval;
} catch (VectoSearchAbortedException) {
return 0.KMPHtoMeterPerSecond();
);
var step = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
if (!(step is ResponseSuccess)) {
throw new VectoSimulationException("failed to find acceleration for rolling");
}
container.CommitSimulationStep(absTime, simulationInterval);
absTime += simulationInterval;
} catch (VectoSearchAbortedException) {
return 0.KMPHtoMeterPerSecond();
}
container.CommitSimulationStep(absTime, simulationInterval);
return vehicle.VehicleSpeed;
}
......
......@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using TUGraz.VectoCommon.Utils;
......@@ -19,6 +20,7 @@ namespace TUGraz.VectoCore.Utils
protected void SetData(TEntry[] entries)
{
var stop = Stopwatch.StartNew();
_data = new DataTable();
var xEntries = new List<KeyValuePair<TKeyX, int>>();
var idx = 0;
......@@ -27,7 +29,7 @@ namespace TUGraz.VectoCore.Utils
xEntries.Add(new KeyValuePair<TKeyX, int>(xValue, idx++));
}
entriesX = xEntries.OrderBy(x => x.Key).ToArray();
entriesX = xEntries.ToArray();
idx = 0;
var yEntries = new List<KeyValuePair<TKeyY, int>>();
......@@ -37,13 +39,15 @@ namespace TUGraz.VectoCore.Utils
yEntries.Add(new KeyValuePair<TKeyY, int>(yValue, idx++));
}
entriesY = yEntries.OrderBy(x => x.Key).ToArray();
entriesY = yEntries.ToArray();
foreach (var entry in entries) {
var col = entriesX.First(x => x.Key.IsEqual(GetXValue(entry)));
var row = entriesY.First(x => x.Key.IsEqual(GetYValue(entry)));
_data.Rows[row.Value][col.Value] = GetZValue(entry);
}
stop.Stop();
Console.WriteLine("setData: {0}", stop.ElapsedMilliseconds);
}
protected abstract TKeyX GetXValue(TEntry entry);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment