There are standard kinetic energy operators "naturally" associated with each specific DVR grid. While those may suffice in many cases, in some simulations one may want to use other types of kinetic energy operators. Such custom operators are implemented as Matlab/Octave classes. They are set up like this:
hamilt.kin{1} = kin.triatomic;
hamilt.kin{1}.dof = [1 2];
hamilt.kin{2} ...
and so on. For a list of the implemented kinetic energy operator classdef's and their settable properties, see the tables given below. as well as the package folder.
kin.triatomic | Kinetic energy operator for a triatomic molecule ABC with fixed bending angle between AB and BC. The explicit form of this operator is T = pAB² / (2μAB) + pBC² / (2μBC) + cos θ pAB pBC / mB |
---|---|
dof | Array of two elements that give the index of the degree of freedom corresponding to the bond lengths AB and BC. |
mass | Array of the three masses of the atoms A, B, and C. |
theta | bending angle θ of the triatomic molecule. |
kin.jacobi | Kinetic energy operator that involves the internal angular coordinate of a triatomic molecule when using Jacobi coordinates ABC. If r is the AB-distance, and R is the distance between the center of mass of AB and the atom C, then this operator is ( 1 / (2μr r²) + 1 / (2μR R²) ) Lθ² with the corresponding reduced masses μx and the angular momentum operator L |
---|---|
mass_R | The reduced mass of the coordinate R. |
mass_r | The reduced mass of the coordinate r. |
dof_c | Index of the degree of freedom of the angular coordinate θ. The grid type for this degree of freedom must be of type grid_legendre. |
dof_R | Index of the degree of freedom corresponding to the coordinate R. |
dof_r | Optional: Index of the degree of freedom corresponding to the coordinate r. Either this or r_0 has to be set. |
r_0 | Optional: constant value of r. Either this or dof_r has to be set. |
Any of the above classdef's needs to contain the following methods
method | description |
---|---|
init_kin | This function initializes the respective kinetic operator. It is called internally during the setup of the calculation. This function needs to be called before the kinetic operator can be used |
kinetic | Applies the kinetic energy operator to wavefunction (for all (coupled) channels!). The result is stored in psi.new. If new == true, the input wave function comes from psi.new, otherwise we take it from psi.dvr |
kinetic_exp | Takes the wavefunction stored in psi.dvr (for all (coupled) channels!) and applies the operator exp(-i⋅K⋅f⋅dt) to it. The result is stored again in psi.dvr afterwards. Fraction f should be chosen as 1 or ½ for use in Lie-Trotter or Strang-Marchuk splitting method, respectively. |
kinetic2dvr | Returns the matrix corresponding to the underlying kinetic energy operator of the grid in the DVR representation. Used in qm_bound for constructing the Hamiltonian to diagonalize. |
Wiki: Reference.Programs.qm_bound
Wiki: Reference.Variables.hamilt
Wiki: Reference.Variables.space.dof