PHEMlightdll.CEP.GetEmission C# (CSharp) Method

GetEmission() public method

public GetEmission ( string pollutant, double power, double speed, System.Helpers VehicleClass ) : double
pollutant string
power double
speed double
VehicleClass System.Helpers
return double
        public double GetEmission(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 (VehicleClass.tClass != Constants.strBEV)
            {
                if (Math.Abs(speed) <= Constants.ZERO_SPEED_ACCURACY)
                {
                    if (pollutant == "FC")
                    {
                        return _idlingValueFC;
                    }
                    else
                    {
                        if (!_cepCurvePollutants.ContainsKey(pollutant))
                        {
                            VehicleClass.ErrMsg = "Emission pollutant " + pollutant + " not found!";
                            return 0;
                        }

                        return _idlingValuesPollutants[pollutant];
                    }
                }
            }

            if (pollutant == "FC")
            {
                emissionCurve = _cepCurveFC;
                powerPattern = _powerPatternFC;
            }
            else
            {
                if (!_cepCurvePollutants.ContainsKey(pollutant))
                {
                    VehicleClass.ErrMsg = "Emission pollutant " + pollutant + " not found!";
                    return 0;
                }

                emissionCurve = _cepCurvePollutants[pollutant];
                powerPattern = _powerPatternPollutants;
            }

            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 return the last (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

Usage Example

Beispiel #1
0
        static public VehicleResult CreateVehicleStateData(Helpers Helper,
                                                           CEP currCep,
                                                           double time,
                                                           double inputSpeed,
                                                           double inputAcc,
                                                           double Gradient = 0)
        {
            //Declaration
            double speed = Math.Max(inputSpeed, 0);
            double acc;
            double P_pos;

            //Speed/Acceleration limitation
            if (speed == 0)
            {
                acc = 0;
            }
            else
            {
                acc = Math.Min(inputAcc, currCep.GetMaxAccel(speed, Gradient));
            }

            //Calculate the power
            double power = currCep.CalcPower(speed, acc, Gradient);
            double P_eng = currCep.CalcEngPower(power);

            //Power limitation
            if (P_eng >= 0)
            {
                P_pos = power;
            }
            else
            {
                P_pos = 0;
            }

            //Calculate the result values (BEV)
            if (Helper.tClass == Constants.strBEV)
            {
                return(new VehicleResult(time,
                                         speed,
                                         Gradient,
                                         power,
                                         P_pos,
                                         P_eng / currCep.RatedPower,
                                         P_eng / currCep.DrivingPower,
                                         acc,
                                         0,
                                         currCep.GetEmission("FC", power, speed, Helper),
                                         0,
                                         0,
                                         0,
                                         0,
                                         0));
            }

            //Calculate the decel costing
            double decelCoast = currCep.GetDecelCoast(speed, acc, Gradient);

            //Calculate the result values (Zero emissions by costing, Idling emissions by v <= 0.5m/s²)
            if (acc >= decelCoast || speed <= Constants.ZERO_SPEED_ACCURACY)
            {
                return(new VehicleResult(time,
                                         speed,
                                         Gradient,
                                         power,
                                         P_pos,
                                         P_eng / currCep.RatedPower,
                                         P_eng / currCep.DrivingPower,
                                         acc,
                                         currCep.GetEmission("FC", power, speed, Helper),
                                         0,
                                         currCep.GetCO2Emission(currCep.GetEmission("FC", power, speed, Helper), currCep.GetEmission("CO", power, speed, Helper), currCep.GetEmission("HC", power, speed, Helper), Helper),
                                         currCep.GetEmission("NOx", power, speed, Helper),
                                         currCep.GetEmission("HC", power, speed, Helper),
                                         currCep.GetEmission("PM", power, speed, Helper),
                                         currCep.GetEmission("CO", power, speed, Helper)));
            }
            else
            {
                return(new VehicleResult(time,
                                         speed,
                                         Gradient,
                                         power,
                                         P_pos,
                                         power / currCep.RatedPower,
                                         power / currCep.DrivingPower,
                                         acc,
                                         0,
                                         0,
                                         0,
                                         0,
                                         0,
                                         0,
                                         0));
            }
        }
All Usage Examples Of PHEMlightdll.CEP::GetEmission