mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Minor cosmetic changes
This commit is contained in:
		@@ -91,6 +91,9 @@ class ScalarImplTypes {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #define USE_FFT_ACCELERATION
 | 
			
		||||
  #ifdef USE_FFT_ACCELERATION
 | 
			
		||||
  #define FFT_MASS 0.707
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  template <class S, unsigned int N>
 | 
			
		||||
@@ -113,8 +116,8 @@ class ScalarImplTypes {
 | 
			
		||||
    typedef Field                FermionField;
 | 
			
		||||
    typedef Field                PropagatorField;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    static void MomentaSquare(ComplexField& out){
 | 
			
		||||
    static void MomentaSquare(ComplexField &out)
 | 
			
		||||
    {
 | 
			
		||||
      GridBase *grid = out._grid;
 | 
			
		||||
      const std::vector<int> &l = grid->FullDimensions();
 | 
			
		||||
      ComplexField kmu(grid);
 | 
			
		||||
@@ -131,29 +134,27 @@ class ScalarImplTypes {
 | 
			
		||||
    static void MomentumSpacePropagator(ComplexField &out, RealD m)
 | 
			
		||||
    {
 | 
			
		||||
      GridBase *grid = out._grid;
 | 
			
		||||
      ComplexField one(grid); one = Complex(1.0,0.0);
 | 
			
		||||
      ComplexField one(grid);
 | 
			
		||||
      one = Complex(1.0, 0.0);
 | 
			
		||||
      out = m * m;
 | 
			
		||||
      MomentaSquare(out);
 | 
			
		||||
      out = one / out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    static inline void generate_momenta(Field& P, GridParallelRNG& pRNG) {
 | 
			
		||||
    static inline void generate_momenta(Field &P, GridParallelRNG &pRNG)
 | 
			
		||||
    {
 | 
			
		||||
#ifndef USE_FFT_ACCELERATION
 | 
			
		||||
      Group::GaussianFundamentalLieAlgebraMatrix(pRNG, P);
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
      Field Ptmp(P._grid), Pp(P._grid);
 | 
			
		||||
      Group::GaussianFundamentalLieAlgebraMatrix(pRNG, Ptmp);
 | 
			
		||||
      // if we change the mass I need a renormalization here
 | 
			
		||||
      // transform and multiply by (M*M+p*p)^-1
 | 
			
		||||
      GridCartesian *Grid = dynamic_cast<GridCartesian*>(P._grid);
 | 
			
		||||
      FFT theFFT(Grid);
 | 
			
		||||
      ComplexField p2(Grid);
 | 
			
		||||
      RealD M = 1.0;
 | 
			
		||||
      p2= zero;
 | 
			
		||||
      Field Pgaussian(P._grid), Pp(P._grid);
 | 
			
		||||
      ComplexField p2(P._grid); p2 = zero;
 | 
			
		||||
      RealD M = FFT_MASS;
 | 
			
		||||
      
 | 
			
		||||
      theFFT.FFT_all_dim(Pp,Ptmp,FFT::forward);
 | 
			
		||||
      Group::GaussianFundamentalLieAlgebraMatrix(pRNG, Pgaussian);
 | 
			
		||||
 | 
			
		||||
      FFT theFFT((GridCartesian*)P._grid);
 | 
			
		||||
      theFFT.FFT_all_dim(Pp, Pgaussian, FFT::forward);
 | 
			
		||||
      MomentaSquare(p2);
 | 
			
		||||
      p2 += M * M;
 | 
			
		||||
      p2 = sqrt(p2);
 | 
			
		||||
@@ -165,34 +166,34 @@ class ScalarImplTypes {
 | 
			
		||||
 | 
			
		||||
    static inline Field projectForce(Field& P) {return P;}
 | 
			
		||||
 | 
			
		||||
    static inline void update_field(Field& P, Field& U, double ep) {
 | 
			
		||||
    static inline void update_field(Field &P, Field &U, double ep)
 | 
			
		||||
    {
 | 
			
		||||
#ifndef USE_FFT_ACCELERATION
 | 
			
		||||
      U += P * ep;
 | 
			
		||||
#else
 | 
			
		||||
      // Here we can eventually add the Fourier acceleration
 | 
			
		||||
      // FFT transform P(x) -> P(p)
 | 
			
		||||
      // divide by (M^2+p^2)  M external parameter (how to pass?)
 | 
			
		||||
      // P'(p) = P(p)/(M^2+p^2)
 | 
			
		||||
      // Transform back -> P'(x)
 | 
			
		||||
      // U += P'(x)*ep
 | 
			
		||||
 | 
			
		||||
      // the dynamic cast is safe
 | 
			
		||||
      GridCartesian *Grid = dynamic_cast<GridCartesian*>(U._grid);
 | 
			
		||||
      FFT theFFT(Grid);
 | 
			
		||||
      Field Pp(Grid), Pnew(Grid);
 | 
			
		||||
      std::vector<int> full_dim = Grid->FullDimensions();
 | 
			
		||||
      Field Pp(U._grid), P_FFT(U._grid);     
 | 
			
		||||
      static ComplexField p2(U._grid);
 | 
			
		||||
      RealD M = FFT_MASS;
 | 
			
		||||
      
 | 
			
		||||
      FFT theFFT((GridCartesian*)U._grid);
 | 
			
		||||
      theFFT.FFT_all_dim(Pp, P, FFT::forward);
 | 
			
		||||
      RealD M = 1.0;  
 | 
			
		||||
 | 
			
		||||
      static bool first_call = true;
 | 
			
		||||
      static ComplexField p2(Grid);
 | 
			
		||||
      if (first_call){
 | 
			
		||||
      if (first_call)
 | 
			
		||||
      {
 | 
			
		||||
        // avoid recomputing
 | 
			
		||||
        MomentumSpacePropagator(p2, M);
 | 
			
		||||
        first_call = false;
 | 
			
		||||
      }
 | 
			
		||||
      Pp *= p2;
 | 
			
		||||
      theFFT.FFT_all_dim(Pnew,Pp,FFT::backward);     
 | 
			
		||||
      U += Pnew * ep;
 | 
			
		||||
      theFFT.FFT_all_dim(P_FFT, Pp, FFT::backward);
 | 
			
		||||
      U += P_FFT * ep;
 | 
			
		||||
 | 
			
		||||
#endif //USE_FFT_ACCELERATION
 | 
			
		||||
    }
 | 
			
		||||
@@ -207,14 +208,12 @@ class ScalarImplTypes {
 | 
			
		||||
      // 1 FFT needed U(x) -> U(p)
 | 
			
		||||
      // M to be passed
 | 
			
		||||
 | 
			
		||||
      GridCartesian *Grid = dynamic_cast<GridCartesian *>(U._grid);
 | 
			
		||||
      FFT theFFT(Grid);
 | 
			
		||||
      Field Up(Grid), Utilde(Grid);
 | 
			
		||||
      std::vector<int> full_dim = Grid->FullDimensions();
 | 
			
		||||
      FFT theFFT((GridCartesian*)U._grid);
 | 
			
		||||
      Field Up(U._grid);
 | 
			
		||||
 | 
			
		||||
      theFFT.FFT_all_dim(Up, U, FFT::forward);
 | 
			
		||||
      RealD M = 1.0;  
 | 
			
		||||
      ComplexField p2(Grid);
 | 
			
		||||
      RealD M = FFT_MASS;
 | 
			
		||||
      ComplexField p2(U._grid);
 | 
			
		||||
      MomentumSpacePropagator(p2, M);
 | 
			
		||||
      Field Up2 = Up * p2;
 | 
			
		||||
      // from the definition of the DFT we need to divide by the volume
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user