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

Skip to content
Snippets Groups Projects
Commit 6dee97d1 authored by Michael KRISPER's avatar Michael KRISPER Committed by Markus Quaritsch
Browse files

bugfix: sumfile and pdf report CO2 value is now based on FC-Final

parent df21562a
No related branches found
Tags Build/V3.0.2.466
No related merge requests found
......@@ -69,7 +69,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
driverdata.AccelerationCurve = AccelerationCurveData.ReadFromStream(segment.AccelerationFile);
var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData);
var gearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData);
var axlegearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData);
var retarderData = dao.CreateRetarderData(InputDataProvider.RetarderInputData, InputDataProvider.VehicleInputData);
......@@ -102,7 +101,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
var simulationRunData = new VectoRunData {
Loading = loading.Key,
VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData, mission, loading.Value),
EngineData = engineData,
EngineData = engineData.Copy(),
GearboxData = gearboxData,
AxleGearData = axlegearData,
Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), mission.MissionType,
......
......@@ -50,7 +50,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
public const string ShowUnit = "showUnit";
}
public ModalResults()
{
foreach (var value in EnumHelper.GetValues<ModalResultField>()) {
......@@ -189,6 +188,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
/// </summary>
[ModalResultField(typeof(SI), name: "FC-WHTCc", caption: "FC-WHTCc [g/h]", outputFactor: 3600 * 1000)] FCWHTCc,
/// <summary>
/// [g/h] Fuel consumption after WHTC Correction. (Based on FC-AUXc.)
/// </summary>
[ModalResultField(typeof(SI), name: "FC-Final", caption: "FC-Final [g/h]", outputFactor: 3600 * 1000)] FCFinal,
/// <summary>
/// [km] Travelled distance.
/// </summary>
......@@ -286,7 +290,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
[ModalResultField(typeof(SI), caption: "P_eng_fcmap [kW]", outputFactor: 1e-3)] P_eng_fcmap,
/// <summary>
/// [kW] Power demand of Auxiliary with ID xxx. See also Aux Dialog and Driving Cycle.
/// </summary>
......@@ -320,7 +323,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
[ModalResultField(typeof(SI), name: "ds [m]")] simulationDistance
}
[AttributeUsage(AttributeTargets.Field)]
public class ModalResultFieldAttribute : Attribute
{
......
......@@ -71,6 +71,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
WHTCRural = 1;
}
public CombustionEngineData Copy()
{
return new CombustionEngineData {
Displacement = Displacement,
IdleSpeed = IdleSpeed,
Inertia = Inertia,
WHTCUrban = WHTCUrban,
WHTCRural = WHTCRural,
WHTCMotorway = WHTCMotorway,
ConsumptionMap = ConsumptionMap,
FullLoadCurve = FullLoadCurve,
WHTCCorrectionFactor = WHTCCorrectionFactor,
};
}
#region Equality Member
protected bool Equals(CombustionEngineData other)
......
......@@ -327,12 +327,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
try {
var fc = ModelData.ConsumptionMap.GetFuelConsumption(CurrentState.EngineTorque, avgEngineSpeed,
allowExtrapolation: (DataBus.ExecutionMode != ExecutionMode.Declaration));
container[ModalResultField.FCMap] = fc;
//todo (MK, 2015-11-11): calculate aux start stop correction when start stop functionality is implemented in v3
var fcaux = fc;
container[ModalResultField.FCAUXc] = fcaux;
container[ModalResultField.FCWHTCc] = fcaux * ModelData.WHTCCorrectionFactor;
var fcAux = fc;
var fcWHTC = fcAux * ModelData.WHTCCorrectionFactor;
var fcFinal = fcWHTC;
container[ModalResultField.FCMap] = fc;
container[ModalResultField.FCAUXc] = fcAux;
container[ModalResultField.FCWHTCc] = fcWHTC;
container[ModalResultField.FCFinal] = fcFinal;
if (ModelData.ConsumptionMap.Extrapolated) {
Log.Warn("FuelMap Extrapolated: n_eng_avg: {0} Tq: {1}, FC: {2}", avgEngineSpeed.ConvertTo().Rounds.Per.Minute,
......@@ -342,6 +347,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
Log.Warn("FuelMap: {0} n_eng_avg: {1} Tq: {2}", ex.Message, avgEngineSpeed.ConvertTo().Rounds.Per.Minute,
CurrentState.EngineTorque);
container[ModalResultField.FCMap] = null;
container[ModalResultField.FCAUXc] = null;
container[ModalResultField.FCWHTCc] = null;
container[ModalResultField.FCFinal] = null;
}
}
......@@ -442,11 +450,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public NewtonMeter FullDragTorque { get; set; }
// ReSharper disable once InconsistentNaming
}
protected class CombustionEngineIdleController : LoggingObject, ICombustionEngineIdleController
{
protected readonly double PeDropSlope = -0.75;
......@@ -503,7 +509,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return retVal;
}
nextAngularSpeed = prevEngineSpeed + deltaAngularSpeed;
if (nextAngularSpeed < Engine.ModelData.IdleSpeed) {
nextAngularSpeed = Engine.ModelData.IdleSpeed;
......@@ -541,7 +546,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
do {
nextAngularSpeed -= searchInterval * delta.Sign();
var response = (ResponseDryRun)RequestPort.Request(absTime, dt, torque, nextAngularSpeed, true);
delta = response.DeltaDragLoad;
debug.Add(new { engineSpeed = nextAngularSpeed, searchInterval, delta });
......
......@@ -79,7 +79,6 @@ namespace TUGraz.VectoCore.OutputData
VectoRun.Status RunStatus { get; }
/// <summary>
/// Finishes the writing of the DataWriter.
/// </summary>
......@@ -91,7 +90,6 @@ namespace TUGraz.VectoCore.OutputData
IEnumerable<T> GetValues<T>(DataColumn col);
Dictionary<string, DataColumn> Auxiliaries { get; set; }
void AddAuxiliary(string id);
......@@ -344,7 +342,7 @@ namespace TUGraz.VectoCore.OutputData
if (distance == null || distance.IsEqual(0)) {
return null;
}
return data.TimeIntegral<Kilogram>(ModalResultField.FCWHTCc) / distance;
return data.TimeIntegral<Kilogram>(ModalResultField.FCFinal) / distance;
}
public static SI FuelConsumptionFinalLiterPer100Kilometer(this IModalDataContainer data)
......@@ -364,7 +362,7 @@ namespace TUGraz.VectoCore.OutputData
if (distance == null || distance.IsEqual(0)) {
return null;
}
return data.TimeIntegral<Kilogram>(ModalResultField.FCMap) * Physics.CO2PerFuelWeight / distance;
return data.TimeIntegral<Kilogram>(ModalResultField.FCFinal) * Physics.CO2PerFuelWeight / distance;
}
public static SI FuelConsumptionLiterPer100Kilometer(this IModalDataContainer data)
......@@ -375,7 +373,7 @@ namespace TUGraz.VectoCore.OutputData
public static KilogramPerSecond FuelConsumptionPerSecond(this IModalDataContainer data)
{
return data.TimeIntegral<Kilogram>(ModalResultField.FCMap) / data.Duration();
return data.TimeIntegral<Kilogram>(ModalResultField.FCFinal) / data.Duration();
}
public static KilogramPerMeter FuelConsumptionPerMeter(this IModalDataContainer data)
......@@ -384,7 +382,7 @@ namespace TUGraz.VectoCore.OutputData
if (distance == null || distance.IsEqual(0)) {
return null;
}
return data.TimeIntegral<Kilogram>(ModalResultField.FCMap) / distance;
return data.TimeIntegral<Kilogram>(ModalResultField.FCFinal) / distance;
}
public static Watt EnginePowerNegativeAverage(this IModalDataContainer data)
......@@ -427,7 +425,6 @@ namespace TUGraz.VectoCore.OutputData
return data.GetValues<Watt>(auxCol).Zip(simulationIntervals, (value, dt) => value * dt).Sum().Cast<WattSecond>();
}
private static T TimeIntegral<T>(this IModalDataContainer data, ModalResultField field, Func<SI, bool> filter = null)
where T : SIBase<T>
{
......@@ -457,7 +454,6 @@ namespace TUGraz.VectoCore.OutputData
}
}
/// <summary>
/// Calculates the average acceleration for whole seconds.
/// </summary>
......
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