radial_coupling_terms_mod Module

This module provides all functions that handle radial coupling terms of the PES. It covers:

(1) reading radial coupling terms from external file ("read_radial_coupling_terms", "skip_header_lines", "read_and_validate_lambda", "read_potential_data", "validate_r_range")

(2) reducing the number of read coupling terms to retain only necessary couplings ("reduce_radial_coupling_terms", "print_pes_quantum_numbers", "reduce_coupling_terms", "find_reduced_term")

(3) interpolation of radial coupling terms ("interpolate_radial_coupling_terms")

(4) providing value of the interpolated radial coupling term ("get_radial_coupling_term_value") --------------------------------------------------------------------------!


Uses

  • module~~radial_coupling_terms_mod~~UsesGraph module~radial_coupling_terms_mod radial_coupling_terms_mod module~global_variables_mod global_variables_mod module~radial_coupling_terms_mod->module~global_variables_mod module~math_utilities_mod math_utilities_mod module~radial_coupling_terms_mod->module~math_utilities_mod module~utility_functions_mod utility_functions_mod module~radial_coupling_terms_mod->module~utility_functions_mod iso_fortran_env iso_fortran_env module~radial_coupling_terms_mod->iso_fortran_env module~global_variables_mod->iso_fortran_env module~math_utilities_mod->module~utility_functions_mod module~math_utilities_mod->iso_fortran_env module~special_functions_mod special_functions_mod module~math_utilities_mod->module~special_functions_mod module~utility_functions_mod->iso_fortran_env

Used by

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

Contents


Functions

private function find_coupling_index(v_, j_, v_prime_, j_prime_) result(result_index_)

Locates the correct quantum number that describes the v/j coupling. Note that coupling terms are symmetric with respect to the change of pre- and post-collisional quantum numbers.

Arguments

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

pre-collisional vibrational quantum number

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

pre-collisional rotational quantum number

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

post-collisional vibrational quantum number

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

post-collisional rotational quantum number

Return Value integer(kind=int32)

Index pointing to \(v, j, v^{\prime}, j^{\prime}\) in reduced_* arrays

private function find_lambda_index(lambda_) result(result_index_)

Locates given \(\lambda\) value in legendre_indices.

Arguments

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

Legendre expansion index, \(\lambda\)

Return Value integer(kind=int32)

Index pointing to \(\lambda\) in legendre_indices

private function find_reduced_term(r_index_, lambda_index_, coupling_index_) result(reduced_term)

Finds and returns the reduced term for the given indices.

Arguments

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

index interating over intermolecular grid

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

index interating over Legendre expansion terms

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

index interating over necessary couplings

Return Value real(kind=dp)

(output) sought value of the coupling term


Subroutines

public subroutine get_radial_coupling_term_value(intermolecular_distance, lambda_, v_, j_, v_prime_, j_prime_, radial_term_value_)

Returns the interpolated value of a specific radial coupling term at a given distance.

Arguments

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

Intermolecular distance, \(R\)

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

Legendre expansion index

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

pre-collisional vibrational quantum number

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

pre-collisional rotational quantum number

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

post-collisional vibrational quantum number

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

post-collisional rotational quantum number

real(kind=dp), intent(out) :: radial_term_value_

Value of the radial coupling coefficient

Interpolates the radial coupling terms using cubic spline functions. The resulting spline coefficients for each coupling term are stored in coupling_terms_b_coeffs, coupling_terms_c_coeffs, and coupling_terms_d_coeffs matrices.

Arguments

None

public subroutine read_radial_coupling_terms()

Reads the radial coupling terms from the external file. The file is assumed to be formatted as described in "Supplying radial terms" section. The read radial coupling terms are kept in "tabulated_coupling_terms"

Arguments

None

public subroutine reduce_radial_coupling_terms()

Reduces the tabulated_coupling_terms matrix to retain only the necessary coupling terms.

Arguments

None

private subroutine handle_coupling_index_error(v_, j_, v_prime_, j_prime_)

Handles error when the appropriate coupling term is not found.

Arguments

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

pre-collisional vibrational quantum number

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

pre-collisional rotational quantum number

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

post-collisional vibrational quantum number

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

post-collisional rotational quantum number

private subroutine handle_lambda_index_error(lambda_)

Handles error when \(\lambda\) is not found in legendre_indices.

Arguments

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

Legendre expansion index, \(\lambda\)

private subroutine print_pes_quantum_numbers(set_type, col_count)

Prints quantum numbers describing radial coupling terms of the PES based on the provided set type and column count.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: set_type

"Original" or "reduced" - describes the set of quantum numbers

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

number of coupling terms

private subroutine read_and_validate_lambda(lambda_index_)

Reads the value of lambda and compares with expected value.

Arguments

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

private subroutine read_potential_data(lambda_index_)

Reads the intermolecular distance and radial coupling terms formatted in columns by iterating over number of tabulated ]](R\) points. Immediately converts \(R\) and radial coupling terms to a.u.

Arguments

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

private subroutine reduce_coupling_terms()

Reduces the coupling terms based on the existence of couplings.

Arguments

None

private subroutine skip_header_lines()

Skips the first n_skip_lines (read on input) lines in the coupling_terms_file

Arguments

None

private subroutine validate_r_range()

Checks if read R values are consistent with r_min and r_max.

Arguments

None