Source code for yt.utilities.chemical_formulas

import re

from .periodic_table import periodic_table
from .physical_ratios import _primordial_mass_fraction


[docs] class ChemicalFormula: def __init__(self, formula_string): # See YTEP-0003 for information on the format. self.formula_string = formula_string self.elements = [] if "_" in self.formula_string: molecule, ionization = self.formula_string.split("_") if ionization[0] == "p": charge = int(ionization[1:]) elif ionization[0] == "m": charge = -int(ionization[1:]) else: raise NotImplementedError elif self.formula_string.startswith("El"): molecule = self.formula_string charge = -1 else: molecule = self.formula_string charge = 0 self.charge = charge for element, count in re.findall(r"([A-Z][a-z]*)(\d*)", molecule): if count == "": count = 1 self.elements.append((periodic_table[element], int(count))) self.weight = sum(n * e.weight for e, n in self.elements) def __repr__(self): return self.formula_string
[docs] def compute_mu(ion_state): if ion_state == "ionized" or ion_state is None: # full ionization n_H = 2.0 # fully ionized hydrogen gives two particles n_He = 3.0 # fully ionized helium gives three particles elif ion_state == "neutral": n_H = 1.0 # neutral hydrogen gives one particle n_He = 1.0 # neutral helium gives one particle muinv = n_H * _primordial_mass_fraction["H"] / ChemicalFormula("H").weight muinv += n_He * _primordial_mass_fraction["He"] / ChemicalFormula("He").weight return 1.0 / muinv