Source code for jf1uids.units.unit_helpers

## Unit helpers

# The following functions are used to convert from
# units of the simulation code to physical units.
# When using Paicos this is not necessary.

# ===== imports =======
from astropy import units as u
from astropy import constants as c
# =====================


# ============ CODE UNITS CLASS ============

[docs] class CodeUnits: def __init__(self, unit_length, unit_mass, unit_velocity): # expects input in astropy units # e.g. unit_length = 3 * u.parsec # unit_mass = 1e5 * u.M_sun # unit_velocity = 1 * u.km / u.s # sidelength of our simulation box self.code_length = u.def_unit('code_length', unit_length) self.code_mass = u.def_unit('code_mass', unit_mass) self.code_velocity = u.def_unit('code_velocity', unit_velocity) self.code_time = self.code_length / self.code_velocity self.code_density = self.code_mass / self.code_length**3 self.code_pressure = self.code_mass / self.code_length / self.code_time**2
[docs] def init_from_unit_params(UnitLength_in_cm, UnitMass_in_g, UnitVelocity_in_cm_per_s): return CodeUnits(UnitLength_in_cm * u.cm, UnitMass_in_g * u.g, UnitVelocity_in_cm_per_s * u.cm / u.s)
[docs] def get_temperature_from_internal_energy(self, internal_energy, gamma = 5 / 3, hydrogen_abundance = 0.76): mhydrogen = c.m_e + c.m_p gm1 = gamma - 1 mean_molecular_weight = 4 / (5 * hydrogen_abundance + 3) return (gm1 * internal_energy * mean_molecular_weight * mhydrogen * self.code_velocity**2 / c.k_B).to(u.K)
[docs] def print_simulation_parameters(self, final_time_wanted): print(f"Code length in cm: {self.code_length.to(u.cm)}") print(f"Code mass in g: {self.code_mass.to(u.g)}") print(f"Code velocity in cm/s: {self.code_velocity.to(u.cm / u.s)}") print(f"Code time in s: {self.code_time.to(u.s)}") print(f"Final time in code units: {final_time_wanted.to(self.code_time)}") print(f"Code density in g/cm^3: {self.code_density.to(u.g / u.cm**3)}") print(f"Code pressure in g/cm/s^2: {self.code_pressure.to(u.g / u.cm / u.s**2)}")