Constrained Optimisation not Converging

Dear all,
i am trying to optimise the zwitterionic form of glycine in the gas phase. As the ionic form is not stable in gas phase, I am constraining the 3 N-H distances to their initial values. Without these constraints the geometry relaxes to the neutral glycine. Unfortunately, the optimisation does not converge and oscillates. I figured out that using opt_coordinates both helps the optimisation in the unconstrained case, as in internal coordinates the O-H bond is probably missing, but it does not help in case of the constrained optimisation.

memory 20 GB
molecule GlycinZwitter {
 0 1
 O          5.08692        1.03668       -0.91140
 C          4.57228        1.85982       -0.08309
 C          3.09589        1.47366        0.16704
 O          5.01218        2.86391        0.51139
 N          2.72038        0.33365       -0.75446
 H          3.67355        0.08337       -1.12936
 H          2.41238        2.29845       -0.04728
 H          2.96232        1.10961        1.18889
 H          2.18794        0.64400       -1.56732
 H          2.33753       -0.48499       -0.28551
}

set {
 basis cc-pvtz
 scf_type df
 mp_type df
 reference rhf
 geom_maxiter 150
 opt_coordinates both
 # full_hess_every 10
}

set optking {
  fixed_distance = ("
    5 6  1.02
    5 9  1.02
    5 10 1.02
  ")
}

#optimize("omp2.5")
optimize("scf")
#frq, wfn =frequency("omp2.5", return_wfn = True)
#molden(wfn, "GlycinZwitter")

The problem in this thread seems very similar but i was also in bad look using them.

Is there anything i could improve to get rid of these oscillations or is the system just difficult and i need to live with hundreds of iterations?

Best wishes
Phillip

I tried ‘frozen_distance’ like this:

  frozen_distance = ("
    5 6
    5 9
    5 10
  ")

and got convergence in 24 iterations (with scf). I did not carefully examine final geometry. The terminology is confusing but “frozen” is intended to be used for coordinates to be fixed at their initial values, and the algorithm for that should be more robust than the “fixed” one. I’m not working anymore on this C++ code, but will show (if you are interested) how one could do this computation using the newer python optimizer at the upcoming psicon.

BTW, I do see the occasional very bad step. Apparently one of the RFO roots at that point looks problematic and is getting skipped over. This might be because the eigenvector corresponds to a change in point-group. Other things you might try are limiting the maximum step size (if it turns out that one needs to approach this point more slowly), or turning on/off RFO root following. I’m not super-optimistic about those, but possibilities.

Thank you for the suggestions :slight_smile: The frozen_distance version has worked with the OO-MP2.5, the RFO root following not. The switch in point group might be from C1 to Cs, indeed. Nevertheless, the frozen_distance hint is working perfectly fine for me.