Sphinx
Overview
This hosts the python binder of the DFT code Sphinx.
How to use
Stinx's input parser is created from the yaml-file located at src/input_data.yml. The input file is generated by src/generator.py. You can use the parser via:
from sphinx_parser.input import sphinx
This instance sphinx is used to create all possible input classes for Sphinx by choosing the class via dot-notation and call it. For example in order to generate the class kPoints, you can run:
kPoints = sphinx.basis.kPoints()
You can find the input in the parent class, i.e.:
basis = sphinx.basis(kPoints=kPoints)
Finally, you can translate it into the Sphinx format via:
from sphinx_parser.toolkit import to_sphinx sphinx_input = to_sphinx(basis)
You can then write it to a file via:
with open('sphinx.in', 'w') as f: f.write(sphinx_input)
Minimum working example
import numpy as np from ase.build import bulk import os cwd = "TEST" if not os.path.exists(cwd): os.mkdir(cwd) from sphinx_parser.toolkit import to_sphinx from sphinx_parser.jobs import set_base_parameters from sphinx_parser.output import collect_energy_dat structure = bulk("Al", cubic=True) structure[1].symbol = "Ni" input_sx = set_base_parameters(structure) with open(os.path.join(cwd, "input.sx"), "w") as f: f.write(to_sphinx(input_sx)) import subprocess command = ["sphinx"] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, cwd=cwd) stdout, stderr = process.communicate() collect_energy_dat(os.path.join(cwd, "energy.dat"))
More detailed example:
import numpy as np from ase.build import bulk import os cwd = "TEST" # cwd.mkdir(exist_ok=True) if not os.path.exists(cwd): os.mkdir(cwd) from sphinx_parser.input import sphinx from sphinx_parser.ase import get_structure_group from sphinx_parser.toolkit import to_sphinx from sphinx_parser.potential import get_paw_from_structure from sphinx_parser.output import collect_energy_dat structure = bulk("Al", cubic=True) structure[1].symbol = "Ni" struct_group, spin_lst = get_structure_group(structure) main_group = sphinx.main(scfDiag=sphinx.main.scfDiag(maxSteps=10, blockCCG={})) pawPot_group = get_paw_from_structure(structure) basis_group = sphinx.basis(eCut=25, kPoint=sphinx.basis.kPoint(coords=3 * [0.5])) paw_group = sphinx.PAWHamiltonian(xc=1, spinPolarized=False, ekt=0.2) initial_guess_group = sphinx.initialGuess( waves=sphinx.initialGuess.waves(lcao=sphinx.initialGuess.waves.lcao()), rho=sphinx.initialGuess.rho(atomicOrbitals=True) ) input_sx = sphinx( pawPot=pawPot_group, structure=struct_group, main=main_group, basis=basis_group, PAWHamiltonian=paw_group, initialGuess=initial_guess_group ) with open(os.path.join(cwd, "input.sx"), "w") as f: f.write(to_sphinx(input_sx)) import subprocess command = ["sphinx"] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, cwd=cwd) stdout, stderr = process.communicate() collect_energy_dat(os.path.join(cwd, "energy.dat"))