Dear Alps users / developers,
in order to estimate the finite-size error of my exact diagonalization results, I tried to apply the DMRG code of Alps to a single impurity Kondo problem (one-dimensional tight-binding electrons with a spin-1/2 impurity coupling to the middle of the chain). As a first step, I wanted to compare the results for a small system with L=7 (i.e. 8 lattice sites including the impurity). Since the exact diagonalization was done at half filling (N=L), I would also like to use a fixed electron number N in the DMRG calculation. For this reason, I chose the "alternative fermion" site-basis with the quantum number N. Because of the Heisenberg interaction between the electrons and the localized spin, the quantum numbers N_up and N_down of the "fermion" site-basis are no good quantum numbers anyway.
Despite a lot of trying, I was unable to get the DMRG program running. I'm wondering if there is still some error in my input files (see below) or if I'm trying something which is not supported in the current version. The tutorials found on the homepage, the talks on Alps, and the collection of previous questions did not help me to solve the problem. I have to add that I have little experience with DMRG, so I might be making a fundamental mistake here (does it matter for the code to which site of the chain the impurity couples?).
To be more specific, the DMRG program (Alps version 1.3.2) aborts right after starting with the message "Site basis for type 2 not found and no default exists". The following input files were used:
Parameter file:
LATTICE_LIBRARY="./mylattices.xml" MODEL_LIBRARY="./mymodels.xml"
LATTICE="Gitter_1"
SWEEPS=4 MAXSTATES=100
CONSERVED_QUANTUMNUMBERS="N,Sz" { MODEL="Kondo_Modell" t=1 J=0.5 B=0.01 local_spin=1/2 local_S=1/2 N_total=7 Sz_total=0 }
Lattice library file:
<LATTICES>
<GRAPH name="Gitter_1" vertices="8" edges="7"> <VERTEX id="1" type="0"/> <VERTEX id="2" type="0"/> <VERTEX id="3" type="0"/> <VERTEX id="4" type="0"/> <VERTEX id="6" type="0"/> <VERTEX id="7" type="0"/> <VERTEX id="8" type="0"/> <VERTEX id="5" type="1"/> <EDGE id="1" type="0" source="1" target="2"/> <EDGE id="2" type="0" source="2" target="3"/> <EDGE id="3" type="0" source="3" target="4"/> <EDGE id="4" type="0" source="4" target="6"/> <EDGE id="5" type="0" source="6" target="7"/> <EDGE id="6" type="0" source="7" target="8"/> <EDGE id="8" type="1" source="4" target="5"/> </GRAPH>
</LATTICES>
Model library file:
<MODELS>
<SITEBASIS name="spin"> <PARAMETER name="local_spin" default="local_S"/> <PARAMETER name="local_S" default="1/2"/> <QUANTUMNUMBER name="S" min="local_spin" max="local_spin"/> <QUANTUMNUMBER name="Sz" min="-S" max="S"/> <OPERATOR name="Splus" matrixelement="sqrt(S*(S+1)-Sz*(Sz+1))"> <CHANGE quantumnumber="Sz" change="1"/> </OPERATOR> <OPERATOR name="Sminus" matrixelement="sqrt(S*(S+1)-Sz*(Sz-1))"> <CHANGE quantumnumber="Sz" change="-1"/> </OPERATOR> <OPERATOR name="Sz" matrixelement="Sz"/> </SITEBASIS>
<SITEBASIS name="alternative fermion"> <QUANTUMNUMBER name="N" min="0" max="2" type="fermionic"/> <QUANTUMNUMBER name="S" min="N*(2-N)/2" max="N*(2-N)/2"/> <QUANTUMNUMBER name="Sz" min="-S" max="S"/> <OPERATOR name="Splus" matrixelement="1"> <CHANGE quantumnumber="Sz" change="1"/> </OPERATOR> <OPERATOR name="Sminus" matrixelement="1"> <CHANGE quantumnumber="Sz" change="-1"/> </OPERATOR> <OPERATOR name="Sz" matrixelement="Sz"/> <OPERATOR name="c_down" matrixelement="1"> <CHANGE quantumnumber="N" change="-1"/> <CHANGE quantumnumber="Sz" change="+1/2"/> <CHANGE quantumnumber="S" change="-1/2"/> </OPERATOR> <OPERATOR name="cdag_down" matrixelement="1"> <CHANGE quantumnumber="N" change="1"/> <CHANGE quantumnumber="Sz" change="-1/2"/> <CHANGE quantumnumber="S" change="1/2"/> </OPERATOR> <OPERATOR name="c_up" matrixelement="1"> <CHANGE quantumnumber="N" change="-1"/> <CHANGE quantumnumber="Sz" change="-1/2"/> <CHANGE quantumnumber="S" change="-1/2"/> </OPERATOR> <OPERATOR name="cdag_up" matrixelement="1"> <CHANGE quantumnumber="N" change="1"/> <CHANGE quantumnumber="Sz" change="1/2"/> <CHANGE quantumnumber="S" change="1/2"/> </OPERATOR> <OPERATOR name="n" matrixelement="N"/> <OPERATOR name="n_up" matrixelement="N*(Sz+1/2)"/> <OPERATOR name="n_down" matrixelement="N*(1/2-Sz)"/> </SITEBASIS>
<BONDOPERATOR name="fermion_hop" source="x" target="y"> cdag_up(x)*c_up(y)+cdag_up(y)*c_up(x)+cdag_down(x)*c_down(y) +cdag_down(y)*c_down(x) </BONDOPERATOR>
<BONDOPERATOR name="exchange" source="x" target="y"> Sz(x)*Sz(y)+1/2*(Splus(x)*Sminus(y)+Sminus(x)*Splus(y)) </BONDOPERATOR>
<BASIS name="Kondo_Basis"> <SITEBASIS type="0" ref="alternative fermion"/> <SITEBASIS type="1" ref="spin"/> <CONSTRAINT quantumnumber="N" value="N_total"/> <CONSTRAINT quantumnumber="Sz" value="Sz_total"/> </BASIS>
<HAMILTONIAN name="Kondo_Modell"> <PARAMETER name="t" default="1"/> <PARAMETER name="J" default="0.5"/> <PARAMETER name="B" default="0.1"/> <BASIS ref="Kondo_Basis"/> <SITETERM type="0" site="i"> B*Sz(i) </SITETERM> <SITETERM type="1" site="i"> B*Sz(i) </SITETERM> <BONDTERM type="0" source="i" target="j"> t*fermion_hop(i,j) </BONDTERM> <BONDTERM type="1" source="i" target="j"> J*exchange(i,j) </BONDTERM> </HAMILTONIAN>
</MODELS>
In the model library, I only added the "Kondo_Basis" and the "Kondo_Modell" entries. The rest is directly taken from the standard model library.
The flexibility of Alps (defining your own lattices and models), as well as the possibility to quickly use different methods is really amazing. However, especially in view of the multitude of options some more examples in the documentation would be really helpful.
Best regards,
Martin Hoeck
comp-phys-alps-users@lists.phys.ethz.ch