Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/foreign/PHEMlight/V5/cpp/CEPHandler.cpp
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.cpp
17
/// @author Martin Dippold
18
/// @author Michael Behrisch
19
/// @date July 2016
20
///
21
//
22
/****************************************************************************/
23
#include <config.h>
24
25
#include <fstream>
26
#include <sstream>
27
#define JSON_USE_IMPLICIT_CONVERSIONS 0
28
#include <foreign/nlohmann/json.hpp>
29
#include <utils/common/StringUtils.h>
30
#include "CEPHandler.h"
31
#include "CEP.h"
32
#include "Correction.h"
33
#include "Helpers.h"
34
35
36
namespace PHEMlightdllV5 {
37
38
CEPHandler::CEPHandler() {
39
}
40
41
const std::map<std::string, CEP*>& CEPHandler::getCEPS() const {
42
return _ceps;
43
}
44
45
bool CEPHandler::GetCEP(std::vector<std::string>& DataPath, Helpers* Helper, Correction* DataCor) {
46
if (getCEPS().find(Helper->getgClass()) == getCEPS().end()) {
47
if (!Load(DataPath, Helper, DataCor)) {
48
return false;
49
}
50
}
51
return true;
52
}
53
54
bool CEPHandler::CalcCorrection(Correction* DataCor, Helpers* Helper, VEHPHEMLightJSON::Vehicle_Data* vehicle_Data) {
55
if (DataCor->getUseDet()) {
56
DataCor->setVehMileage(-1);
57
if (vehicle_Data->getMileage() > 0.) {
58
DataCor->setVehMileage(vehicle_Data->getMileage());
59
}
60
61
if (!DataCor->IniDETfactor(Helper)) {
62
return false;
63
}
64
}
65
if (DataCor->getUseTNOx()) {
66
if (!DataCor->IniTNOxfactor(Helper)) {
67
return false;
68
}
69
}
70
71
//Return value
72
return true;
73
}
74
75
bool CEPHandler::Load(std::vector<std::string>& DataPath, Helpers* Helper, Correction* DataCor, bool fleetMix) {
76
//Deklaration
77
// get string identifier for PHEM emission class
78
std::string emissionRep = Helper->getgClass();
79
80
// to hold everything.
81
std::vector<std::vector<double> > matrixFCvalues;
82
std::vector<std::vector<double> > matrixPollutants;
83
std::vector<double> idlingValuesFCvalues;
84
std::vector<double> idlingValuesPollutants;
85
std::vector<std::string> headerFCvalues;
86
std::vector<std::string> headerPollutants;
87
VEHPHEMLightJSON::VEH* Vehicle;
88
89
if (!ReadVehicleFile(DataPath, emissionRep, Helper, fleetMix, Vehicle)) {
90
delete Vehicle;
91
return false;
92
}
93
94
if (DataCor != nullptr) {
95
if (!CalcCorrection(DataCor, Helper, Vehicle->getVehicleData())) {
96
delete Vehicle;
97
return false;
98
}
99
}
100
101
if (!ReadEmissionData(true, DataPath, emissionRep, Helper, fleetMix, DataCor, headerFCvalues, matrixFCvalues, idlingValuesFCvalues)) {
102
delete Vehicle;
103
return false;
104
}
105
if (!ReadEmissionData(false, DataPath, emissionRep, Helper, fleetMix, DataCor, headerPollutants, matrixPollutants, idlingValuesPollutants)) {
106
delete Vehicle;
107
return false;
108
}
109
110
_ceps.insert(std::make_pair(Helper->getgClass(), new CEP(Vehicle, headerFCvalues, matrixFCvalues, headerPollutants, matrixPollutants, idlingValuesFCvalues, idlingValuesPollutants)));
111
delete Vehicle;
112
return true;
113
}
114
115
double json2double(const nlohmann::json& vd, const std::string& key) {
116
if (vd.contains(key)) {
117
return vd.at(key).get<double>();
118
}
119
return 0.;
120
}
121
122
bool CEPHandler::ReadVehicleFile(const std::vector<std::string>& DataPath, const std::string& emissionClass, Helpers* Helper, bool /* fleetMix */, VEHPHEMLightJSON::VEH*& Vehicle) {
123
std::string path = "";
124
Vehicle = new VEHPHEMLightJSON::VEH();
125
126
//Open file
127
std::ifstream vehicleReader;
128
for (std::vector<std::string>::const_iterator i = DataPath.begin(); i != DataPath.end(); i++) {
129
vehicleReader.open(((*i) + emissionClass + ".PHEMLight.veh").c_str());
130
if (vehicleReader.good()) {
131
break;
132
}
133
}
134
if (!vehicleReader.good()) {
135
Helper->setErrMsg("File does not exist! (" + emissionClass + ".PHEMLight.veh)");
136
return false;
137
}
138
139
//**** VEH Datei einlesen ****
140
nlohmann::json json;
141
try {
142
vehicleReader >> json;
143
} catch (...) {
144
Helper->setErrMsg("Error during file read! (" + emissionClass + ".PHEMLight.veh)");
145
return false;
146
}
147
148
//*** Get the vehicle data
149
nlohmann::json::iterator vehDataIt = json.find("VehicleData");
150
if (vehDataIt == json.end()) {
151
Helper->setErrMsg("No VehicleData in " + emissionClass + ".PHEMLight.veh!");
152
return false;
153
}
154
const nlohmann::json& vd = *vehDataIt;
155
Vehicle->getVehicleData()->setMassType(vd.contains("MassType") ? vd.at("MassType").get<std::string>() : "LV");
156
Vehicle->getVehicleData()->setFuelType(vd.contains("FuelType") ? vd.at("FuelType").get<std::string>() : "D");
157
Vehicle->getVehicleData()->setCalcType(vd.contains("CalcType") ? vd.at("CalcType").get<std::string>() : "Conv");
158
Vehicle->getVehicleData()->setMass(json2double(vd, "Mass"));
159
Vehicle->getVehicleData()->setLoading(json2double(vd, "Loading"));
160
Vehicle->getVehicleData()->setRedMassWheel(json2double(vd, "RedMassWheel"));
161
Vehicle->getVehicleData()->setWheelDiameter(json2double(vd, "WheelDiameter"));
162
Vehicle->getVehicleData()->setCw(json2double(vd, "Cw"));
163
Vehicle->getVehicleData()->setA(json2double(vd, "A"));
164
Vehicle->getVehicleData()->setMileage(json2double(vd, "Mileage"));
165
166
// Auxiliaries
167
nlohmann::json::iterator auxDataIt = json.find("AuxiliariesData");
168
if (auxDataIt == json.end() || !auxDataIt->contains("Pauxnorm")) {
169
Vehicle->getAuxiliariesData()->setPauxnorm(0.);
170
} else {
171
Vehicle->getAuxiliariesData()->setPauxnorm(auxDataIt->at("Pauxnorm").get<double>());
172
}
173
174
// Engine Data
175
nlohmann::json::iterator engDataIt = json.find("EngineData");
176
if (engDataIt == json.end() || !engDataIt->contains("ICEData") || !engDataIt->contains("EMData")) {
177
Helper->setErrMsg("Incomplete EngineData in " + emissionClass + ".PHEMLight.veh!");
178
return false;
179
}
180
const nlohmann::json& iced = (*engDataIt)["ICEData"];
181
const nlohmann::json& emd = (*engDataIt)["EMData"];
182
Vehicle->getEngineData()->getICEData()->setPrated(json2double(iced, "Prated"));
183
Vehicle->getEngineData()->getICEData()->setnrated(json2double(iced, "nrated"));
184
Vehicle->getEngineData()->getICEData()->setIdling(json2double(iced, "Idling"));
185
Vehicle->getEngineData()->getEMData()->setPrated(json2double(emd, "Prated"));
186
Vehicle->getEngineData()->getEMData()->setnrated(json2double(emd, "nrated"));
187
188
// Rolling resistance
189
nlohmann::json::iterator rrDataIt = json.find("RollingResData");
190
if (rrDataIt == json.end()) {
191
Helper->setErrMsg("No RollingResData in " + emissionClass + ".PHEMLight.veh!");
192
return false;
193
}
194
const nlohmann::json& rrd = *rrDataIt;
195
Vehicle->getRollingResData()->setFr0(json2double(rrd, "Fr0"));
196
Vehicle->getRollingResData()->setFr1(json2double(rrd, "Fr1"));
197
Vehicle->getRollingResData()->setFr2(json2double(rrd, "Fr2"));
198
Vehicle->getRollingResData()->setFr3(json2double(rrd, "Fr3"));
199
Vehicle->getRollingResData()->setFr4(json2double(rrd, "Fr4"));
200
201
// Transmission
202
nlohmann::json::iterator trDataIt = json.find("TransmissionData");
203
if (trDataIt == json.end()) {
204
Helper->setErrMsg("No TransmissionData in " + emissionClass + ".PHEMLight.veh!");
205
return false;
206
}
207
Vehicle->getTransmissionData()->setAxelRatio(json2double(*trDataIt, "AxelRatio"));
208
nlohmann::json::iterator transmIt = trDataIt->find("Transm");
209
if (transmIt == trDataIt->end()) {
210
Helper->setErrMsg(std::string("Transmission ratios missing in vehicle file! Calculation stopped! (") + path + std::string(")"));
211
return false;
212
} else {
213
if (!transmIt->contains("Speed")) {
214
Helper->setErrMsg(std::string("No Speed signal in transmission data given! Calculation stopped! (") + path + std::string(")"));
215
return false;
216
}
217
if (!transmIt->contains("GearRatio")) {
218
Helper->setErrMsg(std::string("No GearRatio signal in transmission data given! Calculation stopped! (") + path + std::string(")"));
219
return false;
220
}
221
if (!transmIt->contains("RotMassF")) {
222
Helper->setErrMsg(std::string("No RotMassF signal in transmission data given! Calculation stopped! (") + path + std::string(")"));
223
return false;
224
}
225
}
226
Vehicle->getTransmissionData()->setTransm(transmIt->get<std::map<std::string, std::vector<double> > >());
227
228
// Full load and drag
229
nlohmann::json::iterator fldDataIt = json.find("FLDData");
230
if (fldDataIt == json.end()) {
231
Helper->setErrMsg("No FLDData in " + emissionClass + ".PHEMLight.veh!");
232
return false;
233
}
234
const nlohmann::json& fld = *fldDataIt;
235
Vehicle->getFLDData()->setP_n_max_v0(json2double(fld, "P_n_max_v0"));
236
Vehicle->getFLDData()->setP_n_max_p0(json2double(fld, "P_n_max_p0"));
237
Vehicle->getFLDData()->setP_n_max_v1(json2double(fld, "P_n_max_v1"));
238
Vehicle->getFLDData()->setP_n_max_p1(json2double(fld, "P_n_max_p1"));
239
nlohmann::json::iterator dragIt = fldDataIt->find("DragCurve");
240
if (dragIt == fldDataIt->end()) {
241
Helper->setErrMsg(std::string("Drag curve missing in vehicle file! Calculation stopped! (") + path + std::string(")"));
242
return false;
243
} else {
244
if (!dragIt->contains("n_norm")) {
245
Helper->setErrMsg(std::string("No n_norm signal in drag curve data given! Calculation stopped! (") + path + std::string(")"));
246
return false;
247
}
248
if (!dragIt->contains("pe_drag_norm")) {
249
Helper->setErrMsg(std::string("No pe_drag_norm signal in drag curve data given! Calculation stopped! (") + path + std::string(")"));
250
return false;
251
}
252
}
253
Vehicle->getFLDData()->setDragCurve(dragIt->get<std::map<std::string, std::vector<double> > >());
254
255
return true;
256
}
257
258
bool CEPHandler::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) {
259
// declare file stream
260
std::string line;
261
std::string path = "";
262
header = std::vector<std::string>();
263
matrix = std::vector<std::vector<double> >();
264
idlingValues = std::vector<double>();
265
266
std::string pollutantExtension = "";
267
if (readFC) {
268
pollutantExtension += std::string("_FC");
269
}
270
271
std::ifstream fileReader;
272
for (std::vector<std::string>::const_iterator i = DataPath.begin(); i != DataPath.end(); i++) {
273
fileReader.open(((*i) + emissionClass + pollutantExtension + ".csv").c_str());
274
if (fileReader.good()) {
275
break;
276
}
277
}
278
if (!fileReader.good()) {
279
Helper->setErrMsg("File does not exist! (" + emissionClass + pollutantExtension + ".csv)");
280
return false;
281
}
282
283
// read header line for pollutant identifiers
284
if ((line = ReadLine(fileReader)) != "") {
285
const std::vector<std::string>& entries = split(line, ',');
286
// skip first entry "Pe"
287
for (int i = 1; i < (int)entries.size(); i++) {
288
header.push_back(entries[i]);
289
}
290
}
291
292
// skip units
293
ReadLine(fileReader);
294
295
// skip comment
296
ReadLine(fileReader);
297
298
//readIdlingValues
299
line = ReadLine(fileReader);
300
301
std::vector<std::string> stringIdlings = split(line, ',');
302
stringIdlings.erase(stringIdlings.begin());
303
304
idlingValues = todoubleList(stringIdlings);
305
306
while ((line = ReadLine(fileReader)) != "") {
307
matrix.push_back(todoubleList(split(line, ',')));
308
}
309
310
//Data correction (Det & TNOx)
311
if (!CorrectEmissionData(DataCor, header, matrix, idlingValues)) {
312
Helper->setErrMsg("Error in correction calculation");
313
return false;
314
}
315
316
//Return value
317
return true;
318
}
319
320
bool CEPHandler::CorrectEmissionData(Correction* DataCor, std::vector<std::string>& header, std::vector<std::vector<double> >& matrix, std::vector<double>& idlingValues) {
321
for (int i = 0; i < (int)header.size(); i++) {
322
double CorF = GetDetTempCor(DataCor, header[i]);
323
if (CorF != 1) {
324
for (int j = 0; j < (int)matrix.size(); j++) {
325
matrix[j][i + 1] *= CorF;
326
}
327
idlingValues[i] *= CorF;
328
}
329
}
330
331
//Return value
332
return true;
333
}
334
335
double CEPHandler::GetDetTempCor(Correction* DataCor, const std::string& Emi) {
336
//Initialisation
337
double CorF = 1;
338
std::string emi = Emi;
339
std::transform(emi.begin(), emi.end(), emi.begin(), [](char c) { return (char)::toupper(c); });
340
341
if (DataCor != 0) {
342
if (DataCor->getUseDet() && DataCor->DETFactors.count(emi) > 0) {
343
CorF += DataCor->DETFactors[emi] - 1;
344
}
345
if (DataCor->getUseTNOx()) {
346
if (emi.find("NOX") != std::string::npos) {
347
CorF += (DataCor->getTNOxFactor() - 1);
348
}
349
}
350
}
351
352
//Return value
353
return CorF;
354
}
355
356
const std::vector<std::string> CEPHandler::split(const std::string& s, char delim) {
357
std::vector<std::string> elems;
358
std::stringstream ss(s);
359
std::string item;
360
while (std::getline(ss, item, delim)) {
361
elems.push_back(item);
362
}
363
return elems;
364
}
365
366
double CEPHandler::todouble(const std::string& s) {
367
std::stringstream ss(s);
368
double item;
369
ss >> item;
370
return item;
371
}
372
373
std::vector<double> CEPHandler::todoubleList(const std::vector<std::string>& s) {
374
std::vector<double> result;
375
for (std::vector<std::string>::const_iterator i = s.begin(); i != s.end(); ++i) {
376
result.push_back(todouble(*i));
377
}
378
return result;
379
}
380
381
std::string CEPHandler::ReadLine(std::ifstream& s) {
382
std::string line;
383
std::getline(s, line);
384
size_t lastNWChar = line.find_last_not_of(" \n\r\t");
385
if (lastNWChar != std::string::npos) {
386
line.erase(lastNWChar + 1);
387
}
388
return line;
389
}
390
391
const std::string& VEHPHEMLightJSON::VEH::getType() const {
392
return privateType;
393
}
394
395
void VEHPHEMLightJSON::VEH::setType(const std::string& value) {
396
privateType = value;
397
}
398
399
const std::string& VEHPHEMLightJSON::VEH::getVersion() const {
400
return privateVersion;
401
}
402
403
void VEHPHEMLightJSON::VEH::setVersion(const std::string& value) {
404
privateVersion = value;
405
}
406
407
VEHPHEMLightJSON::Vehicle_Data* VEHPHEMLightJSON::VEH::getVehicleData() {
408
return &privateVehicleData;
409
}
410
411
VEHPHEMLightJSON::Aux_Data* VEHPHEMLightJSON::VEH::getAuxiliariesData() {
412
return &privateAuxiliariesData;
413
}
414
415
VEHPHEMLightJSON::Engine_Data* VEHPHEMLightJSON::VEH::getEngineData() {
416
return &privateEngineData;
417
}
418
419
VEHPHEMLightJSON::Rollres_Data* VEHPHEMLightJSON::VEH::getRollingResData() {
420
return &privateRollingResData;
421
}
422
423
VEHPHEMLightJSON::FullLoadDrag_Data* VEHPHEMLightJSON::VEH::getFLDData() {
424
return &privateFLDData;
425
}
426
427
VEHPHEMLightJSON::Transmission_Data* VEHPHEMLightJSON::VEH::getTransmissionData() {
428
return &privateTransmissionData;
429
}
430
431
const std::string& VEHPHEMLightJSON::Vehicle_Data::getMassType() const {
432
return privateMassType;
433
}
434
435
void VEHPHEMLightJSON::Vehicle_Data::setMassType(const std::string& value) {
436
privateMassType = value;
437
}
438
439
const std::string& VEHPHEMLightJSON::Vehicle_Data::getFuelType() const {
440
return privateFuelType;
441
}
442
443
void VEHPHEMLightJSON::Vehicle_Data::setFuelType(const std::string& value) {
444
privateFuelType = value;
445
}
446
447
const std::string& VEHPHEMLightJSON::Vehicle_Data::getCalcType() const {
448
return privateCalcType;
449
}
450
451
void VEHPHEMLightJSON::Vehicle_Data::setCalcType(const std::string& value) {
452
privateCalcType = value;
453
}
454
455
const double& VEHPHEMLightJSON::Vehicle_Data::getMass() const {
456
return privateMass;
457
}
458
459
void VEHPHEMLightJSON::Vehicle_Data::setMass(const double& value) {
460
privateMass = value;
461
}
462
463
const double& VEHPHEMLightJSON::Vehicle_Data::getLoading() const {
464
return privateLoading;
465
}
466
467
void VEHPHEMLightJSON::Vehicle_Data::setLoading(const double& value) {
468
privateLoading = value;
469
}
470
471
const double& VEHPHEMLightJSON::Vehicle_Data::getRedMassWheel() const {
472
return privateRedMassWheel;
473
}
474
475
void VEHPHEMLightJSON::Vehicle_Data::setRedMassWheel(const double& value) {
476
privateRedMassWheel = value;
477
}
478
479
const double& VEHPHEMLightJSON::Vehicle_Data::getWheelDiameter() const {
480
return privateWheelDiameter;
481
}
482
483
void VEHPHEMLightJSON::Vehicle_Data::setWheelDiameter(const double& value) {
484
privateWheelDiameter = value;
485
}
486
487
const double& VEHPHEMLightJSON::Vehicle_Data::getCw() const {
488
return privateCw;
489
}
490
491
void VEHPHEMLightJSON::Vehicle_Data::setCw(const double& value) {
492
privateCw = value;
493
}
494
495
const double& VEHPHEMLightJSON::Vehicle_Data::getA() const {
496
return privateA;
497
}
498
499
void VEHPHEMLightJSON::Vehicle_Data::setA(const double& value) {
500
privateA = value;
501
}
502
503
const double& VEHPHEMLightJSON::Vehicle_Data::getMileage() const {
504
return privateMileage;
505
}
506
507
void VEHPHEMLightJSON::Vehicle_Data::setMileage(const double& value) {
508
privateMileage = value;
509
}
510
511
const double& VEHPHEMLightJSON::Rollres_Data::getFr0() const {
512
return privateFr0;
513
}
514
515
void VEHPHEMLightJSON::Rollres_Data::setFr0(const double& value) {
516
privateFr0 = value;
517
}
518
519
const double& VEHPHEMLightJSON::Rollres_Data::getFr1() const {
520
return privateFr1;
521
}
522
523
void VEHPHEMLightJSON::Rollres_Data::setFr1(const double& value) {
524
privateFr1 = value;
525
}
526
527
const double& VEHPHEMLightJSON::Rollres_Data::getFr2() const {
528
return privateFr2;
529
}
530
531
void VEHPHEMLightJSON::Rollres_Data::setFr2(const double& value) {
532
privateFr2 = value;
533
}
534
535
const double& VEHPHEMLightJSON::Rollres_Data::getFr3() const {
536
return privateFr3;
537
}
538
539
void VEHPHEMLightJSON::Rollres_Data::setFr3(const double& value) {
540
privateFr3 = value;
541
}
542
543
const double& VEHPHEMLightJSON::Rollres_Data::getFr4() const {
544
return privateFr4;
545
}
546
547
void VEHPHEMLightJSON::Rollres_Data::setFr4(const double& value) {
548
privateFr4 = value;
549
}
550
551
VEHPHEMLightJSON::ICE_Data* VEHPHEMLightJSON::Engine_Data::getICEData() {
552
return &privateICEData;
553
}
554
555
VEHPHEMLightJSON::EM_Data* VEHPHEMLightJSON::Engine_Data::getEMData() {
556
return &privateEMData;
557
}
558
559
const double& VEHPHEMLightJSON::ICE_Data::getPrated() const {
560
return privatePrated;
561
}
562
563
void VEHPHEMLightJSON::ICE_Data::setPrated(const double& value) {
564
privatePrated = value;
565
}
566
567
const double& VEHPHEMLightJSON::ICE_Data::getnrated() const {
568
return privatenrated;
569
}
570
571
void VEHPHEMLightJSON::ICE_Data::setnrated(const double& value) {
572
privatenrated = value;
573
}
574
575
const double& VEHPHEMLightJSON::ICE_Data::getIdling() const {
576
return privateIdling;
577
}
578
579
void VEHPHEMLightJSON::ICE_Data::setIdling(const double& value) {
580
privateIdling = value;
581
}
582
583
const double& VEHPHEMLightJSON::EM_Data::getPrated() const {
584
return privatePrated;
585
}
586
587
void VEHPHEMLightJSON::EM_Data::setPrated(const double& value) {
588
privatePrated = value;
589
}
590
591
const double& VEHPHEMLightJSON::EM_Data::getnrated() const {
592
return privatenrated;
593
}
594
595
void VEHPHEMLightJSON::EM_Data::setnrated(const double& value) {
596
privatenrated = value;
597
}
598
599
const double& VEHPHEMLightJSON::Aux_Data::getPauxnorm() const {
600
return privatePauxnorm;
601
}
602
603
void VEHPHEMLightJSON::Aux_Data::setPauxnorm(const double& value) {
604
privatePauxnorm = value;
605
}
606
607
const double& VEHPHEMLightJSON::FullLoadDrag_Data::getP_n_max_v0() const {
608
return privateP_n_max_v0;
609
}
610
611
void VEHPHEMLightJSON::FullLoadDrag_Data::setP_n_max_v0(const double& value) {
612
privateP_n_max_v0 = value;
613
}
614
615
const double& VEHPHEMLightJSON::FullLoadDrag_Data::getP_n_max_p0() const {
616
return privateP_n_max_p0;
617
}
618
619
void VEHPHEMLightJSON::FullLoadDrag_Data::setP_n_max_p0(const double& value) {
620
privateP_n_max_p0 = value;
621
}
622
623
const double& VEHPHEMLightJSON::FullLoadDrag_Data::getP_n_max_v1() const {
624
return privateP_n_max_v1;
625
}
626
627
void VEHPHEMLightJSON::FullLoadDrag_Data::setP_n_max_v1(const double& value) {
628
privateP_n_max_v1 = value;
629
}
630
631
const double& VEHPHEMLightJSON::FullLoadDrag_Data::getP_n_max_p1() const {
632
return privateP_n_max_p1;
633
}
634
635
void VEHPHEMLightJSON::FullLoadDrag_Data::setP_n_max_p1(const double& value) {
636
privateP_n_max_p1 = value;
637
}
638
639
std::map<std::string, std::vector<double> >& VEHPHEMLightJSON::FullLoadDrag_Data::getDragCurve() {
640
return privateDragCurve;
641
}
642
643
void VEHPHEMLightJSON::FullLoadDrag_Data::setDragCurve(const std::map<std::string, std::vector<double> >& value) {
644
privateDragCurve = value;
645
}
646
647
VEHPHEMLightJSON::FullLoadDrag_Data::FullLoadDrag_Data() {
648
setDragCurve(std::map<std::string, std::vector<double> >());
649
}
650
651
const double& VEHPHEMLightJSON::Transmission_Data::getAxelRatio() const {
652
return privateAxelRatio;
653
}
654
655
void VEHPHEMLightJSON::Transmission_Data::setAxelRatio(const double& value) {
656
privateAxelRatio = value;
657
}
658
659
std::map<std::string, std::vector<double> >& VEHPHEMLightJSON::Transmission_Data::getTransm() {
660
return privateTransm;
661
}
662
663
void VEHPHEMLightJSON::Transmission_Data::setTransm(const std::map<std::string, std::vector<double> >& value) {
664
privateTransm = value;
665
}
666
667
VEHPHEMLightJSON::Transmission_Data::Transmission_Data() {
668
setTransm(std::map<std::string, std::vector<double> >());
669
}
670
}
671
672