This module provides subroutines that set the number of channels in the block, save quantum numbers for each channel (both in body- and space-fixed cases) and print quantum numbers on screen.
Calculates the largest wavevector in the block; called only if there are any open channels
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | channel_indices(:) |
holds the indices pointing to the basis arrays |
(output) the largest wavevector in the block
Calculates the number of steps on the intermolecular (R) grid in current block. This is done either directly (if r_step > 0) or through the number of steps per half de Broglie wavelength
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in) | :: | largest_wavevector_ |
the largest wavevector in the block |
||
real(kind=dp), | intent(in) | :: | k_potential_depth_ |
correction from the depth of the potential well converted to wavevector units |
number of steps on the \(R\) grid
counts the energetically accessible channels in the given block
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | channel_indices(:) |
holds the indices pointing to the basis arrays |
(output) number of open channels
Prepare an array of wavevectors in a given block (in A^2) which are saved in the S-matrix file
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | channel_indices_(:) |
holds the indices pointing to the basis arrays |
||
real(kind=dp), | intent(inout) | :: | wavevectors_(:) |
array of wavevectors (in A^2) |
prints information about body-fixed channels on screen
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | parity_exponent_ |
parity exponent of the block (0 if p = +1, 1 if p = -1) |
||
integer(kind=int32), | intent(inout) | :: | channel_indices(:) |
holds the indices pointing to the basis arrays |
||
integer(kind=int32), | intent(inout) | :: | channels_omega_values(:) |
holds all values of \bar{\Omega} |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | jtot_ |
total angular momentum |
||
integer(kind=int32), | intent(in) | :: | parity_exponent_ |
parity exponent of the block (0 if p = +1, 1 if p = -1) |
||
integer(kind=int32), | intent(in) | :: | count_blocks_ | |||
integer(kind=int32), | intent(in) | :: | number_of_channels_ |
number of channels in the block |
Prepares the channel_indices array which holds indices that refer to the basis arrays: v1level/j1level/internal_energies, and channels_omega_values which holds values of \bar{\Omega}
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(in) | :: | parity_exponent_ |
parity exponent of the block (0 if p = +1, 1 if p = -1) |
||
integer(kind=int32), | intent(inout) | :: | channel_indices(:) |
holds the indices pointing to the basis arrays |
||
integer(kind=int32), | intent(inout) | :: | channels_omega_values(:) |
holds all values of \bar{\Omega} |
determine the number of scattering channels in each parity block for given total angular momentum in both body-fixed and space-fixed frames
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(out) | :: | number_of_channels_even_parity_block |
number of channels in the p = 1 (even parity) block |
||
integer(kind=int32), | intent(out) | :: | number_of_channels_odd_parity_block |
number of channels in the p = -1 (odd parity) block |
Prepares the channel_l_values array which holds values of orbital angular momentum, \(l\), a space-fixed-frame quantum number.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(in) | :: | parity_exponent_ |
parity exponent of the block (0 if p = +1, 1 if p = -1) |
||
integer(kind=int32), | intent(inout) | :: | channel_l_values(:) |
holds all values of l |
calculate number of channels in even and odd parity blocks in the body-fixed frame; in principle, \(\bar{\Omega}\in \langle 0, \mathrm{min}(j, J))), but number of channels additionally depends on the sign of \( p (-1)^{J} \): channels with \(\bar{\Omega}=0\) values enter blocks with \( p (-1)^{J} = + 1 \) only;
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_even_parity_block |
number of channels in the p = 1 (even parity) block |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_odd_parity_block |
number of channels in the p = -1 (odd parity) block |
calculate number of channels in even and odd parity blocks in the space-fixed frame based on available values of orbital angular momentum: \( l \in \langle |j-J|, j+J \rangle \); parity is defined as \(p= (-1)^{j+l}\)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_even_parity_block |
number of channels in the p = 1 (even parity) block |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_odd_parity_block |
number of channels in the p = -1 (odd parity) block |
check if the number of channels is the same in body-fixed and space-fixed frames
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | number_of_channels_bf |
number of channels in the body-fixed frame |
||
integer(kind=int32), | intent(in) | :: | number_of_channels_sf |
number of channels in the space-fixed frame |
||
character(len=*), | intent(in) | :: | parity_block |
"even" or "odd", for printing purposes |
update channel_indices array which holds indices within the loop over level_index_ in set_body_fixed_channels
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32) | :: | omega_max_ |
largest value of \(\bar{\Omega}\), for given rotational and total angular momenta |
|||
integer(kind=int32) | :: | parity_term_exponent_ |
exponent of the \(p (-1)^{J}\) term |
|||
integer(kind=int32) | :: | level_index_ |
indices pointing to the basis arrays |
|||
integer(kind=int32), | intent(inout) | :: | channel_index_ |
index pointing to the current value in channel_indices and channels_omega_values; incremented in this subroutine |
||
integer(kind=int32), | intent(inout) | :: | channel_indices(:) |
holds the indices pointing to the basis arrays |
||
integer(kind=int32), | intent(inout) | :: | channels_omega_values(:) |
holds all values of \bar{\Omega} |
updates number_of_channels_even and number_of_channels_odd in the body-fixed frame for given \(J\) and \(\bar{Omega}_{max}\)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | omega_max_ |
largest value of \(\bar{\Omega}\), for given rotational and total angular momenta |
||
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_even_parity_block |
number of channels for the p = 1 block |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_odd_parity_block |
number of channels for the p = -1 block |
updates number_of_channels_even and number_of_channels_odd in the space-fixed frame for given range of orbital angular momentum
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | l_min_ |
smallest value of \( l = |j-J|\) |
||
integer(kind=int32), | intent(in) | :: | l_max_ |
largest value of \( l = j+J\) |
||
integer(kind=int32), | intent(in) | :: | level_index_ |
index pointing to speceific \(j\) value in rot_levels |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_even_parity_block |
number of channels for the p = 1 block |
||
integer(kind=int32), | intent(inout) | :: | number_of_channels_odd_parity_block |
number of channels for the p = -1 block |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | v_ |
vibrational quantum number |
||
integer(kind=int32), | intent(in) | :: | j_ |
rotational quantum number |
||
integer(kind=int32), | intent(in) | :: | omega_ |
\(\bar{\Omega}\) |
||
integer(kind=int32), | intent(in) | :: | parity_ |
parity of the block |
||
real(kind=dp), | intent(in) | :: | internal_energy_ |
\(E_{vj}\) |
||
real(kind=dp), | intent(in), | optional | :: | wavevector_ |
(optional) if the channel is open, print information about the wavevector |