Hi Miles,
Thanks for your helpful insights. Below, I have written down the part of the code where I write the hamiltonian, the initial state and the DMRG part.
auto sites = Electron(N);
auto ampo = AutoMPO(sites);
for(int i = 1; i <= N; ++i)
{
ampo += U1,"Nupdn",i;
}
for(int b = 1; b < N; ++b)
{
ampo += -t1,"Cdagup",b,"Cup",b+1;
ampo += -t1,"Cdagup",b+1,"Cup",b;
ampo += -t1,"Cdagdn",b,"Cdn",b+1;
ampo += -t1,"Cdagdn",b+1,"Cdn",b;
ampo += V1,"Ntot",b,"Ntot",b+1;
}
// have set t2=0
for(int b = 1; b < N-1; ++b)
{
ampo += -t2,"Cdagup",b,"Cup",b+2;
ampo += -t2,"Cdagup",b+2,"Cup",b;
ampo += -t2,"Cdagdn",b,"Cdn",b+2;
ampo += -t2,"Cdagdn",b+2,"Cdn",b;
}
auto H = toMPO(ampo);
auto state = InitState(sites);
int p = Npart;
for(int i = N; i >= 1; --i)
{
if(p > i)
{
println("Doubly occupying site ",i);
state.set(i,"UpDn");
p -= 2;
}
else
if(p > 0)
{
println("Singly occupying site ",i);
state.set(i,(i%2==1 ? "Up" : "Dn"));
p -= 1;
}
else
{
state.set(i,"Emp");
}
}
auto psi0 = MPS(state);
auto [energy,psi] = dmrg(H,psi0,sweeps,{"Quiet",quiet});
Let me add that, the ground state energy is not changing when I vary U1/t, above the point U1/t = 1000. So, even for very high value of the ration U1/t, the ground state energy is same as U1/t=1000. i look at the outputs of each swipe and it shows the convergence of energy.
I understand that the problem may not be solvable/answerable from this overview. I appreciate all your efforts and any further comment/insight will be helpful.
Sincerely
sreetama