MARLEY (Model of Argon Reaction Low Energy Yields) v2.0.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Loading...
Searching...
No Matches
marley::BackshiftedFermiGasModel Class Reference

Implementation of the back-shifted Fermi gas nuclear level density model. More...

#include <BackshiftedFermiGasModel.hh>

Inheritance diagram for marley::BackshiftedFermiGasModel:
marley::LevelDensityModel

Public Member Functions

 BackshiftedFermiGasModel (int Z, int A)
 
virtual double level_density (double Ex) override
 
virtual double level_density (double Ex, int two_J) override
 
virtual double level_density (double Ex, int two_J, marley::Parity Pi) override
 

Protected Member Functions

double compute_sigma_F2 (double Ex, double a)
 Helper function used when evaluating the spin cutoff parameter.
 

Protected Attributes

int A_
 mass number for this nuclide
 
double a_tilde_
 asymptotic level density parameter (MeV -1)
 
double Delta_BFM_
 excitation energy shift (MeV)
 
double delta_W_
 shell correction energy (MeV)
 
double gamma_
 damping parameter (MeV -1)
 
double sigma_
 spin cut-off parameter
 
double sigma_d_global_
 global fit for discrete-region spin cut-off parameter
 
double Sn_
 neutron separation energy (MeV)
 
int Z_
 atomic number for this nuclide
 

Detailed Description

Implementation of the back-shifted Fermi gas nuclear level density model.

Level density parameters used in this class are based on the global fits originally performed in A. J. Koning, et al., Nucl. Phys. A810 (2008) pp. 13-76. In addition to being used in MARLEY, this model has been adopted as one of the available options in the RIPL-3 data library and the TALYS nuclear code.

Definition at line 31 of file BackshiftedFermiGasModel.hh.

Constructor & Destructor Documentation

◆ BackshiftedFermiGasModel()

marley::BackshiftedFermiGasModel::BackshiftedFermiGasModel ( int Z,
int A )

Create a back-shifted Fermi gas model object for a specific nuclide. This constructor will use global fits to initialize all level density parameters.

Parameters
Zatomic number of the desired nuclide
Amass number of the desired nuclide
Todo
Add other constructors to the BackshiftedFermiGasModel class to allow the user to set the level density parameters based on local fits

Definition at line 23 of file BackshiftedFermiGasModel.cc.

24 : Z_(Z), A_(A)
25{
26 int N = A_ - Z_;
27 double A_third = std::pow(A_, 1.0/3.0);
28
29 // Parameters from global level density fit
30 static constexpr double alpha = 0.0722396; // MeV^(-1)
31 static constexpr double beta = 0.195267; // MeV^(-1)
32 static constexpr double gamma_1 = 0.410289; // MeV(-1)
33 static constexpr double delta_global = 0.173015; // MeV
34
35 // Asymptotic level density parameter
36 a_tilde_ = alpha*A_ + beta*std::pow(A_third, 2);
37
38 // Damping parameter
39 gamma_ = gamma_1 / A_third;
40
41 const marley::MassTable& mt = marley::MassTable::Instance();
42
43 // Shell correction energy
46
47 // Energy shift
48 Delta_BFM_ = delta_global;
49 bool z_odd = Z % 2;
50 bool n_odd = N % 2;
51 // There will be no change to the energy shift if the nucleus is odd-even
52 if (z_odd && n_odd) Delta_BFM_ += -12/std::sqrt(A_);
53 else if (!z_odd && !n_odd) Delta_BFM_ += 12/std::sqrt(A_);
54
55 // Spin cut-off parameter
56 sigma_d_global_ = 0.83*std::pow(A_, 0.26);
57 Sn_ = mt.get_fragment_separation_energy(Z_, A_, marley_utils::NEUTRON);
58}
double Sn_
neutron separation energy (MeV)
double gamma_
damping parameter (MeV -1)
int Z_
atomic number for this nuclide
double a_tilde_
asymptotic level density parameter (MeV -1)
int A_
mass number for this nuclide
double Delta_BFM_
excitation energy shift (MeV)
double delta_W_
shell correction energy (MeV)
double sigma_d_global_
global fit for discrete-region spin cut-off parameter
double get_fragment_separation_energy(int Z, int A, int pdg, bool theory_ok=true) const
Get the separation energy for emission of a nuclear fragment from a nucleus.
Definition MassTable.cc:206
static const MassTable & Instance()
Get a const reference to the singleton instance of the MassTable.
Definition MassTable.cc:69
double get_mass_excess(int Z, int A, bool theory_ok=true) const
Get the mass excess of a nucleus.
Definition MassTable.cc:183
double liquid_drop_model_mass_excess(int Z, int A) const
Calculate a theoretical mass excess for a nucleus using the liquid drop model.
Definition MassTable.cc:238

References A_, a_tilde_, Delta_BFM_, delta_W_, gamma_, marley::MassTable::get_fragment_separation_energy(), marley::MassTable::get_mass_excess(), marley::MassTable::Instance(), marley::MassTable::liquid_drop_model_mass_excess(), sigma_d_global_, Sn_, and Z_.

Member Function Documentation

◆ compute_sigma_F2()

double marley::BackshiftedFermiGasModel::compute_sigma_F2 ( double Ex,
double a )
inlineprotected

Helper function used when evaluating the spin cutoff parameter.

Definition at line 59 of file BackshiftedFermiGasModel.hh.

59 {
60 double U = Ex - Delta_BFM_;
61
62 double sigma_F2 = 0.01389 * std::pow(A_, 5.0/3.0)
63 * std::sqrt(a * U) / a_tilde_;
64
65 return sigma_F2;
66 }

References A_, a_tilde_, and Delta_BFM_.

Referenced by level_density().

◆ level_density() [1/3]

double marley::BackshiftedFermiGasModel::level_density ( double Ex)
overridevirtual

Nuclear level density \( \rho(E_x) \) including all spins and parities.

Parameters
ExExcitation energy in MeV
Returns
Level density in MeV -1
Note
Calls to this function update the spin cut-off parameter sigma_
Todo
Replace Ed here with database of local fits taken from RIPL-3 or TALYS
Todo
Reconsider method used for handling spin cut-off parameter calculation for U <= Ed.

Implements marley::LevelDensityModel.

Definition at line 77 of file BackshiftedFermiGasModel.cc.

77 {
78
79 // Effective excitation energy
80 double U = Ex - Delta_BFM_;
81
82 // Level density parameter
83 double a;
84 if (U <= 0) { // Equivalently, Ex <= Delta_BFM_
85 // Use first-order Taylor expansion for small energies
86 a = a_tilde_ * (1 + gamma_ * delta_W_);
87 }
88 else {
89 a = a_tilde_ * (1 + (delta_W_ / U) * (1 - std::exp(-gamma_ * U)));
90 }
91
94 const double Ed = 0.;
95
96 // Compute the spin cut-off parameter sigma_
97
98 // To avoid numerical problems, we will always use the discrete spin cutoff
99 // parameter for U <= Ed.
100 // The TALYS manual suggests using this for Ex <= Ed, but this isn't a huge
101 // change. The actual TALYS code may make this same choice.
104 if (U <= Ed) sigma_ = sigma_d_global_;
105 else {
106
107 if (Ex >= Sn_) {
108 double sigma_F2 = compute_sigma_F2(Ex, a);
109 sigma_ = std::sqrt(sigma_F2);
110 }
111 else {
112
113 // sigma_F2 evaluated for Ex == Sn for the linear interpolation
114 double sigma_F2_Sn = compute_sigma_F2(Sn_, a);
115
116 // Ed < Ex < Sn_
117 double sigma_d2 = std::pow(sigma_d_global_, 2);
118 sigma_ = std::sqrt(sigma_d2 + (Ex - Ed)
119 * (sigma_F2_Sn - sigma_d2) / (Sn_ - Ed));
120 }
121 }
122
123 // For very small excitation energies, take the limit of the total
124 // level density as U -> 0 to prevent numerical issues.
125 if (U <= 0) {
126 static const double exp1 = std::exp(1);
127 return exp1 * a / (12 * sigma_);
128 }
129
130 double aU = a * U;
131 double sqrt_aU = std::sqrt(aU);
132 return std::pow(12 * sigma_ * (std::sqrt(2 * sqrt_aU)*U*std::exp(-2 * sqrt_aU)
133 + std::exp(-aU - 1)/a), -1);
134}
double compute_sigma_F2(double Ex, double a)
Helper function used when evaluating the spin cutoff parameter.

References a_tilde_, compute_sigma_F2(), Delta_BFM_, delta_W_, gamma_, sigma_, sigma_d_global_, and Sn_.

Referenced by level_density(), and level_density().

◆ level_density() [2/3]

double marley::BackshiftedFermiGasModel::level_density ( double Ex,
int two_J )
overridevirtual

Level density \( \rho(E_x, J) \) for a specific nuclear spin.

Parameters
ExExcitation energy in MeV
two_JTwo times the nuclear spin
Returns
Level density in MeV -1

Implements marley::LevelDensityModel.

Definition at line 67 of file BackshiftedFermiGasModel.cc.

67 {
68 double rho = level_density(Ex);
69 // Spin-cutoff parameter sigma_ is updated by previous call to
70 // this->level_density(Ex)
71 double two_sigma2 = 2 * std::pow(sigma_, 2);
72 return ((two_J + 1) / two_sigma2) * std::exp(-0.25 * std::pow(two_J + 1, 2)
73 / two_sigma2) * rho;
74}
virtual double level_density(double Ex) override

References level_density(), and sigma_.

◆ level_density() [3/3]

double marley::BackshiftedFermiGasModel::level_density ( double Ex,
int two_J,
marley::Parity Pi )
overridevirtual

Level density \( \rho(E_x, J, \Pi) \) for a specific nuclear spin and parity.

Parameters
ExExcitation energy in MeV
two_JTwo times the nuclear spin
PiThe nuclear parity
Returns
Level density in MeV -1

The current implementation assumes parity equipartition.

Implements marley::LevelDensityModel.

Definition at line 61 of file BackshiftedFermiGasModel.cc.

63{
64 return 0.5 * level_density(Ex, two_J);
65}

References level_density().

Member Data Documentation

◆ A_

int marley::BackshiftedFermiGasModel::A_
protected

mass number for this nuclide

Definition at line 69 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), and compute_sigma_F2().

◆ a_tilde_

double marley::BackshiftedFermiGasModel::a_tilde_
protected

asymptotic level density parameter (MeV -1)

Definition at line 73 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), compute_sigma_F2(), and level_density().

◆ Delta_BFM_

double marley::BackshiftedFermiGasModel::Delta_BFM_
protected

excitation energy shift (MeV)

Definition at line 76 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), compute_sigma_F2(), and level_density().

◆ delta_W_

double marley::BackshiftedFermiGasModel::delta_W_
protected

shell correction energy (MeV)

Definition at line 75 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), and level_density().

◆ gamma_

double marley::BackshiftedFermiGasModel::gamma_
protected

damping parameter (MeV -1)

Definition at line 74 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), and level_density().

◆ sigma_

double marley::BackshiftedFermiGasModel::sigma_
protected

spin cut-off parameter

Definition at line 71 of file BackshiftedFermiGasModel.hh.

Referenced by level_density(), and level_density().

◆ sigma_d_global_

double marley::BackshiftedFermiGasModel::sigma_d_global_
protected

global fit for discrete-region spin cut-off parameter

Definition at line 79 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), and level_density().

◆ Sn_

double marley::BackshiftedFermiGasModel::Sn_
protected

neutron separation energy (MeV)

Definition at line 80 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel(), and level_density().

◆ Z_

int marley::BackshiftedFermiGasModel::Z_
protected

atomic number for this nuclide

Definition at line 68 of file BackshiftedFermiGasModel.hh.

Referenced by BackshiftedFermiGasModel().


The documentation for this class was generated from the following files: