Different ways to run DMRG on a finite cylinder geometry
Posted: 04 Oct 2021, 13:21
Hi! I want to run a DMRG for a given model on a cylinder, and then compare the obtained results with the same model, but run on a torus. From what I understood from documentation, there is a couple of ways, in which I can obtain a cylinder geometry (examples for the Honecomb lattice and SpinModel):
1) A finite lattice with open boundary conditions and a model with bcx="open" and bcy="cylinder":
2) A finite lattice with open boundary conditions and a model with bcx="periodic" and bcy="ladder" (the 1st example rotated by 90 degrees):
3) A finite lattice with bc=['open', 'periodic'] and a model with bcx="open", bcy="cylinder":
4) A finite lattice with bc=['periodic', 'open'] and a model with bcx="periodic", bcy="ladder" (the 3rd example rotated by 90 degrees):
Would I obtain the same groundstate by running all of the above examples? If so, what is the difference between them?
Finally, if I want to run the same model on a torus I would just need to launch the following code?
1) A finite lattice with open boundary conditions and a model with bcx="open" and bcy="cylinder":
Code: Select all
spinSite = SpinSite(S=0.5, conserve='Sz')
lattice = Honeycomb(Lx=Lx, Ly=Ly, sites=spinSite)
model_params = {
"lattice": lattice,
"bc_MPS": "finite",
"bc_x": "open",
"bc_y": "cylinder",
"Jx": 1.0,
"Jy": 1.0,
"Jz": 1.0,
}
model = SpinModel(model_params)
# And then run DMRG
Code: Select all
spinSite = SpinSite(S=0.5, conserve='Sz')
lattice = Honeycomb(Lx=Lx, Ly=Ly, sites=spinSite)
model_params = {
"lattice": lattice,
"bc_MPS": "finite",
"bc_x": "periodic",
"bc_y": "ladder",
"Jx": 1.0,
"Jy": 1.0,
"Jz": 1.0,
}
model = SpinModel(model_params)
# And then run DMRG
3) A finite lattice with bc=['open', 'periodic'] and a model with bcx="open", bcy="cylinder":
Code: Select all
spinSite = SpinSite(S=0.5, conserve='Sz')
lattice = Honeycomb(Lx=Lx, Ly=Ly, sites=spinSite, bc=['open', 'periodic'])
model_params = {
"lattice": lattice,
"bc_MPS": "finite",
"bc_x": "open",
"bc_y": "cylinder",
"Jx": 1.0,
"Jy": 1.0,
"Jz": 1.0,
}
model = SpinModel(model_params)
# And then run DMRG
Code: Select all
spinSite = SpinSite(S=0.5, conserve='Sz')
lattice = Honeycomb(Lx=Lx, Ly=Ly, sites=spinSite, bc=['open', 'periodic'])
model_params = {
"lattice": lattice,
"bc_MPS": "finite",
"bc_x": "periodic",
"bc_y": "ladder",
"Jx": 1.0,
"Jy": 1.0,
"Jz": 1.0,
}
model = SpinModel(model_params)
# And then run DMRG
Would I obtain the same groundstate by running all of the above examples? If so, what is the difference between them?
Finally, if I want to run the same model on a torus I would just need to launch the following code?
Code: Select all
spinSite = SpinSite(S=0.5, conserve='Sz')
lattice = Honeycomb(Lx=Lx, Ly=Ly, sites=spinSite, bc='periodic')
model_params = {
"lattice": lattice,
"bc_MPS": "finite",
"bc_x": "periodic",
"bc_y": "periodic",
"Jx": 1.0,
"Jy": 1.0,
"Jz": 1.0,
}
model = SpinModel(model_params)
# And then run DMRG