- Using several programs/scripts to general a numerical two-dimensional potential energy surface (2D-PES) of reaction with post-transition-state bifurcation (PTSB).
- Supporting information of Construction of Two-Dimensional Potential Energy Surfaces of Reactions with Post-Transition-State Bifurcations.
- Author : Hsiao-Han (Grace) Chuang - Initial work - 2018 May.
Optimize two transition-state structures (TSSs), and then run the corresponding IRCs. After that, extract the last points of IRCs as the initial structures for local minima optimization.
- Code:
checkGau
,runIRC
-
From organic chemistry, guess possible initial structures of TSSs and then follow the user guide in standard electronic package (i.e., Gaussian 09/16 in this project) to write input files.
- TSSs have one and only one imaginary frequency and the corresponding vibration mode need to fit the guessed reaction mechanisms.
- This try-and-error step needs well-trained organic chemistry background and good chemical intuition.
-
Double check the consistency of atomic index and ordering for all molecules.
- Check the ordering of atoms between TSS1 and TSS2 systems. Reorder them via Gaussview if they are different.
-
Gain enough grid points of an IRC path
- Use
runIRC
to test different combinations of keywords in route section. - Check the direction of IRC paths.
- Use
-
Double check the orientation for all systems.
- Use gaussview or jmol to check the molecular orientation.
- Show axes is easier to check.
-
Use
checkGau
to check all important information from Gaussian output files.
For asymmetric cases, build the artificial reaction coordinate in the TSS1 forward direction.
- Code:
runArticIRC.sh
,genArticStruc.f90
- Input:
- $(selectCoord).log, TSS2.log
- Output:
- Artic1D.xyz, Artic1D_PEC.dat
- Compare the energy difference between TSS1 and TSS2:
- TSS1 > TSS2
- Go to the following steps.
- TSS1 < TSS2 and the energy difference is small
- Beyond this project, this is not a pitchfork model potential.
- TSS1 > TSS2
- Select a point from TSS1 IRC forward direction.
- Near the shoulder of its energy profile.
- Near the gradient which is close to zero, or has a turn over point.
- Execute
runArticIRC.sh
to generate a serious of structures which usegenArticStruc.f90
to build artificial reaction coordinate.- After it fulfills the criteria (i.e. energy difference between the last point and TS2 is less than 0.0001 hartree; less than 1 kcal/mol), the program will stop automatically.
- Use
jmol
to check the structures via file Artic1D.xyz. - Use
gnuplot
to plot energy profile via file Artic1D_PEC.dat.
Combine fragmented files into three files, x.xyz, y_F.xyz and y_R.xyz.
- Code:
getIRCcurve
,getIRCstruc
,rev1Dstruc
,checkGau
,getCoord
- Output:
- x.xyz, y_F.xyz, y_R.xyz
- Copy 4 IRC output files from /OPT to /1D as the input files for the following steps.
- Generate x.xyz
- Use
getIRCcurve
to extract energy profiles, and then use gnuplot to plot the potential energy curves.- The sign of coordinate may need to be modified; use awk.
- Use
getIRCstruc
to extract all the structures.- In the IRC file, it starts from TS structure by default. So use
rev1Dstruc
to reverse the direction for reverse direction.
- In the IRC file, it starts from TS structure by default. So use
- Combine the forward and reverse direction to form a whole path as x.xyz.
- x.xyz = R
$\to$ TSS1$\to$ TSS2.
- x.xyz = R
- Use
- Generate y_F.xyz and y_R.xyz.
- y_F.xyz = TSS2
$\to$ P1. - y_R.xyz = TSS2
$\to$ P2.
- y_F.xyz = TSS2
- Check the orientation via jmol and then open the axes function; sometimes the TS structure and IRC structures has shift, and cannot properly overlap to each other.
- Input:
- TS1_F.xyz, Artic1D.xyz
- Output:
- TS1_F_Artic1D.xyz, x.xyz, y_F.xyz and y_R.xyz
- Generate x.xyz
- For TS1 forward direction, combine the TS1_F.xyz from reactant to the selected point and Artic1D.xyz. After that, name the new file as TS1_F_Artic1D.xyz .
- Use jmol to double check the orientation of TS1_F_Artic1D.xyz .
- Combine TS1_F_Artic1D.xyz and TS1_R.xyz as x.xyz
- x.xyz = R
$\to$ TSS1$\to$ selected point$\to$ TSS2
- x.xyz = R
- Generate y_F.xyz and y_R.xyz: same process as the symmetric case.
To reduce computational cost, select enough grid points in one-dimensional energy profile instead of using full grids.
- Code:
run1Dgrid.sh
,get1Dgrid.sh
-
run1Dgrid.sh
:getIRCcurve
,getIRCstruc
,selectIRCstruc.sh
,writeGauInpV
-
get1Dgrid.sh
:checkGau
,rev1Dstruc
,rot.py
-
- Input:
- Symmetric cases (5 files):
- header.dat (route section)
- TS1_F/R.log
- TS2_F/R.log.
- Asymmetric cases (7 files):
- header.dat
- TS1_F/R.log
- TS2_F/R.log
- $(coordinate of select point).log
- Artic1D.xyz
- Symmetric cases (5 files):
- Output:
- Symmetric cases
- $(NGrid)_TS1_F.xyz
- Asymmetric cases
- $(NGrid)_TS1_F_Artic1D.xyz
- $(NGrid)_TS1_R.xyz
- $(NGrid)_TS2_F.xyz
- $(NGrid)_TS2_R.xyz
- E_scan.*.dat
- Symmetric cases
- Execute script
run1Dgrid.sh
to generate selected 1D grid points.- If the file, Artic1D.xyz, exists, then it is an asymmetric case. Or, it is a symmetric case. Do not remove it durning the calculation.
- The default amount of selected grid point is 30, and it can be modified in line 212 of
run1Dgrid.sh
. -
selectIRCstruc.sh
selects points along the new reaction coordinate in order to reduce the computational cost. - Use gnuplot to double check the geometries and the selected geometries.
- Execute
get1Dgrid
to collect data.- Plot the potential energy curves of selected grid points to see if the selected points are reasonable.
-
Double check the geometries! Really important! Use gnuplot to check the geometries of x.xyz; it should start from R to TSS2. Recall that,
- x.xyz = R
$\to$ TSS1$\to$ selected point$\to$ TSS2.
- x.xyz = R
- Code:
- Generate numerical 2D-PES
-
getIRCvec
,Vsca1D_IRCvec.f90
,writeGauInpV
,qsubGau
-
- Constrain optimization
-
getGrad.sh
,genGradStruc.f90
,genNewPES.sh
-
- Collect rawdata
-
getPESwStruc.sh
,checkGau
-
- Plot contour and 3D version figure
plot2DPES.py
- Generate numerical 2D-PES
- Input:
- header.dat, x.xyz, y_F.xyz and y_R.xyz
- Output:
-
$(Pts)_E.dat, $ (Pts)_Struc.xyz
-
- Generate a numerical 2D-PES
- Create sub-directories and named as Forward and Reverse, which is the directions along y-axis.
- In /1D directory, rename
$(NGrid)_TS2_F.xyz as y_F.xyz, and $ (NGrid)_TS2_R.xyz as y_R.xyz. After that, copy x.xyz, y_F.xyz and y_R.xyz from /1D to /2DPES. - Execute
getIRCvec
to calculate translational vectors from y_F.xyz and y_R.xyz. - Generate a serious of structures via script
Vscan1D_IRCvec
, which has an output file, pes.txt. - Generate gaussian input files via
writeGauInpV
. - Submit all the gaussian input files via
qsubGau
.
- Collect rawdata
- Make sure all the single points are successfully calculated.
-
Count the amount of successful output files as the primarily checking. If it is different from the expect amount of jobs, go to the next step.
> cat *.log | grep -c Normal
-
Execute
checkGau
to extract the list of fail jobs (i.e. red box) and the name is recorded in Fail.txt.- Usually, recalculate the fail jobs can solve the problem.
> for name in `cat Fail.txt` > do > g16sub $name.com $name.log > done
- Usually, recalculate the fail jobs can solve the problem.
-
If above strategy cannot solve the problem, add other SCF keywords in the fail gaussian input files, eg. SCF=xqc.
-
- Use
getPESwStruc.sh
to extract electronic energy and structures.
- Make sure all the single points are successfully calculated.
- Plot contour and 3D version figure; execute step 1, 2 and 4 in
plotPESandTraj.py
, which is line 215 , line 218 and line 224. - Modify this potential if it is not 'reasonable'.
- Code:
-
getGrad.sh
,genNewPES.sh
,GenGradStruc.f90
-
- Add force in the header.dat file, and then recalculate all the grid points.
- Use
getGrad.sh
to extract gradient and named as $name.grad. - Use
genNewPES.sh
to executeGenGradStruc.f90
, and then generate several new potentials which are named as G_*.xyz.- Modify the range of ds in
GenGradStruc.f90
.
- Modify the range of ds in
- Follow the original processes to calculate those potentials.
- Code: