Table of Contents

CalculateAtomicBasisFunctions

CalculateAtomicBasisFunctions(Z, Configuration, Options) calculates the radial functions of the orbitals of an atom. CalculateAtomicBasisFunctions(Z) is enough for the ground state of the neutral atom. The atom is calculated self-consistently, relativistically (Dirac equation) or nonrelativistically (Schrödinger equation), either in the configuration-average Hartree-Fock approximation or in density functional theory (LDA, PBE). The radial functions are expanded in B-splines and returned as interpolating functions.

Beyond the orbitals of the ground state, the function can generate basis functions for a solid or a molecule: empty and polarization orbitals, and orbitals contracted by a confining potential or an extra nuclear charge, each orbital with its own parameters. All functions returned are orthonormal.

Example

The nickel atom with all defaults: its ground-state configuration, Dirac-Fock, and a Gaussian nucleus of the most abundant isotope, $^{58}$Ni. Energies are in Hartree, lengths in bohr.

Example.Quanty
-- the Ni atom: the ground-state configuration, Dirac-Fock, a Gaussian nucleus of 58Ni
G, F, x, Atom = CalculateAtomicBasisFunctions(28)
 
print(Atom.Configuration, Atom.A)
 
print(string.format("Etot = %.6f Hartree, converged in %d iterations", Atom.Etot, Atom.Iterations))
for i, o in ipairs(Atom.Orbitals) do
  print(string.format("%-6s occupation %5.3f   energy %13.6f   <r> %8.5f", o.Label, o.Occupation, o.Energy, o.RExpectation[1]))
end
local Fk = Atom.SlaterIntegralsNL["3d 3d 3d 3d"]
print(string.format("F2(3d,3d) = %.4f eV, F4(3d,3d) = %.4f eV, zeta(3d) = %.4f eV", Fk[2]*27.211386, Fk[4]*27.211386, Atom.Zeta["3d"]*27.211386))
Example.out
[Ar] 3d8 4s2	58
Etot = -1519.305625 Hartree, converged in 13 iterations
1s1/2  occupation 2.000   energy   -308.949448   <r>  0.05406
2s1/2  occupation 2.000   energy    -38.645530   <r>  0.24347
2p1/2  occupation 2.000   energy    -33.535006   <r>  0.21278
2p3/2  occupation 4.000   energy    -32.882964   <r>  0.21593
3s1/2  occupation 2.000   energy     -5.009863   <r>  0.73947
3p1/2  occupation 2.000   energy     -3.365576   <r>  0.77486
3p3/2  occupation 4.000   energy     -3.278732   <r>  0.78430
3d3/2  occupation 3.200   energy     -0.685811   <r>  0.96874
3d5/2  occupation 4.800   energy     -0.675628   <r>  0.97538
4s1/2  occupation 2.000   energy     -0.281529   <r>  3.01211
F2(3d,3d) = 11.9417 eV, F4(3d,3d) = 7.4024 eV, zeta(3d) = 0.1108 eV

Each $nl$ shell is split into its two $j$ subshells, $nl_{j=l-1/2}$ and $nl_{j=l+1/2}$, with the electrons shared in proportion to $2j+1$ (the average over the configuration). Atom.SlaterIntegralsNL holds the Slater integrals of the $nl$ shells, Atom.Zeta the spin-orbit coupling constants $\zeta_{nl}$.

Input

Output

All energies are in Hartree and all lengths in bohr. The speed of light is PhysicalConstants.cAU.value.

The configuration

The configuration lists the occupation of the shells, for example “1s2 2s2 2p6 3s2 3p6 3d8 4s2”, with “[He]”, “[Ne]”, “[Ar]”, “[Kr]”, “[Xe]” and “[Rn]” for the closed shells of the noble gases. Occupations may be fractional. An $nl$ entry such as “3d8” is averaged over all $4l+2$ spin-orbitals of the shell. A relativistic subshell can be given its own occupation in brackets, “[Kr] 4d3/2(4) 4d5/2(5)”; it is then averaged over its own $2j+1$ spin-orbitals only. Both forms can be mixed. An occupation of 0 adds an empty orbital to the calculation, “4p0” or “5p1/2(0)”.

With “Method” “DHF” the total energy is the average of the energies of all Slater determinants of the configuration (the average of configuration of Cowan's programs, or its relativistic counterpart). The orbitals minimize this average. The density functional methods use the spherical density of the mean occupations.

Using the Slater integrals in a multiplet calculation

The Hartree-Fock Slater integrals and the spin-orbit coupling of Ni$^{2+}$ ($3d^8$) in the usual nonrelativistic shell. The energies of the multiplets follow; the progress output of Eigensystem is left out.

Example.Quanty
-- Hartree-Fock Slater integrals and spin-orbit coupling of Ni2+ in a 3d8 multiplet calculation
G, F, x, Atom = CalculateAtomicBasisFunctions(28, "[Ar] 3d8")
eV = 27.211386
F2 = Atom.SlaterIntegralsNL["3d 3d 3d 3d"][2]*eV
F4 = Atom.SlaterIntegralsNL["3d 3d 3d 3d"][4]*eV
zeta = Atom.Zeta["3d"]*eV
print(string.format("F2 = %.4f eV, F4 = %.4f eV, zeta = %.4f eV", F2, F4, zeta))
 
NF = 10
IndexDn = {0, 2, 4, 6, 8}
IndexUp = {1, 3, 5, 7, 9}
H = NewOperator("U", NF, IndexUp, IndexDn, {0, F2, F4}) + zeta*NewOperator("ldots", NF, IndexUp, IndexDn)
psiList = Eigensystem(H, {NF, 0, {"1111111111", 8, 8}}, 45)
E0 = psiList[1]*H*psiList[1]
for i = 1, #psiList, 1 do
  local E = psiList[i]*H*psiList[i]
  if i == 1 or math.abs(E - (psiList[i-1]*H*psiList[i-1])) > 1e-6 then print(string.format("%8.4f eV", E - E0)) end
end
Example.out
F2 = 12.2301 eV, F4 = 7.5950 eV, zeta = 0.1099 eV
  0.0000 eV
  0.2234 eV
  0.3723 eV
  2.1473 eV
  2.6260 eV
  2.6757 eV
  2.7169 eV
  3.3395 eV
  7.9983 eV

These are the $^3F_{4,3,2}$, $^1D_2$, $^3P_{2,1,0}$, $^1G_4$ and $^1S_0$ levels of the free ion. In a crystal the Hartree-Fock values of $F^2$ and $F^4$ are usually reduced, often to about 80 %.

The relativistic many-electron Hamiltonian

The functions G and F can be used with NewOperator(“Dirac”, …) and NewOperator(“AU”, …). For these functions both operators are calculated exactly on the B-spline basis of the atom. The one-particle operator takes the model of the nucleus from the option list Atom.Nucleus. For a closed-shell atom the energy of the Hartree-Fock Slater determinant is the total energy.

Example.Quanty
-- the full relativistic Hamiltonian of Ne from its own Dirac-Fock orbitals
G, F, x, Atom = CalculateAtomicBasisFunctions(10)
indices, NF = CreateAtomicIndicesList(Atom.Labels, {{"Kappas", true}})
H = NewOperator("Dirac", NF, 10, indices, G, F, Atom.Nucleus) + NewOperator("AU", NF, indices, G, F)
psi = NewWavefunction(NF, 0, {{string.rep("1", NF), 1}})
print(string.format("Etot = %.10f Hartree, <psi|H|psi> = %.10f Hartree", Atom.Etot, psi*H*psi))
Example.out
Etot = -128.6919305272 Hartree, <psi|H|psi> = -128.6919305272 Hartree

Basis functions with confinement and an extra nuclear charge

For a calculation of a solid or a molecule one often wants more compact functions than those of the free atom, and functions for orbitals that are empty in the atom. Every orbital $(n, \kappa)$ can be given

The function of such an orbital comes from its own calculation, in which only the equation of that orbital has the nuclear charge $Z + Q$ and the confinement; all other electrons see the nucleus $Z$ and no confinement. For an occupied orbital this calculation is self-consistent, for an empty orbital it is one solution in the potential of the atom. The functions from these different calculations are not orthogonal; they are made orthonormal per $\kappa$, from the lowest $n$ upwards, so the lowest orbital of every $\kappa$ keeps its shape. With “Confinement” every orbital is confined; “P” of an orbital changes its radius.

Example.Quanty
-- a confined basis for Fe: all orbitals up to 5s, 4p and 4d, the empty 4p and 4d contracted
G, F, x, Atom = CalculateAtomicBasisFunctions(26, "[Ar] 3d6 4s2", {{"Method", "LDA"},
  {"NMax", {s = 5, p = 4, d = 4}},
  {"Confinement", {Rho = 4, N = 8}},
  {"Q", {["4p"] = 1, ["4d"] = 2}},
  {"P", {["4d"] = 0.8}}})
for i, o in ipairs(Atom.Orbitals) do
  print(string.format("%-6s occupation %5.3f  Q %3.1f  rc %5.2f  energy %11.5f  <r> %7.4f", o.Label, o.Occupation, o.Q, o.rc, o.Energy, o.RExpectation[1]))
end
print(string.format("smallest overlap eigenvalue %.3f, orthonormality error %.1e", Atom.MinOverlapEigenvalue, Atom.OrthonormalityError))
Example.out
1s1/2  occupation 2.000  Q 0.0  rc  4.00  energy  -256.57291  <r>  0.0586
2s1/2  occupation 2.000  Q 0.0  rc  4.00  energy   -30.04817  <r>  0.2674
2p1/2  occupation 2.000  Q 0.0  rc  4.00  energy   -25.94864  <r>  0.2337
2p3/2  occupation 4.000  Q 0.0  rc  4.00  energy   -25.49112  <r>  0.2368
3s1/2  occupation 2.000  Q 0.0  rc  4.00  energy    -3.43574  <r>  0.8122
3p1/2  occupation 2.000  Q 0.0  rc  4.00  energy    -2.23987  <r>  0.8520
3p3/2  occupation 4.000  Q 0.0  rc  4.00  energy    -2.18266  <r>  0.8616
3d3/2  occupation 2.400  Q 0.0  rc  4.00  energy    -0.26808  <r>  1.0844
3d5/2  occupation 3.600  Q 0.0  rc  4.00  energy    -0.25397  <r>  1.0926
4s1/2  occupation 2.000  Q 0.0  rc  4.00  energy     0.00653  <r>  2.2786
4p1/2  occupation 0.000  Q 1.0  rc  4.00  energy    -0.37154  <r>  2.1096
4p3/2  occupation 0.000  Q 1.0  rc  4.00  energy    -0.36155  <r>  2.1198
4d3/2  occupation 0.000  Q 2.0  rc  3.20  energy    -0.28268  <r>  1.5914
4d5/2  occupation 0.000  Q 2.0  rc  3.20  energy    -0.27983  <r>  1.5865
5s1/2  occupation 0.000  Q 0.0  rc  4.00  energy     1.08709  <r>  2.7221
smallest overlap eigenvalue 0.558, orthonormality error 2.2e-16

The energies are those of the equation each function was calculated with, including its confinement and its extra charge. Atom.Orbitals[i].EnergyGround gives the energy of the returned function in the potential of the free atom.

Accuracy

The radial functions are expansions in B-splines of degree 8 on an exponential grid of 120 knot intervals and are evaluated exactly, without interpolation. With the default settings total energies and orbital energies are accurate to about $10^{-8}$ Hartree for light and $10^{-7}$ Hartree for heavy atoms. The results were compared with the nonrelativistic Hartree-Fock limits of He to Xe (to $10^{-9}$ Hartree), with the LDA and RLDA atoms of the NIST atomic reference data for He to U (to $10^{-6}$ Hartree), and with FPLO (all orbital energies of Re to $10^{-7}$ Hartree). “Precision” “High” tightens the convergence and reports in Atom.ConvergenceCheck how much the energies change when the number of knot intervals is doubled. For heavy atoms use a finite nucleus: with a point nucleus the $s_{1/2}$ and $p_{1/2}$ functions are singular at the origin.

Table of contents