Multidip  1.0
Multi-photon matrix elements
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. More...
 
subroutine print_help
 Print program usage information. More...
 
subroutine rabitt_main
 Main program. More...
 
logical function process_command_line (ord1, ord2, sph, maxlab, polar, polarIR, theta, phi, XUV_plus_IR_filenames, XUV_minus_IR_filenames)
 Read options from the command line. More...
 
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. More...
 
subroutine setup_chains (order, nchain, chains)
 Assemble absorption chains. More...
 
subroutine parse_file_name (filename, order, sph, ichain, i, l, m)
 Extract quantum numbers from raw multipole file name. More...
 
subroutine read_file_data (filename, n, buffer)
 Read raw multipole from file. More...
 
subroutine write_quadratic_dipoles (L, MM, prefix, stem)
 Write results to file. More...
 
subroutine calculate_oriented_dipoles (maxl, chains1, chains2, ntarg, nesc, Mp, Mm, axis, axisIR, theta, phi)
 Molecular- and recoil-frame RABITT delays. More...
 
subroutine write_to_file (stem, Q)
 Write the interference term to file. More...
 

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 
)

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 762 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:173
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 
)

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 572 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,
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,
type(string), dimension(:), intent(inout), allocatable  XUV_plus_IR_filenames,
type(string), dimension(:), intent(inout), allocatable  XUV_minus_IR_filenames 
)

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]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]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

Definition at line 243 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

Main program.

Author
J Benda
Date
2021 - 2024

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

Definition at line 124 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 
)

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 646 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 
)

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 424 of file multidip_rabitt_delays.F90.

Here is the call graph for this function:
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 
)

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:

\verbose 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 \endverbose

Definition at line 527 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)  stem 
)

Write results to file.

Author
J Benda
Date
2021

Definition at line 703 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 
)

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 909 of file multidip_rabitt_delays.F90.

Here is the caller graph for this function: