1 | /************************************************************************************ |
---|
2 | * Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University |
---|
3 | * All rights reserved. |
---|
4 | * Refer to LICENSE for terms and conditions of use. |
---|
5 | ***********************************************************************************/ |
---|
6 | package vnsim.vehicular.emissions; |
---|
7 | /** |
---|
8 | * Class for estimation of fuel consumption and emissions of Carbon Monoxide (CO), |
---|
9 | * Hydrocarbons (HC), Notrogen Oxides (NOx) and Carbon Dioxide (CO2) |
---|
10 | * |
---|
11 | * @author Victor Gradinescu |
---|
12 | * |
---|
13 | */ |
---|
14 | public class EmissionsUtil { |
---|
15 | |
---|
16 | // average idle fuel consumption for light vehicles(LV) [mL/s] |
---|
17 | public static final double IDLE_FC = 1350.0 / 3600.0 ; |
---|
18 | // average idle CO emission for light vehicles [g/s] |
---|
19 | public static final double IDLE_CO = 50.0 / 3600.0; |
---|
20 | // average idle HC emission for light vehicles [g/s] |
---|
21 | public static final double IDLE_HC = 8.0 / 3600.0; |
---|
22 | // average idle NOx emission for light vehicles [g/s] |
---|
23 | public static final double IDLE_NOx = 2.0 / 3600.0; |
---|
24 | // average CO2 emission rate per unit of fuel consumed (LV) [g/mL] |
---|
25 | public static final double CO2_RATE = 2.5; |
---|
26 | // efficiency parameter (in relation to the energy of the engine) |
---|
27 | // fuel [mL/kJ], emissions [g/kJ] |
---|
28 | public static final double beta1F = 0.0900; |
---|
29 | public static final double beta1CO = 0.0150; |
---|
30 | public static final double beta1HC = 0; |
---|
31 | public static final double beta1NOx = 0.0010; |
---|
32 | // efficiency parameter (in relation to the product of inertia energy and acceleration) |
---|
33 | // only for positive acceleration |
---|
34 | // fuel [mL/kJ], emissions [g/kJ] |
---|
35 | public static final double beta2F = 0.0300; |
---|
36 | public static final double beta2CO = 0.0250; |
---|
37 | public static final double beta2HC = 0.0004; |
---|
38 | public static final double beta2NOx = 0.0002; |
---|
39 | |
---|
40 | // average vehicle mass [kg] |
---|
41 | public static final double Mv = 1400; |
---|
42 | //Tyre rolling resistance factor |
---|
43 | public static final double ROLLRESCOEF = 0.06;//0.1; |
---|
44 | //Aero. drag coef (wind factor 1.2) |
---|
45 | public static final double AIRRESCOEF = 0.3;//0.54; |
---|
46 | //frontal vehicle area [m^2] |
---|
47 | public static final double FRONTAL_AREA = 2.1; |
---|
48 | //air density [kg/m^3] |
---|
49 | public static final double AIRDENSITY = 1.29; |
---|
50 | |
---|
51 | public static final double g = 9.81; // [m/s^2] |
---|
52 | |
---|
53 | static double rollresforce = 500;//ROLLRESCOEF * Mv * g; |
---|
54 | |
---|
55 | static double airDragForceCoef = 0.5 * AIRRESCOEF * FRONTAL_AREA * AIRDENSITY; |
---|
56 | |
---|
57 | // value of fuel consumed during the specified time interval [mL] |
---|
58 | public static EmissionsResults estimateFuelConsumption(double speed, double acceleration, double seconds){ |
---|
59 | double v = speed / 3.6; // [m/s] |
---|
60 | double a = acceleration / (3.6 * 3600); // [m/s^2] |
---|
61 | double dt = seconds; |
---|
62 | double fc, co, hc, nox; |
---|
63 | // System.out.println("v = "+v+"\na = "+a); |
---|
64 | double airDragForce = airDragForceCoef * v * v; |
---|
65 | // total tractive force Rt |
---|
66 | double Rt = Mv * a + rollresforce + airDragForce; |
---|
67 | Rt /= 1000; |
---|
68 | // System.out.println(Rt + " " + airDragForce + " " +rollresforce); |
---|
69 | |
---|
70 | if (Rt <= 0){ |
---|
71 | fc = IDLE_FC * dt; |
---|
72 | co = IDLE_CO * dt; |
---|
73 | hc = IDLE_HC * dt; |
---|
74 | nox = IDLE_NOx * dt; |
---|
75 | }else{ |
---|
76 | double term3 = 0; |
---|
77 | if (a > 0) |
---|
78 | term3 = Mv * a * a * v / 1000; |
---|
79 | |
---|
80 | fc = (IDLE_FC + beta1F * Rt * v + beta2F * term3) * dt; |
---|
81 | co = (IDLE_CO + beta1CO * Rt * v + beta2CO * term3) * dt; |
---|
82 | hc = (IDLE_HC + beta1HC * Rt * v + beta2HC * term3) * dt; |
---|
83 | nox = (IDLE_NOx + beta1NOx * Rt * v + beta2NOx * term3) * dt; |
---|
84 | } |
---|
85 | return new EmissionsResults(fc, co, CO2_RATE * fc, hc, nox); |
---|
86 | } |
---|
87 | |
---|
88 | public static void main(String args[]){ |
---|
89 | double dt = 1; |
---|
90 | double v[] = {70, 70, 70, 69, 66, 62, 56, 49, 38, 27, 15, 6, 0, 0, 2, 7, 16, 25, 35, 44, 53, 60, 65, 68, 70, 70, 70, 70, 70, 70}; |
---|
91 | double a[] = {0, 0, 0, -0.5, -1, -1.5, -2, -2.5, -3, -3.4, -3.2, -2.1, -0.3, 0, 1, 2, 2.6, 3, 2.8, 2.6, 2.1, 1.6, 1.1, 0.7, 0.3, 0, 0, 0, 0, 0}; |
---|
92 | for (int i = 0; i < 30; i++){ |
---|
93 | EmissionsResults er = estimateFuelConsumption(v[i], a[i]* (3.6 * 3600),dt); |
---|
94 | System.out.println(i+" "+ er.fc * (3600.0 / dt) / 1000); |
---|
95 | } |
---|
96 | // EmissionsResults er = estimateFuelConsumption(100, 0 * (3.6 * 3600),dt); |
---|
97 | // System.out.println(er.fc); |
---|
98 | } |
---|
99 | |
---|
100 | } |
---|
101 | |
---|