Loading...
Searching...
No Matches
units.hpp
Go to the documentation of this file.
1/*
2** This file is part of eOn.
3**
4** SPDX-License-Identifier: BSD-3-Clause
5**
6** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
82
84#define FORCEFIELDS_UNIT_SYSTEM_SI_MKSA 0
86#define FORCEFIELDS_UNIT_SYSTEM_METRE_KILOGRAMME_PER_MOL_SECOND_AMPERE_PER_MOL 1
88#define FORCEFIELDS_UNIT_SYSTEM_ANGSTROM_KILOGRAMME_PER_MOL_FEMTOSECOND_AMPERE_PER_MOL \
89 2
90
91#define FORCEFIELDS_UNIT_SYSTEM_ANGSTROM_GRAMME_PER_MOL_FEMTOSECOND_ECHARGE 3
93#define FORCEFIELDS_UNIT_SYSTEM_ELECTRONVOLT_ANGSTROM_FEMTOSECOND_ECHARGE 4
95#define FORCEFIELDS_UNIT_SYSTEM_KILOCALORY_PER_MOL_ANGSTROM_FEMTOSECOND_ECHARGE \
96 5
97
99#undef FORCEFIELDS_UNIT_SYSTEM_HPP
100#define FORCEFIELDS_UNIT_SYSTEM_HPP \
101 FORCEFIELDS_UNIT_SYSTEM_ELECTRONVOLT_ANGSTROM_FEMTOSECOND_ECHARGE
102namespace forcefields {
104namespace unit_system {
105// Some physical constants expressed in SI unit. Source for constants:
106// http://physics.nist.gov/cuu/Constants/index.html
107const double R_gas = 8.314472; // J/mol/K
108const double k_boltzmann = 1.3806505e-23; // J/K
109const double Na_avogadro = 6.0221415e23; // mol^-1
110const double /* 1 */ calory = 4.1868; // J
111const double e_charge = 1.60217653e-19; // C
112const double /* 1 */ debye =
113 3.33564e-30; // C m
115const double one_over_4_pi_epsilon0 =
116 8.98755178495272255e+09; // SI
119const double sqrt_one_over_4_pi_epsilon0 = 9.48026992492973368e+04; // SI
120
121// System independent units
122const double pi = 3.14159265358979312;
123const double MOL = Na_avogadro;
124const double DEGREE = pi / 180; // rad
125
126#if FORCEFIELDS_UNIT_SYSTEM_HPP == FORCEFIELDS_UNIT_SYSTEM_SI_MKSA
127const char LENGTH[] = "m";
128const char MASS[] = "kg";
129const char TIME[] = "s";
130const char CURRENT[] = "A"; // Ampere
131const char VELOCITY[] = "m/s";
132const char ACCELERATION[] = "m s^-2";
133const char FORCE[] = "N";
134const char ENERGY[] = "J";
135const char PRESSURE[] = "Pa";
136const char CHARGE[] = "C";
137
138// Main SI units Converters
139const double /* 1 */ METRE = 1.0; // m
140const double /* 1 */ KG = 1.0; // kg
141const double /* 1 */ SECOND = 1.0; // s
142const double /* 1 */ AMPERE = 1.0; // A
143#elif FORCEFIELDS_UNIT_SYSTEM_HPP == \
144 FORCEFIELDS_UNIT_SYSTEM_METRE_KILOGRAMME_PER_MOL_SECOND_AMPERE_PER_MOL
145const char LENGTH[] = "m";
146const char MASS[] = "kg/mol";
147const char TIME[] = "s";
148const char CURRENT[] = "A/mol";
149const char VELOCITY[] = "m/s";
150const char ACCELERATION[] = "m s^-2";
151const char FORCE[] = "N/mol";
152const char ENERGY[] = "J/mol";
153const char PRESSURE[] = "Pa/mol";
154const char CHARGE[] = "C/mol";
155
156// Main SI units Converters
157const double /* 1 */ METRE = 1.0; // m
158const double /* 1 */ KG = MOL; // kg/mol
159const double /* 1 */ SECOND = 1.0; // s
160const double /* 1 */ AMPERE = MOL; // A/mol
161#elif FORCEFIELDS_UNIT_SYSTEM_HPP == \
162 FORCEFIELDS_UNIT_SYSTEM_ANGSTROM_KILOGRAMME_PER_MOL_FEMTOSECOND_AMPERE_PER_MOL
163const char LENGTH[] = "Angstrom";
164const char MASS[] = "kg/mol";
165const char TIME[] = "fs";
166const char CURRENT[] = "A/mol";
167const char VELOCITY[] = "Angstrom/fs";
168const char ACCELERATION[] = "Angstrom fs^-2";
169const char FORCE[] = "1e30 N/mol";
170const char ENERGY[] = "1e20 J/mol";
171const char PRESSURE[] = "1e50 Pa/mol";
172const char CHARGE[] = "C/mol";
173
174// Main SI units Converters
175const double /* 1 */ METRE = 1e10; // m
176const double /* 1 */ KG = MOL; // kg/mol
177const double /* 1 */ SECOND = 1e15; // s
178const double /* 1 */ AMPERE = MOL; // A/mol
179#elif FORCEFIELDS_UNIT_SYSTEM_HPP == \
180 FORCEFIELDS_UNIT_SYSTEM_ANGSTROM_GRAMME_PER_MOL_FEMTOSECOND_ECHARGE
181const char LENGTH[] = "Angstrom";
182const char MASS[] = "g/mol";
183const char TIME[] = "fs";
184const char CURRENT[] = "e/fs";
185const char VELOCITY[] = "Angstrom/fs";
186const char ACCELERATION[] = "Angstrom fs^-2";
187const char FORCE[] = "1e17 J / Angstrom";
188const char ENERGY[] = "1e17 J";
189const char PRESSURE[] = "1e17 J Angstrom^-3";
190const char CHARGE[] = "e";
191
192// Main SI units Converters
193const double /* 1 */ METRE = 1e10; // Angstrom
194const double /* 1 */ KG = 1000 * MOL; // g/mol
195const double /* 1 */ SECOND =
196 1e15; // fs
197 // 1 e/fs= e_charge C / 1e-15 s=e_charge*1e15 A
198const double /* 1 */ AMPERE = 1e-15 / e_charge; // e/fs
199#elif FORCEFIELDS_UNIT_SYSTEM_HPP == \
200 FORCEFIELDS_UNIT_SYSTEM_ELECTRONVOLT_ANGSTROM_FEMTOSECOND_ECHARGE
201const char LENGTH[] = "A"; // Angstrom
202const char TIME[] = "fs"; // second
203const char MASS[] = "eV A^-2 fs^2";
204const char CURRENT[] = "e/fs";
205const char VELOCITY[] = "A fs^-1";
206const char ACCELERATION[] = "A fs^-2";
207const char FORCE[] = "eV/A";
208const char ENERGY[] = "eV"; // electron volt
209const char PRESSURE[] = "eV A^-3";
210const char CHARGE[] = "(eV A)^(-1/2)";
211
212// Main SI units Converters
213const double /* 1 */ METRE = 1e10; // Angstrom
214 // 1 J = 1 kg m^2 s^-2
215 // e_charge C V = e_charge J = 1 eV
216const double /* 1 */ KG = 1e10 / e_charge; // eV Angstrom^-2 fs^2
217const double /* 1 */ SECOND = 1e15; // fs
218const double /* 1 */ AMPERE = 1e-15 / e_charge; // e/fs
219#elif FORCEFIELDS_UNIT_SYSTEM_HPP == \
220 FORCEFIELDS_UNIT_SYSTEM_KILOCALORY_PER_MOL_ANGSTROM_FEMTOSECOND_ECHARGE
221const char LENGTH[] = "A"; // Angstrom
222const char TIME[] = "fs"; // second
223const char MASS[] = "kcal/mol A^-2 fs^2";
224const char CURRENT[] = "e/fs";
225const char VELOCITY[] = "A fs^-1";
226const char ACCELERATION[] = "A fs^-2";
227const char FORCE[] = "kcal mol A^-1";
228const char ENERGY[] = "kcal/mol"; // electron volt
229const char PRESSURE[] = "kcal/mol A^-3";
230const char CHARGE[] = "(kcal/mol A)^(-1/2)";
231
232// Main SI units Converters
233const double /* 1 */ METRE = 1e10; // Angstrom
234 // 1 J = 1 kg m^2 s^-2
235 // e_charge C V = e_charge J = 1 eV
236const double /* 1 */ KG =
237 Na_avogadro * 1e7 / calory; // kcal/mol Angstrom^-2 fs^2
238const double /* 1 */ SECOND = 1e15; // fs
239const double /* 1 */ AMPERE = 1e-15 / e_charge; // e/fs
240#endif
241const char *const TEMPERATURE = ENERGY;
242// SI Units
243const double METRE_PER_SECOND = METRE / SECOND;
245const double /* 1 */ NEWTON = KG * METRE_PER_SECOND2;
246const double /* 1 */ JOULE = NEWTON * METRE;
247const double /* 1 */ COULOMB = AMPERE * SECOND;
248const double WATT = JOULE / SECOND;
249const double VOLT = WATT / AMPERE;
250const double /* 1 */ KELVIN = k_boltzmann * JOULE;
251// SI Prefix
252const double /* 1 */ KILO = 1e3;
253const double NANO = 1e-9;
254const double FEMTO = 1e-15;
255// Derived SI units
256const double NM = NANO * METRE;
257const double GRAM = KG / KILO;
258const double /* 1 */ GRAM_PER_MOL = GRAM / MOL;
259const double /* 1 */ G_PER_MOL = GRAM_PER_MOL;
260const double /* 1 */ KJ_PER_MOL = KILO * JOULE / MOL;
261const double /* 1 */ KJ = KILO * JOULE;
262const double FS = FEMTO * SECOND;
263// Common non SI Units
264const double /* 1 */ ANGSTROM = 1e-10 * METRE;
265const double /* 1 */ ANGSTROM2 = ANGSTROM * ANGSTROM;
266const double /* 1 */ ANGSTROM3 = ANGSTROM * ANGSTROM * ANGSTROM;
267const double ECHARGE = e_charge * COULOMB;
268const double EV = ECHARGE * VOLT;
269// Deprecated units
270const double /* 1 */ CALORY = calory * JOULE;
271const double /* 1 */ KCAL_PER_MOL = KILO * CALORY / MOL;
272// Atomic Units
273const double BOHR = 5.291772108e-11 * METRE;
274const double HARTREE = 4.35974417e-18 * JOULE;
275// CGS units
276const double ERGS = 1e-7 * JOULE;
277// Constants
278const double ONE_OVER_4_PI_EPSILON0 =
280} // namespace unit_system
281} // namespace forcefields
const double HARTREE
const double BOHR
const double sqrt_one_over_4_pi_epsilon0
This is the quantity 1/sqrt(4*pi*epsilon0) in SI units.
const double one_over_4_pi_epsilon0
This is the quantity 1/(4*pi*epsilon0) in SI units.