Multidip  1.0
Multi-photon matrix elements
multidip_integ Module Reference

Special integrals needed by MULTIDIP. More...

Data Types

type  nested_cgreen_integ_cache_internal_t
 Integral cache data. More...
 
type  nested_cgreen_integ_cache_t
 Integral cache. More...
 

Functions/Subroutines

subroutine init_nested_cgreen_integ_cache_t (this, N, ne, a, r0, c)
 Initialize integral cache. More...
 
logical function get_nested_cgreen_integ_cache_t (this, a, r0, c, N, sa, sb, m, l, k, val)
 Get integral from cache. More...
 
subroutine set_nested_cgreen_integ_cache_t (this, a, r0, c, N, sa, sb, m, l, k, val)
 Add integral to cache. More...
 
complex(wp) function nested_exp_integ (Z, a, c, N, m, s, k)
 Multi-dimensional triangular integral of exponentials and powers. More...
 
complex(wp) function nested_coul_integ (Z, a, c, N, m, s, l, k)
 Multi-dimensional triangular integral of Coulomb-Hankel functions and powers. More...
 
complex(wp) function nested_cgreen_integ (Z, a, r0, c, N, sa, sb, m, l, k)
 Multi-dimensional integral of Coulomb-Hankel and Coulomb-Green functions and powers. More...
 

Variables

type(nested_cgreen_integ_cache_tnested_cgreen_integ_cache
 

Detailed Description

Special integrals needed by MULTIDIP.

Author
J Benda
Date
2020 - 2023

Module containing routines for calculation of the multi-dimensional dipole integrals used in outer correction of transition dipole elements in MULTIDIP.

Function/Subroutine Documentation

◆ get_nested_cgreen_integ_cache_t()

logical function multidip_integ::get_nested_cgreen_integ_cache_t ( class(nested_cgreen_integ_cache_t), intent(in)  this,
real(wp), intent(in)  a,
real(wp), intent(in)  r0,
real(wp), intent(in)  c,
integer, intent(in)  N,
integer, intent(in)  sa,
integer, intent(in)  sb,
integer, dimension(:), intent(in)  m,
integer, dimension(:), intent(in)  l,
complex(wp), dimension(:), intent(in)  k,
complex(wp), intent(inout)  val 
)

Get integral from cache.

Authors
J Benda
Date
2023

Try to find the integral specified by the parameters (a, r0, c, N, sa, sb, m, l, k) in the integral cache. On success, return .true. and set val to the stored value. Otherwise return .false..

Definition at line 112 of file multidip_integ.f90.

◆ init_nested_cgreen_integ_cache_t()

subroutine multidip_integ::init_nested_cgreen_integ_cache_t ( class(nested_cgreen_integ_cache_t), intent(inout)  this,
integer, intent(in)  N,
integer, intent(in)  ne,
real(wp), intent(in)  a,
real(wp), intent(in)  r0,
real(wp), intent(in)  c 
)

Initialize integral cache.

Authors
J Benda
Date
2023

Prepare the integral cache for a given maximal order and energy

Definition at line 88 of file multidip_integ.f90.

◆ nested_cgreen_integ()

complex(wp) function multidip_integ::nested_cgreen_integ ( real(wp), intent(in)  Z,
real(wp), intent(in)  a,
real(wp), intent(in)  r0,
real(wp), intent(in)  c,
integer, intent(in)  N,
integer, intent(in)  sa,
integer, intent(in)  sb,
integer, dimension(:), intent(in)  m,
integer, dimension(:), intent(in)  l,
complex(wp), dimension(:), intent(in)  k 
)

Multi-dimensional integral of Coulomb-Hankel and Coulomb-Green functions and powers.

Author
J Benda
Date
2020 - 2024

Evaluate the many-dimensional integral

\[ \int\limits_a^{+\infty} \dots \int\limits_a^{+\infty} H_N(r_N) \dots g_3(r_3, r_2) r_2^{m_2} g_2(r_2, r_1) r_1^{m_1} H_1(r_1) \mathrm{d}r_1 \dots \]

using the asymptotic form of Coulomb-Hankel functions. The arrays passed to this function need to be ordered from the right-most integral to the right. This function iterates over all possible orderings of \( (r_1, r_2, \dots, r_N) \) and for each of these it splits the integral into (hyper-)triangular integrals and integrates those using nested_coul_integ.

For small values of "a" it may increase the accuracy if the leading interval (a,r0) (or more specifically the set Q = (a,+∞)^N \ (b,+∞)^N) is integrated numerically. For such use, provide r0 > a. Otherwise set r0 to zero.

When the global paramter coulomb_check is on, the integral is not attempted if any of the Coulomb functions in the integrand is not sufficiently well approximated by the asymptotic form at the R-matrix radius (or at the asymptotic radius if given). In such a case, the function returns the NaN constant.

Parameters
ZResidual ion charge
aLower bound of the integration
r0Optional radius from which to apply asymptotic integrals
cDamping factor (additional exp(-c*r) added to all r^m functions)
NDimension (number of integration variables)
saSign of the right-most Coulomb-Hankel function
sbSign of the left-most Coulomb-Hankel function
mArray of integer powers of length N
lArray of angular momenta of length N + 1
kArray of linear momenta of length N + 1

Definition at line 485 of file multidip_integ.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nested_coul_integ()

complex(wp) function multidip_integ::nested_coul_integ ( real(wp), intent(in)  Z,
real(wp), intent(in)  a,
real(wp), intent(in)  c,
integer, intent(in)  N,
integer, dimension(1:n), intent(in)  m,
integer, dimension(1:2*n), intent(in)  s,
integer, dimension(1:2*n), intent(in)  l,
complex(wp), dimension(1:2*n), intent(in)  k 
)

Multi-dimensional triangular integral of Coulomb-Hankel functions and powers.

Author
J Benda
Date
2020 - 2023

Evaluate the nested many-dimensional triangular integral

\[ \int\limits_a^{+\infty} \dots \int\limits_{r_3}^{+\infty} H_4(r_2) r_2^{m_2} H_3(r_2) \int\limits_{r_2}^{+\infty} H_2(r_1) r_1^{m_1} H_1(r_1) \mathrm{d}r_1 \mathrm{d}r_2 \mathrm{d}r_3 \dots \]

using the asymptotic form of Coulomb-Hankel functions. The arrays passed to this function need to be ordered from the inner-most (right-most) integral outward. For each term, use nested_exp_integ.

Parameters
ZResidual ion charge
aLower bound
cDamping factor (additional exp(-c*r) added to all r^m functions)
NDimension (number of integration variables)
mArray of integer powers of length N
sArray of integer signs (+1 or -1) in exponents of length 2*N
lArray of angular momenta of length 2*N
kArray of linear momenta of length 2*N

Definition at line 369 of file multidip_integ.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nested_exp_integ()

complex(wp) function multidip_integ::nested_exp_integ ( real(wp), intent(in)  Z,
real(wp), intent(in)  a,
real(wp), intent(in)  c,
integer, intent(in)  N,
integer, dimension(0:n-1), intent(in)  m,
integer, dimension(0:2*n-1), intent(in)  s,
complex(wp), dimension(0:2*n-1), intent(in)  k 
)

Multi-dimensional triangular integral of exponentials and powers.

Author
J Benda
Date
2020 - 2023

Evaluate the nested many-dimensional triangular integral

\[ \int\limits_a^{+\infty} \dots \int\limits_{r_3}^{+\infty} \mathrm{e}^{\mathrm{i}s_4 \theta_4(r_2)} r_2^{m_2} \mathrm{e}^{\mathrm{i}s_3 \theta_3(r_2)} \int\limits_{r_2}^{+\infty} \mathrm{e}^{\mathrm{i}s_2 \theta_2(r_1)} r_1^{m_1} \mathrm{e}^{\mathrm{i}s_1 \theta_1(r_1)} \mathrm{d}r_1 \mathrm{d}r_2 \mathrm{d}r_3 \dots \]

where

\[ \theta_1(r_1) = k_1 r_1 + \log(2 k_1 r_1)/k_1 - \pi l_1/2 + \sigma_{l_1}(k_1) \]

is the asymptotic phase of a Coulomb function. The arrays passed to this function need to be ordered from the inner-most (right-most) integral outward. The function result does not contain the overall phase and damp factor, which needs to be added manually.

Parameters
ZResidual ion charge
aLower bound
cDamping factor (additional exp(-c*r) added to all r^m functions)
NDimension (number of integration variables)
mArray of integer powers of length N
sArray of integer signs (+1 or -1) in exponents of length 2*N
kArray of linear momenta of length 2*N

Definition at line 210 of file multidip_integ.f90.

Here is the caller graph for this function:

◆ set_nested_cgreen_integ_cache_t()

subroutine multidip_integ::set_nested_cgreen_integ_cache_t ( class(nested_cgreen_integ_cache_t), intent(inout)  this,
real(wp), intent(in)  a,
real(wp), intent(in)  r0,
real(wp), intent(in)  c,
integer, intent(in)  N,
integer, intent(in)  sa,
integer, intent(in)  sb,
integer, dimension(:), intent(in)  m,
integer, dimension(:), intent(in)  l,
complex(wp), dimension(:), intent(in)  k,
complex(wp), intent(in)  val 
)

Add integral to cache.

Authors
J Benda
Date
2023

Add integral value to the integral cache.

Definition at line 150 of file multidip_integ.f90.

Variable Documentation

◆ nested_cgreen_integ_cache

type(nested_cgreen_integ_cache_t) multidip_integ::nested_cgreen_integ_cache

Definition at line 78 of file multidip_integ.f90.