Multidip  1.0
Multi-photon matrix elements
multidip_routines Module Reference

Main MULTIDIP routines. More...

Data Types

type  intermediatestate
 Intermediate state. More...
 

Functions/Subroutines

subroutine multidip_main
 MULTIDIP main subroutine. More...
 
subroutine multidip_driver (order, moldat, km, ak, lubnd, omega, polar, verbose, first_IP, r0, raw, erange)
 Central computation routine. More...
 
subroutine setup_initial_state (states, moldat, irr, lubnd, Ei)
 Construct initial state. More...
 
subroutine solve_intermediate_state (moldat, order, Ephoton, icomp, s, mgvnn, mgvn1, mgvn2, km, state, verbose, calc_Ei, first_IP, r0, erange)
 Calculate intermediate photoionisation state. More...
 
subroutine extract_dipole_elements (moldat, order, Ephoton, icomp, s, mgvnn, mgvn1, mgvn2, km, ak, state, verbose, calc_Ei, first_IP, r0, erange)
 Calculate dipole elements from intermediate and final states. More...
 
subroutine print_transition_header (state)
 Prints a one-line summary of the transition. More...
 
subroutine apply_ak_coefficiens_compak (psi, Apsi, ReAk, ImAk)
 Multiply vector by the (complex-conjugated) wave function coefficients. More...
 
subroutine apply_ak_coefficients_multidip (psi, Apsi, moldat, nopen, irr, Etot, Sp, Cp, kmat, tmat, conj)
 Multiply vector by the (complex-conjugated) wave function coefficients. More...
 
subroutine test_final_expansion (filename, moldat, irr, nopen, Etot, Ek, Sp, Cp, kmat, tmat)
 Write radially sampled final wave-function to file. More...
 
subroutine reset_timer (t, dt)
 Get current time stamp. More...
 
subroutine calculate_photon_energies (first_IP, escat, etarg, Ei, Ephoton, omega)
 Adjust ionization potential and calculate energy of each photon. More...
 
subroutine multiint (moldat, r0, Ei, esc, omega, ie, state, sb, dip)
 Evaluate the correction dipole integral for all orders. More...
 
recursive complex(wp) function multiint_chain (moldat, r0, Ei, esc, omega, ie, c, N, state, ichanf, sb, k, l, m)
 Calculate dipole correction integrals at given absorption depth. More...
 
real(wp) function channel_coupling_ion (moldat, dcomp, irrf, irri, ichanf, ichani)
 Ion channel dipole coupling. More...
 
real(wp) function channel_coupling_pws (moldat, dcomp, irrf, irri, ichanf, ichani)
 Partial wave channel dipole coupling. More...
 
subroutine calculate_pw_transition_elements (moldat, order, state, escat, calc_Ei, first_IP, Ephoton, polar, erange)
 Calculate partial wave dipoles, oriented dipoles and cross sections. More...
 
subroutine calculate_asymmetry_parameters (moldat, order, state, escat, calc_Ei, first_IP, Ephoton, raw, erange)
 Calculate cross sections and asymmetry parameters. More...
 
subroutine convert_xyz_to_sph (M_xyz, M_sph, maxl, chains)
 Change coordiantes. More...
 
subroutine calculate_quadratic_dipole_sph (beta, L, maxl, chains1, chains2, ntarg, nesc, M1, M2)
 Evaluate asymmetry parameter for given total L in the spherical basis. More...
 
subroutine calculate_quadratic_dipole_xyz (beta, L, maxl, chains1, chains2, ntarg, nesc, M1, M2)
 Evaluate asymmetry parameter for given total L in the Cartesian basis. More...
 

Variables

logical, parameter test_expansion = .false.
 

Detailed Description

Main MULTIDIP routines.

Author
J Benda
Date
2020 - 2021

Function/Subroutine Documentation

◆ apply_ak_coefficiens_compak()

subroutine multidip_routines::apply_ak_coefficiens_compak ( real(wp), dimension(:, :), intent(in)  psi,
real(wp), dimension(:, :), intent(inout)  Apsi,
real(wp), dimension(:, :), intent(in)  ReAk,
real(wp), dimension(:, :), intent(in)  ImAk 
)

Multiply vector by the (complex-conjugated) wave function coefficients.

Authors
J Benda
Date
2023

Contracts the provided wave function coefficients with the given inner region expansion.

Parameters
[in]psiInner region wave function expansion coefficients as two columns: real and imaginary part.
[in]ApsiThe result, in the same form as psi.
[in]ReAkReal part of the wave function coefficients of shape (nstat, nopen).
[in]ImAkImag part of the wave function coefficients of shape (nstat, nopen).

Definition at line 944 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ apply_ak_coefficients_multidip()

subroutine multidip_routines::apply_ak_coefficients_multidip ( real(wp), dimension(:, :), intent(in)  psi,
real(wp), dimension(:, :), intent(inout)  Apsi,
type(moleculardata), intent(in)  moldat,
integer, intent(in)  nopen,
integer, intent(in)  irr,
real(wp), intent(in)  Etot,
real(wp), dimension(:), intent(in)  Sp,
real(wp), dimension(:), intent(in)  Cp,
real(wp), dimension(:, :), intent(in)  kmat,
complex(wp), dimension(:, :), intent(in)  tmat,
logical, intent(in)  conj 
)

Multiply vector by the (complex-conjugated) wave function coefficients.

Authors
J Benda
Date
2023 - 2024

Contracts the provided wave function coefficients with the inner region expansion, which will be computed on the fly. The following formula is used:

\[ A_{rj}^{(-)}(E) = \frac{1}{2} \frac{1}{E_j - E} \sum_{pq} w_{pj} F_{pq}^{(-)\prime} \,, \]

where

\[ F_{pq}^{(-)\prime} = \sum_{s} \sqrt{\frac{2}{\pi k_p}} (S_p' \delta_{ps} + C_p' K_{ps}) [(1 + i K_{oo})^{-1}]_{sq}\,. \]

The last factor uses only the open-open subset of the K-matrix. In this subroutine it is evaluated by means of the T-matrix (defined as S - 1) as

\[ (1 + iK)^{-1} = 1 + \frac{1}{2}T^* \,. \]

Altogether, application of this subroutine does the following:

\[ \chi = \psi \mathsf{A}^{(-)*} = \psi \frac{1}{\mathsf{E} - E} \mathsf{w}^\top \sqrt{ \frac{2}{\pi \mathsf{k}} } (\mathsf{T}\mathsf{S}' + \mathsf{T} \mathsf{C}' \mathsf{K})^* (1 + i\mathsf{K})^{-1*} \,. \]

Parameters
[in]psiInner region wave function expansion coefficients as two columns: real and imaginary part.
[in]ApsiThe result, in the same form as psi.
[in]moldatMolecular data class.
[in]nopenNumber of open channels.
[in]irrIrreducible representation index.
[in]EtotTotal energy of the system.
[in]SpDerivative of the regular asymptotic solution at boundary per partial wave channel.
[in]CpDerivative of the irregular asymptotic solution at boundary per partial wave channel.
[in]kmatK-matrix
[in]tmatT-matrix defined as T = S - 1
[in]conjApply a conjugated wave-function coefficient (for photodipoles)

Definition at line 1003 of file multidip_routines.F90.

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

◆ calculate_asymmetry_parameters()

subroutine multidip_routines::calculate_asymmetry_parameters ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  order,
type(intermediatestate), intent(in), pointer  state,
real(wp), dimension(:), intent(in)  escat,
real(wp), intent(in)  calc_Ei,
real(wp), intent(in)  first_IP,
real(wp), dimension(:), intent(in)  Ephoton,
character(len=*), intent(in)  raw,
integer, dimension(2), intent(in)  erange 
)

Calculate cross sections and asymmetry parameters.

Author
J Benda
Date
2020 - 2023

Evaluate coefficients \( \beta_L \) in the expansion of differential cross section averaged over molecular orientation:

\[ \frac{\mathrm{d}\sigma}{\mathrm{d}\Omega} = \frac{\beta_0}{4\pi} \left(1+\sum_{L=1}^{2n} \beta_L P_L(\cos\theta) \right). \]

The quantity \( \beta_0 \) is equal to the integral cross section.

Parameters
[in]moldatmultidip_io::MolecularData object with data read from the file molecular_data.
[in]orderPerturbation order matrix elements (= number of absorbed photons).
[in]stateTree of intermediate and final states.
[in]escatScattering energies in a.u., as stored in the K-matrix files.
[in]calc_EiInitial state energy calculated by (MPI-)SCATCI or BOUND.
[in]first_IPIonization potential according to the input namelist.
[in]EphotonFixed photon energies in a.u. or zeros for flexible photons.
[in]rawWrite raw transition dipoles (in spherical or cartesian basis).
[in]erangeRange (subset) of energies in K-matrix files to use for calculations.

Definition at line 1679 of file multidip_routines.F90.

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

◆ calculate_photon_energies()

subroutine multidip_routines::calculate_photon_energies ( real(wp), intent(in)  first_IP,
real(wp), intent(in)  escat,
real(wp), intent(in)  etarg,
real(wp), intent(inout)  Ei,
real(wp), dimension(:), intent(in)  Ephoton,
real(wp), dimension(:), intent(inout), allocatable  omega 
)

Adjust ionization potential and calculate energy of each photon.

Author
J Benda
Date
2021

Calculate energies of all photons. The positive elements of the input array Ephoton specify fixed energies of selected photons. The remaining energy needed to reach the ionisation potential is divided among the remaining photons.

The user-specified parameter first_IP will be used to redefine the energy of the initial state before ionization.

Parameters
[in]first_IPTotal energy needed to ionize the target to the first ionic state.
[in]escatPhotoelectron kinetic energy after absorption of all photons (only needed for "floating IP").
[in]etargEnergy of the first ionic state.
[in,out]EiEnergy of the initial state before ionization; will be shifted if first_IP is non-zero.
[in]EphotonUser-specified fixed energies of photons or zeros for flexible photons.
[in,out]omegaCalculated energies of all photons.

Definition at line 1202 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ calculate_pw_transition_elements()

subroutine multidip_routines::calculate_pw_transition_elements ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  order,
type(intermediatestate), intent(in), pointer  state,
real(wp), dimension(:), intent(in)  escat,
real(wp), intent(in)  calc_Ei,
real(wp), intent(in)  first_IP,
real(wp), dimension(:), intent(in)  Ephoton,
complex(wp), dimension(:, :), intent(in)  polar,
integer, dimension(2), intent(in)  erange 
)

Calculate partial wave dipoles, oriented dipoles and cross sections.

Author
J Benda
Date
2020 - 2023

Given the uncontracted partial wave dipoles

\[ M_{i_f, l_f, m_f, j_1, \dots, j_n}^{(n)} \]

calculated in extract_dipole_elements, where \( i_f \) is the index of the final ion state, \( l_f \) and \( m_f \) denote the emission partial wave and \( j_1, \dots, j_n \) are the indices of components of the polarisation vectors, evaluate the partial wave transition matrix elements

\[ M_{i_f, l_f, m_f} = \mathrm{i}^{-l_f} \mathrm{e}^{\mathrm{i} \sigma_f} \sum_{j_1, \dots, j_n} \epsilon_{j_1} \dots \epsilon_{j_n} M_{i_f, l_f, mf_, j_1, \dots, j_n}^{(n)} \]

contracted with the polarisation vectors themselves, and the fixed-orientation generalized cross section

\[ \sigma_f^{(n)} = 2\pi (2\pi\alpha\omega)^n \sum_{l_f m_f} \left| M_{i_f, l_f, m_f} \right|^2 \]

Parameters
[in]moldatmultidip_io::MolecularData object with data read from the file molecular_data.
[in]orderPerturbation order matrix elements (= number of absorbed photons).
[in]stateTree of intermediate and final states.
[in]escatScattering energies in a.u., as stored in the K-matrix files.
[in]calc_EiInitial state energy calculated by (MPI-)SCATCI or BOUND.
[in]first_IPIonization potential according to the input namelist.
[in]EphotonFixed photon energies in a.u. or zeros for flexible photons.
[in]polarPhoton polarisations or zeros for polarisation averaging.
[in]erangeRange (subset) of energies in K-matrix files to use for calculations.

Definition at line 1532 of file multidip_routines.F90.

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

◆ calculate_quadratic_dipole_sph()

subroutine multidip_routines::calculate_quadratic_dipole_sph ( complex(wp), dimension(:, :), intent(inout), allocatable  beta,
integer, intent(in)  L,
integer, intent(in)  maxl,
integer, dimension(:, :), intent(in)  chains1,
integer, dimension(:, :), intent(in)  chains2,
integer, intent(in)  ntarg,
integer, intent(in)  nesc,
complex(wp), dimension(:, :, :, :), intent(in), allocatable  M1,
complex(wp), dimension(:, :, :, :), intent(in), allocatable  M2 
)

Evaluate asymmetry parameter for given total L in the spherical basis.

Author
J Benda
Date
2021 - 2024

Evaluate quadratic form in partial wave dipoles (e.g. asymmetry parameter beta_L) for all final states. For cross sections, the (spherical) matrix elements M1 and M2 correspond to the same energies. However, for RABITT, these are evaluated at different energies.

Definition at line 1878 of file multidip_routines.F90.

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

◆ calculate_quadratic_dipole_xyz()

subroutine multidip_routines::calculate_quadratic_dipole_xyz ( complex(wp), dimension(:, :), intent(inout), allocatable  beta,
integer, intent(in)  L,
integer, intent(in)  maxl,
integer, dimension(:, :), intent(in)  chains1,
integer, dimension(:, :), intent(in)  chains2,
integer, intent(in)  ntarg,
integer, intent(in)  nesc,
complex(wp), dimension(:, :, :, :), intent(in), allocatable  M1,
complex(wp), dimension(:, :, :, :), intent(in), allocatable  M2 
)

Evaluate asymmetry parameter for given total L in the Cartesian basis.

Author
J Benda
Date
2021 - 2023

Evaluate quadratic form in partial wave dipoles (e.g. asymmetry parameter beta_L) for all final states. For cross sections, the (Cartesian) matrix elements M1 and M2 correspond to the same energies. However, for RABITT, these are evaluated at different energies.

Note
This subroutine is implemented only for linear polarisation and only for L = 0.

Definition at line 1989 of file multidip_routines.F90.

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

◆ channel_coupling_ion()

real(wp) function multidip_routines::channel_coupling_ion ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  dcomp,
integer, intent(in)  irrf,
integer, intent(in)  irri,
integer, intent(in)  ichanf,
integer, intent(in)  ichani 
)

Ion channel dipole coupling.

Author
J Benda
Date
2020 - 2024

Returns the ion transition dipole element between the channels. This is diagonal in quantum numbers of the partial waves and simply equal to the corresponding N-electron propery integral.

Parameters
[in]moldatmultidip_io::MolecularData object with data read from molecular_data.
[in]dcompIndex of the Cartesian component of the dipole operator.
[in]irrfIrreducible representation of the final state channel.
[in]irriIrreducible representation of the initial state channel.
[in]ichanfIndex of the final state channel.
[in]ichaniIndex of the initial state channel.

Definition at line 1442 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ channel_coupling_pws()

real(wp) function multidip_routines::channel_coupling_pws ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  dcomp,
integer, intent(in)  irrf,
integer, intent(in)  irri,
integer, intent(in)  ichanf,
integer, intent(in)  ichani 
)

Partial wave channel dipole coupling.

Author
J Benda
Date
2020 - 2024

Returns the partial wave transition dipole element between the channels. This is diagonal in the ion states and proportional to the Gaunt coefficient.

Parameters
[in]moldatmultidip_io::MolecularData object with data read from molecular_data.
[in]dcompIndex of the Cartesian component of the dipole operator.
[in]irrfIrreducible representation of the final state channel.
[in]irriIrreducible representation of the initial state channel.
[in]ichanfIndex of the final state channel.
[in]ichaniIndex of the initial state channel.

Definition at line 1478 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ convert_xyz_to_sph()

subroutine multidip_routines::convert_xyz_to_sph ( complex(wp), dimension(:, :, :, :), intent(in), allocatable  M_xyz,
complex(wp), dimension(:, :, :, :), intent(inout), allocatable  M_sph,
integer, intent(in)  maxl,
integer, dimension(:, :), intent(in)  chains 
)

Change coordiantes.

Author
J Benda
Date
2021

Transform the multi-photon matrix elements from the Cartesian basis to the spherical basis. It is expected that both M_xyz and M_sph arrays are allocated and have the same size.

Definition at line 1830 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ extract_dipole_elements()

subroutine multidip_routines::extract_dipole_elements ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  order,
real(wp), dimension(:), intent(in)  Ephoton,
integer, intent(in)  icomp,
integer, intent(in)  s,
integer, intent(in)  mgvnn,
integer, intent(in)  mgvn1,
integer, intent(in)  mgvn2,
type(kmatrix), dimension(:), intent(in)  km,
type(scatakcoeffs), dimension(:), intent(in), allocatable  ak,
type(intermediatestate), intent(inout), pointer  state,
logical, intent(in)  verbose,
real(wp), intent(in)  calc_Ei,
real(wp), intent(in)  first_IP,
real(wp), intent(in)  r0,
integer, dimension(2), intent(in)  erange 
)

Calculate dipole elements from intermediate and final states.

Author
J Benda
Date
2020 - 2023

Calculates the transition dipole matrix element between the last intermediate state and the final stationary photoionization state.

Parameters
[in]moldatMolecularData object with data read from the file molecular_data.
[in]orderPerturbation order of the intermediate state to calculate.
[in]EphotonFixed photon energies in a.u. or zeros for flexible photons.
[in]icompWhich Cartesian component of the dipole operator will give rise to the intermediate state.
[in]sWhich "transition" in molecular_data corresponds to the action of this dipole component on parent.
[in]mgvnnMGVN of the previous intermediate state.
[in]mgvn1Ket MGVN for the transition "s" as stored in molecular_data.
[in]mgvn2Bra MGVN for the transition "s" as stored in molecular_data.
[in]kmKMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files.
[in]akWave function coeffs (from RSOLVE) for the same set of irrs as km.
[in,out]stateTree of intermediate states, pointing at the previous intermediate state to develop into next state.
[in]verboseDebugging output intensity.
[in]calc_EiInitial state energy calculated by (MPI-)SCATCI or BOUND.
[in]first_IPIonization potential according to the input namelist.
[in]r0Radius from which to apply asymptotic integrals.
[in]erangeRange (subset) of energies in K-matrix files to use for calculations.

Definition at line 713 of file multidip_routines.F90.

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

◆ multidip_driver()

subroutine multidip_routines::multidip_driver ( integer, intent(in)  order,
type(moleculardata), intent(in)  moldat,
type(kmatrix), dimension(:), intent(in), allocatable  km,
type(scatakcoeffs), dimension(:), intent(in), allocatable  ak,
integer, intent(in)  lubnd,
real(wp), dimension(:), intent(in)  omega,
complex(wp), dimension(:, :), intent(in)  polar,
logical, intent(in)  verbose,
real(wp), intent(in)  first_IP,
real(wp), intent(in)  r0,
character(len=*), intent(in)  raw,
integer, dimension(2), intent(in)  erange 
)

Central computation routine.

Author
J Benda
Date
2020 - 2023

This subroutine drives the calculation. First it obtains all intermediate states, then it calculates the final photoionization state, and evaluates the dipole elements and generalized cross sections. The core of the work is the evaluation of all matrix elements of the type

\[ M_{fi,k_n,\dots,k_i} = \langle \Psi_{f}^{(-)} | x_{k_n} \dots \hat{G}^{(+)} x_{k_2} \hat{G}^{(+)} x_{k_1} | \Psi_i \rangle \]

where \( x_j \) is the j-th component of the dipole operator, followed by reduction of this tensor with all provided photon field polarisations \( \epsilon_j \):

\[ M_{fi} = \sum_{k_n,\dots,k_1} \epsilon_{k_n} \dots \epsilon_{k_1} M_{fi,k_n,\dots,k_1} \]

The sequence \( k_1, k_2, \dots \) is referred to as component "history" or "chain" in the code.

Parameters
[in]orderOrder of the process (= total number of absorbed photons).
[in]moldatMolecularData object with data read from the file molecular_data.
[in]kmKMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files.
[in]akWave function coeffs (from RSOLVE) for the same set of irrs as km.
[in]lubndFile with bound state wave function coefficients.
[in]omegaFixed photon energies in a.u. or zeros for flexible photons.
[in]polarPhoton polarisation vectors or zeros for polarisation averaging.
[in]verboseDebugging output intensity.
[in]first_IPFirst ionization potential in a.u. as requested by the input namelist.
[in]r0Radius from which to apply asymptotic integrals.
[in]rawWrite raw transition dipoles in spherical (= 'sph') or Cartesian (= 'xyz') basis, or both (= 'both').
[in]erangeRange (subset) of energies in K-matrix files to use for calculations.

Definition at line 257 of file multidip_routines.F90.

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

◆ multidip_main()

subroutine multidip_routines::multidip_main

MULTIDIP main subroutine.

Authors
J Benda
Date
2020 - 2024

Read the input namelist &mdip from the standard input, call routines for reading the input file, and then call the main computational routine. Alternatively, when the "--test" switch is present on the command line, it will run a few unit tests.

Definition at line 101 of file multidip_routines.F90.

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

◆ multiint()

subroutine multidip_routines::multiint ( type(moleculardata), intent(in)  moldat,
real(wp), intent(in)  r0,
real(wp), intent(in)  Ei,
real(wp), intent(in)  esc,
real(wp), dimension(:), intent(inout), allocatable  omega,
integer, intent(in)  ie,
type(intermediatestate), intent(in), pointer  state,
integer, intent(in)  sb,
complex(wp), dimension(:), intent(inout)  dip 
)

Evaluate the correction dipole integral for all orders.

Author
J Benda
Date
2020 - 2021

If the parent intermediate state has a non-vanishing outer region part, integrate the final wave function with it and multiply by the associated expansion coefficients 'ap'. Then, iteratively, for all parent states of the parent state, add their contribution by means of the Coulomb-Green's function (multiplied by their expansion coefficients). The deeper in the absorption chain we get, the more dimensions the resulting Coulomb-Green's integral has.

Parameters
[in]moldatmultidip_io::MolecularData object with data read from molecular_data.
[in]r0Radius from which to apply asymptotic integrals.
[in]EiTotal energy of the initial state (no photons absorbed).
[in]escPhotoelectron energy in the first channel after absorption of photons at this order.
[in]omegaEnergy of all photons.
[in]ieLocal energy index.
[in]stateTree of parent intermediate states pointed to the last intermediate state.
[in]sbKind (sign) of the outer-most Coulomb-Hankel function.
[out]dipEvaluated multi-photon matrix element.

Definition at line 1250 of file multidip_routines.F90.

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

◆ multiint_chain()

recursive complex(wp) function multidip_routines::multiint_chain ( type(moleculardata), intent(in)  moldat,
real(wp), intent(in)  r0,
real(wp), intent(in)  Ei,
real(wp), intent(in)  esc,
real(wp), dimension(:), intent(inout), allocatable  omega,
integer, intent(in)  ie,
real(wp)  c,
integer, intent(in)  N,
type(intermediatestate), intent(in), pointer  state,
integer, intent(in)  ichanf,
integer, intent(in)  sb,
complex(wp), dimension(:), intent(inout), allocatable  k,
integer, dimension(:), intent(inout), allocatable  l,
integer, dimension(:), intent(inout), allocatable  m 
)

Calculate dipole correction integrals at given absorption depth.

Author
J Benda
Date
2020 - 2024

Recursively evaluates the outer region contributions multi-photon transition element contributions from all combinations of channels at all absorption levels that share the initial sequence given by k, l and m.

Parameters
[in]moldatmultidip_io::MolecularData object with data read from molecular_data.
[in]r0Radius from which to apply asymptotic integrals.
[in]EiTotal energy of the initial state.
[in]escPhotoelectron energy in the first channel after absorption of photons at this order.
[in]omegaEnergy of all photons.
[in]ieLocal energy index.
[in]cDipole exponential damping coefficient.
[in]NIndex of the dipole operator to consider on this recursion level.
[in]stateTree of parent intermediate states pointed to the last intermediate state.
[in]ichanfFinal channel after action of the dipole operator at this recursion level.
[in]sbKind (sign) of the outer-most Coulomb-Hankel function.
[in,out]kLinear momenta of the final and initial dipole transition channels for at previous recursion levels.
[in,out]lAngular momenta of the final and initial dipole transition channels for at previous recursion levels.
[in,out]mAngular projections of the final and initial dipole transition channels for at previous recursion levels.
Returns
integ Evaluated multi-photon matrix element.
Todo:
We do not need to calculate the integrals for all final-initial channel pairs as done now, because when the initial channels have the same quantum number 'm', the integrals will differ only by the coefficient 'ap'. This would reduce the run time for calculations with large partial wave expansion.

Definition at line 1345 of file multidip_routines.F90.

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

◆ print_transition_header()

subroutine multidip_routines::print_transition_header ( type(intermediatestate), intent(in), pointer  state)

Prints a one-line summary of the transition.

Authors
J Benda
Date
2023

A sample output can look like this:

    Transtion 0 -[x]-> 1 -[y]-> 3

Definition at line 901 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ reset_timer()

subroutine multidip_routines::reset_timer ( integer, intent(inout)  t,
integer, intent(out)  dt 
)

Get current time stamp.

Author
J Benda
Date
2022

Update the parameter "t" with the current system time stamp. Store into "dt" the elapsed time in seconds. If the elapsed time is longer than an integer multiple of the system clock period, only the remainder will be reported.

In parallel mode individual processes work in sync, so we have to wait for all before reading out the time.

Definition at line 1160 of file multidip_routines.F90.

Here is the caller graph for this function:

◆ setup_initial_state()

subroutine multidip_routines::setup_initial_state ( type(intermediatestate), intent(inout), pointer  states,
type(moleculardata), intent(in)  moldat,
integer, intent(in)  irr,
integer, intent(in)  lubnd,
real(wp), intent(out)  Ei 
)

Construct initial state.

Authors
J Benda
Date
2023

Construct inner and outer expansion coefficients of the initial state. When no input from BOUND is provided, this is trivial: The initial state coincides with the first inner region eigenstate in the irreducible representation given by the first K-matrix file and there is nothing in the outer region.

However, when bound state coefficients are given, they are adopted here and the wave function is correctly continued into the outer region using a single-free-electron expansion. The energy shift is not considered, though.

Todo:
Take into account modified bound state energy calculated by BOUND.

Definition at line 385 of file multidip_routines.F90.

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

◆ solve_intermediate_state()

subroutine multidip_routines::solve_intermediate_state ( type(moleculardata), intent(in)  moldat,
integer, intent(in)  order,
real(wp), dimension(:), intent(in)  Ephoton,
integer, intent(in)  icomp,
integer, intent(in)  s,
integer, intent(in)  mgvnn,
integer, intent(in)  mgvn1,
integer, intent(in)  mgvn2,
type(kmatrix), dimension(:), intent(in)  km,
type(intermediatestate), intent(inout), pointer  state,
logical, intent(in)  verbose,
real(wp), intent(in)  calc_Ei,
real(wp), intent(in)  first_IP,
real(wp), intent(in)  r0,
integer, dimension(2), intent(in)  erange 
)

Calculate intermediate photoionisation state.

Author
J Benda
Date
2020 - 2023

Solve the intermediate state equation

\[ (E_i + j \omega - \hat{H}) \Psi_j = \hat{D} \Psi_{j-1} \]

with the right-hand side based on the state provided as argument 'state'.

Parameters
[in]moldatMolecularData object with data read from the file molecular_data.
[in]orderPerturbation order of the intermediate state to calculate.
[in]EphotonFixed photon energies in a.u. or zeros for flexible photons.
[in]icompWhich Cartesian component of the dipole operator will give rise to the intermediate state.
[in]sWhich "transition" in molecular_data corresponds to the action of this dipole component on parent.
[in]mgvnnMGVN of the previous intermediate state.
[in]mgvn1Ket MGVN for the transition "s" as stored in molecular_data.
[in]mgvn2Bra MGVN for the transition "s" as stored in molecular_data.
[in]kmKMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files.
[in,out]stateTree of intermediate states, pointing at the previous intermediate state to develop into next state.
[in]verboseDebugging output intensity.
[in]calc_EiInitial state energy calculated by (MPI-)SCATCI or BOUND.
[in]first_IPIonization potential according to the input namelist.
[in]r0Radius from which to apply asymptotic integration.
[in]erangeRange (subset) of energies in K-matrix files to use for calculations.

Definition at line 499 of file multidip_routines.F90.

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

◆ test_final_expansion()

subroutine multidip_routines::test_final_expansion ( character(len=*), intent(in)  filename,
type(moleculardata), intent(in)  moldat,
integer, intent(in)  irr,
integer, intent(in)  nopen,
real(wp), intent(in)  Etot,
real(wp), dimension(:), intent(in)  Ek,
real(wp), dimension(:), intent(in)  Sp,
real(wp), dimension(:), intent(in)  Cp,
real(wp), dimension(:, :), intent(in)  kmat,
complex(wp), dimension(:, :), intent(in)  tmat 
)

Write radially sampled final wave-function to file.

Authors
J Benda
Date
2023 - 2024

Sample the final wave function in all channels at several radii and print results to the provided file. The sampling inside the inner region is fully given by the sampling points defined in the molecular_data file. In the outer region, the values are obtained at equidistant points stretching to twice the R-matrix sphere radius.

Definition at line 1078 of file multidip_routines.F90.

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

Variable Documentation

◆ test_expansion

logical, parameter multidip_routines::test_expansion = .false.

Definition at line 89 of file multidip_routines.F90.