mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Insertion of photon field in seqential conserved current
This commit is contained in:
		@@ -125,9 +125,9 @@ namespace Grid {
 | 
			
		||||
                                       PropagatorField &q_out,
 | 
			
		||||
                                       Current curr_type,
 | 
			
		||||
                                       unsigned int mu,
 | 
			
		||||
                                       std::vector<Real> mom,
 | 
			
		||||
                                       unsigned int tmin, 
 | 
			
		||||
                                       unsigned int tmax)=0;
 | 
			
		||||
                                       unsigned int tmax,
 | 
			
		||||
				       Lattice<iSinglet<Simd>> &lattice_cmplx)=0;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -407,17 +407,19 @@ void ImprovedStaggeredFermion<Impl>::ContractConservedCurrent(PropagatorField &q
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class Impl>
 | 
			
		||||
void ImprovedStaggeredFermion<Impl>::SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
                                                         PropagatorField &q_out,
 | 
			
		||||
                                                         Current curr_type,
 | 
			
		||||
                                                         unsigned int mu, 
 | 
			
		||||
                                                         std::vector<Real> mom,
 | 
			
		||||
                                                         unsigned int tmin,
 | 
			
		||||
                                                         unsigned int tmax)
 | 
			
		||||
void ImprovedStaggeredFermion<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                                              PropagatorField &q_out,
 | 
			
		||||
                                              Current curr_type,
 | 
			
		||||
                                              unsigned int mu,
 | 
			
		||||
                                              unsigned int tmin, 
 | 
			
		||||
                                              unsigned int tmax,
 | 
			
		||||
					      Lattice<iSinglet<Simd>> &lattice_cmplx)
 | 
			
		||||
{
 | 
			
		||||
    assert(0);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FermOpStaggeredTemplateInstantiate(ImprovedStaggeredFermion);
 | 
			
		||||
 | 
			
		||||
  //AdjointFermOpTemplateInstantiate(ImprovedStaggeredFermion);
 | 
			
		||||
 
 | 
			
		||||
@@ -166,13 +166,13 @@ class ImprovedStaggeredFermion : public StaggeredKernels<Impl>, public ImprovedS
 | 
			
		||||
                                PropagatorField &q_out,
 | 
			
		||||
                                Current curr_type,
 | 
			
		||||
                                unsigned int mu);
 | 
			
		||||
  void SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
  void SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                           PropagatorField &q_out,
 | 
			
		||||
                           Current curr_type,
 | 
			
		||||
                           unsigned int mu, 
 | 
			
		||||
                           std::vector<Real> mom,
 | 
			
		||||
                           unsigned int tmin,
 | 
			
		||||
                           unsigned int tmax);
 | 
			
		||||
                           Current curr_type, 
 | 
			
		||||
                           unsigned int mu,
 | 
			
		||||
                           unsigned int tmin, 
 | 
			
		||||
                           unsigned int tmax,
 | 
			
		||||
			   Lattice<iSinglet<Simd>> &lattice_cmplx);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef ImprovedStaggeredFermion<StaggeredImplF> ImprovedStaggeredFermionF;
 | 
			
		||||
 
 | 
			
		||||
@@ -419,15 +419,16 @@ void ImprovedStaggeredFermion5D<Impl>::ContractConservedCurrent(PropagatorField
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class Impl>
 | 
			
		||||
void ImprovedStaggeredFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
                                                          PropagatorField &q_out,
 | 
			
		||||
                                                          Current curr_type,
 | 
			
		||||
                                                          unsigned int mu, 
 | 
			
		||||
                                                          std::vector<Real> mom,
 | 
			
		||||
                                                          unsigned int tmin,
 | 
			
		||||
                                                          unsigned int tmax)
 | 
			
		||||
void ImprovedStaggeredFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                                              PropagatorField &q_out,
 | 
			
		||||
                                              Current curr_type,
 | 
			
		||||
                                              unsigned int mu,
 | 
			
		||||
                                              unsigned int tmin, 
 | 
			
		||||
                                              unsigned int tmax,
 | 
			
		||||
					      Lattice<iSinglet<Simd>> &lattice_cmplx)
 | 
			
		||||
{
 | 
			
		||||
    assert(0);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FermOpStaggeredTemplateInstantiate(ImprovedStaggeredFermion5D);
 | 
			
		||||
 
 | 
			
		||||
@@ -178,13 +178,13 @@ namespace QCD {
 | 
			
		||||
                                  PropagatorField &q_out,
 | 
			
		||||
                                  Current curr_type,
 | 
			
		||||
                                  unsigned int mu);
 | 
			
		||||
    void SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
    void SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                             PropagatorField &q_out,
 | 
			
		||||
                             Current curr_type,
 | 
			
		||||
                             unsigned int mu, 
 | 
			
		||||
                             std::vector<Real> mom,
 | 
			
		||||
                             unsigned int tmin,
 | 
			
		||||
                             unsigned int tmax);
 | 
			
		||||
                             Current curr_type, 
 | 
			
		||||
                             unsigned int mu,
 | 
			
		||||
                             unsigned int tmin, 
 | 
			
		||||
                             unsigned int tmax,
 | 
			
		||||
                 	     Lattice<iSinglet<Simd>> &lattice_cmplx);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
}}
 | 
			
		||||
 
 | 
			
		||||
@@ -381,40 +381,100 @@ void WilsonFermion<Impl>::ContractConservedCurrent(PropagatorField &q_in_1,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//template <class Impl>
 | 
			
		||||
//void WilsonFermion<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
//                                              PropagatorField &q_out,
 | 
			
		||||
//                                              Current curr_type,
 | 
			
		||||
//                                              unsigned int mu,
 | 
			
		||||
//                                              std::vector<Real> mom,
 | 
			
		||||
//                                              unsigned int tmin, 
 | 
			
		||||
//                                              unsigned int tmax)
 | 
			
		||||
//{
 | 
			
		||||
//    conformable(_grid, q_in._grid);
 | 
			
		||||
//    conformable(_grid, q_out._grid);
 | 
			
		||||
//    Lattice<iSinglet<Simd>> ph(_grid), coor(_grid);
 | 
			
		||||
//    Complex i(0.0,1.0);
 | 
			
		||||
//    PropagatorField tmpFwd(_grid), tmpBwd(_grid), tmp(_grid);
 | 
			
		||||
//    unsigned int tshift = (mu == Tp) ? 1 : 0;
 | 
			
		||||
//    unsigned int LLt    = GridDefaultLatt()[Tp];
 | 
			
		||||
//
 | 
			
		||||
//    // Momentum projection
 | 
			
		||||
//    ph = zero;
 | 
			
		||||
//    for(unsigned int mu = 0; mu < Nd - 1; mu++)
 | 
			
		||||
//    {
 | 
			
		||||
//        LatticeCoordinate(coor, mu);
 | 
			
		||||
//        ph = ph + mom[mu]*coor*((1./(_grid->_fdimensions[mu])));
 | 
			
		||||
//    }
 | 
			
		||||
//    ph = exp((Real)(2*M_PI)*i*ph);
 | 
			
		||||
//
 | 
			
		||||
//    q_out = zero;
 | 
			
		||||
//    LatticeInteger coords(_grid);
 | 
			
		||||
//    LatticeCoordinate(coords, Tp);
 | 
			
		||||
//
 | 
			
		||||
//    // Need q(x + mu) and q(x - mu).
 | 
			
		||||
//    tmp = Cshift(q_in, mu, 1);
 | 
			
		||||
//    tmpFwd = tmp*ph;
 | 
			
		||||
//    tmp = ph*q_in;
 | 
			
		||||
//    tmpBwd = Cshift(tmp, mu, -1);
 | 
			
		||||
//
 | 
			
		||||
//    parallel_for (unsigned int sU = 0; sU < Umu._grid->oSites(); ++sU)
 | 
			
		||||
//    {
 | 
			
		||||
//        // Compute the sequential conserved current insertion only if our simd
 | 
			
		||||
//        // object contains a timeslice we need.
 | 
			
		||||
//        vInteger t_mask   = ((coords._odata[sU] >= tmin) &&
 | 
			
		||||
//                             (coords._odata[sU] <= tmax));
 | 
			
		||||
//        Integer timeSlices = Reduce(t_mask);
 | 
			
		||||
//
 | 
			
		||||
//        if (timeSlices > 0)
 | 
			
		||||
//        {
 | 
			
		||||
//            Kernels::SeqConservedCurrentSiteFwd(tmpFwd._odata[sU], 
 | 
			
		||||
//                                                q_out._odata[sU], 
 | 
			
		||||
//                                                Umu, sU, mu, t_mask);
 | 
			
		||||
//        }
 | 
			
		||||
//
 | 
			
		||||
//        // Repeat for backward direction.
 | 
			
		||||
//        t_mask     = ((coords._odata[sU] >= (tmin + tshift)) && 
 | 
			
		||||
//                      (coords._odata[sU] <= (tmax + tshift)));
 | 
			
		||||
//
 | 
			
		||||
//	//if tmax = LLt-1 (last timeslice) include timeslice 0 if the time is shifted (mu=3)	
 | 
			
		||||
//	unsigned int t0 = 0;
 | 
			
		||||
//	if((tmax==LLt-1) && (tshift==1)) t_mask = (t_mask || (coords._odata[sU] == t0 ));
 | 
			
		||||
//
 | 
			
		||||
//        timeSlices = Reduce(t_mask);
 | 
			
		||||
//
 | 
			
		||||
//        if (timeSlices > 0)
 | 
			
		||||
//        {
 | 
			
		||||
//            Kernels::SeqConservedCurrentSiteBwd(tmpBwd._odata[sU], 
 | 
			
		||||
//                                                q_out._odata[sU], 
 | 
			
		||||
//                                                Umu, sU, mu, t_mask);
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
template <class Impl>
 | 
			
		||||
void WilsonFermion<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                                              PropagatorField &q_out,
 | 
			
		||||
                                              Current curr_type,
 | 
			
		||||
                                              unsigned int mu,
 | 
			
		||||
                                              std::vector<Real> mom,
 | 
			
		||||
                                              unsigned int tmin, 
 | 
			
		||||
                                              unsigned int tmax)
 | 
			
		||||
                                              unsigned int tmax,
 | 
			
		||||
					      Lattice<iSinglet<Simd>> &lattice_cmplx)
 | 
			
		||||
{
 | 
			
		||||
    conformable(_grid, q_in._grid);
 | 
			
		||||
    conformable(_grid, q_out._grid);
 | 
			
		||||
    Lattice<iSinglet<Simd>> ph(_grid), coor(_grid);
 | 
			
		||||
    Complex i(0.0,1.0);
 | 
			
		||||
    PropagatorField tmpFwd(_grid), tmpBwd(_grid), tmp(_grid);
 | 
			
		||||
    unsigned int tshift = (mu == Tp) ? 1 : 0;
 | 
			
		||||
    unsigned int LLt    = GridDefaultLatt()[Tp];
 | 
			
		||||
 | 
			
		||||
    // Momentum projection
 | 
			
		||||
    ph = zero;
 | 
			
		||||
    for(unsigned int mu = 0; mu < Nd - 1; mu++)
 | 
			
		||||
    {
 | 
			
		||||
        LatticeCoordinate(coor, mu);
 | 
			
		||||
        ph = ph + mom[mu]*coor*((1./(_grid->_fdimensions[mu])));
 | 
			
		||||
    }
 | 
			
		||||
    ph = exp((Real)(2*M_PI)*i*ph);
 | 
			
		||||
 | 
			
		||||
    q_out = zero;
 | 
			
		||||
    LatticeInteger coords(_grid);
 | 
			
		||||
    LatticeCoordinate(coords, Tp);
 | 
			
		||||
 | 
			
		||||
    // Need q(x + mu) and q(x - mu).
 | 
			
		||||
    tmp = Cshift(q_in, mu, 1);
 | 
			
		||||
    tmpFwd = tmp*ph;
 | 
			
		||||
    tmp = ph*q_in;
 | 
			
		||||
    tmpFwd = tmp*lattice_cmplx;
 | 
			
		||||
    tmp = lattice_cmplx*q_in;
 | 
			
		||||
    tmpBwd = Cshift(tmp, mu, -1);
 | 
			
		||||
 | 
			
		||||
    parallel_for (unsigned int sU = 0; sU < Umu._grid->oSites(); ++sU)
 | 
			
		||||
@@ -449,6 +509,8 @@ void WilsonFermion<Impl>::SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
                                                Umu, sU, mu, t_mask);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FermOpTemplateInstantiate(WilsonFermion);
 | 
			
		||||
 
 | 
			
		||||
@@ -155,13 +155,13 @@ class WilsonFermion : public WilsonKernels<Impl>, public WilsonFermionStatic {
 | 
			
		||||
                                PropagatorField &q_out,
 | 
			
		||||
                                Current curr_type,
 | 
			
		||||
                                unsigned int mu);
 | 
			
		||||
  void SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
                           PropagatorField &q_out,
 | 
			
		||||
                           Current curr_type,
 | 
			
		||||
                           unsigned int mu, 
 | 
			
		||||
                           std::vector<Real> mom,
 | 
			
		||||
                           unsigned int tmin,
 | 
			
		||||
                           unsigned int tmax);
 | 
			
		||||
    void SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                             PropagatorField &q_out,
 | 
			
		||||
                             Current curr_type, 
 | 
			
		||||
                             unsigned int mu,
 | 
			
		||||
                             unsigned int tmin, 
 | 
			
		||||
                             unsigned int tmax,
 | 
			
		||||
			     Lattice<iSinglet<Simd>> &lattice_cmplx);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef WilsonFermion<WilsonImplF> WilsonFermionF;
 | 
			
		||||
 
 | 
			
		||||
@@ -779,18 +779,110 @@ void WilsonFermion5D<Impl>::ContractConservedCurrent(PropagatorField &q_in_1,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//template <class Impl>
 | 
			
		||||
//void WilsonFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
//                                                PropagatorField &q_out,
 | 
			
		||||
//                                                Current curr_type, 
 | 
			
		||||
//                                                unsigned int mu,
 | 
			
		||||
//                                                std::vector<Real> mom,
 | 
			
		||||
//                                                unsigned int tmin, 
 | 
			
		||||
//                                                unsigned int tmax)
 | 
			
		||||
//{
 | 
			
		||||
//    conformable(q_in._grid, FermionGrid());
 | 
			
		||||
//    conformable(q_in._grid, q_out._grid);
 | 
			
		||||
//    Lattice<iSinglet<Simd>> ph(FermionGrid()), coor(FermionGrid());
 | 
			
		||||
//    PropagatorField tmpFwd(FermionGrid()), tmpBwd(FermionGrid()),
 | 
			
		||||
//                    tmp(FermionGrid());
 | 
			
		||||
//    Complex i(0.0, 1.0);
 | 
			
		||||
//    unsigned int tshift = (mu == Tp) ? 1 : 0;
 | 
			
		||||
//    unsigned int LLs = q_in._grid->_rdimensions[0];
 | 
			
		||||
//    unsigned int LLt    = GridDefaultLatt()[Tp];
 | 
			
		||||
//
 | 
			
		||||
//    // Momentum projection.
 | 
			
		||||
//    ph = zero;
 | 
			
		||||
//    for(unsigned int nu = 0; nu < Nd - 1; nu++)
 | 
			
		||||
//    {
 | 
			
		||||
//        // Shift coordinate lattice index by 1 to account for 5th dimension.
 | 
			
		||||
//        LatticeCoordinate(coor, nu + 1);
 | 
			
		||||
//        ph = ph + mom[nu]*coor*((1./(_FourDimGrid->_fdimensions[nu])));
 | 
			
		||||
//    }
 | 
			
		||||
//    ph = exp((Real)(2*M_PI)*i*ph);
 | 
			
		||||
//
 | 
			
		||||
//    q_out = zero;
 | 
			
		||||
//    LatticeInteger coords(_FourDimGrid);
 | 
			
		||||
//    LatticeCoordinate(coords, Tp);
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//    // Need q(x + mu, s) and q(x - mu, s). 5D lattice so shift 4D coordinate mu
 | 
			
		||||
//    // by one.
 | 
			
		||||
//    tmp = Cshift(q_in, mu + 1, 1);
 | 
			
		||||
//    tmpFwd = tmp*ph;
 | 
			
		||||
//    tmp = ph*q_in;
 | 
			
		||||
//    tmpBwd = Cshift(tmp, mu + 1, -1);
 | 
			
		||||
//
 | 
			
		||||
//    parallel_for (unsigned int sU = 0; sU < Umu._grid->oSites(); ++sU)
 | 
			
		||||
//    {
 | 
			
		||||
//        // Compute the sequential conserved current insertion only if our simd
 | 
			
		||||
//        // object contains a timeslice we need.
 | 
			
		||||
//        vInteger t_mask   = ((coords._odata[sU] >= tmin) &&
 | 
			
		||||
//                             (coords._odata[sU] <= tmax));
 | 
			
		||||
//        Integer timeSlices = Reduce(t_mask);
 | 
			
		||||
//
 | 
			
		||||
//        if (timeSlices > 0)
 | 
			
		||||
//        {
 | 
			
		||||
//            unsigned int sF = sU * LLs;
 | 
			
		||||
//            for (unsigned int s = 0; s < LLs; ++s)
 | 
			
		||||
//            {
 | 
			
		||||
//                bool axial_sign = ((curr_type == Current::Axial) && (s < (LLs / 2)));
 | 
			
		||||
//		bool tadpole_sign = (curr_type == Current::Tadpole);
 | 
			
		||||
//		bool switch_sgn = tadpole_sign || axial_sign;
 | 
			
		||||
//
 | 
			
		||||
//                Kernels::SeqConservedCurrentSiteFwd(tmpFwd._odata[sF], 
 | 
			
		||||
//                                                    q_out._odata[sF], Umu, sU,
 | 
			
		||||
//                                                    mu, t_mask, switch_sgn);
 | 
			
		||||
//                ++sF;
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//
 | 
			
		||||
//        // Repeat for backward direction.
 | 
			
		||||
//        t_mask     = ((coords._odata[sU] >= (tmin + tshift)) && 
 | 
			
		||||
//                      (coords._odata[sU] <= (tmax + tshift)));
 | 
			
		||||
//
 | 
			
		||||
//	//if tmax = LLt-1 (last timeslice) include timeslice 0 if the time is shifted (mu=3)	
 | 
			
		||||
//	unsigned int t0 = 0;
 | 
			
		||||
//	if((tmax==LLt-1) && (tshift==1)) t_mask = (t_mask || (coords._odata[sU] == t0 ));
 | 
			
		||||
//
 | 
			
		||||
//        timeSlices = Reduce(t_mask);
 | 
			
		||||
//
 | 
			
		||||
//        if (timeSlices > 0)
 | 
			
		||||
//        {
 | 
			
		||||
//            unsigned int sF = sU * LLs;
 | 
			
		||||
//            for (unsigned int s = 0; s < LLs; ++s)
 | 
			
		||||
//            {
 | 
			
		||||
//                bool axial_sign = ((curr_type == Current::Axial) && (s < (LLs / 2)));
 | 
			
		||||
//                Kernels::SeqConservedCurrentSiteBwd(tmpBwd._odata[sF], 
 | 
			
		||||
//                                                    q_out._odata[sF], Umu, sU,
 | 
			
		||||
//                                                    mu, t_mask, axial_sign);
 | 
			
		||||
//                ++sF;
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template <class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                                                PropagatorField &q_out,
 | 
			
		||||
                                                Current curr_type, 
 | 
			
		||||
                                                unsigned int mu,
 | 
			
		||||
                                                std::vector<Real> mom,
 | 
			
		||||
                                                unsigned int tmin, 
 | 
			
		||||
                                                unsigned int tmax)
 | 
			
		||||
                                                unsigned int tmax,
 | 
			
		||||
						Lattice<iSinglet<Simd>> &lattice_cmplx)
 | 
			
		||||
{
 | 
			
		||||
    conformable(q_in._grid, FermionGrid());
 | 
			
		||||
    conformable(q_in._grid, q_out._grid);
 | 
			
		||||
    Lattice<iSinglet<Simd>> ph(FermionGrid()), coor(FermionGrid());
 | 
			
		||||
    PropagatorField tmpFwd(FermionGrid()), tmpBwd(FermionGrid()),
 | 
			
		||||
                    tmp(FermionGrid());
 | 
			
		||||
    Complex i(0.0, 1.0);
 | 
			
		||||
@@ -798,25 +890,26 @@ void WilsonFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
    unsigned int LLs = q_in._grid->_rdimensions[0];
 | 
			
		||||
    unsigned int LLt    = GridDefaultLatt()[Tp];
 | 
			
		||||
 | 
			
		||||
    // Momentum projection.
 | 
			
		||||
    ph = zero;
 | 
			
		||||
    for(unsigned int nu = 0; nu < Nd - 1; nu++)
 | 
			
		||||
    {
 | 
			
		||||
        // Shift coordinate lattice index by 1 to account for 5th dimension.
 | 
			
		||||
        LatticeCoordinate(coor, nu + 1);
 | 
			
		||||
        ph = ph + mom[nu]*coor*((1./(_FourDimGrid->_fdimensions[nu])));
 | 
			
		||||
    }
 | 
			
		||||
    ph = exp((Real)(2*M_PI)*i*ph);
 | 
			
		||||
 | 
			
		||||
    q_out = zero;
 | 
			
		||||
    LatticeInteger coords(_FourDimGrid);
 | 
			
		||||
    LatticeCoordinate(coords, Tp);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //QED: photon field is 4dim, but need a 5dim object to multiply to
 | 
			
		||||
    //     DWF PropagatorField
 | 
			
		||||
    Lattice<iSinglet<Simd>> lattice_cmplx_5d(FermionGrid());
 | 
			
		||||
    for (unsigned int s = 0; s < LLs; ++s)
 | 
			
		||||
    {   
 | 
			
		||||
         InsertSlice(lattice_cmplx,lattice_cmplx_5d, s, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Need q(x + mu, s) and q(x - mu, s). 5D lattice so shift 4D coordinate mu
 | 
			
		||||
    // by one.
 | 
			
		||||
    tmp = Cshift(q_in, mu + 1, 1);
 | 
			
		||||
    tmpFwd = tmp*ph;
 | 
			
		||||
    tmp = ph*q_in;
 | 
			
		||||
    tmpFwd = tmp*lattice_cmplx_5d;
 | 
			
		||||
    tmp = lattice_cmplx_5d*q_in;
 | 
			
		||||
    tmpBwd = Cshift(tmp, mu + 1, -1);
 | 
			
		||||
 | 
			
		||||
    parallel_for (unsigned int sU = 0; sU < Umu._grid->oSites(); ++sU)
 | 
			
		||||
@@ -868,6 +961,10 @@ void WilsonFermion5D<Impl>::SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FermOpTemplateInstantiate(WilsonFermion5D);
 | 
			
		||||
GparityFermOpTemplateInstantiate(WilsonFermion5D);
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
@@ -222,13 +222,13 @@ namespace QCD {
 | 
			
		||||
                                  PropagatorField &q_out,
 | 
			
		||||
                                  Current curr_type, 
 | 
			
		||||
                                  unsigned int mu);
 | 
			
		||||
    void SeqConservedCurrent(PropagatorField &q_in,
 | 
			
		||||
    void SeqConservedCurrent(PropagatorField &q_in, 
 | 
			
		||||
                             PropagatorField &q_out,
 | 
			
		||||
                             Current curr_type,
 | 
			
		||||
                             Current curr_type, 
 | 
			
		||||
                             unsigned int mu,
 | 
			
		||||
                             std::vector<Real> mom,
 | 
			
		||||
                             unsigned int tmin,
 | 
			
		||||
                             unsigned int tmax);
 | 
			
		||||
                             unsigned int tmin, 
 | 
			
		||||
                             unsigned int tmax,
 | 
			
		||||
			     Lattice<iSinglet<Simd>> &lattice_cmplx);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
}}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user