使用 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)。修改上述代码,输出ASE晶胞优化的结构为cif
时间: 2024-03-07 08:46:44 浏览: 20
要将优化后的晶体结构输出为cif文件,可以使用ASE中的`write()`函数。具体来说,可以在代码最后添加以下代码:
```
from ase.io import write
# 输出优化后的结构为cif文件
write('optimized_structure.cif', box, format='cif')
```
其中,`write()`函数的第一个参数是要输出的文件名,第二个参数是要输出的结构,第三个参数是输出格式,这里选择了cif格式。这样,优化后的晶体结构就会被保存到名为`optimized_structure.cif`的文件中。
相关问题
使用 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)。修改上述代码,输出ASE晶胞优化的结构到当前目录下
好的,您可以参考下面的代码来实现:
```
import os
from ase.io import write
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(box, maxstep=0.1)
dyn.run(fmax=0.001, steps=100)
# 将优化后的结构输出至当前目录下的out.cif文件中
write(os.path.join(os.getcwd(), 'out.cif'), p1)
```
以上代码会将优化后的结构输出为 CIF 格式的文件,并保存在当前目录下。您可以根据需要修改输出格式,例如将 `write()` 函数的第一个参数改为 `out.xyz` 以输出为 XYZ 格式的文件。
修改代码:要求输出ASE弹性力学计算晶胞优化后的结构。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)
您需要将代码中的最后一行修改为以下内容:
```
ase.io.write("Fe32C9/60_1/optimized_POSCAR", box.to_atoms())
```
这将输出ASE优化后的结构到名为“optimized_POSCAR”的文件中。如果需要输出其他格式的文件,可以将`optimized_POSCAR`替换为所需格式的文件名,如`optimized.xyz`或`optimized.cif`。
如果您需要输出弹性力学计算后的晶胞优化结构,可以在ASE优化后的结构上继续进行弹性力学计算,并将计算后的结构输出。以下是修改后的代码示例:
```
import ase
from ase.optimize import FIRE
from ase.elastic import ElasticConstants
from ase.io import read, write
from spglib import get_symmetry_dataset
from spglib import standardize_cell
from mendeleev import element
from chemiscope import write_input
from chemiscope import write_trajectory
from chemiscope import write_output
# 读入分子结构
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(box, maxstep=0.1)
dyn.run(fmax=0.001, steps=100)
# 获取优化后的结构
opt_structure = box.to_atoms()
# 进行弹性力学计算
ec = ElasticConstants()
ec.fit(opt_structure)
# 输出弹性力学计算后的晶胞优化结构
atoms_optimized = ec.get_scaled_structure()
write("Fe32C9/60_1/optimized_POSCAR", atoms_optimized)
```
这将输出弹性力学计算后的晶胞优化结构到名为“optimized_POSCAR”的文件中。