-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Description
As mentioned in #69, the default subspace expansion does not work in my case:
maxdim = 100 # Maximum bond dimension
cutoff = 1e-8 # Singular value cutoff when increasing the bond dimension
max_vumps_iters = 100 # Maximum number of iterations of the VUMPS algorithm at each bond dimension
vumps_tol = 1e-9
conserve_qns = true
solver_tol = (x -> x / 10)
outer_iters = 10 # Number of times to increase the bond dimension
function initstate(n)
if n%2==0
if (n/2)%2==1
return "Dn"
else
return "Up"
end
else
if n==2*1-1 return "Up" end
if n==2*3-1 return "Dn" end
if n==2*5-1 return "Up" end
if n==2*7-1 return "Dn" end
if n==2*9-1 return "Up" end
if n==2*11-1 return "Dn" end
if n==2*13-1 return "Up" end
if n==2*14-1 return "Dn" end
if n==2*15-1 return "Up" end
if n==2*16-1 return "Dn" end
if n==2*17-1 return "Up" end
if n==2*18-1 return "Dn" end
if n==2*19-1 return "Up" end
if n==2*21-1 return "Dn" end
if n==2*23-1 return "Up" end
if n==2*25-1 return "Dn" end
if n==2*27-1 return "Up" end
if n==2*29-1 return "Dn" end
if n==2*31-1 return "Up"
else return "Emp"
end
end
end
N = 62 # Number of sites in the unit cell
s = infsiteinds(n->isodd(n) ? "tJ" : "S=1/2", N; conserve_qns, initstate)
ψ = InfMPS(s, initstate)
function ITensorInfiniteMPS.unit_cell_terms(::Model"mymodel"; N)
ampo = OpSum()
t = 1.0;
Jc = 0.5;
Js = 0.5;
Jk = 1.25;
Jcs = 0.25;
for j in 1:2:N
ampo += -t,"Cdagup",j,"Cup",j+2;
ampo += -t,"Cdagdn",j,"Cdn",j+2;
ampo += -t,"Cdagup",j+2,"Cup",j;
ampo += -t,"Cdagdn",j+2,"Cdn",j;
ampo += 0.5*Jc,"S+",j,"S-",j+2;
ampo += 0.5*Jc,"S-",j,"S+",j+2;
ampo += Jc,"Sz",j,"Sz",j+2;
ampo += -0.25*Jc,"Ntot",j,"Ntot",j+2;
end
for j in 2:2:N
ampo += 0.5*Js,"S+",j,"S-",j+2;
ampo += 0.5*Js,"S-",j,"S+",j+2;
ampo += Js,"Sz",j,"Sz",j+2;
end
for j in 1:2:N
ampo += 0.5*Jk,"S+",j,"S-",j+1;
ampo += 0.5*Jk,"S-",j,"S+",j+1;
ampo += Jk,"Sz",j,"Sz",j+1;
end
for j in 1:2:N
ampo += 0.5*Jcs,"S+",j,"S-",j+3;
ampo += 0.5*Jcs,"S-",j,"S+",j+3;
ampo += Jcs,"Sz",j,"Sz",j+3;
end
for j in 2:2:N
ampo += 0.5*Jcs,"S+",j,"S-",j+1;
ampo += 0.5*Jcs,"S-",j,"S+",j+1;
ampo += Jcs,"Sz",j,"Sz",j+1;
end
return ampo
end
model = Model("mymodel")
H = InfiniteSum{MPO}(model, s; N)
vumps_kwargs = (tol=vumps_tol, maxiter=max_vumps_iters, solver_tol)
subspace_expansion_kwargs = (cutoff=cutoff, maxdim=maxdim)
ψ = vumps_subspace_expansion(H, ψ; outer_iters, subspace_expansion_kwargs, vumps_kwargs)
Also in the example codes, all examples are using vumps_subspace_expansion. Is it easy to use as input (1) a randomly generated QN conserved uMPS with bond dimension larger than 1 (2) a MPS which has optimized by iDMRG and then calling the VUMPS without subspace expansion?
Metadata
Metadata
Assignees
Labels
No labels