LCOV - code coverage report
Current view: top level - src/foreign/PHEMlight/V5/cpp - CEPHandler.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 84.2 % 368 310
Test Date: 2024-12-21 15:45:41 Functions: 92.9 % 84 78

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

Generated by: LCOV version 2.0-1