Example #1
0
    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()
Example #2
0
def setup_predator_prey_network():
    setup_predator_prey_rates()
    cN = ChemicalNetwork()
    cN.add_reaction("exp_growth_prey")
    cN.add_reaction("predation")
    cN.add_reaction("natural_death_predator")

    # this shouldnt be compulsory...
    cN.init_temperature((1e0, 1e8))
    return cN
Example #3
0
import os
# this is required to compiled cython
os.environ["HDF5_DIR"] = "/home/kwoksun2/anaconda3"

NCELLS = 4
density = 1e12
temperature = np.logspace(2, 4, NCELLS)
temperature[:] = 2e3
X = 1.0e-4

dengo.primordial_rates.setup_primordial()
primordial = ChemicalNetwork()
#primordial.add_energy_term()

# add the neccessary cooling and 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")
Example #4
0
import numpy as na
import h5py
from dengo.chemical_network import ChemicalNetwork
from dengo.reaction_classes import Species, chianti_rate, reaction_registry, species_registry
import dengo.primordial_rates
import dengo.oxygen_rates
from dengo.oxygen_cooling import cooling_rates_table, cooling_action_table

oxygen_network = ChemicalNetwork()

for rate in sorted(reaction_registry):
    if rate.startswith("o_"):
        oxygen_network.add_reaction(rate)

print "These species are required:"
print "\n".join([s.name for s in sorted(oxygen_network.required_species)])

for species in oxygen_network.required_species:
    print "Querying: ", species
    for rxn in oxygen_network.species_reactions(species):
        print "  ", rxn

for rxn in oxygen_network:
    write_reaction(rxn)

for species in oxygen_network.required_species:
    print species.name
    write_species_deriv(species, oxygen_network.species_reactions(species))

# Define the temperature we want rate values for
Tlog_bounds = (1, 9)
Example #5
0
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
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
    density = 1e7
    X = 0.5
    tiny = 1e-10

    init_array = np.ones(NCELLS) * density
Example #7
0
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
init_values['OV'] = init_array * X
init_values['OVI'] = init_array * X
init_values['OVII'] = init_array * X
init_values['OVIII'] = init_array * X
from dengo.chemical_network import ChemicalNetwork, reaction_registry
import dengo.primordial_rates

primordial = ChemicalNetwork()
for i in range(23):
    n = "k%02i" % (i+1)
    if n in reaction_registry:
        primordial.add_reaction(n)

print "These species are required:"
print "\n".join([s.name for s in sorted(primordial.required_species)])

for species in primordial.required_species:
    print "Querying: ", species
    for rxn in primordial.species_reactions(species):
        print "  ", rxn

for rxn in primordial:
    write_reaction(rxn)

for species in primordial.required_species:
    write_species_deriv(species, primordial.species_reactions(species))
Example #9
0
import dengo.new_rates
from dengo.chemistry_constants import tiny, kboltz, mh
#from dengo.known_species import *

import os
os.environ["HDF5_DIR"] = "/home/kwoksun2/anaconda3"

NCELLS = 1
density = 1e0
temperature = np.logspace(2, 4, NCELLS)
temperature[:] = 2e3
X = 0.5

dengo.new_rates.setup_new()
new = ChemicalNetwork()
new.add_reaction("I01")
new.add_reaction("I01_re")
new.add_reaction("I02")
new.add_reaction("I03")
new.add_reaction("I04")
new.add_reaction("I05")
new.add_reaction("C05")
new.add_reaction("D01")

# This defines the temperature range for the rate tables
new.init_temperature((1e0, 1e8))

init_array = np.ones(NCELLS) * density
init_values = dict()
init_values["HOI_1"] = 8.0e-11 * init_array * (200)
init_values['I_m0'] = 1.0e-10 * init_array * (126)
want = ('CIII', 'CIV', 'CV', 'de', 'ge')

carbon = ChemicalNetwork()
carbon.add_energy_term()

# for ca in cooling_registry.values():
#     # The following line can be used to specify a subset of species
#     #if all(sp.name in want for sp in ca.species):
#     if ca.name.startswith("C"):
#        carbon.add_cooling(ca)

for s in reaction_registry.values():
    # The following line can be used to specify a subset of species
    #if all(sp.name in want for sp in s.species):
    if s.name.startswith("C"):
        carbon.add_reaction(s)

# This defines the temperature range for the rate tables
carbon.init_temperature((1e4, 1e8))

# Set to false if you don't want intermediate solution output
carbon.write_intermediate_solutions = True

# Write the rate tables and the corresponding C++ code
create_rate_tables(carbon, "carbon")
create_rate_reader(carbon, "carbon")

# Generate initial conditions (switch to False to disable this)
generate_initial_conditions = True
start_neutral = False
initial_state = 'CVII' # if using start_neutral = True, this should be the _1 state
Example #11
0
    reaction_registry, \
    cooling_registry
import dengo.primordial_rates, dengo.primordial_cooling
from dengo.chemistry_constants import tiny, kboltz, mh

NCELLS = 4
density = 1e7
temperature = np.logspace(2, 4, NCELLS)
temperature[:] = 2e3
X = 0.5

dengo.primordial_rates.setup_primordial()

primordial = ChemicalNetwork()

primordial.add_reaction("k01")
primordial.add_reaction("k02")

# This defines the temperature range for the rate tables
primordial.init_temperature((1e0, 1e8))

tiny = 1e-10

init_array = np.ones(NCELLS) * density
init_values = dict()
init_values['HII'] = X * init_array
init_values['de'] = init_array * 0.0

#total_density = primordial.calculate_total_density(init_values, ("HI",))
#init_values["HI"] = init_array.copy() - total_density
#init_values = primordial.convert_to_mass_density(init_values)
Example #12
0
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():
    if r.name.startswith("C") \
    or r.name.startswith("N") \
    or r.name.startswith("O") \
    or r.name.startswith("Ne") \
    or r.name.startswith("Mg") \
    or r.name.startswith("Si") \
    or r.name.startswith("S"):
        combined.add_reaction(r)

combined.add_reaction("k01")
combined.add_reaction("k02")
combined.add_reaction("k03")
combined.add_reaction("k04")
combined.add_reaction("k05")
combined.add_reaction("k06")

# This defines the temperature range for the rate tables
combined.init_temperature((1e0, 1e8))

# Want intermediate output?
combined.write_intermediate_solutions = True

tiny = 1e-10
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