Source code for examples.hf_scf_example

"""
.. _hf_scf_example:

Hartree-Fock Self-Consistent Field Example
##########################################

Summary:
    Generates Hartree-Fock (HF) a tabel from the [Baker2015]_ paper which
    includes Li atom and Li, Be, He, and H atoms.
"""

import sys
import os

currentpath = os.path.abspath('.')
sys.path.insert(0, os.path.dirname(currentpath))

import hf_scf, functionals, ext_potentials
import matplotlib.pyplot as plt
import numpy as np
import functools


[docs]def hf_scf_atom(grids, N_e, Z): """ Example HF-SCF calculation for a 1D atom with exponential interactions, see ext_potentials.exp_hydrogenic. Args: grids: grids: numpy array of grid points for evaluating 1d potential. (num_grids,) N_e: the number of electrons in the atom. Z: the nuclear charge Z of the atom. Returns: HF-SCF solver class. """ v_ext = functools.partial(ext_potentials.exp_hydrogenic, Z=Z) exponential_hf = functionals.ExponentialHF(grids=grids) solver = hf_scf.HF_Solver(grids, v_ext=v_ext, hf=exponential_hf, num_electrons=N_e) solver.solve_self_consistent_density() return solver
[docs]def get_latex_table_atoms(grids): """ Example Reproduce HF results in table 2 of [Baker2015]_. Args: grids: grids: numpy array of grid points for evaluating 1d potential. (num_grids,) Prints: copyable latex-formatted table. """ atom_dict = {"H": [1, 1], "He$^+$": [1, 2], "Li$^{2+}$": [1, 3], "Be$^{3+}$": [1, 4], "He": [2, 2], "Li$^+$": [2, 3], "Be$^{2+}$": [2, 4], "Li": [3, 3], "Be$^+$": [3, 4], "Be": [4, 4]} print("$N_e$", end=" & ") print("Atom/Ion", end=" & ") print("$T_s$", end=" & ") print("$V$", end=" & ") print("$U$", end=" & ") print(r"$E_x$", end=" & ") print(r"$E^{\text{HF}}$", end=" ") print(r'\\') print('\hline') for key in atom_dict.keys(): print(atom_dict[key][0], end=" & ") print(key, end=" & ") solver = hf_scf_atom(grids, atom_dict[key][0], atom_dict[key][1]) print(str(round(solver.T_s, 3)), end=" & ") print(str(round(solver.V, 3)), end=" & ") print(str(round(solver.U, 3)), end=" & ") print(str(round(solver.E_x, 3)), end=" & ") print(str(round(solver.E_tot, 3)), end=" ") print(r'\\') print('\hline')
[docs]def single_atom(grids, N_e, Z): solver = hf_scf_atom(grids, N_e, Z) # Non-Interacting Kinetic Energy print("T_s =", solver.T_s) # External Potential Energy print("V =", solver.V) # Hartree Energy print("U =", solver.U) # Exchange Energy print("E_x =", solver.E_x) # Total Energy print("E =", solver.E_tot) return solver
if __name__ == '__main__': """ Li atom HF calculation example. """ h = 0.08 grids = np.arange(-256, 257) * h example = single_atom(grids, 3, 3) # plot example self-consistent HF density plt.plot(grids, example.density) plt.ylabel('$n(x)$', fontsize=16) plt.xlabel('$x$', fontsize=16) plt.grid(alpha=0.4) plt.show() # sys.exit() """ Generate atom table for various (N_e, Z) """ # use coarser grid for faster computation. grids = np.linspace(-10, 10, 201) get_latex_table_atoms(grids)