Menu

calculation error with SSH model

Users
2019-03-12
2019-04-12
  • Weijie Huang

    Weijie Huang - 2019-03-12

    Hello,

    I repeat one article by OSMPS. The Hamiltonian is H=-\sum_{i,\sigma}[(J+\delta J(-1)^i)c_{i,\sigma}^{\dagger}c_{i+1,\sigma}+h.c.]+U\sum_{i}n_{i\uparrow}n_{i\downarrow}. The observation is C_{j}=<s_{0}^{c}s_{j}^{c}> and S_{j}=<s_{0}^{s}s_{j}^{s}> (S_{j}^{C}=\sum_{\sigma}n_{j,\sigma}-1, S_{j}^{S}=n_{\uparrow ,j}-n_{\downarrow ,j})</s_{0}^{s}s_{j}^{s}></s_{0}^{c}s_{j}^{c}>

    I have write the file, the result is not correct when I running OSMPS and watching OUTPUTS. Some correlations are bigger than 1.

    The article and my py.file is posted.

    Kind regards,

    Weijie Huang

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-12

    Hello Weijie,

    I assume you wanted to define

    Operators['Sc']=Operators['nf_0']+Operators['nf_1']-np.eye(Operators['I'].shape[0])

    The observable which is defined in your script has an maximal eigenvalue of about 5.8. Thus, OSMPS can deliver correlations above 1. Does this solve your question?

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-03-13

    Hello Daniel Jaschke,

    The observable has been corrected, but the result is not consistent with the article.

    The article shows that C_{j}=<s_{0}^{c}s_{63}^{c}> is 0.9 , my result is 0.08
    As for j from 1 to 62 ,article is close to zero ,my result is 0.4.</s_{0}^{c}s_{63}^{c}>

    I don't know whether there is something wrong in my py file.

    Kind regards,

    Weijie Huang

     
  • Weijie Huang

    Weijie Huang - 2019-03-13

    Sorry, in my last reply, C_{j}=<s_{0}^{c}s_{j}^{c}> should be replaced by S_{j}=<s_{0}^{s}s_{j}^{s}> . The other is true.</s_{0}^{s}s_{j}^{s}></s_{0}^{c}s_{j}^{c}>

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-13

    Hello Weijie,

    the pdf does not open for me, so I did not have a look into it when replying first. You can use python to be curious what is behind the scenes. It helps understanding OSMPS at the beginning to print an operator here and there.

    • The first things you need to change is maximal occupation when generating your operators in BuildFermiOperators. Switch from one to two. This is the total number of particles, so right now you can not have a spin up and down on one site at the same time.
    • Then, your operator nupndown has actually non-zero entries.
    • The paper is at unit filling, half spin up, half spin down. You have to define these quantum numbers. See the following lines for your dictionary in the parameters list.

    'Abelian_generators' : ['nf_0', 'nf_1'],
    'Abelian_quantum_numbers' : [L // 2, L // 2],

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-03-14

    Hello Daniel Jaschke,

    The program works well, and the result is correct .I'm very sorry to take up your valuable time.
    It seems that I should read the document once more. I will try to understand the contents.

    Best regards,

    Weijie Huang

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-14

    Hello Weijie,

    no problem, we are always happy to help. I just thought you would be able to do some crazy stuff with OSMPS faster if you get some of the solution yourself, e.g., printing the operators in the Hamiltonian. So please don't hesitate to ask another question when you have one.

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-03-18

    Hello Daniel,

    I continue repeating this article. I want to know if I could add a local chemical potential at site 0 in dynamical system. I watch the example, only the parameter in the Hamiltonian can be changed in time.

    Kind regards

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-19

    Hello Weijie,

    did you try adding a numpy array as coupling? If you pass a scalar, OSMPS assumes you have the same coupling on every term independent on the position in the chain. If you use a 1d numpy array with the length of your system, you get spatially dependent couplings. (For terms spanning multiple sites, the coupling on the first site is taken, e.g., the last entry in your numpy array is ignored for bond terms in an open boundary problem.)

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-03-20

    Hello Daniel,

    I calculate the dynamical system. Py file can run but after long time, I can't get the result, the article and py file as following.

    Best regards,
    Weijie

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-22

    Hello Weijie,

    This is a python problem, not an OSMPS problem. You can see that the usual OUTPUT and TMP folders were not created. If you killed the python script with Ctrl-C, you have probably seen something like that.

    python SSHmodel.py --PostProcess=F
    ^CTraceback (most recent call last):
    File "SSHmodel.py", line 102, in <module>
    main(PostProcess=Post)
    File "SSHmodel.py", line 48, in main
    Vlist[m]=1
    KeyboardInterrupt</module>

    which indicates that you are still in the corresponding loop, which is, in fact, a perfect infinite loop.

    Further things:

    • Use TEBD, Krylov does not work for sudden quenches (assuming it is one). Or TDVP, do not use Krylov, the examples use Krylov for historic reasons.
    • In AddQuench, replace Ufuncdown with Vfunc
    • In your Vfunc, return np.zeros((64)) as 2D arrays throw an error.
    • The value for each parameter in the ground state search is taken from the dictionary. So you might want to set V to np.zeros((64)), too. (But I did not check with the paper.)

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-03-25

    Hello Daniel,

    I have corrected the py file, but the result is not similar with the paper, especially the trend is not similar. But I could not find the result, and I also want to if example about finite temperature and not-Hermitian is exist.

    Best regards,

    Weijie Huang

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-03-29

    Hello Weijie,

    I don't see any post processing of the simulations in your python script; if you have a script printing some error or showing a figure, I have a starting point. Right now, I would have to write the post processing from scratch and still don't know which figure of the paper you want to compare to.

    Quick feedback ... looks like you are using the same value of V in the statics and dynamics. Define a Vdyn in addition to the V and set the quench function to

    def Vfunc(t, Vdyn=Vdyn):
        return Vdyn
    

    Leave the V used for the statics in the definition of the parameter dictionary.

    For your other questions: Finite temperature can be done via an imaginary time evolution; I have some scripts for the research for OSMPS. We can maybe prepare them and put them somewhere. Do you mean with non-Hermitian Lindblad equation? Then, have quantum trajectories and MPDOs/LPTNs implemented. The situation with the examples is the same as for the finite temperature. I'll put it on my list.

    Best regards,

    Daniel

     
  • Weijie Huang

    Weijie Huang - 2019-04-08

    Hello Daniel,

    I take some times to read the article once more, and I know where I am wrong. Due to the problem, I would like to know if I get the ground state of file one by osmps, how can I set the ground state to be the initial state of the other file by osmps.

    Best regards,
    Weijie Huang

     
  • Daniel Jaschke

    Daniel Jaschke - 2019-04-12

    Hello Weijie,

    the easiest way to feed one ground state into the dynamics of another simulation in OSMPS is the following: create one python file with one ground state search. You find a .bin in the output folder. You note down the filename. In the next step, you set up the dynamics and set the following entries in your dictionary

    params['MPS'] = False, # MPS in the sense of no ground state search. not in the sense of not using an MPS at all
    params['timeevo_mps_initial'] = 'String of the filename.bin',

    Do not define static convergence parameters or observables. You might have multiple .bin files in your output folder, if you are running multiple convergence parameters, multiple simulations, or excited states. Convergence parameters and excited states are identified with integers before the .bin. Each simulation within a set of simulations is hashed based on their parameters; thus, the strange filenames. You can access the hash of each simulations after you call WriteFiles with params['hash'].

    Some things change on top. You do not have static observables any longer; if one feeds in a state, I assume the measurement outcomes are known. Values such as the local dimension, symmetry usage, symmetry generators, or quantum number are fixed. Changing these will either break the simulation, e.g., local dimension, or have no effect, e.g., quantum numbers.

    There was some example of a simulation starting from a file in the forum on Fermi-Hubbard, I believe. That might be a good place to check if I missed any information here.

    I hope that helps you with regard to this question. I did not forget about some more example files for open systems and finiteT.

    Kind regards,

    Daniel

     

Log in to post a comment.

Monday.com Logo