Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
instantons [2022/12/06 10:18] – bug6595 may | instantons [2024/07/12 08:37] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Instantons ====== | ||
+ | |||
+ | Instantons can be located within the ring-polymer formalism using the '' | ||
+ | '' | ||
+ | These instantons can be used to compute either the thermal reaction rate or the tunnelling splitting between degenerate potential wells. The behaviour can be controlled with the '' | ||
+ | |||
+ | ===== Thermal reaction rates ===== | ||
+ | |||
+ | Quantum rate calculations proceed via an instanton which is equivalent to the transition state on the ring-polymer surface. These stationary points are computed using a quasi-Newton saddle-point search with Powell’s Hessian update. Because of the known symmetry of the final geometry (that the ring polymer folds back on itself), only half of the beads need be specified. | ||
+ | |||
+ | The geometry of the transition state should be specified with the '' | ||
+ | |||
+ | References for the ring-polymer instanton method are: | ||
+ | |||
+ | * J. O. Richardson and S. C. Althorpe. “Ring-polymer molecular dynamics rate-theory in the deep-tunneling regime: Connection with semiclassical instanton theory.” [[https:// | ||
+ | * J. O. Richardson. “Derivation of instanton rate theory from first principles.” [[https:// | ||
+ | * A. N. Beyer, J. O. Richardson, P. J. Knowles, J. Rommel and S. C. Althorpe “Quantum tunneling rates of gas-phase reactions from on-the-fly instanton calculations.” //J. Phys. Chem. Lett.// **7**, 4374-4379 (2016). | ||
+ | |||
+ | Upon reaching the '' | ||
+ | |||
+ | Next begins the instanton optimization. The ring-polymer gradient is computed and, unless it is already sufficiently converged, an initial Hessian using '' | ||
+ | |||
+ | Upon convergence of the gradient or if the maximum number of iterations is reached, the full-ring-polymer Hessian is computed using '' | ||
+ | |||
+ | ===== Tunnelling splittings ===== | ||
+ | |||
+ | Instantons used to compute tunnelling splittings are local minima on the ring-polymer surface. They are located using the limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) method. All publications describing work using this method should quote at least one of these references: | ||
+ | |||
+ | * J. Nocedal. “Updating quasi-Newton matrices with limited storage”. //Math. Comput.// **35**, 773 (1980). | ||
+ | * D. C. Liu and J. Nocedal. “On the limited memory BFGS method for large scale optimization”. //Math. Program.// **45**, 503 (1989). | ||
+ | |||
+ | The geometry of the well minimum should be specified with the '' | ||
+ | |||
+ | References for the ring-polymer instanton method are: | ||
+ | |||
+ | * J. O. Richardson and S. C. Althorpe. “Ring-polymer instanton method for calculating tunneling splittings.” [[https:// | ||
+ | * J. O. Richardson, S. C. Althorpe and D. J. Wales. “Instanton calculations of tunneling splittings for water dimer and trimer.” [[https:// | ||
+ | |||
+ | ===== Input file ===== | ||
+ | |||
+ | An input file should be supplied in '' | ||
+ | |||
+ | ===== Procedures ===== | ||
+ | |||
+ | A few procedures must be defined. '' | ||
+ | |||
+ | ===== Options ===== | ||
+ | |||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | ===== Parallelization ===== | ||
+ | |||
+ | The ring-polymer instanton approach is naturally parallelized by computing the energies and gradients of each bead on separate processors. It is recommended for the number of processors used to be a factor of the number of beads. | ||
+ | |||
+ | ===== Examples ===== | ||
+ | |||
+ | Here we give an example for calculating the rate of the reaction at 250 K using MRCI. The Molpro input file is below and requires also {{: | ||
+ | |||
+ | <code - examples/ | ||
+ | ***, H + H2 instanton | ||
+ | |||
+ | proc beadpot={ | ||
+ | gthresh, | ||
+ | hf | ||
+ | casscf | ||
+ | mrci | ||
+ | } | ||
+ | |||
+ | proc beadgrad={ | ||
+ | beadpot | ||
+ | force, | ||
+ | } | ||
+ | |||
+ | proc beadfreq1={ | ||
+ | frequencies | ||
+ | } | ||
+ | proc beadfreq2={ | ||
+ | beadpot | ||
+ | frequencies, | ||
+ | } | ||
+ | proc beadfreq3={ | ||
+ | beadpot | ||
+ | frequencies, | ||
+ | } | ||
+ | |||
+ | symmetry, | ||
+ | |||
+ | geometry={ ! optimized geometry at transition state | ||
+ | 3 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | mass, | ||
+ | basis=vdz | ||
+ | |||
+ | instanton, input=' | ||
+ | | ||
+ | !, save=' | ||
+ | !, readhess=' | ||
+ | !, savehess=' | ||
+ | text, perm | ||
+ | </ | ||
+ | |||
+ | An example calculation of the tunnelling splitting in the cluster using UHF is provided by the input below which requires the {{: | ||
+ | |||
+ | <code - examples/ | ||
+ | ***, hydroperoxyl HO2 splitting instanton | ||
+ | if(NPROC_MPP.gt.1) then | ||
+ | skipped | ||
+ | endif | ||
+ | FILE, | ||
+ | |||
+ | proc beadpot={ | ||
+ | {uhf; | ||
+ | } | ||
+ | |||
+ | proc beadgrad={ | ||
+ | beadpot | ||
+ | force | ||
+ | } | ||
+ | |||
+ | proc beadfreq1={ | ||
+ | frequencies | ||
+ | } | ||
+ | proc beadfreq3={ | ||
+ | beadpot | ||
+ | frequencies | ||
+ | } | ||
+ | |||
+ | geometry={ ! optimized geometry at well minimum | ||
+ | 3 | ||
+ | | ||
+ | H 0.904294157899999895 0.919502897200000113 0 | ||
+ | O 0.681281911699999965 -0.00702956160000003938 0 | ||
+ | O -0.683576069499999939 0.00706386439999998061 0 | ||
+ | } | ||
+ | |||
+ | mass, | ||
+ | basis=vdz | ||
+ | |||
+ | instanton, splitting, input=' | ||
+ | | ||
+ | table, | ||
+ | </ | ||
+ | |||
+ | In both examples, data is saved to a '' | ||
+ | |||
+ | ===== Instanton scripts ===== | ||
+ | |||
+ | Four python scripts are available in Molpro which can ease the calculation of instantons. For usage and options, run the scripts with the -h flag. All scripts are written in python3 and require the use of the vmd.py module. For UNIX based operating systems, the module should placed in a directory included in PATH. | ||
+ | |||
+ | All scripts require the //numpy//, //scipy// and // | ||
+ | |||
+ | < | ||
+ | pip3 install numpy scipy matplotlib | ||
+ | </ | ||
+ | ==== How to use the scripts ==== | ||
+ | |||
+ | **initial_instanton.py** creates an initial guess for a half-instanton configuration for a given number of beads. It uses the transition state geometry and the mass-weighted eigenvector corresponding to the imaginary mode. As a result you must have a Molpro xml file as a result of a previous frequencies calculation. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | < | ||
+ | python3 initial_instanton.py file.xml -o initial.xyz -s 0.1 -N 16 -T 300 | ||
+ | </ | ||
+ | This will generate 16 bead geometries in the file ’initial.xyz’ and labeled by the given temperature. A sensible temperature should be less than the cross-over temperature. If a temperature is not supplied, the -g option can be given and a suitable estimate temperature will be generated; this is chosen to be at least 20 Kelvin below the cross-over temperature. See ref for more details on how the bead geometries are generated. Choosing an s value should be done with trial and error to give a small but observable stretch. However s=0.1 is often good enough. | ||
+ | |||
+ | For more information on how the initial bead geometries are calculated, see: | ||
+ | |||
+ | A. N. Beyer, J. O. Richardson, P. J. Knowles, J. Rommel and S. C. Althorpe “Quantum tunneling rates of gas-phase reactions from on-the-fly instanton calculations.” //J. Phys. Chem. Lett.// **7**, 4374-4379 (2016). | ||
+ | |||
+ | **interpolate_instaton.py** creates an initial guess for a half-instanton configuration using inputs of a previously optimized instanton for a different number of beads or different temperature. Note that the half-instanton will only have N/2 beads. If temperature is not given, the same is retained from the input file. If the number of beads is not given, the previous number is doubled. This script will also interpolate the Hessians of each bead if provided with the correct file (use the hessfile option in the input to save the final bead Hessians). | ||
+ | |||
+ | Example: | ||
+ | |||
+ | < | ||
+ | python3 interpolate_instanton.py final.xyz -o initial.xyz -N 32 -T 300 | ||
+ | </ | ||
+ | Assuming ’final.xyz’ has 16/2 (8) bead geometries, this will place 32/2 (16) bead geometries into ’inital.xyz’ labeled with the temperature. | ||
+ | |||
+ | **plot_instanton.py** uses matplotlib to plot the reaction pathway. An output file can be generated which can then be plotted using other plotting programs (eg. gnuplot). It uses a set of optimized bead geometries and the final bead energies contained in a Molpro xml file. This is the potential along the mass-weighted path length and so also uses the atomic masses also contained in a Molpro xml file. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | < | ||
+ | python3 plot_instaton.py final.xyz file.xml -o instanton.plot | ||
+ | </ | ||
+ | The -r flag can be used to specify the reactant energy to scale the plot with respect to this number. | ||