Nuclear structure in the Hartree approximation

See class o2scl::nucleus_rmf .

Nucleus in the Hartree approximation example

This example uses the NL3 EOS as implemented in o2scl::eos_had_rmf and computes the structure of $ ^{208}\mathrm{Pb} $ using o2scl::nucleus_rmf. The results are stored in o2scl::table_units objects and output to HDF files. It also computes the energy of three unoccupied neutron and proton levels.

/* Example: ex_nucleus_rmf.cpp
-------------------------------------------------------------------
This example uses the NL3 interaction to compute the structure
of Lead-208
*/
#include <o2scl/nucleus_rmf.h>
#include <o2scl/test_mgr.h>
#ifdef O2SCL_HDF
#include <o2scl/hdf_io.h>
#include <o2scl/hdf_eos_io.h>
#endif
using namespace std;
using namespace o2scl;
using namespace o2scl_const;
#ifdef O2SCL_HDF
using namespace o2scl_hdf;
#endif
int lead_chden_exp(std::shared_ptr<table_units<> > profiles);
int main(int argc, char *argv[]) {
cout.setf(ios::scientific);
rn.set_verbose(0);
rmf_load(rn.def_rmf,"NL3");
rn.run_nucleus(82,126,3,3);
bool neutron=false;
cout << "Proton orbitals: " << endl;
cout << "Index State Energy Nodes Deg." << endl;
for(int i=0;i<rn.nlevels;i++) {
if (rn.levels[i].isospin<0.0 && neutron==false) {
cout << endl;
cout << "Neutron orbitals: " << endl;
cout << "Index State Energy Nodes Deg." << endl;
neutron=true;
}
cout.width(2);
cout << i << " ";
cout.width(12);
cout.setf(ios::left);
cout << rn.levels[i].state << " ";
cout.unsetf(ios::left);
cout << rn.levels[i].eigen << " "
<< rn.levels[i].nodes << " "
<< rn.levels[i].twojp1 << endl;
}
cout << endl;
cout << "Proton orbitals: " << endl;
cout << "Index State Energy Nodes Deg." << endl;
neutron=false;
for(int i=0;i<rn.nuolevels;i++) {
if (rn.unocc_levels[i].isospin<0.0 && neutron==false) {
cout << endl;
cout << "Neutron orbitals: " << endl;
cout << "Index State Energy Nodes Deg." << endl;
neutron=true;
}
cout.width(2);
cout << i << " ";
cout.width(12);
cout.setf(ios::left);
cout << rn.unocc_levels[i].state << " ";
cout.unsetf(ios::left);
cout << rn.unocc_levels[i].eigen << " "
<< rn.unocc_levels[i].nodes << " "
<< rn.unocc_levels[i].twojp1 << endl;
}
cout << endl;
cout << "Proton RMS radius : " << rn.rprms << " fm." << endl;
cout << "Neutron RMS radius : " << rn.rnrms << " fm." << endl;
cout << "Total energy per nucleon: " << rn.etot << " MeV." << endl;
cout << endl;
t.test_rel(-7.842551,rn.etot,1.0e-5,"Lead binding energy");
std::shared_ptr<table_units<> > profiles=rn.get_profiles();
lead_chden_exp(profiles);
#ifdef O2SCL_HDF
hdf_file hf2;
hf.open_or_create("ex_nucleus_rmf_prof.o2");
hf2.open_or_create("ex_nucleus_rmf_chden.o2");
std::shared_ptr<table_units<> > charge_dens=rn.get_chden();
hdf_output(hf,*profiles,"profiles");
hdf_output(hf2,*charge_dens,"charge_densities");
hf.close();
hf2.close();
//profiles.line_of_names(((string)"r rhop rhon sig ome rho ")+
//"coul chden rhosp rhosn ");
//chden_table.line_of_names("x chden1 chdenc");
#endif
t.report();
return 0;
}
// End of example
Nucleon density distributions in Pb-208

Typical output:

Proton orbitals: 
Index State      Energy       Nodes Deg.
 0 ^{1}s_{1/2}  -4.848748e+01 0     2
 1 ^{1}p_{3/2}  -4.288159e+01 0     4
 2 ^{1}p_{1/2}  -4.220057e+01 0     2
 3 ^{1}d_{5/2}  -3.586023e+01 0     6
 4 ^{1}d_{3/2}  -3.429919e+01 0     4
 5 ^{2}s_{1/2}  -3.054878e+01 1     2
 6 ^{1}f_{7/2}  -2.786126e+01 0     8
 7 ^{1}f_{5/2}  -2.508489e+01 0     6
 8 ^{2}p_{3/2}  -2.058053e+01 1     4
 9 ^{2}p_{1/2}  -1.951978e+01 1     2
10 ^{1}g_{9/2}  -1.922203e+01 0     10
11 ^{1}g_{7/2}  -1.501610e+01 0     8
12 ^{2}d_{5/2}  -1.081390e+01 1     6
13 ^{1}h_{11/2} -1.020303e+01 0     12
14 ^{2}d_{3/2}  -9.184272e+00 1     4
15 ^{3}s_{1/2}  -8.054054e+00 2     2

Neutron orbitals: 
Index State      Energy       Nodes Deg.
16 ^{1}s_{1/2}  -5.903999e+01 0     2
17 ^{1}p_{3/2}  -5.283626e+01 0     4
18 ^{1}p_{1/2}  -5.224434e+01 0     2
19 ^{1}d_{5/2}  -4.536117e+01 0     6
20 ^{1}d_{3/2}  -4.394391e+01 0     4
21 ^{2}s_{1/2}  -4.083662e+01 1     2
22 ^{1}f_{7/2}  -3.699136e+01 0     8
23 ^{1}f_{5/2}  -3.438846e+01 0     6
24 ^{2}p_{3/2}  -3.046551e+01 1     4
25 ^{2}p_{1/2}  -2.940207e+01 1     2
26 ^{1}g_{9/2}  -2.806148e+01 0     10
27 ^{1}g_{7/2}  -2.402928e+01 0     8
28 ^{2}d_{5/2}  -2.046789e+01 1     6
29 ^{1}h_{11/2} -1.884691e+01 0     12
30 ^{2}d_{3/2}  -1.881771e+01 1     4
31 ^{3}s_{1/2}  -1.807312e+01 2     2
32 ^{1}h_{9/2}  -1.335125e+01 0     10
33 ^{2}f_{7/2}  -1.100552e+01 1     8
34 ^{1}i_{13/2} -9.576804e+00 0     14
35 ^{2}f_{5/2}  -8.991761e+00 1     6
36 ^{3}p_{3/2}  -8.290647e+00 2     4
37 ^{3}p_{1/2}  -7.515362e+00 2     2

Proton orbitals: 
Index State      Energy       Nodes Deg.
 0 ^{3}s_{1/2}  -8.057079e+00 2     2
 1 ^{1}h_{9/2}  -4.550103e+00 0     10
 2 ^{2}f_{7/2}  -1.365592e+00 1     8

Neutron orbitals: 
Index State      Energy       Nodes Deg.
 3 ^{1}i_{11/2} -2.912219e+00 0     12
 4 ^{1}j_{15/2} -5.639563e-01 0     16
 5 ^{3}d_{5/2}  -1.097961e+00 2     6

Proton RMS radius       :  5.460268e+00 fm.
Neutron RMS radius      :  5.740404e+00 fm.
Total energy per nucleon: -7.842549e+00 MeV.

1 tests performed.
All tests passed.
o2scl::nucleus_rmf::get_chden
std::shared_ptr< table_units<> > get_chden()
The final charge densities.
Definition: nucleus_rmf.h:320
o2scl_const
hdf_output
void hdf_output(hdf_file &hf, o2scl::uniform_grid< double > &h, std::string name)
o2scl::nucleus_rmf::rnrms
double rnrms
Neutron RMS radius (in fm)
Definition: nucleus_rmf.h:358
o2scl::nucleus_rmf::run_nucleus
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.
o2scl::test_mgr::report
bool report() const
o2scl_hdf::hdf_file::close
void close()
o2scl::nucleus_rmf::unocc_levels
std::vector< shell > unocc_levels
The unoccupied levels (protons first, then neutrons)
Definition: nucleus_rmf.h:338
o2scl::nucleus_rmf::levels
std::vector< shell > levels
The levels (protons first, then neutrons)
Definition: nucleus_rmf.h:329
o2scl::nucleus_rmf
Spherical closed-shell nuclei with a relativistic mean-field model in the Hartree approximation.
Definition: nucleus_rmf.h:221
o2scl::table_units
o2scl::test_mgr::test_rel
bool test_rel(data_t result, data_t expected, data_t rel_error, std::string description)
o2scl::nucleus_rmf::set_verbose
void set_verbose(int v)
Set output level.
Definition: nucleus_rmf.h:289
o2scl::test_mgr
o2scl_hdf
Additional functions to read and write EOS data to HDF5 files.
o2scl_hdf::rmf_load
void rmf_load(o2scl::eos_had_rmf &rmf, std::string model, bool external=false)
Input a o2scl::eos_had_rmf object from an HDF file.
o2scl::nucleus_rmf::rprms
double rprms
Proton RMS radius (in fm)
Definition: nucleus_rmf.h:365
o2scl::nucleus_rmf::def_rmf
eos_had_rmf def_rmf
The default equation of state (default NL3)
Definition: nucleus_rmf.h:395
o2scl::test_mgr::set_output_level
void set_output_level(int l)
o2scl_hdf::hdf_file
o2scl_hdf::hdf_file::open_or_create
void open_or_create(std::string fname)
o2scl::nucleus_rmf::get_profiles
std::shared_ptr< table_units<> > get_profiles()
Get the radial profiles.
Definition: nucleus_rmf.h:316
o2scl::nucleus_rmf::nlevels
int nlevels
The number of levels.
Definition: nucleus_rmf.h:320
o2scl::nucleus_rmf::etot
double etot
Total energy (in MeV)
Definition: nucleus_rmf.h:372
o2scl::nucleus_rmf::nuolevels
int nuolevels
The number of unoccupied levels (equal to unocc_Z + unocc_N)
Definition: nucleus_rmf.h:332

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