overview of external interfaces¶
customization¶
Most system calls to programs can be modified at run-time using $HOME/xoptrc.
The program’s default values are set in default.f90.
All system calls (besides for conical intersection optimizations) are handled by getgrad.f90, if further
modification are needed.
setting custom system calls via $HOME/.xoptrc
call_orca = orca_scipt_or_binary
call_gaus = run-g09
call_psi4 =psi4
call_gei=mygrad.sh
call_mpi=mpiexec -bynode
call_mopac=mopac16
scratch=/local_scratch/
maxiter=500 # max iterations
maxd=0.35 # max displacement bohr
gconv=1e-3 # gradient norm threshold
econv=1e-7 # energy change threshold
maxgrad=1e-3 # max. gradient threshold
numerical gradients¶
Arbitray numerical gradients can be computed via a script/executable named mygrad.sh located in the working directory.
It does not need to be bash script. It will be excuted by a system call inside xopt.
It needs to do 3 things:
- Have the program to be executed use ``xopt.xyz`` as input
- run the program
- provide the energy output as a single number inside ``xopt.energy.tmp``
An example for Turbomole would look like:
#!/bin/bash
#1. make use of xopt.xyz
babel -ixyz xopt.xyz -otmol coord
#2. execute
dscf > dscf.out
#3. write energy into file
grep "| total energy" dscf.out | awk '{print $5}' > xopt.energy.tmp
xopt will read the xopt.energy.tmp value for a 2-point (central) finite difference computation
of the gradient with a step size of 0.005 bohr.
general external interface¶
The general external interface (GEI) option allows
the user to call arbitrary programs and feed the gradient into xopt. Is uses similar
technology as the above numerical gradient.
Use any script that transforms a xopt.xyz file into an energy and gradient file with the
following format in a.u.:
energy
grad1(x,atom 1), grad1(y,atom 1),grad1(z,atom 1)
.
.
grad1(x,atom n), grad1(y,atom n),grad1(z,atom n)
The default name of the script is mygrad.sh and the default gradient file is xopt.grad
ORCA¶
- Requirement:
- input file:
orca.in orca40startup script to run orca (provided)
- input file:
It is necessary that the following input lines are included
! ENGRAD
*xyzfile <chrg> <mult> xopt.xyz
Turbomole¶
Prepare a standard input using define. Supported are HF/DFT calculations using ridft and dscf, and calculations using the ricc2 module (eg. for MP2.).
A ‘coord’ file is automatically written and updated. If $rij is found in the control file, ridft will be called instead of dscf.
- Requirement:
- ridft/dscf/ricc2 in
$PATH
- ridft/dscf/ricc2 in
Gaussian09¶
- Requirement:
- input file:
g.in run-g09startup script for Gaussian (provided)
- input file:
Mopac201X¶
- Requirement:
- binary name:
mopac2016 - input directives using a
SETUPfile
- binary name:
SETUP must contain at least:
1SCF GRAD XYZ aux(42,PRECISION=9,MOS=-99999,COMP)
use of PRECISE is recommended.
gamess¶
experimental
nwchem¶
experimental
PSI4¶
needs to be adapted to changes in psi4 v1.2
Amber (sander)¶
requires modified sander
conical intersection optimization¶
Penalty function-based (no non-diabatic coupling) CI optimizer
following Levine/Martinez DOI: 10.1021/jp0761618.
We can do Gaussian, Turbomole(dscf,ricc2), Orca and (modified) Amber and numerical gradients.
You need to make 2 directories named stateJ.xopt` and ``stateI.xopt.
Prepare the input for each state inside the directories.
It should work for Turbomole, ORCA and G09 if you follow the general preparation guidelines above.
We assume state I < state J, e.g. J=I+1.
The xopt output will print something like:
gap[eV]: 0.024 penalty: 13.1 E(low): -546.9431436 E(high): -546.9422645 root flip: F,
where E(low) denotes the lower state (eg. groundstate) calculated as state I in stateI.xopt and E(high)
as the higher state calculated as state J inside stateI.xopt.
If at any stage during the optimization E(low)>E(high) (I>J)
root flip will be set true (=T) and E(low/higher) will be interchange, e.g.
E(low) will be the energy obtained in stateJ.xopt.
This is checked for each optimization step individually and is not tracked through previous steps.
The strategy to increase the penaly \(\sigma\) is as follows:
where \(\Delta E_{ij}\) is the energy gap between state I and J, $alpha$ the smoothing factor (see paper). $sigma$ is increased when \(\Delta E_{ij}\) is larger than 1e-3 and the penalty function change \(\Delta F_{ij}\) smaller than 5e-5.
Note 1: for gaussian groundstate SA-CASSCF calculations add IOp(10/97=100) and IOp(5/97=100). It switches the CI vectors internally so one gets the proper groundstate gradient (e.g. for CASSCF(2,2,nroot=2,stateaverage)). Not sure about nroot > 2.