Hello, sorry for my simple problem.
I used ITensor3 to construct Bose-Hubbard model with the Hamiltonian:@@\widehat{H}=\sum_{j=1}^L{\left[ -\mu \widehat{n}_j+\frac{U}{2}\widehat{n}_j\left( \widehat{n}_j-1 \right) -J\left( \widehat{a}_j\widehat{a}_{j+1}^{\dagger}+\widehat{a}_{j}^{\dagger}\widehat{a}_j \right) +V\widehat{n}_j\widehat{n}_{j+1} \right]}@@
And I used this code to get the ground state:
int L = 2;
auto sites = Boson(L, {"MaxOcc=", 1, "ConserveQNs", true, "ConserveNb", false});
auto sweeps = Sweeps(8);
sweeps.maxdim() = 40, 80, 400, 400, 800, 800, 1000, 1000;
sweeps.cutoff() = 1E-16;
Real miu = 1.0;
Real U = 1.0;
Real J = 1.0;
Real V = 1.0;
auto ampo = AutoMPO(sites);
for (int i = 1; i < L; i += 1)
{
ampo += -miu - U / 2, "N", i;
ampo += U / 2, "N", i, "N", i;
ampo += -J, "A", i, "Adag", i + 1;
ampo += -J, "Adag", i, "A", i + 1;
ampo += V, "N", i, "N", i + 1;
}
ampo += -J, "A", 1, "Adag", L;
ampo += -J, "Adag", 1, "A", L;
ampo += V, "N", 1, "N", L;
auto H = toMPO(ampo);
auto state = InitState(sites);
for (int i : range1(L))
{
if (i % 2 == 1)
state.set(i, "1");
else
state.set(i, "1");
}
auto psi = randomMPS(state);
auto [energy, psi0] = dmrg(H, psi, sweeps, "Quiet");
return 0;
But I got wrong result comparing with ED result.
The ground state energy given by DMRG is -2.56 while ED gave -3.00.
I also tried the way in Seems like a simplified TEBD algorithm and got the same result as DMRG gave.
I have no idea what I did wrong. It seems that I constructed the Hamiltonian in a correct way.
Looking forward to the help.