# How to control the optimization step size in Gaussian?

I would like to perform a geometry optimization for a weakly bound methane dimer structure with Gaussian 16. During this process, the Newton-Raphson step should be controlled such that its length should not exceed 0.01 bohr. For this purpose, I created the following input (strictly for testing purposes):

%nprocs=120
%chk=test
%mem=100GB
#hf/sto-3g opt=(trustupdate,nrscale,maxstep=1,maxcycles=100,tight)

test

0 1
C        0.000000000      0.000000000     -1.821797542
H        0.000000000      0.000000000     -2.931818538
H       -0.906328348      0.523268916     -1.451790544
H        0.906328348      0.523268916     -1.451790544
H        0.000000000     -1.046537831     -1.451790544
C        0.000000000      0.000000000      1.821797542
H        0.000000000      0.000000000      2.931818538
H       -0.906328348     -0.523268916      1.451790544
H        0.906328348     -0.523268916      1.451790544
H        0.000000000      1.046537831      1.451790544


Here maxstep=1 should restrict the NR step below 0.01 bohr. Nevertheless, in the 9th step, I received the following report on convergence:

         Item               Value     Threshold  Converged?
Maximum Force            0.001795     0.000015     NO
RMS     Force            0.000287     0.000010     NO
Maximum Displacement     0.079485     0.000060     NO
RMS     Displacement     0.024807     0.000040     NO


It seems to me that the 0.01 bohr criterion is not fulfilled for the optimization displacement. Is there any way to really constrain the step length during optimization?

Gaussian by default uses a dynamic trust radius for optimizations to a minimum (you also ensured this by including the trustupdate option). When you specify a maxstep this is only guaranteed to be the initial trust radius. In fact, the second step will ensure the trust radius is at least 0.05.
You can see the trust radius for a given step (if you have #p in the route section) by searching for "Trust test". In that same line, it will say "DXMaxT set to 5.00D-2", with the value printed being the trust radius used for this step.
To prevent these updates, simply replace TrustUpdate with NoTrustUpdate. Keep in mind that they likely force the radius up to 0.05 for a reason and your optimizations may fail or take much longer without these updates. You should only use a step this small if you think you have a geometry very close to the minimum or a very messy potential energy surface that you want to step through cautiously.