|
3 | 3 | from mpi4py import MPI
|
4 | 4 | import numpy
|
5 | 5 |
|
6 |
| -from .mpi_file import getSublatticeSize, getNeighbourRank |
| 6 | +from ._mpi_file import getSublatticeSize, getNeighbourRank |
7 | 7 |
|
8 | 8 | Nd, Nc = 4, 3
|
9 | 9 |
|
@@ -72,30 +72,12 @@ def gaugeLexicoPlaquette(latt_size: List[int], grid_size: List[int], gauge: nump
|
72 | 72 | extended[:, -1, :-1, :-1, :-1] = buf
|
73 | 73 |
|
74 | 74 | plaq = numpy.zeros((6))
|
75 |
| - plaq[0] = numpy.vdot( |
76 |
| - numpy.linalg.matmul(gauge[0], extended[1, :-1, :-1, :-1, 1:]), |
77 |
| - numpy.linalg.matmul(gauge[1], extended[0, :-1, :-1, 1:, :-1]), |
78 |
| - ).real |
79 |
| - plaq[1] = numpy.vdot( |
80 |
| - numpy.linalg.matmul(gauge[0], extended[2, :-1, :-1, :-1, 1:]), |
81 |
| - numpy.linalg.matmul(gauge[2], extended[0, :-1, 1:, :-1, :-1]), |
82 |
| - ).real |
83 |
| - plaq[2] = numpy.vdot( |
84 |
| - numpy.linalg.matmul(gauge[1], extended[2, :-1, :-1, 1:, :-1]), |
85 |
| - numpy.linalg.matmul(gauge[2], extended[1, :-1, 1:, :-1, :-1]), |
86 |
| - ).real |
87 |
| - plaq[3] = numpy.vdot( |
88 |
| - numpy.linalg.matmul(gauge[0], extended[3, :-1, :-1, :-1, 1:]), |
89 |
| - numpy.linalg.matmul(gauge[3], extended[0, 1:, :-1, :-1, :-1]), |
90 |
| - ).real |
91 |
| - plaq[4] = numpy.vdot( |
92 |
| - numpy.linalg.matmul(gauge[1], extended[3, :-1, :-1, 1:, :-1]), |
93 |
| - numpy.linalg.matmul(gauge[3], extended[1, 1:, :-1, :-1, :-1]), |
94 |
| - ).real |
95 |
| - plaq[5] = numpy.vdot( |
96 |
| - numpy.linalg.matmul(gauge[2], extended[3, :-1, 1:, :-1, :-1]), |
97 |
| - numpy.linalg.matmul(gauge[3], extended[2, 1:, :-1, :-1, :-1]), |
98 |
| - ).real |
| 75 | + plaq[0] = numpy.vdot(gauge[0] @ extended[1, :-1, :-1, :-1, 1:], gauge[1] @ extended[0, :-1, :-1, 1:, :-1]).real |
| 76 | + plaq[1] = numpy.vdot(gauge[0] @ extended[2, :-1, :-1, :-1, 1:], gauge[2] @ extended[0, :-1, 1:, :-1, :-1]).real |
| 77 | + plaq[2] = numpy.vdot(gauge[1] @ extended[2, :-1, :-1, 1:, :-1], gauge[2] @ extended[1, :-1, 1:, :-1, :-1]).real |
| 78 | + plaq[3] = numpy.vdot(gauge[0] @ extended[3, :-1, :-1, :-1, 1:], gauge[3] @ extended[0, 1:, :-1, :-1, :-1]).real |
| 79 | + plaq[4] = numpy.vdot(gauge[1] @ extended[3, :-1, :-1, 1:, :-1], gauge[3] @ extended[1, 1:, :-1, :-1, :-1]).real |
| 80 | + plaq[5] = numpy.vdot(gauge[2] @ extended[3, :-1, 1:, :-1, :-1], gauge[3] @ extended[2, 1:, :-1, :-1, :-1]).real |
99 | 81 |
|
100 | 82 | plaq /= int(numpy.prod(latt_size)) * Nc
|
101 | 83 | plaq = MPI.COMM_WORLD.allreduce(plaq, MPI.SUM)
|
@@ -186,3 +168,39 @@ def gaugeEvenShiftBackward(latt_size: List[int], grid_size: List[int], gauge: nu
|
186 | 168 | MPI.COMM_WORLD.Sendrecv_replace(buf, dest=neighbour_rank[3], source=neighbour_rank[7])
|
187 | 169 | gauge_shift[3, 1, 0, :, :, :] = buf
|
188 | 170 | return gauge_shift
|
| 171 | + |
| 172 | + |
| 173 | +# matrices to convert gamma basis bewteen DeGrand-Rossi and Dirac-Pauli |
| 174 | +# DP for Dirac-Pauli, DR for DeGrand-Rossi |
| 175 | +# \psi(DP) = _DR_TO_DP \psi(DR) |
| 176 | +# \psi(DR) = _DP_TO_DR \psi(DP) |
| 177 | +_DP_TO_DR = numpy.array( |
| 178 | + [ |
| 179 | + [0, 1, 0, -1], |
| 180 | + [-1, 0, 1, 0], |
| 181 | + [0, 1, 0, 1], |
| 182 | + [-1, 0, -1, 0], |
| 183 | + ] |
| 184 | +) |
| 185 | +_DR_TO_DP = numpy.array( |
| 186 | + [ |
| 187 | + [0, -1, 0, -1], |
| 188 | + [1, 0, 1, 0], |
| 189 | + [0, 1, 0, -1], |
| 190 | + [-1, 0, 1, 0], |
| 191 | + ] |
| 192 | +) |
| 193 | + |
| 194 | + |
| 195 | +def propagatorDeGrandRossiToDiracPauli(propagator: numpy.ndarray): |
| 196 | + P = _DR_TO_DP |
| 197 | + Pinv = _DP_TO_DR / 2 |
| 198 | + |
| 199 | + return numpy.ascontiguousarray(numpy.einsum("ij,tzyxjkab,kl->tzyxilab", P, propagator.data, Pinv, optimize=True)) |
| 200 | + |
| 201 | + |
| 202 | +def propagatorDiracPauliToDeGrandRossi(propagator: numpy.ndarray): |
| 203 | + P = _DP_TO_DR |
| 204 | + Pinv = _DR_TO_DP / 2 |
| 205 | + |
| 206 | + return numpy.ascontiguousarray(numpy.einsum("ij,tzyxjkab,kl->tzyxilab", P, propagator.data, Pinv, optimize=True)) |
0 commit comments