1
0
mirror of https://github.com/paboyle/Grid.git synced 2024-09-20 01:05:38 +01:00

minor adjustments to twoindex

This commit is contained in:
Alessandro Lupo 2023-06-23 12:18:04 +01:00
parent 063d290bd8
commit e07fafe46a

View File

@ -22,14 +22,14 @@
// Authors: David Preti, Guido Cossu // Authors: David Preti, Guido Cossu
#ifndef QCD_UTIL_SUN2INDEX_H #ifndef QCD_UTIL_GAUGEGROUPTWOINDEX_H
#define QCD_UTIL_SUN2INDEX_H #define QCD_UTIL_GAUGEGROUPTWOINDEX_H
NAMESPACE_BEGIN(Grid); NAMESPACE_BEGIN(Grid);
enum TwoIndexSymmetry { Symmetric = 1, AntiSymmetric = -1 }; enum TwoIndexSymmetry { Symmetric = 1, AntiSymmetric = -1 };
inline Real delta(int a, int b) { return (a == b) ? 1.0 : 0.0; } constexpr inline Real delta(int a, int b) { return (a == b) ? 1.0 : 0.0; }
namespace detail { namespace detail {
@ -44,18 +44,14 @@ struct baseOffDiagonalSpHelper<cplx, nc, AntiSymmetric> {
RealD tmp; RealD tmp;
if ((i == ngroup + j) && (1 <= j) && (j < ngroup)) { if ((i == ngroup + j) && (1 <= j) && (j < ngroup)) {
for (int k = 0; k < ngroup; k++) { for (int k = 0; k < j+1; k++) {
if (k < j) { if (k < j) {
tmp = sqrt(2 * j * (j + 1)); tmp = 1 / sqrt(j * (j + 1));
tmp = 1 / tmp;
tmp *= std::sqrt(2.0);
eij()()(k, k + ngroup) = tmp; eij()()(k, k + ngroup) = tmp;
eij()()(k + ngroup, k) = -tmp; eij()()(k + ngroup, k) = -tmp;
} }
if (k == j) { if (k == j) {
tmp = sqrt(2 * j * (j + 1)); tmp = -j / sqrt(j * (j + 1));
tmp = -j / tmp;
tmp *= std::sqrt(2.0);
eij()()(k, k + ngroup) = tmp; eij()()(k, k + ngroup) = tmp;
eij()()(k + ngroup, k) = -tmp; eij()()(k + ngroup, k) = -tmp;
} }
@ -70,7 +66,6 @@ struct baseOffDiagonalSpHelper<cplx, nc, AntiSymmetric> {
delta(i, k) * delta(j, l) - delta(j, k) * delta(i, l); delta(i, k) * delta(j, l) - delta(j, k) * delta(i, l);
} }
} }
RealD nrm = 1. / std::sqrt(2.0); RealD nrm = 1. / std::sqrt(2.0);
eij = eij * nrm; eij = eij * nrm;
} }
@ -216,7 +211,6 @@ public:
Vector<iGroupMatrix<cplx> > ta(NumGenerators); Vector<iGroupMatrix<cplx> > ta(NumGenerators);
Vector<iGroupMatrix<cplx> > eij(Dimension); Vector<iGroupMatrix<cplx> > eij(Dimension);
iGroupMatrix<cplx> tmp; iGroupMatrix<cplx> tmp;
i2indTa = Zero();
for (int a = 0; a < NumGenerators; a++) for (int a = 0; a < NumGenerators; a++)
GaugeGroup<ncolour, group_name>::generator(a, ta[a]); GaugeGroup<ncolour, group_name>::generator(a, ta[a]);
@ -224,7 +218,7 @@ public:
for (int a = 0; a < Dimension; a++) base(a, eij[a]); for (int a = 0; a < Dimension; a++) base(a, eij[a]);
for (int a = 0; a < Dimension; a++) { for (int a = 0; a < Dimension; a++) {
tmp = transpose(ta[Index]) * adj(eij[a]) + adj(eij[a]) * ta[Index]; tmp = transpose(eij[a]*ta[Index]) + transpose(eij[a]) * ta[Index];
for (int b = 0; b < Dimension; b++) { for (int b = 0; b < Dimension; b++) {
iGroupMatrix<cplx> tmp1 = tmp * eij[b]; iGroupMatrix<cplx> tmp1 = tmp * eij[b];
Complex iTr = TensorRemove(timesI(trace(tmp1))); Complex iTr = TensorRemove(timesI(trace(tmp1)));
@ -276,12 +270,11 @@ public:
std::cout << GridLogMessage << "a=" << a << "b=" << b << "Tr=" << Tr std::cout << GridLogMessage << "a=" << a << "b=" << b << "Tr=" << Tr
<< std::endl; << std::endl;
if (a == b) { if (a == b) {
assert(imag(Tr) < 1e-8);
assert(real(Tr) - ((ncolour + S * 2) * 0.5) < 1e-8); assert(real(Tr) - ((ncolour + S * 2) * 0.5) < 1e-8);
} else { } else {
assert(imag(Tr) < 1e-8);
assert(real(Tr) < 1e-8); assert(real(Tr) < 1e-8);
} }
assert(imag(Tr) < 1e-8);
} }
} }
std::cout << GridLogMessage << std::endl; std::cout << GridLogMessage << std::endl;