diff options
author | Aaron LI <aaronly.me@outlook.com> | 2017-01-08 18:49:22 +0800 |
---|---|---|
committer | Aaron LI <aly@aaronly.me> | 2017-06-01 16:33:39 +0800 |
commit | cea0bf6d84e10619d2604de7a14066abf17ad32d (patch) | |
tree | 684834f21d87990ffd8115a3c1e550ed66fe9784 | |
parent | ae07791aa37550334236fa8112460fe1154ab773 (diff) | |
download | fg21sim-cea0bf6d84e10619d2604de7a14066abf17ad32d.tar.bz2 |
Add units.py: Commonly used units and conversions and constants
Astropy's unit conversions is too slow, thus store the used units
conversions to avoid astropy's slow conversions.
-rw-r--r-- | fg21sim/extragalactic/clusters/units.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/fg21sim/extragalactic/clusters/units.py b/fg21sim/extragalactic/clusters/units.py new file mode 100644 index 0000000..01891fa --- /dev/null +++ b/fg21sim/extragalactic/clusters/units.py @@ -0,0 +1,66 @@ +# Copyright (c) 2017 Weitian LI <liweitianux@live.com> +# MIT license + +""" +Commonly used units and their conversions relations, as well as constants. + +Astropy's units system is very powerful, but also very slow, +and may even be the speed bottleneck of the program. + +This module provides commonly used units conversions by holding +them directly in a class, thus avoid repeated/unnecessary calculations. +""" + +import astropy.units as au +import astropy.constants as ac + + +class Units: + """ + Commonly used units, especially in the CGS unit system. + """ + # Unit for electron momentum (p), thus its value is the Lorentz factor + mec = ac.m_e.cgs.value*ac.c.cgs.value # [g cm / s] + + +class UnitConversions: + """ + Commonly used units conversion relations. + + Hold the conversion relations directly to avoid repeated/unnecessary + calculations. + """ + Msun2g = au.solMass.to(au.g) + g2Msun = au.g.to(au.solMass) + Gyr2s = au.Gyr.to(au.s) + s2Gyr = au.s.to(au.Gyr) + kpc2cm = au.kpc.to(au.cm) + cm2kpc = au.cm.to(au.kpc) + Mpc2cm = au.Mpc.to(au.cm) + cm2Mpc = au.cm.to(au.Mpc) + Mpc2km = au.Mpc.to(au.km) + km2Mpc = au.km.to(au.Mpc) + kpc2km = au.kpc.to(au.km) + km2kpc = au.km.to(au.kpc) + km2cm = au.km.to(au.cm) + keV2erg = au.keV.to(au.erg) + + +class Constants: + """ + Commonly used constants, especially in the CGS unit system. + + Astropy's constants are stored in SI units by default. + When request a constant in CGS unit system, additional (and slow) + conversions required. + """ + # Speed of light + c = ac.c.cgs.value # [cm/s] + # Atomic mass unit (i.e., a.m.u.) + u = ac.u.cgs.value # [g] + # Gravitational constant + G = ac.G.cgs.value # [cm^3/g/s^2] + + # Mean molecular weight + # Ref.: Ettori et al, 2013, Space Science Review, 177, 119-154, Eq.(6) + mu = 0.6 |