theochem/ModelHamiltonian

t-J-U-V model

Closed this issue · 4 comments

Description

We need to build a Hamiltonian in the following form
image

The first three terms lines (1) - (2) are described by PPP model, with $Q_p = 0, \forall p$ . At the same time line (3) described the XXZ-Heisenberg model where $\mu_z = 0, \forall z$. However, the last term in line (4) can be integrated inside the occupation-based part, by adding charge Q:
image
In the line (6) I renamed term $V_{pq}$ as $\gamma_{pq}$ and added charges to the system. Term in the line (4) can be obtained from line (6) by invoking $Q_p = 1, \forall p$.
@PaulWAyers do you thing we should force charges to be 1, to be consistent with the initial definition of t-J-U-V model, or we can have it more flexible and let user define charges?

Code structure

We need a super class t-J-U-V, that takes all parameters that PPP and Heisenberg model take. All of the methods that creates zero-, one-, and two-body term, should call there corresponding hamiltonian method and return sum or results. For example:

def __init__(*params_1, *params_2):
    self.ocupation_part = HamPPP.init(*params_1)
    self.spin_part = HamHeisenberg.init(*params_2)


def generate_one_body_integral(dense=True, basis='spatial basis'):
    h_occupation = self.occupation_part.generate_one_body_integral(dense=True, basis='spatial basis')
    h_spin =  self.spin_part.generate_one_body_integral(dense=True, basis='spatial basis')
    self.h = h_occupation + h_spin
    return self.h

I would allow arbitrary charges with default value 1.

Testing

There are few ways to can test a software:

  • API tests, when we need to test that code runs for different parameters and their combinations. For example, mix and match different types of symmetries, sparsity of output, input type of connectivity matrix etc. Here, it's also a good idea to come up with some system, lets say 4 site system in spatial orbital, try to make it hamiltonian "by hand" and than make it as a test.
  • Combinations of system that has already been testes separately: for example Hubbard and Heisenberg models that will be combined into the new t-JUV class.
  • Physically meaningful systems that corresponds to t-JUV model. Ideally we need to find papers, where those models has been used, and their energy spectrum has been reported.

The first point should go into the test_tjuv.py file. The other two should go into separate notebooks, in the form of tutorial, like Demo or Ising.
@PaulWAyers do you have any candidates for the testing systems?

Unless there is something in my original notes, I don't think I have a reference for tJUV. I found one paper on tJU (googling)
https://www.sciencedirect.com/science/article/pii/S0304885321006715
https://www.nature.com/articles/s41598-024-51829-7
The original reference for t-J-U might be beelow, but I think I recall earlier references too.
https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.207002
but I'm not sure about t-J-U-V. One early reference is below. Spalek seems to be the major player in this space.
https://iopscience.iop.org/article/10.1088/1361-648X/aa7a21

This is done and tested