lammps输出模拟结果的4种方法(转摘)
转摘自小马老师的微信公众号:https://mp.weixin.qq.com/s/QgPDGHse42dM1y9XbGj-Ag
本文介绍lammps输出模拟结果的4种方式。
lammps模拟的数据从数据结构上分,大体可以分为两类:标量和矢量。
标量是一个值,类似C语言中的一个普通变量,通常表示全局或局部的量(如temp、press、pxx)。
矢量是一组值,类似C语言中的一维或者多维数组,通常表示单个原子的量,如单原子的坐标(x、y、z)、速度(vx、vy、vz)等。
不同的量输出方式不同,先介绍标量的输出,标量可使用三个命令输出。
(1)thermo命令
thermo命令模拟过程中全局标量,如步数、体系温度、压力等等,具体用法:
lammps教程:模拟量实时显示之thermo_style custom命令详解(2)
thermo命令输出的值保存到log.lammps文件中,模拟完成后需要从这个文件中把需要的数据复制出来再进行绘图处理。
用的比较多的是thermo_style custom:
thermo 50 #每隔50步输出数据
thermo_style custom step temp vol lx ly lz press epair evdwl ecoul elong ebond eangle pe ke etotal v_zLength
(2)fix print命令
thermo命令输出的数据需要单独从log文件中复制出来,如果数据较多就会比较麻烦,比较简单方式是把数据输出到一个单独的文件。
如拉伸过程中的应力应变数据输出到stress-strain.dat文件,可以使用fix print命令:
fix 1 all print 100 "${strainx} ${stressx}" file stress-strain.dat screen no
特点:该命令输出的瞬时值,没有取平均。
(3)fix ave/time命令
fix print命令按一定步数输出当前步数的瞬时值,有些模拟数据可能波动比较大,用fix print命令得到的曲线可能不平滑,此时,可对数据按一定步数进行平均后进行输出,用到的命令为fix ave/time命令,具体使用方法见:
lammps教程:平均值输出fix ave/time命令详解
例如:
fix output_thermo all ave/time 10 200 ${interval} v_zLength v_epair v_evdwl v_ecoul v_elong v_ebond v_eangle v_ke v_pe v_etotal file ${filename1}-thermo.dat #计算能量
fix output_msd oxygen ave/time 10 200 ${interval} c_msd[1] c_msd[2] c_msd[3] c_msd[4] file ${filename1}-ice-msd.dat #时间步2000步内,取每隔10步取一个数,共200个数,进行平均
fix output_mmttemp all ave/time 10 200 ${interval} c_mmt c_mmtdown c_mmtup file ${filename1}-mmt-temp.dat #计算温度
fix output_icetemp all ave/time 10 200 ${interval} c_ice c_icedown c_icemiddle c_iceup file ${filename1}-ice-temp.dat
(4)以上三个命令是对模拟标量的输出,下面介绍矢量值的输出方法。
lammps中的矢量主要是与单原子有关的量,单原子坐标、速度、受力等矢量是系统已经自定义好的量,可以直接引用。
有些量是通过compute命令计算出来的量,如compute stress/atom命令会计算出每个原子的应力,这个应力就是一个矢量。
矢量可以使用dump命令输出,具体使用方法见:
以上4种命令是lammps模拟中常见的输出命令,灵活使用这几种命令足以满足模拟需求
日常使用:
dump 1 all custom ${interval} ${filename1}.lammpstrj id type x y z #可看看平衡的轨迹