Spherical closed-shell nuclei with a relativistic mean-field model in the Hartree approximation. More...
#include <nucleus_rmf.h>
This code is very experimental.
This class is based on a code developed by C.J. Horowitz and B.D. Serot, and used in Horowitz81 which was then adapted by P.J. Ellis and used in Heide94 and Prakash94. Ellis and A.W. Steiner adapted it for the parameterization in in eos_had_rmf for Steiner05b, and then converted to C++ by Steiner afterwards.
The standard usage is something like:
which computes the structure of and outputs the neutron skin thickness using the model
'NL4'
.
Potential exceptions are
The initial level pattern is
1 S 1/2 // 2 nucleons 1 P 3/2 1 P 1/2 // 8 nucleus 1 D 5/2 1 D 3/2 2 S 1/2 // 20 nucleons 1 F 7/2 // 28 nucleons 1 F 5/2 2 P 3/2 2 P 1/2 // 40 nucleons 1 G 9/2 // 50 nucleus 1 G 7/2 2 D 5/2 1 H 11/2 2 D 3/2 3 S 1/2 // 82 nucleons 1 H 9/2 2 F 7/2 1 I 13/2 2 F 5/2 3 P 3/2 3 P 1/2 // 126 nucleons 2 G 9/2 1 I 11/2 1 J 15/2 3 D 5/2 4 S 1/2 2 G 7/2 3 D 3/2 // 184 nucleons
Below, is a generic index for the isospin, the radial quantum number
and the angular quantum numbers
and
. The meson fields are
and
. The baryon density is
, the neutron and proton densities are
and
, and the baryon scalar density is
. The nucleon field equations are
where the isospin number, is
for protons and
for neutrons. The meson field equations are
and the Coulomb field equation is
The meson field equations plus a pair of Dirac-like nucleon field equations for each index must be solved to compute the structure of a given nucleus.
The densities (scalar, baryon, isospin, and charge) are
The total energy is
The charge density is the proton density folded with the charge density of the proton, i.e.
where the proton charge density is assumed to be of the form
and the parameter (see Eq. 20b in Horowitz81). The default value of a_proton is the value of
converted into
.
Generally, the first array index associated with a function is not the value at , but at
(stored in step_size) and so the
part of the algorithm is handled separately.
Better documentation
Convert energies() to use EOS and possibly replace sigma_rhs() and related functions by the associated field equation method of eos_had_rmf.
Sort energy levels at the end by energy
Improve the numerical methods
Make the neutron and proton orbitals more configurable
Generalize to .
Allow more freedom in the integrations
Consider converting everything to inverse fermis.
Convert to zero-indexed arrays (mostly done)
Warn when the level ordering is wrong, and unoccupied levels are lower energy than occupied levels
Connect with o2scl::nucmass ?
Definition at line 229 of file nucleus_rmf.h.
Classes | |
struct | initial_guess |
Initial guess structure. More... | |
struct | odparms |
A convenient struct for the solution of the Dirac equations. More... | |
struct | shell |
A shell of nucleons for nucleus_rmf. More... | |
Public Member Functions | |
Basic operation | |
int | run_nucleus (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N) |
Computes the structure of a nucleus with the specified number of levels. More... | |
void | set_verbose (int v) |
Set output level. | |
Lower-level interface | |
void | init_run (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N) |
Initialize a run. More... | |
int | iterate (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N, int &iconverged, int &dirac_converged, int &meson_converged) |
Perform an iteration. | |
int | post_converge (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N) |
After convergence, make CM corrections, etc. | |
Public Attributes | |
initial_guess | ig |
Parameters for initial guess. More... | |
bool | generic_ode |
If true, use the generic ODE solver instead of the internal 4th order Runge-Kutta. | |
Protected Member Functions | |
int | load_nl3 (eos_had_rmf &r) |
Load the default model NL3 into the given eos_had_rmf object. | |
void | init_meson_density () |
Initialize the meson and photon fields, the densities, etc. | |
int | energy_radii (double xpro, double xnu, double e) |
Calculate the energy profile. | |
void | center_mass_corr (double atot) |
Compute the center of mass correction. | |
Protected Attributes | |
double | a_proton |
The parameter for the charge density of the proton (default is about 4.27073) | |
eos_had_rmf * | rmf |
The base EOS. | |
std::shared_ptr< table_units<> > | profiles |
The radial profiles. | |
std::shared_ptr< table_units<> > | chden_table |
The final charge densities. | |
std::vector< shell > * | levp |
A pointer to the current vector of levels (either levels or unocc_levels) | |
int | verbose |
Control output (default 1) | |
shell | neutron_shells [n_internal_levels] |
The starting neutron levels. | |
shell | proton_shells [n_internal_levels] |
The starting proton levels. | |
double | step_size |
The grid step size (default 0.04) | |
double | mnuc |
The nucleon mass (automatically set in init_fun()) | |
ubvector | energy |
Energy integrand. | |
bool | init_called |
True if init() has been called. | |
ubvector | ode_y |
ODE functions. | |
ubvector | ode_dydx |
ODE derivatives. | |
ubvector | ode_yerr |
ODE errors. | |
Density information (protected) | |
ubmatrix | xrho |
The densities times radius squared. | |
ubvector | xrhosp |
The proton scalar density times radius squared. | |
ubvector | xrhos |
The scalar field RHS. | |
ubvector | xrhov |
The vector field RHS. | |
ubvector | xrhor |
The isubvector field RHS. | |
ubvector | chden1 |
Charge density. | |
ubvector | chdenc |
Charge density. | |
ubvector | arho |
Baryon density. | |
Gauss-Legendre integration points and weights | |
double | x12 [6] |
double | w12 [6] |
double | x100 [50] |
double | w100 [50] |
Static Protected Attributes | |
static const int | n_internal_levels =29 |
The total number of shells stored internally. | |
static const int | grid_size =300 |
The grid size. | |
Private Types | |
typedef boost::numeric::ublas::vector< double > | ubvector |
typedef boost::numeric::ublas::matrix< double > | ubmatrix |
Results | |
int | nlevels |
The number of levels. | |
std::vector< shell > | levels |
The levels (protons first, then neutrons) More... | |
int | nuolevels |
The number of unoccupied levels (equal to unocc_Z + unocc_N ) | |
std::vector< shell > | unocc_levels |
The unoccupied levels (protons first, then neutrons) More... | |
double | stens |
Surface tension (in ![]() | |
double | rnrp |
Skin thickness (in fm) More... | |
double | rnrms |
Neutron RMS radius (in fm) More... | |
double | rprms |
Proton RMS radius (in fm) More... | |
double | etot |
Total energy (in MeV) More... | |
double | r_charge |
Charge radius (in fm) More... | |
double | r_charge_cm |
Charge radius corrected by the center of mass (in fm) More... | |
std::shared_ptr< table_units<> > | get_profiles () |
Get the radial profiles. More... | |
std::shared_ptr< table_units<> > | get_chden () |
The final charge densities. | |
Equation of state | |
eos_had_rmf | def_rmf |
The default equation of state (default NL3) More... | |
thermo | hb |
thermo object for the EOS More... | |
fermion | n |
The neutron. More... | |
fermion | p |
The proton. More... | |
int | set_eos (eos_had_rmf &r) |
Set the base EOS to be used. More... | |
Numeric configuration | |
bool | err_nonconv |
If true, call the error handler if the routine does not converge or reach the desired tolerance (default true) | |
int | itmax |
Maximum number of total iterations (default 70) | |
int | meson_itmax |
Maximum number of iterations for solving the meson field equations (default 10000) | |
int | dirac_itmax |
Maximum number of iterations for solving the Dirac equations (default 100) | |
double | dirac_tol |
Tolerance for Dirac equations (default ![]() | |
double | dirac_tol2 |
Second tolerance for Dirac equations (default ![]() | |
double | meson_tol |
Tolerance for meson field equations (default ![]() | |
void | set_step (ode_step< ubvector, ubvector, ubvector, ode_funct > &step) |
Set the stepper for the Dirac differential equation. | |
The meson and photon fields and field equations (protected) | |
ubmatrix | field0 |
Values of the fields from the last iteration. | |
ubmatrix | fields |
The values of the fields. | |
ubmatrix | gin |
The Green's functions inside. | |
ubmatrix | gout |
The Green's functions outside. | |
int | surf_index |
The grid index corresponding to the nuclear surface (computed by init_run()) | |
double | sigma_rhs (double sig, double ome, double rho) |
Scalar density RHS. | |
double | omega_rhs (double sig, double ome, double rho) |
Vector density RHS. | |
double | rho_rhs (double sig, double ome, double rho) |
Isubvector density RHS. | |
void | meson_init () |
Calculate meson and photon Green's functions gin and gout. | |
void | meson_iter (double ic) |
Calculate meson and photon fields. More... | |
int | meson_solve () |
Solve for the meson profiles. | |
Calculating the form factor, etc. (protected) | |
interp_vec< ubvector > * | gi |
Interpolation object. | |
void | pfold (double x, double &xrhof) |
Fold in proton form factor. | |
double | xpform (double x, double xp, double a) |
Function representing proton form factor. | |
void | gauss (double xmin, double xmax, double x, double &xi) |
Perform integrations for form factor. | |
double | xrhop (double x1) |
Desc. | |
Solving the Dirac equations (protected) | |
ode_rkck_gsl< ubvector, ubvector, ubvector, ode_funct > | def_step |
The default stepper. | |
ode_step< ubvector, ubvector, ubvector, ode_funct > * | ostep |
The ODE stepper. | |
int | dirac (int ilevel) |
Solve the Dirac equations. More... | |
void | dirac_step (double &x, double h, double eigen, double kappa, ubvector &varr) |
Take a step in the Dirac equations. | |
int | odefun (double x, size_t nv, const ubvector &y, ubvector &dydx, odparms &op) |
The form of the Dirac equations for the ODE stepper. | |
void | field (double x, double &s, double &v, ubvector &varr) |
Compute the fields for the Dirac equations. | |
double | dirac_rk4 (double x, double g1, double f1, double &funt, double eigen, double kappa, ubvector &varr) |
Integrate the Dirac equations using a simple inline 4th order Runge-Kutta. | |
|
protected |
Solves the Dirac equation in from 12 fm to the match point and then out from .04 fm and adjusts eigenvalue with
|
inline |
The profiles are calculated each iteration by iterate().
Definition at line 324 of file nucleus_rmf.h.
void o2scl::nucleus_rmf::init_run | ( | int | nucleus_Z, |
int | nucleus_N, | ||
int | unocc_Z, | ||
int | unocc_N | ||
) |
Note that rmf must be set before run_nucleus() is called.
|
protected |
The meson and photon field equations are of the Sturm-Liouville form, e.g.
where and
. A solution of the homogeneous equation with
is
. The associated Green's function is
where is the smaller of
and
and
is the larger. One can then write the solution of the meson field equation given the density
Since radii are positive, and
The two terms in the Green's function are separated into
and
These functions are computed in meson_init() . Then the field is given by
where the first integral is stored in xi2
and the second is in xi1
in the function meson_iter() . The part of xi2
at is stored in
xi20
.
int o2scl::nucleus_rmf::run_nucleus | ( | int | nucleus_Z, |
int | nucleus_N, | ||
int | unocc_Z, | ||
int | unocc_N | ||
) |
Note that rmf must be set before run_nucleus() is called.
This calls init_run(), and then iterate() until iconverged
is 1, and then post_converge().
|
inline |
The equation of state must be set before run_nucleus() or init_fun() are called, including the value of eos_had_rmf::mnuc.
Definition at line 410 of file nucleus_rmf.h.
eos_had_rmf o2scl::nucleus_rmf::def_rmf |
This is set in the constructor to be the default model, NL3, using the function load_nl3().
Definition at line 403 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::etot |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 380 of file nucleus_rmf.h.
thermo o2scl::nucleus_rmf::hb |
This is just used as temporary storage.
Definition at line 419 of file nucleus_rmf.h.
initial_guess o2scl::nucleus_rmf::ig |
Default is {310,240,-6,25.9,6.85,0.6}
Definition at line 504 of file nucleus_rmf.h.
std::vector<shell> o2scl::nucleus_rmf::levels |
An array of size nlevels
Definition at line 337 of file nucleus_rmf.h.
fermion o2scl::nucleus_rmf::n |
The mass of the neutron is ignored and set by init_run() to be eos_had_rmf::mnuc from rmf.
Definition at line 426 of file nucleus_rmf.h.
fermion o2scl::nucleus_rmf::p |
The mass of the proton is ignored and set by init_run() to be eos_had_rmf::mnuc from rmf.
Definition at line 433 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::r_charge |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 386 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::r_charge_cm |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 392 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::rnrms |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 366 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::rnrp |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 359 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::rprms |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 373 of file nucleus_rmf.h.
double o2scl::nucleus_rmf::stens |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 352 of file nucleus_rmf.h.
std::vector<shell> o2scl::nucleus_rmf::unocc_levels |
An array of size nuolevels
Definition at line 346 of file nucleus_rmf.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).