Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 : Copyright (c) 2011-2023 The plumed team 3 : (see the PEOPLE file at the root of the distribution for a list of names) 4 : 5 : See http://www.plumed.org for more information. 6 : 7 : This file is part of plumed, version 2. 8 : 9 : plumed is free software: you can redistribute it and/or modify 10 : it under the terms of the GNU Lesser General Public License as published by 11 : the Free Software Foundation, either version 3 of the License, or 12 : (at your option) any later version. 13 : 14 : plumed is distributed in the hope that it will be useful, 15 : but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 : GNU Lesser General Public License for more details. 18 : 19 : You should have received a copy of the GNU Lesser General Public License 20 : along with plumed. If not, see <http://www.gnu.org/licenses/>. 21 : +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ 22 : #ifndef __PLUMED_tools_Units_h 23 : #define __PLUMED_tools_Units_h 24 : 25 : #include <string> 26 : 27 : namespace PLMD { 28 : 29 : /** 30 : \ingroup TOOLBOX 31 : Small utility class that contains information about units. 32 : 33 : This class can be used to contain in a single place all the 34 : information about units. Units are expressed in terms of 35 : standard PLUMED units, i.e. kj/mol, nm, and ps. 36 : Units can be set as double or as string. In the latter case, 37 : one can also use strings such as kcal/mol. 38 : 39 : 40 : */ 41 : class Units { 42 : /// Units for energy, expressed in kj/mol (e.g. 4.184 means kcal/mol) 43 : double energy; 44 : std::string energyString; 45 : /// Units for length, expressed in nm (e.g. 0.1 means A) 46 : double length; 47 : std::string lengthString; 48 : /// Units for time, expressed in ps (e.g. 0.001 means fs) 49 : double time; 50 : std::string timeString; 51 : /// Units for charges, expressed in proton charge (e.g. 1./18.2223 are sqrt(kcal/mol*A), as used in Amber) 52 : double charge; 53 : std::string chargeString; 54 : /// Units for masses, expressed in amu 55 : double mass; 56 : std::string massString; 57 : public: 58 : /// Constructor, setting default values (1.0) 59 : Units(); 60 : /// Set energy units from string. 61 : /// Also understands the following strings: 62 : /// kj/mol, kcal/mol, j/mol, eV, and Ha. 63 : void setEnergy(const std::string &); 64 : /// Set time units from string. 65 : /// Also understands the following strings: 66 : /// ps, ns, fs, and atomic. 67 : void setTime(const std::string &); 68 : /// Set length units from string. 69 : /// Also understands the following strings: 70 : /// nm, A, um, and Bohr. 71 : void setLength(const std::string &); 72 : /// Set charge units from string. 73 : void setCharge(const std::string &); 74 : /// Set mass units from string. 75 : void setMass(const std::string &); 76 : /// Set energy units from double. 77 : /// Should be specified in units of kj/mol (e.g. 4.184 means kcal/mol) 78 : void setEnergy(double); 79 : /// Set time units from double. 80 : /// Should be specified in units of ps (e.g. 0.001 means fs) 81 : void setTime(double); 82 : /// Set length units from double. 83 : /// Should be specified in units of nm (e.g. 0.1 means A) 84 : void setLength(double); 85 : /// Set charge units from double. 86 : /// Should be specified in units of proton charge. 87 : void setCharge(double); 88 : /// Set mass units from double. 89 : /// Should be specified in units of amu. 90 : void setMass(double); 91 : /// Get energy units as double. 92 : const double & getEnergy()const; 93 : /// Get length units as double. 94 : const double & getLength()const; 95 : /// Get time units as double. 96 : const double & getTime()const; 97 : /// Get charge units as double. 98 : const double & getCharge()const; 99 : /// Get mass units as double. 100 : const double & getMass()const; 101 : /// Get energy units as string. 102 : const std::string & getEnergyString()const; 103 : /// Get length units as string. 104 : const std::string & getLengthString()const; 105 : /// Get time units as string. 106 : const std::string & getTimeString()const; 107 : /// Get charge units as string. 108 : const std::string & getChargeString()const; 109 : /// Get mass units as string. 110 : const std::string & getMassString()const; 111 : }; 112 : 113 : inline 114 : const double & Units::getEnergy()const { 115 : return energy; 116 : } 117 : 118 : inline 119 : const double & Units::getLength()const { 120 : return length; 121 : } 122 : 123 : inline 124 : const double & Units::getTime()const { 125 : return time; 126 : } 127 : 128 : inline 129 : const double & Units::getCharge()const { 130 : return charge; 131 : } 132 : 133 : inline 134 : const double & Units::getMass()const { 135 : return mass; 136 : } 137 : 138 : inline 139 : const std::string & Units::getEnergyString()const { 140 : return energyString; 141 : } 142 : 143 : inline 144 : const std::string & Units::getLengthString()const { 145 15607050 : return lengthString; 146 : } 147 : 148 : inline 149 : const std::string & Units::getTimeString()const { 150 : return timeString; 151 : } 152 : 153 : inline 154 : const std::string & Units::getChargeString()const { 155 : return chargeString; 156 : } 157 : 158 : inline 159 : const std::string & Units::getMassString()const { 160 : return massString; 161 : } 162 : 163 : 164 : 165 : } 166 : 167 : #endif