# Contractions and vibrational basis set¶

Duo uses a `contraction`

scheme to construct the rovibronic basis set used for the solution
of the coupled problem. As a first step the J=0 vibration problem is solved for each electronic state, in which the
corresponding Schroedinger equation is solved in the grid representation
of `npoints`

. Then a certain number of the resulted
vibrational eigenfunctions with vmax and `EnerMax`

is selected to
form the vibrational part of the basis set.

There are currently two contraction schemes supported by Duo: vibrational `vib`

and `Omega`

(diabatic).

The contraction type is defined in the section `CONTRACTION`

(aliases: `vibrationalbasis`

and `vibrations`

)
by the keywords `vib`

or `omega`

.

## Vibrational contraction¶

This contraction uses a spin-free, fully uncoupled solution of the vibrational Schrödinger equation obtained independently for each electronic state as the vibrational basis. The rovibronic basis set is then form from the Lamda-Sigma wavefunctions:

where and are the rigid rotor functions and are the electronic wavefunctions implicitly taken from the ab initio calculations.

## Omega (diabatic) contraction¶

This contraction is based on a solution of vibronically coupled problems for each value of . This contraction consists of two steps.

- For each grid value of the electronic-orbital-spin-spin-orbit coupling is diagonalised on the Sigma/Lambda basis

for each values of independently to form diabatic PECs.

- Vibrational () Schrödinger equations are solved for each diabatic PEC curve to obtain a Omega-vibrational basis set

( is a manyfold count within the same value of ).

The rovibronic basis set in the Omega representation is given by

where are the rigid rotor functions.

Example 1:

```
contraction
vib
nmax 30
enermax 25000
end
```

Example 2:

```
contraction
omega
nmax 30 10 10
end
```

## Keywords¶

- vib and omega: contraction types
- nmax

(alias: `vmax`

, `vibmax`

) specifies the value of the maximum vibrational functions to be computed and kept for
the solution of the coupled problem. For example

```
nmax 15
```

specifies to compute for each PEC the lowest-energy 15 vibrational levels; it is also possible to specify different values of texttt{vmax} for each PEC, in which case the values must be given as a list; for example

```
nmax 10 15 8
```

specifies that for the PEC identified as `poten 1`

Duo should take 10 lowest vibrational states `nmax=10`

, for
`poten 2`

, `nmax=15`

and for `poten 3`

, `nmax=8`

.
If there are more PEC (`poten 4`

etc.) they will use for `nmax`

the last value specified (`nmax=8`

in this example).

- enermax

Alternatively or complementary to `nmax`

one can select the vibrational energy levels to compute
by specifying an upper energy threshold (in cm^{-1}). Similarly to `nmax`

, one can specify a different value of `enermax`

for each PEC by writing a list of values; for example

```
enermax 30000.0 25000.0
```

selects a threshold of 30000 cm^{-1} for `poten 1`

and one of 25000 cm^{-1} for `poten 2`

and any other potential present.
Note that by default Duo will shift the PECs so that the lowest point of the lowest-lying PEC has zero energy, and that the energy
used for the `enermax`

threshold are `total`

vibrational energies including the zero point energy.
One can prevent Duo from shifting the PECs by writing in the input (anywhere but not within an input section)
the option `do_not_shift_pecs`

.

If both `enermax`

and `vmax`

are specified only levels which satisfy both criteria are kept for the solution of the coupled problem.
If neither of them is specified (or the `vibrationalbasis`

input section is missing altogether) then `vmax`

is taken equal to `npoints`

for all PECs and there is a hard-coded limit of 10 ^{8} cm^{-1} for `enermax`

.

end{itemize}