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

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

refactoring generic fuel data class

parent 993a87c0
No related branches found
No related tags found
No related merge requests found
...@@ -78,9 +78,10 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -78,9 +78,10 @@ namespace TUGraz.VectoCore.Models.Declaration
} }
engine.FullLoadCurves = fullLoadCurves; engine.FullLoadCurves = fullLoadCurves;
var fuel = GetCombustionEngineFuelData(primaryVehicle.Components.EngineInputData.EngineModes[modeIdx], fullLoadCurves[0], mission); var engineMode = primaryVehicle.Components.EngineInputData.EngineModes[modeIdx];
var fuel = GetCombustionEngineFuelData(engineMode.Fuels,
VectoMath.Max(engineMode.IdleSpeed, primaryVehicle.EngineIdleSpeed), fullLoadCurves[0], mission);
...@@ -91,10 +92,10 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -91,10 +92,10 @@ namespace TUGraz.VectoCore.Models.Declaration
} }
private bool UseDieselFuel(IEngineModeDeclarationInputData engineMode) private bool UseDieselFuel(IList<IEngineFuelDelcarationInputData> fuels)
{ {
var fuelType = engineMode.Fuels.First().FuelType; var fuelType = fuels.First().FuelType;
var isDualFuel = engineMode.Fuels.Count > 1; var isDualFuel = fuels.Count > 1;
if (isDualFuel) if (isDualFuel)
return true; return true;
...@@ -109,32 +110,28 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -109,32 +110,28 @@ namespace TUGraz.VectoCore.Models.Declaration
} }
} }
private string GetEngineRessourceId(IEngineModeDeclarationInputData engineMode) private string GetEngineRessourceId(IList<IEngineFuelDelcarationInputData> fuels)
{ {
return UseDieselFuel(engineMode) ? GenericEngineCM_Normed_CI : GenericEngineCM_Normed_PI; return UseDieselFuel(fuels) ? GenericEngineCM_Normed_CI : GenericEngineCM_Normed_PI;
} }
private IFuelProperties GetFuelData(IEngineModeDeclarationInputData engineMode) private IFuelProperties GetFuelData(IList<IEngineFuelDelcarationInputData> fuels)
{ {
return UseDieselFuel(engineMode) return UseDieselFuel(fuels)
? FuelData.Diesel ? FuelData.Diesel
: FuelData.Instance().Lookup(FuelType.NGPI, TankSystem.Compressed); : FuelData.Instance().Lookup(FuelType.NGPI, TankSystem.Compressed);
} }
private double[] GetEngineCorrectionFactors(IEngineModeDeclarationInputData engineMode) private double[] GetEngineCorrectionFactors(IList<IEngineFuelDelcarationInputData> fuels)
{ {
return UseDieselFuel(engineMode) ? DieselCIFactors : PIFactors; return UseDieselFuel(fuels) ? DieselCIFactors : PIFactors;
} }
private CombustionEngineFuelData GetCombustionEngineFuelData(IEngineModeDeclarationInputData engineMode, EngineFullLoadCurve fullLoadCurve, Mission mission) private CombustionEngineFuelData GetCombustionEngineFuelData(IList<IEngineFuelDelcarationInputData> fuels, PerSecond idleSpeed, EngineFullLoadCurve fullLoadCurve, Mission mission)
{ {
var ressourceId = GetEngineRessourceId(engineMode); var ressourceId = GetEngineRessourceId(fuels);
var nIdle = engineMode.IdleSpeed.AsRPM; var denormalizedData = DenormalizeData(ressourceId, idleSpeed, fullLoadCurve.N95hSpeed, fullLoadCurve.MaxPower);
var n95h = fullLoadCurve.N95hSpeed.AsRPM;
var ratedPower = fullLoadCurve.MaxPower.Value();
var denormalizedData = DenormalizeData(ressourceId, nIdle, n95h, ratedPower);
var engineSpeed = denormalizedData.AsEnumerable().Select(r => var engineSpeed = denormalizedData.AsEnumerable().Select(r =>
r.Field<string>(FuelConsumptionMapReader.Fields.EngineSpeed).ToDouble()).ToArray(); r.Field<string>(FuelConsumptionMapReader.Fields.EngineSpeed).ToDouble()).ToArray();
...@@ -158,7 +155,7 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -158,7 +155,7 @@ namespace TUGraz.VectoCore.Models.Declaration
; ;
var fcMap = FuelConsumptionMapReader.Create(denormalizedData.AsEnumerable().OrderBy(r => r.Field<string>(FuelConsumptionMapReader.Fields.EngineSpeed).ToDouble()) var fcMap = FuelConsumptionMapReader.Create(denormalizedData.AsEnumerable().OrderBy(r => r.Field<string>(FuelConsumptionMapReader.Fields.EngineSpeed).ToDouble())
.ThenBy(r => r.Field<string>(FuelConsumptionMapReader.Fields.Torque).ToDouble()).CopyToDataTable()); .ThenBy(r => r.Field<string>(FuelConsumptionMapReader.Fields.Torque).ToDouble()).CopyToDataTable());
var engineCF = GetEngineCorrectionFactors(engineMode); var engineCF = GetEngineCorrectionFactors(fuels);
var fuel = new CombustionEngineFuelData var fuel = new CombustionEngineFuelData
{ {
...@@ -168,7 +165,7 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -168,7 +165,7 @@ namespace TUGraz.VectoCore.Models.Declaration
ColdHotCorrectionFactor = engineCF[3], ColdHotCorrectionFactor = engineCF[3],
CorrectionFactorRegPer = engineCF[4], CorrectionFactorRegPer = engineCF[4],
ConsumptionMap = fcMap, ConsumptionMap = fcMap,
FuelData = GetFuelData(engineMode) FuelData = GetFuelData(fuels)
}; };
fuel.FuelConsumptionCorrectionFactor = DeclarationData.WHTCCorrection.Lookup( fuel.FuelConsumptionCorrectionFactor = DeclarationData.WHTCCorrection.Lookup(
mission.MissionType.GetNonEMSMissionType(), fuel.WHTCRural, fuel.WHTCUrban, mission.MissionType.GetNonEMSMissionType(), fuel.WHTCRural, fuel.WHTCUrban,
...@@ -193,12 +190,12 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -193,12 +190,12 @@ namespace TUGraz.VectoCore.Models.Declaration
var engineSpeed = row.Field<double>("n_norm") * (n95h - nIdle) + nIdle; var engineSpeed = row.Field<double>("n_norm") * (n95h - nIdle) + nIdle;
var pwr = row.Field<double>("P_norm") * ratedPower; var pwr = row.Field<double>("P_norm") * ratedPower;
var torque = pwr / engineSpeed; var torque = pwr / engineSpeed;
var fc = row.Field<double>("FC_norm") * pwr; var fc = (row.Field<double>("FC_norm").SI(Unit.SI.Gramm.Per.Hour.Per.Kilo.Watt) * pwr).Cast<KilogramPerSecond>();
var newRow = result.NewRow(); var newRow = result.NewRow();
newRow[FuelConsumptionMapReader.Fields.EngineSpeed] = Math.Round(engineSpeed.AsRPM,2, MidpointRounding.AwayFromZero); newRow[FuelConsumptionMapReader.Fields.EngineSpeed] = Math.Round(engineSpeed.AsRPM,2, MidpointRounding.AwayFromZero);
newRow[FuelConsumptionMapReader.Fields.Torque] = Math.Round(torque.Value(), 2, MidpointRounding.AwayFromZero); newRow[FuelConsumptionMapReader.Fields.Torque] = Math.Round(torque.Value(), 2, MidpointRounding.AwayFromZero);
newRow[FuelConsumptionMapReader.Fields.FuelConsumption] = Math.Round(fc, 2, MidpointRounding.AwayFromZero); newRow[FuelConsumptionMapReader.Fields.FuelConsumption] = Math.Round(fc.ConvertToGrammPerHour().Value, 2, MidpointRounding.AwayFromZero);
result.Rows.Add(newRow); result.Rows.Add(newRow);
} }
......
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