背景:ovito图形界面下DXA使用简单,但是如果我们希望统计成千上万个轨迹文件的位错密度,我们建议使用ovito提供的python接口进行计算并输出。
python代码:
#导入python模块
from ovito.io import import_file
from ovito.modifiers import DislocationAnalysisModifier
from ovito.data import DislocationNetwork
import time
#读入lammps的轨迹文件,导入pipeline(ovito计算流), *通配符代表步长,从零开始
pipeline = import_file("path/to/dumpfile/dump.*")
#打印轨迹文件总个数
print("total_num_frames: %f" % pipeline.source.num_frames)
#逐个读取轨迹文件,并进行DXA分析与输出
for frame in range(pipeline.source.num_frames):
#根据实际dump出来的步长,来定义步数,并打印出来
steps = (frame)*200
print("step: %s" % steps)
#定义DXA模块,设置trial_circuit_length,circuit_stretchability
modifier = DislocationAnalysisModifier(trial_circuit_length = 14,circuit_stretchability = 9)
#设置构型的晶体结构(BCC/FCC/HCP)
modifier.input_crystal_structure = DislocationAnalysisModifier.Lattice.BCC
#将设置好的DXA模块赋予pipeline
pipeline.modifiers.append(modifier)
#pipeline执行的开始时间
time_start = time.perf_counter()
#pipeline计算启动
data = pipeline.compute(frame)
#pipeline每次执行完的时间
time_end = time.perf_counter()
#打印出pipeline执行到每步的耗时
print("ElapsedTime : {} s".format(time_end - time_start))
#赋值位错线长度到total_line_length
total_line_length = data.attributes['DislocationAnalysis.total_line_length']
#盒子体积
cell_volume = data.attributes['DislocationAnalysis.cell_volume']
#位错密度计算
dislocation_density=total_line_length / cell_volume
#打印位错线长度及位错密度
print ("dislocation_length: %f" % total_line_length)
print("Dislocation density: %f" % dislocation_density)
#输出dump步数及对应的位错密度到当前文件夹下dislocation_density.txt文件
f1 = open('dislocation_density.txt','a+')
f1.write(str(steps))
f1.write(" ")
f1.write(str(dislocation_density))
执行命令:
ovitos **.py #ovitos默认调用所有处理器线程进行数据分析
屏幕打印:
输出文件:位错密度统计(步数、位错密度)
注:
文件输出为追加模式,如果希望重新计算一组轨迹文件的位错密度时,需删除之前遗留下来的dislocation_density.txt文件
支持python的免费版ovito请浏览公众号之前文章,其提供安装包下载