32 #include <o2scl/interp.h> 33 #include <o2scl/constants.h> 34 #include <o2scl/part.h> 35 #include <o2scl/eos_had_rmf.h> 36 #include <o2scl/table_units.h> 37 #include <o2scl/ode_rkck_gsl.h> 38 #include <o2scl/ode_funct.h> 40 #ifndef DOXYGEN_NO_O2NS 226 #ifndef DOXYGEN_INTERNAL 286 int run_nucleus(
int nucleus_Z,
int nucleus_N,
int unocc_Z,
int unocc_N);
299 void init_run(
int nucleus_Z,
int nucleus_N,
int unocc_Z,
int unocc_N);
302 int iterate(
int nucleus_Z,
int nucleus_N,
int unocc_Z,
int unocc_N,
303 int &iconverged,
int &dirac_converged,
int &meson_converged);
306 int post_converge(
int nucleus_Z,
int nucleus_N,
int unocc_Z,
int unocc_N);
503 #ifndef DOXYGEN_INTERNAL 566 double sigma_rhs(
double sig,
double ome,
double rho);
569 double omega_rhs(
double sig,
double ome,
double rho);
572 double rho_rhs(
double sig,
double ome,
double rho);
697 void pfold(
double x,
double &xrhof);
700 double xpform(
double x,
double xp,
double a);
703 void gauss(
double xmin,
double xmax,
double x,
double &xi);
706 double xrhop(
double x1);
724 int dirac(
int ilevel);
727 void dirac_step(
double &x,
double h,
double eigen,
728 double kappa, ubvector &varr);
731 int odefun(
double x,
size_t nv,
const ubvector &y,
735 void field(
double x,
double &s,
double &v, ubvector &varr);
742 ode_step<ubvector,ubvector,ubvector,
748 double dirac_rk4(
double x,
double g1,
double f1,
double &funt,
749 double eigen,
double kappa, ubvector &varr);
766 double x12[6], w12[6];
767 double x100[50], w100[50];
774 #ifndef DOXYGEN_NO_O2NS
void pfold(double x, double &xrhof)
Fold in proton form factor.
double dirac_tol
Tolerance for Dirac equations (default ).
eos_had_rmf * rmf
The base EOS.
double stens
Surface tension (in )
bool generic_ode
If true, use the generic ODE solver instead of the internal 4th order Runge-Kutta.
A convenient struct for the solution of the Dirac equations.
int energy_radii(double xpro, double xnu, double e)
Calculate the energy profile.
double energy
Energy eigenvalue.
double omega0
Vector field at r=0.
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.
double rprms
Proton RMS radius (in fm)
shell proton_shells[n_internal_levels]
The starting proton levels.
ubvector xrhor
The isubvector field RHS.
ubmatrix field0
Values of the fields from the last iteration.
Spherical closed-shell nuclei with a relativistic mean-field model in the Hartree approximation...
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.
double etot
Total energy (in MeV)
bool err_nonconv
If true, call the error handler if the routine does not converge or reach the desired tolerance (defa...
std::shared_ptr< table_units<> > profiles
The radial profiles.
std::shared_ptr< table_units<> > get_profiles()
Get the radial profiles.
static const int grid_size
The grid size.
ubvector chdenc
Charge density.
double A0
Coulomb field at r=0.
double step_size
The grid step size (default 0.04)
double r_charge_cm
Charge radius corrected by the center of mass (in fm)
int nlevels
The number of levels.
double sigma0
Scalar field at r=0.
A shell of nucleons for nucleus_rmf.
void init_meson_density()
Initialize the meson and photon fields, the densities, etc.
ubmatrix gin
The Green's functions inside.
double dirac_tol2
Second tolerance for Dirac equations (default ).
ubvector xrhos
The scalar field RHS.
double match_point
Matching radius (in fm)
double fermi_radius
The radius for which the fields are half their central value.
std::vector< shell > levels
The levels (protons first, then neutrons)
void meson_iter(double ic)
Calculate meson and photon fields.
Relativistic mean field theory EOS.
int set_eos(eos_had_rmf &r)
Set the base EOS to be used.
interp_vec< ubvector > * gi
Interpolation object.
double rnrp
Skin thickness (in fm)
shell neutron_shells[n_internal_levels]
The starting neutron levels.
double meson_tol
Tolerance for meson field equations (default ).
ubmatrix fields
The values of the fields.
ubvector energy
Energy integrand.
bool init_called
True if init() has been called.
double xpform(double x, double xp, double a)
Function representing proton form factor.
int itmax
Maximum number of total iterations (default 70)
ode_rkck_gsl< ubvector, ubvector, ubvector, ode_funct > def_step
The default stepper.
std::function< int(double, size_t, const boost::numeric::ublas::vector< double > &, boost::numeric::ublas::vector< double > &)> ode_funct
eos_had_rmf def_rmf
The default equation of state (default NL3)
int load_nl3(eos_had_rmf &r)
Load the default model NL3 into the given eos_had_rmf object.
void init_run(int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N)
Initialize a run.
ubvector xrhosp
The proton scalar density times radius squared.
void set_step(ode_step< ubvector, ubvector, ubvector, ode_funct > &step)
Set the stepper for the Dirac differential equation.
double rho0
Isubvector field at r=0.
void center_mass_corr(double atot)
Compute the center of mass correction.
int meson_solve()
Solve for the meson profiles.
int odefun(double x, size_t nv, const ubvector &y, ubvector &dydx, odparms &op)
The form of the Dirac equations for the ODE stepper.
initial_guess ig
Parameters for initial guess.
int dirac(int ilevel)
Solve the Dirac equations.
double fermi_width
The "width" of the Fermi-Dirac function.
std::vector< shell > * levp
A pointer to the current vector of levels (either levels or unocc_levels)
double a_proton
The parameter for the charge density of the proton (default is about 4.27073)
void gauss(double xmin, double xmax, double x, double &xi)
Perform integrations for form factor.
double sigma_rhs(double sig, double ome, double rho)
Scalar density RHS.
double omega_rhs(double sig, double ome, double rho)
Vector density RHS.
ubvector arho
Baryon density.
int surf_index
The grid index corresponding to the nuclear surface (computed by init_run())
int post_converge(int nucleus_Z, int nucleus_N, int unocc_Z, int unocc_N)
After convergence, make CM corrections, etc.
int meson_itmax
Maximum number of iterations for solving the meson field equations (default 10000) ...
ubvector xrhov
The vector field RHS.
ubvector ode_dydx
ODE derivatives.
void field(double x, double &s, double &v, ubvector &varr)
Compute the fields for the Dirac equations.
thermo hb
thermo object for the EOS
double isospin
Isospin ( or .
ubvector chden1
Charge density.
ubvector ode_yerr
ODE errors.
int dirac_itmax
Maximum number of iterations for solving the Dirac equations (default 100)
ode_step< ubvector, ubvector, ubvector, ode_funct > * ostep
The ODE stepper.
void set_verbose(int v)
Set output level.
double rnrms
Neutron RMS radius (in fm)
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.
ubvector ode_y
ODE functions.
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.
std::string state
Angular momentum-spin state .
double r_charge
Charge radius (in fm)
double xrhop(double x1)
Desc.
int nodes
Number of nodes in the wave function.
double mnuc
The nucleon mass (automatically set in init_fun())
void dirac_step(double &x, double h, double eigen, double kappa, ubvector &varr)
Take a step in the Dirac equations.
ubmatrix xrho
The densities times radius squared.
std::shared_ptr< table_units<> > chden_table
The final charge densities.
int nuolevels
The number of unoccupied levels (equal to unocc_Z + unocc_N)
int verbose
Control output (default 1)
std::vector< shell > unocc_levels
The unoccupied levels (protons first, then neutrons)
double kappa
Quantum number .
static const int n_internal_levels
The total number of shells stored internally.
std::shared_ptr< table_units<> > get_chden()
The final charge densities.
ubmatrix * fields
The meson fields.
ubmatrix gout
The Green's functions outside.