evanberkowitz / two-dimensional-gasses

Let's crush it
0 stars 0 forks source link

Sanity check of the whole pipeline #5

Closed evanberkowitz closed 1 year ago

evanberkowitz commented 1 year ago

We should establish some sanity checks on the entire many-body pipeline. This is, of course, very difficult.

Here are some ideas, both of which rely on inserting number- and spin-z projection operators to measure things in the canonical ensemble.

Are there other approaches where we can check something "honest" in a grand-canonical expectation value?

evanberkowitz commented 1 year ago

Here are some results for nx=ny=5, nt=24, beta=1, mu=-2, h=0, V=(-5)*LegoSphere([0,0]):

I did 1000 configurations using a 50-step Omelyan MD integrator.

As a function of Monte Carlo time, here's the action

Screen Shot 2022-10-25 at 10 29 36

total auxiliary field

Screen Shot 2022-10-25 at 10 31 19

and total particle number (calculated with the fermionic observable)

Screen Shot 2022-10-25 at 10 32 19

We can compare the total particle number computed via a fermionic and bosonic auxiliary-field observable.

Screen Shot 2022-10-25 at 10 32 47

I need to

The observables are

so that seems promising, in terms of having good overlap with the two-particle sector.

Using a canonical projection to a definite sector of N particles I can measure the particle number and find good agreement

N=1 (1+2.367357929145847e-16j)
N=2 (2.0000000000000004+1.3638606258625583e-16j)
N=3 (2.999999999999999+2.760930113688608e-16j)
N=4 (4.000000000000003+2.5563137158560218e-15j)
N=5 (5.000000000000002+1.053870746602612e-14j)
N=6 (6.000000000000004-1.992214989353008e-14j)
N=7 (7.000000000000166+1.435257743085027e-16j)
N=8 (7.999999999999713+1.257294896393592e-13j)
N=9 (9.000000000002409-1.125684717679321e-12j)
N=10 (9.999999999990653+3.1727204554850295e-12j)
N=11 (11.000000000054369+8.379313314460578e-11j)
N=12 (11.999999998888338+4.787320460843398e-09j)
N=13 (12.999999996620543+7.950658345960198e-08j)
N=14 (13.999999195293695+3.7639393524914064e-07j)
N=15 (15.000005261885754-1.2004157021821112e-06j)
N=16 (15.99940242805744+0.0011252444840455153j)
N=17 (17.045562479530112+0.009664606343400203j)
N=18 (12.635748577086312+4.960130664044702j)
N=19 (2.1991243630525403-0.44385450914185465j)

all the way up to N=16 or so.

I also need to

evanberkowitz commented 1 year ago

By a7aaa16da6f5f480934d22333df583d63ed96683 the canonical projection interface is well-specified, except for the fact that I haven't yet specified an interface for grand-canonical observables. So it might be worth returning to the implementation of canonical.Projection.{N,S} once that is set (#12). But for now we can consider the canonical projection interface complete, up to the fact that there's only one-body observables so far.

evanberkowitz commented 1 year ago

Actually, I decided that the reproduction of observables in the canonical sector presented as possible correctness risk. It would be better to just code observables once and then use them in different scenarios. I am now refactoring the canonical projection to draw deep down on the observables in the grand-canonical implementation.

evanberkowitz commented 1 year ago

As of 53d7007 we have a working contact operator that has been compared with an independently calculated exact two-body result.