LOVCI is a simple program to calculate anharmonic vibrational spectra.
Currently, the binary is not included in the repository. The Makefile can be used to generate LOVCI executable. Only a small number of packages are required to compile the code. An approximate list of packages is given below.
LOVCI binary: OpenMP, Eigen3
To install LOVCI, clone the git repository
user:$ mkdir VibCI
user:$ git clone https://github.com/kratman/VibCI.git ./VibCI/
or unpack the zipped source code
user:$ mkdir VibCI
user:$ cd VibCI/
user:$ unzip VibCI-master.zip
user:$ mv VibCI-master/* .
user:$ rmdir VibCI-master
The source code can be compiled with the Makefile provided with LOVCI. On Ubuntu boxes, the Makefile should function without modifications. However, with other operating systems it may be necessary to change the path to the Eigen3 package.
Default: -I/usr/include/eigen3/
The Makefile can produce both the binary.
user:$ make install
Only a single input file is required to run the LOVCI program. All keywords in the input file must be given in the correct order.
Example input can be found in the tests and doc directories.
user:$ lovci -n Ncpus -i input.inp -o spectrum.txt
-n => Number of CPUs used for the calculations
-i => File name for the LOVCI input
-o => File name for the calculated vibrational spectrum
Basis: Product
Broadening: [type] [width] [resolution] [cutoff]
Modes: [Nm]
[id] [freq] [quanta] [intensity]
...
Spectator_modes: [Ns]
[id] [freq] [intensity]
...
Force_constants: [Nfc]
[power] [modes] [value]
...
Basis: Progression
Prog_mode: [pmode] [pquanta]
Mixed_modes: [Np]
[modes]
Broadening: [type] [width] [resolution] [cutoff]
Modes: [Nm]
[id] [freq] [quanta] [intensity]
...
Spectator_modes: [Ns]
[id] [freq] [intensity]
...
Force_constants: [Nfc]
[power] [modes] [value]
...
Basis: There are two options for the basis keyword (product,progression). A product basis is a large basis set containing all possible combinations of states up to the maximum number of quanta in each mode. Progression basis sets are small and assume that there are 1D modes combined with a Franck-Condon progression in a low frequency mode. A progression basis is useful for simple models where only a small number of combination bands are important.
Prog_mode: The prog_mode keyword needs two values (pmode,pquanta). The value of pmode is the integer ID of the low-frequency mode used in the progression. The value of pquanta is the number of quanta to include in the each of the progressions.
Mixed_modes: The mixed_modes keyword takes the number of modes that have a progression (Np) followed by a list of the integer IDs for the modes.
Broadening: There are two types of line shapes in LOVCI (Lorentzian,Gaussian). Both types of line shapes require a line width, the resolution of the spectrum, and a maximum frequency for the spectrum (cutoff).
Modes: The keyword needs the total number of active vibrational modes (Nm), followed by the properties of each mode. Every mode is given an integer ID, a frequency (cm^-1), the maximum number of quanta in the basis set, and the intensity. The modes are labeled from 0 to (Nm-1).
Spectator_modes: Spectator modes appear in the vibrational spectrum and contribute to the zero-point energy, but are not included in the VCI basis set. The input for the (Ns) spectator modes is nearly the same as the input for the active modes. The spectators are labeled from (Nm) to (Nm+Ns+1). Since spectator modes are not included in the basis set, there is no need to specify the number of quanta.
Force_constants: The (Nfc) anharmonic force constants are defined by the total power of the modes (quadratic=2,cubic=3,quartic=4,etc), the list of integer IDs for the modes, and the value of the force constant. The list of modes can be given in any order and the force constants can include any positive power. The values of the force constants (in cm^-1) are the same as those given in the output of common QM packages (e.g. Gaussian, GAMESS).
Scientific literature has a great deal of information on the harmonic and anharmonic oscillators. The purpose of this section is not to give a complete description of the theory, but rather to give the bare minimum amount of information required to perform vibrational configuration interaction (VCI) calculations.
The Hamiltonian (H) for a 1D harmonic oscillator is given by
H = p^2/2+(w/2)*q^2
E = <n|H|n> = (n+1/2)*w
where p is the momentum, w is the frequency, q is the normal mode, and n is the number of quanta in the state. An anharmonic oscillator has force constants with powers other than 2. As an example, we will add a cubic force constant to the Hamiltonian.
H = p^2/2+(w/2)*q^2+(y/6)*q^3
Here y is the cubic force constant.
There are typically no exact analytic solutions for anharmonic oscillators, however, the energies can be calculated using perturbation theory or configuration interaction methodologies. Perturbative methods do not require matrices, but have difficulty dealing with degenerate states and Fermi resonances.
LOVCI input for the cubic Hamiltonian with a 5 quanta basis set is given by
Basis: Product
Broadening: Lorentzian 10.0 0.05 5000.0
Modes: 1
0 1000.0 5 1.0
Spectator_modes: 0
Force_constants: 1
3 0 0 0 250.0
where w=1000.0 and y=250.0 cm^-1. This input produces a 6x6 VCI Hamiltonian. The calculation includes the ground state (n=0) and the first five excited states (n=1..5). In a harmonic calculation, none of the vibrational states interact with the other states (the Hamiltonian is diagonal). The cubic coupling term allows the ground and excited states to interact and mix together.
The VCI matrix elements can be calculated with the creation (c) and annihilation (c') ladder operators.
c|n> = sqrt(n+1)|n+1>
c'|n> = sqrt(n)|n-1>
The zeroth-order Hamiltonian can be rewritten as
H = p^2/2+(w/2)*q^2 = (cc'+1/2)*w
and the cubic Hamiltonian is given by
H = w*(cc'+1/2)+(y/(6*sqrt(2)^3))*(c+c')^3
where
q = (1/sqrt(2))*(c+c')
Since the integrals are analytic, the primary cost of the calculations is due to the number of excited states included in the VCI Hamiltonian matrix.