Page 1 of 1

### Define spin-1 Boson site

Posted: 02 Apr 2020, 01:10
Dear Community,

How we can define the spin-1 Boson site for the following Hamiltonian:

$$H = - t \sum_{i, \sigma} \left(b^\dagger_{i, \sigma} b_{i+1, \sigma} + H.c. \right) + U_1 \sum_i n_{i, \sigma}\left(n_{i, \sigma}-1\right) + U_2 \sum_i \mathbf{S}_i^2$$

where spin operator $$\mathbf{S}_i = \sum_{\sigma,\sigma'} b^\dagger_{\sigma,\sigma'} S_{\sigma,\sigma'} b_{\sigma,\sigma'}$$, with standard spin-1 matrice $$S_{\sigma,\sigma'}$$.

Is it right like this?

Code: Select all

        # Set site
boson_site_1 = BosonSite(Nmax=n_max, conserve='N')      # spin component 1
boson_site_2 = BosonSite(Nmax=n_max, conserve='N')      #  spin component 0
boson_site_3 = BosonSite(Nmax=n_max, conserve='N')      #  spin component -1

# Set lattice
lat = Lattice([L], [boson_site_1, boson_site_2, boson_site_3], bc=bc, bc_MPS=bc_MPS)

# Add terms of the Hamiltonian
self.add_coupling(-t,0,'Bd',0,'B',1)
self.add_coupling(-t,1,'Bd',1,'B',1)
self.add_coupling(-t,2,'Bd',2,'B',1)   

How to define spin operators and add Last term when adding terms of the Hamiltonian?

### Re: Define spin-1 Boson site

Posted: 05 May 2020, 21:17
steven_tao wrote: 02 Apr 2020, 01:10 where spin operator $$\mathbf{S}_i = \sum_{\sigma,\sigma'} b^\dagger_{\sigma,\sigma'} S_{\sigma,\sigma'} b_{\sigma,\sigma'}$$, with standard spin-1 matrice $$S_{\sigma,\sigma'}$$.
I guess you meant the usual definiton
$$S^\alpha_i = \sum_{\sigma,\sigma'} (b^\alpha_{i,\sigma})^\dagger S^\alpha_{\sigma,\sigma'} b_{i, \sigma'}$$, with $$\alpha = x,y,z$$.

Given that, you can evaluate what $$\mathbf{S}_i^2 \equiv S^x_i S^x_i + S^y_i S^y_i +S^z_i S^z_i$$ evaluates to in terms of boson-operators: basically a sum of 4-body terms with prefactors.
You can even try to evaluate that numerically, but I would highly recommend to at least very carfully check the results
Make your model a tenpy.models.model.MultiCouplingModel and add the corresponding terms with add_multi_coupling.

Alternatively, you can group those sites into a single Site class, similar as it is done for the tenpy.networks.site.SpinFullFermionSite - this allows to define the spin operators as "onsite" operators.
The drawback: in particular if you want to use n_max > 2, this will quickly result in very large local dimensions, and make DMRG very costly.

Finally, you could try a mix of both approaches:
Group the sites temporarily for creating the hamiltonian, and then split the MPO after creation. This is, however, not implemented at the moment - you would need to write something similar as group_split for the MPO class, which takes the "identity" operators properly into account.

Overall, I'd recommend the first approach: evaluate $$\mathbf{S}_i^2$$ and use the MultiCouplingModel.