STFC
MPI für Kohlenforschung

University College London

Force

Introduction

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.

Command Line 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
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.

Example

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





This manual was generated using htp, an HTML pre-processor Powered by htp