Source code for pyiron_atomistics.sphinx.potential
# coding: utf-8
# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department
# Distributed under the terms of "New BSD License", see the LICENSE file.
import os
import pandas
from pyiron_base import state
from pyiron_snippets.resources import ResourceResolver
from pyiron_atomistics.vasp.potential import VaspPotentialAbstract
__author__ = "Osamu Waseda"
__copyright__ = (
"Copyright 2019, Max-Planck-Institut für Eisenforschung GmbH - "
"Computational Materials Design (CM) Department"
)
__version__ = "1.0"
__maintainer__ = "Osamu Waseda"
__email__ = "waseda@mpie.de"
__status__ = "development"
__date__ = "Sep 20, 2019"
[docs]
class SphinxJTHPotentialFile(VaspPotentialAbstract):
"""
The Potential class is derived from the PotentialAbstract class, but instead of loading the potentials from a list,
the potentials are loaded from a file.
Args:
xc (str): Exchange correlation functional ['PBE', 'LDA']
"""
resource_plugin_name = "sphinx"
@classmethod
def _get_resolver(cls):
env = os.environ
return (
super()
._get_resolver()
.chain(
ResourceResolver(
[env[var] for var in ("CONDA_PREFIX", "CONDA_DIR") if var in env],
"share",
"sphinxdft",
)
)
)
[docs]
def __init__(self, xc=None, selected_atoms=None):
potential_df = self._get_potential_df(
file_name_lst={"potentials_sphinx.csv"},
)
if xc == "PBE":
default_df = self._get_potential_default_df(
file_name_lst={"potentials_sphinx_jth_default.csv"},
)
potential_df = potential_df[(potential_df["Model"] == "jth-gga-pbe")]
else:
raise ValueError(
'The exchange correlation functional has to be set to "PBE" currently there are no "LDA" potentials.'
)
super(SphinxJTHPotentialFile, self).__init__(
potential_df=potential_df,
default_df=default_df,
selected_atoms=selected_atoms,
)
[docs]
def add_new_element(self, parent_element, new_element):
"""
Adding a new user defined element with a different POTCAR file. It is assumed that the file exists
Args:
parent_element (str): Parent element
new_element (str): Name of the new element (the name of the folder where the new POTCAR file exists
"""
ds = self.find_default(element=parent_element)
ds["Species"].values[0][0] = new_element
path_list = ds["Filename"].values[0][0].split("/")
path_list[-2] = new_element
name_list = ds["Name"].values[0].split("-")
name_list[0] = new_element
ds["Name"].values[0] = "-".join(name_list)
ds["Filename"].values[0][0] = "/".join(path_list)
self._potential_df = self._potential_df.append(ds)
ds = pandas.Series()
ds.name = new_element
ds["Name"] = "-".join(name_list)
self._default_df = self._default_df.append(ds)