How to use Wigner-Seitz cell to calculate the nearest neighbor in a given crystal? What is the physical principal? And which (free) software can be used to do this calculation?
The Wigner-Seitz cell is not really a direct measure of interatomic distances. It is more a description of the volume of points closest to a lattice point. If you take a 2D square lattice, the Wigner Seitz cell is a square of identical cell dimensions, centered around each lattice point. If you take a rectangular 2D cell, the W-S cell is also a rectangle of identical unit cell length, centered around each lattice point. As the dimensions of the rectangular unit cell change, so do those of the W-S cell. If you change the aspect ratio, those of th W-S cell will follow. Thus the borders of the W-S cell are at different distances to the central atom even for something as basic as a 2-D lattice.
To calculate the distance from any atom to another in a triclinic unit cell, you will have to calculate the value of the vector product: square root of (u*G*u), where u is the vector with the fractional coordinates, and G the metric tensor. The first u is the transposed from i.e. the row vector (x,y,z) the second u the column vector. The elements of the metric tensor are pairwise scalar products of the base vectors.
G(1,1) = a*a
G(1,2) = a*b*cos(gamma) etc.
Most programs that visualize crystal structure can calculate interatomic distances. JMOL is a free one for example
As R. B. Neder mentionned it the Wigner-Seitz cell is nots usually used to calculate the interatomic distances or the number of nearrest atoms neighbor.
One will correct me if I'm wrong but, the way the wigner-seitz cell is constructed we may deduce the number of nearest neighbor by the number of the closest planes delimiting the W-S volume (as they should be equal).
I guess you can used AtomEye to see the number of nearest neighbor processing as follow : 1 you load your structure on AE __2 you flag one atom __3 you add a filter that only shows the atoms which are under a certain distance from the flagged one (distance that you can increase or decrease) OR you can add a filter which only draw the bond under a certain length (length that you precise). You just have to count the bond of a specific atom of your structure.
Actually the question is not clear. If, as already noted above, one wants to know the distances of atoms from a given atom it is necessary to have the atomic coordinates of the atoms within the unit cell of a crystalline material. The process is not straightforward and to understand it one must know at least basic crystallography.
Hi R. B.Neder, Matthieu David and Giovanni Ferraris, thank you very much for your answers. I know there are a lot of software to visualise the crystal structure. It is also easy to measure atomic distances, bond angles, and so on. But the problem is: how to define the nearest neighbours, next nearest neighbours. As mentioned by Giovanni Ferraris, certain length is required to distinguish nearest neighbours from next nearest neighbours, next next nearest neighbours. How to determine such "certain length"?
There is really no clear definition of a nearest, next nearest neighbor in a crystal structure. Often, the coordination polyhedron for the chemically bonded nearest neighbors might be considerably distorted, resulting in a range of distances for the nearest neighbors. This distance range can overlap with the distance range around another atom in the unit cell, and even with a second neighbor shell for yet another atom. A possible distinction that will work in many cases is that the chemical nature of nearest and second nearest neighbors has to differ. If you have as central atom a metal, nearest neighbors will (usually) be anions second neighbors metals and vice versa. At further shells even this distinction is no longer unique.
All said, it is not 100% fail proof to automatically get a list of first second etc neighbors that will work in any structure. Display programs like diamond, atoms etc do have features that list the number of neighbors for atom types, I have to admit I rarely use these features in these programs.
To determine the neighbors a program has to calculate the distance form a given atom to all others in the unit cell, including periodic boundary conditions to include neighbors in the next unit cell. This list can be sorted by distance and be listed to the user The user will have to decide which atoms are the chemically bonded(nearest) neighbors , and which are in further shells.
I have written a program, the discus_suite that is intended for a very flexible modification of any type of structure. It can perform the task at hand with the attached macro.
Download the discus_suite from
https://github.com/tproffen/DiffuseCode/releases
Once installed, copy the macro and a cif file into a suitable directory/folder.
Start the discus_suite program. At windows, navigate to the proper folder by the command:
cd .. ! this moves a folder up
cd child_folder ! this moves from current folder to "chlld_folder"
sytem pwd ! get info in which folder we are
Once at the right folder run the macro as:
@distance.mac name_of_ciff_file ! without the .cif ending