public double GetNormedEmission(string pollutant, double power, double speed, Helpers VehicleClass)
{
//Declaration
List<double> emissionCurve;
List<double> powerPattern;
// bisection search to find correct position in power pattern
int upperIndex;
int lowerIndex;
if (pollutant == "FC")
{
emissionCurve = _normedCepCurveFC;
powerPattern = _normalizedPowerPatternFC;
}
else
{
if (!_cepCurvePollutants.ContainsKey(pollutant))
{
VehicleClass.ErrMsg = "Emission pollutant " + pollutant + " not found!";
return 0;
}
emissionCurve = _cepNormalizedCurvePollutants[pollutant];
powerPattern = _normailzedPowerPatternPollutants;
}
if (emissionCurve.Count == 0)
{
VehicleClass.ErrMsg = "Empty emission curve for " + pollutant + " found!";
return 0;
}
if (emissionCurve.Count == 1)
{
return emissionCurve[0];
}
// in case that the demanded power is smaller than the first entry (smallest) in the power pattern the first is returned (should never happen)
if (power <= powerPattern.First())
{
return emissionCurve[0];
}
// if power bigger than all entries in power pattern the last is returned (should never happen)
if (power >= powerPattern.Last())
{
return emissionCurve.Last();
}
FindLowerUpperInPattern(out lowerIndex, out upperIndex, powerPattern, power);
return Interpolate(power, powerPattern[lowerIndex], powerPattern[upperIndex], emissionCurve[lowerIndex], emissionCurve[upperIndex]);
}
#endregion