lattice / quda

QUDA is a library for performing calculations in lattice QCD on GPUs.
https://lattice.github.io/quda
Other
279 stars 94 forks source link

Chiral gamma basis and unitarity transformation #157

Closed m-schroeck closed 9 years ago

m-schroeck commented 9 years ago

I'd like to implement the optional usage of a third gamma basis and I would be glad to get some help in finding the unitary transformation which performs the basis change. I'm talking about the chiral basis as used by e.g. Martin Lüscher, "Implementation of the lattice Dirac operator", 2006 (unpublished notes, for details see doc/dirac.ps page 11 in the DD-HMC code package: http://luscher.web.cern.ch/luscher/DD-HMC/).

The chiral basis as used by Lüscher has gamma^C_0,...,gamma^C_3 (0 is time, 'C' to refers to chiral) while QUDA (UKQCD) uses gamma^Q_1,...,gamma^Q_4 (4 is time).

Now, one possibility is to simply convert as

gamma^C_0 -> gamma^Q_4 gamma^C_1 -> gamma^Q_1 gamma^C_2 -> gamma^Q_2 gamma^C_3 -> gamma^Q_3

Therefor I was able to find the corresponding unitary transformation which carries out the basis change. For completeness, that symmetric transformation reads (cp. to copy_color_spinor.cu):

int s1[4] = {0, 1, 0, 1};
int s2[4] = {2, 3, 2, 3};
RegTypeOut K1[4] = {-kP, -kP, kP, kP};
RegTypeOut K2[4] = { kP,  kP, kP, kP};
for (int s=0; s<Ns; s++) {
  for (int c=0; c<Nc; c++) {
    for (int z=0; z<2; z++) {
      out[(s*Nc+c)*2+z] = K1[s]*in[(s1[s]*Nc+c)*2+z] + K2[s]*in[(s2[s]*Nc+c)*2+z];

Doing it in that way has one problem: gamma_5 collects a minus sign due to the three permutations needed to bring gamma_t (gamma_4 in QUDA) to the front (gamma_0 in the chiral basis). For my personal use (twisted mass) it is sufficient to switch the twisted mass flavor type from plus to minus and vice versa to account for the minus sign. But that's a hack of course.

Possibility number two, which should be the preferred one, aims at transforming like

gamma^C_0 -> gamma^Q_4 gamma^C_1 -> gamma^Q_3 gamma^C_2 -> gamma^Q_2 gamma^C_3 -> gamma^Q_1

i.e. the spatial components are reordered. Then there is no additional minus sign in gamma_5. The problem here is, until now I was not able to find the corresponding unitary transformation. I'm not sure from a theoretical point of view, if there must exist a corresponding transformation, and if yes how to find it.

If you have any idea how to find that transformation, please let me know!

ybyang commented 9 years ago

I believe that one can find the rotation matrix to exchange any two of four gamma matrix, and then change the sign of the ga5. But I don’t have much ideas about how to do it from a theoretical point of view.

Exchange ga1 and ga2 (in quad base) is somehow easy, the rotation matrix is

0 -1 0 0 I 0 0 0 0 0 0 1 0 0 -I 0

On Oct 1, 2014, at 4:24 AM, m-schroeck notifications@github.com wrote:

I'd like to implement the optional usage of a third gamma basis and I would be glad to get some help in finding the unitary transformation which performs the basis change. I'm talking about the chiral basis as used by e.g. Martin Lüscher, "Implementation of the lattice Dirac operator", 2006 (unpublished notes, for details see doc/dirac.ps page 11 in the DD-HMC code package: http://luscher.web.cern.ch/luscher/DD-HMC/).

The chiral basis as used by Lüscher has gamma^C_0,...,gamma^C_3 (0 is time, 'C' to refers to chiral) while QUDA (UKQCD) uses gamma^Q_1,...,gamma^Q_4 (4 is time).

Now, one possibility is to simply convert as

gamma^C_0 -> gamma^Q_4 gamma^C_1 -> gamma^Q_1 gamma^C_2 -> gamma^Q_2 gamma^C_3 -> gamma^Q_3

Therefor I was able to find the corresponding unitary transformation which carries out the basis change. For completeness, that symmetric transformation reads (cp. to copy_color_spinor.cu):

int s1[4] = {0, 1, 0, 1}; int s2[4] = {2, 3, 2, 3}; RegTypeOut K1[4] = {-kP, -kP, kP, kP}; RegTypeOut K2[4] = { kP, kP, kP, kP}; for (int s=0; s<Ns; s++) { for (int c=0; c<Nc; c++) { for (int z=0; z<2; z++) { out[(s_Nc+c)_2+z] = K1[s]_in[(s1[s]_Nc+c)_2+z] + K2[s]_in[(s2[s]_Nc+c)_2+z]; Doing it in that way has one problem: gamma_5 collects a minus sign due to the three permutations needed to bring gamma_t (gamma_4 in QUDA) to the front (gamma_0 in the chiral basis). For my personal use (twisted mass) it is sufficient to switch the twisted mass flavor type from plus to minus and vice versa to account for the minus sign. But that's a hack of course.

Possibility number two, which should be the preferred one, aims at transforming like

gamma^C_0 -> gamma^Q_4 gamma^C_1 -> gamma^Q_3 gamma^C_2 -> gamma^Q_2 gamma^C_3 -> gamma^Q_1

i.e. the spatial components are reordered. Then there is no additional minus sign in gamma_5. The problem here is, until now I was not able to find the corresponding unitary transformation. I'm not sure from a theoretical point of view, if there must exist a corresponding transformation, and if yes how to find it.

If you have any idea how to find that transformation, please let me know!

— Reply to this email directly or view it on GitHub.

m-schroeck commented 9 years ago

Changing only two matrices is not enough. If you want to follow the ansatz of exchanging matrices, the outline is as follows. Taking into account that I know the transformation U,

U: gamma^C_0 -> gamma^Q_4 U: gamma^C_1 -> gamma^Q_1 U: gamma^C_2 -> gamma^Q_2 U: gamma^C_3 -> gamma^Q_3

one still has to perform three exchanges (R1: 1<->2, R2: 1<->3 and R3: 2<->3) to end up with

V: gamma^C_0 -> gamma^Q_4 V: gamma^C_1 -> gamma^Q_3 V: gamma^C_2 -> gamma^Q_2 V: gamma^C_3 -> gamma^Q_1.

And each one of these three exchanging transformations R1, R2, R3 have to be applied to all gamma_i, so that at the end

V = U * R3 * R2 * R1.

So this is certainly a valid approach, but I think the difficulty lies in leaving the other matrices (all but the two to be exchanged) invariant when applying an exchange matrix.

m-schroeck commented 9 years ago

I have implemented the chiral gamma basis as:

\gamma1 = {{0,0,0,-I},{0,0,-I,0},{0,I,0,0},{I,0,0,0}} \gamma2 = {{0,0,0,-1},{0,0,1,0},{0,1,0,0},{-1,0,0,0}} \gamma3 = {{0,0,-I,0},{0,0,0,I},{I,0,0,0},{0,-I,0,0}} \gamma4 = {{0,0,-1,0},{0,0,0,-1},{-1,0,0,0},{0,-1,0,0}} \gamma5 = \gamma1...\gamma4 = diag{-1,-1,1,1}.

View in WolframAlpha http://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427e7jjqdmhnr7

(commit 5c6cf4cfb81787be5679fc31a93befaebaf4a5f4)

kostrzewa commented 7 years ago

This is a problem which may surface again, as far as I can tell. When QUDA (or another library, QPhiX, say) is used to do HMC using a red-black preconditioned effective action with a code which has a different gamma convention AND a different ordering of dimensions.

For exchanging between the chiral and the DeGrand-Rossi basis, while exchanging, at the same time, Q_1 and Q_3:

gamma^C_0 -> gamma^Q_4 = V^dagger gamma^C_0 V gamma^C_1 -> gamma^Q_3 = V^dagger gamma^C_1 V gamma^C_2 -> gamma^Q_2 = V^dagger gamma^C_2 V gamma^C_3 -> gamma^Q_1 = V^dagger gamma^C_3 V

The required similarity transformation is, as far as I can tell:

       1/      1 -1 0  0
V =  sqrt(2)   0  0 1  1
               0  0 1 -1
               1  1 0  0 

where it might be that the rows need to be reordered.

However, if one now also exchanges the X and Z dimensions in the Dirac operator, even with the above transformation, the action of the Dirac operator is not preserved, of course...