Source code for athenakit.units.units

###############################################################
###            some basic parameters in cgs unit            ###
###############################################################

pi = CONST_PI = 3.141592653589793

###############################################################

cm_cgs = 1.0;                           # cm
g_cgs = 1.0;                            # g
s_cgs = 1.0;                            # s
cm_s_cgs = 1.0;                         # cm/s
g_cm3_cgs = 1.0;                        # g/cm^3
erg_cgs = 1.0;                          # erg
dyne_cm2_cgs = 1.0;                     # dyne/cm^2
kelvin_cgs = 1.0;                       # k

###############################################################

km_cgs = 1e5                                                  # cm
kms_cgs = km_s_cgs = 1.0e5                                    # cm/s
AU_cgs = 1.496e13                                             # cm
ly_cgs = 9.460471451897088e17                                 # cm
pc_cgs = parsec_cgs = 3.0856775809623245e+18                  # cm
kpc_cgs = 3.0856775809623245e+21                              # cm
Mpc_cgs = 3.0856775809623245e+24                              # cm
yr_cgs = CONST_YR_cgs = 3.15576e+7                            # s
kyr_cgs = CONST_KYR_cgs = 3.15576e+10                         # s
myr_cgs = Myr_cgs = CONST_MYR_cgs = 3.15576e+13               # s
msun_cgs = Msun_cgs = CONST_SOLAR_MASS_cgs = 1.98841586e+33   # g
rsun_cgs = Rsun_cgs = CONST_SOLAR_RADIUS_cgs = 6.957e10       # cm
Lsun_cgs = CONST_SOLAR_LUMINOSITY_cgs = 3.846e33              # erg/s
Tsun_cgs = CONST_SOLAR_TEMPERATURE_cgs = 5.780e3              # k
mearth_cgs = Mearth_cgs = CONST_EARTH_MASS_cgs = 5.965e27     # g
rearth_cgs = Rearth_cgs = CONST_EARTH_RADIUS_cgs = 6.371e8    # cm

###############################################################

c_cgs = speed_of_light_cgs = C_cgs = CONST_C_cgs = 2.99792458e10               # cm/s
G_cgs = grav_constant_cgs = CONST_G_cgs = 6.67408e-8                           # cm^3/(g*s^2)
e_cgs = CONST_E_cgs = CONST_ELECTRON_CHARGE_cgs = 4.8032e-10                   # cm^1.5*g^0.5/s
h_cgs = H_PLANCK_cgs = CONST_H_PLANCK_cgs = 6.6260755e-27                      # g*cm^2/s
hbar_cgs = HBAR_PLANCK_cgs = CONST_HBAR_PLANCK_cgs = 1.05457266e-27            # g*cm^2/s

###############################################################

mu_cgs = atomic_mass_unit_cgs = CONST_ATOM_MASS_UNIT_cgs = 1.660538921e-24     # g
mp_cgs = CONST_PROTON_MASS_cgs = 1.6726e-24                                    # g
mn_cgs = CONST_NEUTRON_MASS_cgs = 1.6749286e-24                                # g
me_cgs = CONST_ELECTRON_MASS_cgs = 9.1094e-28                                  # g
mH_cgs = CONST_HYDROGEN_MASS_cgs = 1.6733e-24                                  # g
kB_cgs = k_boltzmann_cgs = CONST_K_BOLTZMANN_cgs = 1.3806488e-16               # erg/k
eV_cgs = CONST_ELECTRON_VOLT_cgs = 1.6021772e-12                               # erg
keV_cgs = 1.6021772e-9                                                         # erg
sigmaSB_cgs = CONST_SIGMA_STEFAN_BOLTZMANN_cgs = 5.6705e-5                     # erg/s/cm^2/k^4
sigmaT_cgs = CONST_THOMSON_CROSS_SECTION_cgs = 6.6525e-25                      # cm^2
NA_cgs = CONST_AVAGADRO_NUMBER_cgs = 6.022140857747e23
alphaf_cgs = CONST_ALPHA_FINE_STRUCTURE_cgs = 7.2974e-3

###############################################################

arcsecond = 4.84813681109536e-06
Jy_cgs = Jansky_cgs = 1e-23
LEdd_cgs = 1.263e38                      # erg/s
MEdd_cgs = 1.405277e+18                  # g/s
kappaes_cgs = mp_cgs/sigmaT_cgs
mui = 1.23
mue = 1.14

##############################################################

# Units

[docs] class Units: # default unit is cgs
[docs] def __init__(self,lunit=1.0,munit=1.0,tunit=1.0,mu=1.0): self.length_cgs=lunit self.mass_cgs=munit self.time_cgs=tunit self.mu=mu # set all the constants as attributes for name, value in globals().items(): # check if the variable is a constant if ((not name.startswith("_")) and isinstance(value, (int, float))): setattr(self, name, value)
# setattr(self, f"_{name}", value) # Set it as a private attribute # Define a getter function for each attribute # getter = lambda self, name=name: getattr(self, f"_{name}") # Set it as a property on the class # setattr(self, name, property(getter)) @property def velocity_cgs(self): return self.length_cgs/self.time_cgs @property def density_cgs(self): return self.mass_cgs/self.length_cgs**3 @property def energy_cgs(self): return self.mass_cgs*self.velocity_cgs**2 @property def pressure_cgs(self): return self.energy_cgs/self.length_cgs**3 @property def temperature_cgs(self): return self.velocity_cgs**2*self.mu*self.atomic_mass_unit_cgs/self.k_boltzmann_cgs @property def grav_constant(self): return self.grav_constant_cgs*self.density_cgs*self.time_cgs**2 @property def speed_of_light(self): return self.speed_of_light_cgs/self.velocity_cgs @property def number_density_cgs(self): return self.density_cgs/self.mu/self.atomic_mass_unit_cgs @property def cooling_cgs(self): return self.pressure_cgs/self.time_cgs/self.number_density_cgs**2 @property def heating_cgs(self): return self.pressure_cgs/self.time_cgs/self.number_density_cgs @property def conductivity_cgs(self): return self.pressure_cgs*self.velocity_cgs*self.length_cgs/self.temperature_cgs @property def entropy_kevcm2(self,gamma=5./3.): return self.pressure_cgs/self.keV_cgs/self.number_density_cgs**gamma @property def magnetic_field_cgs(self): return (4.0*self.pi*self.density_cgs)**0.5*self.velocity_cgs
# unit=Units(lunit=kpc_cgs,munit=0.618*atomic_mass_unit_cgs*kpc_cgs**3,mu=0.618) unit=Units()