mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Hadrons: sink smearing compatibility for 3pt contraction modules.
This commit is contained in:
		@@ -51,6 +51,14 @@ BEGIN_HADRONS_NAMESPACE
 | 
			
		||||
 *                   q1
 | 
			
		||||
 *
 | 
			
		||||
 *      trace(g5*q1*adj(q2)*g5*gamma*q3)
 | 
			
		||||
 * 
 | 
			
		||||
 *  options:
 | 
			
		||||
 *   - q1: sink smeared propagator, source at i
 | 
			
		||||
 *   - q2: propagator, source at i
 | 
			
		||||
 *   - q3: propagator, source at f
 | 
			
		||||
 *   - gamma: gamma matrix to insert
 | 
			
		||||
 *   - tSnk: sink position for propagator q1.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
@@ -66,6 +74,7 @@ public:
 | 
			
		||||
                                    std::string,    q2,
 | 
			
		||||
                                    std::string,    q3,
 | 
			
		||||
                                    Gamma::Algebra, gamma,
 | 
			
		||||
                                    unsigned int,   tSnk,
 | 
			
		||||
                                    std::string,    output);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -140,17 +149,22 @@ void TGamma3pt<FImpl1, FImpl2, FImpl3>::execute(void)
 | 
			
		||||
                 << par().q3 << "', with " << par().gamma << " insertion." 
 | 
			
		||||
                 << std::endl;
 | 
			
		||||
 | 
			
		||||
    // Initialise variables. q2 and q3 are normal propagators, q1 may be 
 | 
			
		||||
    // sink smeared.
 | 
			
		||||
    CorrWriter            writer(par().output);
 | 
			
		||||
    PropagatorField1      &q1 = *env().template getObject<PropagatorField1>(par().q1);
 | 
			
		||||
    SlicedPropagator1     &q1 = *env().template getObject<SlicedPropagator1>(par().q1);
 | 
			
		||||
    PropagatorField2      &q2 = *env().template getObject<PropagatorField2>(par().q2);
 | 
			
		||||
    PropagatorField3      &q3 = *env().template getObject<PropagatorField3>(par().q3);
 | 
			
		||||
    PropagatorField3      &q3 = *env().template getObject<PropagatorField2>(par().q3);
 | 
			
		||||
    LatticeComplex        c(env().getGrid());
 | 
			
		||||
    Gamma                 g5(Gamma::Algebra::Gamma5);
 | 
			
		||||
    Gamma                 gamma(par().gamma);
 | 
			
		||||
    std::vector<TComplex> buf;
 | 
			
		||||
    Result                result;
 | 
			
		||||
 | 
			
		||||
    c = trace(g5*q1*adj(q2)*(g5*gamma)*q3);
 | 
			
		||||
    
 | 
			
		||||
    // Extract relevant timeslice of sinked propagator q1, then contract &
 | 
			
		||||
    // sum over all spacial positions of gamma insertion.
 | 
			
		||||
    SitePropagator1 q1Snk = q1[par().tSnk];
 | 
			
		||||
    c = trace(g5*q1Snk*adj(q2)*(g5*gamma)*q3);
 | 
			
		||||
    sliceSum(c, buf, Tp);
 | 
			
		||||
 | 
			
		||||
    result.gamma = par().gamma;
 | 
			
		||||
 
 | 
			
		||||
@@ -76,6 +76,7 @@ public:
 | 
			
		||||
                                    std::string, q2,
 | 
			
		||||
                                    std::string, q3,
 | 
			
		||||
                                    std::string, q4,
 | 
			
		||||
                                    unsigned int, tSnk,
 | 
			
		||||
                                    std::string, output);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,8 @@ using namespace MContraction;
 | 
			
		||||
 * 
 | 
			
		||||
 * S: trace(q3*g5*q1*adj(q2)*g5*gL[mu][p_1]*q4*gL[mu][p_2])
 | 
			
		||||
 * E: trace(q3*g5*q1*adj(q2)*g5*gL[mu][p_1])*trace(q4*gL[mu][p_2])
 | 
			
		||||
 * 
 | 
			
		||||
 * Note q1 must be sink smeared.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
@@ -94,15 +96,15 @@ void TWeakHamiltonianEye::execute(void)
 | 
			
		||||
                 << "'." << std::endl;
 | 
			
		||||
 | 
			
		||||
    CorrWriter             writer(par().output);
 | 
			
		||||
    PropagatorField &q1 = *env().template getObject<PropagatorField>(par().q1);
 | 
			
		||||
    PropagatorField &q2 = *env().template getObject<PropagatorField>(par().q2);
 | 
			
		||||
    PropagatorField &q3 = *env().template getObject<PropagatorField>(par().q3);
 | 
			
		||||
    PropagatorField &q4 = *env().template getObject<PropagatorField>(par().q4);
 | 
			
		||||
    Gamma g5            = Gamma(Gamma::Algebra::Gamma5);
 | 
			
		||||
    LatticeComplex        expbuf(env().getGrid());
 | 
			
		||||
    std::vector<TComplex> corrbuf;
 | 
			
		||||
    std::vector<Result>   result(n_eye_diag);
 | 
			
		||||
    unsigned int ndim   = env().getNd();
 | 
			
		||||
    SlicedPropagator &q1 = *env().template getObject<SlicedPropagator>(par().q1);
 | 
			
		||||
    PropagatorField  &q2 = *env().template getObject<PropagatorField>(par().q2);
 | 
			
		||||
    PropagatorField  &q3 = *env().template getObject<PropagatorField>(par().q3);
 | 
			
		||||
    PropagatorField  &q4 = *env().template getObject<PropagatorField>(par().q4);
 | 
			
		||||
    Gamma g5             = Gamma(Gamma::Algebra::Gamma5);
 | 
			
		||||
    LatticeComplex         expbuf(env().getGrid());
 | 
			
		||||
    std::vector<TComplex>  corrbuf;
 | 
			
		||||
    std::vector<Result>    result(n_eye_diag);
 | 
			
		||||
    unsigned int ndim    = env().getNd();
 | 
			
		||||
 | 
			
		||||
    PropagatorField              tmp1(env().getGrid());
 | 
			
		||||
    LatticeComplex               tmp2(env().getGrid());
 | 
			
		||||
@@ -111,10 +113,13 @@ void TWeakHamiltonianEye::execute(void)
 | 
			
		||||
    std::vector<LatticeComplex>  E_body(ndim, tmp2);
 | 
			
		||||
    std::vector<LatticeComplex>  E_loop(ndim, tmp2);
 | 
			
		||||
 | 
			
		||||
    // Get sink timeslice of q1.
 | 
			
		||||
    SitePropagator q1Snk = q1[par().tSnk];
 | 
			
		||||
 | 
			
		||||
    // Setup for S-type contractions.
 | 
			
		||||
    for (int mu = 0; mu < ndim; ++mu)
 | 
			
		||||
    {
 | 
			
		||||
        S_body[mu] = MAKE_SE_BODY(q1, q2, q3, GammaL(Gamma::gmu[mu]));
 | 
			
		||||
        S_body[mu] = MAKE_SE_BODY(q1Snk, q2, q3, GammaL(Gamma::gmu[mu]));
 | 
			
		||||
        S_loop[mu] = MAKE_SE_LOOP(q4, GammaL(Gamma::gmu[mu]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user