I am working on a complex model where the theoretical slope of the charge pumping should be 2. I have written what I believe to be the correct code, but I am encountering some issues. The parameters I am using to calculate the charge-pump are as follows: I am taking 21 and 31 points within a 2*pi period.
Code: Select all
dmrg_params = {
'mixer': True, # setting this to True helps to escape local minima
'mixer_params': {
'amplitude': 1.e-5,
'decay': 1.2,
'disable_after': 4
},
'trunc_params': {
'svd_min': 1.e-10
#'chi_max': 7000
},
'chi_list': {
0: 80,
4: 100,
8: 200,
12: 400,
16: 800,
20: 1000,
24: 2000,
},
'max_E_err': 1.e-9,
'max_S_err': 1.e-6,
'norm_tol': 1.e-6,
'max_sweeps': 80,
#'max_sweeps': 46,
'N_sweeps_check': 2,
'update_env':20,
}
When I take 21 points and 31 points, when I calculate the slope only for the first two points, the slope is around 1.73 for a 21-point period and around 1.82-1.88 for a 31-point period. This is obviously much better than the 1.6 slope obtained after one full period. However, as soon as the third and fourth points come out, the slope immediately drops significantly to around 1.6. By observing the contents of the output, it can be seen that although I specified a maximum scan of 80 times, the corresponding scan counts for each point in the charge-pump are 70, 60, 60, 50, 50, 40, etc. Does this mean that in the process of computing the charge-pump, except for the first point due to the use of mixer+chi_list, the subsequent points are likely to fall into a local minimum?
I have previously tried another charge_pump model where the theoretical slope should also be 1/3. Initially, the slope was -0.28, but by adjusting the bond size of chi_list to a larger value (600-1000) and increasing the update_env(2-10-20), I eventually obtained a better slope of -0.304.
Regarding my specific questions above, is it possible to adjust certain parameters to obtain a more accurate charge-pump that matches the expected value?