![]() |
Equation of State Sub-Library: Version 0.910
|
Spherical closed-shell nuclei with a relativistic mean-field model in the Hartree approximation. More...
#include <rmf_nucleus.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 rmf_eos for Steiner05b, and then converted to C++ by Steiner afterwards.
The standard usage is something like:
rmf_nucleus rn; o2scl_hdf::rmf_load(rn.rmf,"NL4"); rn.run_nucleus(82,208,0,0); cout << rn.rnrp << endl;
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 is 1/2 for protons and -1/2 for neutrons. The meson field equations are
and the Coulomb field equation is
The densities are
Using the Green function
one can write the meson field
When , and setting
, the Green function is
When ,
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
.
Better documentation
Convert energies() to use EOS and possibly replace sigma_rhs() and related functions by the associated field equation method of rmf_eos.
Definition at line 237 of file rmf_nucleus.h.
Data Structures | |
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 rmf_nucleus. More... | |
Public Member Functions | |
Basic operation | |
void | 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. | |
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. | |
void | iterate (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N, int &iconverged) |
Perform an iteration. | |
int | post_converge (int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N) |
After convergence, make CM corrections, etc. | |
Data Fields | |
initial_guess | ig |
Parameters for initial guess. | |
bool | generic_ode |
If true, use the generic ODE solver instead of ... | |
Protected Member Functions | |
int | load_nl3 (rmf_eos &r) |
Load the default model NL3 into the given rmf_eos object. | |
void | init_meson_density () |
Initialize the meson fields, the densities, etc. | |
void | energies (double xpro, double xnu, double e) |
Calculate the energy profile. | |
void | center_mass_corr (double atot) |
Compute the center of mass correction. | |
double | gunt (double x, double g1, double f1, double &funt, double eigen, double kappa, uvector &varr) |
Integrate the Dirac equations using a simple inline 4th order Runge-Kutta. | |
Protected Attributes | |
double | a_proton |
The factor for the charge density of the proton (default 4.2707297) | |
rmf_eos * | rmf |
The base EOS. | |
o2_shared_ptr< table_units >::type | profiles |
The radial profiles. | |
o2_shared_ptr< table_units >::type | 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. | |
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. | |
double | mnuc |
The nucleon mass (automatically set in init_fun()) | |
uvector | energy |
Energy profile. | |
bool | init_called |
True if init() has been called. | |
double | ode_y [2] |
ODE functions. | |
double | ode_dydx [2] |
ODE derivatives. | |
double | ode_yerr [2] |
ODE errors. | |
Density information (protected) | |
umatrix | xrho |
The densities. | |
uvector | xrhosp |
The proton scalar density. | |
uvector | xrhos |
The scalar field RHS. | |
uvector | xrhov |
The vector field RHS. | |
uvector | xrhor |
The iso-vector field RHS. | |
uvector | chden1 |
Charge density. | |
uvector | chdenc |
Charge density. | |
uvector | 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. | |
Results | |
int | nlevels |
The number of levels. | |
std::vector< shell > | levels |
The levels (protons first, then neutrons) | |
int | nuolevels |
The number of unoccupied levels (equal to unocc_Z + unocc_N ) | |
int | last_conv |
Information on the last convergence error. | |
std::vector< shell > | unocc_levels |
The unoccupied levels (protons first, then neutrons) | |
double | stens |
Surface tension (in ![]() | |
double | rnrp |
Skin thickness (in fm) | |
double | rnrms |
Neutron RMS radius (in fm) | |
double | rprms |
Proton RMS radius (in fm) | |
double | etot |
Total energy (in MeV) | |
double | r_charge |
Charge radius (in fm) | |
double | r_charge_cm |
Charge radius corrected by the center of mass (in fm) | |
o2_shared_ptr< table_units >::type | get_profiles () |
Get the radial profiles. | |
o2_shared_ptr< table_units >::type | get_chden () |
The finaal charge densities. | |
Equation of state | |
rmf_eos | def_rmf |
The default equation of state (default NL3) | |
thermo | hb |
thermo object for the EOS | |
fermion | n |
The neutron. | |
fermion | p |
The proton. | |
int | set_eos (rmf_eos &r) |
Set the base EOS to be used. | |
Numeric configuration | |
typedef double | arr_t [2] |
The array type for the ODE solver. | |
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< ode_funct< arr_t >, arr_t > &step) |
Set the stepper for the Dirac differential equation. | |
The meson fields and field equations (protected) | |
umatrix | field0 |
Values of the fields from the last iteration. | |
umatrix | fields |
The values of the fields. | |
umatrix | gin |
The Green's functions inside. | |
umatrix | 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) |
Iso-vector density RHS. | |
void | mesint () |
Calculate meson Green's functions. | |
void | meson (double ic) |
Calculate meson fields. | |
void | meson_solve () |
Solve for the meson profiles. | |
Calculating the form factor, etc. (protected) | |
smart_interp_vec< uvector_base, uvector_const_subvector, uvector, uvector_alloc > * | 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) | |
gsl_rkck< ode_funct< arr_t > , arr_t, arr_t, array_alloc < arr_t > > | def_step |
The default stepper. | |
ode_step< ode_funct< arr_t > , arr_t > * | ostep |
The ODE stepper. | |
void | dirac (int ilevel) |
Solve the Dirac equations. | |
void | dirac_step (double &x, double h, double eigen, double kappa, uvector &varr) |
Take a step in the Dirac equations. | |
int | odefun (double x, size_t nv, const arr_t &y, arr_t &dydx, odparms &op) |
The form of the Dirac equations for the ODE stepper. | |
void | field (double x, double &s, double &v, uvector_base &varr) |
Compute the fields for the Dirac equations. |
void rmf_nucleus::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().
void rmf_nucleus::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.
o2_shared_ptr<table_units>::type rmf_nucleus::get_profiles | ( | ) | [inline] |
The profiles are calculated each iteration by iterate().
Definition at line 329 of file rmf_nucleus.h.
int rmf_nucleus::set_eos | ( | rmf_eos & | r | ) | [inline] |
The equation of state must be set before run_nucleus() or init_fun() are called, including the value of rmf_eos::mnuc.
Definition at line 419 of file rmf_nucleus.h.
void rmf_nucleus::dirac | ( | int | ilevel | ) | [protected] |
Solves the Dirac equation in from 12 fm to the match point and then out from .04 fm and adjusts eigenvalue with
std::vector<shell> rmf_nucleus::levels |
An array of size nlevels
Definition at line 342 of file rmf_nucleus.h.
std::vector<shell> rmf_nucleus::unocc_levels |
An array of size nuolevels
Definition at line 355 of file rmf_nucleus.h.
double rmf_nucleus::stens |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 361 of file rmf_nucleus.h.
double rmf_nucleus::rnrp |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 368 of file rmf_nucleus.h.
double rmf_nucleus::rnrms |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 375 of file rmf_nucleus.h.
double rmf_nucleus::rprms |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 382 of file rmf_nucleus.h.
double rmf_nucleus::etot |
Computed every iteration in iterate() or automatically in run_nucleus()
Definition at line 389 of file rmf_nucleus.h.
double rmf_nucleus::r_charge |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 395 of file rmf_nucleus.h.
double rmf_nucleus::r_charge_cm |
Computed in post_converge() or automatically in run_nucleus()
Definition at line 401 of file rmf_nucleus.h.
This is set in the constructor to be the default model, NL3, using the function load_nl3().
Definition at line 412 of file rmf_nucleus.h.
This is just used as temporary storage.
Definition at line 428 of file rmf_nucleus.h.
The mass of the neutron is ignored and set by init_run() to be rmf_eos::mnuc from rmf.
Definition at line 435 of file rmf_nucleus.h.
The mass of the proton is ignored and set by init_run() to be rmf_eos::mnuc from rmf.
Definition at line 442 of file rmf_nucleus.h.
If this is false, the function proceeds normally and may provide convergence information in last_conv.
Definition at line 454 of file rmf_nucleus.h.
Default is {310,240,-6,25.9,6.85,0.6}
Definition at line 518 of file rmf_nucleus.h.
Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).