#!/usr/bin/env python
"""
This is a script to run calculation from commandline. Run it to see the doc.
"""
from pathlib import Path
import sys
import argparse
if not __package__:
__package__ = "ase2sprkkr.tools.commands"
sys.path.append(str(Path(__file__).resolve().parents[3]))
from ...common.tools import parse_named_option, main # NOQA
from ... import InputParameters # NOQA
help = "Run SPRKKR calculation."
description = "You can pass the input parameters using the command line. However, due to limitation of argparse, pass them directly after the potential file."
[docs]
def parser(parser):
bool_arg = getattr(argparse, "BooleanOptionalAction", "store_true")
parser.add_argument("pot", help="SPR-KKR potential file or input file. The type is determined by its content.")
grp = parser.add_mutually_exclusive_group()
grp.add_argument(
"-t",
"--task",
dest="task",
choices=InputParameters.definition_modules.keys(),
type=str.lower,
help="Task to compute.",
)
grp.add_argument(
"--input-file",
"-i",
help="Run ase2sprkkr -i inputfile potfile, if you want to run task determined by the give input file with a given potential.",
type=str,
)
parser.add_argument("--print-output", "-O", help="Print the output of SPRKKR.", default="None", action=bool_arg)
parser.add_argument("--output-file", "-o", help="Output file", type=str)
parser.add_argument(
"--empty-spheres",
"-e",
help="Try to add empty spheres (by default, they are added if the potential is not converged and no vacuum atom is present.",
action=bool_arg,
)
parser.add_argument(
"options", nargs="*", help="Input parameters in the form <name>=<value>.", type=parse_named_option
)
[docs]
def run(args, global_args):
from ... import SPRKKR, Potential # NOQA
import pyparsing
import sys
calc = SPRKKR()
try:
potential = Potential.from_file(args.pot)
except pyparsing.ParseException:
try:
calc.input_parameters = ip = InputParameters.from_file(args.pot)
potential = ip.CONTROL.POTFIL()
except pyparsing.ParseException:
print(f"File {args.pot} is neither potential nor input_parameters file")
sys.exit(-1)
if args.input_file:
calc.input_parameters = args.input_file
elif args.task:
calc.input_parameters = args.task
kwargs = {}
for i in "empty_spheres", "print_output", "output_file":
o = getattr(args, i)
if o is not None:
kwargs[i] = o
calc.calculate(potential=potential, input_parameters=ip, options=dict(args.options), **kwargs)
if __name__ == "__main__":
main(globals())