mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-02 21:14:32 +00:00 
			
		
		
		
	Auxiliary fields
This commit is contained in:
		@@ -144,7 +144,7 @@ class HMCWrapperTemplate: public HMCRunnerBase<ReaderClass> {
 | 
			
		||||
    LaplacianParams LapPar(0.0001, 1.0, 1000, 1e-8, 12, 64);
 | 
			
		||||
    RealD Kappa = 0.9;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Better to pass the generalised momenta to the integrator
 | 
			
		||||
    LaplacianAdjointField<PeriodicGimplR> Laplacian(UGrid, CG, LapPar, Kappa);
 | 
			
		||||
    TheIntegrator MDynamics(UGrid, Parameters.MD, TheAction, Smearing, Laplacian);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -128,17 +128,23 @@ class Integrator {
 | 
			
		||||
      Mom -= force * ep; 
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Generalised momenta
 | 
			
		||||
    MomentaField MomDer(P.Mom._grid);
 | 
			
		||||
    P.M.ImportGauge(U);
 | 
			
		||||
    P.DerivativeU(P.Mom, MomDer);
 | 
			
		||||
    Mom -= MomDer * ep;
 | 
			
		||||
 | 
			
		||||
    // Auxiliary fields
 | 
			
		||||
    //P.update_auxiliary_momenta(ep*0.5);
 | 
			
		||||
    //P.AuxiliaryFieldsDerivative(MomDer);
 | 
			
		||||
    //Mom -= MomDer * ep;
 | 
			
		||||
    //P.update_auxiliary_momenta(ep*0.5);
 | 
			
		||||
 | 
			
		||||
    // Force from the other representations
 | 
			
		||||
    as[level].apply(update_P_hireps, Representations, Mom, U, ep);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void implicit_update_P(Field& U, int level, double ep) {
 | 
			
		||||
  void implicit_update_P(Field& U, int level, double ep, bool intermediate = false) {
 | 
			
		||||
    t_P[level] += ep;
 | 
			
		||||
 | 
			
		||||
    std::cout << GridLogIntegrator << "[" << level << "] P "
 | 
			
		||||
@@ -170,16 +176,18 @@ class Integrator {
 | 
			
		||||
    P.M.ImportGauge(U);
 | 
			
		||||
    MomentaField MomDer(P.Mom._grid);
 | 
			
		||||
    MomentaField MomDer1(P.Mom._grid);
 | 
			
		||||
    MomentaField AuxDer(P.Mom._grid);
 | 
			
		||||
    MomDer1 = zero;
 | 
			
		||||
    MomentaField diff(P.Mom._grid);
 | 
			
		||||
 | 
			
		||||
    // be careful here, we need the first step
 | 
			
		||||
    // in every trajectory
 | 
			
		||||
    static int call = 0;
 | 
			
		||||
    if (call == 1)
 | 
			
		||||
    if (intermediate)
 | 
			
		||||
      P.DerivativeU(P.Mom, MomDer1);
 | 
			
		||||
 | 
			
		||||
    call = 1;
 | 
			
		||||
    // Auxiliary fields
 | 
			
		||||
    //P.update_auxiliary_momenta(ep*0.5);
 | 
			
		||||
    //P.AuxiliaryFieldsDerivative(AuxDer);
 | 
			
		||||
    //Msum += AuxDer;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // Here run recursively
 | 
			
		||||
    int counter = 1;
 | 
			
		||||
@@ -194,7 +202,7 @@ class Integrator {
 | 
			
		||||
      std::cout << GridLogIntegrator << "|Force| laplacian site average: " << force_abs
 | 
			
		||||
                << std::endl;
 | 
			
		||||
 | 
			
		||||
      NewMom = P.Mom - ep* 0.5 * (2.0*Msum + MomDer + MomDer1);
 | 
			
		||||
      NewMom = P.Mom - ep* 0.5 * (2.0*Msum + MomDer + MomDer1);// simplify
 | 
			
		||||
      diff = NewMom - OldMom;
 | 
			
		||||
      counter++;
 | 
			
		||||
      RelativeError = std::sqrt(norm2(diff))/std::sqrt(norm2(NewMom));
 | 
			
		||||
@@ -204,8 +212,8 @@ class Integrator {
 | 
			
		||||
 | 
			
		||||
    P.Mom = NewMom;
 | 
			
		||||
 | 
			
		||||
    // update the auxiliary fields momenta
 | 
			
		||||
    // todo
 | 
			
		||||
    // update the auxiliary fields momenta    
 | 
			
		||||
    //P.update_auxiliary_momenta(ep*0.5);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -239,7 +247,7 @@ class Integrator {
 | 
			
		||||
    Field diff(U._grid);
 | 
			
		||||
    Real threshold = 1e-6;
 | 
			
		||||
    int counter = 1;
 | 
			
		||||
    int MaxCounter = 1000;
 | 
			
		||||
    int MaxCounter = 100;
 | 
			
		||||
 | 
			
		||||
    Field OldU = U;
 | 
			
		||||
    Field NewU = U;
 | 
			
		||||
@@ -247,6 +255,10 @@ class Integrator {
 | 
			
		||||
    P.M.ImportGauge(U);
 | 
			
		||||
    P.DerivativeP(Mom1); // first term in the derivative 
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
    //P.update_auxiliary_fields(ep*0.5);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
      std::cout << GridLogIntegrator << "UpdateU implicit step "<< counter << std::endl;
 | 
			
		||||
      
 | 
			
		||||
@@ -271,6 +283,9 @@ class Integrator {
 | 
			
		||||
    } while (RelativeError > threshold && counter < MaxCounter);
 | 
			
		||||
 | 
			
		||||
    U = NewU;
 | 
			
		||||
 | 
			
		||||
    //P.update_auxiliary_fields(ep*0.5);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -344,7 +344,7 @@ class ImplicitLeapFrog : public Integrator<FieldImplementation, SmearingPolicy,
 | 
			
		||||
      if (last_step){
 | 
			
		||||
        this->update_P(U, level, eps / 2.0);
 | 
			
		||||
      } else {
 | 
			
		||||
      this->implicit_update_P(U, level, eps);
 | 
			
		||||
      this->implicit_update_P(U, level, eps, true);// intermediate step
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user