This module provides functions and subroutines for calculating and analyzing state-to-state cross-sections. It is divided into three parts:
(1) Calculating cross-sections: Functions for computing state-to-state cross-sections based on quantum states, S-matrix, and scattering parameters ("calculate_state_to_state_cross_section", "compute_individual_cross_section", "get_block_indices", "sum_cross_section_contributions", "compute_real_component", "compute_imag_component") (2) Printing cross-sections: Subroutines to output the largest partial cross-sections, providing both basic and detailed information. ("print_largest_partial_cross_sections", "print_basic_cross_section_info", "print_detailed_cross_section_info") (3) Threshold checking: Subroutine to check if the computed cross-sections meet specified convergence conditions ("check_cross_section_thresholds")
Computes the imaginary part of the cross-section contribution for given indices.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | initial_index_ |
index pointing to the basis element involving initial state |
||
integer(kind=int32), | intent(in) | :: | final_index_ |
index pointing to the basis element involving final state |
||
real(kind=dp), | intent(in) | :: | s_matrix_imag_(:,:) |
imaginary part of the S-matrix |
(output) contribution to the cross-section from imaginary part of the S-matrix
Calculates cross-section for a given initial and final state.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | initial_state_ |
index pointing to the intial state in basis arrays |
||
integer(kind=int32), | intent(in) | :: | final_state_ |
index pointing to the final state in basis arrays |
||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
holds indices to the basis arrays which correspond to open channels |
||
real(kind=dp), | intent(in) | :: | basis_wavevectors_(:) |
holds wavevectors k_{i} |
||
real(kind=dp), | intent(in) | :: | s_matrix_real_(:,:) |
real and imaginary parts of the S-matrix |
||
real(kind=dp), | intent(in) | :: | s_matrix_imag_(:,:) |
real and imaginary parts of the S-matrix |
||
integer(kind=int32), | intent(in) | :: | channel_indices_(:) |
holds the indices pointing to the basis arrays |
||
integer(kind=int32), | intent(in) | :: | channel_l_values_(:) |
holds all values of l |
||
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
(output) cross-section
Computes the real part of the cross-section contribution for given indices.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | initial_index_ |
index pointing to the basis element involving initial state |
||
integer(kind=int32), | intent(in) | :: | final_index_ |
index pointing to the basis element involving final state |
||
integer(kind=int32), | intent(in) | :: | l_initial_ |
pre-collisional \(l\) value |
||
integer(kind=int32), | intent(in) | :: | l_final_ |
post-collisional \(l\) value |
||
real(kind=dp), | intent(in) | :: | s_matrix_real_(:,:) |
real part of the S-matrix |
(output) contribution to the cross-section from real part of the S-matrix
Returns indices from channel_indices_ that match the specified quantum state.
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) | :: | channel_indices_(:) |
holds the indices pointing to the basis arrays |
(output) indices that match the specified quantum state
Sum the contributions to the cross-section from S-matrix components
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | init_indices_(:) |
indices pointing to basis element involving initial state |
||
integer(kind=int32), | intent(in) | :: | final_indices_(:) |
indices pointing to basis element involving final state |
||
real(kind=dp), | intent(in) | :: | s_matrix_real_(:,:) |
real and imaginary parts of the S-matrix |
||
real(kind=dp), | intent(in) | :: | s_matrix_imag_(:,:) |
real and imaginary parts of the S-matrix |
||
integer(kind=int32), | intent(in) | :: | channel_l_values_(:) |
holds all values of l |
(output) contribution to the cross-section from S-matrix components
Add partial cross-sections to accumulated cross-sections
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | size_ |
number of open basis levels (defines the size of both arrays) |
||
real(kind=dp), | intent(in) | :: | partial_(size_*size_) |
array holding partial cross-sections |
||
real(kind=dp), | intent(inout) | :: | accumulated_(size_*size_) |
array holding accumulated cross-sections |
Calculates all state-to-state cross-sections.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
holds indices to the basis arrays which correspond to open channels |
||
real(kind=dp), | intent(in) | :: | basis_wavevectors_(:) |
holds wavevectors k_{i} |
||
real(kind=dp), | intent(in) | :: | s_matrix_real_(:,:) |
real and imaginary parts of the S-matrix |
||
real(kind=dp), | intent(in) | :: | s_matrix_imag_(:,:) |
real and imaginary parts of the S-matrix |
||
integer(kind=int32), | intent(in) | :: | channel_indices_(:) |
holds the indices pointing to the basis arrays |
||
integer(kind=int32), | intent(in) | :: | channel_l_values_(:) |
holds all values of l |
||
real(kind=dp), | intent(inout) | :: | cross_section_array_(:) |
array holding all XSs |
Checks if the elastic_xs_threshold (threshold for elastic XS) and inelastic_xs_threshold (threshold for inelastic XS) conditions are already fulfilled.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in) | :: | largest_elastic_xs_ |
largest elastic XS in the block |
||
real(kind=dp), | intent(in) | :: | largest_inelastic_xs_ |
largest inelastic XS in the block |
||
integer(kind=int32), | intent(inout) | :: | consecutive_elastic_ |
number of consecutive blocks meeting condition on elastic XS |
||
integer(kind=int32), | intent(inout) | :: | consecutive_inelastic_ |
number of consecutive blocks meeting condition on inelastic XS |
||
logical, | intent(inout) | :: | terminate_ |
flag to indicate termination of loop based on thresholds |
Determine the largest partial elastic and inelastic cross-sections in a given set of cross-sections.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
||
real(kind=dp), | intent(in) | :: | cross_sections_(:) |
array holding partial cross-sections |
||
real(kind=dp), | intent(out) | :: | max_elastic_cross_section_ |
largest elastic cross-section |
||
real(kind=dp), | intent(out) | :: | max_inelastic_cross_section_ |
largest inelastic cross-section |
||
integer(kind=int32), | intent(out) | :: | max_elastic_index_ |
index pointing to the largest elastic cross-section |
||
integer(kind=int32), | intent(out) | :: | max_inelastic_index_1_ |
first index pointing to the largest inelastic cross-section |
||
integer(kind=int32), | intent(out) | :: | max_inelastic_index_2_ |
second index pointing to the largest inelastic cross-section |
allocate arrays keeping accumulated and partial cross-sections in each jtot and parity block
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | size_ |
number of open basis levels (defines the size of both arrays) |
||
real(kind=dp), | intent(inout), | allocatable | :: | partial_block_(:) |
array holding partial cross-sections in a parity block |
|
real(kind=dp), | intent(inout), | allocatable | :: | partial_jtot_(:) |
array holding partial cross-sections in a jtot block |
|
real(kind=dp), | intent(inout), | allocatable | :: | accumulated_(:) |
array holding accumulated cross-sections |
Prints information about cross-sections at the end of each total angular momentum (jtot) block
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
||
real(kind=dp), | intent(in) | :: | cross_sections_(:) |
holds values of the cross-sections |
Prints information about cross-sections at the end of the program
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
||
real(kind=dp), | intent(in) | :: | cross_sections_(:) |
holds values of the cross-sections |
Print the largest partial elastic and inelastic state-to-state cross-sections in a given block.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
real(kind=dp), | intent(in) | :: | largest_elastic_xs_ |
the largest partial elastic state-to-state XS in the block |
||
real(kind=dp), | intent(in) | :: | largest_inelastic_xs_ |
the largest partial inelastic state-to-state XS in the block |
||
integer(kind=int32), | intent(in) | :: | elastic_index_ |
index pointing indirectly to quantum numbers associated with the largest partial elastic state-to-state XS in the block |
||
integer(kind=int32), | intent(in) | :: | inelastic_index_1_ |
indices pointing indirectly to quantum numbers associated with the largest partial inelastic state-to-state XS in the block |
||
integer(kind=int32), | intent(in) | :: | inelastic_index_2_ |
indices pointing indirectly to quantum numbers associated with the largest partial inelastic state-to-state XS in the block |
||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
save "header" of the partial cross-sections file: -- label, "itype", number of levels in the basis, reduced mass of the system -- vibrational and rotational quantum numbers -- rovibrational energies -- index pointing to the initial level and the kinetic/total energy
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | jtot_ | |||
integer(kind=int32), | intent(in) | :: | block_number_ | |||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) | |||
real(kind=dp), | intent(in) | :: | xs_block(:) |
Prints information about cross-sections from provided "cross_sections_" array
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
||
real(kind=dp), | intent(in) | :: | cross_sections_(:) |
holds values of the cross-sections |
Prints basic information about the largest elastic and inelastic state-to-state xs (print_level <= 2)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
real(kind=dp), | intent(in) | :: | cross_section_value_ |
value of the cross-section |
||
character(len=*), | intent(in) | :: | type_label_ |
"elastic" or "inelastic" |
Prints detailed information about the largest elastic and inelastic state-to-state xs (print_level >= 3)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | total_angular_momentum_ |
total angular momentum |
||
real(kind=dp), | intent(in) | :: | cross_section_value_ |
value of the cross-section |
||
integer(kind=int32), | intent(in) | :: | index_1_ |
indices pointing indirectly to quantum numbers associated with the largest partial XS in the block |
||
integer(kind=int32), | intent(in) | :: | index_2_ |
indices pointing indirectly to quantum numbers associated with the largest partial XS in the block |
||
integer(kind=int32), | intent(in) | :: | open_basis_levels_(:) |
array holding indices to open basis levels |
||
character(len=*), | intent(in) | :: | type_label_ |
"elastic" or "inelastic" |