【发布时间】:2016-06-26 02:02:31
【问题描述】:
我正在尝试修改结构对象中的字段。基本上,我正在尝试将某些原子的值从 [True, True, True] 设置为 [False,False,False]。这些在文件中的原子旁边显示为 T T T。这是我尝试过的:
import pymatgen.io.vaspio as iopy
import numpy as np
import json
np.zdiff=[] # to store the z coordinates of atoms
struc = iopy.Poscar.from_file("POSCAR") # read the structure file
for i in range(len(struc.structure)):
np.zdiff.append(struc.structure[i].z)
unique=set(np.zdiff)
newzdiff=list(unique)
zval=sorted(newzdiff) # z coordinated sorted
for i in xrange(len(struc.structure)):
if struc.structure[i].z <= float(zval[1]): # if z is <= a value
#np.reg1.append(struc[i].z)
struc.structure[i].selective_dynamics=[True,True,True]
elif struc.structure[i].z <= float(zval[3]): # second condition
#np.reg2.append(struc[i].z)
struc.structure[i].selective_dynamics=[False,False,False]
struc.write_file("POSCAR.2") # write the file here
[True True True] 值在 POSCAR.2 中保持不变。但是,当我以交互方式运行上述代码时:
struc.structure[21].selective_dynamics 给出 [False, False, False] 而它最初是 [True, True, True]
也就是说,已经按照程序进行了修改。为什么它不打印在文件中?
这是我正在阅读的原始文件:
0.0000000000000000 0.2500000000000000 0.2500000000000000 T T T
0.2500000000000000 0.0000000000000000 0.2500000000000000 T T T
0.2500000000000000 0.2500000000000000 0.0000000000000000 T T T
0.5000000000000000 0.2500000000000000 0.2500000000000000 T T T
0.7500000000000000 0.0000000000000000 0.2500000000000000 T T T
0.7500000000000000 0.2500000000000000 0.0000000000000000 T T T
0.0000000000000000 0.7500000000000000 0.2500000000000000 T T T
0.2500000000000000 0.5000000000000000 0.2500000000000000 T T T
0.2500000000000000 0.7500000000000000 0.0000000000000000 T T T
0.5000000000000000 0.7500000000000000 0.2500000000000000 T T T
0.7500000000000000 0.5000000000000000 0.2500000000000000 T T T
0.7500000000000000 0.7500000000000000 0.0000000000000000 T T T
0.0000000000000000 0.2500000000000000 0.7500000000000000 T T T
0.2500000000000000 0.0000000000000000 0.7500000000000000 T T T
0.2500000000000000 0.2500000000000000 0.5000000000000000 T T T
0.5000000000000000 0.2500000000000000 0.7500000000000000 T T T
0.7500000000000000 0.0000000000000000 0.7500000000000000 T T T
0.7500000000000000 0.2500000000000000 0.5000000000000000 T T T
0.0000000000000000 0.7500000000000000 0.7500000000000000 T T T
0.2500000000000000 0.5000000000000000 0.7500000000000000 T T T
0.2500000000000000 0.7500000000000000 0.5000000000000000 T T T
0.5000000000000000 0.7500000000000000 0.7500000000000000 T T T
0.7500000000000000 0.5000000000000000 0.7500000000000000 T T T
0.7500000000000000 0.7500000000000000 0.5000000000000000 T T T
0.0000000000000000 0.0000000000000000 0.0000000000000000 T T T
0.0000000000000000 0.5000000000000000 0.0000000000000000 T T T
0.5000000000000000 0.0000000000000000 0.0000000000000000 T T T
0.5000000000000000 0.5000000000000000 0.0000000000000000 T T T
0.0000000000000000 0.0000000000000000 0.5000000000000000 T T T
0.0000000000000000 0.5000000000000000 0.5000000000000000 T T T
0.5000000000000000 0.0000000000000000 0.5000000000000000 T T T
0.5000000000000000 0.5000000000000000 0.5000000000000000 T T T
这是我得到的文件:(T 代表 True,F 代表 False,我正在尝试针对某些原子进行修改,不要介意符号 Ni 和 Al,它们仅供参考)
0.000000 0.250000 0.250000 T T T Ni
0.250000 0.000000 0.250000 T T T Ni
0.250000 0.250000 0.000000 T T T Ni
0.500000 0.250000 0.250000 T T T Ni
0.750000 0.000000 0.250000 T T T Ni
0.750000 0.250000 0.000000 T T T Ni
0.000000 0.750000 0.250000 T T T Ni
0.250000 0.500000 0.250000 T T T Ni
0.250000 0.750000 0.000000 T T T Ni
0.500000 0.750000 0.250000 T T T Ni
0.750000 0.500000 0.250000 T T T Ni
0.750000 0.750000 0.000000 T T T Ni
0.000000 0.250000 0.750000 T T T Ni
0.250000 0.000000 0.750000 T T T Ni
0.250000 0.250000 0.500000 T T T Ni
0.500000 0.250000 0.750000 T T T Ni
0.750000 0.000000 0.750000 T T T Ni
0.750000 0.250000 0.500000 T T T Ni
0.000000 0.750000 0.750000 T T T Ni
0.250000 0.500000 0.750000 T T T Ni
0.250000 0.750000 0.500000 T T T Ni
0.500000 0.750000 0.750000 T T T Ni
0.750000 0.500000 0.750000 T T T Ni
0.750000 0.750000 0.500000 T T T Ni
0.000000 0.000000 0.000000 T T T Al
0.000000 0.500000 0.000000 T T T Al
0.500000 0.000000 0.000000 T T T Al
0.500000 0.500000 0.000000 T T T Al
0.000000 0.000000 0.500000 T T T Al
0.000000 0.500000 0.500000 T T T Al
0.500000 0.000000 0.500000 T T T Al
0.500000 0.500000 0.500000 T T T Al
【问题讨论】: