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
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=int32), | private, | allocatable | :: | final_block_indices_(:) | |||
| integer(kind=int32), | private | :: | final_index_ | ||||
| integer(kind=int32), | private, | allocatable | :: | init_block_indices_(:) | |||
| integer(kind=int32), | private | :: | initial_index_ | ||||
| integer(kind=int32), | private | :: | j_final_ | ||||
| integer(kind=int32), | private | :: | j_initial_ | ||||
| real(kind=dp), | private | :: | sum_contributions_ | ||||
| integer(kind=int32), | private | :: | v_final_ | ||||
| integer(kind=int32), | private | :: | v_initial_ | ||||
| real(kind=dp), | private | :: | wavevector_initial_ | 
      function compute_individual_cross_section(initial_state_, final_state_,  &
         open_basis_levels_, basis_wavevectors_, s_matrix_real_,          &
         s_matrix_imag_, channel_indices_, channel_l_values_,                  &
         total_angular_momentum_) result(cross_section_)
         !! Calculates cross-section for a given initial and final state.
         !---------------------------------------------------------------------!
         integer(int32), intent(in) :: initial_state_
            !! index pointing to the intial state in basis arrays
         integer(int32), intent(in) :: final_state_
            !! index pointing to the final state in basis arrays
         integer(int32), intent(in) :: open_basis_levels_(:)
            !! holds indices to the basis arrays which correspond to open channels
         real(dp), intent(in) :: basis_wavevectors_(:)
            !! holds wavevectors k_{i}
         real(dp), intent(in) :: s_matrix_real_(:,:), s_matrix_imag_(:,:)
            !! real and imaginary parts of the S-matrix
         integer(int32), intent(in) :: channel_indices_(:)
            !! holds the indices pointing to the basis arrays
         integer(int32), intent(in) :: channel_l_values_(:)
            !! holds all values of l
         integer(int32), intent(in) :: total_angular_momentum_
            !! total angular momentum
         real(dp) :: cross_section_
            !! (output) cross-section
         !---------------------------------------------------------------------!
         integer(int32) :: initial_index_, final_index_, v_initial_,           &
            j_initial_, v_final_, j_final_
         real(dp) :: wavevector_initial_, sum_contributions_
         integer(int32), allocatable :: init_block_indices_(:),                &
            final_block_indices_(:)
         !---------------------------------------------------------------------!
         initial_index_ = open_basis_levels_(initial_state_)
         v_initial_ = vib_levels(initial_index_)
         j_initial_ = rot_levels(initial_index_)
         wavevector_initial_ = basis_wavevectors_(initial_state_)
         !---------------------------------------------------------------------!
         final_index_ = open_basis_levels_(final_state_)
         v_final_ = vib_levels(final_index_)
         j_final_ = rot_levels(final_index_)
         !---------------------------------------------------------------------!
         init_block_indices_ = get_block_indices(v_initial_, j_initial_,       &
            channel_indices_)
         final_block_indices_ = get_block_indices(v_final_, j_final_,          &
            channel_indices_)
         !---------------------------------------------------------------------!
         sum_contributions_ = sum_cross_section_contributions(                 &
            init_block_indices_, final_block_indices_, s_matrix_real_,         &
            s_matrix_imag_, channel_l_values_)
         !---------------------------------------------------------------------!
         cross_section_ = sum_contributions_                                   &
            * real(2 * total_angular_momentum_ + 1, dp)                        &
            / (real(2 * j_initial_ + 1, dp) * wavevector_initial_**2.0_dp) * pi
         !---------------------------------------------------------------------!
      end function compute_individual_cross_section