+1 vote
asked by (190 points)
edited by

Dear ITensor community,

I want to ask for help in defining the siteset for a two-component Bose-Hubbard Hamiltonian. Hamiltonian of the interest is as follows:
$$
\begin{equation}
H = -J\sum_i (a^\dagger_{i+1}a_i + b^{\dagger}_{i+1}b_i + h.c.) + U_{aa}/2\sum_i n^{a}_i(n^{a}_i-1) + U_{bb}/2\sum_i n^{b}_i (n^{b}_i-1) + U_{ab}\sum_{i}n^{a}_i n^{b}_i
\end{equation}
$$
where operators @@a_i@@ fulfill bosonic commutation relations, as well as @@b@@.

Can I ask for some steps of modification "bosons.h" file to construct mentioned Hamiltonian?

The additional constraints are:
1. Total number of particles is conserved Na + Nb = const
2. I would like to consider the case that, in general, the magnetization Sz = Na - N_b is not conserved.

I really appreciate any help you can provide.

1 Answer

0 votes
answered by (70.1k points)

Hi Marcin,
Thanks for the question. First of all, to see a typical example of how to set up an alternating, mixed type of system for the C++ version of ITensor you can refer to this example:

http://itensor.org/docs.cgi?vers=cppv3&page=formulas/gs_holst_polaron

which shows how to have your sites alternate between the site types included with ITensor.

But for your case of two kinds of bosons and conserving their particle numbers separately, the easiest approach will be to make a custom site set which slightly generalizes the boson.h one included with ITensor. Here are the steps:

  1. make a copy of the file itensor/mps/sites/boson.h and call it something like ab_boson.h

  2. inside that file, rename the type "Boson" everywhere to something else like "ABBoson" so it doesn't conflict with the Boson type included with ITensor

  3. now modify the constructor for ABBoson around line 55 of that file to instead do this logic:

    if(n%2==1)
    {
    qints[n] = QNInt(QN({"NbA",n}),1);
    }
    else
    {
    qints[n] = QNInt(QN({"NbB",n}),1);
    }

and that should be all you need.

Now just use this site set in your code as usual, meaning that you make your site set as:

auto sites = ABBoson(N);

And then it should "just work" in the sense of always conserving the number of A and B bosons separately. I'd encourage you to check that by computing and summing up the total density of bosons on odd (A) versus even (B) sites at various points in your calculation.

Best regards,
Miles

Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.

Categories

...