If you think there is a bug, then you need to include an “as small as possible” complete set of files that reproduce the issue, like inputs, forcefield files, data files, etc. Send that to the mail list, or even better file an issue here: https://github.com/lammps/lammps/issues. We can’t fix what we can’t reproduce.
I have found that ‘fix reax/c/species’ is the one giving the problem. If i give Nfreq as 100 it hangs at the 99th step and if i give it as 1000, then it hangs at the 99th step. This is irrespective of the values taken for Nevery and Nrepeat. I have attached a test system along with all required inputs.
data.Rbasal_water_768 (125 KB)
ffield.reax.BNOH (12.1 KB)
in.BN (769 Bytes)
param.qeq (84 Bytes)
I have found the solution for my problem and this is what I think is happening. Please correct me if I am wrong. As I had mentioned earlier my system consists of a nanosheet immersed in solvent molecules. Everything works fine if I time integrate my sheet as well as the solvent molecules. But when I use ‘fix nvt’ only on the solvent molecules and use ‘fix reax/c/species’ for all and wanted it to write output for all the species formed during every N timesteps it hangs exactly at the (N-1)th step. This is probably because the solvent molecules do not form any bonds with the nanosheet within N timestep and thus cannot write output for the sheet since it is not fixed for nvt and thus hangs. That is why one among the four systems that I was trying worked without any glitches because a bond formation between my sheet and molecules occurred within the specified timestep (Nfreq). Also when i use ‘fix nvt’ for all with ‘fix reax/c/species’ for all, it works well. Does all this mean i can never output species information if i fix my sheet when there is no bond formation like the example that i had attached? I feel it would be better if it can throw out an error instead of hanging indefinitely.
I can reproduce the hang. The issue is that this line of code in FixReaxCSpecies::FindMolecule():
if (clusterID[i] == clusterID[j] && PBCconnected[i] == PBCconnected[j]
&& x0[i].x == x0[j].x && x0[i].y == x0[j].y && x0[i].z == x0[j].z) continue;
is trying to compare x0[i].z with x0[j].z, which is 1.93871e-320 vs 1.99254e-316, so the check fails to continue and it loops forever in the while loop. One solution would be to add a tolerance. Ray, any other ideas?
Add a tolerance would be a good fix, thanks!