Multidip
1.0
Multi-photon matrix elements
|
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_t) | nested_cgreen_integ_cache |
Special integrals needed by MULTIDIP.
Module containing routines for calculation of the multi-dimensional dipole integrals used in outer correction of transition dipole elements in MULTIDIP.
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.
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.
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.
Prepare the integral cache for a given maximal order and energy
Definition at line 88 of file multidip_integ.f90.
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.
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.
Z | Residual ion charge |
a | Lower bound of the integration |
r0 | Optional radius from which to apply asymptotic integrals |
c | Damping factor (additional exp(-c*r) added to all r^m functions) |
N | Dimension (number of integration variables) |
sa | Sign of the right-most Coulomb-Hankel function |
sb | Sign of the left-most Coulomb-Hankel function |
m | Array of integer powers of length N |
l | Array of angular momenta of length N + 1 |
k | Array of linear momenta of length N + 1 |
Definition at line 485 of file multidip_integ.f90.
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.
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.
Z | Residual ion charge |
a | Lower bound |
c | Damping factor (additional exp(-c*r) added to all r^m functions) |
N | Dimension (number of integration variables) |
m | Array of integer powers of length N |
s | Array of integer signs (+1 or -1) in exponents of length 2*N |
l | Array of angular momenta of length 2*N |
k | Array of linear momenta of length 2*N |
Definition at line 369 of file multidip_integ.f90.
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.
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.
Z | Residual ion charge |
a | Lower bound |
c | Damping factor (additional exp(-c*r) added to all r^m functions) |
N | Dimension (number of integration variables) |
m | Array of integer powers of length N |
s | Array of integer signs (+1 or -1) in exponents of length 2*N |
k | Array of linear momenta of length 2*N |
Definition at line 210 of file multidip_integ.f90.
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.
Add integral value to the integral cache.
Definition at line 150 of file multidip_integ.f90.
type(nested_cgreen_integ_cache_t) multidip_integ::nested_cgreen_integ_cache |
Definition at line 78 of file multidip_integ.f90.