金刚石晶格的索引表示

计算科学 蒙特卡洛 模拟
2021-12-25 05:19:13

对于在金刚石晶格结构中结晶的固体的动力学蒙特卡罗模拟,我需要将金刚石晶格有效地表示为整数,以将其存储在某种类似数组的结构中,其中每个数组索引都可以唯一地映射到真实空间中的某个原子:

array[i](x,y,z)

菱形晶格由两个面心晶格组成,它们彼此相对移动:菱形格子

到目前为止,我还没有找到非常合适的解决方案。我对这个映射有一些必须满足的要求:

  • 我需要知道整数空间中每个原子的最近邻和次近邻。如果可能的话,我想预先计算我需要从当前原子的数组索引中添加或减去的数字,以获得最近的 4 个和 12 个最近的邻居:jk=i+Δik,k=1,,4(12)
  • 我需要从底部(在实际空间中)向上填充系统,所以我很乐意至少对于坐标有一些简单的关系。zz(i)
  • 映射越简单,我就越开心。如果它有点直观,那将是一个很大的优势,所以我可以在脑海中想象它。

到目前为止我尝试了什么:

  • 我找到了这个网站(最近也找到了这个网站,在该网站上给出了钻石晶格的表示,包括最近邻居的。然而,我找不到从那里到真实空间的映射。(知道我该怎么做吗?)(i,j,k)(Δi,Δj,Δk)
  • 一个可行的选择是使用 fcc 晶格几何,基向量从原点指向面中心的原子。有了这个基础,晶格的每个原子都可以用一组 3 个整数来达到。然而,由于金刚石晶格由两个移位的 fcc 晶格组成,我需要第四个索引来确定每个原子属于哪个晶格。另外,我没有成功找到一个简单的映射,它允许我确定平面左右。(x,y,z)(i,j,k,l)z=0

我在问,因为这应该是一个普遍的问题。有很多模拟/模拟出版物,其中模拟了金刚石晶格(Si,GaS,......),这让我感到惊讶,我在互联网上找不到解决我问题的简单方法。

如果您能指出我的一些方向或了解有关如何做到这一点的任何文献,我将非常高兴。

1个回答

据我所知,以您需要的方式索引一个简单的立方晶格应该很容易。如果我们让是沿方向的索引,我们可以轻松地将它们映射到线性索引,如下所示: 接下来,我们需要每个晶胞可容纳 8 个原子。最简单的方法应该是在上面的等式中添加 8 的步幅,并让成为描述我们所指的晶胞内哪个原子的索引, i,j,kx,y,zn

n=((kNy)+j)Nx+i
l={0,1,...,7}
n=(((kNy)+j)Nx+i)×8+l.

  • 坐标比较容易:先求出问题晶胞乘以晶格常数,然后检查找出我们正在处理的晶胞内的哪个原子并相应地调整zzn/(8NxNy)l=nmod(8)z
  • 找到最近的邻居有点痛苦,但从好的方面来说,它应该是一种有效的计算。除非你能找到一个聪明的方法,否则你可能不得不为的每个值专门编写一些代码......l