Skip to main content

Python API for the SPARC DFT Code

Project description

SPARC-X-API: A Python API for the SPARC-X DFT Code

Package Coverage Unit tests for SPARC-X-API JSON-API Doc

SPARC-X-API is a versatile Python API for the real-space density functional (DFT) package SPARC distributed under the GPLv3 license. SPARC-X-API leverages the powerful Atomic Simulation Environment (ASE) framework for manipulating input / output files, as well as running DFT calculations and analysis via the SPARC code written in C/C++. Key features include:

  1. ASE-compatible I/O format for SPARC files
  2. A JSON Schema interfacing with SPARC's C/C++ code for parameter validation and conversion
  3. A comprehensive calculator interface for SPARC with file I/O and socket-communication support.

Overview

SPARC-X-API is part of the SPARC-X project, a collection of open-source packages aim to provide modern and efficient implementation of real space DFT simulations, led by the research groups of Phanish Suryanarayana and Andrew J. Medford from Georgia Tech. The name SPARC stands for Simulation Package for Ab-initio Real-Space Calculations, which comes in two variations:

  • M-SPARC: self-consistent Matlab code for algorithm prototyping and testing
  • SPARC: C/C++ implementation of efficient production code scaling up to millions of atoms

The SPARC-X project shares common input / output file formats, and parameter specification. SPARC-X-API serves as the interface that connects the core SPARC-X components with external workflows, as illustrated in the diagram below.

Overview of SPARC-X-API

Quick start

SPARC-X-API is straightforward to install and use, adhering to the ASE standard for seamless integration into other computational workflows.

Installation

Install SPARC-X-API via conda.

conda install -c conda-forge sparc-x-api

Install the pre-compiled SPARC binary alongside SPARC-X-API (Linux only).

conda install -c conda-forge sparc-x

Reading / Writing SPARC files

SPARC-X-API provides a file format sparc compatible with the ASE ioformat, which treats the calculation directory containing SPARC in-/output files as a bundle:

  • Read from a SPARC bundle
from ase.io import read
atoms = read("sparc_calc_dir/", format="sparc")
  • Write input files
from ase.build import Bulk
atoms = Bulk("Al") * [4, 4, 4]
atoms.write("sparc_calc_dir/", format="sparc")

Visualizing Atomic Structures in SPARC Files

You can use the ase gui commandline tool to visualize SPARC files:

ase gui sparc_calc_dir/*.ion

Parameter Validation with JSON Schema

SPARC-X-API allows user to validate SPARC parameters based on a JSON schema that is parsed from the LaTeX documentation of the SPARC-X project. To get help for a specific parameter:

from sparc.api import SparcAPI
print(SparcAPI().help_info("LATVEC"))

Running SPARC Calculations

SPARC-X-API provides two ways to run a DFT calculation via SPARC C/C++ code:

  1. File I/O mode: classic way to drive SPARC calculation by running a standard SPARC process with input files. Suitable for things implemented internally in SPARC C/C++ codes:

    • Single point evaluation
    • Band structure calculations
    • Structural optimization (SPARC internal routines)
    • Ab-init molecular dynamics (AIMD)
  2. Socket mode: run a background SPARC process while providing atomic positions and other data via socket communication. Suitable for:

    • Hundreds / thousands of single point DFT evaluations
    • Integration with complex algorithms / workflows
    • Combination with internal and external machine learning (ML) force fields

The calculator interface in SPARC-X-API is designed to be intuitive for users familiar with the ASE calculator interfaces for other DFT packages (e.g. VASP, Quantum ESPRESSO, GPAW, Abinit, etc):

File I/O mode

Run a single point DFT calculation with Dirichlet boundary conditions:

from sparc.calculator import SPARC
from ase.build import molecule
atoms = molecule("H2", cell=(10, 10, 10), pbc=False, directory="run_sp")
atoms.calc = SPARC(h=0.25) # 0.25 Å mesh spacing
atoms.get_potential_energy()
atoms.get_forces()

Socket mode

Switching to the socket mode requires just a few parameters, ideal for workflows with hundreds or thousands of single point DFT calls with much less overhead and more flexibility. An example for optimization using socket mode and ASE optimizer:

from sparc.calculator import SPARC
from ase.build import molecule
from ase.optimize import BFGS
atoms = molecule("H2", cell=(10, 10, 10), pbc=False, directory="run_sp")
atoms.center()
atoms.calc = SPARC(h=0.25, use_socket=True) # 0.25 Å mesh spacing
opt = BFGS(atoms)
with atoms.calc:
    opt.run(fmax=0.01)

Documentation

Please check the full documentation for details regarding installation, usage, troubleshooting and contribution guidelines.

How to cite

If you find SPARC-X-API help, please consider cite the relevant publications below:

For a full list of publications in the SPARC-X project please refer to:

Acknowledgment

The development of SPARC-X-API is supported by the U.S. Department of Energy, Office of Science, under Grant No. DE-SC0019410 and DE-SC0023445.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sparc_x_api-1.0.5.tar.gz (4.4 MB view details)

Uploaded Source

Built Distribution

sparc_x_api-1.0.5-py3-none-any.whl (4.5 MB view details)

Uploaded Python 3

File details

Details for the file sparc_x_api-1.0.5.tar.gz.

File metadata

  • Download URL: sparc_x_api-1.0.5.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for sparc_x_api-1.0.5.tar.gz
Algorithm Hash digest
SHA256 55af8bbde29c6f96621a7001e5df4a272c468340172fe7246d75088b59a4e11b
MD5 cfcafdbfa7c12bfd3226086e6190e0d9
BLAKE2b-256 1064e8566adf8800717480b58a986e2d2dbf94b0bc0d250544ebc94850eac091

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparc_x_api-1.0.5.tar.gz:

Publisher: publish-pypi.yml on SPARC-X/SPARC-X-API

Attestations:

File details

Details for the file sparc_x_api-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: sparc_x_api-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for sparc_x_api-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8a853c4172db83b0269e3af4c0669143687e4a2de161d8a0d426e2ec570564d4
MD5 8d4b4cdbdc55a53357055bae3c326866
BLAKE2b-256 aaaaa585c0dbc532b8b17b1753dcf1eace11ed929aa5d28dc45f534221e4caf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparc_x_api-1.0.5-py3-none-any.whl:

Publisher: publish-pypi.yml on SPARC-X/SPARC-X-API

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page