Zylatis / diracSCAS

Solves the Dirac equation for atomic potentials using the relativistic Hartree-Fock method. Calculates ionisation cross sections with high values for energy/momentum transfer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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:

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:

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.)

About

Solves the Dirac equation for atomic potentials using the relativistic Hartree-Fock method. Calculates ionisation cross sections with high values for energy/momentum transfer


Languages

Language:C++ 96.3%Language:Makefile 2.5%Language:Python 1.0%Language:Shell 0.3%