I’m running into a conjugate gradient energy minimisation error whilst adjusting the structure of a coarse-grained helix in vacuum.
I perform two energy minimisation steps, steepest descent until an emtol of 800 followed by a conjugate gradient (with a 10 step steepest descent interval) until an emtol of 100.
This is the error I get whilst running the conjugate gradient minimisation:
Program: gmx mdrun, version 2020.5
Source file: src/gromacs/mdrun/minimize.cpp (line 700)
MPI rank: 0 (out of 4)
The coordinates could not be constrained. Minimizer 'cg' can not handle
constraint failures, use minimizer 'steep' before using 'cg'.
I’ve played around with the step size and emtol threshold with no luck. To complicate matters further I do see LINCS warnings during the minimisation. However, at the risk of generalising, I typically see LINCS warnings during the initial stages of working with a CG system and they are resolved during a short MD simulation with a small time step.
Investigating the system is pretty painful as I’ve automated the generation of 100+ CG lipid-protein systems. Therefore, any suggestions at this stage are welcomed.
Despite what I said above, on further investigation adjusting the step size fixes the problem. However, it’s on a system basis (why I struggled to isolate the cause in the first place). Whilst a step size of 0.001 fails and 0.01 works on one system, the inverse is true for a different system. I suppose I could loop each system checking the outcome and adjusting accordingly, but I think I’ll just stick with an initial steepest descent instead.
My experience with the conjugate gradients minimizer is that it is extremely fickle, and does not work well for anything beyond trivial systems of small molecules, at least in single precision.
Your observations (LINCS warnings and subsequent conjugate gradient failures) suggest that the systems are not sufficiently minimized via steepest descents prior to being passed to the conjugate gradients minimizer. You may have to use double precision here to really exhaustively minimize, then perhaps even do rounds of minimization with and without constraints. For a CG system, I’m presuming all bonds are constrained to maintain a relatively rigid internal geometry? That’s definitely a case that will cause major headaches with conjugate gradients, because if one is off, it becomes a cascade of failures.
Whether you even benefit from using conjugate gradients is a good question to ask yourself. I’ve never needed it, and any time I’ve tried to use it, it fails, yet all my simulations are stable.
That’s a massive help, Justin. Thanks very much.