Hello I want to understand better
(1) how LAMMPS order the atoms(Atom Identification) while writing dumps for “reset_atoms id sort no” ??? i.e. default option. secondly I assume LAMMPS perform this after every step.
I understand if reset_atoms id sort yes than it will order first by spatial sort of atoms into bins and than sorting ids with bins as mentioned in the refered documentation. This is because I want to identify neighbours with atom IDs.
(2) following the same Documentation how LAMMPS make correspondance between sort atom IDs(1D list/vector) with spatial sort(3D vectors) ?
This question makes no sense. How dump commands write output has no correlation with the reset_atoms command.
By default dump writes to the dump file only on MPI rank 0 and for that it has to receive data from all the other MPI ranks. The output uses the information of the atoms as they are received and thus not sorted by their atom IDs because the atom ID is independent from the position of the atom in either the system and the individual subdomain. Also the order in which atoms are stored on each processor is independent from their atom ID. For efficiency reasons, LAMMPS will sort the atoms regularly for spatial proximity so that looping over the atoms during the force computation makes better use of the CPU caches.
Now you can use the dump_modify command to have the dump command do an additional step that will sort the atoms by atom ID before they are written to a file.
The reset_atoms command is a command that allows to re-assign atom IDs. It will only be executed when issued in the input file.
You have to provide more details about how you want to do this and what you need to do this for.
This makes as little sense as the previous claim of yours.
Dear @akohlmey Thank you so much for detailed replay, I want to discuss some more, since you mentioned
The key message is atom ID is independent on position of atom. I want to refer the documentation " If the sort keyword is used with a setting of yes , then the assignment of new atom IDs will be the same no matter how many processors LAMMPS is running on. This is done by first doing a spatial sort of all the atoms into bins and sorting them within each bin. Because the set of bins is independent of the number of processors, this enables a consistent assignment of new IDs to each atom"
From this I was confused that atom ID are sorted based on the position. For example, with the initial sort if atom have some ID with respective position and then later it’s moved so the ID will remains same with updated coordinates.
I wanted to use this in a smart(computationally optimal, otherwise I have to use each atom coordinates) way to define the defect complexes(bivacancy for example). I know voronoi/occupation give very smart per atom information to define point defects, but I wanted to recognise two neighbouring vacancies by sorted ID(using respective voronoi output).
Moreover, with voronoi why interstitials are always doubled in number than vacancies ?
can you suggest something in this regard ?
This is specific to the reset_atoms id
command.
LAMMPS does occasionally sort atoms, but that does not change the atom ID of atoms, it merely reorders that arrays in which per-atom properties (like position, type, charge and atom ID) stored (i.e. changes the “local index”.
This makes no sense. There is no “initial sort” and only when you explicitly reset atom ID, i.e. assign new atom IDs is the case where the atom ID may be related to some position data. Otherwise atom identities remain unchanged, specifically when read from data files. Anything else defeats the purpose of having atom identifiers.
I have no idea what you are talking about. You are talking in some kind of shortcut notation that is not at all clear and it suggests that you don’t fully understand what a voronoi tesselation does. It is merely a way to partition the simulation cell in volumes centered on the atoms.
Dear Dr. @akohlmey Thank you so much for genius comment.
I have read and understood voronoi tesselation, and I want to utilise it with keyword “occupation”,
Anyways now it is pretty clear to me thank you so much for wonderful comments.
Dear Dr. @akohlmey I am pretty much clear about the implementation of Voronoi/atom command, but I have doubts about it’s working.
while making my test I try to produce one vacancy and one interstitial (Also confirmed with movie) in the 64 atom structure, and than I counted number of vacancies voronoi[1] and interstitials voronoi[2], but I see the number of defects are accamulating in dump file. It suggest a wrong comparison(old informated is not updated) of tesselation at increasing time steps with stored tesselation(ts=0). Also the increase is gradual.
here is my command
compute voro all voronoi/atom occupation
dump 1 all custom 1000 dump.occupation.1800.1000ev.c id type x y z c_voro[*]
dump_modify 1 sort id
here are the counted defects at every time step
vacancy interstitial
1,2
1,2
1,2
2,4
2,4
3,6
3,6
3,6
3,6
3,6
3,6
5,10
6,12
11,22
13,26
16,32
17,33
15,29
13,26
10,20
9,18
12,24
11,22
14,28
14,27
16,30
14,28
21,39
16,27
17,31
17,30
14,26
this is not possible from video I can clearly see just one vacancy and one interstitial.
can you please make a comment about this ?
No. If you believe that compute voronoi/atom does not compute what its documentation says it does, you need to provide a small but complete input deck that reproduces it and explain why you believe the result is incorrect and what the correct result would be. Since this is about a per-atom compute, the test system should only have a few 10s of atoms, so it is easy to review the computed per-atom information.
And please either post this as a new topic with a suitable subject, since this has nothing to do anymore with the current topic or post a bug report issue on github.
Dear @akohlmey I am posting it as a bug report issue on github.
please accept my best regards