From cea0bf6d84e10619d2604de7a14066abf17ad32d Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Sun, 8 Jan 2017 18:49:22 +0800 Subject: 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. --- fg21sim/extragalactic/clusters/units.py | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 fg21sim/extragalactic/clusters/units.py (limited to 'fg21sim/extragalactic') 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 +# 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 -- cgit v1.2.2