Syntax
compute ID group-ID voronoi/atom keyword arg ...
- ID, group-ID are documented in compute command
- voronoi/atom = style name of this compute command
- zero or more keyword/value pairs may be appended
keyword = only_group or surface or radius or edge_histo or edge_threshold or face_threshold or neighbors or peratom
only_group = no arg
occupation = no arg
surface arg = sgroup-ID
sgroup-ID = compute the dividing surface between group-ID and sgroup-ID this keyword adds a third column to the compute output
radius arg = v_r
v_r = radius atom style variable for a poly-disperse Voronoi tessellation
edge_histo arg = maxedge
maxedge = maximum number of Voronoi cell edges to be accounted in the histogram
edge_threshold arg = minlength
minlength = minimum length for an edge to be counted
face_threshold arg = minarea
minarea = minimum area for a face to be counted
neighbors value = yes or no, i.e. store list of all neighbors or no
peratom value = yes or no, i.e. per-atom quantities accessible or no
Examples
1 | compute 1 all voronoi/atom |
Description
定义一个计算,用来计算原子对应的泰森多面体 (voronoi cell)。该计算针对给定组中的所有原子,非零值的属性会被存储。
Define a computation that calculates the Voronoi tessellation of the atoms in the simulation box. The tessellation is calculated using all atoms in the simulation, but non-zero values are only stored for atoms in the group.
默认情况下,有两个物理量会被计算,两个物理量都是原子的属性 (per-atom) 。一个是每个原子的voronoi cell的体积,处于任何一个原子的voronoi cell中的点,到该原子的距离小于到周边其他原子的距离。另一个是voronoi多面体的面数,这个量等于中心原子的最近邻原子数再加上与该中心原子接壤的外表面的个数。如果一个原子位于无限大外表面上,那么与该中心原子接壤的外表面的个数为1。
By default two per-atom quantities are calculated by this compute. The first is the volume of the Voronoi cell around each atom. Any point in an atom’s Voronoi cell is closer to that atom than any other. The second is the number of faces of the Voronoi cell. This is equal to the number of nearest neighbors of the central atom, plus any exterior faces (see note below). If the peratom keyword is set to “no”, the per-atom quantities are still calculated, but they are not accessible.
Keywords
If the only_group
keyword is specified the tessellation is performed only with respect to the atoms contained in the compute group. This is equivalent to deleting all atoms not contained in the group prior to evaluating the tessellation.
If the surface
keyword is specified a third quantity per atom is computed: the Voronoi cell surface of the given atom. surface takes a group ID as an argument. If a group other than all is specified, only the Voronoi cell facets facing a neighbor atom from the specified group are counted towards the surface area.
In the example above, a precipitate embedded in a matrix, only atoms at the surface of the precipitate will have non-zero surface area, and only the outward facing facets of the Voronoi cells are counted (the hull of the precipitate). The total surface area of the precipitate can be obtained by running a “reduce sum” compute on c_2[3]
If the radius
keyword is specified with an atom style variable as the argument, a poly-disperse Voronoi tessellation is performed. Examples for radius variables are
1 | variable r1 atom (type==1)*0.1+(type==2)*0.4 |
Here v_r1
specifies a per-type radius of 0.1 units for type 1 atoms and 0.4 units for type 2 atoms, and v_r2
accesses the radius property present in atom_style sphere for granular models.
The edge_histo
keyword activates the compilation of a histogram of number of edges on the faces of the Voronoi cells in the compute group. The argument maxedge of the this keyword is the largest number of edges on a single Voronoi cell face expected to occur in the sample. This keyword adds the generation of a global vector with maxedge+1 entries. The last entry in the vector contains the number of faces with with more than maxedge edges. Since the polygon with the smallest amount of edges is a triangle, entries 1 and 2 of the vector will always be zero.
The edge_threshold
and face_threshold
keywords allow the suppression of edges below a given minimum length and faces below a given minimum area. Ultra short edges and ultra small faces can occur as artifacts of the Voronoi tessellation. These keywords will affect the neighbor count and edge histogram outputs.
If the occupation
keyword is specified the tessellation is only performed for the first invocation of the compute and then stored. For all following invocations of the compute the number of atoms in each Voronoi cell in the stored tessellation is counted. In this mode the compute returns a per-atom array with 2 columns. The first column is the number of atoms currently in the Voronoi volume defined by this atom at the time of the first invocation of the compute (note that the atom may have moved significantly). The second column contains the total number of atoms sharing the Voronoi cell of the stored tessellation at the location of the current atom. Numbers in column one can be any positive integer including zero, while column two values will always be greater than zero. Column one data can be used to locate vacancies (the coordinates are given by the atom coordinates at the time step when the compute was first invoked), while column two data can be used to identify interstitial atoms.
If the neighbors
value is set to yes, then this compute creates a local array with 3 columns. There is one row for each face of each Voronoi cell. The 3 columns are the atom ID of the atom that owns the cell, the atom ID of the atom in the neighboring cell (or zero if the face is external), and the area of the face. The array can be accessed by any command that uses local values from a compute as input. See the Howto output doc page for an overview of LAMMPS output options. More specifically, the array can be accessed by a dump local command to write a file containing all the Voronoi neighbors in a system:
1 | compute 6 all voronoi/atom neighbors yes |
If the face_threshold
keyword is used, then only faces with areas greater than the threshold are stored.
Voronoi计算是借助开源的voro++包完成的,由任职于UC伯克利以及劳伦斯国家实验室的Chris Rycroft教授编写。如果你想要进行voronoi计算的话,此包必须安装在你的系统上,然后编译LAMMPS, 得到带有voronoi计算功能的可执行文件。查看src/VORONOI目录下的README以获取更多信息。
The Voronoi calculation is performed by the freely available Voro++ package, written by Chris Rycroft at UC Berkeley and LBL, which must be installed on your system when building LAMMPS for use with this compute. See instructions on obtaining and installing the Voro++ software in the src/VORONOI/README file.
Note
在Voronoi体积计算的时候,每个处理器计算各自处理器中存储的原子的voronoi信息,并且包含虚原子的影响。
The calculation of Voronoi volumes is performed by each processor for the atoms it owns, and includes the effect of ghost atoms stored by the processor. This assumes that the Voronoi cells of owned atoms are not affected by atoms beyond the ghost atom cut-off distance. This is usually a good assumption for liquid and solid systems, but may lead to underestimation of Voronoi volumes in low density systems. By default, the set of ghost atoms stored by each processor is determined by the cutoff used for pair_style interactions. The cutoff can be set explicitly via the comm_modify cutoff command. The Voronoi cells for atoms adjacent to empty regions will extend into those regions up to the communication cutoff in x, y, or z. In that situation, an exterior face is created at the cutoff distance normal to the x, y, or z direction. For triclinic systems, the exterior face is parallel to the corresponding reciprocal lattice vector.
Note
voro++包本来是针对三维体系的。但是二维体系也可以使用,所有的原子有同一个z坐标值。每一个原子的voronoi多面体都是一个多棱柱,沿着z方向有相同的截面面积并能找到上下两个外表面。如果原子并没有同一个z坐标,那么多棱柱将会是倾斜的,我理解的是多棱柱的棱不再与z轴平行。此时多棱柱的截面面积等于多棱柱的总体积除以多棱柱沿z方向的高度。需要注意的是,这个沿z方向的高度是你人为决定的,在使用creat_atom
或者read_data
的时候。
The Voro++ package performs its calculation in 3d. This will still work for a 2d LAMMPS simulation, provided all the atoms have the same z coordinate. The Voronoi cell of each atom will be a columnar polyhedron with constant cross-sectional area along the z direction and two exterior faces at the top and bottom of the simulation box. If the atoms do not all have the same z coordinate, then the columnar cells will be accordingly distorted. The cross-sectional area of each Voronoi cell can be obtained by dividing its volume by the z extent of the simulation box. Note that you define the z extent of the simulation box for 2d simulations when using the create_box or read_data commands.
Output info:
默认情况下,该命令计算得到一个二维数组。第一列是每个原子的voronoi体积。第二列是每个原子的最近邻数,要保存此列需启用关键词occupation
,详见上面的关键词解读。这两列值可被获取通过任何per-atom类型的计算或者赋值操作,详见LAMMPS官方文档中的how to output一节。如果关键词peratom
关闭,那么这两列数据任然会被计算,但不可获取。
By default, this compute calculates a per-atom array with 2 columns. In regular dynamic tessellation mode the first column is the Voronoi volume, the second is the neighbor count, as described above (read above for the output data in case the occupation
keyword is specified). These values can be accessed by any command that uses per-atom values from a compute as input. See the Howto output doc page for an overview of LAMMPS output options. If the peratom
keyword is set to “no”, the per-atom array is still created, but it is not accessible.
如果关键词edge_histo
启用,那么该计算会产生一个全局矢量,其长度为$最大面数+1$,包含一个直方图描述每个面的棱数 (the number of edges)???
If the edge_histo
keyword is used, then this compute generates a global vector of length maxedge+1, containing a histogram of the number of edges per face.
如果关键词neighbor
的值取为yes,那么该计算将会产生一个局域数组 (local array) ,此数组有三列,有一列存储的是每个voronoi多面体的每一面???
If the neighbor
value is set to yes, then this compute calculates a local array with 3 columns. There is one row for each face of each Voronoi cell.
Note
LAMMPS中的变量类型有: per-atom quantity, local quantity. scalar, vector.
Some LAMMPS commands such as the compute reduce command can accept either a per-atom or local quantity. If this compute produces both quantities, the command may access the per-atom quantity, even if you want to access the local quantity. This effect can be eliminated by using the peratom keyword to turn off the production of the per-atom quantities. For the default value yes both quantities are produced. For the value no, only the local array is produced.
voronoi多面体的体积具有长度立方的量纲,每个面的面积具有长度平方的量纲。
The Voronoi cell volume will be in distance units cubed. The Voronoi face area will be in distance units squared.
Restrictions
要使用此命令,需先启用VORONOI包,然后编译获得可进行voronoi计算的可执行文件。如何编译,详见LAMMPS官方文档的Build package.
This compute is part of the VORONOI package. It is only enabled if LAMMPS was built with that package. See the Build package doc page for more info.
同时,一份voro++库的复制版本是需要的。详见src/VORONOI目录下的README以获取更多信息。
It also requires you have a copy of the Voro++ library built and installed on your system. See instructions on obtaining and installing the Voro++ software in the src/VORONOI/README file.
Related commands
dump custom, dump local
Default
neighbors no, peratom yes