Bug in shell code minimization
The shell and flexible constraint minimization used the same pointer for the trial and minimum configuration. Thus minimization is unaffected when no step is rejected until the minimum is reached. But when a step is rejected, many more iterations might be needed because the coordinates are not reset to those before the trial step.
Modules need to access views of memory with and without padding. This
class can be constructed from a PaddedVector, and provides the
capacity to hide the underlying padded container (and allocator),
while being able to obtain ArrayRef with and without padding.
Also updated wording of docs for ArrayRef, and attribution
Fixed issue with shell code using the same pointer for trial and
Fix inefficient shell minimization
In 5268b73d6cd, a bug was introduced when a shallow copy was used
instead of the former deep copy. However, in the original code some
pointers were used as "short-cuts", which is not neccessary. Those
pointers have been removed, and now the shell-code position vectors
are fully initialized at allocation time.
In order to get reproducible normal modes the delta x used for
computing derivatives was reduced.
#1 Updated by Mark Abraham over 1 year ago
- Assignee set to Mark Abraham
- Affected version - extra info set to all previous 2018 versions
#11 Updated by David van der Spoel about 1 year ago
Looking into this a bit more. We have forces on the shell that are very small, 1e-3 kJ/mol nm. According to Hooke's law F = k Dx, so we compute Dx, the change in position to minimize the energy (or get zero force) as
Dx = F / k
Since k in this case ~ 500 000 kJ/mol nm^2 we have Dx = 2e-10 nm which leads to precision issues.
Then this is used for the numerical derivation of the Hessian using df/dx = (f(x+delta)-f(x-delta))/(2 delta).
Will investigate some more.