Manual: Electron Sampling and Trajectory Simulation

The ElectronSamplers module provides means of generating initial electron samples using different initial condition methods. The ElectronSampler is an abstract supertype, with ADKSampler, SPANESampler, SPASampler and WFATSampler being its subtypes. When the user starts a trajectory simulation job by invoking eTraj.perform_traj_simulation, the method would further call the init_sampler method, which would assign the corresponding type of ElectronSampler in the background. These invocations execute in the background thus the ElectronSamplers module is kept internal (i.e., not exported for public invocation).

The eTraj.perform_traj_simulation method serves as a public entrance to performing a trajectory simulation. The method would automatically detect number of available threads (specified by passing command-line arguments -t <thread_num> when starting julia) and run the trajectory simulation in parallel.

Here we brief on the working procedure of the method eTraj.perform_traj_simulation:

  • First, the eTraj.perform_traj_simulation method initializes an eTraj.TrajectorySimulationJob, which stores the essential parameters. The electron sampler is assigned according to init_cond_method.
  • Then, it repeatedly invokes the eTraj.launch_and_collect! method, where in each invocation a batch of electrons which tunnel at the same time $\tr$ but have different transversal momenta $\kkt$ is launched and collected using the corresponding simulation scheme.
    • The sampling behavior is controlled by the sample_monte_carlo parameter, if sample_monte_carlo is true, the $\tr$ of the electron batches and the $\kkt$ in each batch would be randomly sampled inside the given intervals specified by sample_t_intv, mc_kd_max and mc_kz_max,
    otherwise, the initial conditions of the electrons would be sampled in an equidistant manner, with the intervals controlled by sample_t_intv, ss_kd_max and ss_kz_max.
  • After generating a batch of initial electrons, the eTraj.launch_and_collect! method simulates the electrons' classical trajectories (together with the phase), and then collects the electrons' final momenta on the grid. Trajectory simulations are carried out using the OrdinaryDiffEq.jl package in the DifferentialEquations.jl ecosystem.
    • The grid's size and spacing depends on the final_p_max and final_p_num parameters.
  • Finally, the eTraj.perform_traj_simulation method generates the output file which contains the photoelectron momentum distribution (PMD) and other necessary information in a Julia Data Format (JLD2) file or an HDF5 file.

The output file is a Julia JLD2 file, which is compatible with the HDF5 data format, and can be opened by the JLD2.jl package:

julia> using JLD2

julia> file = jldopen("ADK-CTMC_4e14_800nm_cos4_2cyc_CP.jld2")
JLDFile .../ADK-CTMC_4e14_800nm_cos4_2cyc_CP.jld2 (read-only)
    ├─ info
    ├─ params_text              # parameters stored in YAML format
    ├─ params                   # parameters stored in a Julia `Dict`
    ├─ px                       # coordinates of the `momentum_spec` on x-axis
    ├─ py                       # coordinates of the `momentum_spec` on y-axis
    ├─ momentum_spec            # PMD data stored in a Julia `Array`
    ├─ ion_prob                 # total ionization probability
    ├─ ion_prob_uncollected     # ionization probability of discarded electrons
    └─ num_effective_traj       # total number of effective trajectories

julia> file["params_text"] |> print  # equivalent to print(file["params_text"])
init_cond_method: ADK
laser:
    type: Cos4Laser
    peak_int: 4.0e14
    wave_len: 800.0
    ⋮
target:
    type: HydrogenLikeAtom
    Ip: 0.5
    nucl_charge: 1
    ⋮
sample_t_intv: (-100, 100)
sample_t_num: 20000
sample_monte_carlo: false
⋮

The detailed documentation of the eTraj.perform_traj_simulation is shown below:

eTraj.perform_traj_simulationFunction

Performs a semiclassical trajectory simulation with given parameters.

Parameters

Required parameters:

  • init_cond_method : Method used to determine the initial conditions of electrons.
    • Candidates: :ADK, :SPA (SFA-SPA), :SPANE (SFA-SPANE) for targets of type SAEAtomBase or MoleculeBase; :WFAT for MoleculeBase targets.
  • laser::Laser : Parameters of the laser field. See the Lasers module for details.
  • target::Target : Parameters of the target. See the Targets module for details.
  • dimension = 2|3 : Dimensionality of simulation.
    • 2D simulation is carried out in the xy plane.
  • sample_t_intv : Time interval for sampling initial electrons.
    • Format: (start,stop)
    • Unit: pass numerically in a.u. or pass as a Unitful.Quantity.
  • sample_t_num : Number of time samples.
  • traj_t_final : Final time of each trajectory simulation
    • Unit: numerically in a.u. or pass as a Unitful.Quantity.
  • final_p_max : Boundaries of final momentum grid. Grid ranges from -pxMax to +pxMax in the x direction, and the same for y and z directions.
    • Format: (pxMax,pyMax[,pzMax])
  • final_p_num : Numbers of final momentum grid points. If a value is 1, electrons will be collected regardless of the momentum on that dimension.
    • Format: (pxNum,pyNum[,pzNum])

Required parameters for step-sampling methods:

  • ss_kd_max : Boundary of k⟂ samples (in a.u.). k⟂ ranges from -ss_kd_max to +ss_kd_max.
  • ss_kd_num : Number of k⟂ samples (in a.u.).
  • ss_kz_max : [3D only] Boundary of kz samples (in a.u.). kz ranges from -ss_kz_max to +ss_kz_max.
  • ss_kz_num : [3D only] Number of kz samples (in a.u.).

Required parameters for Monte-Carlo sampling methods:

  • mc_kt_num : Number of kt samples in a single time sample.
  • mc_kd_max : Boundary of kd. kd ranges from -mc_kd_max to +mc_kd_max.
  • mc_kz_max : [3D only] Boundary of kz. kz ranges from -mc_kz_max to +mc_kz_max.

Optional parameters:

  • traj_phase_method : Method used to determine classical trajectories' phase.
    • Candidates: :CTMC (default), :QTMC, and :SCTS.
  • traj_rtol : Relative error tolerance for solving classical trajectories (default 1e-6).
  • output_fmt : Output file format.
    • Candidates: :jld2 (JLD2, default) and :h5 (HDF5).
  • output_compress : Determines whether output files are compressed or not (default true).
    • Note: For JLD2 output format, compression requires explicit installation of the CodecZlib package.
  • output_path : Path to output file.
  • sample_cutoff_limit : Probability cutoff limit for sampled electrons (default 1e-16). Electrons with probabilities lower than the limit would be discarded.
  • sample_monte_carlo : Determines whether Monte-Carlo sampling is used when generating electron samples (default false).

Optional parameter for atomic SFA-SPA, SFA-SPANE and ADK methods:

  • rate_prefix : Prefix of the exponential term in the ionization rate (default :Full).
    • :Exp indicates no prefix; :Pre and :PreCC indicates inclusion of the prefactor with/without Coulomb correction; :Jac indicates inclusion of the Jacobian factor which is related to the sampling method; :Full is equivalent to Set([:PreCC,:Jac]). To combine :Pre and :Jac, pass Set([:Pre,:Jac]).

Optional parameter for target MoleculeBase:

  • mol_orbit_ridx : Index of selected orbital relative to the HOMO (e.g., 0 indicates HOMO, and -1 indicates HOMO-1.)
    • For open-shell molecules, according to α/β spins, should be passed in format (spin, idx) where for α orbitals spin=1 and for β orbitals spin=2.

Optional parameter for interface:

  • show_progress : Whether to display progress bar (default true).
source