[gmx-developers] Use of invsqrt with tables
erik.lindahl at gmail.com
Wed Mar 23 14:07:23 CET 2016
> On 23 Mar 2016, at 14:00, Berk Hess <hess at kth.se> wrote:
>>> But avoiding the inversion is not possible, since you need to multiply
>>> the scaling force by the normalized distance vector.
>> The force should be zero at r=0 for symmetry reasons and hence the code should not crash.
> I know that. But that doesn't help in avoiding the division needed to get the normalized distance vector. You can avoid the division by exactly zero using a conditional. But you will still have issues for distances very close to zero. A solution I use for forces between excluded atoms in the non-bonded kernel, which can potentially overlap, is to add a very small value epsilon to r^2, such that invsqrt produces a large number that not close to max real. Multiplying this with r gives a value close to zero that's slightly off from 1, but the error will be less than real precision for potentials that are symmetric around 0.
I have planned infrastructure for the new kernels that can handle much of this with masked (SIMD) operations instead of conditionals, but my priority for the 2016 release is to get rid of group kernels, so this might not make it…
More information about the gromacs.org_gmx-developers