def write_undefected_atom_indices(self): """Write undefected atom indices, including scaled indices. Also write an undefected manifest file. """ scales = self.scaling.keys() scales.append("") for scaling_label in scales: if scaling_label == "": mySE=SE(struc_work1=self.startstr.copy()) mystruc=mySE.keywords['struc_work1'] else: mySE=SE(struc_work1=self.startstr.copy(), scaling_size=self.scaling[scaling_label]["mast_size"]) mystruc=mySE.scale_structure() alist=list() manname=os.path.join(self.sdir,"manifest_%s__" % scaling_label) for site in mystruc: akey=self.get_new_key() aname="atom_index_%s" % akey aname = os.path.join(self.sdir, aname) ameta = Metadata(metafile=aname) ameta.write_data("atom_index",akey) ameta.write_data("original_frac_coords", site.frac_coords) ameta.write_data("element", site.species_string) ameta.write_data("scaling_label", scaling_label) alist.append(akey) self.write_manifest_file(alist,manname) return
def test_scale_defect(self): size = '1 1 0,-1 1 0,0 0 1' perfect = pymatgen.io.vaspio.Poscar.from_file( "POSCAR_perfect").structure sxtend = StructureExtensions(struc_work1=perfect, scaling_size=size) scaled = sxtend.scale_structure() sxtend2 = StructureExtensions(struc_work1=scaled, scaling_size=size) vac1 = { 'symbol': 'O', 'type': 'vacancy', 'coordinates': np.array([0.25, 0.75, 0.25]) } defected = sxtend2.scale_defect(vac1, 'fractional', 0.0001) int1 = { 'symbol': 'Ni', 'type': 'interstitial', 'coordinates': np.array([0.3, 0.3, 0.3]) } sxtend3 = StructureExtensions(struc_work1=defected, scaling_size=size) defected2 = sxtend3.scale_defect(int1, 'fractional', 0.0001) sub1 = { 'symbol': 'Fe', 'type': 'substitution', 'coordinates': np.array([0.25, 0.25, 0.75]) } sxtend4 = StructureExtensions(struc_work1=defected2, scaling_size=size) defected3 = sxtend4.scale_defect(sub1, 'fractional', 0.0001) self.assertEqual( pymatgen.io.vaspio.Poscar.from_file( "POSCAR_scaled_defected").structure, defected3)
def test_scale_structure_nine(self): hcp = pymatgen.io.vaspio.Poscar.from_file("POSCAR_HCP").structure sxtend = StructureExtensions(struc_work1=hcp, scaling_size="2 0 0,0 2 0,0 0 2", name=testdir) scaled = sxtend.scale_structure() self.assertEqual(scaled, pymatgen.io.vaspio.Poscar.from_file("POSCAR_HCP_222").structure) self.assertEqual(scaled.lattice, pymatgen.io.vaspio.Poscar.from_file("POSCAR_HCP_222").structure.lattice) self.assertEqual(scaled.sites.sort(), pymatgen.io.vaspio.Poscar.from_file("POSCAR_HCP_222").structure.sites.sort())
def write_undefected_atom_indices(self): """Write undefected atom indices, including scaled indices. Also write an undefected manifest file. """ scales = self.scaling.keys() scales.append("") for scaling_label in scales: if scaling_label == "": mySE = SE(struc_work1=self.startstr.copy()) mystruc = mySE.keywords['struc_work1'] else: mySE = SE( struc_work1=self.startstr.copy(), scaling_size=self.scaling[scaling_label]["mast_size"]) mystruc = mySE.scale_structure() alist = list() manname = os.path.join(self.sdir, "manifest_%s__" % scaling_label) for site in mystruc: akey = self.get_new_key() aname = "atom_index_%s" % akey aname = os.path.join(self.sdir, aname) ameta = Metadata(metafile=aname) ameta.write_data("atom_index", akey) ameta.write_data("original_frac_coords", site.frac_coords) ameta.write_data("element", site.species_string) ameta.write_data("scaling_label", scaling_label) alist.append(akey) self.write_manifest_file(alist, manname) return
def test_scale_structure(self): size = '1 1 0,-1 1 0,0 0 1' perfect = pymatgen.io.vaspio.Poscar.from_file("POSCAR_perfect").structure sxtend = StructureExtensions(struc_work1=perfect,scaling_size=size) scaled = sxtend.scale_structure() self.assertEqual(scaled, pymatgen.io.vaspio.Poscar.from_file("POSCAR_scaled").structure) self.assertEqual(scaled.lattice, pymatgen.io.vaspio.Poscar.from_file("POSCAR_scaled").structure.lattice) self.assertEqual(scaled.sites.sort(), pymatgen.io.vaspio.Poscar.from_file("POSCAR_scaled").structure.sites.sort())
def test_scale_defect(self): perfect = pymatgen.io.vaspio.Poscar.from_file("POSCAR_perfect").structure scalingsize = "2,2,2" sxtend = StructureExtensions(struc_work1=perfect, scaling_size=scalingsize, name=testdir) scaled = sxtend.scale_structure() sxtend2 = StructureExtensions(struc_work1=scaled, struc_work2=perfect, scaling_size=scalingsize, name=testdir) vac1={'symbol':'O', 'type': 'vacancy', 'coordinates': np.array([0.25, 0.75, 0.25])} defected = sxtend2.scale_defect(vac1,'fractional',0.0001) int1={'symbol':'Ni', 'type': 'interstitial', 'coordinates': np.array([0.3, 0.3, 0.3])} sxtend3 = StructureExtensions(struc_work1=defected, struc_work2=perfect, scaling_size=scalingsize, name=testdir) defected2 = sxtend3.scale_defect(int1,'fractional',0.0001) sub1={'symbol':'Fe', 'type': 'substitution','coordinates':np.array([0.25, 0.25,0.75])} sxtend4 = StructureExtensions(struc_work1=defected2, struc_work2=perfect, scaling_size=scalingsize, name=testdir) defected3 = sxtend4.scale_defect(sub1,'fractional',0.0001) self.assertEqual(pymatgen.io.vaspio.Poscar.from_file("POSCAR_scaled_defected").structure, defected3)
def test_scale_structure(self): size = '1 1 0,-1 1 0,0 0 1' perfect = pymatgen.io.vaspio.Poscar.from_file( "POSCAR_perfect").structure sxtend = StructureExtensions(struc_work1=perfect, scaling_size=size) scaled = sxtend.scale_structure() self.assertEqual( scaled, pymatgen.io.vaspio.Poscar.from_file("POSCAR_scaled").structure) self.assertEqual( scaled.lattice, pymatgen.io.vaspio.Poscar.from_file( "POSCAR_scaled").structure.lattice) self.assertEqual( scaled.sites.sort(), pymatgen.io.vaspio.Poscar.from_file( "POSCAR_scaled").structure.sites.sort())