Multidip 1.0
Multi-photon matrix elements
Loading...
Searching...
No Matches
multidip_rabitt_delays.F90 File Reference

Go to the source code of this file.

Data Types

type  string

Functions/Subroutines

program multidip_rabitt_delays
 Calculate RABITT delays from raw multipole elements.
subroutine print_help
 Print program usage information.
subroutine rabitt_main
 Main program.
logical function process_command_line (ord1, ord2, ext1, ext2, sph, maxlab, polar, polarir, theta, phi, ek1, ek2, wir, properties, xuv_plus_ir_filenames, xuv_minus_ir_filenames, xuv_plus_ir_outdir, xuv_minus_ir_outdir)
 Read options from the command line.
subroutine read_raw_multipoles (order1, order2, sph, ntarg, maxl, nesc, target_states, chains1, chains2, xuv_plus_ir_filenames, xuv_minus_ir_filenames, m_xuv_plus_ir, m_xuv_minus_ir)
 Read multipoles from disk.
subroutine setup_chains (order, nchain, chains)
 Assemble absorption chains.
subroutine parse_file_name (filename, order, sph, ichain, i, l, m)
 Extract quantum numbers from raw multipole file name.
subroutine read_file_data (filename, n, buffer)
 Read raw multipole from file.
subroutine extend_order (ord, mm, chains, ext, ek, wir, target_states, echl, prop, maxl, outdir)
 Calculate multi-photon matrix elements by asymptotic approximation.
subroutine write_quadratic_dipoles (l, mm, prefix, suffix)
 Write results to file.
subroutine calculate_oriented_dipoles (maxl, chains1, chains2, ntarg, nesc, mp, mm, axis, axisir, theta, phi)
 Molecular- and recoil-frame RABITT delays.
subroutine read_real_array (filename, array)
 Read a column from the text file.
subroutine write_to_file (stem, q)
 Write the interference term to file.

Function/Subroutine Documentation

◆ calculate_oriented_dipoles()

subroutine multidip_rabitt_delays::calculate_oriented_dipoles ( integer, intent(in) maxl,
integer, dimension(:, :), intent(in), allocatable chains1,
integer, dimension(:, :), intent(in), allocatable chains2,
integer, intent(in) ntarg,
integer, intent(in) nesc,
complex(real64), dimension(:, :, :, :), intent(in), allocatable mp,
complex(real64), dimension(:, :, :, :), intent(in), allocatable mm,
real(real64), dimension(3), intent(in) axis,
real(real64), dimension(3), intent(in) axisir,
real(real64), dimension(:), intent(in), allocatable theta,
real(real64), dimension(:), intent(in), allocatable phi )
private

Molecular- and recoil-frame RABITT delays.

Author
J Benda
Date
2022 - 2024

Calculate the interference term of the photoelectron ionization probability for the following configurations:

  1. If the polarization axis in the molecular frame is given, evalutes the distribution for all emission directions provided by the arguments theta and phi (for molecular-frame observables). These are written to files "rabitt-signal-mol-?.txt", one file per a given angle, one line per energy.
  2. If the polarization axis in the molecular frame is given, evalutes the emission angle-integrated RABITT interference term. The emission angle input from the command line is not used. The results are written to file "rabitt-signal-int-1.txt".
  3. If the polarization axis in the molecular frame is given, evaluates the distribution integrated around the axis, for values of the polar angle theta. The values of phi are ignored. This is useful when partially resolved recoil frame, where the recoil axis coincides with the main quantization axis (z). The outputs are written to files "rabitt-signal-axs-?.txt", one file per a given angle, one line per energy.
  4. Finally, regardless of the specification of the polarization axis, evaluate the quantity integrated over all possible linear polarization as well as over all azimuthal emission angles. This is useful for recoil-frame quantities. The outputs are written to files "rabitt-signal-rec-?.txt", one file per a given angle, one line per energy.

Colinear polarization of XUV and IR fields is assumed.

Parameters
[in]maxlHighest angular momentum
[in]chains1List of available absorption paths for first (conjugated) pathway
[in]chains2List of available absorption paths for second (non-conugated) pathway
[in]ntargNumber of targets to consider
[in]nescNumber of scattering energies
[in]MpRaw ionization matrix elements for the XUV+IR pathway (Cartesian basis)
[in]MmRaw ionization matrix elements for the XUV-IR pathway (Cartesian basis)
[in]axisUnit vector in direction of the XUV polarization
[in]axisIRUnit vector in direction of the IR polarization
[in]thetaList of photoelectron emission polar angles (in degrees)
[in]phiList of photoelectron emission azimuthal angles (in degrees)

Definition at line 1005 of file multidip_rabitt_delays.F90.

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

◆ extend_order()

subroutine multidip_rabitt_delays::extend_order ( integer, intent(in) ord,
complex(real64), dimension(:, :, :, :), intent(inout), allocatable mm,
integer, dimension(:, :), intent(inout), allocatable chains,
integer, intent(in) ext,
real(real64), dimension(:), intent(in), allocatable ek,
real(real64), intent(in) wir,
integer, dimension(:), intent(in) target_states,
real(real64), dimension(:), intent(in), allocatable echl,
real(real64), dimension(:, :, :), intent(in), allocatable prop,
integer, intent(in) maxl,
type(string), intent(in) outdir )
private

Calculate multi-photon matrix elements by asymptotic approximation.

Authors
J Benda
Date
2024

Use the provided matrix elements of order ord to calculate matrix elements of order ord+ext. The results are returned in the same (reallocated) array. If outdir is given, write out the resulting matrix elements to that directory.

Definition at line 809 of file multidip_rabitt_delays.F90.

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

◆ multidip_rabitt_delays()

program multidip_rabitt_delays

Calculate RABITT delays from raw multipole elements.

Author
J Benda
Date
2021 - 2024

Having (spherical or Cartesian) raw multipole elements calculated by MULTIDIP for the two different absorption/emission pathways, evaluate the corresponding discrete time delays, unresolved (i.e. averaged) in emission direction as well as in molecular orientation. The raw multipole elements filenames are provided on the command line and they are expected to bear either the original file name assigned by MULTIDIP or additional stem suffixes, for instance "-smooth" as added by the utility program multidip_smooth_rawdips. Example usage:

--two-photon \
--xuv-plus-ir <(ls multidip.2.avg.xuv+ir.r100/rawdip-[xyz]*-*) \
--xuv-minus-ir <(ls multidip.2.avg.xuv-ir.r100/rawdip-[xyz]*-*)
program multidip
Definition multidip.f90:204
program multidip_rabitt_delays
Calculate RABITT delays from raw multipole elements.

See the program help for details. Note that the program can be used to calculate one-photon delays, too. For this to work, one needs to produce two sets of the one-photon raw transition dipoles that are offset in energies by 2*omega_IR. These two sets are then used with --xuv-plus-ir and --xuv-minus-ir (with smaller and larger energies, respectively). The results are then for energies in between.

When the parameters --polar, --theta and --phi are specified, molecular frame delays will be calculated as well. The parameter --polar specifies the direction of the polarization axis the polar and azimuthal angle in degrees. The parameters --theta and --phi specify the emission directions in the molecular frame; arbitrary number of angles in degrees can be given. If one of these is omitted, it is assumed to be zero. If the two arrays of angles have unequal lengths, the shorter one is cycled over as long as necessary. When --theta and/or --phi are given, the program will produce filws with the RABITT interference term called "rabitt-signal-mol-?.txt", where "?" is the index of the emission direction. Then there weill be two more sets of results:

  • "rabitt-signal-axs-?.txt" - integrated over orientations of the polarization, preserving the polar angle of the polarization vector
  • "rabitt-signal-rec-?.txt" - integrated over orientations of the polarizatoin (both angles) These two semi-averaged results also include integration over azimuthal emission angle. Molecular frame output is only computed with Cartesian angular basis.

Definition at line 57 of file multidip_rabitt_delays.F90.

◆ parse_file_name()

subroutine multidip_rabitt_delays::parse_file_name ( character(len=*), intent(in) filename,
integer, intent(in) order,
logical, intent(in) sph,
integer, intent(out) ichain,
integer, intent(out) i,
integer, intent(out) l,
integer, intent(out) m )
private

Extract quantum numbers from raw multipole file name.

Author
J Benda
Date
2021

Expect the multipole to be named "XXX-ab-(u,v,w)YYY.txt" and extract the characters 'a' and 'b' as well as the numbers 'u', 'v' and 'w'.

Definition at line 674 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ print_help()

subroutine multidip_rabitt_delays::print_help

Print program usage information.

Author
J Benda
Date
2021 - 2024

Definition at line 78 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ process_command_line()

logical function multidip_rabitt_delays::process_command_line ( integer, intent(out) ord1,
integer, intent(out) ord2,
integer, intent(out) ext1,
integer, intent(out) ext2,
logical, intent(out) sph,
integer, intent(out) maxlab,
real(real64), dimension(2), intent(out) polar,
real(real64), dimension(2), intent(out) polarir,
real(real64), dimension(:), intent(inout), allocatable theta,
real(real64), dimension(:), intent(inout), allocatable phi,
real(real64), dimension(:), intent(inout), allocatable ek1,
real(real64), dimension(:), intent(inout), allocatable ek2,
real(real64), intent(out) wir,
type(string), intent(inout) properties,
type(string), dimension(:), intent(inout), allocatable xuv_plus_ir_filenames,
type(string), dimension(:), intent(inout), allocatable xuv_minus_ir_filenames,
type(string), intent(inout) xuv_plus_ir_outdir,
type(string), intent(inout) xuv_minus_ir_outdir )
private

Read options from the command line.

Author
J Benda
Date
2022 - 2024

Obtain command line options, in particular the list of transition multipole files written by MULTIDIP.

Parameters
[out]ord1Photon absorption order for conjugated pathway
[out]ord2Photon absorption order for non-conjugated pathway
[out]ext1Requested asymptotic extension of the absorption order in conjugated pathway
[out]ext2Requested asymptotic extension of the absorption order in non-conjugated pathway
[out]sphWhether the spherical basis is used
[out]maxlabHighest angular momentum to consider in the laboratory frame
[out]polarPolarization vector of the XUV field in the molecular frame
[out]polarIRPolarization vector of the IR field in the molecular frame
[in,out]thetaList of polar emission angles
[in,out]phiList of azimuthal emission angles
[in,out]Ek1List of photoelectron kinetic energies on input (needed for extension to higher orders)
[in,out]Ek2List of photoelectron kinetic energies on input (needed for extension to higher orders)
[in,out]propertiesTarget properties file path
[out]wIREnergy of the IR quantum (needed for extension to higher orders)
[in,out]XUV_plus_IR_filenamesList of files with transition multipoles for XUV+IR pathway
[in,out]XUV_minus_IR_filenamesList of files with transition multipoles for XUV-IR pathway
[in,out]XUV_plus_IR_outdirOutput directory for extended XUV+IR amplitudes
[in,out]XUV_minus_IR_outdirOutput directory for extended XUV-IR amplitudes

Definition at line 300 of file multidip_rabitt_delays.F90.

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

◆ rabitt_main()

subroutine multidip_rabitt_delays::rabitt_main
private

Main program.

Author
J Benda
Date
2021 - 2024

Read the intermediate data from disk and produces the (orientation averaged) delays.

Definition at line 135 of file multidip_rabitt_delays.F90.

Here is the call graph for this function:

◆ read_file_data()

subroutine multidip_rabitt_delays::read_file_data ( character(len=*), intent(in) filename,
integer, intent(out) n,
complex(real64), dimension(:), intent(inout), optional, allocatable buffer )
private

Read raw multipole from file.

Author
J Benda
Date
2021

Read real and imaginary part of the raw multipole for all energies from the given file. The number of read elements is returned via the parameter "n", the values themselves via "buffer". If "buffer" is not allocated or is too short, it will be reallocated by this subroutine.

Definition at line 748 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ read_raw_multipoles()

subroutine multidip_rabitt_delays::read_raw_multipoles ( integer, intent(in) order1,
integer, intent(in) order2,
logical, intent(in) sph,
integer, intent(out) ntarg,
integer, intent(out) maxl,
integer, intent(out) nesc,
integer, dimension(:), intent(inout), allocatable target_states,
integer, dimension(:, :), intent(inout), allocatable chains1,
integer, dimension(:, :), intent(inout), allocatable chains2,
type(string), dimension(:), intent(in), allocatable xuv_plus_ir_filenames,
type(string), dimension(:), intent(in), allocatable xuv_minus_ir_filenames,
complex(real64), dimension(:, :, :, :), intent(inout), allocatable m_xuv_plus_ir,
complex(real64), dimension(:, :, :, :), intent(inout), allocatable m_xuv_minus_ir )
private

Read multipoles from disk.

Author
J Benda
Date
2021 - 2022

Read all raw multipole files specified on the command line and store the data in M_XUV_plus_IR and M_XUV_minus_IR.

Definition at line 526 of file multidip_rabitt_delays.F90.

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

◆ read_real_array()

subroutine multidip_rabitt_delays::read_real_array ( character(len=*), intent(in) filename,
real(real64), dimension(:), intent(inout), allocatable array )
private

Read a column from the text file.

Authors
J Benda
Date
2024

Definition at line 1146 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ setup_chains()

subroutine multidip_rabitt_delays::setup_chains ( integer, intent(in) order,
integer, intent(out) nchain,
integer, dimension(:, :), intent(inout), allocatable chains )
private

Assemble absorption chains.

Author
J Benda
Date
2021 - 2023

Construct database of all possible dipole component absorption chains. This is a two-dimensional array, where the second index numbers the individual pathway, while the first index numbers the absorbed photons. Polarizations of the photons are denoted by labels -1, 0, +1. The pathways are organized in lexicographical order. For example, the two-photon pathways look like this:

   !>    1:  -1, -1
   !>    2:  -1,  0
   !>    3:  -1, +1
   !>    4:   0, -1
   !>    5:   0,  0
   !>    6:   0, +1
   !>    7:  +1, -1
   !>    8:  +1,  0
   !>    9:  +1, +1
   !> 

Definition at line 629 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ write_quadratic_dipoles()

subroutine multidip_rabitt_delays::write_quadratic_dipoles ( integer, intent(in) l,
complex(real64), dimension(:, :), intent(in), allocatable mm,
character(len=*), intent(in) prefix,
character(len=*), intent(in) suffix )
private

Write results to file.

Author
J Benda
Date
2021 - 2024

Definition at line 947 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function:

◆ write_to_file()

subroutine multidip_rabitt_delays::write_to_file ( character(len=*), intent(in) stem,
complex(real64), dimension(:, :), intent(in), allocatable q )
private

Write the interference term to file.

Author
J Benda
Date
2022

Produce one text file per angular combination. Write the real and imaginary part of the interference term, one line per scattering energy.

Parameters
[in]stemInitial string to be used in the name of the file to write
[in]QInterference terms (number of energies times number fo angles)

Definition at line 1188 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function: