/* Copyright 2013 Statoil ASA. This file is part of the Open Porous Media project (OPM). OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OPM. If not, see . */ #ifndef UNITSYSTEM_H #define UNITSYSTEM_H #include #include #include namespace Opm { class Dimension; class UnitSystem { public: enum UnitType { UNIT_TYPE_METRIC = 0, UNIT_TYPE_FIELD = 1, UNIT_TYPE_LAB = 2 }; UnitSystem(UnitType unit); const std::string& getName() const; UnitType getType() const; void addDimension(const std::string& dimension, double SIfactor, double SIoffset = 0.0); void addDimension(std::shared_ptr dimension); std::shared_ptr getNewDimension(const std::string& dimension); std::shared_ptr getDimension(const std::string& dimension) const; bool hasDimension(const std::string& dimension) const; bool equal(const UnitSystem& other) const; std::shared_ptr parse(const std::string& dimension) const; static UnitSystem * newMETRIC(); static UnitSystem * newFIELD(); private: std::shared_ptr parseFactor(const std::string& dimension) const; std::string m_name; UnitType m_unittype; std::map > m_dimensions; }; } #endif