背景:ovito图形界面下DXA使用简单,但是如果我们希望统计成千上万个轨迹文件的位错密度,我们建议使用ovito提供的python接口进行计算并输出。
python代码:
#导入python模块from ovito.io import import_filefrom ovito.modifiers import DislocationAnalysisModifierfrom ovito.data import DislocationNetworkimport 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)*200print("step: %s" % steps)#定义DXA模块,设置trial_circuit_length,circuit_stretchabilitymodifier = DislocationAnalysisModifier(trial_circuit_length = 14,circuit_stretchability = 9)#设置构型的晶体结构(BCC/FCC/HCP)modifier.input_crystal_structure = DislocationAnalysisModifier.Lattice.BCC#将设置好的DXA模块赋予pipelinepipeline.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_lengthtotal_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请浏览公众号之前文章,其提供安装包下载