issp-center-dev / dsqss

DSQSS -- Discrete Space Quantum System Solver
http://www.pasums.issp.u-tokyo.ac.jp/dsqss/
GNU General Public License v3.0
11 stars 3 forks source link

Three- and four-body terms #21

Closed czanoci closed 4 years ago

czanoci commented 4 years ago

Hi!

Thank you for developing this package. I have a quick question about the supported functionality.

I am trying to study a generalization of a transverse-field Ising model on the honeycomb lattice with additional three- and four-spin interactions (e.g S_xS_zS_z). These extra interactions consist of Pauli S_x and S_z operators which act on three or four neighboring sites. Is either DLA or PMWA capable of solving such models?

Thank you!

Cristian

yomichi commented 4 years ago

Hi Cristian, I'm sorry for the late reply.

DSQSS/DLA can treat three or more sites interactions by editing hamiltonian.toml and lattice.dat. https://issp-center-dev.github.io/dsqss/manual/v2.0.1/en/dla/users-manual/input_standard.html#hamiltonian-toml-file https://issp-center-dev.github.io/dsqss/manual/v2.0.1/en/dla/users-manual/input_standard.html#lattice-toml-file-lattice-toml The former specifies the elements of the local hamiltonian (e.g. <+++|SxSzSz|-++> = 0.125) and the latter does the sites where the local hamiltonians will be operated.

However, I think that this model, unfortunately, seems to suffer from the infamous sign problem...

Yuichi

czanoci commented 4 years ago

Hi Yuichi,

Thank you for your reply! I will give this a try.

The model doesn't actually have a sign problem in the regime of parameters that I'm interested in. For example, the three-body term also has a transverse field, so that I am actually trying to implement something like -Sx(1+SzSz). So as long as it can deal with transverse fields and three-body terms, it should be fine.

Cristian

yomichi commented 4 years ago

I see, there is no sign problem, great!

czanoci commented 4 years ago

I actually have one more question. I think I'm missing something about the hamiltonian.toml file.

For now, I am just trying to a simple transverse-field Ising model. Using the available examples, I have implemented the Hamiltonian as follows:

name = "S=1/2 TFIM"
[[interactions]]
N = [ 2, 2,]
type = 0
nbody = 2
[[interactions.elements]]
istate = [ 0, 1,]
fstate = [ 0, 1,]
value = 1.0

[[interactions.elements]]
istate = [ 1, 0,]
fstate = [ 1, 0,]
value = 1.0

[[interactions.elements]]
istate = [ 0, 0,]
fstate = [ 0, 0,]
value = -1.0

[[interactions.elements]]
istate = [ 1, 1,]
fstate = [ 1, 1,]
value = -1.0

[[sites]]
values = [ -0.5, 0.5,]
type = 0
N = 2
[[sites.elements]]
istate = [ 1,]
fstate = [ 0,]
value = 1.0

[[sites.elements]]
istate = [ 0,]
fstate = [ 1,]
value = 1.0

[[sites.sources]]
istate = [ 1,]
fstate = [ 0,]
value = 0.5

[[sites.sources]]
istate = [ 0,]
fstate = [ 1,]
value = 0.5

I compile it with the built-in hypercubic lattice (either 1D or 2D) using the command

dla_alg -l lattice.dat -h hamiltonian.toml

and get the following error trace

Traceback (most recent call last):
  File "/n/home05/czanoci/bin/dla_alg", line 8, in <module>
    sys.exit(main())
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/dla_alg.py", line 168, in main
    distance_only=args.distance_only,
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/dla_alg.py", line 48, in dla_alg
    alg = Algorithm(ham, prob_kernel=prob_kernel, ebase_extra=ebase_extra)
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/algorithm.py", line 340, in __init__
    for hamint in ham.indeed_interactions
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/algorithm.py", line 226, in __init__
    ic = self.make_initialconfiguration(st, inleg, instate)
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/algorithm.py", line 282, in make_initialconfiguration
    W = self.prob_kernel(probs)[incomeindex, :]
  File "/n/home05/czanoci/lib/python2.7/site-packages/dsqss/prob_kernel.py", line 73, in suwa_todo
    while target[indices[j]] == 0.0:

Do you know what might be the problem? I can't quite understand what's missing...

Thank you!

yomichi commented 4 years ago

Suwa-Todo method, which is the default kernel for calculating transition probability, sometimes fails to calculate (maybe this failure comes from not the algorithm but our implementation). In this case, other kernels such as the heat bath method work. https://issp-center-dev.github.io/dsqss/manual/v2.0.1/en/dla/users-manual/generator.html#algorithm-file-generator-dla-alg

czanoci commented 4 years ago

I was able to successfully compile it with 'heat bath' and 'metropolis' algorithms, but neither of them give the correct answer. Even with 10,000 iterations, the ground state energy that the algorithm finds just completely ignores the transverse field.

yomichi commented 4 years ago

Thank you for reporting, I reproduced the problem. I found that DSQSS/DLA does not hold ergodicity for models with a transverse field as shown in the following sketch.

tmp

(Treating the transverse field in the two-site operator (e.g., Ising term SzSz) cannot solve this problem)

I think that to enable the worm heads to represents not only S+/S- but also the identity can solve this, but this change needs a bit widely fixes in the code (e.g., the probabilities of pair-creation/pair-annihilation of worm heads.) Of course, this is a very important problem, but to be honest, I have little time to tackle this...

czanoci commented 4 years ago

Thank you for looking into this! I completely understand that dealing with the transverse field is a whole separate issue that requires modifying the code.