```
from ase.io import read
from ase.io import write
from ase.build import make_supercell
import random
#构建不同结构 输入、矩阵、输出 列表
structure_configs={
#六方 P63 mmc
"hexagonal":{
"input_file":"C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P63 mmc.cif",
"scaling_matrix":[[2,1,0],[0,3,0],[0,0,2]],
"output_file":"C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc.cif"
},
#面心立方 Fm-3m
"fcc":{
"input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Fm-3m.cif",
"scaling_matrix": [[1, 1, 1], [1, 1, -2], [1, -1, 0]],
"output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Fm-3m.cif"
},
#体心立方 Im-3m
"bcc":{
"input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Im-3m.cif",
"scaling_matrix": [[1, 1, 1], [1, 1, -2], [2, -2, 0]],
"output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Im-3m.cif"
},
#六方密堆 P6 mmm
"omiga":{
"input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P6 mmm.cif",
"scaling_matrix": [[2, 1, 0], [0, 2, 0], [0, 0, 3]],
"output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P6 mmm.cif"
},
#正交 Cmcm
"orthogonality":{
"input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Cmcm.cif",
"scaling_matrix": [[2, 0, 0], [0, 2, 0], [0, 0, 2]],
"output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Cmcm.cif"
},
}
#超胞矩阵计算
#统一处理所有结构
for config_name, config in structure_configs.items():
ti_structure = read(config["input_file"])
supercell = make_supercell(ti_structure,config["scaling_matrix"])
#储存超胞到不同变量
globals()[f"{config_name}_supercell"] = supercell #储存为全局变量
#保存文件
write(config["output_file"],supercell)
print(f"{config_name}结构处理完成,已保存至:{config['output_file']}")
#f?
# 读取六方的Ti的CIF文件
#ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P63 mmc.cif")
# 构建超胞(根据需求调整缩放矩阵)
#scaling_matrix = [[2,1,0],[0,3,0],[0,0,2]]
#supercell = make_supercell(ti_structure,scaling_matrix)
# 读取Fcc的Ti的CIF文件
#ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Fm-3m.cif")
# 构建超胞(根据需求调整缩放矩阵)
#scaling_matrix = [[1,1,1],[1,1,-2],[1,-1,0]]
#supercell = make_supercell(ti_structure,scaling_matrix)
# 读取Bcc的Ti的CIF文件
#ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Im-3m.cif")
# 构建超胞(根据需求调整缩放矩阵)
#scaling_matrix = [[1,1,1],[1,1,-2],[2,-2,0]]
#supercell = make_supercell(ti_structure,scaling_matrix)
#Cmcm 2*2*2
#读取omiga的Ti的CIF文件
#ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P6 mmm.cif")
# 构建超胞(根据需求调整缩放矩阵) 变长方形 a变成根号3a 面积扩一倍
#scaling_matrix = [[2,1,0],[0,2,0],[0,0,3]]
#supercell = make_supercell(ti_structure,scaling_matrix)
#设置替换参数
# 10%的Ti被替换成Nb
substitution_ratio = 0.6
ti_sites = [i for i, site in enumerate(supercell) if site.symbol == "Ti"]
num_substitutions = int(len(ti_sites) * substitution_ratio)
#随机选择替换位点
random.seed() #确保可重复性 自动使用系统时间作为种子
replace_indices = random.sample(ti_sites, num_substitutions)
#添加原子索引输出验证
print("本次替换原子索引:",sorted(replace_indices))
#执行原子替换
for idx in replace_indices:
supercell[idx].symbol="Nb" #直接替换原子类型
#保存新结构
#write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_P63 mmc_0.6_1.cif',supercell)
#write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_Fm-3m_0.6_1.cif',supercell)
#write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_Im-3m_0.6_1.cif',supercell)
write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_P6 mmc_0.6_1.cif',supercell)```我现在的代码有一些混乱,总的目的是想将这五种结构的钛晶体中的钛随机的替换成铌,形成钛铌固溶体并输出CIF格式以及LAMMPS文件。在随机替换这一步骤中,删去我现有代码中的random ratio等函数,因为按浓度分类替换不是很随机,改用shuffle函数,因为我会给出每个结构的钛原子数,希望建一个列表,用shuffle函数把铌随机替换成Ti,生成所有随机可能性,然后填到列表里。