/usr/include/gromacs/math/units.h is in libgromacs-dev 5.1.2-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /*
* This file is part of the GROMACS molecular simulation package.
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
* Copyright (c) 2012,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
*
* GROMACS is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* GROMACS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with GROMACS; if not, see
* http://www.gnu.org/licenses, or write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* If you want to redistribute modifications to GROMACS, please
* consider that scientific software is very special. Version
* control is crucial - bugs must be traceable. We will be happy to
* consider code for inclusion in the official distribution, but
* derived work must not be called official GROMACS. Details are found
* in the README & COPYING files - if they are missing, get the
* official version at http://www.gromacs.org.
*
* To help us fund GROMACS development, we humbly ask that you cite
* the research papers on the package. Check out http://www.gromacs.org.
*/
#ifndef GMX_MATH_UNITS_H
#define GMX_MATH_UNITS_H
/*
* Physical constants to be used in Gromacs.
* No constants (apart from 0, 1 or 2) should
* be anywhere else in the code.
*/
#include "gromacs/math/utilities.h"
#ifdef __cplusplus
extern "C" {
#endif
#define ANGSTROM (1e-10) /* Old... */
#define KILO (1e3) /* Thousand */
#define NANO (1e-9) /* A Number */
#define PICO (1e-12) /* A Number */
#define A2NM (ANGSTROM/NANO) /* NANO */
#define NM2A (NANO/ANGSTROM) /* 10.0 */
#define RAD2DEG (180.0/M_PI) /* Conversion */
#define DEG2RAD (M_PI/180.0) /* id */
#define CAL2JOULE (4.184) /* id */
#define E_CHARGE (1.602176565e-19) /* Coulomb, NIST 2010 CODATA */
#define AMU (1.660538921e-27) /* kg, NIST 2010 CODATA */
#define BOLTZMANN (1.3806488e-23) /* (J/K, NIST 2010 CODATA */
#define AVOGADRO (6.02214129e23) /* no unit, NIST 2010 CODATA */
#define RGAS (BOLTZMANN*AVOGADRO) /* (J/(mol K)) */
#define BOLTZ (RGAS/KILO) /* (kJ/(mol K)) */
#define FARADAY (E_CHARGE*AVOGADRO) /* (C/mol) */
#define ELECTRONVOLT (E_CHARGE*AVOGADRO/KILO) /* (kJ/mol) */
#define PLANCK1 (6.62606957e-34) /* J s, NIST 2010 CODATA */
#define PLANCK (PLANCK1*AVOGADRO/(PICO*KILO)) /* (kJ/mol) ps */
#define EPSILON0_SI (8.854187817e-12) /* F/m, NIST 2010 CODATA */
/* Epsilon in our MD units: (e^2 / Na (kJ nm)) == (e^2 mol/(kJ nm)) */
#define EPSILON0 (EPSILON0_SI*NANO*KILO)/(E_CHARGE*E_CHARGE*AVOGADRO)
#define SPEED_OF_LIGHT (2.99792458E05) /* nm/ps, NIST 2010 CODATA */
#define ATOMICMASS_keV (931494.061) /* Atomic mass in keV, NIST 2010 CODATA */
#define ELECTRONMASS_keV (510.998928) /* Electron mas in keV, NIST 2010 CODATA */
#define RYDBERG (1.0973731568539e-02) /* nm^-1, NIST 2010 CODATA */
#define ONE_4PI_EPS0 (1.0/(4.0*M_PI*EPSILON0))
#define FACEL 10.0*ONE_4PI_EPS0
/* Pressure in MD units is:
* 1 bar = 1e5 Pa = 1e5 kg m^-1 s^-2 = 1e-28 kg nm^-1 ps^-2 = 1e-28 / AMU amu nm^1 ps ^2
*/
#define BAR_MDUNITS (1e5*NANO*PICO*PICO/AMU)
#define PRESFAC (1.0/BAR_MDUNITS)
/* DEBYE2ENM should be (1e-21*PICO)/(SPEED_OF_LIGHT*E_CHARGE*NANO*NANO),
* but we need to factor out some of the exponents to avoid single-precision overflows.
*/
#define DEBYE2ENM (1e-15/(SPEED_OF_LIGHT*E_CHARGE))
#define ENM2DEBYE (1.0/DEBYE2ENM)
/* to convert from a acceleration in (e V)/(amu nm) */
/* FIELDFAC is also Faraday's constant and E_CHARGE/(1e6 AMU) */
#define FIELDFAC (FARADAY/KILO)
/* to convert AU to MD units: */
#define HARTREE2KJ ((2.0*RYDBERG*PLANCK*SPEED_OF_LIGHT)/AVOGADRO)
#define BOHR2NM (0.052917721092) /* nm^-1, NIST 2010 CODATA */
#define HARTREE_BOHR2MD (HARTREE2KJ*AVOGADRO/BOHR2NM)
/* The four basic units */
#define unit_length "nm"
#define unit_time "ps"
#define unit_mass "u"
#define unit_energy "kJ/mol"
/* Temperature unit, T in this unit times BOLTZ give energy in unit_energy */
#define unit_temp_K "K"
/* Charge unit, electron charge, involves ONE_4PI_EPS0 */
#define unit_charge_e "e"
/* Pressure unit, pressure in basic units times PRESFAC gives this unit */
#define unit_pres_bar "bar"
/* Dipole unit, debye, conversion from the unit_charge_e involves ENM2DEBYE */
#define unit_dipole_D "D"
/* Derived units from basic units only */
#define unit_vel unit_length "/" unit_time
#define unit_volume unit_length "^3"
#define unit_invtime "1/" unit_time
/* Other derived units */
#define unit_surft_bar unit_pres_bar " " unit_length
/* SI units, conversion from basic units involves NANO, PICO and AMU */
#define unit_length_SI "m"
#define unit_time_SI "s"
#define unit_mass_SI "kg"
#define unit_density_SI unit_mass_SI "/" unit_length_SI "^3"
#define unit_invvisc_SI unit_length_SI " " unit_time_SI "/" unit_mass_SI
/* The routines below can be used for converting units from or to GROMACS
internal units. */
enum {
eg2cAngstrom, eg2cNm, eg2cBohr, eg2cKcal_Mole,
eg2cHartree, eg2cHartree_e, eg2cAngstrom3, eg2cCoulomb,
eg2cDebye, eg2cElectron, eg2cBuckingham, eg2cNR
};
/* Convert value x to GROMACS units. Energy -> Energy, Length -> Length etc.
The type of x is deduced from unit,
which should be taken from the enum above. */
extern double convert2gmx(double x, int unit);
/* Convert value x from GROMACS units to the desired one.
The type of return value is deduced from unit, see above */
extern double gmx2convert(double x, int unit);
/* Convert the string to one of the units supported. Returns -1 if not found. */
extern int string2unit(char *string);
/* Convert the unit to a string. Return NULL when unit is out of range. */
extern const char *unit2string(int unit);
#ifdef __cplusplus
}
#endif
#endif
|