Equation of State Sub-Library: Version 0.910
Data Structures | Data Fields | Protected Member Functions | Protected Attributes | Static Protected Attributes
rmf_nucleus Class Reference

Spherical closed-shell nuclei with a relativistic mean-field model in the Hartree approximation. More...

#include <rmf_nucleus.h>


Detailed Description

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 $ ^{208}\mathrm{Pb} $ 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, $ \alpha $ is a generic index for the isospin, the radial quantum number $ n $ and the angular quantum numbers $ \kappa $ and $ m $. The meson fields are $ \sigma(r), \omega(r) $ and $ \rho(r) $. The baryon density is $ n(r) $, the neutron and proton densities are $ n_n(r) $ and $ n_p(r) $, and the baryon scalar density is $ n_s(r) $. The nucleon field equations are

\begin{eqnarray*} F^{\prime}_{\alpha}(r)- \frac{\kappa}{r} F_{\alpha}(r) + \left[ \varepsilon_{\alpha} - g_{\omega} \omega(r) - t_{\alpha} g_{\rho} \rho(r) - (t_{\alpha}+\frac{1}{2}) e A(r) - M + g_{\sigma} \sigma(r) \right] G_{\alpha}(r) &=& 0 \\ G^{\prime}_{\alpha}(r)+ \frac{\kappa}{r} G_{\alpha}(r) - \left[ \varepsilon_{\alpha} - g_{\omega} \omega(r) - t_{\alpha} g_{\rho} \rho(r) - (t_{\alpha}+\frac{1}{2}) e A(r) + M - g_{\sigma} \sigma(r) \right] F_{\alpha}(r) &=& 0 \end{eqnarray*}

where $ t_{\alpha} $ is 1/2 for protons and -1/2 for neutrons. The meson field equations are

\begin{eqnarray*} \sigma^{\prime \prime}(r) + \frac{2}{r} \sigma^{\prime}(r) - m_{\sigma}^2 \sigma &=& - g_{\sigma} n_s(r) + b M g_{\sigma}^3 \sigma^2 + c g_{\sigma}^4 \sigma^3 - g_{\rho}^2 \rho^2 \frac{\partial f}{\partial \sigma} \\ \omega^{\prime \prime}(r) + \frac{2}{r} \omega^{\prime}(r) - m_{\omega}^2 \omega &=& - g_{\omega} n(r) + \frac{\zeta}{6} g_{\omega}^4 \omega^3 + g_{\rho}^2 \rho^2 \frac{\partial f}{\partial \omega} \\ \rho^{\prime \prime}(r) + \frac{2}{r} \rho^{\prime}(r) - m_{\rho}^2 \rho &=& - \frac{g_{\rho}}{2} \left[n_n(r)-n_p(r)\right] + 2 g_{\rho}^2 \rho f + \frac{\xi}{6} g_{\rho}^4 \rho^3 \end{eqnarray*}

and the Coulomb field equation is

\[ A^{\prime \prime}(r) + \frac{2}{r} A^{\prime}(r) = - e n_p(r) \]

The densities are

\begin{eqnarray*} n_s &=& \sum_{\alpha} \left\{ \int d^3 r \left[ g(r)^2-f(r)^2 \right] \right\} \\ n &=& \sum_{\alpha} \left\{ \int d^3 r \left[ g(r)^2+f(r)^2 \right] \right\} \\ n_i &=& \sum_{\alpha} \left\{ t_{\alpha} \int d^3 r \left[ g(r)^2-f(r)^2 \right] \right\} \\ n_c &=& \sum_{\alpha} \left\{ \left[t_{\alpha}+\frac{1}{2}\right] \int d^3 r \left[ g(r)^2-f(r)^2 \right] \right\} \end{eqnarray*}

Using the Green function

\[ D(r,r^{\prime},m_i) = \frac{-1}{m_i r r^{\prime}} \sinh (m_i r_{<}) \exp (-m_i r_{>}) \]

one can write the meson field

\[ \sigma(r) = \int_0^{\infty} r^{\prime 2}~d r^{\prime} \left[ - g_{\sigma} \rho_{s}(r) \right] D\left(r,r^{\prime},m_{\sigma}\right) \]

When $ r > r^{\prime} $, and setting $ x = r^{\prime}-r $, the Green function is

\[ D = \frac{-1}{m_i r (x+r)} \sinh \left[m_i (x+r)\right] \exp (-m_i r) \]

When $ x >> r $,

The total energy is

\[ E = \sum_{\alpha} \varepsilon_{\alpha} (2 j_{\alpha}+1) - \frac{1}{2} \int d^{3} r \left[- g_{\sigma} \sigma(r) \rho_s(r) + g_{\omega} \omega(r) \rho(r) + \frac{1}{2} g_{\rho} \rho(r) + e A(r) n_p(r) \right] \]

The charge density is the proton density folded with the charge density of the proton, i.e.

\[ \rho_{\mathrm{ch}}(r) = \int d^{3} r^{\prime} \rho_{\mathrm{prot}}(r-r^{\prime}) \rho_p(r) \]

where the proton charge density is assumed to be of the form

\[ \rho_{\mathrm{prot}}(r) = \frac{\mu^3}{8 \pi} \exp \left( - \mu |r|\right) \]

and the parameter $ \mu = (0.71)^{1/2}~\mathrm{GeV} $ (see Eq. 20b in Horowitz81). The default value of a_proton is the value of $ \mu $ converted into $ \mathrm{fm}^{-1} $.

Todo:

Better documentation

Convert energies() to use EOS and possibly replace sigma_rhs() and related functions by the associated field equation method of rmf_eos.

Todo:
Document hw=3.923+23.265/cbrt(atot);
Idea for Future:
Sort energy levels at the end by energy
Idea for Future:
Improve the numerical methods
Idea for Future:
Make the neutron and proton orbitals more configurable
Idea for Future:
Generalize to $ m_n \neq m_p $ .
Idea for Future:
Allow more freedom in the integrations
Idea for Future:
Consider converting everything to inverse fermis.
Idea for Future:
Convert to zero-indexed arrays
Idea for Future:
Warn when the level ordering is wrong, and unoccupied levels are lower energy than occupied levels

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_eosrmf
 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< shelllevels
 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< shellunocc_levels
 The unoccupied levels (protons first, then neutrons)
double stens
 Surface tension (in $ \mathrm{fm}^{-3} $ )
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 $ 5 \times 10^{-3} $ ).
double dirac_tol2
 Second tolerance for Dirac equations (default $ 5 \times 10^{-4} $ ).
double meson_tol
 Tolerance for meson field equations (default $ 10^{-6} $ ).
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.

Member Function Documentation

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

\[ \Delta \varepsilon = -g(r=\mathrm{match\_point}) \times (f^{+}-f^{-}) \]


Field Documentation

std::vector<shell> rmf_nucleus::levels

An array of size nlevels

Definition at line 342 of file rmf_nucleus.h.

An array of size nuolevels

Definition at line 355 of file rmf_nucleus.h.

Computed in post_converge() or automatically in run_nucleus()

Definition at line 361 of file rmf_nucleus.h.

Computed every iteration in iterate() or automatically in run_nucleus()

Definition at line 368 of file rmf_nucleus.h.

Computed every iteration in iterate() or automatically in run_nucleus()

Definition at line 375 of file rmf_nucleus.h.

Computed every iteration in iterate() or automatically in run_nucleus()

Definition at line 382 of file rmf_nucleus.h.

Computed every iteration in iterate() or automatically in run_nucleus()

Definition at line 389 of file rmf_nucleus.h.

Computed in post_converge() or automatically in run_nucleus()

Definition at line 395 of file rmf_nucleus.h.

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.


The documentation for this class was generated from the following file:
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Friends

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).

Get Object-oriented Scientific Computing
Lib at SourceForge.net. Fast, secure and Free Open Source software
downloads.