Multidip
1.0
Multi-photon matrix elements
|
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. |
Main MULTIDIP routines.
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.
Contracts the provided wave function coefficients with the given inner region expansion.
[in] | psi | Inner region wave function expansion coefficients as two columns: real and imaginary part. |
[in] | Apsi | The result, in the same form as psi. |
[in] | ReAk | Real part of the wave function coefficients of shape (nstat, nopen). |
[in] | ImAk | Imag part of the wave function coefficients of shape (nstat, nopen). |
Definition at line 944 of file multidip_routines.F90.
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.
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*} \,. \]
[in] | psi | Inner region wave function expansion coefficients as two columns: real and imaginary part. |
[in] | Apsi | The result, in the same form as psi. |
[in] | moldat | Molecular data class. |
[in] | nopen | Number of open channels. |
[in] | irr | Irreducible representation index. |
[in] | Etot | Total energy of the system. |
[in] | Sp | Derivative of the regular asymptotic solution at boundary per partial wave channel. |
[in] | Cp | Derivative of the irregular asymptotic solution at boundary per partial wave channel. |
[in] | kmat | K-matrix |
[in] | tmat | T-matrix defined as T = S - 1 |
[in] | conj | Apply a conjugated wave-function coefficient (for photodipoles) |
Definition at line 1003 of file multidip_routines.F90.
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.
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.
[in] | moldat | multidip_io::MolecularData object with data read from the file molecular_data. |
[in] | order | Perturbation order matrix elements (= number of absorbed photons). |
[in] | state | Tree of intermediate and final states. |
[in] | escat | Scattering energies in a.u., as stored in the K-matrix files. |
[in] | calc_Ei | Initial state energy calculated by (MPI-)SCATCI or BOUND. |
[in] | first_IP | Ionization potential according to the input namelist. |
[in] | Ephoton | Fixed photon energies in a.u. or zeros for flexible photons. |
[in] | raw | Write raw transition dipoles (in spherical or cartesian basis). |
[in] | erange | Range (subset) of energies in K-matrix files to use for calculations. |
Definition at line 1679 of file multidip_routines.F90.
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.
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.
[in] | first_IP | Total energy needed to ionize the target to the first ionic state. |
[in] | escat | Photoelectron kinetic energy after absorption of all photons (only needed for "floating IP"). |
[in] | etarg | Energy of the first ionic state. |
[in,out] | Ei | Energy of the initial state before ionization; will be shifted if first_IP is non-zero. |
[in] | Ephoton | User-specified fixed energies of photons or zeros for flexible photons. |
[in,out] | omega | Calculated energies of all photons. |
Definition at line 1202 of file multidip_routines.F90.
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.
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 \]
[in] | moldat | multidip_io::MolecularData object with data read from the file molecular_data. |
[in] | order | Perturbation order matrix elements (= number of absorbed photons). |
[in] | state | Tree of intermediate and final states. |
[in] | escat | Scattering energies in a.u., as stored in the K-matrix files. |
[in] | calc_Ei | Initial state energy calculated by (MPI-)SCATCI or BOUND. |
[in] | first_IP | Ionization potential according to the input namelist. |
[in] | Ephoton | Fixed photon energies in a.u. or zeros for flexible photons. |
[in] | polar | Photon polarisations or zeros for polarisation averaging. |
[in] | erange | Range (subset) of energies in K-matrix files to use for calculations. |
Definition at line 1532 of file multidip_routines.F90.
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.
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.
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.
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.
Definition at line 1989 of file multidip_routines.F90.
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.
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.
[in] | moldat | multidip_io::MolecularData object with data read from molecular_data. |
[in] | dcomp | Index of the Cartesian component of the dipole operator. |
[in] | irrf | Irreducible representation of the final state channel. |
[in] | irri | Irreducible representation of the initial state channel. |
[in] | ichanf | Index of the final state channel. |
[in] | ichani | Index of the initial state channel. |
Definition at line 1442 of file multidip_routines.F90.
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.
Returns the partial wave transition dipole element between the channels. This is diagonal in the ion states and proportional to the Gaunt coefficient.
[in] | moldat | multidip_io::MolecularData object with data read from molecular_data. |
[in] | dcomp | Index of the Cartesian component of the dipole operator. |
[in] | irrf | Irreducible representation of the final state channel. |
[in] | irri | Irreducible representation of the initial state channel. |
[in] | ichanf | Index of the final state channel. |
[in] | ichani | Index of the initial state channel. |
Definition at line 1478 of file multidip_routines.F90.
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.
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.
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.
Calculates the transition dipole matrix element between the last intermediate state and the final stationary photoionization state.
[in] | moldat | MolecularData object with data read from the file molecular_data. |
[in] | order | Perturbation order of the intermediate state to calculate. |
[in] | Ephoton | Fixed photon energies in a.u. or zeros for flexible photons. |
[in] | icomp | Which Cartesian component of the dipole operator will give rise to the intermediate state. |
[in] | s | Which "transition" in molecular_data corresponds to the action of this dipole component on parent. |
[in] | mgvnn | MGVN of the previous intermediate state. |
[in] | mgvn1 | Ket MGVN for the transition "s" as stored in molecular_data. |
[in] | mgvn2 | Bra MGVN for the transition "s" as stored in molecular_data. |
[in] | km | KMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files. |
[in] | ak | Wave function coeffs (from RSOLVE) for the same set of irrs as km. |
[in,out] | state | Tree of intermediate states, pointing at the previous intermediate state to develop into next state. |
[in] | verbose | Debugging output intensity. |
[in] | calc_Ei | Initial state energy calculated by (MPI-)SCATCI or BOUND. |
[in] | first_IP | Ionization potential according to the input namelist. |
[in] | r0 | Radius from which to apply asymptotic integrals. |
[in] | erange | Range (subset) of energies in K-matrix files to use for calculations. |
Definition at line 713 of file multidip_routines.F90.
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.
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.
[in] | order | Order of the process (= total number of absorbed photons). |
[in] | moldat | MolecularData object with data read from the file molecular_data. |
[in] | km | KMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files. |
[in] | ak | Wave function coeffs (from RSOLVE) for the same set of irrs as km. |
[in] | lubnd | File with bound state wave function coefficients. |
[in] | omega | Fixed photon energies in a.u. or zeros for flexible photons. |
[in] | polar | Photon polarisation vectors or zeros for polarisation averaging. |
[in] | verbose | Debugging output intensity. |
[in] | first_IP | First ionization potential in a.u. as requested by the input namelist. |
[in] | r0 | Radius from which to apply asymptotic integrals. |
[in] | raw | Write raw transition dipoles in spherical (= 'sph') or Cartesian (= 'xyz') basis, or both (= 'both'). |
[in] | erange | Range (subset) of energies in K-matrix files to use for calculations. |
Definition at line 257 of file multidip_routines.F90.
subroutine multidip_routines::multidip_main |
MULTIDIP main subroutine.
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.
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.
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.
[in] | moldat | multidip_io::MolecularData object with data read from molecular_data. |
[in] | r0 | Radius from which to apply asymptotic integrals. |
[in] | Ei | Total energy of the initial state (no photons absorbed). |
[in] | esc | Photoelectron energy in the first channel after absorption of photons at this order. |
[in] | omega | Energy of all photons. |
[in] | ie | Local energy index. |
[in] | state | Tree of parent intermediate states pointed to the last intermediate state. |
[in] | sb | Kind (sign) of the outer-most Coulomb-Hankel function. |
[out] | dip | Evaluated multi-photon matrix element. |
Definition at line 1250 of file multidip_routines.F90.
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.
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.
[in] | moldat | multidip_io::MolecularData object with data read from molecular_data. |
[in] | r0 | Radius from which to apply asymptotic integrals. |
[in] | Ei | Total energy of the initial state. |
[in] | esc | Photoelectron energy in the first channel after absorption of photons at this order. |
[in] | omega | Energy of all photons. |
[in] | ie | Local energy index. |
[in] | c | Dipole exponential damping coefficient. |
[in] | N | Index of the dipole operator to consider on this recursion level. |
[in] | state | Tree of parent intermediate states pointed to the last intermediate state. |
[in] | ichanf | Final channel after action of the dipole operator at this recursion level. |
[in] | sb | Kind (sign) of the outer-most Coulomb-Hankel function. |
[in,out] | k | Linear momenta of the final and initial dipole transition channels for at previous recursion levels. |
[in,out] | l | Angular momenta of the final and initial dipole transition channels for at previous recursion levels. |
[in,out] | m | Angular projections of the final and initial dipole transition channels for at previous recursion levels. |
Definition at line 1345 of file multidip_routines.F90.
subroutine multidip_routines::print_transition_header | ( | type(intermediatestate), intent(in), pointer | state | ) |
Prints a one-line summary of the transition.
A sample output can look like this:
Transtion 0 -[x]-> 1 -[y]-> 3
Definition at line 901 of file multidip_routines.F90.
subroutine multidip_routines::reset_timer | ( | integer, intent(inout) | t, |
integer, intent(out) | dt | ||
) |
Get current time stamp.
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.
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.
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.
Definition at line 385 of file multidip_routines.F90.
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.
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'.
[in] | moldat | MolecularData object with data read from the file molecular_data. |
[in] | order | Perturbation order of the intermediate state to calculate. |
[in] | Ephoton | Fixed photon energies in a.u. or zeros for flexible photons. |
[in] | icomp | Which Cartesian component of the dipole operator will give rise to the intermediate state. |
[in] | s | Which "transition" in molecular_data corresponds to the action of this dipole component on parent. |
[in] | mgvnn | MGVN of the previous intermediate state. |
[in] | mgvn1 | Ket MGVN for the transition "s" as stored in molecular_data. |
[in] | mgvn2 | Bra MGVN for the transition "s" as stored in molecular_data. |
[in] | km | KMatrix objects for relevant irreducible representations with data read from RSOLVE K-matrix files. |
[in,out] | state | Tree of intermediate states, pointing at the previous intermediate state to develop into next state. |
[in] | verbose | Debugging output intensity. |
[in] | calc_Ei | Initial state energy calculated by (MPI-)SCATCI or BOUND. |
[in] | first_IP | Ionization potential according to the input namelist. |
[in] | r0 | Radius from which to apply asymptotic integration. |
[in] | erange | Range (subset) of energies in K-matrix files to use for calculations. |
Definition at line 499 of file multidip_routines.F90.
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.
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.
logical, parameter multidip_routines::test_expansion = .false. |
Definition at line 89 of file multidip_routines.F90.