1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-25 13:15:55 +01:00

Merge pull request #304 from Heinrich-BR/develop

ScalarImpl.h updates
This commit is contained in:
Antonin Portelli 2020-07-06 10:16:03 +01:00 committed by GitHub
commit f1f655d92b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,5 +1,13 @@
#pragma once #pragma once
#define CPS_MD_TIME
#ifdef CPS_MD_TIME
#define HMC_MOMENTUM_DENOMINATOR (2.0)
#else
#define HMC_MOMENTUM_DENOMINATOR (1.0)
#endif
NAMESPACE_BEGIN(Grid); NAMESPACE_BEGIN(Grid);
template <class S> template <class S>
@ -20,7 +28,9 @@ public:
typedef Field PropagatorField; typedef Field PropagatorField;
static inline void generate_momenta(Field& P, GridParallelRNG& pRNG){ static inline void generate_momenta(Field& P, GridParallelRNG& pRNG){
RealD scale = ::sqrt(HMC_MOMENTUM_DENOMINATOR); // CPS/UKQCD momentum rescaling
gaussian(pRNG, P); gaussian(pRNG, P);
P *= scale;
} }
static inline Field projectForce(Field& P){return P;} static inline Field projectForce(Field& P){return P;}
@ -139,14 +149,17 @@ public:
static inline void generate_momenta(Field &P, GridParallelRNG &pRNG) static inline void generate_momenta(Field &P, GridParallelRNG &pRNG)
{ {
RealD scale = ::sqrt(HMC_MOMENTUM_DENOMINATOR); // CPS/UKQCD momentum rescaling
#ifndef USE_FFT_ACCELERATION #ifndef USE_FFT_ACCELERATION
Group::GaussianFundamentalLieAlgebraMatrix(pRNG, P); Group::GaussianFundamentalLieAlgebraMatrix(pRNG, P);
#else #else
Field Pgaussian(P.Grid()), Pp(P.Grid()); Field Pgaussian(P.Grid()), Pp(P.Grid());
ComplexField p2(P.Grid()); p2 = zero; ComplexField p2(P.Grid()); p2 = zero;
RealD M = FFT_MASS; RealD M = FFT_MASS;
Group::GaussianFundamentalLieAlgebraMatrix(pRNG, Pgaussian); Group::GaussianFundamentalLieAlgebraMatrix(pRNG, Pgaussian);
FFT theFFT((GridCartesian*)P.Grid()); FFT theFFT((GridCartesian*)P.Grid());
@ -156,11 +169,11 @@ public:
p2 = sqrt(p2); p2 = sqrt(p2);
Pp *= p2; Pp *= p2;
theFFT.FFT_all_dim(P, Pp, FFT::backward); theFFT.FFT_all_dim(P, Pp, FFT::backward);
#endif //USE_FFT_ACCELERATION #endif //USE_FFT_ACCELERATION
P *= scale;
} }
static inline Field projectForce(Field& P) {return P;} static inline Field projectForce(Field& P) {return Ta(P);}
static inline void update_field(Field &P, Field &U, double ep) static inline void update_field(Field &P, Field &U, double ep)
{ {