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)
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')
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])
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()
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)