计算化学公社

 找回密码 Forget password
 注册 Register
Views: 13593|回复 Reply: 1
打印 Print 上一主题 Last thread 下一主题 Next thread

[Lammps] compute pressure命令解读

[复制链接 Copy URL]

37

帖子

1

威望

453

eV
积分
510

Level 4 (黑子)

本帖最后由 YZH_jesse 于 2021-3-25 11:18 编辑

compute pressure 命令

语法: compute ID group-ID pressure temp-ID keyword ...


temp-ID 用来计算温度的compute的ID,如果在压力计算中不考虑动能(kinetic energy) 项,则temp-ID可设置为NULL   (PS:动能项也称为温度项)


keyword和示例具体查阅官网 https://lammps.sandia.gov/doc/compute_pressure.html


描述:


这个命令用来计算体系的全局压力。语法中的group-ID必须设置为all。压力计算公式如下:

        
其中N代表真实自由度比维数(really degrees-of-freedom (DOF) divided by d = dimensionality),自由度(DOF)的数值由compute temp命令得到;KB是Boltzmann常数,T是温度,d是系统的维数。第二项是virial项,它的值等于-dU/dV,对所有的成对项以及二体、三体、四体、多体、长程相互作用进行计算,ri和fi分别代表原子 i 位置和力的矢量,黑点代表点积。当使用周期性边界的时候,N‘将同样包含镜像中的原子,即所谓的 ghost atoms,它们的位置和力的矢量也包含在公式中。如果不使用周期性边界,N’=N,就只包含盒子内的所有原子。Fix施加的约束(比如fix shake)同样会作用在virial项。

这个compute命令同样会计算得到一个对称的压力张量(symmetric pressure tensor),该张量以六元向量的方式被存储。六元向量的顺序分别为:xx, yy, zz, xy, xz, yz。I J方向上的压力向量的计算公式和上述公式相似,只是位置、速度、力采用了对应方向(x, y, z)上的分量。

如果没有额外的keywords,那么上述公式中的所有项都会被计算。这其中包含了动能项(温度)和virial项(pair、bond、angle、dihedral、improper、kspace(long range)and fix对每个原子的力);如果使用了keywords,那么就只有keyword所对应的那一项会被计算,举例来说,如果keyword选择为ke,那么就只有ke项(即等式右边的第一部分)会被计算在压力张量中;如果keyword选择为virial,该compute命令就会计算除了ke项以外的所有其他项(即等式右边的第二部分);如果keyword选择为pair,那么就只有virial项中的pair对压力的贡献被计算。
        
keyword pair/hybrid代表只计算hybrid 或者 hybrid/overlay 的sub-style中的一个对压力张量的贡献
        
注意:温度和动能并不会被这个compute所计算,而是被compute temperature所计算,如果想调用温度项的话,就需要在compute pressure之前定义compute temperature;如果计算压力值时并不想考虑温度项(ke)的影响,那么将temp-ID设置成NULL就行。一般而言,用于compute pressure的compute temperature需要计算所有原子的温度以和virial项保持一致(因为compute pressure的group-ID必须设置成all)。
        
从compute temperature的界面可知,ke=DOF/2*KB*T,ke是粒子速度的函数,粒子速度分为两部分:一是粒子的advection速度,这一项由于某些粒子的集合运动(aggregate motion)产生;二是粒子的热速度(thermal velocity)。两者之和是粒子的总速度,但一般而言只有后者(thermal velocity)是用来计算温度的速度。所以如果想在计算温度的时候只考虑粒子热速度,那么就需要用粒子的总速度减去一个偏差,具体见 https://lammps.sandia.gov/doc/Howto_temperature.html
        
compute thermo_press all pressure thermo_temp 这个命令是默认写在lammps中的,用来做thermo_modify的输出项
        
这个命令会计算得到一个全局的标量(压力),或者是一个六元的全局向量(压力张量),可以通过1-6的下标对这些向量进行索引,同时这些变量也可作为scalar或者vector在其他的命令中当作输入项。压力张量中向量顺序为:pxx pyy pzz pxy pxz pyz。 注意:这个命令所得到的全局标量和压力张量前三项的关系为 press = (pxx + pyy + pzz)/3
        
这个compute得到的标量和向量是“intensive”的,标量和向量的单位都是压力单位(具体的压力单位由 units 设置,以real为例,压力单位就是一个大气压)。


同时也想问一下各位老师,所谓计算得到的标量和向量是“intensive”是什么意思,它应该怎样翻译成中文呢?


PS:这个是我自己翻译以便加深理解的,希望各位大佬批评指正。
        

评分 Rate

参与人数
Participants 3
eV +12 收起 理由
Reason
Madara_lht + 4 我很赞同
kazusa + 4 赞!
sobereva + 4

查看全部评分 View all ratings

1

帖子

0

威望

101

eV
积分
102

Level 2 能力者

2#
发表于 Post on 2024-2-14 15:30:20 | 只看该作者 Only view this author
intensive是指具有强度性质的,这里是说压强是强度量(intensive quantity),类似温度、密度,最直观的特点是不具有加和性;与之对应的是广度(延)性质(extensive property),比如质量、体积,通常情况下可以直接加和。

感谢楼主整理出temp和press的出处,我在用LAMMPS计算弹性张量,部分数值有偏差,看到这一篇,突然发现弹性张量通常使用的Voigt表示和LAMMPS内置的press的方向顺序是不一样的:Voigt表示是xx↦1,yy↦2,zz↦3,yz↦4,xz↦5,xy↦6,而LAMMPS中的压强顺序则是xx, yy, zz, xy, xz, yz,需要手动重新赋值对应起来。

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-16 09:03 , Processed in 0.176887 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list