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