Skip to content

hc, adjoint

Sources: hc.hpp ยท hc.cpp

Returns the hermitian conjugate \(\mathcal{O}^\dagger\) of an operator \(\mathcal{O}\) represented by an Op or OpSum object, such that on every block $$ \mathrm{matrix}(\mathrm{hc}(\mathcal{O})) = \mathrm{matrix}(\mathcal{O})^\dagger. $$ adjoint is the same operation under the name used in the language of \(*\)-algebras; in Julia it also provides the postfix ' operator, so ops' is equivalent to hc(ops). Please note the details when conjugating complex couplings, outlined in OpSum # Complex couplings.

Definition

hc(op::Op)::OpSum
hc(ops::OpSum)::OpSum
Base.adjoint(op::Op)::OpSum
Base.adjoint(ops::OpSum)::OpSum
OpSum hc(Op const &op)
OpSum hc(OpSum const &ops)
OpSum adjoint(Op const &op)
OpSum adjoint(OpSum const &ops)

Hermitian conjugation complex-conjugates the couplings and reverses the order of products, $$ \mathrm{hc}(c\,\mathcal{A}\mathcal{B}) = c^*\, \mathcal{B}^\dagger \mathcal{A}^\dagger. $$

The hermitian conjugate of an Op need not necessarily be of type Op as well, since for certain operator types, a numerical prefactor can be introduced (e.g. HopAsym or ExchangeAsym introduce a -1 upon hermitian conjugation, see operator types) which then generically requires representing the object as an OpSum. The elementary operator types are mapped onto their hermitian-conjugate partners, e.g. \(\mathrm{hc}(S^+) = S^-\), \(\mathrm{hc}(c_\uparrow) = c^\dagger_\uparrow\), while hermitian types such as \(S^z\), \(S^y\) or SdotS are unchanged. For an explicit Matrix type, the conjugate transpose of the given matrix is taken.

Usage Example

cdagup = Op("Cdagup", 1)
sdots = Op("SdotS", [1, 2])
hop = (1.0 + 1.0im) * Op("Hop", [1, 2])
@show cdagup == hc(cdagup)
@show sdots == hc(sdots)
@show hop == hc(hop)

# the postfix ' is the adjoint, i.e. hc
sp = 1.0 * Op("S+", 1)
@show sp'
@show sp' == hc(sp)
@show (sp')' == sp
@show hop'                          # coupling complex conjugated
auto cdagup = 1.0 * Op("Cdagup", 0);
auto sdots = 1.0 * Op("SdotS", {0, 1});
auto hop = (1.0 + 1.0i) * Op("Hop", {0, 1});
XDIAG_SHOW(cdagup == hc(cdagup));
XDIAG_SHOW(sdots == hc(sdots));
XDIAG_SHOW(hop == hc(hop));

// adjoint is hc
auto sp = 1.0 * Op("S+", 0);
XDIAG_SHOW(adjoint(sp));
XDIAG_SHOW(adjoint(sp) == hc(sp));
XDIAG_SHOW(adjoint(adjoint(sp)) == sp);
XDIAG_SHOW(adjoint(hop));                  // coupling complex conjugated