OpenMC/include/openmc/reaction.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

86 lines
2.9 KiB
C
Raw Permalink Normal View History

2018-08-08 07:00:48 -05:00
//! \file reaction.h
//! Data for an incident neutron reaction
2018-07-11 07:01:54 -05:00
#ifndef OPENMC_REACTION_H
#define OPENMC_REACTION_H
#include <string>
2018-07-11 07:01:54 -05:00
#include "hdf5.h"
#include <gsl/gsl-lite.hpp>
2022-02-10 10:05:50 -06:00
#include "openmc/particle_data.h"
#include "openmc/reaction_product.h"
#include "openmc/vector.h"
2018-07-11 07:01:54 -05:00
namespace openmc {
2018-08-08 07:00:48 -05:00
//==============================================================================
//! Data for a single reaction including cross sections (possibly at multiple
//! temperatures) and reaction products (with secondary angle-energy
//! distributions)
//==============================================================================
2018-07-11 07:01:54 -05:00
class Reaction {
public:
2018-08-08 07:00:48 -05:00
//! Construct reaction from HDF5 data
//! \param[in] group HDF5 group containing reaction data
//! \param[in] temperatures Desired temperatures for cross sections
explicit Reaction(hid_t group, const vector<int>& temperatures);
2018-07-11 07:01:54 -05:00
2022-02-10 10:05:50 -06:00
//! Calculate cross section given temperautre/grid index, interpolation factor
//
//! \param[in] i_temp Temperature index
//! \param[in] i_grid Energy grid index
//! \param[in] interp_factor Interpolation factor between grid points
double xs(gsl::index i_temp, gsl::index i_grid, double interp_factor) const;
//! Calculate cross section
//
//! \param[in] micro Microscopic cross section cache
double xs(const NuclideMicroXS& micro) const;
//! \brief Calculate reaction rate based on group-wise flux distribution
//
//! \param[in] i_temp Temperature index
//! \param[in] energy Energy group boundaries in [eV]
//! \param[in] flux Flux in each energy group (not normalized per eV)
//! \param[in] grid Nuclide energy grid
//! \return Reaction rate
double collapse_rate(gsl::index i_temp, gsl::span<const double> energy,
gsl::span<const double> flux, const vector<double>& grid) const;
2018-08-08 07:00:48 -05:00
//! Cross section at a single temperature
2018-07-11 07:01:54 -05:00
struct TemperatureXS {
int threshold;
vector<double> value;
2018-07-11 07:01:54 -05:00
};
int mt_; //!< ENDF MT value
double q_value_; //!< Reaction Q value in [eV]
bool scatter_in_cm_; //!< scattering system in center-of-mass?
bool redundant_; //!< redundant reaction?
vector<TemperatureXS> xs_; //!< Cross section at each temperature
vector<ReactionProduct> products_; //!< Reaction products
2018-07-11 07:01:54 -05:00
};
//==============================================================================
// Non-member functions
//==============================================================================
//! Return reaction name given an ENDF MT value
//
//! \param[in] mt ENDF MT value
//! \return Name of the corresponding reaction
std::string reaction_name(int mt);
//! Return reaction type (MT value) given a reaction name
//
//! \param[in] name Reaction name
//! \return Corresponding reaction type (MT value)
int reaction_type(std::string name);
2018-08-08 07:00:48 -05:00
} // namespace openmc
2018-07-11 07:01:54 -05:00
#endif // OPENMC_REACTION_H