Source code for yt.frontends.art.fields

from yt._typing import KnownFieldsT
from yt.fields.field_info_container import FieldInfoContainer

b_units = "code_magnetic"
ra_units = "code_length / code_time**2"
rho_units = "code_mass / code_length**3"
vel_units = "code_velocity"
# NOTE: ARTIO uses momentum density.
mom_units = "code_mass / (code_length**2 * code_time)"
en_units = "code_mass*code_velocity**2/code_length**3"


[docs] class ARTFieldInfo(FieldInfoContainer): known_other_fields: KnownFieldsT = ( ("Density", (rho_units, ["density"], None)), ("TotalEnergy", (en_units, ["total_energy_density"], None)), ("XMomentumDensity", (mom_units, ["momentum_density_x"], None)), ("YMomentumDensity", (mom_units, ["momentum_density_y"], None)), ("ZMomentumDensity", (mom_units, ["momentum_density_z"], None)), ("Pressure", ("", ["pressure"], None)), # Unused ("Gamma", ("", ["gamma"], None)), ("GasEnergy", (en_units, ["thermal_energy_density"], None)), ("MetalDensitySNII", (rho_units, ["metal_ii_density"], None)), ("MetalDensitySNIa", (rho_units, ["metal_ia_density"], None)), ("PotentialNew", ("", ["potential"], None)), ("PotentialOld", ("", ["gas_potential"], None)), ) known_particle_fields: KnownFieldsT = ( ("particle_position_x", ("code_length", [], None)), ("particle_position_y", ("code_length", [], None)), ("particle_position_z", ("code_length", [], None)), ("particle_velocity_x", (vel_units, [], None)), ("particle_velocity_y", (vel_units, [], None)), ("particle_velocity_z", (vel_units, [], None)), ("particle_mass", ("code_mass", [], None)), ("particle_index", ("", [], None)), ("particle_species", ("", ["particle_type"], None)), ("particle_creation_time", ("Gyr", [], None)), ("particle_mass_initial", ("code_mass", [], None)), ("particle_metallicity1", ("", [], None)), ("particle_metallicity2", ("", [], None)), )
[docs] def setup_fluid_fields(self): unit_system = self.ds.unit_system def _temperature(field, data): r0 = data.ds.parameters["boxh"] / data.ds.parameters["ng"] tr = data.ds.quan(3.03e5 * r0**2, "K/code_velocity**2") tr *= data.ds.parameters["wmu"] * data.ds.parameters["Om0"] tr *= data.ds.parameters["gamma"] - 1.0 tr /= data.ds.parameters["aexpn"] ** 2 return tr * data["art", "GasEnergy"] / data["art", "Density"] self.add_field( ("gas", "temperature"), sampling_type="cell", function=_temperature, units=unit_system["temperature"], ) def _get_vel(axis): def velocity(field, data): return ( data[("gas", f"momentum_density_{axis}")] / data[("gas", "density")] ) return velocity for ax in "xyz": self.add_field( ("gas", f"velocity_{ax}"), sampling_type="cell", function=_get_vel(ax), units=unit_system["velocity"], ) def _momentum_magnitude(field, data): tr = ( data["gas", "momentum_density_x"] ** 2 + data["gas", "momentum_density_y"] ** 2 + data["gas", "momentum_density_z"] ** 2 ) ** 0.5 tr *= data["index", "cell_volume"].in_units("cm**3") return tr self.add_field( ("gas", "momentum_magnitude"), sampling_type="cell", function=_momentum_magnitude, units=unit_system["momentum"], ) def _velocity_magnitude(field, data): tr = data["gas", "momentum_magnitude"] tr /= data["gas", "cell_mass"] return tr self.add_field( ("gas", "velocity_magnitude"), sampling_type="cell", function=_velocity_magnitude, units=unit_system["velocity"], ) def _metal_density(field, data): tr = data["gas", "metal_ia_density"] tr += data["gas", "metal_ii_density"] return tr self.add_field( ("gas", "metal_density"), sampling_type="cell", function=_metal_density, units=unit_system["density"], ) def _metal_mass_fraction(field, data): tr = data["gas", "metal_density"] tr /= data["gas", "density"] return tr self.add_field( ("gas", "metal_mass_fraction"), sampling_type="cell", function=_metal_mass_fraction, units="", ) def _H_mass_fraction(field, data): tr = 1.0 - data.ds.parameters["Y_p"] - data["gas", "metal_mass_fraction"] return tr self.add_field( ("gas", "H_mass_fraction"), sampling_type="cell", function=_H_mass_fraction, units="", ) def _metallicity(field, data): tr = data["gas", "metal_mass_fraction"] tr /= data["gas", "H_mass_fraction"] return tr self.add_field( ("gas", "metallicity"), sampling_type="cell", function=_metallicity, units="", ) atoms = [ "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", ] def _specific_metal_density_function(atom): def _specific_metal_density(field, data): nucleus_densityIa = ( data["gas", "metal_ia_density"] * SNIa_abundance[atom] ) nucleus_densityII = ( data["gas", "metal_ii_density"] * SNII_abundance[atom] ) return nucleus_densityIa + nucleus_densityII return _specific_metal_density for atom in atoms: self.add_field( ("gas", f"{atom}_nuclei_mass_density"), sampling_type="cell", function=_specific_metal_density_function(atom), units=unit_system["density"], )
# based on Iwamoto et al 1999 # mass fraction of each atom in SNIa metal SNIa_abundance = { "H": 0.00e00, "He": 0.00e00, "C": 3.52e-02, "N": 8.47e-07, "O": 1.04e-01, "F": 4.14e-10, "Ne": 3.30e-03, "Na": 4.61e-05, "Mg": 6.25e-03, "Al": 7.19e-04, "Si": 1.14e-01, "P": 2.60e-04, "S": 6.35e-02, "Cl": 1.27e-04, "Ar": 1.14e-02, "K": 5.72e-05, "Ca": 8.71e-03, "Sc": 1.61e-07, "Ti": 2.50e-04, "V": 5.46e-05, "Cr": 6.19e-03, "Mn": 6.47e-03, "Fe": 5.46e-01, "Co": 7.59e-04, "Ni": 9.17e-02, "Cu": 2.19e-06, "Zn": 2.06e-05, } # mass fraction of each atom in SNII metal SNII_abundance = { "H": 0.00e00, "He": 0.00e00, "C": 3.12e-02, "N": 6.15e-04, "O": 7.11e-01, "F": 4.57e-10, "Ne": 9.12e-02, "Na": 2.56e-03, "Mg": 4.84e-02, "Al": 5.83e-03, "Si": 4.81e-02, "P": 4.77e-04, "S": 1.62e-02, "Cl": 4.72e-05, "Ar": 3.15e-03, "K": 2.65e-05, "Ca": 2.31e-03, "Sc": 9.02e-08, "Ti": 5.18e-05, "V": 3.94e-06, "Cr": 5.18e-04, "Mn": 1.52e-04, "Fe": 3.58e-02, "Co": 2.86e-05, "Ni": 2.35e-03, "Cu": 4.90e-07, "Zn": 7.46e-06, }