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:
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.
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['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
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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(2spin)==2spin:
spinSize=int(2spin+1)
else:
raise Exception("2spin must be an integer in BuildFermiOperators!")
ninternal=spinSizenFlavors
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 nFlavorsspinSize!"
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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):
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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='./')
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 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
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
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(2spin)==2spin:
spinSize=int(2spin+1)
else:
raise Exception("2spin must be an integer in BuildFermiOperators!")
ninternal=spinSizenFlavors
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 nFlavorsspinSize!"
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
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):
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