Relativistic, self-consistent atomic structure code.
Solves the Dirac equation for atomic systems using the Hartree-Fock method. Fully relativistic, includes finite-nuclear size, and can solve for continuum states (energy normalisation).
- With reasonable choices for the integration grids, energies typically converge to better than a few parts in 10^16, and HF to 10^13
- Includes an option to vary the effective speed of light - allowing non-relativistic approximation.
- Orbitals are in form psi = (1/r) [f,ig], (using Dirac basis)
Compilation:
- All programs compiled using the Makefile (run $make or $make programName)
- Install make on ubutnu: $sudo apt-get install make
- Tested with g++, clang++, and icpc. (requires c++14)
Note: makes use of GSL libraries: https://www.gnu.org/software/gsl/, and LAPACK. These must be installed for the code to run
- For example, install GSL with ubuntu: $sudo apt-get install libgsl-dev
- And LAPACK/BLAS: $sudo apt-get install libatlas-base-dev liblapack-dev libblas-dev
The above instructions are for linux (ubuntu). For windows, the easiest way (for me, anyway) is to make use of the recent 'windows subsystem for linux'. Instructions on installation/use here: https://www.roberts999.com/posts/2018/11/wsl-coding-windows-ubuntu Then, the compilation + use can proceed as per above.
hartreeFock (main program)
- Solves relativistic Hartree-Fock potential for core + valence states
- Input taken from a plain text file.
- See "hartreeFock.in" for minimal input example.
May re-name this file (e.g., to "filename.txt"), then run as:
- $ ./hartreeFock filename.txt
- (Otherwise, program will assume file name is 'hartreeFock.in')
- see doc/ folder for a full list of input options + descriptions
Documentation
- Documentation is in doc/ directory. Contains three documents:
- 01-hartreeFock_input -- How to use the code (input options + descriptions)
- 02-diracSCAS_method -- What the code does (description of physics)
- 03-diracSCAS_code -- Documentation for code objects/functions etc. [coming "soon" (not soon)]
Other programs:
periodicTable
Command-line periodic table, with electron configurations and nuclear data
- Compiled using the Makefile (run $make, must habe 'make' installed)
- Alternatively, compile with command: $g++ src/Physics/AtomData.cpp src/Physics/NuclearData.cpp src/periodicTable.cpp -o periodicTable -I./src/
- No other dependencies
Gives info regarding particular element, including Z, default A, and electron configuration. Takes input in one line from command line.
Usage: (examples)
- $./periodicTable Prints periodic table
- $./periodicTable Cs Info for Cs with default A
- $./periodicTable Cs 137 Info for Cs-137
- $./periodicTable Cs all Info for all available Cs isotopes
- Note: numbers come from online database, and have some errors, so should be checked if needed.
Or, enter 'c' to print list of physics constants
- $./periodicTable c Prints values for some handy physical constants
Note: ground-state electron configurations are "guessed", and can sometimes be incorrect.
Nuclear radius data mostly comes from:
- I. Angeli and K. P. Marinova, At. Data Nucl. Data Tables 99, 69 (2013). https://doi.org/10.1016/j.adt.2011.12.006
Units:
- r_rms: root-mean-square radius, in fm.
- c: half-density radius (assuming Fermi nuclear distro)
- mu: magnetic moment (in nuclear magnetons)
dmeXSection
- Calculates the cross-section and event rates for ionisation of atoms by scattering of DM particle.
- Takes in the output of "atomicKernal" (see doc/ for details)
- Also calculates "observable" event rates, accounting for detector thresholds and resolutions (for DAMA/LIBRA and XENON100-like detectors).
- For definitions/details, see:
- B.M. Roberts, V.V. Flambaum Phys.Rev.D 100, 063017 (2019); arXiv:1904.07127.
- B.M.Roberts, V.A.Dzuba, V.V.Flambaum, M.Pospelov, Y.V.Stadnik, Phys.Rev.D 93, 115037 (2016); arXiv:1604.04559.
wigner
- Small routine to calculate 3,6,9-j symbols, and Clebsch Gordon coefficients
- Either give input via command line directly (quote marks required)
- e.g., ./wigner '<0.5 -0.5, 0.5 0.5| 1 0>'
- or e.g., ./wigner '(0.5 1 0.5, -0.5 0 0.5)' etc.
- Or, give an input file, that contains any number of symbols, all on new line
- e.g., ./wigner -f myInputFile.in
- nb: the '-f' flag can be dropped in the '.in' file extension is used
- Do not use quote marks in input file. Lines marked '!' or '#' are comments
- 3j symbols must start with '('; 6,9j with '{', and CG with '<' (this is how code knows which symbol to calculate).
- but, each number can be separated by any symbol (space, comma etc.)