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
- the description of the
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_unit
— Functionparse_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. TypicallyeV
,meV
,cm^-1
, orha
.time_unit_name
[Default:au
]: Specifies the time units. Typicallyfs
, orau
.
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_system
— Functionparse_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:
Htype
[Default:file
]: How to parse the Hamiltonian file. Typicallyfile
to read a file,nearest_neighbor
to specify the Hamiltonian as a nearest-neighbor tight-binding model, ornearest_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 sitecoupling
: the intersite coupling elementnum_sites
: the number of sites
- if
Htype = "nearest_neighbor_cavity"
, in addition to the same variables as theHtype = "nearest_neighbor"
case, also specify:cavity_energy
: the energy of the cavity modecavity_coupling
: coupling of the cavity to the monomers
Finally a 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.
Bath Hamiltonian
QuantumDynamicsCLI.ParseInput.parse_bath
— Functionparse_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 byQuantumDynamicsCLI.ParseInput.get_bath
.
QuantumDynamicsCLI.ParseInput.get_bath
— Functionget_bath(b, unit)
Parse individual baths
Parameters:
type
[Default:ohmic
]: Type of harmonic bath. Can beohmic
,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 unitsDs
[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 unitsgamma
: cutoff frequency, $\gamma$, in energy unitsDs
[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 injw_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 inhuang_rhys_file
Simulation File
There are broadly three types of simulations that are currently supported:
dynamics
simulations that simulate the non-equilibrium dynamics of the given problemequilibrium_rho
simulations that simulate the equilibrium density at the given temperaturecomplex_corr
simulations for calculating equilibrium correlation functions of various flavors
Dynamics Simulations
Various methods of simulation are supported:
- Path Integral Methods based on Feynman-Vernon Influence Functional[1]:
- Quasi-adiabatic Propagator Path Integrals (QuAPI)
- Blip QuAPI
- Time-Evolved Matrix Product Operators (TEMPO)
- Pairwise-Connected Tensor Network Path Integral (PC-TNPI)
- Hierarchical Equations of Motion (HEOM)
- Generalized Quantum Master Equation
- Multichromophore Incoherest Forster Theory
- Bloch-Redfield Master Equation
- Transfer Tensor Method coupled with any of the path integral methods
All of these 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-stepnsteps
: for the number of steps that the dynamics needs to be calculated for
Example
Spin-Boson Example
Let us say we are trying to simulate a typical Spin-Boson problem, where all parameters are specified in atomic units.
[system]
Hamiltonian = "Hamiltonian"
[baths]
beta = 5.0
[[baths.bath]]
type = "ohmic"
xi = 0.1
omegac = 7.5
svec = [1.0, -1.0]
Notice that the [units]
section is completely skipped over because the default values specify atomic units.