Closed BacAmorim closed 1 year ago
Maybe a better name would be simply Orbital
Also, does this affect how we implement transform(ham::Hamiltonian, f::Function)
? Currently we simply rotate the lattice, but we do nothing to ham
itself. I guess what you are saying here is that if the hamiltonian matrix elements are matrices that transform in a certain way under rotations, we should also transform them. If the orbital types are known, can this be done automatically simply knowing the real-space f
? Or does the user need to also provide a second transformation for the wannier orbitals?
EDIT: I guess we can extract the rotation component of f
by making it act on a set of unit vectors, and then use the angular moment information of Orbital
s to produce an equivalent rotation representation for them
If we rotate the system, the ham
is not transformed (or is) depending on whether we are also rotating the reference frame (or not) with respect to which the orbitals are defined.
For example, if we have a :px orbital and apply a rotation of pi/2, we can either say that the :px orbital becomes a :py orbital, or also rotate the frame with respect to which the orbitals are defined, and say we still have a :px orbital (in the transformed frame). It is essentially a choice of convention. But it can be an important one, if we are interested in twisted bilayer MX2 for example.
Maybe the frame of reference of the orbital could also be a (optional) field of the Orbital type.
If the orbital types are known, can this be done automatically simply knowing the real-space f? Or does the user need to also provide a second transformation for the wannier orbitals?
To rotate the Wannier orbitals we need to know their angular momenta quantum numbers and the corresponding Wigner matrix.
This proposal could be made part of a larger goal that @fernandopenaranda mentioned recently on Slack: the ability to identify symmetries in a Hamiltonian. This is a functionality that Kwant has via Qsymm. I admit it looks quite non-trivial to do it right, however, but I would need to think more carefully about it.
As discussed in https://github.com/pablosanjose/Elsa.jl/issues/22#issuecomment-538055800
It would be a good ideia to create a OrbitalType struct in order to store the name of the orbital an other aditional information, such as, but not limitted to:
The imediate reason I have to propose this is that in order to model ARPES within a tight-binding model, besides knowing the band structure, it is also necessary to have some information regarding the structure of the Wannier functions in real space.
For concreteness, assuming well localized Wannier orbitals, which can be well described in terms of a single Spherical Harmonic, the ARPES signal is approximatelly give by (for more technical details see https://arxiv.org/abs/1711.02499):
where the amplitude , is given by
In this expression, , are the entries in orbital space, of the eigenvector of the Tight-Binding Hamiltonian (that is, the amplitudes of the Bloch function in the Wannier basis), and is the Fourier Transform of the Wannier state (assuming that it can be separated in radial and angular parts). While inclusion of the radial part is not essential, inclusion of the real spherical harmonic, , is! Failure to include this term, leads to a violation of the rotational symmetries of the original system.
For example, if we have a model of px and py orbitals in a triangular lattice, but do not include the terms when evaluating ARPES, we will obtain Fermi surface maps that do not respect the 6-fold rotational invariance of the system.