Simple DFT workflows with SPARC-X-API

As documentation for basic usage shows, replacing an existing DFT-based workflow using SPARC-X-API calculator interface can be as easy as simply swapping the calculator instance to sparc.SPARC from other codes like VASP, QE or GPAW.

Here we show a simple example that calculates the equation of state (EOS) of bulk aluminum and determine its optimal lattice constant, adapted from GPAW’s tutorial. The full python script for this example can be downloaded here.

In the GPAW tutorial, a GPAW calculator in Planewave (PW) mode is created like follows:

from gpaw import GPAW, PW
calc = GPAW(mode=PW(ecut),
            xc='PBE',
            kpts=(8, 8, 8),
            basis='dzp',
            txt=f'Al-{ecut}.txt')

We can create a SPARC-X-API calculator using similar parameters. Note that in real-space DFT, the parameter mesh spacing (h) controls the convergence. To avoid large “egg-box effect” due to large mesh spacing, we recommend to use a smaller h value. For demonstration purpose a rather rough mesh spacing h=0.25 (in Angstrom) and a 3x3x3 k-points are used.

import numpy as np
from ase.build import bulk
from ase.eos import calculate_eos

from sparc import SPARC


def main():
    # Al in conventional cell
    atoms = bulk("Al", cubic=True)
    calc = SPARC(h=0.25, kpts=(3, 3, 3), xc="pbe", directory="ex0-eos")
    vol = atoms.get_volume()
    atoms.calc = calc
    eos = calculate_eos(atoms, npoints=5, eps=0.05, trajectory="al-eos-sparc.traj")
    print("Original volume: Ang^3", vol)
    v, e, B = eos.fit()
    print("Fitted volume (Ang^3), energy (eV), modulus (eV/Ang^3)")
    print(v, e, B)
    a0 = v ** (1 / 3)
    print(f"Optimal cell length (cubic): {a0} Ang")
    atoms.set_cell([a0, a0, a0], scale_atoms=True)
    e0_sparc = atoms.get_potential_energy()
    print(f"Energy calculated by SPARC: {e0_sparc} eV")
    print(f"Energy diff {abs(e0_sparc - e)} eV")
    return


if __name__ == "__main__":
    main()

The output from the above example may look like:

Fitted volume (Ang^3), energy (eV), modulus (eV/Ang^3)
65.97840834969949 -253.07755156337953 2.9095110471623173
Optimal cell length (cubic): 4.040799280428726 Ang
Energy calculated by SPARC: -253.0552324051582 eV
Energy diff 0.02231915822133601 eV

Note

This example uses file I/O mode for demonstration purpose only. Consider choosing the socket mode if you need more flexibility.