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 aneTraj.TrajectorySimulationJob
, which stores the essential parameters. The electron sampler is assigned according toinit_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, ifsample_monte_carlo
istrue
, the $\tr$ of the electron batches and the $\kkt$ in each batch would be randomly sampled inside the given intervals specified bysample_t_intv
,mc_kd_max
andmc_kz_max
,
sample_t_intv
,ss_kd_max
andss_kz_max
. - The sampling behavior is controlled by the
- 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 theOrdinaryDiffEq.jl
package in theDifferentialEquations.jl
ecosystem.- The grid's size and spacing depends on the
final_p_max
andfinal_p_num
parameters.
- The grid's size and spacing depends on the
- 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_simulation
— FunctionPerforms 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 typeSAEAtomBase
orMoleculeBase
;:WFAT
forMoleculeBase
targets.
- Candidates:
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
.
- Format:
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
.
- Unit: numerically in a.u. or pass as a
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])
- Format:
final_p_num
: Numbers of final momentum grid points. If a value is1
, electrons will be collected regardless of the momentum on that dimension.- Format:
(pxNum,pyNum[,pzNum])
- Format:
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
.
- Candidates:
traj_rtol
: Relative error tolerance for solving classical trajectories (default1e-6
).output_fmt
: Output file format.- Candidates:
:jld2
(JLD2, default) and:h5
(HDF5).
- Candidates:
output_compress
: Determines whether output files are compressed or not (defaulttrue
).- Note: For JLD2 output format, compression requires explicit installation of the
CodecZlib
package.
- Note: For JLD2 output format, compression requires explicit installation of the
output_path
: Path to output file.sample_cutoff_limit
: Probability cutoff limit for sampled electrons (default1e-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 (defaultfalse
).
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 toSet([:PreCC,:Jac])
. To combine:Pre
and:Jac
, passSet([: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
.
- For open-shell molecules, according to α/β spins, should be passed in format
Optional parameter for interface:
show_progress
: Whether to display progress bar (defaulttrue
).