3 using System.Collections.Generic;
6 using System.Threading.Tasks;
14 List<string> headerLineFCvalues,
15 List<List<double>> matrixFCvalues,
16 List<string> headerLinePollutants,
17 List<List<double>> matrixPollutants,
18 List<double> idlingFCvalues,
19 List<double> idlingPollutants)
64 List<string> FCvaluesIdentifier =
new List<string>();
65 List<List<double>> FCvaluesMeasures =
new List<List<double>>();
66 List<List<double>> normalizedFCvaluesMeasures =
new List<List<double>>();
67 for (
int i = 0; i < headerLineFCvalues.Count; i++)
69 FCvaluesIdentifier.Add(headerLineFCvalues[i]);
70 FCvaluesMeasures.Add(
new List<double>());
71 normalizedFCvaluesMeasures.Add(
new List<double>());
75 List<string> pollutantIdentifier =
new List<string>();
76 List<List<double>> pollutantMeasures =
new List<List<double>>();
77 List<List<double>> normalizedPollutantMeasures =
new List<List<double>>();
78 for (
int i = 0; i < headerLinePollutants.Count; i++)
80 pollutantIdentifier.Add(headerLinePollutants[i]);
81 pollutantMeasures.Add(
new List<double>());
82 normalizedPollutantMeasures.Add(
new List<double>());
87 for (
int i = 0; i <
Vehicle.TransmissionData.Transm[
"Speed"].Count; i++)
101 int headerFCCount = headerLineFCvalues.Count;
102 for (
int i = 0; i < matrixFCvalues.Count; i++)
104 for (
int j = 0; j < matrixFCvalues[i].Count; j++)
106 if (matrixFCvalues[i].Count != headerFCCount + 1)
116 FCvaluesMeasures[j - 1].Add(matrixFCvalues[i][j] *
RatedPower);
117 normalizedFCvaluesMeasures[j - 1].Add(matrixFCvalues[i][j]);
126 for (
int i = 0; i < headerLineFCvalues.Count; i++)
134 double pollutantMultiplyer = 1;
152 int headerCount = headerLinePollutants.Count;
153 for (
int i = 0; i < matrixPollutants.Count; i++)
155 for (
int j = 0; j < matrixPollutants[i].Count; j++)
157 if (matrixPollutants[i].Count != headerCount + 1)
167 pollutantMeasures[j - 1].Add(matrixPollutants[i][j] * pollutantMultiplyer);
168 normalizedPollutantMeasures[j - 1].Add(matrixPollutants[i][j]);
176 for (
int i = 0; i < headerLinePollutants.Count; i++)
183 _FleetMix =
new Dictionary<string, double>();
192 #region ConstrutorForFleetmix
193 private CEP(
bool heavyVehicle,
195 double vehicleLoading,
196 double vehicleMassRot,
207 double engineIdlingSpeed,
208 double engineRatedSpeed,
209 double effictiveWheelDiameter,
244 public string FuelType {
get;
private set; }
247 #region NormalizingType
261 #region Private Members
304 public double CalcPower(
double speed,
double acc,
double gradient,
bool HBEV)
354 public Dictionary<string, double>
GetAllEmission(
double power,
double speed,
Helpers VehicleClass,
bool SetZero =
false)
357 Dictionary<string, double> Emi =
new Dictionary<string, double>();
367 Emi.Add(
id.ToUpper(),
GetEmission(
id, power, speed, VehicleClass));
375 Emi.Add(
id.ToUpper(),
GetEmission(
id, power, speed, VehicleClass));
380 Emi.Add(
id.ToUpper(), 0);
384 if (!Emi.ContainsKey(
"CO2"))
386 if (Emi.ContainsKey(
"FC") & Emi.ContainsKey(
"CO") & Emi.ContainsKey(
"HC") & VehicleClass.
pClass !=
Constants.
strBEV)
387 Emi.Add(
"CO2",
GetCO2Emission(Emi[
"FC"], Emi[
"CO"], Emi[
"HC"], VehicleClass));
396 if (VehicleClass.
pClass ==
"Mix" &
id.ToUpper() ==
"FC_EL")
397 Emi.Add(
id,
GetEmission(
id, power, speed, VehicleClass));
399 Emi.Add(
id.ToUpper(), 0);
404 Emi.Add(
id.ToUpper(), 0);
406 if (!Emi.ContainsKey(
"CO2")) Emi.Add(
"CO2", 0);
416 List<double> emissionCurve =
new List<double>();
417 List<double> powerPattern =
new List<double>();
427 VehicleClass.
ErrMsg =
"Emission pollutant or fuel value " + pollutant +
" not found!";
439 VehicleClass.
ErrMsg =
"Emission pollutant or fuel value " + pollutant +
" not found!";
454 if (emissionCurve.Count == 0)
456 VehicleClass.
ErrMsg =
"Empty emission curve for " + pollutant +
" found!";
459 if (emissionCurve.Count == 1)
461 return emissionCurve[0];
465 if (power <= powerPattern.First())
467 return emissionCurve[0];
471 if (power >= powerPattern.Last())
473 return emissionCurve.Last();
477 return Interpolate(power, powerPattern[lowerIndex], powerPattern[upperIndex], emissionCurve[lowerIndex], emissionCurve[upperIndex]);
482 #region GetNormedEmission
486 List<double> emissionCurve =
new List<double>();
487 List<double> powerPattern =
new List<double>();
495 VehicleClass.
ErrMsg =
"Emission pollutant or fuel value " + pollutant +
" not found!";
510 if (emissionCurve.Count == 0)
512 VehicleClass.
ErrMsg =
"Empty emission curve for " + pollutant +
" found!";
515 if (emissionCurve.Count == 1)
517 return emissionCurve[0];
520 if (power <= powerPattern.First())
522 return emissionCurve[0];
526 if (power >= powerPattern.Last())
528 return emissionCurve.Last();
532 return Interpolate(power, powerPattern[lowerIndex], powerPattern[upperIndex], emissionCurve[lowerIndex], emissionCurve[upperIndex]);
537 #region GetCO2Emission
541 double fCBr, fCHC, fCCO, fCCO2;
555 if (!
CalcfCValMix(ref fCBr, ref fCHC, ref fCCO, ref fCCO2, VehicleClass))
559 return (_FC * fCBr - _CO * fCCO - _HC * fCHC) / fCCO2;
563 private bool CalcfCValMix(ref
double _fCBr, ref
double _fCHC, ref
double _fCCO, ref
double _fCCO2,
Helpers VehicleClass)
567 double sumfCBr, sumfCHC, sumfCCO, sumfCCO2;
584 VehicleClass.ErrMsg =
"All propolsion types in the fleetshares file are not known!";
591 if (!
GetfcVals(
id, ref _fCBr, ref _fCHC, ref _fCCO, ref _fCCO2, VehicleClass))
600 sumfCCO2 += _fCCO2 *
_FleetMix[id] / Sum;
613 private bool GetfcVals(
string _fuelTypex, ref
double _fCBr, ref
double _fCHC, ref
double _fCCO, ref
double _fCCO2,
Helpers VehicleClass)
636 VehicleClass.
ErrMsg =
"The propolsion type is not known! (" +
FuelType +
")";
643 #region GetDecelCoast
695 #region GetRotationalCoeffecient
712 #region GetGearCoeffecient
728 #region GetDragCoeffecient
745 #region FindLowerUpperInPattern
751 if (value <= pattern.First())
758 if (value >= pattern.Last())
760 lowerIndex = pattern.Count - 1;
761 upperIndex = pattern.Count - 1;
766 int middleIndex = (pattern.Count - 1) / 2;
767 upperIndex = pattern.Count - 1;
770 while (upperIndex - lowerIndex > 1)
772 if (pattern[middleIndex] == value)
774 lowerIndex = middleIndex;
775 upperIndex = middleIndex;
778 else if (pattern[middleIndex] < value)
780 lowerIndex = middleIndex;
781 middleIndex = (upperIndex - lowerIndex) / 2 + lowerIndex;
785 upperIndex = middleIndex;
786 middleIndex = (upperIndex - lowerIndex) / 2 + lowerIndex;
790 if (pattern[lowerIndex] <= value && value < pattern[upperIndex])
798 private double Interpolate(
double px,
double p1,
double p2,
double e1,
double e2)
803 return e1 + (px - p1) / (p2 - p1) * (e2 - e1);
808 public double GetMaxAccel(
double speed,
double gradient,
bool HBEV)
841 CEP newCEP =
new CEP(cps.Select(p => p.HeavyVehicle ? 1 : 0).Sum() > 0,
842 cps.Select(p => p._massVehicle).Sum(),
843 cps.Select(p => p._vehicleLoading).Sum(),
844 cps.Select(p => p._vehicleMassRot).Sum(),
845 cps.Select(p => p._crossSectionalArea).Sum(),
846 cps.Select(p => p._cWValue).Sum(),
847 cps.Select(p => p._resistanceF0).Sum(),
848 cps.Select(p => p._resistanceF1).Sum(),
849 cps.Select(p => p._resistanceF2).Sum(),
850 cps.Select(p => p._resistanceF3).Sum(),
851 cps.Select(p => p._resistanceF4).Sum(),
852 cps.Select(p => p._axleRatio).Sum(),
853 cps.Select(p => p._auxPower).Sum(),
854 cps.Select(p => p.RatedPower).Sum(),
855 cps.Select(p => p._engineIdlingSpeed).Sum(),
856 cps.Select(p => p._engineRatedSpeed).Sum(),
857 cps.Select(p => p._effectiveWheelDiameter).Sum(),
858 cps.Select(p => p._pNormV0).Sum(),
859 cps.Select(p => p._pNormP0).Sum(),
860 cps.Select(p => p._pNormV1).Sum(),
861 cps.Select(p => p._pNormP1).Sum());
863 #region Fleetmix and Fueltype
864 if (cps.Select(p => p.FuelType).Min() == cps.Select(p => p.FuelType).Max())
865 newCEP.FuelType = cps.First().FuelType;
867 newCEP.FuelType =
"Mix";
869 newCEP._FleetMix =
new Dictionary<string, double>();
870 foreach (
string id in cps.First()._FleetMix.Keys)
872 newCEP._FleetMix.Add(
id, cps.Select(p => p._FleetMix[
id]).Sum());
877 #region SpeedRotationalTable
878 double minSpeedRotational = cps.Select(p => p._speedPatternRotational.First()).Min();
879 double maxSpeedRotational = cps.Select(p => p._speedPatternRotational.Last()).Max();
881 newCEP._speedPatternRotational
886 newCEP._speedCurveRotational =
new List<double>();
887 newCEP._gearTransmissionCurve =
new List<double>();
889 for (
int i = 0; i < newCEP._speedPatternRotational.Count; i++)
891 newCEP._speedCurveRotational.Add(cps.Select(p => p.GetRotationalCoeffecient(newCEP._speedPatternRotational[i])).Sum());
893 newCEP._gearTransmissionCurve.Add(cps.Select(p => p.GetGearCoeffecient(newCEP._speedPatternRotational[i])).Sum());
897 #region NormalizingPower
900 if (newCEP.HeavyVehicle)
902 newCEP.NormalizingPower = newCEP.RatedPower;
907 newCEP.NormalizingPower = newCEP.DrivingPower;
913 double minNormPowerPatternFC = cps.Select(p => p._normalizedPowerPatternFCvalues.First()).Min();
914 double maxNormPowerPatternFC = cps.Select(p => p._normalizedPowerPatternFCvalues.Last()).Max();
916 newCEP._normalizedPowerPatternFCvalues
918 maxNormPowerPatternFC,
921 newCEP._cepCurveFCvalues =
new Dictionary<string, List<double>>();
922 newCEP._normedCepCurveFCvalues =
new Dictionary<string, List<double>>();
923 newCEP._powerPatternFCvalues =
new List<double>();
925 foreach (
string id in cps.First()._cepCurveFCvalues.Keys)
927 newCEP._cepCurveFCvalues.Add(
id,
new List<double>());
928 newCEP._normedCepCurveFCvalues.Add(
id,
new List<double>());
931 for (
int i = 0; i < newCEP._normalizedPowerPatternFCvalues.Count; i++)
933 foreach (
string id in newCEP._cepCurveFCvalues.Keys)
935 double newCepVal = cps.Select(p => p.GetNormedEmission(
id, newCEP._normalizedPowerPatternFCvalues[i],
double.MaxValue, Helper)).Sum();
936 newCEP._cepCurveFCvalues[id].Add(newCepVal * newCEP.RatedPower);
937 newCEP._normedCepCurveFCvalues[id].Add(newCepVal);
939 newCEP._powerPatternFCvalues.Add(newCEP._normalizedPowerPatternFCvalues[i] * newCEP.RatedPower);
944 double minNormPowerPattern = cps.Select(p => p._normailzedPowerPatternPollutants.First()).Min();
945 double maxNormPowerPattern = cps.Select(p => p._normailzedPowerPatternPollutants.Last()).Max();
947 newCEP._normailzedPowerPatternPollutants
952 newCEP._cepCurvePollutants =
new Dictionary<string, List<double>>();
953 newCEP._cepNormalizedCurvePollutants =
new Dictionary<string, List<double>>();
954 newCEP._powerPatternPollutants =
new List<double>();
956 foreach (
string id in cps.First()._cepCurvePollutants.Keys)
958 newCEP._cepCurvePollutants.Add(
id,
new List<double>());
959 newCEP._cepNormalizedCurvePollutants.Add(
id,
new List<double>());
962 for (
int i = 0; i < newCEP._normailzedPowerPatternPollutants.Count; i++)
964 foreach (
string id in newCEP._cepCurvePollutants.Keys)
968 double newCepVal = cps.Select(p => p.GetNormedEmission(
id, newCEP._normailzedPowerPatternPollutants[i],
double.MaxValue, Helper)).Sum();
969 newCEP._cepCurvePollutants[id].Add(newCepVal * newCEP.RatedPower);
970 newCEP._cepNormalizedCurvePollutants[id].Add(newCepVal);
974 newCEP._cepCurvePollutants[id].Add(cps.Select(p => p.GetEmission(
id, newCEP._normailzedPowerPatternPollutants[i] * p.NormalizingPower,
double.MaxValue, Helper)).Sum());
975 newCEP._cepNormalizedCurvePollutants[id].Add(cps.Select(p => p.GetNormedEmission(
id, newCEP._normailzedPowerPatternPollutants[i],
double.MaxValue, Helper)).Sum());
978 newCEP._powerPatternPollutants.Add(newCEP._normailzedPowerPatternPollutants[i] * newCEP.NormalizingPower);
983 newCEP._idlingValueFCvalues =
new Dictionary<string, double>();
984 newCEP._idlingValuesPollutants =
new Dictionary<string, double>();
986 foreach (
string id in cps.First()._idlingValueFCvalues.Keys)
988 newCEP._idlingValueFCvalues.Add(
id, cps.Select(p => p._idlingValueFCvalues[
id]).Sum());
991 foreach (
string id in cps.First()._idlingValuesPollutants.Keys)
993 newCEP._idlingValuesPollutants.Add(
id, cps.Select(p => p._idlingValuesPollutants[
id]).Sum());
998 double minTragTable = cps.Select(p => p._nNormTable.First()).Min();
999 double maxTragTable = cps.Select(p => p._nNormTable.Last()).Max();
1006 newCEP._dragNormTable =
new List<double>();
1008 for (
int i = 0; i < newCEP._nNormTable.Count; i++)
1010 newCEP._dragNormTable.Add(cps.Select(p => p.GetDragCoeffecient(newCEP._nNormTable[i])).Sum());
1020 #region SingleValues
1021 CEP newCEP =
new CEP(cp1.HeavyVehicle,
1022 d * cp1._massVehicle,
1023 d * cp1._vehicleLoading,
1024 d * cp1._vehicleMassRot,
1025 d * cp1._crossSectionalArea,
1027 d * cp1._resistanceF0,
1028 d * cp1._resistanceF1,
1029 d * cp1._resistanceF2,
1030 d * cp1._resistanceF3,
1031 d * cp1._resistanceF4,
1035 d * cp1._engineIdlingSpeed,
1036 d * cp1._engineRatedSpeed,
1037 d * cp1._effectiveWheelDiameter,
1043 #region Fleetmix and Fueltype
1044 newCEP.FuelType = cp1.FuelType;
1045 newCEP._FleetMix =
new Dictionary<string, double>();
1046 foreach (
string id in cp1._FleetMix.Keys)
1048 if (newCEP.FuelType ==
id)
1049 newCEP._FleetMix.Add(newCEP.FuelType, d);
1051 newCEP._FleetMix.Add(
id, 0);
1056 #region SpeedRotationalTable
1057 newCEP._speedPatternRotational =
new List<double>(cp1._speedPatternRotational);
1058 newCEP._speedCurveRotational =
new List<double>(cp1._speedCurveRotational.Select(p => p * d));
1059 newCEP._gearTransmissionCurve =
new List<double>(cp1._gearTransmissionCurve.Select(p => p * d));
1062 #region NormalizingPower
1065 if (newCEP.HeavyVehicle)
1067 newCEP.NormalizingPower = newCEP.RatedPower;
1072 newCEP.NormalizingPower = newCEP.DrivingPower;
1078 newCEP._powerPatternFCvalues =
new List<double>(cp1._powerPatternFCvalues.Select(p => p * d));
1079 newCEP._normalizedPowerPatternFCvalues =
new List<double>(cp1._normalizedPowerPatternFCvalues);
1080 newCEP._cepCurveFCvalues =
new Dictionary<string, List<double>>();
1081 newCEP._normedCepCurveFCvalues =
new Dictionary<string, List<double>>();
1083 foreach (
string id in cp1._cepCurveFCvalues.Keys)
1085 newCEP._cepCurveFCvalues.Add(
id,
new List<double>(cp1._cepCurveFCvalues[
id].Select(p => p * d)));
1086 newCEP._normedCepCurveFCvalues.Add(
id,
new List<double>(cp1._normedCepCurveFCvalues[
id].Select(p => p * d)));
1091 newCEP._powerPatternPollutants =
new List<double>(cp1._normailzedPowerPatternPollutants.Select(p => p * newCEP.NormalizingPower));
1092 newCEP._normailzedPowerPatternPollutants =
new List<double>(cp1._normailzedPowerPatternPollutants);
1093 newCEP._cepCurvePollutants =
new Dictionary<string, List<double>>();
1094 newCEP._cepNormalizedCurvePollutants =
new Dictionary<string, List<double>>();
1096 foreach (
string id in cp1._cepCurvePollutants.Keys)
1098 newCEP._cepCurvePollutants.Add(
id,
new List<double>(cp1._cepCurvePollutants[
id].Select(p => p * d)));
1099 newCEP._cepNormalizedCurvePollutants.Add(
id,
new List<double>(cp1._cepNormalizedCurvePollutants[
id].Select(p => p * d)));
1103 #region IdlingValues
1104 newCEP._idlingValueFCvalues =
new Dictionary<string, double>();
1105 newCEP._idlingValuesPollutants =
new Dictionary<string, double>();
1107 foreach (
string id in cp1._idlingValueFCvalues.Keys)
1109 newCEP._idlingValueFCvalues.Add(
id,
1110 cp1._idlingValueFCvalues[
id] * d);
1113 foreach (
string id in cp1._idlingValuesPollutants.Keys)
1115 newCEP._idlingValuesPollutants.Add(
id,
1116 cp1._idlingValuesPollutants[
id] * d);
1121 newCEP._nNormTable =
new List<double>(cp1._nNormTable);
1122 newCEP._dragNormTable =
new List<double>(cp1._dragNormTable.Select(p => p * d));
1128 #region CreatePattern
1129 static public List<double>
CreatePattern(
double min,
double max,
double increment)
1132 List<double> pattern =
new List<double>();
1133 double actualMin = min;
1134 double actualMax = max;
1137 actualMin = Math.Ceiling(min / increment) * increment;
1139 actualMin = Math.Floor(min / increment) * increment;
1142 actualMax = Math.Floor(max / increment) * increment;
1144 actualMax = Math.Ceiling(max / increment) * increment;
1146 double curVal = actualMin;
1148 while (curVal <= actualMax)
1150 pattern.Add(curVal);
1151 curVal += increment;
1160 return cps.Select(p => p.HeavyVehicle ? 1 : 0).Min() == cps.Select(p => p.HeavyVehicle ? 1 : 0).Max();
Dictionary< string, List< double > > _cepCurveFCvalues
std::vector< double > _powerPatternPollutants
std::vector< double > _dragNormTable
double GetGearCoeffecient(double speed)
Dictionary< string, double > GetAllEmission(double power, double speed, Helpers VehicleClass, bool SetZero=false)
double GetPMaxNorm(double speed)
CEP(bool heavyVehicle, double vehicleMass, double vehicleLoading, double vehicleMassRot, double crossArea, double cWValue, double f0, double f1, double f2, double f3, double f4, double axleRatio, std::vector< double > &transmissionGearRatios, double auxPower, double ratedPower, double engineIdlingSpeed, double engineRatedSpeed, double effictiveWheelDiameter, double pNormV0, double pNormP0, double pNormV1, double pNormP1, const std::string &vehicelFuelType, std::vector< std::vector< double > > &matrixFC, std::vector< std::string > &headerLinePollutants, std::vector< std::vector< double > > &matrixPollutants, std::vector< std::vector< double > > &matrixSpeedRotational, std::vector< std::vector< double > > &normedDragTable, double idlingFC, std::vector< double > &idlingPollutants)
List< double > _normalizedPowerPatternFCvalues
std::vector< double > _nNormTable
double GetEmission(string pollutant, double power, double speed, Helpers VehicleClass)
double _effectiveWheelDiameter
double GetDragCoeffecient(double nNorm)
Dictionary< string, List< double > > _normedCepCurveFCvalues
std::map< std::string, std::vector< double > > _cepNormalizedCurvePollutants
std::map< std::string, double > _idlingValuesPollutants
static CEP AddRangeCeps(CEP[] cps, Helpers Helper)
std::vector< double > _speedPatternRotational
Dictionary< string, double > _FleetMix
double CalcWheelPower(double speed, double acc, double gradient)
double GetNormedEmission(string pollutant, double power, double speed, Helpers VehicleClass)
CEP(VEHPHEMLightJSON.VEH Vehicle, List< string > headerLineFCvalues, List< List< double >> matrixFCvalues, List< string > headerLinePollutants, List< List< double >> matrixPollutants, List< double > idlingFCvalues, List< double > idlingPollutants)
bool GetfcVals(string _fuelTypex, ref double _fCBr, ref double _fCHC, ref double _fCCO, ref double _fCCO2, Helpers VehicleClass)
double GetMaxAccel(double speed, double gradient, bool HBEV)
static CEP operator*(CEP cp1, double d)
std::vector< double > _normailzedPowerPatternPollutants
double _crossSectionalArea
void FindLowerUpperInPattern(int &lowerIndex, int &upperIndex, std::vector< double > &pattern, double value)
std::vector< double > _gearTransmissionCurve
double GetCO2Emission(double _FC, double _CO, double _HC, Helpers VehicleClass)
List< double > _powerPatternFCvalues
double GetRotationalCoeffecient(double speed)
double CalcEngPower(double power)
double GetEmission(const std::string &pollutant, double power, double speed, Helpers *VehicleClass)
std::vector< double > _speedCurveRotational
void FindLowerUpperInPattern(out int lowerIndex, out int upperIndex, List< double > pattern, double value)
Dictionary< string, double > _idlingValueFCvalues
static List< double > CreatePattern(double min, double max, double increment)
double CalcPower(double speed, double acc, double gradient)
double GetCO2Emission(double _FC, double _CO, double _HC, Helpers *VehicleClass)
static bool CheckClass(CEP[] cps)
double Interpolate(double px, double p1, double p2, double e1, double e2)
double _engineIdlingSpeed
bool CalcfCValMix(ref double _fCBr, ref double _fCHC, ref double _fCCO, ref double _fCCO2, Helpers VehicleClass)
std::map< std::string, std::vector< double > > _cepCurvePollutants
CEP(bool heavyVehicle, double vehicleMass, double vehicleLoading, double vehicleMassRot, double crossArea, double cWValue, double f0, double f1, double f2, double f3, double f4, double axleRatio, double auxPower, double ratedPower, double engineIdlingSpeed, double engineRatedSpeed, double effictiveWheelDiameter, double pNormV0, double pNormP0, double pNormV1, double pNormP1)
double CalcPower(double speed, double acc, double gradient, bool HBEV)
double GetDecelCoast(double speed, double acc, double gradient)
static const std::string strBEV
static const double AIR_DENSITY_CONST
static const double SPEED_DCEL_MIN
static const std::string strLPG
static const double ZERO_SPEED_ACCURACY
static const double GRAVITY_CONST
static const std::string strDiesel
const double SPEED_ROTATIONAL_INCREMENT
static const std::string HeavyVehicle
const double NNORM_INCREMENT
const double POWER_POLLUTANT_INCREMENT
const double POWER_FC_INCREMENT
static const double NORMALIZING_ACCELARATION
static double _DRIVE_TRAIN_EFFICIENCY
static const std::string strHybrid
static const std::string strGasoline
static const std::string strCNG
static const double NORMALIZING_SPEED
static double DRIVE_TRAIN_EFFICIENCY
C++ TraCI client API implementation.