Ejemplo n.º 1
0
    def __init__(self, tardis_config):
        #final preparation for configuration object
        self.tardis_config = tardis_config

        self.atom_data = tardis_config.atom_data
        selected_atomic_numbers = self.tardis_config.abundances.index

        self.atom_data.prepare_atom_data(
            selected_atomic_numbers,
            line_interaction_type=tardis_config.plasma.line_interaction_type,
            nlte_species=tardis_config.plasma.nlte.species)

        if tardis_config.plasma.ionization == 'nebular':
            if not self.atom_data.has_zeta_data:
                raise ValueError("Requiring Recombination coefficients Zeta "
                                 "for 'nebular' plasma ionization")

        self.t_inner = tardis_config.plasma.t_inner

        self.ws = self.calculate_geometric_w(
            tardis_config.structure.r_middle,
            tardis_config.structure.r_inner[0])

        if tardis_config.plasma.t_rads is None:
            self.t_rads = self._init_t_rad(self.t_inner,
                                           tardis_config.structure.v_inner[0],
                                           self.v_middle)
        else:
            self.t_rads = tardis_config.plasma.t_rads

        heating_rate_data_file = getattr(tardis_config.plasma,
                                         'heating_rate_data_file', None)

        self.plasma_array = LegacyPlasmaArray(
            tardis_config.number_densities,
            tardis_config.atom_data,
            tardis_config.supernova.time_explosion.to('s').value,
            nlte_config=tardis_config.plasma.nlte,
            delta_treatment=tardis_config.plasma.delta_treatment,
            ionization_mode=tardis_config.plasma.ionization,
            excitation_mode=tardis_config.plasma.excitation,
            line_interaction_type=tardis_config.plasma.line_interaction_type,
            link_t_rad_t_electron=0.9,
            helium_treatment=tardis_config.plasma.helium_treatment,
            heating_rate_data_file=heating_rate_data_file,
            v_inner=tardis_config.structure.v_inner,
            v_outer=tardis_config.structure.v_outer)

        self.spectrum = TARDISSpectrum(tardis_config.spectrum.frequency,
                                       tardis_config.supernova.distance)
        self.spectrum_virtual = TARDISSpectrum(
            tardis_config.spectrum.frequency, tardis_config.supernova.distance)
        self.spectrum_reabsorbed = TARDISSpectrum(
            tardis_config.spectrum.frequency, tardis_config.supernova.distance)

        self.calculate_j_blues(init_detailed_j_blues=True)
        self.update_plasmas(initialize_nlte=True)
Ejemplo n.º 2
0
 def setup(self):
     atom_data = atomic.AtomData.from_hdf5(helium_test_db)
     density = 1e-15 * u.Unit('g/cm3')
     abundance = parse_abundance_dict_to_dataframe({'He':1.0})
     abundance = pd.DataFrame({0:abundance})
     number_densities = abundance * density.to('g/cm^3').value
     number_densities = number_densities.div(
         atom_data.atom_data.mass.ix[number_densities.index], axis=0)
     self.plasma = LegacyPlasmaArray(number_densities,
         atomic_data=atom_data, time_explosion=10 * u.day,
         ionization_mode='nebular')
Ejemplo n.º 3
0
def test_he_nlte_plasma(number_density, atomic_data, time_explosion, t_rad, w,
                        j_blues):
    he_nlte_plasma = LegacyPlasmaArray(number_densities=number_density,
                                       atomic_data=atomic_data,
                                       time_explosion=time_explosion,
                                       helium_treatment='recomb-nlte')
    he_nlte_plasma.update_radiationfield(t_rad, w, j_blues, nlte_config=None)
    assert np.allclose(
        he_nlte_plasma.get_value('ion_number_density').ix[2].ix[1],
        number_density.ix[2])
    assert np.all(
        he_nlte_plasma.get_value(
            'level_number_density').ix[2].ix[0].ix[0]) == 0.0
    assert np.allclose(
        he_nlte_plasma.get_value('level_number_density').ix[2].sum(),
        number_density.ix[2])
Ejemplo n.º 4
0
    def __init__(self, tardis_config):
        #final preparation for configuration object
        self.tardis_config = tardis_config
        self.gui = None
        self.converged = False
        self.atom_data = tardis_config.atom_data
        selected_atomic_numbers = self.tardis_config.abundances.index
        self.atom_data.prepare_atom_data(
            selected_atomic_numbers,
            line_interaction_type=tardis_config.plasma.line_interaction_type,
            nlte_species=tardis_config.plasma.nlte.species)

        if tardis_config.plasma.ionization == 'nebular':
            if not self.atom_data.has_zeta_data:
                raise ValueError(
                    "Requiring Recombination coefficients Zeta for 'nebular' plasma ionization"
                )

        self.packet_src = packet_source.SimplePacketSource.from_wavelength(
            tardis_config.montecarlo.black_body_sampling.start,
            tardis_config.montecarlo.black_body_sampling.end,
            blackbody_sampling=tardis_config.montecarlo.black_body_sampling.
            samples,
            seed=self.tardis_config.montecarlo.seed)
        self.current_no_of_packets = tardis_config.montecarlo.no_of_packets

        self.t_inner = tardis_config.plasma.t_inner
        self.t_rads = tardis_config.plasma.t_rads

        self.iterations_max_requested = tardis_config.montecarlo.iterations
        self.iterations_remaining = self.iterations_max_requested
        self.iterations_executed = 0

        if tardis_config.montecarlo.convergence_strategy.type == 'specific':
            self.global_convergence_parameters = (
                tardis_config.montecarlo.convergence_strategy.deepcopy())

        self.t_rads = tardis_config.plasma.t_rads
        t_inner_lock_cycle = [False] * (
            tardis_config.montecarlo.convergence_strategy.lock_t_inner_cycles)
        t_inner_lock_cycle[0] = True
        self.t_inner_update = itertools.cycle(t_inner_lock_cycle)

        self.ws = (
            0.5 *
            (1 - np.sqrt(1 -
                         (tardis_config.structure.r_inner[0]**2 /
                          tardis_config.structure.r_middle**2).to(1).value)))

        self.plasma_array = LegacyPlasmaArray(
            tardis_config.number_densities,
            tardis_config.atom_data,
            tardis_config.supernova.time_explosion.to('s').value,
            nlte_config=tardis_config.plasma.nlte,
            delta_treatment=tardis_config.plasma.delta_treatment,
            ionization_mode=tardis_config.plasma.ionization,
            excitation_mode=tardis_config.plasma.excitation,
            line_interaction_type=tardis_config.plasma.line_interaction_type,
            link_t_rad_t_electron=0.9,
            helium_treatment=tardis_config.plasma.helium_treatment)

        self.spectrum = TARDISSpectrum(tardis_config.spectrum.frequency,
                                       tardis_config.supernova.distance)
        self.spectrum_virtual = TARDISSpectrum(
            tardis_config.spectrum.frequency, tardis_config.supernova.distance)
        self.spectrum_reabsorbed = TARDISSpectrum(
            tardis_config.spectrum.frequency, tardis_config.supernova.distance)
        self.runner = MontecarloRunner()
Ejemplo n.º 5
0
def standard_legacy_plasma(t_rad, number_densities, time_explosion,
                              atomic_data, j_blues,
                              link_t_rad_t_electron):
    return LegacyPlasmaArray(number_densities, atomic_data, time_explosion,
                             t_rad)