예제 #1
0
 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 
예제 #2
0
 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)
예제 #3
0
 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())
예제 #4
0
 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
예제 #5
0
 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())
예제 #6
0
 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)
예제 #7
0
 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())