iDMRG shows poor convergence in the 1/3 FCI phase of Fermionic Haldane Model

How do I use this algorithm? What does that parameter do?
Post Reply
XiaohanYang
Posts: 3
Joined: 30 Sep 2024, 13:50

iDMRG shows poor convergence in the 1/3 FCI phase of Fermionic Haldane Model

Post by XiaohanYang »

Hi everyone,
I am trying to reproduce the result, especially the charge pumping result of arXiv:1407.6985. I directly use the module tenpy.models.haldane.FermionicHaldaneModel since it's just the Hamiltonian eq(1) in arXiv:1407.6985. To be concrete, let me show you the Hamiltonian:
\(H = -t_1\sum_{<ij>}c_i^\dagger c_j-t_2\sum_{<<ij>>}e^{i\phi_{ij}}c_i^\dagger c_j+m\sum_u (n_{u,A}-n_{u, B})+V\sum_{u}n_{u, A}n_{u, B}\)
The geometry is an infinite cylinder with circumference \(L_y\) which is the number of unit cells in the y direction(the finite periodic direction). The unit cell of the uMPS includes \(L_y\) lattice unit cells in a leg(\(2L_y\) sites). I have chosen two parameter dictionaries to reproduce Fig.2. of arXiv:1407.6985. They are:

Code: Select all

# Parameter for \nu=1 Chern Insulator
param_CI = {   "bc_MPS": "infinite",
              	"bc_x": "periodic",
            	"bc_y": "cylinder", 
            	"conserve": "N",
            	"Lx": 1,
           	"Ly": 3,
            	"order": "default",
            	"mu": 0.,
            	"V": 0.0,
            	"t1": -1., # leave t2 to be the default value
           	"phi_ext": phi_ext
        	}
# Parameter for \nu=1/3 Fractional Chern Insulator
param_FCI = {   "bc_MPS": "infinite",
              	"bc_x": "periodic",
            	"bc_y": "cylinder", 
            	"conserve": "N",
            	"Lx": 1,
           	"Ly": 6,
            	"order": "default",
            	"mu": 0.,
            	"V": 1.0,
            	"t1": -1., # leave t2 to be the default value
           	"phi_ext": phi_ext
        	}
        
The filling numbers are 1 fermion per lattice unit cell and 1 fermion per 3 lattice cells. These parameters are the same as the two cases in arXiv:1407.6985. The iDMRG for the Chern insulator case converges well with bond dimension 200 and the expected result has been obtained. For the FCI case, however, the iDMRG shows poor convergence in the suggested bond dimension 500. The errors of both energy and entropy fluctuate and cannot converge.

Since in both cases(CI and FCI) the systems are gapped, I think there is no gaplessness problem. I have tried to increase the interaction \(V\) in the FCI case to avoid competing with the metal phase but it doesn't work.

So, I want some suggestions from people who are familiar with iDMRG implementation or FCI systems.

Sincerely,
Xiaohan Yang
XiaohanYang
Posts: 3
Joined: 30 Sep 2024, 13:50

Re: iDMRG shows poor convergence in the 1/3 FCI phase of Fermionic Haldane Model

Post by XiaohanYang »

I give the Two site iDMRG such parameter dictionary:

Code: Select all

dmrg_params = {'mixer': True,
               'mixer_params': {
                    'amplitude': 5.e-5,
                    'decay': 1.1,
                    'disable_after': 100
                }, 
                'trunc_params': {
                    'svd_min': 1.e-10,
                },
                'max_E_err': 1.e-10,
                'max_S_err': 1.e-8,
                'min_sweeps': 10,
                'max_sweeps': 2000,
                'lanczos_params':{
                    'reortho': False, 
                    'N_min':5, 
                    'N_max':500
                },
                'chi_max': 500
            }
XiaohanYang
Posts: 3
Joined: 30 Sep 2024, 13:50

Re: iDMRG shows poor convergence in the 1/3 FCI phase of Fermionic Haldane Model

Post by XiaohanYang »

BTW, I found some insight from DHIMAN002's post:viewtopic.php?p=281&hilit=haldane#p281. In his post, Johannes replied that it may be the case that we need a large uMPS unit cell including several legs of the lattice. I have run the finite DMRG with \(L_y=3\) and \(L_x=30\) for both CI and FCI cases. The Fermion density profiles are:
CI:
CI.png
CI.png (170.05 KiB) Viewed 44609 times
FCI:
FCI.png
FCI.png (214.97 KiB) Viewed 44609 times
You can see that CDW-like order exists in the case of FCI, so I wonder whether I need to use a large MPS unit cell in the infinite case. If the bond dimension is increased, will this CDW order be suppressed? When the system is in the FCI phase, does this CDW order always exist?
bart
Posts: 32
Joined: 23 Jan 2019, 09:35

Re: iDMRG shows poor convergence in the 1/3 FCI phase of Fermionic Haldane Model

Post by bart »

Hi Xiaohan Yang,

Sorry that this reply is a few months late, but just in case it helps you, I wanted to share my thoughts anyway.

I reproduced the results from arXiv:1407.6985 a few years ago, and so I can understand your difficulty with reproducing Fig.2(c). The good news is that it is possible to reproduce Fig.2(c) using TeNPy, however it is significantly more tricky than the other results that they present.

In the notebook FCIs.ipynb from https://github.com/tenpy/tenpy/pull/146 I explain how to reproduce all of the results in this paper. In particular, for Fig.2(c), I also explain all of the traps that I fell into, when I was struggling to reproduce it.

Broadly speaking, here are the things to watch out for:
  • Is the flow adiabatic?
  • Is the \(L_y\) value appropriate?
  • Does the initial product state make a difference?
  • Is the bond dimension large enough?
In the notebook, I explain the choices for each of these parameters step-by-step. The notebook was tried and tested using TeNPy v0.5.0-261-g81b65eb. I have noticed that the charge pumping is sometimes discontinuous using the same parameters with newer versions of TeNPy, which may be related to https://github.com/tenpy/tenpy/issues/317 . I am not sure if this issue is fixed yet.

If you would like to test the notebook using the TeNPy version that I used (which is guaranteed to work), you can do the following:

Code: Select all

$ git checkout v0.5.0-261-g81b65eb
$ bash ./compile.sh
You can then check that your notebook has the correct version of TeNPy, using the commands:

Python: Select all

import tenpy
tenpy.show_config()
Hope this helps you!
Bart
Post Reply