|
|
from pymatgen.analysis.adsorption import *
from pymatgen.core.surface import Slab, SlabGenerator, generate_all_slabs, Structure, Lattice, ReconstructionGenerator
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
from pymatgen.core.structure import Structure
from pymatgen.ext.matproj import MPRester
from matplotlib import pyplot as plt
from pymatgen.io.vasp.inputs import Poscar
from pymatgen.io.cif import CifParser, CifWriter
from pymatgen.transformations.standard_transformations import SubstitutionTransformation, OrderDisorderedStructureTransformation, SupercellTransformation
import os
from pymatgen.analysis.defects.core import Defect
#mp_id = "mp-551830"
#struct = mpr.get_structure_by_material_id(mp_id)
filename = './CONTCAR.cif'
parser = CifParser(filename)
init_structure = parser.get_structures(primitive =False)[0]
# add oxidation states to the structure
data = {"Li":+1, "Mn":+3, "O":-2}
init_structure.add_oxidation_state_by_element(data)
# substitute to get the partial occupancied structure
species_map = {"Mn3+":{"Li1+":0.185, "Ni2+":0.185, "Mn4+":0.63}}
substitutuin = SubstitutionTransformation(species_map)
structure = substitutuin.apply_transformation(init_structure)
sc = SupercellTransformation().from_scaling_factors(4,4,1)
structure = sc.apply_transformation(structure)
#structure.make_supercell([[3,0,0],
# [0,3,0],
# [0,0,1]])
print(structure)
order = OrderDisorderedStructureTransformation()
standard_structures = order.apply_transformation(structure,return_ranked_list=10000)
print('done')
i = 1
for s in standard_structures:
cif = CifWriter(s['structure'])
cif.write_file('./2/structure_{:0>3d}.cif'.format(i))
i+=1
print(i)
这是我用的代码,希望能办上忙 |
|