Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 : Copyright (c) 2011-2019 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 10080 : 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, and eV.
63 : void setEnergy(const std::string &);
64 : /// Set time units from string.
65 : /// Also understands the following strings:
66 : /// ps, ns, fs.
67 : void setTime(const std::string &);
68 : /// Set lengh units from string.
69 : /// Also understands the following strings:
70 : /// nm, A, um.
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 lenght 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 : 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
|