Force
The force module will compute the hessian in cartesian coordinates
by finite differencing of the gradients, and analyse the harmonic vibrational frequencies
and normal coordinates. The code is based on the routines from GAMESS-UK
used by a job containing the RUNTYPE FORCE directive.
Argument |
Argument type |
Mandatory |
Default |
To specify |
coords= |
Fragment tag
|
Yes |
none |
input structure |
theory= |
Energy/Gradient code
|
Yes |
none |
type of energy and gradient calculation |
active_atoms= |
Tcl List
|
No |
All atoms active |
atom-numbers to be displaced in partial
force-constant calculation |
hessian= |
Matrix tag
|
Yes |
none |
resultant cartesian coordinate hessian |
compute= |
Boolean
|
No |
Yes |
Specify whether to compute the hessian |
del= |
real number |
No |
0.001 |
cartesian displacement (a.u.) |
formula= |
keyword |
No |
onepoint |
onepoint or twopoint |
masses= |
Tcl List
|
No |
Standard masses |
Each element of the list contains an integer
atom index and a mass value |
result= |
file |
No |
force.pun |
Where to place history information and final
structure. Currently hard-coded to force.pun. |
history= |
file |
No |
none |
Read history file. If specified, a previous
incomplete run is restarted. Rename the force.pun file of the previous run
and specify the new name here. |
precalc |
Boolean
|
No |
no |
Read in gradients pre-calculated using
force_precalc (see below). |
The hessian= argument specified a file to write the cartesian coordinate
hessian that is generated by the finite difference procedure.
The formula= argument indicates whether to take a single displacement
(onepoint) or a double displacement (twopoint) from the
input geometry. The default is onepoint.
The active_atoms= argument serves to pass on a list of atom numbers to
be displaced in the force-constant calculation. In this way, a partial force-constant
calculation may be performed. The force-constants generated this way are
comparable to a full force-constant calculation in which the atoms not in
the active_atoms list are given infinite mass.
The following example converges a transition state in internal
coordinates and then determines the hessian and vibrational
frequencies.
#
# test saddle point optimisation and frequency calc
#
z_create zmatrix=z {
zmatrix
n
x 1 1.0
x 1 10.0 2 90.0
h1 1 nh1 2 ang1 3 0.0
h2 1 nh1 2 ang1 3 120.0
h3 1 nh1 2 ang1 3 240.0
variables
nh1 1.9
ang1 85.0
end
}
create_matrix matrix=myhess \
name= ``my initial hessian'' \
dimensions= { 2 2 } \
datatype=real \
{ 1 0 0 -1 }
opt mode=ts \
zmatrix=z \
theory=mopac : listing=mopac.out \
initial_hessian=myhess \
result=r
force coords=r \
theory=mopac : listing=mopac.out \
hessian=h \
formula=twopoint
#
exit
Task-farmed calculation
The force module may also be used in task-farmed mode.
This consists of three stages:
Step 1: force_precalc
The required gradients are pre-calculated using the command
force_precalc with the arguments:
Argument |
Argument type |
Mandatory |
Default |
To specify |
coords |
Fragment tag
|
Yes |
none |
Input structure |
theory |
Energy/Gradient code
|
Yes |
none |
Type of energy and gradient calculation |
active_atoms |
Tcl List
|
No |
All atoms active |
Atom-numbers to be displaced in partial
force-constant calculation |
del |
real number |
No |
0.001 |
cartesian displacement (a.u.) |
formula |
keyword |
No |
onepoint |
onepoint or twopoint |
task_atoms |
Tcl List
|
No |
All active atoms |
Specify which atom displacement tasks should be calculated by the workgroup |
basepoint |
Boolean
|
No |
yes |
Specify whether the unperturbed gradient should be calculated by the workgroup |
This is the step that can be parallelised by splitting the gradient evaluations between
workgroups (see example below).
Step 2: taskfarm_globalise_force_precalc
The gradient objects produced are saved to disk with filenames of the form _force_precalc.name.atomno.axis.displacement
where axis can be x/y/z and displacement is p/m.
Initially the objects are located in the scratch workgroup directories and must be 'globalised' using the command
taskfarm_globalise_force_precalc with arguments:
Argument |
Argument type |
Mandatory |
Default |
To specify |
coords |
Fragment tag
|
Yes |
none |
Name of input structure |
active_atoms |
Tcl List
|
No |
All atoms active |
Atom-numbers to be displaced in partial
force-constant calculation |
formula |
keyword |
No |
onepoint |
onepoint or twopoint |
basepoint |
Boolean
|
No |
yes |
Specify whether the unperturbed gradient was calculated by the workgroup |
Step 3: force
Finally, force is called with the option precalc=yes.
As an example, the following code can be used for a task-farmed calculation of a one-point Hessian.
The contents of the task_atoms list varies from workgroup to workgroup.
set natoms [ get_number_of_atoms coords=structure.c]
set nwg [ nworkgroups ]
set wid [ workgroupid ]
if { $wid == 0 } {
set basepoint yes
} else {
set basepoint no
}
set task_atoms {}
for {set i 1} {$i <= $natoms} {incr i} {
if { [ expr $i % $nwg ] == $wid} {lappend task_atoms $i}
}
force_precalc coords=structure.c \
theory= gamess: $gamess_args \
formula=onepoint \
basepoint=$basepoint task_atoms= $task_atoms
taskfarm_globalise_force_precalc coords=structure.c \
formula=onepoint \
basepoint=yes
force coords=structure.c \
theory= gamess: $gamess_args \
hessian=structure.hessian \
formula=onepoint \
precalc=yes
|