diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs index ee7e49b7562fa42ad733b2d94a892fb7fd0118b3..64a485276aeaf33390892d6bf18155b1ada170f4 100644 --- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs @@ -142,6 +142,22 @@ namespace TUGraz.VectoCore.OutputData .Average(); } + + public static MeterPerSquareSecond AverageAccelerationBelowTargetSpeed(this IModalDataContainer data) + { + var accPos = data.GetValues( + x => new { + a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc), + dt = x.Field<Second>((int)ModalResultField.simulationInterval), + dv = x.Field<MeterPerSecond>((int)ModalResultField.v_targ) - + x.Field<MeterPerSecond>((int)ModalResultField.v_act), + driverStatus = x.Field<int>((int)ModalResultField.drivingBehavior) + }).Where(x => x.driverStatus == 2 && x.dv > 0).ToArray(); + var duration = accPos.Sum(x => x.dt); + var accSum = accPos.Sum(x => x.a * x.dt); + return accSum / duration; + } + public static MeterPerSquareSecond AccelerationsNegative(this IModalDataContainer data) { return data.GetValues<MeterPerSquareSecond>(ModalResultField.acc) diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index ee698c77b2fcc8aca37fc0003675e00addd8f921..65b933d762817c2184c991049a762aa47d438550 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -239,6 +239,8 @@ namespace TUGraz.VectoCore.OutputData public const string AIRDRAG_CERTIFICATION_NUMBER = "AirDrag certification number"; public const string AIRDRAG_CERTIFICATION_METHOD = "AirDrag certification option"; + public const string AVERAGE_POS_ACC = "a_avg_acc"; + // ReSharper restore InconsistentNaming internal readonly DataTable Table; @@ -351,7 +353,8 @@ namespace TUGraz.VectoCore.OutputData E_RET_LOSS, E_ANGLE_LOSS, E_AXL_LOSS, E_BRAKE, E_VEHICLE_INERTIA, E_WHEEL, E_AIR, E_ROLL, E_GRAD, ACC, ACC_POS, ACC_NEG, ACC_TIMESHARE, DEC_TIMESHARE, CRUISE_TIMESHARE, MAX_SPEED, MAX_ACCELERATION, MAX_DECELERATION, AVG_ENGINE_SPEED, MAX_ENGINE_SPEED, NUM_GEARSHIFTS, - STOP_TIMESHARE, ENGINE_FULL_LOAD_TIME_SHARE, COASTING_TIME_SHARE, BRAKING_TIME_SHARE + STOP_TIMESHARE, ENGINE_FULL_LOAD_TIME_SHARE, COASTING_TIME_SHARE, BRAKING_TIME_SHARE, + AVERAGE_POS_ACC }.Select(x => new DataColumn(x, typeof(ConvertedSI))).ToArray()); Table.Columns.AddRange( @@ -585,6 +588,7 @@ namespace TUGraz.VectoCore.OutputData row[MAX_DECELERATION] = (ConvertedSI)modData.MaxDeceleration(); row[AVG_ENGINE_SPEED] = (ConvertedSI)modData.AvgEngineSpeed().AsRPM.SI<Scalar>(); row[MAX_ENGINE_SPEED] = (ConvertedSI)modData.MaxEngineSpeed().AsRPM.SI<Scalar>(); + row[AVERAGE_POS_ACC] = (ConvertedSI)modData.AverageAccelerationBelowTargetSpeed(); if (accTimeShare != null && decTimeShare != null && cruiseTimeShare != null) { var shareSum = accTimeShare + decTimeShare + cruiseTimeShare + stopTimeShare; if (!shareSum.IsEqual(100)) {