Skip to content

Hermitian conjugate in CouplingModel wrong for lattices with unit cell #23

@jhauschild

Description

@jhauschild

The user guide introduction to models suggested to add the hermitian conjugate coupling for a CouplingModel with the formulation

Simply add another line self.add_coupling(J, u1, 'Sz', u2, 'Sz', -dx)

The models in TenPy followed this, e.g. the FermionModel in the fermions_spinless.py had the wrong lines

    for u1, u2, dx in self.lat.nearest_neighbors:
        self.add_coupling(-J, u1, 'Cd', u2, 'C', dx, 'JW', True)
        self.add_coupling(-J, u1, 'Cd', u2, 'C', -dx, 'JW', True)  # hermitian conjugate

In general, the hermitian conjugate of sum_<i,j> A_i B_j = sum_i A_i B_(i+dx) is
sum_<i,j> B^dagger_i A^dagger_j = sum_j B^dagger_j A^dagger_(i-dx).
Hence, the general rule should be:

  • send dx to -dx
  • swap the order of the operators,
  • take the hermitian conjugate of the operators.

The correct lines for the above couplings should hence be

    for u1, u2, dx in self.lat.nearest_neighbors:
        self.add_coupling(-J, u1, 'Cd', u2, 'C', dx, 'JW', True)
        self.add_coupling(-J, u2, 'Cd', u1, 'C', -dx, 'JW', True)  # h.c.

or in general

    for u1, u2, dx in self.lat.nearest_neighbors:
        self.add_coupling(strength, u1, 'A', u2, 'B', dx)
        self.add_coupling(np.conj(strength), u2, 'Bdagger', u1, 'Adagger', -dx)  # h.c.

All the models in TenPy are fine for lattices with a trivial unit cell, e.g., the "Chain", "Square".
However, for models on a lattice with non-trivial unit cell, it might have given wrong Hamiltonians.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions