NWChem/doc/user/stepper.tex
Huub Van Dam 97f303e6f8 HvD: In the CVS era the $Id: $ tags in the source code files would
automatically be expanded to include useful information about the
checkin (including the file's revision number). With the switch over
to SVN this was lost because SVN only does this expansion if you 
explicitly ask for it (for every single file). 

I have added a script to the contrib directory that sets the appropriate
property to get SVN to do this expansion. This script will make it easy
to do this every time new source files are added. It is called
svn_expand_Id, the script contains some comments that explain the issue
and how it addresses this.  

This checkin sets this property for a subset of the relevant files
(trying to commit all files at once failed with svn crashing). 
In future the script will only affect those files for which the property
was not set before.
2010-10-29 18:04:21 +00:00

214 lines
9.2 KiB
TeX

%
% $Id$
%
\label{sec:stepper}
The STEPPER module performs a search for critical points on the
potential energy surface of the molecule defined by input using the
\verb+GEOMETRY+ directive (see Section \ref{sec:geom}). Since STEPPER
is {\bf not} the primary geometry optimization module in NWChem the
compound directive is required; the DRIVER module is the default (see
Section {\ref{sec:driver}}). Input for this module is
specified within the compound directive,
\begin{verbatim}
STEPPER
...
END
\end{verbatim}
The presence of the STEPPER compound directive automatically turns off
the default geometry optimization tool DRIVER. Input specified for the
STEPPER module must appear in the input file {\em after} the
\verb+GEOMETRY+ directive, since it must know the number of atoms that
are to be used in the geometry optimization. In the current version
of NWChem, STEPPER can be used only with geometries that are defined
in Cartesian coordinates. STEPPER removes translational and
rotational components before determining the step direction (5
components for linear systems and 6 for others) using a standard
Eckart algorithm. The default initial guess nuclear Hessian is the
identity matrix.
The default in STEPPER is to minimize the energy as a function of the
geometry with a maximum of 20 geometry optimization iterations. When
this is the desired calculation, no input is required other than the
STEPPER compound directive. However, the user also has the option of
defining different tasks for the STEPPER module, and can vary the
number of iterations and the convergence criteria from the default
values. The input for these options is described in the following
sections.
\section{{\tt MIN} and {\tt TS} --- Minimum or transition state search}
The default is for STEPPER to minimize the energy with respect to the
geometry of the system. This default behavior may be forced with the
directive
\begin{verbatim}
MIN
\end{verbatim}
STEPPER can also be used to find the transition state by following the
lowest eigenvector of the nuclear Hessian. This is usually invoked
by using the \verb+saddle+ keyword on the \verb+TASK+ directive
(Section \ref{sec:task}), but it may also be selected by specifying
the directive
\begin{verbatim}
TS
\end{verbatim}
in the STEPPER input.
\section{{\tt TRACK} --- Mode selection}
STEPPER has the ability to ``track'' a specific mode during an
optimization for a transition state search, the user can also have the
module track the eigenvector corresponding to a specific mode. This
is done by specifying the directive
\begin{verbatim}
TRACK [nmode <integer nmode default 1>]
\end{verbatim}
The keyword \verb+TRACK+ tells STEPPER to track the eigenvector
corresponding to the integer value of \verb+<nmode>+ during a transition
state walk. (Note: this input is invalid for a minimization walk
since following a specific eigenvector will not necessarily give the
desired local minimum.) The step is constructed to go up in energy
along the \verb+nmode+ eigenvector and down in all other degrees of
freedom.
\section{{\tt MAXITER} --- Maximum number of steps}
In most applications, 20 stepper iterations will be sufficient to
obtain the energy minimization. However, the user has the option of
specifying the maximum number of iterations allowed, using the input
line,
\begin{verbatim}
MAXITER <integer maxiter default 20>
\end{verbatim}
The value specified for the integer \verb+<maxiter>+ defines the maximum
number of geometry optimization steps. The geometry optimization will
restart automatically.
\section{{\tt TRUST} --- Trust radius}
The size of steps that can be taken in STEPPER is controlled by the
trust radius which has a default value of 0.1. Steps are constrained
to be no larger than the trust radius. The user has the option of
overriding this default using the keyword \verb+TRUST+, with the
following input line,
\begin{verbatim}
TRUST <real radius default 0.1>
\end{verbatim}
The larger the value specified for the variable \verb+radius+, the
larger the steps that can be taken by STEPPER. Experience has shown
that for larger systems (i.e., those with 20 or more atoms), a value
of 0.5, or greater, usually should be entered for \verb+<radius>+.
\section{{\tt CONVGGM}, {\tt CONVGG} and {\tt CONVGE} --- Convergence criteria}
Three convergence criteria can be specified explicitly for the
STEPPER calculations. The keyword \verb+CONVGGM+ allows the user to
specify the convergence tolerance for the largest component of the
gradient. This is the primary convergence criterion, as per the default
settings, although all three criteria are in effect. this default setting
is consistent with the other optimizer module DRIVER.
The input line for \verb+CONVGGM+ has the following form,
\begin{verbatim}
CONVGGM <real convggm default 8.0d-04>
\end{verbatim}
The keyword \verb+CONVGG+ allows the user to
specify the convergence tolerance for the gradient norm for
all degrees of freedom. The input line is of the following form,
\begin{verbatim}
CONVGG <real convgg default 1.0d-02>
\end{verbatim}
The entry for the real variable \verb+<convgg>+ should be approximately
equal to the square root of the energy convergence tolerance.
The energy convergence tolerance is the convergence criterion for the
energy difference in the geometry optimization in STEPPER. It can be
specified by input using a line of the following form,
\begin{verbatim}
CONVGE <real convge default 1.0d-04>
\end{verbatim}
%\section{{\tt FDAT} and {\tt FOPT} --- Initial Guess for Nuclear Hessian}
%
%Any initial hessian can be used with the STEPPER module via the ASCII
%hessian interface. The lower triangular [$3N{\times}(3N+1)/2$] matrix
%written in any ASCII format (e.g., 1pd20.10) will work but the entries
%must be one per line. This should be stored in a file called
%\verb+$file_prefix$+.hess in the current working directory of
%node zero.
%
%There are two other options that stepper allows regarding the initial
%guess for the nuclear hessian. By specifying a basis set (smaller
%than the desired basis set) with basis set name of ``fd basis'' (c.f.,
%Section \ref{sec:basis} users can optimize the geometry using the
%smaller basis and then generate a finite difference hessian.
%Alternatively users may generate a finite difference hessian at the
%current geometry.
%
%These actions are invoked with the input
%\begin{verbatim}
% FDAT
%\end{verbatim}
%This computes the finite difference nuclear hessian at the current
%geometry using the ``fd basis'' and then begins the optimization using
%the ``ao basis'' for the particular QM method.
%
%The directive
%\begin{verbatim}
%FDOPT
%\end{verbatim}
%optimizes the geomety of the system in the basis ``fd basis'' using
%the user specified QM method. The finite difference nuclear hessian
%is then computed at this optimized geometry for the ``fd basis.'' The
%optimization using the ``ao basis'' for the particular QM method is
%then started.
%
\section{Backstepping in STEPPER}
\label{sec:stepper:backstep}
If a step taken during the optimization is too large (e.g., the step
causes the energy to go up for a minimization or down for a transition
state search), the STEPPER optimizer will automatically ``backstep''
and correct the step based on information prior to the faulty step.
If you have an optimization that ``backsteps'' frequently then the
initial trust radius should most likely be decreased.
\section{Initial Nuclear Hessian Options}
Stepper uses a modified Fletcher-Powell algorithm to find the
transition state or energy minimum on the potential energy
hypersurface. There are two files left in the user's permanent
directory that are used to provide an initial hessian to the critical
point search algorithm. If these files do not exist then the default
is to use a unit matrix as the initial hessian. Once Stepper executes
it generates a binary dump file by the name of \verb+name.stpr41+
which will be used on all subsequent stepper runs and modified with
the current updated hessian. The default file prefix is the ``name''
that is used (c.f., \ref{sec:start}). It also stores the information
for the last valid step in case the algorithm must take a ``backstep''
(c.f., \ref{sec:stepper:backstep}). This file is the working data
store for all stepper-based optimizations. This file is never deleted
by default and is the {\bf\it first} source of an initial hessian.
The second source of an inital hessian is an ascii file that contains
the lower triangular values of the initial hessian. This is stored in
file \verb+name.hess+, where ``name'' is again the default file
prefix. This is the {\bf\it second} source of an initial hessian and
is the method used to incorporate an initial hessian from any other
source (e.g., another {\it ab initio} code, a molecular mechanics
code, etc.,). To get a decent starting hessian at a given point you
can use the task specification {\tt task scf hessian}, with a smaller
basis set, which will by default generate the {\tt name.hess} file.
Then you may define your basis set of choice and proceed with the
optimization you desire.\footnote{If you have done a geometry
optimization and hessian generation in the same input deck using a
small basis set, you must make sure you delete the {\tt name.stpr41}
file since stepper will by default use that hessian and not the one in
the {\tt name.hess} file}