The code contained in this repository solves the following wavefunction which describes the movement of a radial particle. It's a Schrödinger's equation that finds the molecule states when the nuclei and electrons are in specific positions.
Where:
's value is 1.
is the reduced mass of the system.
is the current grid point.
is the molecule's rotational number.
is the potential energy curve.
is the .
are the rotational energies that appear in the code as
rovib_energies(rot,j) = eigenvalues(j)
.
In order to understand this equation, we first analyze the following:
This the kinetic energy solved numerically with the DVR subroutine, which takes into account a one-dimensional quantum system where is restricted to a given interval as stated in [ paper ].
This takes care of the rotational part of our equation and is equivalent to the following Fortran code inside rovib.f90: NN*(NN+1.d0)/(2.d0*mass*grid(i)*grid(i)
.
This is, as stated earlier, the potential energy curve which is provided in the LiCs_PEC.in file.
There should be a file called [molecule]_PEC.in in the same folder as the rovib.f90 file, where [molecule] must be replaced with the molecule name. This file must have two columns: , which should be equally spaced, and the corresponding
for each one of those values.
The Potential Energy Curve is a required input for our code. As an example, we have included the LiCs_PEC.in file which contains these two columns for a LiCs molecule.
[ figure ]
By doing DVR, we numerically obtain the energy of our molecule's Hamiltonian . Following [ paper ]'s Appendix A, which goes through calculating a simple generic DVR step by step, we achieve the following:
In our subroutine, we obtain a matrix using this formula, where and
are the matrix's rows and columns respectively. When
, we're positioned over our matrix's diagional, where the rotational and electronic energy are added as follows:
hamiltonian(i,i) = (0.5d0/m)*(step**(-2)) * (pi*pi/3.d0 - 0.5d0/dble(i*i)) + potential(i)
For the non-diagonal elements where , only kinetic terms are stored:
hamiltonian(i,j) = (0.5d0/m)*(step**(-2)) * (2.d0/(dble(i-j)**2)-2.d0/(dble(i+j)**2)) * (-1.d0)**(i-j)
Variables used in this subroutine: