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
}
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
}
private bool UseDieselFuel(IEngineModeDeclarationInputData engineMode)
private bool UseDieselFuel(IList<IEngineFuelDelcarationInputData> fuels)
{
var fuelType = engineMode.Fuels.First().FuelType;
var isDualFuel = engineMode.Fuels.Count > 1;
var fuelType = fuels.First().FuelType;
var isDualFuel = fuels.Count > 1;
if (isDualFuel)
return true;
......@@ -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.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 n95h = fullLoadCurve.N95hSpeed.AsRPM;
var ratedPower = fullLoadCurve.MaxPower.Value();
var denormalizedData = DenormalizeData(ressourceId, nIdle, n95h, ratedPower);
var denormalizedData = DenormalizeData(ressourceId, idleSpeed, fullLoadCurve.N95hSpeed, fullLoadCurve.MaxPower);
var engineSpeed = denormalizedData.AsEnumerable().Select(r =>
r.Field<string>(FuelConsumptionMapReader.Fields.EngineSpeed).ToDouble()).ToArray();
......@@ -158,7 +155,7 @@ namespace TUGraz.VectoCore.Models.Declaration
;
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());
var engineCF = GetEngineCorrectionFactors(engineMode);
var engineCF = GetEngineCorrectionFactors(fuels);
var fuel = new CombustionEngineFuelData
{
......@@ -168,7 +165,7 @@ namespace TUGraz.VectoCore.Models.Declaration
ColdHotCorrectionFactor = engineCF[3],
CorrectionFactorRegPer = engineCF[4],
ConsumptionMap = fcMap,
FuelData = GetFuelData(engineMode)
FuelData = GetFuelData(fuels)
};
fuel.FuelConsumptionCorrectionFactor = DeclarationData.WHTCCorrection.Lookup(
mission.MissionType.GetNonEMSMissionType(), fuel.WHTCRural, fuel.WHTCUrban,
......@@ -193,12 +190,12 @@ namespace TUGraz.VectoCore.Models.Declaration
var engineSpeed = row.Field<double>("n_norm") * (n95h - nIdle) + nIdle;
var pwr = row.Field<double>("P_norm") * ratedPower;
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();
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.FuelConsumption] = Math.Round(fc, 2, MidpointRounding.AwayFromZero);
newRow[FuelConsumptionMapReader.Fields.FuelConsumption] = Math.Round(fc.ConvertToGrammPerHour().Value, 2, MidpointRounding.AwayFromZero);
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