Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 112ea3a0 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

sum file gets written. nearly all tests running.

parent fa99311a
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
Object Compute(string expression, string filter);
IEnumerable<object> GetValues(ModalResultField key);
IEnumerable<T> GetValues<T>(ModalResultField key);
}
}
\ No newline at end of file
......@@ -35,9 +35,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
return Data.Compute(expression, filter);
}
public IEnumerable<object> GetValues(ModalResultField key)
public IEnumerable<T> GetValues<T>(ModalResultField key)
{
return Data.Rows.Cast<DataRow>().Select(x => x[(int)key]);
return Data.Rows.Cast<DataRow>().Select(x => x.Field<T>((int)key));
}
......
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCore.Utils;
......@@ -62,23 +63,23 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
row["speed [km/h]"] = data.Compute("Avg(v_act)", "");
row["Ppos [kw]"] = data.Compute("Avg(Peng)", "Pe_eng > 0");
row["Pneg [kw]"] = data.Compute("Avg(Peng)", "Pe_eng < 0");
row["Ppos [kw]"] = data.Compute("Avg(Pe_eng)", "Pe_eng > 0");
row["Pneg [kw]"] = data.Compute("Avg(Pe_eng)", "Pe_eng < 0");
row["FC [g/km]"] = data.Compute("Avg(FC)", "");
row["FC-AUXc [g/km]"] = data.Compute("Avg(FC-AUXc)", "");
row["FC-WHTCc [g/km]"] = data.Compute("Avg(FC-WHTCc)", "");
row["FC-AUXc [g/km]"] = data.Compute("Avg([FC-AUXc])", "");
row["FC-WHTCc [g/km]"] = data.Compute("Avg([FC-WHTCc])", "");
row["Pbrake [kw]"] = data.Compute("Avg(Pbrake)", "");
row["EposICE [kwh]"] = data.Compute("Avg(pos)", "pos > 0");
row["EnegICE [kwh]"] = data.Compute("Avg(pos)", "pos < 0");
row["EposICE [kwh]"] = data.Compute("Avg(Pe_eng)", "Pe_eng > 0");
row["EnegICE [kwh]"] = data.Compute("Avg(Pe_eng)", "Pe_eng < 0");
row["Eair [kwh]"] = data.Compute("Sum(Pair)", "");
row["Eroll [kwh]"] = data.Compute("Sum(Proll)", "");
row["Egrad [kwh]"] = data.Compute("Sum(Pgrad)", "");
row["Eaux [kwh]"] = data.Compute("Sum(Paux)", "");
row["Ebrake [kwh]"] = data.Compute("Sum(brake)", "");
row["Etransm [kwh]"] = data.Compute("Sum(transm)", "");
row["Eretarder [kwh]"] = data.Compute("Sum(retarder)", "");
row["Eacc [kwh]"] = data.Compute("Sum(Pa+PaGB+PaEng)", "");
row["a [m/s2]"] = data.Compute("Avg(a)", "");
row["Ebrake [kwh]"] = data.Compute("Sum(Pbrake)", "");
row["Etransm [kwh]"] = data.Compute("Sum([Ploss Diff]) + Sum([Ploss GB])", "");
row["Eretarder [kwh]"] = data.Compute("Sum([Ploss Retarder])", "");
row["Eacc [kwh]"] = data.Compute("Sum(Pa)+Sum([Pa GB])", ""); // TODO +PaEng?
row["a [m/s2]"] = data.Compute("Avg(acc)", ""); // todo dynamic time steps!
//todo altitude - calculate when reading the cycle file, add column for altitude
......@@ -94,12 +95,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
//row["Mass [kg]"] = Container.VehicleMass();
//row["Loading [kg]"] = Container.LoadingMass();
var acceleration = data.GetValues(ModalResultField.acc).Cast<double>().ToList();
var simInterval = data.GetValues(ModalResultField.simulationInterval).Cast<double>().ToList();
var acceleration = data.GetValues<double?>(ModalResultField.acc).ToList();
var simInterval = data.GetValues<double>(ModalResultField.simulationInterval).ToList();
//todo dynamic time steps!!!
var runningAverage = (acceleration[0] + acceleration[1] + acceleration[2]) / 3;
var accelerationAvg = new List<double>();
var accelerationAvg = new List<double?>();
for (var i = 2; i < acceleration.Count() - 1; i++) {
runningAverage -= acceleration[i - 2] / 3;
......@@ -107,8 +108,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
accelerationAvg.Add(runningAverage);
}
row["a_pos [m/s2]"] = accelerationAvg.Where(x => x > 0.125).Average();
row["a_neg [m/s2]"] = accelerationAvg.Where(x => x < -0.125).Average();
var apos = accelerationAvg.Where(x => x > 0.125).Average();
if (apos.HasValue) {
row["a_pos [m/s2]"] = apos;
}
var aneg = accelerationAvg.Where(x => x < -0.125).Average();
if (aneg.HasValue) {
row["a_neg [m/s2]"] = aneg;
}
row["pAcc [%]"] = 100.0 * accelerationAvg.Count(x => x > 0.125) / accelerationAvg.Count;
......@@ -116,14 +125,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
row["pCruise [%]"] = 100.0 * accelerationAvg.Count(x => x < 0.125 && x > -0.125) / accelerationAvg.Count;
var velocity = data.GetValues(ModalResultField.v_act).Cast<double>().ToList();
var velocity = data.GetValues<double?>(ModalResultField.v_act).ToList();
var timeSum = 0.0;
for (var i = 0; i < velocity.Count; i++) {
if (velocity[i] < 0.1) {
timeSum += simInterval[i];
}
}
row["pStop [%]"] = 100.0 * timeSum / (double)data.Compute("Max(v_act)", "");
row["pStop [%]"] = 100.0 * timeSum / (double)data.Compute("Max(time)", "");
_table.ImportRow(row);
}
......
......@@ -22,7 +22,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
private static int _jobNumber;
public JobContainer() {}
public JobContainer(ISummaryDataWriter sumWriter)
{
_sumWriter = sumWriter;
}
public JobContainer(VectoJobData data)
{
......
......@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
var job = CreateJob(resultFileName);
var sim = new JobContainer();
var sim = new JobContainer(new TestSumWriter());
sim.AddJob(job);
sim.RunJobs();
......@@ -100,7 +100,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
var expectedResultsName = @"TestData\Results\EngineOnlyCycles\24tCoach_EngineOnly short.vmod";
var expectedResults = ModalResults.ReadFromFile(expectedResultsName);
var simulation = new JobContainer();
var simulation = new JobContainer(new TestSumWriter());
foreach (var resultFile in resultFiles) {
simulation.AddJob(CreateJob(resultFile));
}
......
......@@ -33,9 +33,9 @@ namespace TUGraz.VectoCore.Tests.Utils
return Data.Compute(expression, filter);
}
public IEnumerable<object> GetValues(ModalResultField key)
public IEnumerable<T> GetValues<T>(ModalResultField key)
{
return Data.Rows.Cast<DataRow>().Select(x => x[(int)key]);
return Data.Rows.Cast<DataRow>().Select(x => x.Field<T>((int)key));
}
public object this[ModalResultField key]
......
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