Optimizations performed with hssend=.true. in the $statpt group will compute the Hessian and frequencies immediately after optimization has completed. Currently this output does not display properly. It is manifest in two ways:
(1) the normal mode displacements are applied starting from the first model (1.1) which is the input geometry before optimization
(2) the normal mode atomSets are displayed with the starting geometry not the final.
I have also attached an optimization (with hssend=.true.) to help illustrate this bug. In dimer.gamess there are 18 geometry steps. This means Jmol will identify 20 models for the optimization run. The first model is the input (COORDINATES (BOHR)). The second model is NSERCH=0. This is supposed to be identical to the first. The next 18 models are the optimization steps. The final 18 models are vibration frequencies. It is these last 18 models to which the normal mode displacements should be applied, not the first 18, and the geometry should match model 18.
I have included an updated GamessReader.java based on revision 11151 which fixes the two issues above. Three changes were required:
(1) Always clone from the LastModel. This works even without the optimization (runtyp=hessian). [lines 180-183]
(2) Use getCurrentAtomSetIndex to help find our current position in atoms which includes all atoms from all models. [lines 137-144]
(3) The vector displacements will only be applied to the new cloned atomSets. [lines 197-199]
It is possible there is a more elegant solution to changes 2 and 3.