Hello everybody,
I was trying to run a simulation on the one-dimensional superlattice Bose-Hubbarad with alternating tunneling rates t1 and t2, which is the bosonic analogue of the Su-Schrieffer-Heeger(SSH) model. The lattice with one unit cell is made of A and B sites. To this end, I have adaped the following unit-cell: <UNITCELL name="sublattice1d" dimension="1"> <VERTEX type="0"/> <VERTEX type="1"/> <EDGE type="0"><SOURCE vertex="1" offset="0"/><TARGET vertex="2" offset="0"/></EDGE> <EDGE type="1"><SOURCE vertex="2" offset="0"/><TARGET vertex="1" offset="1"/></EDGE> <EDGE type="0"><SOURCE vertex="1" offset="1"/><TARGET vertex="2" offset="1"/></EDGE> </UNITCELL>
This enters into the lattice graph: <LATTICEGRAPH name = "2 band sublattice open chain lattice"> <FINITELATTICE> <LATTICE ref="chain lattice"/> <EXTENT dimension="1" size ="L"/> <BOUNDARY type="open"/> </FINITELATTICE> <UNITCELL ref="sublattice1d"/> </LATTICEGRAPH>
And the Hamiltonian: <HAMILTONIAN name="boson Hubbard"> <PARAMETER name="mu" default="0"/> <PARAMETER name="hop" default="1"/> <PARAMETER name="hop'" default="1"/> <PARAMETER name="U" default="0"/> <BASIS ref="boson"/> <SITETERM site="i"> <PARAMETER name="mu#" default="mu"/> <PARAMETER name="U#" default="U"/> -mu#*n(i)+U#*n(i)*(n(i)-1)/2 </SITETERM> <BONDTERM type="0" source="i" target="j"> -hop*boson_hop(i,j) </BONDTERM> <BONDTERM type="1" source="i" target="j"> -hop'*boson_hop(i,j) </BONDTERM> </HAMILTONIAN>
However when I run a DMRG calculation.I still get the wrong results.I compare the ground state energy of it with which I calculated by matlab using ED method.All the parameters of the two calculation are the same.
I seem to misunderstand the implementation. So the question I want to ask is that are there any wrong in the definitions of my lattice or the model in XML.
Thank you for any kind of heplful remarks.
Yulian Chen
Dear Yulian,
I think you can solve this bug by removing the last line " <EDGE type="0"><SOURCE vertex="1" offset="1"/><TARGET vertex="2" offset="1"/></EDGE> " from the definition of the UNITCELL.
Step 1: Expose the bug. You can write a short "mock" python script to generate a simulation input XML file. Here is the script (named get_config.py) ------------------------------- import pyalps
p = {} p['LATTICE'] = '2 band sublattice open chain lattice' # p['LATTICE'] = '2 band open chain lattice' p['LATTICE_LIBRARY'] = './lattices.xml' p['L'] = 4 pyalps.writeInputFiles('superlatticechain', [p]) ------------------------------- where your own lattice library file is at './lattices.xml'. Then run the script and get the input xml file: ------------------------------- ~ alpspython ./get_config.py ~ ls ALPS.xsl lattices.xml superlatticechain.task1.in.xml get_config.py superlatticechain.in.xml ------------------------------- Then use the command line tool 'printgraph' to print the GRAPH used by your simulation: ------------------------------- ~ printgraph superlatticechain.task1.in.xml <GRAPH dimension="1" vertices="8" edges="10"> <VERTEX id="1" type="0"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="2" type="1"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="3" type="0"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="4" type="1"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="5" type="0"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="6" type="1"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="7" type="0"><COORDINATE>3</COORDINATE></VERTEX> <VERTEX id="8" type="1"><COORDINATE>3</COORDINATE></VERTEX> <EDGE source="1" target="2" id="1" type="0" vector="0"/> <EDGE source="3" target="4" id="2" type="0" vector="0"/> <EDGE source="2" target="3" id="3" type="1" vector="1"/> <EDGE source="3" target="4" id="4" type="0" vector="0"/> <EDGE source="5" target="6" id="5" type="0" vector="0"/> <EDGE source="4" target="5" id="6" type="1" vector="1"/> <EDGE source="5" target="6" id="7" type="0" vector="0"/> <EDGE source="7" target="8" id="8" type="0" vector="0"/> <EDGE source="6" target="7" id="9" type="1" vector="1"/> <EDGE source="7" target="8" id="10" type="0" vector="0"/> </GRAPH> ------------------------------- You will see that some bonds are duplicated constructed (in bold).
Step 2: Fix the bug. The removed line in your UNITCELL definition leads to this duplicated construction. Because this line creates a type 0 bond from the vertex 1 with offset 1 to the vertex 2 with offset 1. The two vertexes are shifted 1 unit cell. That means create a bond in the next unit cell of the LATTICE. This is the source of the redundancy. After fixing the bug, you can print the right result: ------------------------------- <GRAPH dimension="1" vertices="8" edges="7"> <VERTEX id="1" type="0"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="2" type="1"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="3" type="0"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="4" type="1"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="5" type="0"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="6" type="1"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="7" type="0"><COORDINATE>3</COORDINATE></VERTEX> <VERTEX id="8" type="1"><COORDINATE>3</COORDINATE></VERTEX> <EDGE source="1" target="2" id="1" type="0" vector="0"/> <EDGE source="2" target="3" id="2" type="1" vector="1"/> <EDGE source="3" target="4" id="3" type="0" vector="0"/> <EDGE source="4" target="5" id="4" type="1" vector="1"/> <EDGE source="5" target="6" id="5" type="0" vector="0"/> <EDGE source="6" target="7" id="6" type="1" vector="1"/> <EDGE source="7" target="8" id="7" type="0" vector="0"/> </GRAPH> -------------------------------
Best regards, Rongyang Sun
________________________________ From: Comp-phys-alps-users comp-phys-alps-users-bounces@lists.phys.ethz.ch on behalf of yulian chen cyl119zj@gmail.com Sent: Wednesday, October 17, 2018 14:03 To: comp-phys-alps-users@lists.phys.ethz.ch Subject: [ALPS-users] How to define the superlattice Bose-Hubbard model?
Hello everybody,
I was trying to run a simulation on the one-dimensional superlattice Bose-Hubbarad with alternating tunneling rates t1 and t2, which is the bosonic analogue of the Su-Schrieffer-Heeger(SSH) model. The lattice with one unit cell is made of A and B sites. To this end, I have adaped the following unit-cell: <UNITCELL name="sublattice1d" dimension="1"> <VERTEX type="0"/> <VERTEX type="1"/> <EDGE type="0"><SOURCE vertex="1" offset="0"/><TARGET vertex="2" offset="0"/></EDGE> <EDGE type="1"><SOURCE vertex="2" offset="0"/><TARGET vertex="1" offset="1"/></EDGE> <EDGE type="0"><SOURCE vertex="1" offset="1"/><TARGET vertex="2" offset="1"/></EDGE> </UNITCELL>
This enters into the lattice graph: <LATTICEGRAPH name = "2 band sublattice open chain lattice"> <FINITELATTICE> <LATTICE ref="chain lattice"/> <EXTENT dimension="1" size ="L"/> <BOUNDARY type="open"/> </FINITELATTICE> <UNITCELL ref="sublattice1d"/> </LATTICEGRAPH>
And the Hamiltonian: <HAMILTONIAN name="boson Hubbard"> <PARAMETER name="mu" default="0"/> <PARAMETER name="hop" default="1"/> <PARAMETER name="hop'" default="1"/> <PARAMETER name="U" default="0"/> <BASIS ref="boson"/> <SITETERM site="i"> <PARAMETER name="mu#" default="mu"/> <PARAMETER name="U#" default="U"/> -mu#*n(i)+U#*n(i)*(n(i)-1)/2 </SITETERM> <BONDTERM type="0" source="i" target="j"> -hop*boson_hop(i,j) </BONDTERM> <BONDTERM type="1" source="i" target="j"> -hop'*boson_hop(i,j) </BONDTERM> </HAMILTONIAN>
However when I run a DMRG calculation.I still get the wrong results.I compare the ground state energy of it with which I calculated by matlab using ED method.All the parameters of the two calculation are the same.
I seem to misunderstand the implementation. So the question I want to ask is that are there any wrong in the definitions of my lattice or the model in XML.
Thank you for any kind of heplful remarks.
Yulian Chen
Dear Rongyang,
Thank you for your reply. I did the two steps as you told me to check the graph using the printgraph tool. And you are right that the last line in my UNITCELL definition leads to the duplicated construction.
(alps) yulian@DESKTOP-MH80DO3:/mnt/c/Users/cyl/Desktop/partite$ printgraph superlatticechain.task1.in.xml <GRAPH dimension="1" vertices="8" edges="7"> <VERTEX id="1" type="0"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="2" type="1"><COORDINATE>0</COORDINATE></VERTEX> <VERTEX id="3" type="0"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="4" type="1"><COORDINATE>1</COORDINATE></VERTEX> <VERTEX id="5" type="0"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="6" type="1"><COORDINATE>2</COORDINATE></VERTEX> <VERTEX id="7" type="0"><COORDINATE>3</COORDINATE></VERTEX> <VERTEX id="8" type="1"><COORDINATE>3</COORDINATE></VERTEX> <EDGE source="1" target="2" id="1" type="0" vector="0"/> <EDGE source="2" target="3" id="2" type="1" vector="1"/> <EDGE source="3" target="4" id="3" type="0" vector="0"/> <EDGE source="4" target="5" id="4" type="1" vector="1"/> <EDGE source="5" target="6" id="5" type="0" vector="0"/> <EDGE source="6" target="7" id="6" type="1" vector="1"/> <EDGE source="7" target="8" id="7" type="0" vector="0"/> </GRAPH>
Then I changed the unit-cell into <UNITCELL name="sublattice1d" dimension="1"> <VERTEX type="0"/> <VERTEX type="1"/> <EDGE type="0"><SOURCE vertex="1" offset="0"/><TARGET vertex="2" offset="0"/></EDGE> <EDGE type="1"><SOURCE vertex="2" offset="0"/><TARGET vertex="1" offset="1"/></EDGE> </UNITCELL>
I run a DMRG calculation. But I found that the results are the same as when I used the "open chain lattice" with a single tunneling rates t. The parameter t' does not seem to work. I think it should be something wrong with my Model XML File:
<MODELS> <SITEBASIS name="boson"> <PARAMETER name="Nmax" default="infinity"/> <QUANTUMNUMBER name="N" min="0" max="Nmax"/> <OPERATOR name="bdag" matrixelement="sqrt(N+1)"> <CHANGE quantumnumber="N" change="1"/> </OPERATOR> <OPERATOR name="b" matrixelement="sqrt(N)"> <CHANGE quantumnumber="N" change="-1"/> </OPERATOR> <OPERATOR name="n" matrixelement="N"/> </SITEBASIS> <BASIS name="boson"> <SITEBASIS ref="boson"/> <CONSTRAINT quantumnumber="N" value="N_total"/> </BASIS> <SITEOPERATOR name="double_occupancy" site="x"> n(x)*(n(x)-1)/2 </SITEOPERATOR> <BONDOPERATOR name="boson_hop" source="x" target="y"> bdag(x)*b(y)+bdag(y)*b(x) </BONDOPERATOR> <HAMILTONIAN name="boson Hubbard"> <PARAMETER name="mu" default="0"/> <PARAMETER name="t" default="1"/> <PARAMETER name="t'" default="1"/> <PARAMETER name="U" default="0"/> <PARAMETER name="V" default="0"/> <BASIS ref="boson"/> <SITETERM site="i"> <PARAMETER name="mu#" default="mu"/> <PARAMETER name="U#" default="U"/> -mu#*n(i)+U#*n(i)*(n(i)-1)/2 </SITETERM> <BONDTERM type="0" source="i" target="j"> -t*boson_hop(i,j) </BONDTERM> <BONDTERM type="1" source="i" target="j"> -t'*boson_hop(i,j) </BONDTERM> </HAMILTONIAN> </MODELS>
What should I do to fix the problem?
Best,
Yulian Chen
yulian chen cyl119zj@gmail.com 于2018年10月17日周三 下午2:03写道:
Hello everybody,
I was trying to run a simulation on the one-dimensional superlattice Bose-Hubbarad with alternating tunneling rates t1 and t2, which is the bosonic analogue of the Su-Schrieffer-Heeger(SSH) model. The lattice with one unit cell is made of A and B sites. To this end, I have adaped the following unit-cell:
<UNITCELL name="sublattice1d" dimension="1"> <VERTEX type="0"/> <VERTEX type="1"/> <EDGE type="0"><SOURCE vertex="1" offset="0"/><TARGET vertex="2" offset="0"/></EDGE> <EDGE type="1"><SOURCE vertex="2" offset="0"/><TARGET vertex="1" offset="1"/></EDGE> <EDGE type="0"><SOURCE vertex="1" offset="1"/><TARGET vertex="2" offset="1"/></EDGE> </UNITCELL>
This enters into the lattice graph:
<LATTICEGRAPH name = "2 band sublattice open chain lattice"> <FINITELATTICE> <LATTICE ref="chain lattice"/> <EXTENT dimension="1" size ="L"/> <BOUNDARY type="open"/> </FINITELATTICE> <UNITCELL ref="sublattice1d"/> </LATTICEGRAPH>
And the Hamiltonian:
<HAMILTONIAN name="boson Hubbard"> <PARAMETER name="mu" default="0"/> <PARAMETER name="hop" default="1"/> <PARAMETER name="hop'" default="1"/> <PARAMETER name="U" default="0"/> <BASIS ref="boson"/> <SITETERM site="i"> <PARAMETER name="mu#" default="mu"/> <PARAMETER name="U#" default="U"/> -mu#*n(i)+U#*n(i)*(n(i)-1)/2 </SITETERM> <BONDTERM type="0" source="i" target="j"> -hop*boson_hop(i,j) </BONDTERM> <BONDTERM type="1" source="i" target="j"> -hop'*boson_hop(i,j) </BONDTERM> </HAMILTONIAN>
However when I run a DMRG calculation.I still get the wrong results.I compare the ground state energy of it with which I calculated by matlab using ED method.All the parameters of the two calculation are the same.
I seem to misunderstand the implementation. So the question I want to ask is that are there any wrong in the definitions of my lattice or the model in XML.
Thank you for any kind of heplful remarks.
Yulian Chen
comp-phys-alps-users@lists.phys.ethz.ch