Couplings

We start with a general form of a system-bath interaction Hamiltonian

\[ H_{SB} = \sum_\alpha S_\alpha\otimes B_\alpha\]

and define the set of $\{S_\alpha\}_\alpha$ with corresponding $\{B_α\}_\alpha$ as AbstractCouplings objects. Mathematically, every element in the same AbstractCouplings object shares the same bath correlation function. Three concrete types of AbstractCouplings are implemented – ConstantCouplings, TimeDependentCouplings and CustomCouplings.

Constant Couplings

ConstantCouplings represents time-independent operators. For example, the following code line

coupling = ConstantCouplings(["ZI", "IZ"])

creates a set of two constant operators: $ZI$ and $IZ$. The corresponding interaction Hamiltonian is

\[ H_{SB} = ZI⊗B_1 + IZ⊗B_2 \ ,\]

where $B_1$ and $B_2$ are independent and have identical correlation functions.

Time-dependent Couplings

On the other hand, TimeDependentCouplings can be constructed by a two-step procedure. First, a single TimeDependentCoupling needs to be constructed using

c1 = TimeDependentCoupling([(s)->cos(s)], [σx], unit=:ħ)
c2 = TimeDependentCoupling([(s)->sin(s)], [σz], unit=:ħ)

which creates two time-dependent coupling operators $\cos(s) X$ and $\sin(s) Z$. Then, c1 and c2 are grouped together to create the coupling set:

coupling = TimeDependentCouplings(c1, c2)

Custom Couplings

In addition, CustomCouplings provides a more flexible interface to construct the system-bath coupling operators from a list of user-defined functions:

coupling = CustomCouplings([(s)->σz])

Finally, we remark that only AbstractCouplings can be used to create an Annealing object.