File nonabelianclover.h
File List > algebra > gaugealgebra > nonabelianclover.h
Go to the documentation of this file
#ifndef TEMPLAT_LATTICE_ALGEBRA_GAUGEALGEBRA_NONABELIANCLOVER_H
#define TEMPLAT_LATTICE_ALGEBRA_GAUGEALGEBRA_NONABELIANCLOVER_H
/* This file is part of TempLat, available at https://cosmolattice.github.io/templat .
Copyright 2021-2026 The TempLat authors, see AUTHORS.md.
Released under the MIT license, see LICENSE.md. */
// File info: Main contributor(s): Adrien Florio, Year: 2024
#include "TempLat/lattice/algebra/su2algebra/su2shift.h"
namespace TempLat
{
template <int Mu, int Nu, typename R>
requires(Mu != 0 && Nu != 0 && Mu != Nu)
auto nonabelianclover(const R &Us, Tag<Mu> mu, Tag<Nu> nu)
{
// The clover is
// <-----^ <----^
// | 2 | | 1 |
// | | | |
// v----> v---->
// <-----^ <----^
// | 3 | | 4 |
// | | | |
// v----> v---->
const auto plaq1 = (Us(mu) * sh1<Mu>(Us(nu))) *
(dag(sh1<Nu>(Us(mu))) *
dag(Us(nu))); // of course we could call the plaquette here, but we don't for readability.
const auto plaq2 = (Us(nu) * dag(sh1<-Mu, Nu>(Us(mu)))) * (dag(sh1<-Mu>(Us(nu))) * sh1<-Mu>(Us(mu)));
const auto plaq3 =
(dag(sh1<-Mu>(Us(mu))) * dag(sh1<-Mu, -Nu>(Us(nu)))) * (sh1<-Mu, -Nu>(Us(mu)) * sh1<-Nu>(Us(nu)));
const auto plaq4 = (dag(sh1<-Nu>(Us(nu))) * sh1<-Nu>(Us(mu))) * (sh1<-Nu, Mu>(Us(nu)) * dag(Us(mu)));
return 0.25 * (plaq1 + plaq2 + plaq3 + plaq4);
}
template <typename R> auto B4NA(const R &Us, Tag<1>) { return nonabelianclover(Us, Tag<2>(), Tag<3>()); }
template <typename R> auto B4NA(const R &Us, Tag<2>) { return nonabelianclover(Us, Tag<3>(), Tag<1>()); }
template <typename R> auto B4NA(const R &Us, Tag<3>) { return nonabelianclover(Us, Tag<1>(), Tag<2>()); }
} // namespace TempLat
#endif