1.固定原子
from numpy import *
import pandas as pd
import string
with open('POSCAR') as f:
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
atom_name=f.readline()
atom_num=f.readline()
atom_name2=atom_name.split()
print(atom_name2)
atom_num2=[int(x) for x in atom_num.split()]
print(atom_num2)
atom_total=sum(atom_num2)
line_total = 8+atom_total
line_a=f.readlines()[1:atom_total+1]
A=zeros((atom_total,3))
B=zeros((atom_num2[0],3))
C=zeros((atom_num2[1],3))
A_row=0
for line in line_a:
list =line.strip(' ').strip('\n').split(' ')
list=[x for x in list if x !='']
float_list=[float(x) for x in list]
A[A_row:]=float_list[0:3]
A_row +=1
B,C=vsplit(A,[atom_num2[0]])
#A[:,2] +=0.1 #第三列加0.2
#A[:,1] -=0.1
format_string= "{:,.8f}"
with open('POSCAR-2','w') as h:
for i in range(B.shape[0]):
if B[i,2] <0.33644:
for j in range(B.shape[1]):
h.write(format_string.format(B[i,j]) + ' ')
h.write('F F F')
print(B[i])
else:
for j in range(B.shape[1]):
h.write(format_string.format(B[i,j]) + ' ')
h.write('T T T')
print(B[i])
h.write('\n')
with open('POSCAR-2','a') as h:
for i in range(C.shape[0]):
if C[i,2] <0.3703:
for j in range(C.shape[1]):
h.write(format_string.format(C[i,j]) + ' ')
h.write('F F F')
else:
for j in range(C.shape[1]):
h.write(format_string.format(C[i,j]) + ' ')
h.write('T T T')
h.write('\n')
2.计算表面能
表面能计算基础及最新进展(PRB连载,计算表面能) - 知乎 (zhihu.com)
https://en.wikipedia.org/wiki/Surface_energy
转载请注明来源 有问题可通过github提交issue