QMCPACK
unit_conversion.cpp
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
8 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
9 //
10 // File created by: Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 
14 #include "unit_conversion.h"
15 #include "Message/Communicate.h"
16 
17 
18 namespace qmcplusplus
19 {
20 namespace Units
21 {
22 units count_unit(const std::string& su)
23 {
24  if (su == "mol")
25  return mol;
26  else if (su == "mole")
27  return mol;
28  else
29  {
30  APP_ABORT("units::count_unit\n invalid count unit: " + su + "\n valid options are: mol");
31  return mol;
32  }
33 }
34 
35 
36 units distance_unit(const std::string& su)
37 {
38  if (su == "m")
39  return m;
40  else if (su == "A")
41  return A;
42  else if (su == "B")
43  return B;
44  else if (su == "nm")
45  return nm;
46  else if (su == "pm")
47  return pm;
48  else if (su == "fm")
49  return fm;
50  else if (su == "meter")
51  return m;
52  else if (su == "angstrom")
53  return A;
54  else if (su == "bohr")
55  return B;
56  else if (su == "nanometer")
57  return nm;
58  else if (su == "picometer")
59  return pm;
60  else if (su == "femtometer")
61  return fm;
62  else
63  {
64  APP_ABORT("units::distance_unit\n invalid distance unit: " + su +
65  "\n valid options are: m/meter, A/angstrom, B/bohr, nm/nanometer, pm/picometer, fm/femtometer");
66  return m;
67  }
68 }
69 
70 
71 units time_unit(const std::string& su)
72 {
73  if (su == "s")
74  return s;
75  else if (su == "ms")
76  return ms;
77  else if (su == "ns")
78  return ns;
79  else if (su == "ps")
80  return ps;
81  else if (su == "fs")
82  return fs;
83  else if (su == "second")
84  return s;
85  else if (su == "millisecond")
86  return ms;
87  else if (su == "nanosecond")
88  return ns;
89  else if (su == "picosecond")
90  return ps;
91  else if (su == "femtosecond")
92  return fs;
93  else
94  {
95  APP_ABORT("units::time_unit\n invalid time unit: " + su +
96  "\n valid options are: s/second, ms/millisecond, ns/nanosecond, ps/picosecond, fs/femtosecond");
97  return s;
98  }
99 }
100 
101 
102 units mass_unit(const std::string& su)
103 {
104  if (su == "kg")
105  return kg;
106  else if (su == "me")
107  return me;
108  else if (su == "mp")
109  return mp;
110  else if (su == "amu")
111  return amu;
112  else if (su == "Da")
113  return Da;
114  else if (su == "kilogram")
115  return kg;
116  else if (su == "electron_mass")
117  return me;
118  else if (su == "proton_mass")
119  return mp;
120  else if (su == "atomic_mass_unit")
121  return amu;
122  else if (su == "dalton")
123  return Da;
124  else
125  {
126  APP_ABORT("units::mass_unit\n invalid mass unit: " + su +
127  "\n valid options are: kg/kilogram, me/electron_mass, mp/proton_mass, amu/atomic_mass_unit, Da/dalton");
128  return kg;
129  }
130 }
131 
132 
133 units energy_unit(const std::string& su)
134 {
135  if (su == "J")
136  return J;
137  else if (su == "eV")
138  return eV;
139  else if (su == "Ry")
140  return Ry;
141  else if (su == "Ha")
142  return Ha;
143  else if (su == "kJ/mol")
144  return kJ_mol;
145  else if (su == "K")
146  return K;
147  else if (su == "joule")
148  return J;
149  else if (su == "electron_volt")
150  return eV;
151  else if (su == "rydberg")
152  return Ry;
153  else if (su == "hartree")
154  return Ha;
155  else if (su == "kilojoule_per_mole")
156  return kJ_mol;
157  else if (su == "kelvin")
158  return K;
159  else
160  {
161  APP_ABORT("units::energy_unit\n invalid energy unit: " + su +
162  "\n valid options are: J/joule, eV/electron_volt, Ry/rydberg, Ha/hartree, kJ/mol/kilo_joule_per_mole, "
163  "K/kelvin");
164  return J;
165  }
166 }
167 
168 
169 units charge_unit(const std::string& su)
170 {
171  if (su == "C")
172  return C;
173  else if (su == "e")
174  return e;
175  else if (su == "coulomb")
176  return C;
177  else if (su == "proton_charge")
178  return e;
179  else
180  {
181  APP_ABORT("units::charge_unit\n invalid charge unit: " + su + "\n valid options are: C/coulomb, e/proton_charge");
182  return C;
183  }
184 }
185 
186 
187 units pressure_unit(const std::string& su)
188 {
189  if (su == "Pa")
190  return Pa;
191  else if (su == "bar")
192  return bar;
193  else if (su == "Mbar")
194  return Mbar;
195  else if (su == "GPa")
196  return GPa;
197  else if (su == "atm")
198  return atm;
199  else if (su == "pascal")
200  return Pa;
201  else if (su == "megabar")
202  return Mbar;
203  else if (su == "gigapascal")
204  return GPa;
205  else if (su == "atmosphere")
206  return atm;
207  else
208  {
209  APP_ABORT("units::pressure_unit\n invalid pressure unit: " + su +
210  "\n valid options are: Pa/pascal, bar/bar, Mbar/megabar, GPa/gigapascal, atm/atmosphere");
211  return Pa;
212  }
213 }
214 
215 
216 units force_unit(const std::string& su)
217 {
218  if (su == "N")
219  return N;
220  else if (su == "pN")
221  return pN;
222  else if (su == "newton")
223  return N;
224  else if (su == "piconewton")
225  return pN;
226  else
227  {
228  APP_ABORT("units::force_unit\n invalid force unit: " + su + "\n valid options are: N/newton, pN/piconewton");
229  return N;
230  }
231 }
232 
233 } // namespace Units
234 } // namespace qmcplusplus
units time_unit(const std::string &su)
convert from std::string to time unit
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
units mass_unit(const std::string &su)
convert from std::string to mass unit
units charge_unit(const std::string &su)
convert from std::string to charge unit
units count_unit(const std::string &su)
convert from std::string to count unit
units energy_unit(const std::string &su)
convert from std::string to energy unit
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
units distance_unit(const std::string &su)
convert from std::string to distance unit
units pressure_unit(const std::string &su)
convert from std::string to pressure unit
units force_unit(const std::string &su)
convert from std::string to force unit