Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
d["species_group"] = int(r.split("=")[-1])
break
# custom Materials Project post-processing for FireWorks
with zopen(zpath(os.path.join(dir_name, 'FW.json'))) as f:
fw_dict = json.load(f)
d['fw_id'] = fw_dict['fw_id']
d['snl'] = fw_dict['spec']['mpsnl']
d['snlgroup_id'] = fw_dict['spec']['snlgroup_id']
d['vaspinputset_name'] = fw_dict['spec'].get('vaspinputset_name')
d['task_type'] = fw_dict['spec']['task_type']
if not self.update_duplicates:
if 'optimize structure' in d['task_type'] and 'output' in d:
# create a new SNL based on optimized structure
new_s = Structure.from_dict(d['output']['crystal'])
old_snl = StructureNL.from_dict(d['snl'])
history = old_snl.history
history.append(
{'name': 'Materials Project structure optimization',
'url': 'http://www.materialsproject.org',
'description': {'task_type': d['task_type'],
'fw_id': d['fw_id'],
'task_id': d['task_id']}})
new_snl = StructureNL(new_s, old_snl.authors, old_snl.projects,
old_snl.references, old_snl.remarks,
old_snl.data, history)
# enter new SNL into SNL db
# get the SNL mongo adapter
sma = SNLMongoAdapter.auto_load()
d["name"] = "aflow"
p = d2["input"]["potcar_type"][0].split("_")
pot_type = p[0]
functional = "lda" if len(pot_type) == 1 else "_".join(p[1:])
d["pseudo_potential"] = {"functional": functional.lower(),
"pot_type": pot_type.lower(),
"labels": d2["input"]["potcar"]}
if len(d["calculations"]) == len(self.runs) or \
list(vasprun_files.keys())[0] != "relax1":
d["state"] = "successful" if d2["has_vasp_completed"] \
else "unsuccessful"
else:
d["state"] = "stopped"
d["analysis"] = get_basic_analysis_and_error_checks(d)
sg = SpacegroupAnalyzer(Structure.from_dict(d["output"]["crystal"]),
0.1)
d["spacegroup"] = {"symbol": sg.get_space_group_symbol(),
"number": sg.get_space_group_number(),
"point_group": sg.get_point_group_symbol(),
"source": "spglib",
"crystal_system": sg.get_crystal_system(),
"hall": sg.get_hall()}
d["oxide_type"] = d2["oxide_type"]
d["last_updated"] = datetime.datetime.today()
return d
except Exception as ex:
import traceback
print(traceback.format_exc())
logger.error("Error in " + os.path.abspath(dir_name) +
".\n" + traceback.format_exc())
new_sites = []
specimen = sec_struct.species
scaled_species = []
for i in range(0, len(sec_struct)):
if 0 <= sec_struct[i].coords[0] <= self.lattice.a and \
0 <= sec_struct[i].coords[1] <= self.lattice.b and \
0 <= sec_struct[i].coords[2] <= self.lattice.c:
new_sites.append(sec_struct[i])
scaled_species.append(specimen[i])
scaled_sites = []
for site in new_sites:
scaled_sites.append(site.coords)
sec_struct = Structure(self.lattice, scaled_species,
scaled_sites, coords_are_cartesian = True)
# Creates the interface between two structures
interface_sites = []
interface_species = []
# c_list = []
specimen = self.species
for i in range(0, len(self)):
interface_sites.append(self[i].coords)
interface_species.append(specimen[i])
specimen = sec_struct.species
for i in range(0, len(sec_struct)):
if self.true_vac_size/2 <= sec_struct[i].coords[2] \
<= self.lattice.c-self.true_vac_size/2:
shift_parallel = coord_i - coord_j
shift_parallel[2] = 0
shift_net = shift_normal - shift_parallel
for site in mat2d:
new_coords = site.coords
new_coords[2] = site.coords[2] - mat_2d_bottom
new_coords = new_coords + origin + shift_net
interface.append(site.specie, new_coords,
coords_are_cartesian=True)
interface.to(fmt='poscar',
filename='POSCAR_final_'+str(i)+'_'+str(j)+'.vasp')
# test
if __name__ == '__main__':
mat2d = Structure.from_file('POSCAR_2D')
substrate = Structure.from_file('POSCAR_substrate')
seperation = 5
nlayers_2d = 2
nlayers_substrate = 2
generate_all_configs(mat2d, substrate,
nlayers_2d, nlayers_substrate,
seperation )
def CalcV_M(structure):
dummyPoscarLatStr = Structure(structure.lattice,["F-"],[[0,0,0]])
V_M = ewald.EwaldSummation(dummyPoscarLatStr).total_energy*(-2)
return V_M
#index = index number of absorbing atom in list
#pt = coordinates of absorbing atom
#sphere = sites around absorbing atom within radius
#x,y,zshift = coordinate shift to place absorbing atom at (0,0,0)
#atom = site in sphere
#atm = atomic symbol string for atom at atom site
#ipot = index for that atom symbol in potential dictionary
#distance = distance of that atom site from absorbing atom
nopts = len(self.struct.species)
ptatoms = [self.struct.species[i].symbol for i in range(nopts)]
index = ptatoms.index(self.central_atom)
pt = self.struct.cart_coords[index]
sphere = Structure.get_sites_in_sphere(self.struct, pt, radius)
xshift = pt[0]
yshift = pt[1]
zshift = pt[2]
end = len(sphere)
row = []
for i in range(end):
atom = sphere[i][0]
atm = re.sub(r"[^aA-zZ]+", "", atom.species_string)
ipot = self.pot_dict[atm]
x = atom.coords[0] - xshift
y = atom.coords[1] - yshift
z = atom.coords[2] - zshift
distance = sphere[i][1]
row.append(["{:f}".format(x), "{:f}".format(y), "{:f}".format(z),
ipot, atm, "{:f}".format(distance), i])
def _scale_structures(self, a, b):
# which structure do we want to fit to the other ?
# assume that structure b has less sites and switch if needed
self.fixed_is_a = a.num_sites < b.num_sites
(fixed, to_fit) = (a, b) if self.fixed_is_a else (b, a)
# scale the structures to the same density
rho_a = fixed.num_sites / fixed.volume
rho_b = to_fit.num_sites / to_fit.volume
scale = (rho_b / rho_a) ** (1 / 3)
self.scale = scale
to_fit = Structure(Lattice(to_fit.lattice.matrix * scale),
to_fit.species_and_occu, to_fit.frac_coords)
return (fixed, to_fit)
key = key_slab + key_ligand
E_interfaces[key] = self.get_energy(cal)
E_binding[key] = E_interfaces[key] \
- E_slabs[key_slab] \
- cal.system['num_ligands'] * E_ligands[
key_ligand]
logger.info('Binding energy = {}'.format(E_binding))
# test
if __name__ == '__main__':
from pymatgen.core.structure import Structure, Molecule
from mpinterfaces.interface import Ligand
# PbS 100 surface with single hydrazine as ligand
strt = Structure.from_file("POSCAR.mp-21276_PbS")
mol_struct = Structure.from_file("POSCAR_diacetate")
mol = Molecule(mol_struct.species, mol_struct.cart_coords)
hydrazine = Ligand([mol])
supercell = [1, 1, 1]
hkl = [1, 1, 1]
min_thick = 10
min_vac = 12
surface_coverage = 0.01
adsorb_on_species = 'S'
adatom_on_lig = 'Pb'
displacement = 3.0
iface = Interface(strt, hkl=hkl, min_thick=min_thick,
min_vac=min_vac,
supercell=supercell, surface_coverage=0.01,
ligand=hydrazine, displacement=displacement,
adatom_on_lig=adatom_on_lig,
def setUp(self):
self.cu = Structure(Lattice.cubic(3), ["Cu", "Cu", "Cu", "Cu"],
[[0, 0, 0], [0.5, 0.5, 0], [0.5, 0, 0.5],
[0, 0.5, 0.5]])
self.libcc = Structure(Lattice.cubic(3.51004), ["Li", "Li"],
[[0, 0, 0], [0.5, 0.5, 0.5]])
Li_Fe_P_O4 = CifParser(get_path("LiFePO4.cif"))
self.lifepo4 = (Li_Fe_P_O4.get_structures(primitive = False)[0])
Li_Fe_P_O4_compare = CifParser(get_path("LiFePO4_010_original_3.005.cif"))
self.lifepo4_compare = (Li_Fe_P_O4.get_structures(primitive = False)[0])