SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PollutantsInterface.h
Go to the documentation of this file.
1 /****************************************************************************/
8 // Interface to capsulate different emission models
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
11 // Copyright (C) 2013-2014 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 #ifndef PollutantsInterface_h
22 #define PollutantsInterface_h
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <vector>
35 #include <limits>
36 #include <cmath>
37 #include <algorithm>
38 #include <utils/common/StdDefs.h>
40 #include "PHEMCEP.h"
41 
42 
43 // ===========================================================================
44 // class declarations
45 // ===========================================================================
46 class HelpersHBEFA;
47 class HelpersHBEFA3;
48 class HelpersPHEMlight;
49 
50 
51 // ===========================================================================
52 // class definitions
53 // ===========================================================================
59 public:
60 
62  enum EmissionType { CO2, CO, HC, FUEL, NO_X, PM_X };
63 
64 
69  struct Emissions {
76 
85  Emissions(SUMOReal co2 = 0, SUMOReal co = 0, SUMOReal hc = 0, SUMOReal f = 0, SUMOReal nox = 0, SUMOReal pmx = 0)
86  : CO2(co2), CO(co), HC(hc), fuel(f), NOx(nox), PMx(pmx) {
87  }
88 
93  void addScaled(const Emissions& a, const SUMOReal scale = 1.) {
94  CO2 += scale * a.CO2;
95  CO += scale * a.CO;
96  HC += scale * a.HC;
97  fuel += scale * a.fuel;
98  NOx += scale * a.NOx;
99  PMx += scale * a.PMx;
100  }
101  };
102 
103 
108  class Helper {
109  public:
113  Helper(std::string name) : myName(name) {}
114 
118  const std::string& getName() const {
119  return myName;
120  }
121 
131  virtual SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc) {
132  UNUSED_PARAMETER(vc);
133  if (myEmissionClassStrings.hasString(eClass)) {
134  return myEmissionClassStrings.get(eClass);
135  }
136  std::string eclower = eClass;
137  std::transform(eclower.begin(), eclower.end(), eclower.begin(), tolower);
138  return myEmissionClassStrings.get(eclower);
139  }
140 
145  const std::string getClassName(const SUMOEmissionClass c) const {
146  return myName + "/" + myEmissionClassStrings.getString(c);
147  }
148 
154  virtual bool isSilent(const SUMOEmissionClass c) {
155  return (c & 0xffffffff & ~HEAVY_BIT) == 0;
156  }
157 
160 
171  virtual SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass,
172  const std::string& fuel, const std::string& eClass, const double weight) const {
173  UNUSED_PARAMETER(vClass);
174  UNUSED_PARAMETER(fuel);
175  UNUSED_PARAMETER(eClass);
176  UNUSED_PARAMETER(weight);
177  return base;
178  }
179 
185  virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const {
186  UNUSED_PARAMETER(c);
187  return "Passenger";
188  }
189 
195  virtual std::string getFuel(const SUMOEmissionClass c) const {
196  UNUSED_PARAMETER(c);
197  return "Gasoline";
198  }
199 
205  virtual int getEuroClass(const SUMOEmissionClass c) const {
206  UNUSED_PARAMETER(c);
207  return 0;
208  }
209 
216  virtual SUMOReal getWeight(const SUMOEmissionClass c) const {
217  UNUSED_PARAMETER(c);
218  return -1.;
219  }
221 
230  virtual SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope) const = 0;
231 
240  virtual SUMOReal getMaxAccel(SUMOEmissionClass c, double v, double a, double slope) const {
241  UNUSED_PARAMETER(c);
242  UNUSED_PARAMETER(v);
243  UNUSED_PARAMETER(a);
244  UNUSED_PARAMETER(slope);
245  return -1.;
246  }
247 
251  void addAllClassesInto(std::vector<SUMOEmissionClass>& list) const {
253  }
254 
255 
256  protected:
258  const std::string myName;
259 
262 
263  private:
264  Helper& operator=(const Helper&); // just to avoid a compiler warning
265 
266 
267  };
268 
269 
271  static Helper* myHelpers[];
272 
274  static const int ZERO_EMISSIONS = 0;
275 
277  static const int HEAVY_BIT = 1 << 15;
278 
283  static SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc = SVC_IGNORING);
284 
285 
290  static const std::vector<SUMOEmissionClass> getAllClasses();
291 
292 
297  static std::string getName(const SUMOEmissionClass c);
298 
299 
304  static bool isHeavy(const SUMOEmissionClass c);
305 
306 
311  static bool isSilent(const SUMOEmissionClass c);
312 
313 
321  static SUMOReal getMaxAccel(SUMOEmissionClass c, double v, double a, double slope);
322 
323 
332  static SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel, const std::string& eClass, const double weight);
333 
334 
339  static std::string getAmitranVehicleClass(const SUMOEmissionClass c);
340 
341 
346  static std::string getFuel(const SUMOEmissionClass c);
347 
348 
353  static int getEuroClass(const SUMOEmissionClass c);
354 
355 
361  static SUMOReal getWeight(const SUMOEmissionClass c);
362 
363 
372  static SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope);
373 
374 
382  static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope);
383 
384 
394  static SUMOReal computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const SUMOReal tt);
395 
396 private:
403 
404 };
405 
406 
407 #endif
408 
409 /****************************************************************************/
410