mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-09 23:45:36 +00:00
add ProjectOnGaugeGroup and ProjectGn to allow future templating in GaugeImplTypes
This commit is contained in:
parent
f51222086c
commit
fd057c838f
@ -244,6 +244,29 @@ class GaugeGroup {
|
|||||||
ex = ex + xn * nfac; // x2/2!, x3/3!....
|
ex = ex + xn * nfac; // x2/2!, x3/3!....
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <int N> // reunitarise, resimplectify...
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U) {
|
||||||
|
ProjectOnGaugeGroup(U, group_name());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N> // reunitarise, resimplectify...
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) {
|
||||||
|
ProjectOnGaugeGroup(Umu, group_name());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <int N> // reunitarise, resimplectify... previously ProjectSUn
|
||||||
|
static void ProjectGn(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) {
|
||||||
|
ProjectGn(Umu, group_name());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N> // reunitarise, resimplectify... previously ProjectSUn
|
||||||
|
static void ProjectGn(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U) {
|
||||||
|
ProjectGn(U, group_name());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <int N>
|
template <int N>
|
||||||
@ -271,6 +294,8 @@ LatticeComplexD Determinant(
|
|||||||
});
|
});
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <int N>
|
template <int N>
|
||||||
static void ProjectSUn(
|
static void ProjectSUn(
|
||||||
Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) {
|
Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu) {
|
||||||
@ -285,6 +310,7 @@ static void ProjectSUn(
|
|||||||
PokeIndex<ColourIndex>(Umu, element, Nc - 1, i);
|
PokeIndex<ColourIndex>(Umu, element, Nc - 1, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <int N>
|
template <int N>
|
||||||
static void ProjectSUn(
|
static void ProjectSUn(
|
||||||
Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U) {
|
Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U) {
|
||||||
@ -297,6 +323,7 @@ static void ProjectSUn(
|
|||||||
PokeIndex<LorentzIndex>(U, Umu, mu);
|
PokeIndex<LorentzIndex>(U, Umu, mu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit specialisation for SU(3).
|
// Explicit specialisation for SU(3).
|
||||||
// Explicit specialisation for SU(3).
|
// Explicit specialisation for SU(3).
|
||||||
static void ProjectSU3(
|
static void ProjectSU3(
|
||||||
|
@ -621,6 +621,47 @@ static void projectOnAlgebra(LatticeAlgebraVector &h_out,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu, GroupName::SU) {
|
||||||
|
Umu = ProjectOnGroup(Umu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U, GroupName::SU) {
|
||||||
|
GridBase *grid = U.Grid();
|
||||||
|
// Reunitarise
|
||||||
|
for (int mu = 0; mu < Nd; mu++) {
|
||||||
|
auto Umu = PeekIndex<LorentzIndex>(U, mu);
|
||||||
|
Umu = ProjectOnGroup(Umu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectGn(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu, GroupName::SU) {
|
||||||
|
Umu = ProjectOnGroup(Umu);
|
||||||
|
auto det = Determinant(Umu);
|
||||||
|
|
||||||
|
det = conjugate(det);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; i++) {
|
||||||
|
auto element = PeekIndex<ColourIndex>(Umu, N - 1, i);
|
||||||
|
element = element * det;
|
||||||
|
PokeIndex<ColourIndex>(Umu, element, Nc - 1, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectGn(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U, GroupName::SU) {
|
||||||
|
GridBase *grid = U.Grid();
|
||||||
|
// Reunitarise
|
||||||
|
for (int mu = 0; mu < Nd; mu++) {
|
||||||
|
auto Umu = PeekIndex<LorentzIndex>(U, mu);
|
||||||
|
Umu = ProjectOnGroup(Umu);
|
||||||
|
ProjectSUn(Umu);
|
||||||
|
PokeIndex<LorentzIndex>(U, Umu, mu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fundamental rep gauge xform
|
* Fundamental rep gauge xform
|
||||||
*/
|
*/
|
||||||
|
@ -366,6 +366,47 @@ static void TepidConfiguration(GridParallelRNG &pRNG, GaugeField &out, GroupName
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu, GroupName::Sp) {
|
||||||
|
Umu = ProjectOnSpGroup(Umu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectOnGaugeGroup(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U, GroupName::Sp) {
|
||||||
|
GridBase *grid = U.Grid();
|
||||||
|
// Reunitarise
|
||||||
|
for (int mu = 0; mu < Nd; mu++) {
|
||||||
|
auto Umu = PeekIndex<LorentzIndex>(U, mu);
|
||||||
|
Umu = ProjectOnSpGroup(Umu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectGn(Lattice<iScalar<iScalar<iMatrix<vComplexD, N> > > > &Umu, GroupName::Sp) {
|
||||||
|
Umu = ProjectOnSpGroup(Umu);
|
||||||
|
auto det = Determinant(Umu);
|
||||||
|
|
||||||
|
det = conjugate(det);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; i++) {
|
||||||
|
auto element = PeekIndex<ColourIndex>(Umu, N - 1, i);
|
||||||
|
element = element * det;
|
||||||
|
PokeIndex<ColourIndex>(Umu, element, Nc - 1, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
static void ProjectGn(Lattice<iVector<iScalar<iMatrix<vComplexD, N> >, Nd> > &U, GroupName::Sp) {
|
||||||
|
GridBase *grid = U.Grid();
|
||||||
|
// Reunitarise
|
||||||
|
for (int mu = 0; mu < Nd; mu++) {
|
||||||
|
auto Umu = PeekIndex<LorentzIndex>(U, mu);
|
||||||
|
Umu = ProjectOnSpGroup(Umu);
|
||||||
|
ProjectSUn(Umu);
|
||||||
|
PokeIndex<LorentzIndex>(U, Umu, mu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
template <ONLY_IF_Sp>
|
template <ONLY_IF_Sp>
|
||||||
static void OmegaInvariance(ColourMatrix &in) {
|
static void OmegaInvariance(ColourMatrix &in) {
|
||||||
|
Loading…
Reference in New Issue
Block a user