Water
This example explains how to perform the vibrational mode analysis using the finite different method and how to refine it . We use a water molecule in a box as an example.
First vibrational mode analysis
First we perfom a series of SCF calculations by displacing the atoms in each cartesian direction. Here, it is assumed that the geometry is fully assumed (Maximum force should be less than 5.e-4 Hatree/Bohr or less). In the legacy STATE code, we needed to prepare a nfvibrate.data
file to specify the atomic displacements, but it is automatically generated (default displacement is 0.01 Bohr). Following is the input file (nfinp_vib_1
):
TASK VIB
WF_OPT DAV
NTYP 2
NATM 3
GMAX 6.00
GMAXP 20.00
MIX_ALPHA 0.5
EDELTA 1.D-10
NEG 12
CELL 15.00 15.00 15.00 90.00 90.00 90.00
&ATOMIC_SPECIES
H 1.00797 pot.H_pbe1
O 15.99940 pot.O_pbe1
&END
&ATOMIC_COORDINATES CARTESIAN
1.453447222619 0.000000000000 1.124989276510 1 1 1
-1.453447222619 0.000000000000 1.124989276510 1 1 1
0.000000000000 0.000000000000 0.000000000000 1 1 2
&END
&VIBRATION
DISP 0.02
&END
We use the option:
TASK VIB
to perform the vibrational analysis. If you want to change the displacement use the following option:
&VIBRATION
DISP 0.02
&END
By running STATE, you may find nfforce.data
in the working directory, which contains the data of displacements and forces. If the calculation is not interrupted, it should contain 6 times N displacement and force data, where N is the number of atoms.
Warning
Displacements and forces are appended when nfforce.data
exists. Rename the existing nfforce.data
file, if you do not want to append a data.
To obtain the vibrational frequencies and modes, use gif
as follows:
$ gif -f nfforce.data > gif.out_1
In the present case, vibrational frequencies are printed like:
=========
SUMMARY
=========
MODE WR : NU(meV) NU(cm-1)
1 -0.161221D-03 : 8.06 65.03
2 -0.127681D-04 : 2.27 18.30
3 0.973343D-05 : 1.98 15.98
4 0.144401D-04 : 2.41 19.46
5 0.575098D-04 : 4.82 38.84
6 0.141208D-03 : 7.55 60.86
7 0.940090D-01 : 194.71 1570.43
8 0.525214D+00 : 460.23 3711.95
9 0.556815D+00 : 473.87 3821.99
and the vibrational modes are printed in vib.data
. In the case of a nonlinear molecule, 3N-6 modes correspond to the molecular vibrations.
Refining the vibrational frequencies and modes
To check if the displacement is appropriate (so that we obtain the harmonic vibrational frequencies), we usually change the displacement in the cartesian directions and repeat the calculations. Rather, we can perform the following calculation(s): Instead of using the cartesian coordinate, we generate new displacements using the vibrationa mode (eigenmode) obtained in the previous step. That is, the dynamical matrix is now constructed using the eigenmodes as a basis. Let us rename vib.data
vib.data_1
(nfforce.data
nfforce.data_1
and nfvibrate.data
nfvibrate.data_1
) and execute duplicate
as
$ duplicate vib.data_1 nfvibrate.data
This generates a new set of displacements in the negative and positive directions for each eigenmode.
Then a similar input file (nfinp_vib_2
) to the first one is used to perform a new set of the calculations:
TASK VIB
WF_OPT DAV
NTYP 2
NATM 3
GMAX 6.00
GMAXP 20.00
MIX_ALPHA 0.5
EDELTA 1.D-10
NEG 16
CELL 15.00 15.00 15.00 90.00 90.00 90.00
&ATOMIC_SPECIES
H 1.00797 pot.H_pbe1
O 15.99940 pot.O_pbe1
&END
&ATOMIC_COORDINATES CARTESIAN
1.453447222619 0.000000000000 1.124989276510 1 1 1
-1.453447222619 0.000000000000 1.124989276510 1 1 1
0.000000000000 0.000000000000 0.000000000000 1 1 2
&END
Run gif
after finishing the second STATE run with new nfforce.data
as:
$ gif -f nfforce.data > gif.out_2
and you many obtain the following vibrational frequencies:
=========
SUMMARY
=========
MODE WR : NU(meV) NU(cm-1)
1 -0.127899D-03 : 7.18 57.93
2 -0.105889D-04 : 2.07 16.67
3 -0.238793D-05 : 0.98 7.91
4 0.198919D-02 : 28.32 228.44
5 0.392124D-02 : 39.77 320.73
6 0.439408D-02 : 42.10 339.52
7 0.940996D-01 : 194.80 1571.19
8 0.525102D+00 : 460.18 3711.56
9 0.556590D+00 : 473.77 3821.22
We can see that the high-frequency modes are almost unchanged, confirming the finite difference calculation with the cartesian displacements.
It may be interesting to compare the dynamical matrices obtained in the first and second steps. In the first calculation, the symmetrized 9 times 9 dynamial matrix looks:
0.355 -0.000 0.222 -0.030 0.000 -0.030 -0.325 -0.000 -0.193
-0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 0.000
0.222 -0.000 0.204 0.030 0.000 0.009 -0.252 -0.000 -0.212
-0.030 0.000 0.030 0.355 -0.000 -0.222 -0.325 0.000 0.193
0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 0.000 0.000
-0.030 -0.000 0.009 -0.222 0.000 0.204 0.252 -0.000 -0.212
-0.325 -0.000 -0.252 -0.325 -0.000 0.252 0.651 0.000 0.000
-0.000 0.000 -0.000 0.000 0.000 -0.000 0.000 -0.000 0.000
-0.193 0.000 -0.212 0.193 0.000 -0.212 0.000 0.000 0.424
On the other hand, the dynamical matrix obtained in the second calculation is:
0.016 -0.000 0.000 0.000 0.000 -0.006 -0.000 0.000 -0.000
-0.000 0.005 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.001
0.000 0.000 0.002 -0.001 -0.000 -0.000 0.000 -0.000 -0.000
0.000 0.000 -0.001 0.000 0.000 -0.000 0.000 -0.000 -0.000
0.000 -0.000 -0.000 0.000 -0.000 -0.000 -0.000 -0.000 0.000
-0.006 0.000 -0.000 -0.000 -0.000 0.002 -0.000 0.000 -0.000
-0.000 0.000 0.000 0.000 -0.000 -0.000 0.154 -0.000 -0.000
0.000 -0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.868 0.000
-0.000 -0.001 -0.000 -0.000 0.000 -0.000 -0.000 0.000 1.171
We can see that it is almost diagonal, meaning that the basis used indeed diagonalizes the dynamical matrix. By repeating this process, we can obtain the basis (eigenvectors) which fully diagonalizes the dynamical matrix.