CALYPSO 是基于粒子群优化算法的晶体结构预测程序,只根据材料的化学配比和给定的外界条件就可以寻找体系的基态及亚稳态结构。CALYPSO 在进行结构演化时需要调用其它结构弛豫软件,如 VASP 等。CALYPSO 6.0 可以通过 Volume 参数固定第一代能生成晶胞的体积,第二代及以后生成晶胞的体积是根据前代晶胞的体积演化而来,一般不需要固定。如果想要固定每一代生成晶胞的体积,则需要自己手动修改源文件。
本文提供了一种方法,通过修改 calypso.x 自动生成的 poscar.py 文件来固定生成晶胞的体积。此方法仅供学习使用。
修改方法
- CALYPSO 的主程序 calypso.x 在开始运行时会自动生成一些 Python 脚本文件,其中 poscar.py 文件的主要功能是按格式规范化生成的 POSCAR 文件。用文本编辑器(如 vi、Visual Studio Code 等)打开 poscar.py 文件。
-
第 27 行的 for 循环写入了原始 POSCAR 的前两行。原始的 for 循环如下所示。
1
2for item in pos[0:2]:
poscar.write(item) -
改写第 27 行的 for 循环。修改后的 for 循环如下所示。其中“static_vol = 150.0”是固定的体积大小,根据需要可以设置为其他值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18poscar.write(pos[0])
try:
static_vol = 150.0
mya = lattice[0]
myb = lattice[1]
myc = lattice[2]
mybc = [myb[1] * myc[2] - myb[2] * myc[1], myb[2] * myc[0] - myb[0] * myc[2], myb[0] * myc[1] - myb[1] * myc[0]]
myvol = mya[0] * mybc[0] + mya[1] * mybc[1] + mya[2] * mybc[2]
poscar.write(str((static_vol * 1.0 / myvol) ** 0.333333))
poscar.write("\n")
# print("POSCAR CHANGE TOF")
# print(str((static_vol * 1.0 / myvol) ** 0.333333))
except Exception as err:
# print("POSCAR CHANGE ERR")
# print(str(err))
poscar.write(pos[1]) - 修改完毕。结构弛豫完成后,CALYPSO 会调用修改后的 poscar.py 脚本将原始 POSCAR 文件规范化为具有固定晶胞体积的 POSCAR 文件。