Get only the dislocation core atoms from DXA

Hi, I currently have an FCC lattice with two parallel screw dislocations. They have opposite Burgers vectors, as shown in the picture below.

With DXA, how do I get only the dislocation core atoms that belong to each of the two dislocation segments? My understanding is that the DislocationSegment object only stores points that correspond to a 3D continuous dislocation line representation, but not the actual atoms. Basically, I want the results to be something like this:

  • Dislocation segment 1: [particle id1, particle id2, …]
  • Dislocation segment 2: [particle id61, particle id62, …]

I have tried doing cluster analysis on only the non-FCC atoms, which gave me 2 clusters. With further postprocessing, I could compare and assign the two opposing burgers vectors to each cluster. I am just wondering if there is an easier way.

Unfortunately, DXA doesn’t provide the capability to identify atoms at the dislocation core. For your use case, the solution you showed is probably the easiest, fastest, and most stable option.

Alternatively, you could calculate the distance of each atom to the nearest dislocation line using a custom Python modifier. From my experience, this approach does not scale well to many atoms or high dislocation density. However, this method would allow you to identify atoms in the dislocation core based on a distance criterion.

I see. Thanks for the clarification!

Since this question has been asked several times before, let me provide some more background and explanation.

The DXA method is based on the Burgers circuit method, i.e. a closed path from atom to atom around the dislocation line (all in three-dimensional space).

For the detection of the dislocation it is not too important how wide or narrow this path is around the dislocation. But DXA tries to keep the path as short as possible to capture the mathematical position of the dislocation as precisely as possible and to rule out the possibility that more than one dislocation line is enclosed by the loop.

However, all of this is independent from the “defect core” of the dislocation. The Burgers circuits in DXA can be larger or even smaller than the core region (as long as it is ensured that mapping to the perfect crystal is still possible in the same way). Also, of course, it remains a question how exactly to define the core region of the dislocation. Taking the atoms that are not classified as crystalline by the CNA method (presumably your aim) is only one of the many possibilities.

DXA only knows the atoms that are part of the Burgers loop, i.e. lie on the atom-to-atom path that is then swept along the dislocation line. It does not care about the atoms that lie inside or outside this circuit. In fact, a closed curve in three-dimensional space has in principle no inside and no outside. Therefore, it is not well-defined how this method can be used to select a three-dimensional region of atoms. For that, it would need a completely closed surface. However, the “tube” formed by the Burgers circuit as it is swept along the dislocation is not closed at its ends.

In principle, it would be possible for DXA to mark all atoms that are visited by the moving Burgers circuit (i.e., the vertex atoms of the interface mesh in the picture above). However, I have not implemented this yet because I don’t know if it would be a useful output in practice. This is because the resulting set of atoms would probably be rather small and would not include all non-perfect atoms that are part of the non-crystalline core in the atomistic picture.