Open RJaBi opened 6 months ago
Some of this is now implemented in the branch ryan_gauge.
Specifically, I realised that I don't need to feed in the a vector of pre-calculated positions, so it just feeds in two sets of paths, a forward and a backward path.
// Only forward paths/links are printed. Obviously the calculation does the backwards as well.
Path 1:
x, y, z, mu, 0 0 0 0 1
link 1:
x, y, z, mu, 0 1 0 0 2
Path 2:
x, y, z, mu, 0 0 0 0 1
link 1:
x, y, z, mu, 0 1 0 0 3
Path 3:
x, y, z, mu, 0 0 0 0 2
link 1:
x, y, z, mu, 0 0 1 0 3
Path 4:
x, y, z, mu, 0 0 0 0 0
link 1:
x, y, z, mu, 1 0 0 0 1
Path 5:
x, y, z, mu, 0 0 0 0 0
link 1:
x, y, z, mu, 1 0 0 0 2
Path 6:
x, y, z, mu, 0 0 0 0 0
link 1:
x, y, z, mu, 1 0 0 0 3
alt plaq calc 10.331249
Type: sumReTrP: nP: Avg:
whole 10.331249 6 1.721875
spatial 3.430829 3 1.143610
temporal 6.900420 3 2.300140
Total execution time: 0.000059s
So you can see that the summed plaquette value in alt plaq calc
matches the one in whole
There is now a makefile in the main directory. This makes the driver program bin/project.c
. For the generic wilson loop above, I added additional functionality to src/wilsonLoops.c
I got generic on-axis loops of size RxT working in #05f26e714dcff46e4ae189acafae935658880246
For off-axis, James Biddle's Phd Thesis: https://digital.library.adelaide.edu.au/dspace/handle/2440/139226 has an 'algorithm'. I don't intend on doing this at this point.
With this latest commit, it would now be possible to do i.e. the static quark potential if one wrote a driver program. Hence we should have enough 'problem' to throw at GPU.
This is great. I will pull the latest copy for testing.
I suggest that we merge this into the main branch. See the pull request raised in #3.
I am concerned that the code is wrong. I have not yet tried to determine why. Below I show outputs for the Gen2l_32x32n954.C
gaugefield for loops of different (spatial) sizes. The 1x1 value is correct however for larger values it becomes negative, which I don't think it should do?
The path length in 1x1 is 2 for 7041404.350977
The path length in 2x1 is 3 for 4965128.693432
The path length in 3x1 is 4 for 3474552.212852
The path length in 4x1 is 5 for 2429428.223726
The path length in 5x1 is 6 for 1698631.647353
The path length in 6x1 is 7 for 1187518.969600
The path length in 7x1 is 8 for 830423.841434
The path length in 8x1 is 9 for 580124.167252
The path length in 9x1 is 10 for 405875.185754
The path length in 10x1 is 11 for 283102.040386
The path length in 11x1 is 12 for 197049.264610
The path length in 12x1 is 13 for 136595.010094
The path length in 13x1 is 14 for 95317.812246
The path length in 14x1 is 15 for 66475.951475
The path length in 15x1 is 16 for 46629.836538
The path length in 16x1 is 17 for 33168.696719
The path length in 17x1 is 18 for 23339.349927
The path length in 18x1 is 19 for 16171.752501
The path length in 19x1 is 20 for 10978.823137
The path length in 20x1 is 21 for 7212.705990
The path length in 21x1 is 22 for 3933.995902
The path length in 22x1 is 23 for 1604.214373
The path length in 23x1 is 24 for 888.926611
The path length in 24x1 is 25 for -922.572816
The path length in 25x1 is 26 for -2401.802087
The path length in 26x1 is 27 for -2205.942842
The path length in 27x1 is 28 for -1756.410139
The path length in 28x1 is 29 for -1950.350110
Does this issue arise in serial execution?
I just tested and the same number is given in serial execution.
My thought is that transitioning to takes a list of positions, and a list of directions and then multiplies those together is likely to make doing arbitrary wilson loops easier. I.e. feed the function the path and then it goes and calculates.
One would pre-calculate the path, and then i.e. each thread on a GPU/CPU would calculate the wilson line along the path.
This would also be useful for staples if we wanted those for some reason.
Two main requirements:
To do a Wilson Loop, one would probably call a Wilson Line function twice on forward and backward paths (conjugate at end).
Do either of you have any thoughts on this approach?