Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2002-2024 German Aerospace Center (DLR) and others. 4 : // This program and the accompanying materials are made available under the 5 : // terms of the Eclipse Public License 2.0 which is available at 6 : // https://www.eclipse.org/legal/epl-2.0/ 7 : // This Source Code may also be made available under the following Secondary 8 : // Licenses when the conditions for such availability set forth in the Eclipse 9 : // Public License 2.0 are satisfied: GNU General Public License, version 2 10 : // or later which is available at 11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 13 : /****************************************************************************/ 14 : /// @file EnergyParams.h 15 : /// @author Jakob Erdmann 16 : /// @date Sept 2021 17 : /// 18 : // A class for parameters used by the emission models 19 : /****************************************************************************/ 20 : #pragma once 21 : #include <config.h> 22 : #include <map> 23 : #include <string> 24 : #include <vector> 25 : #include <utils/common/SUMOVehicleClass.h> 26 : #include <utils/emissions/CharacteristicMap.h> 27 : #include <utils/xml/SUMOXMLDefinitions.h> 28 : 29 : 30 : // =========================================================================== 31 : // class declarations 32 : // =========================================================================== 33 : class SUMOVTypeParameter; 34 : 35 : 36 : // =========================================================================== 37 : // class definitions 38 : // =========================================================================== 39 : /** 40 : * @class EnergyParams 41 : * @brief An upper class for objects with additional parameters 42 : */ 43 : class EnergyParams { 44 : public: 45 : /// @brief Constructor 46 : EnergyParams(const SUMOVTypeParameter* typeParams = nullptr); 47 : 48 : /// @brief Constructor 49 : EnergyParams(const SUMOEmissionClass c); 50 : 51 : /// @brief Constructor 52 874248 : EnergyParams(const EnergyParams* secondaryParams) : mySecondaryParams(secondaryParams) {} 53 : 54 : /// @brief Destructor 55 : ~EnergyParams(); 56 : 57 : /**@brief Set secondary params 58 : * @param[in] secondaryParams The secondary parameters 59 : */ 60 : void setSecondary(const EnergyParams* secondaryParams) { 61 3486 : mySecondaryParams = secondaryParams; 62 3486 : } 63 : 64 : /**@brief Sets a parameter 65 : * @param[in] key The parameter's name 66 : * @param[in] value The parameter's value 67 : */ 68 : void setDouble(SumoXMLAttr attr, double value); 69 : 70 : double getDouble(SumoXMLAttr attr) const; 71 : double getDoubleOptional(SumoXMLAttr attr, const double def) const; 72 : 73 : /**@brief Returns the value for a given key 74 : * @param[in] key The key to ask for 75 : * @return The value stored under the key 76 : */ 77 : const std::vector<double>& getDoubles(SumoXMLAttr attr) const; 78 : 79 : /** 80 : * @brief Return the CharacteristicMap that belongs to a given attribute. 81 : * 82 : * @param[in] attr Name of an attribute 83 : * @return A CharacteristicMap 84 : */ 85 : const CharacteristicMap& getCharacteristicMap(SumoXMLAttr attr) const; 86 : 87 : void checkParam(const SumoXMLAttr paramKey, const std::string& id, const double lower = 0., const double upper = std::numeric_limits<double>::infinity()); 88 : 89 : /** @brief Returns the state of the engine when the vehicle is not moving 90 : * @return whether the engine is running 91 : */ 92 : bool isEngineOff() const; 93 : 94 : /** @brief Returns whether the vehicle is currently consuming any energy derived from the parking state 95 : * @return whether the vehicle has any consumption 96 : */ 97 : bool isOff() const; 98 : 99 7432 : static const EnergyParams* getDefault() { 100 7432 : if (myDefault == nullptr) { 101 28 : myDefault = new EnergyParams(); 102 : } 103 7432 : return myDefault; 104 : } 105 : 106 : private: 107 : /// @brief The key->value maps 108 : std::map<SumoXMLAttr, double> myMap; 109 : std::map<SumoXMLAttr, std::vector<double> > myVecMap; 110 : std::map<SumoXMLAttr, CharacteristicMap> myCharacteristicMapMap; 111 : const EnergyParams* mySecondaryParams = nullptr; 112 : 113 : static const EnergyParams* myDefault; 114 : };