Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
PollutantsInterface.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2013-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// Interface to capsulate different emission models
20/****************************************************************************/
21#pragma once
22#include <config.h>
23
24#include <vector>
25#include <limits>
26#include <cmath>
27#include <algorithm>
30
31
32// ===========================================================================
33// class declarations
34// ===========================================================================
35class EnergyParams;
36class HelpersHBEFA;
37class HelpersHBEFA3;
38class HelpersHBEFA4;
39class HelpersEnergy;
40class HelpersMMPEVEM;
43
44
45// ===========================================================================
46// class definitions
47// ===========================================================================
53
54public:
56 enum EmissionType { CO2, CO, HC, FUEL, NO_X, PM_X, ELEC };
57
62 struct Emissions {
72 Emissions(double co2 = 0, double co = 0, double hc = 0, double f = 0, double nox = 0, double pmx = 0, double elec = 0);
73
78 void addScaled(const Emissions& a, const double scale = 1.);
79
82 double CO2;
83 double CO;
84 double HC;
85 double fuel;
86 double NOx;
87 double PMx;
88 double electricity;
90 };
91
96 class Helper {
97 public:
101 Helper(std::string name, const int baseIndex, const int defaultClass);
102
104 virtual ~Helper() {}
105
109 const std::string& getName() const;
110
120 virtual SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc);
121
126 const std::string getClassName(const SUMOEmissionClass c) const;
127
133 virtual bool isSilent(const SUMOEmissionClass c);
134
137
148 virtual SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel,
149 const std::string& eClass, const double weight) const;
150
156 virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const;
157
163 virtual std::string getFuel(const SUMOEmissionClass c) const;
164
170 virtual int getEuroClass(const SUMOEmissionClass c) const;
171
178 virtual double getWeight(const SUMOEmissionClass c) const;
180
190 virtual double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const EnergyParams* param) const;
191
200 virtual double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope, const EnergyParams* param) const;
201
211 virtual double getCoastingDecel(const SUMOEmissionClass c, const double v, const double a, const double slope, const EnergyParams* param) const;
212
216 void addAllClassesInto(std::vector<SUMOEmissionClass>& list) const;
217
218 bool includesClass(const SUMOEmissionClass c) const;
219
220 protected:
222 static const double ZERO_SPEED_ACCURACY;
223
225 const std::string myName;
226
228 const int myBaseIndex;
229
231 bool myVolumetricFuel;
232
234 StringBijection<SUMOEmissionClass> myEmissionClassStrings;
235
236 private:
238 Helper& operator=(const Helper&) = delete;
239 };
240
242 static const int ZERO_EMISSIONS = 0;
243
245 static const int HEAVY_BIT = 1 << 15;
246
251 static SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc = SVC_IGNORING);
252
257 static const std::vector<SUMOEmissionClass> getAllClasses();
258
260 static const std::vector<std::string>& getAllClassesStr();
261
266 static std::string getName(const SUMOEmissionClass c);
267
269 static std::string getPollutantName(const EmissionType e);
270
275 static bool isHeavy(const SUMOEmissionClass c);
276
281 static bool isSilent(const SUMOEmissionClass c);
282
291 static SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel, const std::string& eClass, const double weight);
292
297 static std::string getAmitranVehicleClass(const SUMOEmissionClass c);
298
303 static std::string getFuel(const SUMOEmissionClass c);
304
309 static int getEuroClass(const SUMOEmissionClass c);
310
316 static double getWeight(const SUMOEmissionClass c);
317
326 static double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const EnergyParams* param);
327
335 static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope, const EnergyParams* param);
336
347 static double computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const double tt, const EnergyParams* param);
348
356 static double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope, const EnergyParams* param);
357
366 static double getCoastingDecel(const SUMOEmissionClass c, const double v, const double a, const double slope, const EnergyParams* param);
367
369 static const HelpersEnergy& getEnergyHelper();
370
371private:
373 static Helper myZeroHelper;
374
376 static HelpersHBEFA myHBEFA2Helper;
377
379 static HelpersHBEFA3 myHBEFA3Helper;
380
382 static HelpersPHEMlight myPHEMlightHelper;
383
385 static HelpersEnergy myEnergyHelper;
386
388 static HelpersMMPEVEM myMMPEVEMHelper;
389
391 static HelpersPHEMlight5 myPHEMlight5Helper;
392
394 static HelpersHBEFA4 myHBEFA4Helper;
395
397 static Helper* myHelpers[];
398
400 static std::vector<std::string> myAllClassesStr;
401};
const double ZERO_SPEED_ACCURACY
int SUMOEmissionClass
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
An upper class for objects with additional parameters.
Helper methods for energy-based electricity consumption computation based on the battery device.
Helper methods for HBEFA3-based emission computation.
Helper methods for HBEFA4-based emission computation.
Helper methods for HBEFA-based emission computation.
This helper class allows the PollutantsInterface to load and use different MMPEVEMs.
Helper methods for PHEMlight-based emission computation.
Helper methods for PHEMlight-based emission computation.
Helper methods for PHEMlight-based emission computation.