# 取一小部分优化前后的结构进行训练 files_ini = spdkit.io.find_files("POSCAR", ".") # 按文件名排序, 保证 POSCAR, CONTCAR 对应同一体系 files_ini.sort() files_opt = spdkit.io.find_files("CONTCAR", ".") files_opt.sort() # 取前50个结构, 提取中心原子对应的微结构 submols = create_submols_for_files(files_ini[0:50], files_opt) # 取一个初始结构, 进行结构拼凑 mol_ini = Molecule.from_file("Fe32C9/60_1/POSCAR") mol_opt = Molecule.from_file("Fe32C9/60_1/CONTCAR") mol_refined, chemenv = refine(mol_ini, submols) # 使用 ASE 来完成晶胞及原子结构的进一步优化 mol = mol_ini.clone() p1 = spdkit.to_ase_atoms(mol) calc_elastic = ElasticModel(mol, chemenv) p1.set_calculator(calc_elastic) box = Mushybox(p1) # dyn = FIRE(p1, maxstep=0.1) dyn = FIRE(box, maxstep=0.1) dyn.run(fmax=0.001, steps=100)
时间: 2024-03-08 08:45:26 浏览: 117
VC_class_read_write_INI_files_sample_programs.rar_INI VC_read .i
这段代码的作用是取50个优化前的结构和对应的优化后的结构,提取中心原子对应的微结构,并使用其中一个初始结构进行结构拼凑。然后,使用ASE进行晶胞及原子结构的进一步优化,包括弹性力学计算。
具体来说,代码的执行过程如下:
1. 使用`spdkit.io.find_files()`函数找到当前目录下所有以“POSCAR”和“CONTCAR”结尾的文件,将其按文件名排序,并取前50个文件。
2. 使用`create_submols_for_files()`函数从优化前后的50个结构中提取中心原子对应的微结构。
3. 从“Fe32C9/60_1/POSCAR”和“Fe32C9/60_1/CONTCAR”文件中读取一个初始结构,并使用`refine()`函数进行结构拼凑和环境参数计算。
4. 将初始结构转换为ASE的原子对象,并使用`ElasticModel()`函数计算弹性力学参数。
5. 将原子对象包含在`Mushybox`对象中,使用`FIRE`算法进行晶胞优化,最终得到优化后的结构。
需要注意的是,这段代码中的`Mushybox`对象是一个自定义的类,它将原子对象包含在一个无限大的晶胞中,并提供了一些方便的方法进行晶胞操作。
阅读全文