SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HelpersHBEFA3.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Helper methods for HBEFA3-based emission computation
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
12 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <limits>
34 #include <cmath>
35 #include <algorithm>
36 #include "HelpersHBEFA3.h"
37 
38 #ifdef CHECK_MEMORY_LEAKS
39 #include <foreign/nvwa/debug_new.h>
40 #endif // CHECK_MEMORY_LEAKS
41 
42 
43 // ===========================================================================
44 // static definitions
45 // ===========================================================================
46 double
48  {
49  // LDV
50  { 7192, 1022, 0.0, -161, 23.33, 0.0 }, // CO2(total)
51  { 961.4, 69.4, 0.0, -114.3, 3.851, 0.0 }, // CO
52  { 59.65, 1.963, 0.0, -5.305, 0.159, 0.0 }, // HC
53  { 2294, 323.8, 0.0, -52.78, 7.43, 0.0 }, // mKr
54  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
55  { 5.695, 0.2347, 0.0, -0.8032, 0.05115, -0.0007435 }, // PM
56  },
57  {
58  // LDV_G_EU0
59  { 1.045e+04, 1105, 0.0, -430.5, 29.24, 0.0 }, // CO2(total)
60  { 956.6, 219.3, 0.0, -41.98, 0.0, 0.13 }, // CO
61  { 80.96, 4.731, 0.0, -4.85, 0.1828, 0.0 }, // HC
62  { 3332, 352.5, 0.0, -137.3, 9.328, 0.0 }, // mKr
63  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
64  { 1.243, 0.2422, 0.0, -0.1785, 0.008536, 0.0 }, // PM
65  },
66  {
67  // LDV_G_EU1
68  { 4906, 1144, 0.0, 295.4, 0.0, 0.3967 }, // CO2(total)
69  { 2176, 243.2, 0.0, -303.2, 11.33, 0.0 }, // CO
70  { 26.97, 3.78, 0.0, -3.277, 0.1403, 0.0 }, // HC
71  { 1565, 365, 0.0, 94.21, 0.0, 0.1266 }, // mKr
72  { 19.35, 3.279, 0.0, 0.8384, 0.0, 0.001006 }, // NOx
73  { 0.915, 0.18, 0.2317, -0.1635, 0.006222, 0.0 }, // PM
74  },
75  {
76  // LDV_G_EU2
77  { 5122, 1131, 0.0, 277.6, 0.0, 0.391 }, // CO2(total)
78  { 1296, 123.5, 0.0, -174.8, 6.212, 0.0 }, // CO
79  { 10.94, 1.322, 0.0, -1.316, 0.05277, 0.0 }, // HC
80  { 1634, 360.9, 0.0, 88.54, 0.0, 0.1247 }, // mKr
81  { 6.574, 1.161, 0.0, 0.3115, 0.0, 0.0003318 }, // NOx
82  { 1.988, 0.3357, 0.0, -0.2804, 0.01234, 0.0 }, // PM
83  },
84  {
85  // LDV_G_EU3
86  { 5363, 1115, 0.0, 264, 0.0, 0.394 }, // CO2(total)
87  { 809.6, 64.08, 0.0, -108, 3.632, 0.0 }, // CO
88  { 3.502, 0.3612, 0.0, -0.4307, 0.01612, 0.0 }, // HC
89  { 1710, 355.8, 0.0, 84.18, 0.0, 0.1257 }, // mKr
90  { 0.5866, 0.2926, 0.0, 0.1955, 0.0, 0.0 }, // NOx
91  { 0.7376, 0.09247, 0.0, -0.0981, 0.004036, 0.0 }, // PM
92  },
93  {
94  // LDV_G_EU4
95  { 5056, 1015, 0.0, 286.5, 0.0, 0.3172 }, // CO2(total)
96  { 567.4, 43.43, 0.0, -76.69, 2.618, 0.0 }, // CO
97  { 2.052, 0.1911, 0.0, -0.2652, 0.009888, 0.0 }, // HC
98  { 1613, 323.8, 0.0, 91.39, 0.0, 0.1012 }, // mKr
99  { 1.1, 0.1892, 0.0, 0.08809, 0.0, 0.0 }, // NOx
100  { 0.5892, 0.06059, 0.0, -0.07563, 0.002986, 0.0 }, // PM
101  },
102  {
103  // LDV_G_EU5
104  { 4635, 985.8, 0.0, 296.2, 0.0, 0.3007 }, // CO2(total)
105  { 639.8, 43.92, 0.0, -85.21, 2.829, 0.0 }, // CO
106  { 2.248, 0.1968, 0.0, -0.2896, 0.01057, 0.0 }, // HC
107  { 1479, 314.4, 0.0, 94.47, 0.0, 0.0959 }, // mKr
108  { 1.101, 0.1824, 0.0, 0.08517, 0.0, 0.0 }, // NOx
109  { 0.6097, 0.06993, 0.0, -0.08108, 0.003213, 0.0 }, // PM
110  },
111  {
112  // LDV_G_EU6
113  { 4423, 927.9, 0.0, 279, 0.0, 0.2844 }, // CO2(total)
114  { 645.1, 41.88, 0.0, -85.32, 2.798, 0.0 }, // CO
115  { 2.311, 0.1872, 0.0, -0.2952, 0.01056, 0.0 }, // HC
116  { 1411, 296, 0.0, 88.98, 0.0, 0.09072 }, // mKr
117  { 1.109, 0.1806, 0.0, 0.08319, 0.0, 0.0 }, // NOx
118  { 0.6029, 0.06641, 0.0, -0.08017, 0.003149, 0.0 }, // PM
119  },
120  {
121  // LDV_G_East
122  { 8365, 832.4, 0.0, -368.6, 22.94, 0.0 }, // CO2(total)
123  { 2266, 172.8, 0.0, -235.2, 8.393, 0.0 }, // CO
124  { 2226, 46.86, 0.0, -212.9, 5.895, 0.0 }, // HC
125  { 2668, 265.5, 0.0, -117.6, 7.317, 0.0 }, // mKr
126  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
127  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PM
128  },
129  {
130  // LDV_D_EU0
131  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // CO2(total)
132  { 7.189, 2.276, 0.0, 2.542, 0.0, 0.0 }, // CO
133  { 4.995, 0.2038, 0.0, 0.4551, 0.0, 0.0 }, // HC
134  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // mKr
135  { 53.84, 11.77, 0.0, -3.702, 0.3365, 0.0 }, // NOx
136  { 17.82, 0.9409, 0.0, -1.8, 0.1364, -0.001849 }, // PM
137  },
138  {
139  // LDV_D_EU1
140  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // CO2(total)
141  { 4.958, 1.428, 0.0, 1.624, 0.0, 0.0 }, // CO
142  { 2.849, 0.1092, 0.0, 0.2372, 0.0, 0.0 }, // HC
143  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // mKr
144  { 45.13, 10.42, 0.0, -2.941, 0.2852, 0.0 }, // NOx
145  { 15.3, 0.6367, 0.0, -2.007, 0.1254, -0.001671 }, // PM
146  },
147  {
148  // LDV_D_EU2
149  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // CO2(total)
150  { 1.437, 0.4449, 0.0, 0.4966, 0.0, 0.0 }, // CO
151  { 1.262, 0.04612, 0.0, 0.1011, 0.0, 0.0 }, // HC
152  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // mKr
153  { 42.83, 9.371, 0.0, -2.973, 0.2623, 0.0 }, // NOx
154  { 6.58, 0.2888, 0.0, -0.7254, 0.04933, -0.0006649 }, // PM
155  },
156  {
157  // LDV_D_EU3
158  { 3779, 902, 0.0, 288.6, 0.0, 0.3084 }, // CO2(total)
159  { 1.94, 0.02085, 0.0, -0.03984, 0.0, 0.0 }, // CO
160  { 0.4687, 0.02017, 0.0, -0.02515, 0.00116, 0.0 }, // HC
161  { 1189, 283.7, 0.0, 90.77, 0.0, 0.09701 }, // mKr
162  { 33.02, 6.747, 1.706, -1.94, 0.1688, 0.0 }, // NOx
163  { 1.553, 0.2034, 0.0, -0.09003, 0.006345, 0.0 }, // PM
164  },
165  {
166  // LDV_D_EU4
167  { 3682, 915.4, 0.0, 331, 0.0, 0.306 }, // CO2(total)
168  { 1.724, 0.03099, 0.0, -0.02995, 0.0, 0.0 }, // CO
169  { 0.03577, 0.01844, 0.0, 0.02506, 0.0, 0.0 }, // HC
170  { 1158, 288, 0.0, 104.1, 0.0, 0.09624 }, // mKr
171  { 40.68, 6.272, 0.0, -3.613, 0.2148, 0.0 }, // NOx
172  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PM
173  },
174  {
175  // LDV_D_EU5
176  { 3505, 918.8, 0.0, 319.7, 0.0, 0.2978 }, // CO2(total)
177  { 1.135, 0.01769, 0.0, -0.01882, 0.0, 0.0 }, // CO
178  { 0.01997, 0.01916, 0.0, 0.02654, 0.0, 0.0 }, // HC
179  { 1102, 289, 0.0, 100.6, 0.0, 0.09367 }, // mKr
180  { 38.6, 6.079, 0.0, -3.414, 0.2026, 0.0 }, // NOx
181  { 0.1111, 0.007346, 0.005486, -0.009925, 0.0004092, 0.0 }, // PM
182  },
183  {
184  // LDV_D_EU6
185  { 3374, 880.2, 0.0, 308.9, 0.0, 0.2798 }, // CO2(total)
186  { 1.651, 0.03157, 0.0, -0.02797, 0.0, 0.0 }, // CO
187  { 0.03311, 0.01971, 0.0, 0.02401, 0.0, 0.0 }, // HC
188  { 1061, 276.9, 0.0, 97.17, 0.0, 0.088 }, // mKr
189  { 13.57, 2.119, 0.0, -1.211, 0.07068, 0.0 }, // NOx
190  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PM
191  },
192  {
193  // PC
194  { 9034, 925.8, 0.0, -394.3, 25.71, 0.0 }, // CO2(total)
195  { 428.7, 37.11, 0.0, -40.02, 1.494, 0.0 }, // CO
196  { 48.97, 1.325, 0.0, -3.261, 0.1002, 0.0 }, // HC
197  { 2937, 301, 0.0, -128.6, 8.373, 0.0 }, // mKr
198  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
199  { 1.021, 0.1731, 0.0, -0.03389, 0.0, 0.0001301 }, // PM
200  },
201  {
202  // PC_Alternative
203  { 7932, 785, 0.0, -393, 23.68, 0.0 }, // CO2(total)
204  { 505.6, 20.69, 0.0, -62.72, 1.831, 0.0 }, // CO
205  { 3.917, 0.2646, 0.0, -0.4245, 0.01417, 0.0 }, // HC
206  { 3040, 300.9, 0.0, -150.6, 9.077, 0.0 }, // mKr
207  { 7.5, 0.563, 0.0, -0.6094, 0.02294, 0.0 }, // NOx
208  { 0.6383, 0.05188, 0.0, -0.08341, 0.002963, 0.0 }, // PM
209  },
210  {
211  // PC_G_EU0
212  { 1.172e+04, 1160, 0.0, -580.5, 34.98, 0.0 }, // CO2(total)
213  { 738.6, 83.85, 0.0, -52.74, 2.41, 0.0 }, // CO
214  { 26.96, 2.829, 0.0, 2.118, 0.0, 0.0 }, // HC
215  { 3737, 369.9, 0.0, -185.2, 11.16, 0.0 }, // mKr
216  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
217  { 2.159, 0.1897, 0.0, -0.2832, 0.00997, 0.0 }, // PM
218  },
219  {
220  // PC_G_EU1
221  { 1.093e+04, 1081, 0.0, -541.4, 32.63, 0.0 }, // CO2(total)
222  { 291.2, 24.14, 0.0, -32.65, 1.125, 0.0 }, // CO
223  { 14.58, 1.01, 0.0, -1.172, 0.03809, 0.0 }, // HC
224  { 3486, 345, 0.0, -172.7, 10.41, 0.0 }, // mKr
225  { 30.63, 2.031, 0.0, -3.595, 0.2137, -0.002299 }, // NOx
226  { 1.371, 0.09943, 0.0, -0.1742, 0.005969, 0.0 }, // PM
227  },
228  {
229  // PC_G_EU2
230  { 1.039e+04, 1028, 0.0, -514.9, 31.03, 0.0 }, // CO2(total)
231  { 620.1, 35.08, 0.0, -78.49, 2.429, 0.0 }, // CO
232  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // HC
233  { 3315, 328, 0.0, -164.2, 9.897, 0.0 }, // mKr
234  { 23.05, 1.089, 0.0, -2.081, 0.06925, 0.0 }, // NOx
235  { 2.371, 0.18, 0.0, -0.3078, 0.01044, 0.0 }, // PM
236  },
237  {
238  // PC_G_EU3
239  { 9858, 975.6, 0.0, -488.4, 29.43, 0.0 }, // CO2(total)
240  { 597.5, 32.52, 0.0, -75.27, 2.305, 0.0 }, // CO
241  { 2.303, 0.25, 0.0, -0.2555, 0.00992, 0.0 }, // HC
242  { 3144, 311.2, 0.0, -155.8, 9.388, 0.0 }, // mKr
243  { 7.204, 0.3327, 0.0, -0.6641, 0.0215, 0.0 }, // NOx
244  { 0.714, 0.05158, 0.0, -0.08903, 0.00308, 0.0 }, // PM
245  },
246  {
247  // PC_G_EU4
248  { 9449, 938.4, 0.0, -467.1, 28.26, 0.0 }, // CO2(total)
249  { 593.2, 19.32, 0.0, -73.25, 2.086, 0.0 }, // CO
250  { 2.923, 0.1113, 0.0, -0.3476, 0.01032, 0.0 }, // HC
251  { 3014, 299.3, 0.0, -149, 9.014, 0.0 }, // mKr
252  { 4.336, 0.4428, 0.0, -0.3204, 0.01371, 0.0 }, // NOx
253  { 0.2375, 0.0245, 0.0, -0.03251, 0.001325, 0.0 }, // PM
254  },
255  {
256  // PC_G_EU5
257  { 8823, 886, 0.0, -432.9, 26.53, 0.0 }, // CO2(total)
258  { 499.5, 16.93, 0.0, -61.37, 1.737, 0.0 }, // CO
259  { 2.554, 0.1011, 0.0, -0.3009, 0.008911, 0.0 }, // HC
260  { 2814, 282.6, 0.0, -138.1, 8.462, 0.0 }, // mKr
261  { 4.02, 0.4289, 0.0, -0.286, 0.01257, 0.0 }, // NOx
262  { 0.2786, 0.0241, 0.0, -0.03718, 0.001396, 0.0 }, // PM
263  },
264  {
265  // PC_G_EU6
266  { 8273, 845.1, 0.0, -401.1, 25.08, 0.0 }, // CO2(total)
267  { 405.3, 13.7, 0.0, -49.38, 1.389, 0.0 }, // CO
268  { 2.016, 0.08505, 0.0, -0.2338, 0.006998, 0.0 }, // HC
269  { 2639, 269.6, 0.0, -127.9, 8.001, 0.0 }, // mKr
270  { 3.444, 0.4035, 0.0, -0.2313, 0.01086, 0.0 }, // NOx
271  { 0.3107, 0.02274, 0.0, -0.04042, 0.001421, 0.0 }, // PM
272  },
273  {
274  // PC_G_East
275  { 9396, 929.9, 0.0, -465.5, 28.05, 0.0 }, // CO2(total)
276  { 3034, 176.7, 0.0, -332.4, 10.88, 0.0 }, // CO
277  { 1363, 16.62, 0.0, -133.4, 3.537, 0.0 }, // HC
278  { 2997, 296.6, 0.0, -148.5, 8.948, 0.0 }, // mKr
279  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // NOx
280  { 2.394, 0.2126, 0.0, -0.3147, 0.01108, 0.0 }, // PM
281  },
282  {
283  // PC_D_EU0
284  { 8212, 888.8, 0.0, -237.3, 19.77, 0.0 }, // CO2(total)
285  { 84.56, 3.162, 0.0, -6.251, 0.1955, 0.0 }, // CO
286  { 6.153, 0.1644, 0.0, 0.1236, 0.0, 0.0 }, // HC
287  { 2583, 279.6, 0.0, -74.65, 6.22, 0.0 }, // mKr
288  { 28.84, 5.756, 0.0, -1.228, 0.1234, 0.0 }, // NOx
289  { 18.43, 0.7548, 0.0, -1.834, 0.06254, 0.0 }, // PM
290  },
291  {
292  // PC_D_EU1
293  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // CO2(total)
294  { 2.811, 1.004, 0.0, 0.9606, 0.0, 0.0 }, // CO
295  { 1.989, 0.06299, 0.0, 0.05963, 0.0, 0.0 }, // HC
296  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // mKr
297  { 43.38, 5.386, 0.0, -3.436, 0.1704, 0.0 }, // NOx
298  { 2.569, 0.4934, 0.0, 0.1002, 0.0, 0.0003083 }, // PM
299  },
300  {
301  // PC_D_EU2
302  { 4485, 760.9, 0.0, 160, 0.0, 0.2488 }, // CO2(total)
303  { 6.66, 0.08232, 0.0, 0.01522, 0.0, 0.0 }, // CO
304  { 1.145, 0.01858, 0.0, 0.04206, -0.0009262, 0.0 }, // HC
305  { 1411, 239.3, 0.0, 50.32, 0.0, 0.07827 }, // mKr
306  { 58.93, 5.709, 0.0, -5.174, 0.2186, 0.0 }, // NOx
307  { 1.496, 0.2026, 0.0, 0.0777, 0.0, 0.0001067 }, // PM
308  },
309  {
310  // PC_D_EU3
311  { 4234, 691.1, 0.0, 149.4, 0.0, 0.2161 }, // CO2(total)
312  { 4.436, 0.04963, 0.0, -0.1117, 0.0, 0.0 }, // CO
313  { 0.3601, 0.04356, 0.0, 0.02848, 0.0, 0.0 }, // HC
314  { 1332, 217.4, 0.0, 47, 0.0, 0.06797 }, // mKr
315  { 65.19, 7.25, 0.0, -6.12, 0.2648, 0.0 }, // NOx
316  { 1.773, 0.175, 0.0, -0.1295, 0.006047, 0.0 }, // PM
317  },
318  {
319  // PC_D_EU4
320  { 6824, 742.3, 0.0, -195.3, 16.46, 0.0 }, // CO2(total)
321  { 2.105, 0.02898, 0.0, -0.03593, 0.0, 0.0 }, // CO
322  { 0.1208, 0.01649, 0.0, 0.02261, 0.0, 0.0 }, // HC
323  { 2147, 233.5, 0.0, -61.45, 5.178, 0.0 }, // mKr
324  { 47.45, 4.011, 0.0, -4.061, 0.1619, 0.0 }, // NOx
325  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PM
326  },
327  {
328  // PC_D_EU5
329  { 4125, 686.1, 0.0, 153.1, 0.0, 0.2125 }, // CO2(total)
330  { 1.319, 0.02428, 0.0, -0.01683, 0.0, 0.0 }, // CO
331  { 0.1285, 0.0168, 0.0, 0.02269, 0.0, 0.0 }, // HC
332  { 1298, 215.8, 0.0, 48.15, 0.0, 0.06684 }, // mKr
333  { 46.01, 4.064, 0.0, -3.872, 0.1567, 0.0 }, // NOx
334  { 0.6729, 0.02248, 0.0, -0.0764, 0.002153, 0.0 }, // PM
335  },
336  {
337  // PC_D_EU6
338  { 3946, 661.8, 0.0, 149.8, 0.0, 0.2041 }, // CO2(total)
339  { 2.096, 0.02906, 0.0, -0.03578, 0.0, 0.0 }, // CO
340  { 0.1368, 0.01692, 0.0, 0.02037, 0.0, 0.0 }, // HC
341  { 1241, 208.2, 0.0, 47.1, 0.0, 0.06419 }, // mKr
342  { 16.31, 1.39, 0.0, -1.391, 0.05512, 0.0 }, // NOx
343  { 0.553, 0.01902, 0.0, -0.06184, 0.001758, 0.0 }, // PM
344  },
345  {
346  // Bus
347  { 1.903e+04, 6475, 0.0, 2073, 0.0, 0.0 }, // CO2(total)
348  { 72.61, 7.482, 0.0, 0.6348, 0.0, 0.0 }, // CO
349  { 17.46, 0.8473, 0.0, 0.254, 0.0, 0.0 }, // HC
350  { 6016, 2049, 0.0, 656.6, 0.0, 0.0 }, // mKr
351  { 218.7, 46.17, 0.0, 11.27, 0.0, 0.0 }, // NOx
352  { 7.222, 0.8024, 0.0, 0.1201, 0.0, 0.0 }, // PM
353  },
354  {
355  // Coach
356  { 1.667e+04, 7763, 0.0, 2610, 0.0, 0.0 }, // CO2(total)
357  { 70.85, 7.73, 0.0, 1.306, 0.0, 0.0 }, // CO
358  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // HC
359  { 5244, 2442, 0.0, 820.9, 0.0, 0.0 }, // mKr
360  { 226.7, 60.86, 0.0, 16.97, 0.0, 0.0 }, // NOx
361  { 8.297, 0.8085, 0.0, 0.1417, 0.0, 0.0 }, // PM
362  },
363  {
364  // HDV
365  { 2.657e+04, 7076, 0.0, 1753, 0.0, 0.0 }, // CO2(total)
366  { 54.72, 7.864, 0.0, 1.669, 0.0, 0.0 }, // CO
367  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // HC
368  { 8358, 2226, 0.0, 551.4, 0.0, 0.0 }, // mKr
369  { 305.6, 55.28, 0.0, 9.505, 0.0, 0.0 }, // NOx
370  { 7.952, 0.854, 0.0, 0.1195, 0.0, 0.0 }, // PM
371  },
372  {
373  // HDV_G
374  { 7628, 3462, 0.0, 1058, 0.0, 0.9676 }, // CO2(total)
375  { 464, 22.34, 0.0, -81.01, 5.955, -0.1182 }, // CO
376  { 220.4, 3.65, 0.0, -13.27, 0.4346, 0.0 }, // HC
377  { 2434, 1104, 0.0, 337.4, 0.0, 0.3087 }, // mKr
378  { 53.53, 33.43, 0.0, 11.47, 0.0, 0.007806 }, // NOx
379  { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PM
380  },
381  {
382  // HDV_D_EU0
383  { 3.251e+04, 7256, 0.0, 1631, 0.0, 0.0 }, // CO2(total)
384  { 52.89, 12.75, 0.0, 4.547, 0.0, 0.0 }, // CO
385  { 27.82, 1.453, 0.0, 0.2468, 0.0, 0.0 }, // HC
386  { 1.023e+04, 2283, 0.0, 513.1, 0.0, 0.0 }, // mKr
387  { 428.6, 104.2, 0.0, 24.18, 0.0, 0.0 }, // NOx
388  { 14.15, 2.335, 0.0, 0.6566, 0.0, 0.0 }, // PM
389  },
390  {
391  // HDV_D_EU1
392  { 2.749e+04, 6533, 0.0, 1538, 0.0, 0.0 }, // CO2(total)
393  { 58.3, 8.423, 0.0, 1.86, 0.0, 0.0 }, // CO
394  { 19.78, 1.929, 0.0, 0.2819, 0.0, 0.0 }, // HC
395  { 8647, 2055, 0.0, 483.7, 0.0, 0.0 }, // mKr
396  { 299.3, 67.56, 0.0, 14.89, 0.0, 0.0 }, // NOx
397  { 11.9, 1.744, 0.0, 0.3954, 0.0, 0.0 }, // PM
398  },
399  {
400  // HDV_D_EU2
401  { 2.537e+04, 6723, 0.0, 1689, 0.0, 0.0 }, // CO2(total)
402  { 41.4, 5.325, 0.0, 1.366, 0.0, 0.0 }, // CO
403  { 13.69, 1.19, 0.0, 0.1655, 0.0, 0.0 }, // HC
404  { 7980, 2115, 0.0, 531.2, 0.0, 0.0 }, // mKr
405  { 298.4, 67.21, 0.0, 15.36, 0.0, 0.0 }, // NOx
406  { 4.584, 0.789, 0.0, 0.2434, 0.0, 0.0 }, // PM
407  },
408  {
409  // HDV_D_EU3
410  { 2.598e+04, 6712, 0.0, 1728, 0.0, 0.0 }, // CO2(total)
411  { 51.47, 4.238, 0.0, 1.078, 0.0, 0.0 }, // CO
412  { 12.25, 0.9033, 0.0, 0.1305, 0.0, 0.0 }, // HC
413  { 8174, 2111, 0.0, 543.5, 0.0, 0.0 }, // mKr
414  { 241.1, 51.57, 0.0, 11.42, 0.0, 0.0 }, // NOx
415  { 5.436, 0.5336, 0.0, 0.1604, 0.0, 0.0 }, // PM
416  },
417  {
418  // HDV_D_EU4
419  { 2.429e+04, 7180, 0.0, 1835, 0.0, 0.0 }, // CO2(total)
420  { 50.68, 6.655, 0.0, 0.8349, 0.0, 0.0 }, // CO
421  { 1.119, 0.1747, 0.0, 0.03217, 0.0, 0.0 }, // HC
422  { 7639, 2259, 0.0, 577.1, 0.0, 0.0 }, // mKr
423  { 202.2, 42.34, 0.0, 8.858, 0.0, 0.0 }, // NOx
424  { 1.267, 0.131, 0.0, -0.006405, 0.0, 0.0 }, // PM
425  },
426  {
427  // HDV_D_EU5
428  { 2.396e+04, 7231, 0.0, 1868, 0.0, 0.0 }, // CO2(total)
429  { 51.51, 6.785, 0.0, 0.8496, 0.0, 0.0 }, // CO
430  { 1.124, 0.175, 0.0, 0.03241, 0.0, 0.0 }, // HC
431  { 7536, 2274, 0.0, 587.6, 0.0, 0.0 }, // mKr
432  { 164.8, 33.84, 0.0, 7.036, 0.0, 0.0 }, // NOx
433  { 1.305, 0.1324, 0.0, -0.007715, 0.0, 0.0 }, // PM
434  },
435  {
436  // HDV_D_EU6
437  { 2.353e+04, 7227, 0.0, 1889, 0.0, 0.0 }, // CO2(total)
438  { 30.78, 4.512, 0.0, 0.6383, 0.0, 0.0 }, // CO
439  { 0.7469, 0.136, 0.0, 0.03002, 0.0, 0.0 }, // HC
440  { 7400, 2273, 0.0, 594.2, 0.0, 0.0 }, // mKr
441  { 47.47, 11.68, 0.0, 2.737, 0.0, 0.0 }, // NOx
442  { 0.1279, 0.01668, 0.0, 0.00329, 0.0, 0.0 }, // PM
443  },
444  {
445  // HDV_D_East
446  { 2.017e+04, 6019, 0.0, 1723, 0.0, 0.0 }, // CO2(total)
447  { 51.97, 16.95, 0.0, 6.523, 0.0, 0.0 }, // CO
448  { 78.82, 2.36, 0.0, -4.421, 0.1487, 0.0 }, // HC
449  { 6344, 1893, 0.0, 541.9, 0.0, 0.0 }, // mKr
450  { 299.7, 91.14, 0.0, 25.15, 0.0, 0.0 }, // NOx
451  { 13.59, 3.709, 0.0, 1.39, 0.0, 0.0 }, // PM
452  },
453 };
454 
455 
456 // ===========================================================================
457 // method definitions
458 // ===========================================================================
460  int index = HBEFA3_BASE;
461  myEmissionClassStrings.insert("zero", index++);
462  std::string light[] = { "LDV", "LDV_G_EU0", "LDV_G_EU1", "LDV_G_EU2", "LDV_G_EU3", "LDV_G_EU4", "LDV_G_EU5", "LDV_G_EU6", "LDV_G_East",
463  "LDV_D_EU0", "LDV_D_EU1", "LDV_D_EU2", "LDV_D_EU3", "LDV_D_EU4", "LDV_D_EU5", "LDV_D_EU6",
464  "PC", "PC_Alternative", "PC_G_EU0", "PC_G_EU1", "PC_G_EU2", "PC_G_EU3", "PC_G_EU4", "PC_G_EU5", "PC_G_EU6", "PC_G_East",
465  "PC_D_EU0", "PC_D_EU1", "PC_D_EU2", "PC_D_EU3", "PC_D_EU4", "PC_D_EU5", "PC_D_EU6"
466  };
467  std::string heavy[] = { "Bus", "Coach", "HDV", "HDV_G", "HDV_D_EU0", "HDV_D_EU1", "HDV_D_EU2", "HDV_D_EU3", "HDV_D_EU4", "HDV_D_EU5", "HDV_D_EU6", "HDV_D_East"};
468  for (int i = 0; i < 33; i++) {
469  myEmissionClassStrings.insert(light[i], index);
470  std::transform(light[i].begin(), light[i].end(), light[i].begin(), tolower);
471  myEmissionClassStrings.addAlias(light[i], index);
472  index++;
473  }
474  for (int i = 0; i < 12; i++) {
475  myEmissionClassStrings.insert(heavy[i], index | PollutantsInterface::HEAVY_BIT);
476  std::transform(heavy[i].begin(), heavy[i].end(), heavy[i].begin(), tolower);
477  myEmissionClassStrings.addAlias(heavy[i], index);
478  index++;
479  }
480  myEmissionClassStrings.addAlias("unknown", myEmissionClassStrings.get("PC"));
481 }
482 
483 
485 HelpersHBEFA3::getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel, const std::string& eClass, const double /* weight */) const {
486  std::string eClassOffset = "0";
487  if (eClass.length() == 5 && eClass.substr(0, 4) == "Euro") {
488  if (eClass[4] >= '0' && eClass[4] <= '6') {
489  eClassOffset = eClass.substr(4, 1);
490  }
491  }
492  std::string desc;
493  if (vClass == "Passenger") {
494  desc = "PC_";
495  if (fuel == "Gasoline") {
496  desc += "G_";
497  } else if (fuel == "Diesel") {
498  desc += "D_";
499  }
500  desc += "EU" + eClassOffset;
501  } else if (vClass == "Delivery") {
502  desc = "LDV_";
503  if (fuel == "Gasoline") {
504  desc += "G_";
505  } else if (fuel == "Diesel") {
506  desc += "D_";
507  }
508  desc += "EU" + eClassOffset;
509  } else if (vClass == "UrbanBus") {
510  desc = "Bus";
511  } else if (vClass == "Coach") {
512  desc = "Coach";
513  } else if (vClass == "Truck" || vClass == "Trailer") {
514  if (fuel == "Gasoline") {
515  desc = "HDV_G";
516  } else if (fuel == "Diesel") {
517  desc = "HDV_D_EU" + eClassOffset;
518  }
519  }
520  if (myEmissionClassStrings.hasString(desc)) {
521  return myEmissionClassStrings.get(desc);
522  }
523  return base;
524 }
525 
526 
527 std::string
529  const std::string name = myEmissionClassStrings.getString(c);
530  if (name.find("Coach") != std::string::npos) {
531  return "Coach";
532  } else if (name.find("Bus") != std::string::npos) {
533  return "UrbanBus";
534  } else if (name.find("LDV") != std::string::npos) {
535  return "Delivery";
536  } else if (name.find("HDV") != std::string::npos) {
537  return "Truck";
538  }
539  return "Passenger";
540 }
541 
542 
543 std::string
545  const std::string name = myEmissionClassStrings.getString(c);
546  std::string fuel = "Gasoline";
547  if (name.find("_D_") != std::string::npos) {
548  fuel = "Diesel";
549  }
550  return fuel;
551 }
552 
553 
554 int
556  const std::string name = myEmissionClassStrings.getString(c);
557  if (name.find("_EU1") != std::string::npos) {
558  return 1;
559  } else if (name.find("_EU2") != std::string::npos) {
560  return 2;
561  } else if (name.find("_EU3") != std::string::npos) {
562  return 3;
563  } else if (name.find("_EU4") != std::string::npos) {
564  return 4;
565  } else if (name.find("_EU5") != std::string::npos) {
566  return 5;
567  } else if (name.find("_EU6") != std::string::npos) {
568  return 6;
569  }
570  return 0;
571 }
572 
573 
574 /****************************************************************************/
575 
static const int HBEFA3_BASE
Definition: HelpersHBEFA3.h:58
static const int HEAVY_BIT
the bit to set for denoting heavy vehicles
int SUMOEmissionClass
int getEuroClass(const SUMOEmissionClass c) const
Returns the Euro emission class described by this emission class as described in the Amitran interfac...
std::string getAmitranVehicleClass(const SUMOEmissionClass c) const
Returns the vehicle class described by this emission class as described in the Amitran interface (Pas...
SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string &vClass, const std::string &fuel, const std::string &eClass, const double weight) const
Returns the emission class described by the given parameters.
StringBijection< SUMOEmissionClass > myEmissionClassStrings
Mapping between emission class names and integer representations.
std::string getFuel(const SUMOEmissionClass c) const
Returns the fuel type described by this emission class as described in the Amitran interface (Gasolin...
static double myFunctionParameter[45][6][6]
The function parameter.
HelpersHBEFA3()
Constructor (initializes myEmissionClassStrings)
Helper methods for PHEMlight-based emission computation.