Source code for jarvis.analysis.defects.substitutions

"""Modules for making point-defect substituions."""
from jarvis.analysis.structure.spacegroup import Spacegroup3D
from jarvis.core.utils import rand_select
from jarvis.core.atoms import Atoms, get_supercell_dims


[docs]def generate_defect( atoms=None, enforce_c_size=10.0, on_conventional_cell=False, extend=1, subs_element="Al", selected_element=None, ): """Provide function to generate substitution defects.""" if on_conventional_cell: atoms = Spacegroup3D(atoms).conventional_standard_structure if enforce_c_size is not None: dims = get_supercell_dims( atoms, enforce_c_size=enforce_c_size, extend=extend ) supercell_size = [dims[0], dims[1], dims[2]] # atoms = atoms.make_supercell(supercell_size) spg = Spacegroup3D(atoms) wyckoffs = spg._dataset["wyckoffs"] atoms.props = wyckoffs supercell = atoms.make_supercell(supercell_size) props = rand_select(supercell.props) subs = [] # print(props) for i, j in props.items(): info = {} elements = supercell.elements.copy() if selected_element is not None: if elements[j] == selected_element: elements[j] = subs_element a = Atoms( lattice_mat=supercell.lattice_mat, coords=supercell.coords, cartesian=supercell.cartesian, elements=elements, ) info["props"] = props info["atoms"] = atoms.to_dict() info["defect_atoms"] = a.to_dict() info["supercell_size"] = list(supercell_size) # print(a.elements) subs.append(info) else: elements[j] = subs_element a = Atoms( lattice_mat=supercell.lattice_mat, coords=supercell.coords, cartesian=supercell.cartesian, elements=elements, ) info["props"] = props info["atoms"] = atoms.to_dict() info["defect_atoms"] = a.to_dict() info["supercell_size"] = list(supercell_size) # print(a.elements) subs.append(info) return subs
""" x = generate_defect(atoms=a, selected_element="Br") """