I am writing to the Lammps mailing list to report a potential bug when GPU is used for interface simulation.
I have ~1000 propionitrile molecules in an elongated simulation box. The box length is 20 nm and the cross area is ~5*5 nm^2. The pair style lj/cut/coul/long/gpu is used along with kspace style pppm/gpu. The cutoff is 20 A and 14 A for the lj and real space coul interactions. The force precision for pppm is 10^(-6). The run style is respa, the thermostating method is fix nvt (Nose-Hover), and the temperature is 448 K. The force field parameters are taken from TraPPE-UA potential. I am totally aware of all conditions that is needed to properly simulate interfaces. I have attached my input and data file for more details.
I am using one GeForce GTX 660 ti as my GPU unit and the OS is CentOS 6.4. I have installed all GPU drivers as well as Lammps library for GPU. I was able to successfully reproduce the provided examples in GPU folder found in ~/lammps/exapmles/gpu directory.
When /gpu flag is added to the lj/cut/coul/long pair style, the pressure components in x and y directions are a large negative number (about -130 atm). However, liquid density and vapor pressure for my system is consistent with what is published by TraPPE developers. Having a large negative Pxx and Pyy results in a large positive surface tension (~140 mN/m) for propionitrile at T = 448 which is not understandable physically. Vapor pressure is ~8 atm, liquid density is ~0.6 g/cc and surface tension should be ~10 mN/m.
Things that I have tried and “didn’t help”:
Changing the run style to verlet.
Changing the time step to as low as 0.5 fs.
Using Berendsen method instead of Nose-Hover for thermostating.
Changing the number of threads in “gpu force/neigh” command.
Changing the gpu/cpu load in force calculation.
Using the pppm command with no GPU flag.
Using ewald rather than pppm for kspace calculations.
I did also tried a molecule without any partial charge such as Butane. The problem is still there. For butane, lj/cut/gpu is used, of course.
Different temperatures, number of molecules and also longer equilibrium period didn’t help either.
Running on a single core without using mpirun.
Things that I have tried and “did help”:
Removing the gpu flag in lj/cut/coul/long/gpu pair style. Using the exact same data and input file with the lj/cut/coul/long/opt pair style reproduce reasonable values for surface tension as well as vapor pressure and liquid density.
In a bulk fluid simulation every thing turns out to be OK when GPU is used. Energy and pressure values are just fine. Whatever the problem is, only shows itself when an interface is being simulated.
Thank you for the time and effort you put in this.
Ahmadreza F. Ghobadi
Molecular Simulation Lab.
Chemical and BioMolecular Eng. Dep.
The University of Akron. Akron OH
in.1080pron (1.38 KB)
30pron.data (6.17 KB)