Example: PES scan and TS search for H2 on graphene¶
Download PESScan_and_TS_H2_on_Graphene.run
#! /bin/sh
# First we do a 2D PES scan varying the z-coordinate of the two hydrogen atoms
# In this example we will keep the graphene slab fixed. From a physical/chemical
# standpoint this is not a good approximation. The graphene slab is
# intentionally not perfectly symmetric.
AMS_JOBNAME=PESScan $ADFBIN/ams << EOF
Task PESScan
System
Atoms
H 0.0 1.53633037 1.1
H 0.0 -0.11341359 1.1
C 0.001 1.42028166 0.0
C 1.230 2.13042249 0.0
C 1.230 -0.71014083 0.0
C 2.460 0.00000000 0.0
C 2.460 1.42028167 0.0
C 0.000 0.00000000 0.0
End
Lattice
3.69 -2.13042249 0.0
0.00 4.26084499 0.0
End
End
PESScan
ScanCoordinate
nPoints 10
Coordinate 1 Z 1.1 2.0
End
ScanCoordinate
nPoints 10
Coordinate 2 Z 1.1 2.0
End
End
Constraints
# Fix the entire graphene slab.
Atom 3
Atom 4
Atom 5
Atom 6
Atom 7
Atom 8
End
Engine DFTB
Model DFTB
ResourcesDir DFTB.org/3ob-3-1
DispersionCorrection D3-BJ
KSpace
Type Symmetric
Symmetric KInteg=3
End
EndEngine
EOF
# A human looks at the PES scan and picks a reasonable starting point for the
# TS search. (Normally you would do that in ADFMovie by looking at the PES and
# then exporting the geometry into an xyz file.)
# _ ____
# ___)) [ | \
# ) //o | | ]
# _ (_ > | | ]
# (O) \__< | | ]
# [/] / \) [__|/_
# [\]| ( \ __/___\_____
# [/]| \ \__ ___| |
# [\]| \___E/%%/|____________|_
# [/]|=====__ (_________________)
cat << EOF > initial_geometry_for_TS.xyz
8
H 0.4145668856457391 1.72927656037925 1.100000023839768
H -0.05533871972549955 -0.06805093626643093 1.500000013242627
C 0.001 1.42028166 0.0
C 1.230 2.13042249 0.0
C 1.230 -0.71014083 0.0
C 2.460 0.00000000 0.0
C 2.460 1.42028167 0.0
C 0.000 0.00000000 0.0
VEC1 3.69 -2.13042249 0.0
VEC2 0.0 4.26084499 0.0
EOF
# Compute the partial initial Hessian to be used in the transition state
# search. (The Hessian will be computed only for the hydrogen atoms.)
AMS_JOBNAME=Hessian $ADFBIN/ams << EOF
Task SinglePoint
System
# Load the geometry we just saved.
GeometryFile initial_geometry_for_TS.xyz
End
Properties
# Calculate the Hessian (implied when calculating normal modes) ...
NormalModes True
# ... but only the part related to the hydrogen atoms.
SelectedAtomsForHessian 1 2
End
Engine DFTB
Model DFTB
ResourcesDir DFTB.org/3ob-3-1
DispersionCorrection D3-BJ
KSpace
Type Symmetric
Symmetric KInteg=3
End
EndEngine
EOF
echo "Extract the frequencies from the kf file using adfreport:"
$ADFBIN/adfreport Hessian.results/dftb.rkf -r "Vibrations%Frequencies[cm-1]##1"
# Do a transition state search using the initial Hessian just computed (the
# Graphene slab is constrained). Also compute the final Hessian for the
# hydrogen atoms to validate the TS.
AMS_JOBNAME=TS $ADFBIN/ams << EOF
Task TransitionStateSearch
System
# Load the geometry we just saved.
GeometryFile initial_geometry_for_TS.xyz
End
GeometryOptimization
Quasi-Newton
Step TrustRadius=0.05
End
Convergence Gradients=1.0e-4
InitialHessian
# Load previously calculated Hessian as initial Hessian for a
# transition state search with the Quasi-Newton optimizer.
Type FromFile
File Hessian.results/dftb.rkf
End
End
TransitionStateSearch
# Follow the mode with the smallest frequency.
ModeToFollow 1
# (This is also the default, we wouldn't need to specify this.)
End
Constraints
# Fix the entire graphene slab.
Atom 3
Atom 4
Atom 5
Atom 6
Atom 7
Atom 8
End
Properties
NormalModes Yes
SelectedAtomsForHessian 1 2
End
Engine DFTB
Model DFTB
ResourcesDir DFTB.org/3ob-3-1
DispersionCorrection D3-BJ
KSpace
Type Symmetric
Symmetric KInteg=3
End
EndEngine
EOF
echo "Extract energy from the rkf file using adfreport:"
$ADFBIN/adfreport TS.results/dftb.rkf -r "AMSResults%Energy"