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.