import numpy as np
[docs]class ConversionFactors(object):
def __init__(self,obj):
c = obj.constants
self.MCONVERT = c.UnitMass_in_g / c.Msun_in_g ## to MSUN
self.LCONVERT = c.UnitLength_in_cm / c.kpc_to_cm ## to KPC
self.VCONVERT = c.UnitVelocity_in_cm_per_s / c.cm_to_km ## km/s
self.vfactor = np.sqrt(obj.time)
self.rconvert = obj.time
##!!! SKID UNIT CONVERSIONS !!!##
CM_PER_MPC = c.cm_per_mpc
UnitLength_in_cm = c.UnitLength_in_cm
UnitMass_in_g = c.UnitMass_in_g
UnitVelocity_in_cm_per_s = c.UnitVelocity_in_cm_per_s
UnitLength_in_cm /= obj.h
UnitMass_in_g /= obj.h
L = obj.boxsize_h * 1.0e-3
UnitTime_in_s = UnitLength_in_cm / UnitVelocity_in_cm_per_s
UnitDensity_in_cgs = UnitMass_in_g / UnitLength_in_cm**3
UnitEnergy_in_cgs = UnitMass_in_g * UnitLength_in_cm**2 / UnitTime_in_s**2
unit_Time = np.sqrt(8.*np.pi/3.) * CM_PER_MPC / (100.*obj.h*UnitVelocity_in_cm_per_s)
unit_Density = 1.8791e-29*obj.h**2
unit_Length = L*CM_PER_MPC
unit_Mass = unit_Density * unit_Length**3
unit_Velocity = unit_Length / unit_Time
#print("COSMO PARAMS: L=%g Mpc, h=%g, Omega=%g" % (L,obj.h,obj.O0))
#print("UNITS: T=%g rho=%g L=%g M=%g v=%g" %
# (unit_Time,unit_Density,unit_Length,unit_Mass,unit_Velocity))
## convert back to GADGET units,
## convert gadget_mass -> Msun,
## then divide out that damned little h
self.TIPSY_M_convert = unit_Mass / UnitMass_in_g
self.TIPSY_M_convert *= 1.0e10 / obj.h
self.TIPSY_L_convert = unit_Length / UnitLength_in_cm
self.TIPSY_L_convert /= obj.h
self.TIPSY_V_convert = unit_Velocity / UnitVelocity_in_cm_per_s
self.TIPSY_RHO_convert = (UnitLength_in_cm**3 * unit_Density) / UnitMass_in_g
self.TIPSY_RHO_convert*= 1.0e10 * obj.h**2
##!!!##
if obj.file_type == 'TIPSY':
self.MCONVERT = self.TIPSY_M_convert
self.VCONVERT = self.TIPSY_V_convert
self.LCONVERT = self.TIPSY_L_convert