Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2016-2024 German Aerospace Center (DLR) and others.
4 : // PHEMlight module
5 : // Copyright (C) 2016-2023 Technische Universitaet Graz, https://www.tugraz.at/
6 : // This program and the accompanying materials are made available under the
7 : // terms of the Eclipse Public License 2.0 which is available at
8 : // https://www.eclipse.org/legal/epl-2.0/
9 : // This Source Code may also be made available under the following Secondary
10 : // Licenses when the conditions for such availability set forth in the Eclipse
11 : // Public License 2.0 are satisfied: GNU General Public License, version 2
12 : // or later which is available at
13 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
14 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
15 : /****************************************************************************/
16 : /// @file CEP.h
17 : /// @author Martin Dippold
18 : /// @author Michael Behrisch
19 : /// @date July 2016
20 : ///
21 : //
22 : /****************************************************************************/
23 : #pragma once
24 :
25 : #define _USE_MATH_DEFINES
26 : #include <string>
27 : #include <map>
28 : #include <vector>
29 : #include <cmath>
30 : #include <utility>
31 : #include "CEPHandler.h"
32 :
33 : //C# TO C++ CONVERTER NOTE: Forward class declarations:
34 : namespace PHEMlightdllV5 { class VEHPHEMLightJSON; }
35 : namespace PHEMlightdllV5 { class VEH; }
36 : namespace PHEMlightdllV5 { class Helpers; }
37 :
38 : #define FLEET
39 :
40 : namespace PHEMlightdllV5 {
41 : class CEP {
42 : public:
43 : enum eNormalizingType {
44 : eNormalizingType_RatedPower,
45 : eNormalizingType_DrivingPower
46 : };
47 :
48 : private:
49 : bool privateHeavyVehicle;
50 : std::string privateFuelType;
51 : std::string privateCalcType;
52 : double privateRatedPower;
53 :
54 : public:
55 : CEP(VEHPHEMLightJSON::VEH* Vehicle, std::vector<std::string>& headerLineFCvalues, std::vector<std::vector<double> >& matrixFCvalues, std::vector<std::string>& headerLinePollutants, std::vector<std::vector<double> >& matrixPollutants, std::vector<double>& idlingFCvalues, std::vector<double>& idlingPollutants);
56 :
57 :
58 : const bool& getHeavyVehicle() const;
59 : const std::string& getFuelType() const;
60 : void setFuelType(const std::string& value);
61 : const std::string& getCalcType() const;
62 : void setCalcType(const std::string& value);
63 :
64 : public:
65 : const double& getRatedPower() const;
66 : void setRatedPower(const double& value);
67 : double getAuxPower() const {
68 202272 : return _auxPower * getRatedPower();
69 : }
70 : double getVehicleMass() const {
71 347630 : return _massVehicle;
72 : }
73 : double getVehicleLoading() const {
74 347630 : return _vehicleLoading;
75 : }
76 : double getVehicleMassRot() const {
77 262332 : return _vehicleMassRot;
78 : }
79 : double getCrossSectionalArea() const {
80 287570 : return _crossSectionalArea;
81 : }
82 : double getCWValue() const {
83 287570 : return _cWValue;
84 : }
85 : double getWheelRadius() const {
86 85298 : return _effectiveWheelDiameter / 2.;
87 : }
88 : double getResistanceF0() const {
89 287570 : return _resistanceF0;
90 : }
91 287570 : double getResistance(const double speed, const double f0) const {
92 287570 : return f0 + _resistanceF1 * speed + _resistanceF2 * std::pow(speed, 2) + _resistanceF3 * std::pow(speed, 3) + _resistanceF4 * std::pow(speed, 4);
93 : }
94 : double getFMot(const double speed, const double ratedPower, const double wheelRadius);
95 :
96 : protected:
97 : double _massVehicle;
98 : double _vehicleLoading;
99 : double _vehicleMassRot;
100 : double _crossSectionalArea;
101 : double _cWValue;
102 : double _resistanceF0;
103 : double _resistanceF1;
104 : double _resistanceF2;
105 : double _resistanceF3;
106 : double _resistanceF4;
107 : double _axleRatio;
108 : double _auxPower;
109 : double _pNormV0;
110 : double _pNormP0;
111 : double _pNormV1;
112 : double _pNormP1;
113 :
114 : double _engineRatedSpeed;
115 : double _engineIdlingSpeed;
116 : double _effectiveWheelDiameter;
117 :
118 : std::vector<double> _speedPatternRotational;
119 : std::vector<double> _normalizedPowerPatternFCvalues;
120 : std::vector<double> _normalizedPowerPatternPollutants;
121 :
122 : std::map<std::string, std::vector<double> > _normedCepCurveFCvalues;
123 : std::vector<double> _gearTransmissionCurve;
124 : std::vector<double> _speedCurveRotational;
125 : std::map<std::string, std::vector<double> > _cepNormalizedCurvePollutants;
126 : std::map<std::string, double> _FleetMix;
127 : std::map<std::string, double> _idlingValueFCvalues;
128 : std::map<std::string, double> _idlingValuesPollutants;
129 :
130 : std::vector<double> _nNormTable;
131 : std::vector<double> _dragNormTable;
132 :
133 : public:
134 : double CalcEngPower(double power, const double ratedPower);
135 :
136 : double GetEmission(const std::string& pollutant, double power, double speed, Helpers* VehicleClass, const double drivingPower, const double ratedPower);
137 :
138 : double GetCO2Emission(double _FC, double _CO, double _HC, Helpers* VehicleClass);
139 :
140 : //Calculate the weighted fuel factor values for Fleetmix
141 : private:
142 : bool CalcfCValMix(double& _fCBr, double& _fCHC, double& _fCCO, double& _fCCO2, Helpers* VehicleClass);
143 :
144 : // Get the fuel factor values
145 : bool GetfcVals(const std::string& _fuelTypex, double& _fCBr, double& _fCHC, double& _fCCO, double& _fCCO2, Helpers* VehicleClass);
146 :
147 : public:
148 : double GetRotationalCoeffecient(double speed);
149 :
150 :
151 : private:
152 : void FindLowerUpperInPattern(int& lowerIndex, int& upperIndex, const std::vector<double>& pattern, double value, double scale=1.);
153 :
154 : double Interpolate(double px, double p1, double p2, double e1, double e2);
155 :
156 : public:
157 : double GetPMaxNorm(double speed);
158 :
159 : //--------------------------------------------------------------------------------------------------
160 : // Operators for fleetmix
161 : //--------------------------------------------------------------------------------------------------
162 :
163 :
164 : private:
165 : void InitializeInstanceFields();
166 : };
167 : }
|