コード例 #1
0
    def initialize_plasmas(self, plasma_class):
        self.plasmas = []
        self.tau_sobolevs = np.zeros((self.no_of_shells, len(self.atom_data.lines)))
        self.line_list_nu = self.atom_data.lines['nu']

        if self.line_interaction_id in (1, 2):
            if self.line_interaction_id == 1:
                logger.info('Downbranch selected - creating transition probabilities')
            else:
                logger.info('Macroatom selected - creating transition probabilties')
            self.transition_probabilities = []
        else:
            logger.info('Scattering selected - no transition probabilities created')

        for i, ((tmp_index, number_density), current_t_rad, current_w) in \
            enumerate(zip(self.number_densities.iterrows(), self.t_rads, self.ws)):

            logger.debug('Initializing Shell %d Plasma with T=%.3f W=%.4f' % (i, current_t_rad, current_w))
            if self.radiative_rates_type in ('lte',):
                j_blues = plasma.intensity_black_body(self.atom_data.lines.nu.values, current_t_rad)
            elif self.radiative_rates_type in ('nebular', 'detailed'):
                j_blues = current_w * plasma.intensity_black_body(self.atom_data.lines.nu.values, current_t_rad)
            else:
                raise ValueError('For the current plasma_type (%s) the radiative_rates_type can only'
                                 ' be "lte" or "detailed" or "nebular"' % (self.plasma_type))

            current_plasma = plasma_class(t_rad=current_t_rad, w=current_w, number_density=number_density,
                                          atom_data=self.atom_data, time_explosion=self.time_explosion,
                                          nlte_species=self.tardis_config.nlte_species,
                                          nlte_options=self.tardis_config.nlte_options, zone_id=i, j_blues=j_blues)

            self.tau_sobolevs[i] = current_plasma.tau_sobolevs

            self.plasmas.append(current_plasma)

        self.tau_sobolevs = np.array(self.tau_sobolevs, dtype=float)
        self.j_blues = np.zeros_like(self.tau_sobolevs)

        if self.line_interaction_id in (1, 2):
            self.calculate_transition_probabilities()
コード例 #2
0
    def update_plasmas(self):
        for i, (current_plasma, new_trad, new_ws) in enumerate(zip(self.plasmas, self.t_rads, self.ws)):
            logger.debug('Updating Shell %d Plasma with T=%.3f W=%.4f' % (i, new_trad, new_ws))
            if self.radiative_rates_type == 'lte':
                j_blues = plasma.intensity_black_body(self.atom_data.lines.nu.values, new_trad)
            elif self.radiative_rates_type == 'nebular':
                j_blues = new_ws * plasma.intensity_black_body(self.atom_data.lines.nu.values, new_trad)

            elif self.radiative_rates_type == 'detailed':
                j_blues = self.j_blues[i]
            else:
                raise ValueError('For the current plasma_type (%s) the radiative_rates_type can only'
                                 ' be "lte" or "detailed" or "nebular"' % (self.plasma_type))

            current_plasma.set_j_blues(j_blues)
            if self.plasma_type == 'lte':
                new_ws = 1.0
            current_plasma.update_radiationfield(new_trad, w=new_ws)
            self.tau_sobolevs[i] = current_plasma.tau_sobolevs

        if self.line_interaction_id in (1, 2):
            self.calculate_transition_probabilities()
コード例 #3
0
ファイル: packet_source.py プロジェクト: nathanielatom/tardis
    def random_blackbody_nu(self, T, number_of_packets):
        """
        Creating the random nus for the energy packets

        Parameters
        ----------

        T : `float`
            temperature of the blackbody

        number_of_packets : `int`
            the number of packets
        """
        nu = np.linspace(self.nu_start, self.nu_end, num=self.blackbody_sampling)
        intensity = plasma.intensity_black_body(nu, T)
        cum_blackbody = np.cumsum(intensity)
        norm_cum_blackbody = cum_blackbody / cum_blackbody.max()
        return nu[norm_cum_blackbody.searchsorted(np.random.random(number_of_packets))] + \
               np.random.random(size=number_of_packets) * (nu[1] - nu[0])
コード例 #4
0
ファイル: packet_source.py プロジェクト: nathanielatom/tardis
    def random_blackbody_nu(self, T, number_of_packets):
        """
        Creating the random nus for the energy packets

        Parameters
        ----------

        T : `float`
            temperature of the blackbody

        number_of_packets : `int`
            the number of packets
        """
        nu = np.linspace(self.nu_start,
                         self.nu_end,
                         num=self.blackbody_sampling)
        intensity = plasma.intensity_black_body(nu, T)
        cum_blackbody = np.cumsum(intensity)
        norm_cum_blackbody = cum_blackbody / cum_blackbody.max()
        return nu[norm_cum_blackbody.searchsorted(np.random.random(number_of_packets))] + \
               np.random.random(size=number_of_packets) * (nu[1] - nu[0])