Menu

OSMPS not converged for spin-orbit term in fermi hubbard model

Technical
liang
2015-03-27
2015-03-31
  • liang

    liang - 2015-03-27

    Dear All,
    OSMPS runs well in two component fermi hubbard model until I add spin-orbit coupling term. The results cannot be converged though I have tried more convegence parameters. So What's wrong with the problme?

    Best

    Jun-Jun Liang

    The spin-robit coupling is as following:
    \lambda \sum_{l}(a_{l\uparrow}^\dag a_{l+1 \downarrow}-a_{l\downarrow}^\dag a_{l+1 \uparrow}+H.c.)

    and the content in my python file is given here and I only keep spin-orbit and Zeeman term in Fermi model:

    ----------------------------------------------------------------

    import MPSPyLib as mps
    import numpy as np
    import matplotlib.pyplot as plt
    PostProcess=False

    Build operators

    Operators=mps.BuildFermiOperators(Nmax=2,Nmin=0,spin=0.5)

    Define Hamiltonian MPO

    H=mps.MPO()

    SOC and Zeeman term

    Operators['zeeman']=(Operators['nf_0']-Operators['nf_1'])
    H.AddMPOTerm(Operators,'site','zeeman',hparam='h',weight=1.0)
    H.AddMPOTerm(Operators,'bond',['fdagger_0','f_1'],hparam='soc',weight=1.0,Phase=True)
    H.AddMPOTerm(Operators,'bond',['fdagger_1','f_0'],hparam='soc',weight=-1.0,Phase=True)

    Density of particles

    myObservables.AddObservable(Operators,'nf_0','site','n_up')
    myObservables.AddObservable(Operators,'nf_1','site','n_down')
    H.printMPO()

    Convergence data

    myConv=mps.MPSConvergenceParameters(max_bond_dimension=200,max_num_sweeps=50,max_outer_sweeps=15)
    L=10
    N=5

    Zeeman and SOC term

    h = 0.1
    soc = 0.01

    parameters=[{
    'job_ID' : 'SpinFermions_',
    'unique_ID' : 'soc_'+str(soc),
    'Write_Directory' : 'TMP/',
    'Output_Directory' : 'OUTPUTS/',
    #System size and Hamiltonian parameters
    'L' : L,
    'h' : h,
    'verbose' : 2,
    'soc' : soc,
    #ObservablesConvergence parameters
    'Abelian_generators' : ['nftotal']
    ,
    'Abelian_quantum_numbers' : [N],
    'MPSObservables' : myObservables,
    'MPSConvergenceParameters' : myConv
    }]

    Write Fortran-readable main files

    MainFiles=mps.WriteFiles(parameters,Operators,H)

    Run the simulations

    if not PostProcess:
    mps.runMPS(MainFiles,RunDir='./')

     
    • Michael L Wall

      Michael L Wall - 2015-03-27

      Dear Jun-Jun Liang,

      This runs fine and converges when I use the trunk svn version of OSMPS
      (revision [47]). If your version of OSMPS is older than this, I recommend
      downloading the most recent svn version and trying again. Also, note that
      OSMPS automatically enforces Hermiticity of the Hamiltonian; you don't need
      to add the Hermitian conjugate. Let us know if you still experience
      problems.

      -Michael

      On Fri, Mar 27, 2015 at 4:26 AM, liang liangjj929@users.sf.net wrote:

      Dear All,
      OSMPS runs well in two component fermi hubbard model until I add
      spin-orbit coupling term. The results cannot be converged though I have
      tried more convegence parameters. So What's wrong with the problme?

      Best

      Jun-Jun Liang

      The spin-robit coupling is as following:
      \lambda \sum_{l}(a_{l\uparrow}^\dag a_{l+1
      \downarrow}-a_{l\downarrow}^\dag a_{l+1 \uparrow}+H.c.)

      and the content in my python file is given here and I only keep spin-orbit
      and Zeeman term in Fermi model:


      import MPSPyLib as mps
      import numpy as np
      import matplotlib.pyplot as plt
      PostProcess=False
      Build operators

      Operators=mps.BuildFermiOperators(Nmax=2,Nmin=0,spin=0.5)
      Define Hamiltonian MPO

      H=mps.MPO()
      SOC and Zeeman term

      Operators['zeeman']=(Operators['nf_0']-Operators['nf_1'])
      H.AddMPOTerm(Operators,'site','zeeman',hparam='h',weight=1.0)
      H.AddMPOTerm(Operators,'bond',['fdagger_0','f_1']
      ,hparam='soc',weight=1.0,Phase=True)
      H.AddMPOTerm(Operators,'bond',['fdagger_1','f_0']
      ,hparam='soc',weight=-1.0,Phase=True)
      Density of particles

      myObservables.AddObservable(Operators,'nf_0','site','n_up')
      myObservables.AddObservable(Operators,'nf_1','site','n_down')
      H.printMPO()
      Convergence data

      myConv=mps.MPSConvergenceParameters(max_bond_dimension=200,max_num_sweeps=50,max_outer_sweeps=15)
      L=10
      N=5
      Zeeman and SOC term

      h = 0.1
      soc = 0.01

      parameters=[{
      'job_ID' : 'SpinFermions_',
      'unique_ID' : 'soc_'+str(soc),
      'Write_Directory' : 'TMP/',
      'Output_Directory' : 'OUTPUTS/',

      System size and Hamiltonian parameters

      'L' : L,
      'h' : h,
      'verbose' : 2,
      'soc' : soc,

      ObservablesConvergence parameters

      'Abelian_generators' : ['nftotal'],
      'Abelian_quantum_numbers' : [N],
      'MPSObservables' : myObservables,
      'MPSConvergenceParameters' : myConv
      }]
      Write Fortran-readable main files

      MainFiles=mps.WriteFiles(parameters,Operators,H)
      Run the simulations

      if not PostProcess:
      mps.runMPS(MainFiles,RunDir='./')


      OSMPS not converged for spin-orbit term in fermi hubbard model
      https://sourceforge.net/p/openmps/discussion/tech/thread/84f644e4/?limit=25#d29a


      Sent from sourceforge.net because you indicated interest in
      https://sourceforge.net/p/openmps/discussion/tech/

      To unsubscribe from further messages, please visit
      https://sourceforge.net/auth/subscriptions/

       
  • liang

    liang - 2015-03-28

    Dear Michael,
    svn version of OSMPS(47) do works, thank you.
    And I notice that the augument of BuildFermiOperators is little different, in version (47) you define BuildFermiOperators(Nmax=1, Nmin=0, spin=0, nFlavors=1, maxFilling), a new augument 'maxFilling' is added. I have to take maxFilling to be 1 in the definition, If not so a error about maxFilling will appear. Can maxFilling always be one?
    Best regards
    Jun-Jun Liang

     
    • Anonymous

      Anonymous - 2015-03-28

      Hi Jun-Jun,
      I did not see the maxFilling argument in the method BuildFermiOperators. I believe that maxFilling is for Bosons, not for Fermions.

      Wei

       
      • liang

        liang - 2015-03-30

        Dear Wei,
        I find maxFilling in the definition of BuildFermiOperators in file at address: svn://svn.code.sf.net/p/openmps/code/ openmps-code/branches/WallImprovementsBranch/MPSPyLib/Ops.py:

        def BuildFermiOperators(Nmax=1, Nmin=0, spin=0, nFlavors=1):
        """ Build the Fermi operators f, fdagger, nftotal, FermiPhase, and identity (I).
        Also build the "phased" operators fP=f.FermiPhase and fdaggerP=fdagger.FermiPhase
        provided they are linearly independent from f and fdagger.
        If spin is nonzero then also build fsz, fsplus, and fsminus.
        If nFlavors is greater than one then the fermi operators contain
        a flavor index Operators['f_flavor'] where flavor=0...nFlavors-1.
        If spin is nonzero and the fermions are flavorless then the fermi operators contain
        a spin index Operators['f_spin'] where spin=0...2spin.
        If both spin and nFlavors are nontrivial then a set of spinful+flavorful fermi operators are built
        with the indexing Operators['b_flavor_spin'] where flavor and spin are as above.
        Parameters:
        Nmax is the maximum total number of fermions allowed on-site.
        Nmin is the minimum total number of fermions allowed on-site.
        spin is the spin of the fermions.
        nFlavors is the number of "flavors" of fermions-basically the number
        of non-spin internal degrees of freedom."""
        global localDimension
        if int(2
        spin)==2spin:
        spinSize=int(2
        spin+1)
        else:
        raise Exception("2spin must be an integer in BuildFermiOperators!")
        ninternal=spinSize
        nFlavors
        if ninternal==1:
        if Nmax>1:
        raise Exception("Spinless fermions cannot have Nmax greater than 1!")
        Operators=BuildScalarOperators(Nmax,Nmin,True)
        localDimension=Nmax-Nmin+1
        else:
        if Nmax>ninternal:
        print "Warning: Nmax set higher than nFlavorsspinSize in BuildFermiOperators!"
        print "Nmax set to nFlavors
        spinSize!"
        if spinSize==1:
        Operators=BuildFlavorfulFermiOperators(Nmax,Nmin,nFlavors)
        localDimension=0
        for n in range(Nmin,Nmax+1):
        localDimension=localDimension+mult(n,nFlavors,maxFilling)
        else:
        Operators=BuildSpinfulFermiOperators(Nmax,Nmin,spin,nFlavors)
        localDimension=0
        for n in range(Nmin,Nmax+1):
        localDimension=localDimension+mult(n,spinSize*nFlavors,maxFilling)
        return Operators

        Best Regards,
        Jun-Jun

         
  • Daniel Jaschke

    Daniel Jaschke - 2015-03-30

    Dear Jun-Jun,

    I discussed your issue with Wei and there are some points which are unclear to us and we want to be sure that we are discussing on the same basis.

    You mentioned in one of your answers that you have checked out version (r47). Then you copied in the function call "BuildFermiOperators(Nmax=1, Nmin=0, spin=0, nFlavors=1, maxFilling)". This doesn't seem to (r47), analogue to the function in the last post which is different from (r47).
    It is unclear to me, if you're question is about the old code you refer to or if there might be the possibility that the checkout had some error/warning message and stopped.

    I hope we can resolve this issue rapidly so that you can run your simulation. Do not hesitate to ask any further questions.

    Kind regards,

    Daniel

    P.S. In order to check: The version (r47) has the following definition: def BuildFermiOperators(Nmax=1, Nmin=0, spin=0, nFlavors=1):

     
    • liang

      liang - 2015-03-31

      Dear Daniel,
      The version I used is not the newest one(r47), I make a mistake about the address of different version. Thank you.
      Best regards
      Jun-Jun Liang

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.