pablosanjose / Quantica.jl

Simulation of quantum systems on a lattice
Other
70 stars 8 forks source link

Create a OrbitalType struct #13

Closed BacAmorim closed 1 year ago

BacAmorim commented 5 years ago

As discussed in https://github.com/pablosanjose/Elsa.jl/issues/22#issuecomment-538055800

Yeah, we could definitely enable such a functionality further on. But to make it really flexible, I think we would need to make a new type for orbital names (maybe OrbitalType) that can store quantum number information. We could then translate any known orbital indentifier like orbitals = :pz into the correcto OrbitalType, and any unknown identifier into OrbitalType with missing quantum numbers. Do open an issue about this so that we don't forget, and if possible describe a use case for the functionality in some more detail to inform the design (thanks a lot for the feedback, by the way!)

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.

pablosanjose commented 5 years 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 Orbitals to produce an equivalent rotation representation for them

BacAmorim commented 5 years ago

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.

BacAmorim commented 5 years ago

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.

pablosanjose commented 4 years ago

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.