Inputs to qdsim

A simulation depends upon the specification of the system. This is done in the system TOML file, which specifies three different things:

  • the units in use
  • the Hamiltonian for the problem being simulated:
    • the description of the system
    • the description of the bath or environment

Along with this system TOML file, a simulation TOML file also needs to be prepared that provides the details of the simulation.

System File

Each of the three sections in the system file has a dedicated function for parsing the data. Before giving a full example of a system input file, we discuss the parameters accepted by the various sections.

Specifying the Units

QuantumDynamicsCLI.ParseInput.parse_unitFunction
parse_unit(input_dict)

Parses the [units] section of the system TOML file. It takes two variables:

Parameters obtained:

  • energy_unit_name [Default: ha]: Specifies the energy units. Typically eV, meV, cm^-1, or ha.
  • time_unit_name [Default: au]: Specifies the time units. Typically fs, or au.
source

Specifying the Hamiltonian

The basic problem under study has a general form, $\hat{H} = \hat{H}_0 + \hat{H}_\text{env}$, where $\hat{H}_0$ forms the system Hamiltonian and the $\hat{H}_\text{env}$ is the environment or bath Hamiltonian.

System Hamiltonian

QuantumDynamicsCLI.ParseInput.parse_systemFunction
parse_system(sys_inp, unit)

Parses the [system] portion of the system file for the Hamiltonian and converts it to atomic units for internal use.

Parameters obtained:

  • type [Default: real, Optionally: complex]: the type of elements in the Hamiltonian.
  • Htype [Default: file]: How to parse the Hamiltonian file. Typically file to read a file, nearest_neighbor to specify the Hamiltonian as a nearest-neighbor tight-binding model, or nearest_neighbor_cavity for a Hamiltonian consisting of a nearest-neighbor tight-binding part and a cavity with interacts with all the sites.

Then the Hamiltonian needs to be specified in the energy units that are being used. This can be done in several ways depending on the value of Htype:

  • if Htype = file, put in the variable, Hamiltonian with the name of a file containing the elements of the Hamiltonian matrix.
  • if Htype = "nearest_neighbor", specify the following variables:
    • site_energy: the energy of each site
    • coupling: the intersite coupling element
    • num_sites: the number of sites
  • if Htype = "nearest_neighbor_cavity", in addition to the same variables as the Htype = "nearest_neighbor" case, also specify:
    • cavity_energy: the energy of the cavity mode
    • cavity_coupling: coupling of the cavity to the monomers

The parameter is_QuAPI [Default: true] specifies if the specified system Hamiltonian should be interpreted to be a part of the QuAPI system-bath Hamiltonian form or not.

If external time-dependent fields have to be incorporated, the subsection [external_field] should be used. By default no external fields are involved. If used, the subsection would have two variables:

  • coupling_op: the operator through which the external time-dependent field interacts with the system
  • V_t: this is a single line expression which evaluates to the value of the field as a function of time, t. This variable needs to be called t.
source

Bath Hamiltonian

QuantumDynamicsCLI.ParseInput.parse_bathFunction
parse_bath(baths, sys, unit)

This function parses the bath(s) interacting with the system. Currently only harmonic baths are supported.

Parameters:

  • The temperature for the simulation needs to be specfied. This can be done in one of two ways:
    • beta in units of 1/ha for the inverse temperature $\beta = \frac{1}{k_BT}$.
    • or temperature in the units of Kelvin.
  • A list of baths that interact with the system specified under [[baths.bath]] heading in the TOML file. Each bath is parsed by QuantumDynamicsCLI.ParseInput.get_bath.
source
QuantumDynamicsCLI.ParseInput.get_bathFunction
get_bath(b, unit)

Parse individual baths

Parameters:

  • type [Default: ohmic]: Type of harmonic bath. Can be ohmic, drude_lorentz, tabular, tabular_jw_over_w, huang_rhys

The parameters for the bath are specified in different ways for each different bath:

  • if type="ohmic", the bath spectral density $J(\omega)=\frac{2\pi}{\Delta s^2}\hbar\xi\omega_c\exp\left(-\frac{\omega}{\omega_c}\right)$
    • xi: dimensionless Kondo parameter ($\xi$)
    • omegac: cutoff frequency ($\omega_c$) in energy units
    • Ds [Default: 2]: $\Delta s$ value. Typically set to 1 for exciton transfer problems.
    • npoints [Default: 100000]: Number of points used in integration for the influence functional coefficients.
    • omega_max [Default: 30.0 * omegac]: Upper limit of influence functional coefficient integrations
  • if type="drude_lorentz", the bath spectral density $J(\omega) = \frac{2\lambda}{\Delta s^2}\frac{\omega \gamma}{\omega^2+\gamma^2}$
    • lambda: reorganization energy, $\lambda$, in energy units
    • gamma: cutoff frequency, $\gamma$, in energy units
    • Ds [Default: 2]: $\Delta s$ value. Typically set to 1 for exciton transfer problems.
    • npoints [Default: 100000]: Number of points used in integration for the influence functional coefficients.
    • omega_max [Default: 1000.0 * gamma]: Upper limit of influence functional coefficient integrations
  • if type="tabular", the bath spectral density is provided as a table in the file specified in jw_file
  • if type="huang_rhys", the bath spectral density is provided in the form of a table of frequency-dependent Huang-Rhys factors in the file specified in huang_rhys_file
source

Simulation File

The simulation file has only a single TOML section [simulation]. Every simulation file should have a name to identify the simulation and an output file that specifies an HDF5 file for storing all the data.

There are broadly three types of simulations that are currently supported:

  • dynamics simulations that simulate the non-equilibrium dynamics of the given problem
  • equilibrium_rho simulations that simulate the equilibrium density at the given temperature
  • complex_corr simulations for calculating equilibrium correlation functions of various flavors

These are specified in the calculation field which, if unspecified, is taken to be dynamics by default.

The rest of the parameters required for a simulation file are specific to the type of simulation being run.

Dynamics Simulations

Various methods of simulation are supported:

  • Path Integral Methods using Feynman-Vernon Influence Functional[1]:
    • Quasi-adiabatic Propagator Path Integrals (QuAPI) [2, 3]
    • Blip QuAPI [4]
    • Time-Evolved Matrix Product Operators (TEMPO) [5]
    • Pairwise-Connected Tensor Network Path Integral (PC-TNPI) [6]
  • Hierarchical Equations of Motion (HEOM) [7]
  • Generalized Quantum Master Equation (GQME) [8, 9]
  • Multichromophore Incoherest Forster Resonance Energy Transfer [10, 11]
  • Bloch-Redfield Master Equation
  • Transfer Tensor Method (TTM) [12] coupled with any of the path integral methods

All of these dynamics methods require some core common parameters and then more specfic method-dependent parameters. The core parameters of all the dynamics methods are:

  • dt: for the time-step in the units specified in the system file
  • nsteps: for the number of steps of simulation of the dynamics

Feynman-Vernon Influence Functional Simulations

There are two ways of incorporating the effect of non-Markovian memory in path integral simulations: iterative propagation beyond memory or using the transfer tensor method. To use TTM, one can choose one of the following:

  • method = "QuAPI-TTM": for using QuAPI within memory
  • method = "Blip-TTM": for using Blip within memory
  • method = "TEMPO-TTM": for using TEMPO within memory

Finally, if one does not intend on using TTM, we suggest using TEMPO for accessing long memory lengths efficiently. This is chosen by setting method = "TEMPO".

In this family of methods, the non-Markovian memory is incorporated explicitly by specifying the number of time-steps it spans. For all the TTM-based methods, this memory length is set through the parameter, rmax. For method = "TEMPO", it is set through the parameter, kmax.

Every method has a separate set of parameters that handle the balance between accuracy and efficiency. In case of "QuAPI-TTM", that parameter is called cutoff and it is by default set to $10^{-10}$. All paths with absolute value of amplitude below this cutoff are ignored.

In the case of "Blip-TTM", the accuracy is set via the maximum number of blips allowed, max_blips. If this is set to $-1$, that means all blips are included.

For "TEMPO-TTM", the accuracy is set through the tensor network evaluation parameters. The cutoff of the singular value decomposition, and the maximum bond dimension, maxdim, used in obtaining the matrix product state representation of the path amplitude tensor are the two parameters that are used for controlling the accuracy. The default values of these two parameters are $10^{-10}$ and $1000$ respectively.