For a kinetic Monte Carlo simulation of solids that crystallize in the diamond lattice structure, I need some efficient representation of the diamond lattice as integer(s), to store it in some array-like structure, where each array index can uniquely be mapped to a certain atom in real-space:
$$ array[i] \rightarrow (x,y,z) $$
The diamond lattice consists of two face centered lattices, that are shifted against each other:
So far, I have not found very suitable solutions. I have some demands to this mapping that must be met:
- I need to know the nearest and second nearest neighbors of each atom in integer space. If possible, I want to pre-calculate the numbers that I need to add or substract from the array index of my current atom to get to the 4 nearest and 12 second nearest neighbors: $j^k = i+\Delta i^k, k = 1,\dots,4 (12)$
- I need to fill the system from the bottom (in real space) up, so I would be happy to have some simple relation at least for the $z$ coordinate $z(i)$.
- The simpler the mapping is, the happier I would be. It would be a big plus if it 'd be somewhat intuitive, so I can imagine it in my head.
What I tried so far:
- I found this website (and recently also this website, on which a $(i,j,k)$ representation for the diamond lattice is given including the $(\Delta i, \Delta j, \Delta k)$ for the nearest neighbors. However, I couldn't find the mapping to get from there to real space. (Any idea how I could do that?)
- An option that works is to use an fcc lattice geometry, with basis vectors pointing from the origin to the atoms in the face centers. With that basis, each atom of the lattice can be reached with a set of 3 integers. However, since the diamond lattice consists of two shifted fcc lattices, I would need a fourth index to determine to which lattice each atom belongs to. Also, I didn't succeed in finding a simple mapping $(x,y,z) \rightarrow (i,j,k,l)$ that allows me to determine the $z=0$ plane or so.
I am asking, because this should be a common problem. There exist so many simulations/publications of simulations, in which the diamond lattice was simulated (Si, GaS,...) that it surprises me, I can't find a simple solution to my problem on the internet.
I would be very happy if you could point me into some direction or know any literature on how to do this.