propagator_mod Module

This modules contains the subroutines used by the renormalized Numerov propagator.


Uses

  • module~~propagator_mod~~UsesGraph module~propagator_mod propagator_mod module~physics_utilities_mod physics_utilities_mod module~propagator_mod->module~physics_utilities_mod module~pes_matrix_mod pes_matrix_mod module~propagator_mod->module~pes_matrix_mod module~centrifugal_matrix_mod centrifugal_matrix_mod module~propagator_mod->module~centrifugal_matrix_mod module~array_operations_mod array_operations_mod module~propagator_mod->module~array_operations_mod module~global_variables_mod global_variables_mod module~propagator_mod->module~global_variables_mod iso_fortran_env iso_fortran_env module~propagator_mod->iso_fortran_env module~utility_functions_mod utility_functions_mod module~propagator_mod->module~utility_functions_mod module~physics_utilities_mod->module~array_operations_mod module~physics_utilities_mod->module~global_variables_mod module~physics_utilities_mod->iso_fortran_env module~physics_utilities_mod->module~utility_functions_mod module~pes_matrix_mod->module~physics_utilities_mod module~pes_matrix_mod->module~array_operations_mod module~pes_matrix_mod->module~global_variables_mod module~pes_matrix_mod->iso_fortran_env module~pes_matrix_mod->module~utility_functions_mod module~radial_coupling_terms_mod radial_coupling_terms_mod module~pes_matrix_mod->module~radial_coupling_terms_mod module~math_utilities_mod math_utilities_mod module~pes_matrix_mod->module~math_utilities_mod module~centrifugal_matrix_mod->module~array_operations_mod module~centrifugal_matrix_mod->module~global_variables_mod module~centrifugal_matrix_mod->iso_fortran_env module~array_operations_mod->iso_fortran_env module~global_variables_mod->iso_fortran_env module~utility_functions_mod->iso_fortran_env module~radial_coupling_terms_mod->module~global_variables_mod module~radial_coupling_terms_mod->iso_fortran_env module~radial_coupling_terms_mod->module~utility_functions_mod module~radial_coupling_terms_mod->module~math_utilities_mod module~math_utilities_mod->iso_fortran_env module~math_utilities_mod->module~utility_functions_mod module~special_functions_mod special_functions_mod module~math_utilities_mod->module~special_functions_mod

Used by

  • module~~propagator_mod~~UsedByGraph module~propagator_mod propagator_mod program~scattering SCATTERING program~scattering->module~propagator_mod

Contents


Subroutines

public subroutine numerov(number_of_channels_, channel_indices_, channels_omega_values_, nonzero_terms_per_element_, nonzero_legendre_indices_, nonzero_algebraic_coefficients_, number_of_steps_, total_angular_momentum_, log_der_matrix_)

Renormalized Numerov propagator

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: number_of_channels_

size of the basis

integer(kind=int32), intent(in) :: channel_indices_(number_of_channels_)

holds the indices pointing to the basis arrays

integer(kind=int32), intent(in) :: channels_omega_values_(number_of_channels_)

holds all values of \bar{\Omega}

integer(kind=int32), intent(in) :: nonzero_terms_per_element_(:)

keeps the number of non-zero terms in the sum (Eq. (6.21)) for each non-zero element of W/V

integer(kind=int32), intent(in) :: nonzero_legendre_indices_(:)

holds the proper indices pointing to l1/l2/lltabs, which correspond to the non-vanishing elements of the sum (Eq. (6.21)) for each non-zero element of W/V

real(kind=dp), intent(in) :: nonzero_algebraic_coefficients_(:)

holds the values of the non-zero algebraic coefficients

integer(kind=int32), intent(in) :: number_of_steps_

number of steps from r_min to r_max

integer(kind=int32), intent(in) :: total_angular_momentum_

total angular momentum

real(kind=dp), intent(inout) :: log_der_matrix_(number_of_channels_,number_of_channels_)

resulting log-derivative matrix at r_max

private subroutine calculate_coupling_matrix(intermolecular_distance_, pes_matrix_, centrifugal_matrix_, coupling_matrix_)

Combines the contribution from the interaction potential, total and and internal energy (pes_matrix_) with centrifugal matrix \( W_{\mathrm{N}} = V_{\mathrm{N}} + 1/R^{2} L^{2} \)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: intermolecular_distance_

intermolecular distance

real(kind=dp), intent(in) :: pes_matrix_(:,:)

holds contribution from the interaction potential, total and and internal energy

real(kind=dp), intent(in) :: centrifugal_matrix_(:,:)

\(R^{2}\) centrifugal matrix

real(kind=dp), intent(inout) :: coupling_matrix_(:,:)

(output) Coupling (W) matrix

private subroutine calculate_log_der_matrix(step_, number_of_channels_, t_matrix_minus_, t_matrix_, t_matrix_plus_, r_matrix_, r_matrix_plus_, log_der_matrix_)

calculates the log-derivative matrix from called by numerov at the end of the propagation

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: step_

propagator step

integer(kind=int32), intent(in) :: number_of_channels_

number of scattering channels in the block

real(kind=dp), intent(in) :: t_matrix_minus_(number_of_channels_,number_of_channels_)

T-matrix at R_{max - 1}

real(kind=dp), intent(in) :: t_matrix_(number_of_channels_,number_of_channels_)

T-matrix at R_{max}

real(kind=dp), intent(in) :: t_matrix_plus_(number_of_channels_,number_of_channels_)

T-matrix at R_{max + 1}

real(kind=dp), intent(in) :: r_matrix_(number_of_channels_,number_of_channels_)

R-matrix at R_{max}

real(kind=dp), intent(in) :: r_matrix_plus_(number_of_channels_,number_of_channels_)

R-matrix at R_{max + 1}

real(kind=dp), intent(inout) :: log_der_matrix_(number_of_channels_,number_of_channels_)

log-derivative matrix

private subroutine calculate_t_matrix(step_, coupling_matrix_, t_matrix_)

Calculates the T-matrix from the coupling matrix at grid point N: \( T_{\mathrm{N}} = h^{2}/12 W_{\mathrm{N}} \)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: step_

step of the propagator

real(kind=dp), intent(in) :: coupling_matrix_(:,:)

Coupling (W) matrix v

real(kind=dp), intent(inout) :: t_matrix_(:,:)

(output) T-matrix at grid point N

private subroutine calculate_u_matrix(t_matrix_, u_matrix_)

Calculates the U-matrix from T-matrix at grid point N: \(U_{\mathrm{N}} = 12(\mathbf{I} - 10 T_{\mathrm{N}})^{-1} - 10 \mathbf{I}\)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: t_matrix_(:,:)

T-matrix at grid point N

real(kind=dp), intent(inout) :: u_matrix_(:,:)

(output) U-matrix at grid point N

private subroutine general_propagation_step(number_of_channels_, step_numerov_, total_angular_momentum_, intermolecular_distance_, channel_indices_, channels_omega_values_, nonzero_terms_per_element_, nonzero_legendre_indices_, nonzero_algebraic_coefficients_, centrifugal_matrix_, r_matrix_, is_t_matrix_required_, t_matrix_returned_)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: number_of_channels_

size of the basis

real(kind=dp), intent(in) :: step_numerov_

step of the propagator

integer(kind=int32), intent(in) :: total_angular_momentum_

total angular momentum

real(kind=dp), intent(in) :: intermolecular_distance_

intermolecular distance

integer(kind=int32), intent(in) :: channel_indices_(number_of_channels_)

holds the indices pointing to the basis arrays

integer(kind=int32), intent(in) :: channels_omega_values_(number_of_channels_)

holds all values of \bar{\Omega}

integer(kind=int32), intent(in) :: nonzero_terms_per_element_(:)

keeps the number of non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the PES matrix

integer(kind=int32), intent(in) :: nonzero_legendre_indices_(:)

holds indices pointing to legendre_indices, which correspond to the non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the PES matrix;

real(kind=dp), intent(in) :: nonzero_algebraic_coefficients_(:)

holds the values of the non-zero algebraic coefficients

real(kind=dp), intent(in) :: centrifugal_matrix_(number_of_channels_,number_of_channels_)

(R*2)centrifugal matrix -

real(kind=dp), intent(inout) :: r_matrix_(number_of_channels_,number_of_channels_)

on input: R-matrix at previous step on output: R-matrix at next step

logical, intent(in), optional :: is_t_matrix_required_
real(kind=dp), intent(out), optional :: t_matrix_returned_(number_of_channels_,number_of_channels_)

on input: R-matrix at previous step on output: R-matrix at next step

private subroutine handle_final_propagation_steps(number_of_channels_, step_numerov_, total_angular_momentum_, channel_indices_, channels_omega_values_, nonzero_terms_per_element_, nonzero_legendre_indices_, nonzero_algebraic_coefficients_, centrifugal_matrix_, r_matrix_, t_matrix_minus_, t_matrix_, t_matrix_plus_, r_matrix_r_max_, r_matrix_plus_)

Handles propagation at the last two grid points: R_{N-1} and R_{N}: provides T-matrix at N-1, N and N+1 points and the Ratio matrix at N and N+1 points

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: number_of_channels_

size of the basis

real(kind=dp), intent(in) :: step_numerov_

step of the propagator

integer(kind=int32), intent(in) :: total_angular_momentum_

total angular momentum

integer(kind=int32), intent(in) :: channel_indices_(number_of_channels_)

holds the indices pointing to the basis arrays

integer(kind=int32), intent(in) :: channels_omega_values_(number_of_channels_)

holds all values of \bar{\Omega}

integer(kind=int32), intent(in) :: nonzero_terms_per_element_(:)

keeps the number of non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the PES matrix

integer(kind=int32), intent(in) :: nonzero_legendre_indices_(:)

holds indices pointing to legendre_indices, which correspond to the non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the PES matrix;

real(kind=dp), intent(in) :: nonzero_algebraic_coefficients_(:)

holds the values of the non-zero algebraic coefficients

real(kind=dp), intent(in) :: centrifugal_matrix_(number_of_channels_,number_of_channels_)

\(R^{2} \cdot\) centrifugal matrix -

real(kind=dp), intent(inout) :: r_matrix_(number_of_channels_,number_of_channels_)

Ratio matrix at N-1 step

real(kind=dp), intent(out) :: t_matrix_minus_(number_of_channels_,number_of_channels_)

T-matrix at N-1 step

real(kind=dp), intent(out) :: t_matrix_(number_of_channels_,number_of_channels_)

T-matrix at N step

real(kind=dp), intent(out) :: t_matrix_plus_(number_of_channels_,number_of_channels_)

T-matrix at N+1 step

real(kind=dp), intent(out) :: r_matrix_r_max_(number_of_channels_,number_of_channels_)

Ratio matrix at N step

real(kind=dp), intent(out) :: r_matrix_plus_(number_of_channels_,number_of_channels_)

Ratio matrix at N+1 step

private subroutine initial_setup(number_of_channels_, step_numerov_, total_angular_momentum_, intermolecular_distance_, channel_indices_, channels_omega_values_, nonzero_terms_per_element_, nonzero_legendre_indices_, nonzero_algebraic_coefficients_, centrifugal_matrix_, r_matrix_)

Initial setup of the propagator: call centrifugal matrix (kept throughotu the propagation) and other matrices at \(R_{\mathrm{min}}\)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: number_of_channels_

size of the basis

real(kind=dp), intent(in) :: step_numerov_

step of the propagator

integer(kind=int32), intent(in) :: total_angular_momentum_

total angular momentum

real(kind=dp), intent(in) :: intermolecular_distance_

intermolecular distance

integer(kind=int32), intent(in) :: channel_indices_(number_of_channels_)

holds the indices pointing to the basis arrays

integer(kind=int32), intent(in) :: channels_omega_values_(number_of_channels_)

holds all values of \bar{\Omega}

integer(kind=int32), intent(in) :: nonzero_terms_per_element_(:)

keeps the number of non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the pes matrix

integer(kind=int32), intent(in) :: nonzero_legendre_indices_(:)

holds indices pointing to legendre_indices, which correspond to the non-vanishing elements of the sum over \(\lambda\) for each non-zero element of the pes matrix;

real(kind=dp), intent(in) :: nonzero_algebraic_coefficients_(:)

holds the values of the non-zero algebraic coefficients

real(kind=dp), intent(inout) :: centrifugal_matrix_(number_of_channels_,number_of_channels_)

(R*2)centrifugal matrix - calculated once, will be used throughout the propagation

real(kind=dp), intent(inout) :: r_matrix_(number_of_channels_,number_of_channels_)

R-matrix at r_min

private subroutine propagator_summary(r_min_, r_max_, number_of_steps_)

Print a simple message after the propagation is finished

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: r_min_

initial point on the \(R\) grid

real(kind=dp), intent(in) :: r_max_

final point on the \(R\) grid

integer(kind=int32), intent(in) :: number_of_steps_

number of steps on the \(R\) grid