def __init__(self): primordial_simplified = ChemicalNetwork() primordial_simplified.add_reaction("k01") primordial_simplified.add_reaction("k22") primordial_simplified.add_cooling("h2formation") primordial_simplified.add_cooling("gloverabel08") self.network = primordial_simplified self.solution = TestChemicalNetworkSolution()
primordial.add_reaction("k09") primordial.add_reaction("k10") primordial.add_reaction("k11") primordial.add_reaction("k12") primordial.add_reaction("k13") primordial.add_reaction("k14") primordial.add_reaction("k15") primordial.add_reaction("k16") primordial.add_reaction("k17") primordial.add_reaction("k18") primordial.add_reaction("k19") primordial.add_reaction("k21") primordial.add_reaction("k22") primordial.add_reaction("k23") primordial.add_cooling("brem") primordial.add_cooling("reHII") primordial.add_cooling("reHeIII") primordial.add_cooling("gloverabel08") primordial.add_cooling("ceHI") primordial.add_cooling("h2formation") primordial.add_cooling("reHeII2") primordial.add_cooling("reHeII1") primordial.add_cooling("ciHeIS") primordial.add_cooling("ceHeII") primordial.add_cooling("ciHI") primordial.add_cooling("ceHeI") primordial.add_cooling("gammah") primordial.add_cooling("ciHeI") primordial.add_cooling("ciHeII")
def setup_network(): """Initial a ChemicalNetwork object for primordial network 9-species model Return: primordial: ChemicalNetwork with primordial reactions and cooling """ # this register all the rates specified in `primordial_rates.py` dengo.primordial_rates.setup_primordial() # initialize the chmical network object primordial = ChemicalNetwork() # add all the reactions primordial.add_reaction("k01") primordial.add_reaction("k02") primordial.add_reaction("k03") primordial.add_reaction("k04") primordial.add_reaction("k05") primordial.add_reaction("k06") primordial.add_reaction("k07") primordial.add_reaction("k08") primordial.add_reaction("k09") primordial.add_reaction("k10") primordial.add_reaction("k11") primordial.add_reaction("k12") primordial.add_reaction("k13") primordial.add_reaction("k14") primordial.add_reaction("k15") primordial.add_reaction("k16") primordial.add_reaction("k17") primordial.add_reaction("k18") primordial.add_reaction("k19") primordial.add_reaction("k21") primordial.add_reaction("k22") primordial.add_reaction("k23") primordial.add_cooling("brem") primordial.add_cooling("reHII") primordial.add_cooling("reHeIII") primordial.add_cooling("gloverabel08") primordial.add_cooling("ceHI") primordial.add_cooling("h2formation") primordial.add_cooling("h2formation_extra") primordial.add_cooling("reHeII2") primordial.add_cooling("reHeII1") primordial.add_cooling("ciHeIS") primordial.add_cooling("ceHeII") primordial.add_cooling("ciHI") primordial.add_cooling("ceHeI") primordial.add_cooling("gammah") primordial.add_cooling("ciHeI") primordial.add_cooling("ciHeII") primordial.add_cooling("cie_cooling") primordial.add_cooling("compton") # This defines the temperature range for the rate tables primordial.init_temperature((1e0, 1e8)) primordial.enforce_conservation = True return primordial
import dengo.oxygen_rates, dengo.oxygen_cooling from dengo.chemistry_constants import tiny, kboltz, mh from dengo.known_species import * NCELLS = 4 density = 1.0 temperature = np.logspace(4, 6.7, NCELLS) temperature[:] = 1e7 X = 1e-3 oxygen = ChemicalNetwork() oxygen.add_energy_term() for ca in cooling_registry.values(): if ca.name.startswith("O"): oxygen.add_cooling(ca) for s in reaction_registry.values(): if s.name.startswith("O"): oxygen.add_reaction(s) # This defines the temperature range for the rate tables oxygen.init_temperature((1e0, 1e8)) tiny = 1e-10 init_array = np.ones(NCELLS) * density init_values = dict() init_values['OII'] = X * init_array init_values['OIII'] = init_array * X init_values['OIV'] = init_array * X
from dengo.chemistry_constants import tiny, kboltz, mh from dengo.known_species import * # If only a subset of species are wanted put them here # and change the commented lines below want = ("HI", "HII", "de", "ge") primordial = ChemicalNetwork() primordial.add_energy_term() # Set to false if intermediate solution output is not wanted primordial.write_intermediate_solutions = True for ca in cooling_registry.values(): #if not all(sp.name in want for sp in ca.species): continue primordial.add_cooling(ca) for i, rname in enumerate(sorted(reaction_registry)): s = reaction_registry[rname] #if not all(sp.name in want for sp in s.species): continue primordial.add_reaction(s) # This defines the temperature range for the rate tables primordial.init_temperature((1e0, 1e8)) # Generate initial conditions (switch to False to disable this) generate_initial_conditions = True if generate_initial_conditions: import numpy as np NCELLS = 4
temperature = np.logspace(4, 6.7, NCELLS) temperature[:] = 5e6 X = 1e-3 combined = ChemicalNetwork() combined.add_energy_term() for ca in cooling_registry.values(): if ca.name.startswith("C") \ or ca.name.startswith("N") \ or ca.name.startswith("O") \ or ca.name.startswith("Ne") \ or ca.name.startswith("Mg") \ or ca.name.startswith("Si") \ or ca.name.startswith("S"): combined.add_cooling(ca) combined.add_cooling("brem") combined.add_cooling("reHII") combined.add_cooling("reHeIII") combined.add_cooling("ceHI") combined.add_cooling("reHeII2") combined.add_cooling("reHeII1") combined.add_cooling("ciHeIS") combined.add_cooling("ceHeII") combined.add_cooling("ciHI") combined.add_cooling("ceHeI") combined.add_cooling("ciHeI") combined.add_cooling("ciHeII") for r in reaction_registry.values():
def Init_values(temperature, density, n_species=9, cooling=True): """ Create a initial value dictionary, for a given temperature, density, number of species Args: temperature -- in Kelvin density -- in amu / cm**3 n_species -- number of species (6/9) cooling Returns: init_values: initial value dictionary with self-consistent energy/ electron density primordial : chemical_network classes """ # initialize and setup the network dengo.primordial_rates.setup_primordial() primordial = ChemicalNetwork() if n_species == 9: for i in range(23): try: primordial.add_reaction("k{0:02d}".format(i + 1)) except: pass else: for i in range(6): try: primordial.add_reaction("k{0:02d}".format(i + 1)) except: pass # the temperature array required to interpolates the rates primordial.init_temperature((1e0, 1e5)) tiny = 1.0e-20 # init_array are is in fractional abundances init_values = dict() if n_species == 6: # 6-species model init_values["He_1"] = density * (1.0 - 0.76) / 2. init_values["He_2"] = density * (1.0 - 0.76) / 2. init_values["He_3"] = np.array([tiny]) init_values["H_1"] = density * (0.76) / 2. init_values['H_2'] = density * (0.76) / 2. else: # 9-species model init_values["He_1"] = density * (1.0 - 0.76) / 2.0 init_values["He_2"] = density * (1.0 - 0.76) / 2.0 init_values["He_3"] = np.array([tiny]) init_values["H_1"] = density * (0.76) / 3. init_values['H_2'] = density * (0.76) / 3. init_values["H_m0"] = np.array([tiny]) init_values["H2_1"] = density * (0.76) / 3. init_values["H2_2"] = np.array([tiny]) # now everything in mass density init_values['de'] = primordial.calculate_free_electrons(init_values) # one signle value: again mass density init_values['density'] = primordial.calculate_total_density(init_values) num_den = {} for sp in primordial.required_species: try: num_den[sp.name] = init_values[sp.name] / sp.weight except: pass # set up initial temperatures values used to define ge init_values['T'] = temperature # calculate gammaH2 x = 6100.0 / temperature gammaH2 = 2.0 / (5.0 + 2.0 * x * x / (numpy.exp(x) - 1)**2.0) + 1 gamma_factor = primordial.gamma_factor().subs(num_den).subs({ 'gammaH2': gammaH2, 'gamma': 5. / 3., 'T': temperature }) ge = ((temperature * kboltz) * gamma_factor / (init_values['density'] * mh)) T = init_values['density'] * ge * mh / kboltz / gamma_factor print("difference in temperature:", T - temperature) init_values['ge'] = numpy.array([numpy.float64(ge)]) if cooling: for cooling_action in cooling_registry: k = cooling_registry[cooling_action] if (k.species).issubset(primordial.required_species): if k.name != "cie_cooling": print("adding:", k.name, k.equation) primordial.add_cooling(cooling_action) print('---------------------------') return init_values, primordial
density = 1e-3 * 1.67e-24 temperature = np.logspace(4, 6.7, NCELLS) temperature[:] = 5e6 X = 1e-3 ion_by_ion = ChemicalNetwork(write_intermediate = False, stop_time = 3.1557e13) ion_by_ion.add_species("de") #for atom in ["O", "C", "Si", "Mg", "N", "S", "He", "Ne", "H"]: for atom in ["H", "O", "He"]: s, c, r = setup_ionization(atom) ion_by_ion.add_collection(s, c, r) #ion_by_ion.add_collection(s, [], r) ion_by_ion.add_cooling('compton') #s, c, r = setup_primordial() #ion_by_ion.add_collection(s, c, r) # This defines the temperature range for the rate tables ion_by_ion.init_temperature((1e0, 1e12)) # This defines the redsfhit range for the rate tables ion_by_ion.init_redshift((0.0, 9.0)) # Want intermediate output? #combined.write_intermediate_solutions = True tiny = 1e-10