LupoA / Grid

Data parallel C++ mathematical object library
GNU General Public License v2.0
0 stars 2 forks source link

Sp2n/unify gaugeimpltypes #20

Closed LupoA closed 1 year ago

LupoA commented 1 year ago

Addressing #2 and #12.

ProjectOnGaugeGroup was previously defined to take input lattice objects, and couldn't be used into Grid/qcd/action/gauge/GaugeImplTypes.h. It is now expanded to take iScalar, iVector and iMatrix inputs.

The new function in Tensors_Ta.h is SpTa. It performs a Gran-Schmidt and then Ta the result. This is tested in tests/sp2n/Test_project_on_Sp. The Group-aware function is taProj which is defined in /Grid/qcd/utils/GaugeGroup.h.

chillenzer commented 1 year ago

Hi, thanks Ed for the suggestions. @LupoA, please fix them. We could even go for clang-formating? I think I did that anyways for the files I changed.

Okay, the actual point of this comment is that Test_project_on_Sp fails on my machine.

[...]
Grid : Message : 1.225777 s : Check that Omega U Omega = conj(U)
Grid : Message : 1.225899 s : Omega U Omega - conj(U) = nan
Test_project_on_Sp: ../../../tests/sp2n/Test_project_on_Sp.cc:234: int main(int, char **): Assertion `norm2(aux) < 1e-8' failed.
[lenz-workstation:59127] *** Process received signal ***
[lenz-workstation:59127] Signal: Aborted (6)
[lenz-workstation:59127] Signal code:  (-6)
[lenz-workstation:59127] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7fe4fce5f090]
[lenz-workstation:59127] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fe4fce5f00b]
[lenz-workstation:59127] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fe4fce3e859]
[lenz-workstation:59127] [ 3] /lib/x86_64-linux-gnu/libc.so.6(+0x22729)[0x7fe4fce3e729]
[lenz-workstation:59127] [ 4] /lib/x86_64-linux-gnu/libc.so.6(+0x33fd6)[0x7fe4fce4ffd6]
[lenz-workstation:59127] [ 5] ./Test_project_on_Sp[0x409cfa]
[lenz-workstation:59127] [ 6] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fe4fce40083]
[lenz-workstation:59127] [ 7] ./Test_project_on_Sp[0x40528e]
[lenz-workstation:59127] *** End of error message ***
make[2]: *** [Makefile:711: check] Aborted (core dumped)
make[2]: Leaving directory '/home/lenz/workspace/Grid_spn/build/tests/sp2n'
make[1]: *** [Makefile:569: check-recursive] Error 1
make[1]: Leaving directory '/home/lenz/workspace/Grid_spn/build/tests'
make: *** [Makefile:530: check-recursive] Error 1

Could someone try to reproduce this?

LupoA commented 1 year ago

@chillenzer is it a cpu or gpu build?

LupoA commented 1 year ago

This might be irrelevant but since I can't reproduce the error it might still worth saying

the function SpTa which seems to be breaking is not that different from ProjectOnSpGroup, yet you pass the assertion on line 72. One difference between the failing SpTa and the successful ProjectOnSpGroup is in their return value.

From Grid/tensors/Tensor_Ta.h: lines 75, 83,145 return Ta(ret); line 227, 235, 300 return ret;

chillenzer commented 1 year ago
$ ../configure --enable-simd=AVX --enable-comms=mpi-auto --enable-Nc=2 --prefix=/home/lenz/workspace/Grid_spn/install/ CXX=/opt/spack/opt/spack/linux-linuxmint20-skylake/gcc-9.4.0/llvm-14.0.5-yphabvl5dllh26n7b5pquzkl4zxq64xl/bin/clang++ CC=/opt/spack/opt/spack/linux-linuxmint20-skylake/gcc-9.4.0/llvm-14.0.5-yphabvl5dllh26n7b5pquzkl4zxq64xl/bin/clang CXXFLAGS=-Wno-macro-redefined --no-create --no-recursion
LupoA commented 1 year ago

@chillenzer it should work now 😇

chillenzer commented 1 year ago

PS: Tests run fine now.

chillenzer commented 1 year ago

Will have a closer look in the near future. But one thing I found is that there were inconsistent changes in the test file concerning the conditions on sp(2N) algebra: The original version was

( W    X   )
( X* -W* )

the current version is

(   W    X   )
(  -X^*  W^* )

and wikipedia claims it to be

(   W   Y      )
(   X  -W^* )

where X and Y are symmetric, I think. What is the correct one?

LupoA commented 1 year ago

@chillenzer thanks for having a look! They are both correct, before and after, they are just checking different things: before the test was probing the block structure of hermitian members of the algebra, now we probe anti-hermitian elements, making the block structure of the algebra look similar to the block structure of the group. The change is due to the fact the we are testing SpTa(ntihermitian) and not a generic projection on the (hermitian) algebra.