1
0
mirror of https://github.com/paboyle/Grid.git synced 2024-11-10 07:55:35 +00:00

Merge branch 'develop' into feature/distil

* develop:
  MGauge::GaugeFix use standard convention for fields
  fix bug: MGauge::GaugeFix should not modify its input
  add gauge transformation matrix as output to module MGauge/GaugeFix
This commit is contained in:
Michael Marshall 2019-04-03 16:24:49 +01:00
commit b5eb97206b

View File

@ -7,6 +7,7 @@ Source file: Hadrons/Modules/MGauge/GaugeFix.hpp
Copyright (C) 2015-2019 Copyright (C) 2015-2019
Author: Antonin Portelli <antonin.portelli@me.com> Author: Antonin Portelli <antonin.portelli@me.com>
Author: Nils Asmussen <n.asmussen@soton.ac.uk>
Author: Peter Boyle <paboyle@ph.ed.ac.uk> Author: Peter Boyle <paboyle@ph.ed.ac.uk>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -58,6 +59,7 @@ class TGaugeFix: public Module<GaugeFixPar>
{ {
public: public:
GAUGE_TYPE_ALIASES(GImpl,); GAUGE_TYPE_ALIASES(GImpl,);
typedef typename GImpl::GaugeLinkField GaugeMat;
public: public:
// constructor // constructor
TGaugeFix(const std::string name); TGaugeFix(const std::string name);
@ -94,7 +96,7 @@ std::vector<std::string> TGaugeFix<GImpl>::getInput(void)
template <typename GImpl> template <typename GImpl>
std::vector<std::string> TGaugeFix<GImpl>::getOutput(void) std::vector<std::string> TGaugeFix<GImpl>::getOutput(void)
{ {
std::vector<std::string> out = {getName()}; std::vector<std::string> out = {getName(), getName()+"_xform"};
return out; return out;
} }
@ -103,6 +105,7 @@ template <typename GImpl>
void TGaugeFix<GImpl>::setup(void) void TGaugeFix<GImpl>::setup(void)
{ {
envCreateLat(GaugeField, getName()); envCreateLat(GaugeField, getName());
envCreateLat(GaugeMat, getName()+"_xform");
} }
@ -116,6 +119,7 @@ void TGaugeFix<GImpl>::execute(void)
LOG(Message) << par().gauge << std::endl; LOG(Message) << par().gauge << std::endl;
auto &U = envGet(GaugeField, par().gauge); auto &U = envGet(GaugeField, par().gauge);
auto &Umu = envGet(GaugeField, getName()); auto &Umu = envGet(GaugeField, getName());
auto &xform = envGet(GaugeMat, getName()+"_xform");
LOG(Message) << "Gauge Field fetched" << std::endl; LOG(Message) << "Gauge Field fetched" << std::endl;
//do we allow maxiter etc to be user set? //do we allow maxiter etc to be user set?
Real alpha = par().alpha; Real alpha = par().alpha;
@ -123,8 +127,8 @@ void TGaugeFix<GImpl>::execute(void)
Real Omega_tol = par().Omega_tol; Real Omega_tol = par().Omega_tol;
Real Phi_tol = par().Phi_tol; Real Phi_tol = par().Phi_tol;
bool Fourier = par().Fourier; bool Fourier = par().Fourier;
FourierAcceleratedGaugeFixer<PeriodicGimplR>::SteepestDescentGaugeFix(U,alpha,maxiter,Omega_tol,Phi_tol,Fourier);
Umu = U; Umu = U;
FourierAcceleratedGaugeFixer<PeriodicGimplR>::SteepestDescentGaugeFix(Umu,xform,alpha,maxiter,Omega_tol,Phi_tol,Fourier);
LOG(Message) << "Gauge Fixed" << std::endl; LOG(Message) << "Gauge Fixed" << std::endl;
} }