#+TITLE: AtomicStructure.jl #+AUTHOR: Stefanos Carlström #+EMAIL: stefanos.carlstrom@gmail.com

[[https://juliaatoms.org/AtomicStructure.jl/stable/][https://img.shields.io/badge/docs-stable-blue.svg]] [[https://juliaatoms.org/AtomicStructure.jl/dev/][https://img.shields.io/badge/docs-dev-blue.svg]] [[https://github.com/JuliaAtoms/AtomicStructure.jl/actions][https://github.com/JuliaAtoms/AtomicStructure.jl/workflows/CI/badge.svg]] [[https://codecov.io/gh/JuliaAtoms/AtomicStructure.jl][https://codecov.io/gh/JuliaAtoms/AtomicStructure.jl/branch/master/graph/badge.svg]]

#+PROPERTY: header-args:julia :session julia-README

This library provides structures for representing atoms as linear combinations of single-particle orbitals.

  • Usage The radial coordinate is represented using a basis function expansion that fulfils the [[https://github.com/JuliaApproximation/ContinuumArrays.jl][ContinuumArrays.jl]] interface. The examples below use [[https://github.com/JuliaApproximation/CompactBases.jl][CompactBases.jl]], but AtomicStructure.jl is not dependent on which basis you choose.

    #+BEGIN_SRC julia :exports code using AtomicStructure using AtomicLevels using CompactBases #+END_SRC

    #+RESULTS: : nothing

** Grid setup The grid can be tailored to a specific nucleus, which is why we first decide the nuclear potential to be used, in this case a point charge corresponding to helium: #+BEGIN_SRC julia :exports both :results verbatim nucleus = pc"He" #+END_SRC

#+RESULTS: : Z = 2 [He]

#+BEGIN_SRC julia :exports both :results verbatim rₘₐₓ = 300 ρ = 0.25 # Discretization interval N = ceil(Int, rₘₐₓ/ρ + 1/2) # Finite-difference scheme that accounts for the boundary condition at # r = 0 R = StaggeredFiniteDifferences(N, ρ, float(charge(nucleus))) #+END_SRC

#+RESULTS: : Radial finite differences basis {Float64} on 0.125..300.125 (formally 0..300.125) with 1201 points spaced by ρ = 0.25

** Different atoms Non-relativistic helium, one configuration state function, the orbitals are automatically initialized to their hydrogenic values: #+BEGIN_SRC julia :exports both :results output verbatim Atom(R, csfs(c"1s2"), nucleus, verbosity=3) #+END_SRC

#+RESULTS: #+begin_example ⎡ Hydrogenic initialization of the orbitals of Atom{Float64,RadialDifferences{Float64,Int64}}(Z = 2 [He]) with 1 CSF ⎢ ⎡ Diagonalizing symmetry ℓ = s, maximum n = 1 => 1 eigenvalues required ⎢ ⎢ Target eigenvalue: ≤ -2.0 Ha ⎢ ⎢ Diagonalizing via arnoldi_shift_invert ⎢ ⎢ Schur values: [0.49955] ⎢ ⎢ Hydrogenic energies [-1.9981975] Ha ⎢ ⎢ Analytic energies [-2.0000000] Ha ⎢ ⎣ Δ [+1.803e-03] Ha ⎢ ⎢ [ Initial norm of 1s: 0.500000, 1-normalized: 5.000000e-01 ⎣

Atom{Float64,RadialDifferences{Float64,Int64}}(Z = 2 [He]) with 1 CSF: 1s²(₀¹S|¹S)+ #+end_example

Non-relativistic, with the =2s,2p,3s,3p,3d= orbitals as possible correlation orbitals: #+BEGIN_SRC julia :exports both :results output verbatim Atom(R, csfs(excited_configurations(c"1s2", os"2[s-p]"..., os"3[s-d]"...)), nucleus, verbosity=3) #+END_SRC

#+RESULTS: #+begin_example ⎡ Hydrogenic initialization of the orbitals of Atom{Float64,RadialDifferences{Float64,Int64}}(Z = 2 [He]) with 32 CSFs ⎢ ⎡ Diagonalizing symmetry ℓ = s, maximum n = 3 => 3 eigenvalues required ⎢ ⎢ Target eigenvalue: ≤ -2.0 Ha ⎢ ⎢ Diagonalizing via arnoldi_shift_invert ⎢ ⎢ Schur values: [0.49955, 0.285767, 0.264747] ⎢ ⎢ Hydrogenic energies [-1.9981975, -0.5006417, -0.2228092] Ha ⎢ ⎢ Analytic energies [-2.0000000, -0.5000000, -0.2222222] Ha ⎢ ⎣ Δ [+1.803e-03, -6.417e-04, -5.870e-04] Ha ⎢ ⎢ ⎡ Diagonalizing symmetry ℓ = d, maximum n = 3 => 1 eigenvalues required ⎢ ⎢ Target eigenvalue: ≤ -0.2222222222222222 Ha ⎢ ⎢ Diagonalizing via arnoldi_shift_invert ⎢ ⎢ Schur values: [4.5007] ⎢ ⎢ Hydrogenic energies [-0.2222567] Ha ⎢ ⎢ Analytic energies [-0.2222222] Ha ⎢ ⎣ Δ [-3.448e-05] Ha ⎢ ⎢ ⎡ Diagonalizing symmetry ℓ = p, maximum n = 3 => 2 eigenvalues required ⎢ ⎢ Target eigenvalue: ≤ -0.5 Ha ⎢ ⎢ Diagonalizing via arnoldi_shift_invert ⎢ ⎢ Schur values: [1.99957, 1.28594] ⎢ ⎢ Hydrogenic energies [-0.4998912, -0.2223581] Ha ⎢ ⎢ Analytic energies [-0.5000000, -0.2222222] Ha ⎢ ⎣ Δ [+1.088e-04, -1.359e-04] Ha ⎢ ⎢ ⎡ Initial norm of 1s: 0.500000, 1-normalized: 5.000000e-01 ⎢ ⎢ Initial norm of 2s: 0.500000, 1-normalized: 5.000000e-01 ⎢ ⎢ Initial norm of 2p: 0.500000, 1-normalized: 5.000000e-01 ⎢ ⎢ Initial norm of 3s: 0.500000, 1-normalized: 5.000000e-01 ⎢ ⎢ Initial norm of 3p: 0.500000, 1-normalized: 5.000000e-01 ⎢ ⎣ Initial norm of 3d: 0.500000, 1-normalized: 5.000000e-01 ⎣

Atom{Float64,RadialDifferences{Float64,Int64}}(Z = 2 [He]) with 32 CSFs: 32-element Array{CSF{Orbital,IntermediateTerm,Term},1}: 1s²(₀¹S|¹S)+
1s(₁²S|²S) 2s(₁²S|¹S)+ 1s(₁²S|²S) 2s(₁²S|³S)+ 1s(₁²S|²S) 3s(₁²S|¹S)+ 1s(₁²S|²S) 3s(₁²S|³S)+ 1s(₁²S|²S) 3d(₁²D|¹D)+ 1s(₁²S|²S) 3d(₁²D|³D)+ 2s²(₀¹S|¹S)+
2s(₁²S|²S) 3s(₁²S|¹S)+ 2s(₁²S|²S) 3s(₁²S|³S)+ 2s(₁²S|²S) 3d(₁²D|¹D)+ ⋮
3s²(₀¹S|¹S)+
3s(₁²S|²S) 3d(₁²D|¹D)+ 3s(₁²S|²S) 3d(₁²D|³D)+ 3p²(₀¹S|¹S)+
3p²(₂¹D|¹D)+
3p²(₂³P|³P)+
3d²(₀¹S|¹S)+
3d²(₂¹D|¹D)+
3d²(₂¹G|¹G)+
3d²(₂³P|³P)+
3d²(₂³F|³F)+ #+end_example

  • TODO/Ideas
    • Multiple eigenvalues per symmetry and/or Lagrange multipliers for orthogonality
    • Warn if core modelled by potential differs too much from core of configuration(s) to optimize
      • Optimize "frozen" orbitals as well
    • Virial theorem V/T = -2 as accuracy indicator
    • Number of eigenvalues required per equation
    • Tabulate bound spectra
    • Extension of atom
      • onto larger grid
      • more configurations (e.g. continuum)
    • Evaluate smaller effect [eg. (hyper)fine structure] by inclusion of new operators
      • via perturbation theory
        • tests of accuracy using analytic perturbation theory formulas, e.g. hyperfine splitting of Rb in magnetic fields.
      • reoptimization of orbitals (requires expansion of basis, if not working with spin-orbitals)
    • Generalize atomic operators
      • =AbstractAtomicOperator=
      • =DiagonalIntegral=
      • =RepulsionIntegral=
      • =MultipoleInteraction=
      • =Spin–orbit interaction=
      • &c.
    • Generalize notion of energy expression to derive arbitrary equations of motion, either for optimization of orbitals or for time propagation.