Hi,
It seems the MPO time evolution gives wrong results for large interactions. The sample code is below.
#include "itensor/all.h"
using namespace std;
using namespace itensor;
int
main(int argc, char* argv[])
{
int N = 10;
auto sites = Boson(N,{"MaxOcc=",1,"ConserveQNs=",false});
auto state = InitState(sites);
for(int i = 1; i <= N; ++i)
{
state.set(i,"0");
}
auto psi0 = MPS(state);
auto psi = MPS(state);
auto ampo = AutoMPO(sites);
//Make the Hamiltonian
for(int b = 1; b < N; ++b)
{
ampo += 10.0,"N",b,"N",b+1;
}
for(int b = 1; b <= N; ++b)
{
ampo += 0.5,"Adag",b;
ampo += 0.5,"A",b;
ampo += -2.0,"N",b;
}
auto H = toMPO(ampo);
auto tau = 0.1;
//auto expH = toExpH(ampo,tau);
auto expH = toExpH(ampo,tau*Cplx_i);
auto args = Args("Method=","DensityMatrix","Cutoff=",1E-9,"MaxDim=",3000);
auto ttotal = 3.0;
auto nt = int(ttotal/tau+(1e-9*(ttotal/tau)));
for(int n = 1; n <= nt; ++n)
{
psi = applyMPO(expH,psi,args);
psi.noPrime().normalize();
auto ovlp = norm(innerC(psi,psi0));
auto bb = n*tau;
printfln("\nOverlap at time %.4f %.20f",bb,ovlp);
}
return 0;
}
When the NN interaction is large, like 10.0, the overlap between the time-evolved psi and the initial psi will quickly become "0.00000000000000000000" and then keeps zero forever. This makes no sense. Is this due to the algorithm itself or some bug in the code? Thanks.
Jin