Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/foreign/PHEMlight/V5/cpp/CEPHandler.h
169688 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2016-2025 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 CEPHandler.h
17
/// @author Martin Dippold
18
/// @author Michael Behrisch
19
/// @date July 2016
20
///
21
//
22
/****************************************************************************/
23
#pragma once
24
25
#include <string>
26
#include <map>
27
#include <vector>
28
#include <utility>
29
30
//C# TO C++ CONVERTER NOTE: Forward class declarations:
31
namespace PHEMlightdllV5 { class CEP; }
32
namespace PHEMlightdllV5 { class Correction; }
33
namespace PHEMlightdllV5 { class Helpers; }
34
namespace PHEMlightdllV5 { class VEHPHEMLightJSON; }
35
namespace PHEMlightdllV5 { class Vehicle_Data; }
36
namespace PHEMlightdllV5 { class VEH; }
37
namespace PHEMlightdllV5 { class Aux_Data; }
38
namespace PHEMlightdllV5 { class Engine_Data; }
39
namespace PHEMlightdllV5 { class Rollres_Data; }
40
namespace PHEMlightdllV5 { class FullLoadDrag_Data; }
41
namespace PHEMlightdllV5 { class Transmission_Data; }
42
namespace PHEMlightdllV5 { class ICE_Data; }
43
namespace PHEMlightdllV5 { class EM_Data; }
44
45
namespace PHEMlightdllV5 {
46
//PHEMLight vehicle
47
class VEHPHEMLightJSON {
48
// Vehicle data
49
public:
50
class Vehicle_Data {
51
private:
52
std::string privateMassType;
53
std::string privateFuelType;
54
std::string privateCalcType;
55
double privateMass;
56
double privateLoading;
57
double privateRedMassWheel;
58
double privateWheelDiameter;
59
double privateCw;
60
double privateA;
61
double privateMileage;
62
63
public:
64
const std::string& getMassType() const;
65
void setMassType(const std::string& value);
66
const std::string& getFuelType() const;
67
void setFuelType(const std::string& value);
68
const std::string& getCalcType() const;
69
void setCalcType(const std::string& value);
70
const double& getMass() const;
71
void setMass(const double& value);
72
const double& getLoading() const;
73
void setLoading(const double& value);
74
const double& getRedMassWheel() const;
75
void setRedMassWheel(const double& value);
76
const double& getWheelDiameter() const;
77
void setWheelDiameter(const double& value);
78
const double& getCw() const;
79
void setCw(const double& value);
80
const double& getA() const;
81
void setA(const double& value);
82
const double& getMileage() const;
83
void setMileage(const double& value);
84
};
85
86
// Rolling resistance data
87
public:
88
class Rollres_Data {
89
private:
90
double privateFr0;
91
double privateFr1;
92
double privateFr2;
93
double privateFr3;
94
double privateFr4;
95
96
public:
97
const double& getFr0() const;
98
void setFr0(const double& value);
99
const double& getFr1() const;
100
void setFr1(const double& value);
101
const double& getFr2() const;
102
void setFr2(const double& value);
103
const double& getFr3() const;
104
void setFr3(const double& value);
105
const double& getFr4() const;
106
void setFr4(const double& value);
107
};
108
109
// ICE engine
110
public:
111
class ICE_Data {
112
private:
113
double privatePrated;
114
double privatenrated;
115
double privateIdling;
116
117
public:
118
const double& getPrated() const;
119
void setPrated(const double& value);
120
const double& getnrated() const;
121
void setnrated(const double& value);
122
const double& getIdling() const;
123
void setIdling(const double& value);
124
};
125
126
// EM engine
127
public:
128
class EM_Data {
129
private:
130
double privatePrated;
131
double privatenrated;
132
133
public:
134
const double& getPrated() const;
135
void setPrated(const double& value);
136
const double& getnrated() const;
137
void setnrated(const double& value);
138
};
139
140
// Engine data
141
public:
142
class Engine_Data {
143
private:
144
ICE_Data privateICEData;
145
EM_Data privateEMData;
146
147
public:
148
ICE_Data* getICEData();
149
EM_Data* getEMData();
150
};
151
152
// Auxiliaries data
153
public:
154
class Aux_Data {
155
private:
156
double privatePauxnorm;
157
158
public:
159
const double& getPauxnorm() const;
160
void setPauxnorm(const double& value);
161
};
162
163
// Full load and Drag data
164
public:
165
class FullLoadDrag_Data {
166
private:
167
double privateP_n_max_v0;
168
double privateP_n_max_p0;
169
double privateP_n_max_v1;
170
double privateP_n_max_p1;
171
std::map<std::string, std::vector<double> > privateDragCurve;
172
173
public:
174
const double& getP_n_max_v0() const;
175
void setP_n_max_v0(const double& value);
176
const double& getP_n_max_p0() const;
177
void setP_n_max_p0(const double& value);
178
const double& getP_n_max_v1() const;
179
void setP_n_max_v1(const double& value);
180
const double& getP_n_max_p1() const;
181
void setP_n_max_p1(const double& value);
182
std::map<std::string, std::vector<double> >& getDragCurve();
183
void setDragCurve(const std::map<std::string, std::vector<double> >& value);
184
185
FullLoadDrag_Data();
186
};
187
188
// Transmission data
189
public:
190
class Transmission_Data {
191
private:
192
double privateAxelRatio;
193
std::map<std::string, std::vector<double> > privateTransm;
194
195
public:
196
const double& getAxelRatio() const;
197
void setAxelRatio(const double& value);
198
std::map<std::string, std::vector<double> >& getTransm();
199
void setTransm(const std::map<std::string, std::vector<double> >& value);
200
201
Transmission_Data();
202
};
203
204
//Root object
205
public:
206
class VEH {
207
private:
208
std::string privateType;
209
std::string privateVersion;
210
Vehicle_Data privateVehicleData;
211
Aux_Data privateAuxiliariesData;
212
Engine_Data privateEngineData;
213
Rollres_Data privateRollingResData;
214
FullLoadDrag_Data privateFLDData;
215
Transmission_Data privateTransmissionData;
216
217
public:
218
const std::string& getType() const;
219
void setType(const std::string& value);
220
const std::string& getVersion() const;
221
void setVersion(const std::string& value);
222
Vehicle_Data* getVehicleData();
223
Aux_Data* getAuxiliariesData();
224
Engine_Data* getEngineData();
225
Rollres_Data* getRollingResData();
226
FullLoadDrag_Data* getFLDData();
227
Transmission_Data* getTransmissionData();
228
};
229
230
};
231
232
class CEPHandler {
233
public:
234
CEPHandler();
235
236
private:
237
std::map<std::string, CEP*> _ceps;
238
public:
239
const std::map<std::string, CEP*>& getCEPS() const;
240
241
242
bool GetCEP(std::vector<std::string>& DataPath, Helpers* Helper, Correction* DataCor);
243
244
245
private:
246
bool CalcCorrection(Correction* DataCor, Helpers* Helper, VEHPHEMLightJSON::Vehicle_Data* vehicle_Data);
247
248
bool Load(std::vector<std::string>& DataPath, Helpers* Helper, Correction* DataCor, bool fleetMix = false);
249
250
bool ReadVehicleFile(const std::vector<std::string>& DataPath, const std::string& emissionClass, Helpers* Helper, bool fleetMix, VEHPHEMLightJSON::VEH*& Vehicle);
251
252
bool ReadEmissionData(bool readFC, const std::vector<std::string>& DataPath, const std::string& emissionClass, Helpers* Helper, bool fleetMix, Correction* DataCor, std::vector<std::string>& header, std::vector<std::vector<double> >& matrix, std::vector<double>& idlingValues);
253
254
bool CorrectEmissionData(Correction* DataCor, std::vector<std::string>& header, std::vector<std::vector<double> >& matrix, std::vector<double>& idlingValues);
255
256
//Calculate correction factor for detoriation and temperature correction
257
double GetDetTempCor(Correction* DataCor, const std::string& Emi);
258
259
260
//Split the string
261
const std::vector<std::string> split(const std::string& s, char delim);
262
263
//Convert string to double
264
double todouble(const std::string& s);
265
266
//Convert string to double list
267
std::vector<double> todoubleList(const std::vector<std::string>& s);
268
269
//Read a line from file
270
std::string ReadLine(std::ifstream& s);
271
};
272
}
273
274