mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Accelerator inline
This commit is contained in:
		@@ -72,12 +72,12 @@ NAMESPACE_BEGIN(Grid);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// To fail is not to err (Cryptic clue: suggest to Google SFINAE ;) )
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjXp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjXp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  hspin(0)=fspin(0)+timesI(fspin(3));
 | 
			
		||||
  hspin(1)=fspin(1)+timesI(fspin(2));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjXm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjXm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  hspin(0)=fspin(0)-timesI(fspin(3));
 | 
			
		||||
  hspin(1)=fspin(1)-timesI(fspin(2));
 | 
			
		||||
@@ -87,12 +87,12 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
//  0 0  1  0   [1] +- [2]
 | 
			
		||||
//  0 1  0  0
 | 
			
		||||
// -1 0  0  0
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjYp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjYp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  hspin(0)=fspin(0)-fspin(3);
 | 
			
		||||
  hspin(1)=fspin(1)+fspin(2);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjYm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjYm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  hspin(0)=fspin(0)+fspin(3);
 | 
			
		||||
  hspin(1)=fspin(1)-fspin(2);
 | 
			
		||||
@@ -103,12 +103,12 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
 * -i 0  0  0
 | 
			
		||||
 *  0 i  0  0
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjZp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjZp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  hspin(0)=fspin(0)+timesI(fspin(2));
 | 
			
		||||
  hspin(1)=fspin(1)-timesI(fspin(3));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjZm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjZm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  hspin(0)=fspin(0)-timesI(fspin(2));
 | 
			
		||||
@@ -120,13 +120,13 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
 *  1 0  0  0
 | 
			
		||||
 *  0 1  0  0
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjTp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjTp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  hspin(0)=fspin(0)+fspin(2);
 | 
			
		||||
  hspin(1)=fspin(1)+fspin(3);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProjTm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjTm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  hspin(0)=fspin(0)-fspin(2);
 | 
			
		||||
@@ -139,22 +139,22 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
 *  0 0  0 -1
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj5p (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5p (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  hspin(0)=fspin(0);
 | 
			
		||||
  hspin(1)=fspin(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj5m (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5m (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  hspin(0)=fspin(2);
 | 
			
		||||
  hspin(1)=fspin(3);
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
//  template<class vtype> strong_inline void fspProj5p (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj5p (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
//  template<class vtype> accelerator_inline void fspProj5p (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5p (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  rfspin(0)=fspin(0);
 | 
			
		||||
@@ -162,8 +162,8 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
  rfspin(2)=Zero();
 | 
			
		||||
  rfspin(3)=Zero();
 | 
			
		||||
}
 | 
			
		||||
//  template<class vtype> strong_inline void fspProj5m (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj5m (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
//  template<class vtype> accelerator_inline void fspProj5m (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5m (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  rfspin(0)=Zero();
 | 
			
		||||
@@ -181,7 +181,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spProj
 | 
			
		||||
 *  0 -i 0  0  -i[1]+-[2]   == -i ([0]+-i[3]) = -i (1)
 | 
			
		||||
 * -i 0  0  0  -i[0]+-[3]   == -i ([1]+-i[2]) = -i (0)
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -189,7 +189,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=timesMinusI(hspin(1));
 | 
			
		||||
  fspin(3)=timesMinusI(hspin(0));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -197,7 +197,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=timesI(hspin(1));
 | 
			
		||||
  fspin(3)=timesI(hspin(0));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -205,7 +205,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
  fspin(2)-=timesI(hspin(1));
 | 
			
		||||
  fspin(3)-=timesI(hspin(0));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -219,7 +219,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
//  0 1  0  0              == 1(1)
 | 
			
		||||
// -1 0  0  0              ==-1(0)
 | 
			
		||||
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -227,7 +227,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)= hspin(1);
 | 
			
		||||
  fspin(3)=-hspin(0);//Unary minus?
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -235,7 +235,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=-hspin(1);
 | 
			
		||||
  fspin(3)= hspin(0);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -243,7 +243,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
  fspin(2)+=hspin(1);
 | 
			
		||||
  fspin(3)-=hspin(0);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -258,7 +258,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
 * -i 0  0  0     => -i (0)
 | 
			
		||||
 *  0 i  0  0     =>  i (1)
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -266,7 +266,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=timesMinusI(hspin(0));
 | 
			
		||||
  fspin(3)=timesI(hspin(1));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -274,7 +274,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=     timesI(hspin(0));
 | 
			
		||||
  fspin(3)=timesMinusI(hspin(1));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -282,7 +282,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
  fspin(2)-=timesI(hspin(0));
 | 
			
		||||
  fspin(3)+=timesI(hspin(1));
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -296,7 +296,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
 *  1 0  0  0    => (0)
 | 
			
		||||
 *  0 1  0  0    => (1)
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -304,7 +304,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=hspin(0);
 | 
			
		||||
  fspin(3)=hspin(1);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0);
 | 
			
		||||
@@ -312,7 +312,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=-hspin(0);
 | 
			
		||||
  fspin(3)=-hspin(1);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -320,7 +320,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
  fspin(2)+=hspin(0);
 | 
			
		||||
  fspin(3)+=hspin(1);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0);
 | 
			
		||||
@@ -334,7 +334,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
 *  0 0 -1  0
 | 
			
		||||
 *  0 0  0 -1
 | 
			
		||||
 */
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=hspin(0)+hspin(0); // add is lower latency than mul
 | 
			
		||||
@@ -342,7 +342,7 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=Zero();
 | 
			
		||||
  fspin(3)=Zero();
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)=Zero();
 | 
			
		||||
@@ -350,13 +350,13 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void spReco
 | 
			
		||||
  fspin(2)=hspin(0)+hspin(0);
 | 
			
		||||
  fspin(3)=hspin(1)+hspin(1);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(0)+=hspin(0)+hspin(0);
 | 
			
		||||
  fspin(1)+=hspin(1)+hspin(1);
 | 
			
		||||
}
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
 | 
			
		||||
  fspin(2)+=hspin(0)+hspin(0);
 | 
			
		||||
@@ -370,18 +370,18 @@ template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> strong_inline void accumR
 | 
			
		||||
//////////
 | 
			
		||||
// Xp
 | 
			
		||||
//////////
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjXp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  spProjXp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
    for(int j=0;j<N;j++){
 | 
			
		||||
@@ -390,17 +390,17 @@ template<class rtype,class vtype,int N> strong_inline void spProjXp (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  spReconXp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconXp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
    for(int j=0;j<N;j++){
 | 
			
		||||
@@ -408,17 +408,17 @@ template<class rtype,class vtype,int N> strong_inline void spReconXp (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  accumReconXp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconXp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
    for(int j=0;j<N;j++){
 | 
			
		||||
@@ -431,19 +431,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconXp (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Xm
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjXm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjXm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -453,19 +453,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjXm (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconXm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconXm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -474,19 +474,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconXm (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconXm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconXm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -500,19 +500,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconXm (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Yp
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjYp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjYp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -522,19 +522,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjYp (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconYp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconYp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -543,19 +543,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconYp (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconYp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconYp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -568,19 +568,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconYp (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Ym
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjYm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjYm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -590,19 +590,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjYm (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconYm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,const iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconYm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -611,19 +611,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconYm (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconYm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconYm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -636,19 +636,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconYm (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Zp
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjZp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjZp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -658,19 +658,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjZp (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconZp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconZp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -679,19 +679,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconZp (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconZp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconZp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -704,19 +704,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconZp (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Zm
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjZm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjZm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -726,19 +726,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjZm (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconZm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconZm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -747,19 +747,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconZm (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconZm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconZm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -772,19 +772,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconZm (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Tp
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjTp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjTp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -794,19 +794,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjTp (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconTp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconTp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -815,19 +815,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconTp (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconTp (iScalar<rtype> &hspin, iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconTp (iScalar<rtype> &hspin, iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconTp(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconTp (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconTp (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconTp(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconTp (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconTp (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -840,19 +840,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconTp (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// Tm
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProjTm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProjTm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProjTm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProjTm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjTm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProjTm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProjTm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProjTm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -862,19 +862,19 @@ template<class rtype,class vtype,int N> strong_inline void spProjTm (iMatrix<rty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spReconTm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spReconTm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -883,19 +883,19 @@ template<class rtype,class vtype,int N> strong_inline void spReconTm (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumReconTm(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumReconTm(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -908,19 +908,19 @@ template<class rtype,class vtype,int N> strong_inline void accumReconTm (iMatrix
 | 
			
		||||
////////
 | 
			
		||||
// 5p
 | 
			
		||||
////////
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProj5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProj5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProj5p(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProj5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProj5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProj5p(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProj5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProj5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -929,19 +929,19 @@ template<class rtype,class vtype,int N> strong_inline void spProj5p (iMatrix<rty
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spRecon5p(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spRecon5p(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -950,19 +950,19 @@ template<class rtype,class vtype,int N> strong_inline void spRecon5p (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumRecon5p(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumRecon5p(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -972,22 +972,22 @@ template<class rtype,class vtype,int N> strong_inline void accumRecon5p (iMatrix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// four spinor projectors for chiral proj
 | 
			
		||||
//  template<class vtype> strong_inline void fspProj5p (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class vtype> strong_inline void spProj5p (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
//  template<class vtype> accelerator_inline void fspProj5p (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class vtype> accelerator_inline void spProj5p (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProj5p(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
//  template<class vtype,int N> strong_inline void fspProj5p (iVector<vtype,N> &hspin,iVector<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProj5p (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
//  template<class vtype,int N> accelerator_inline void fspProj5p (iVector<vtype,N> &hspin,iVector<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProj5p (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProj5p(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
//  template<class vtype,int N> strong_inline void fspProj5p (iMatrix<vtype,N> &hspin,iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N> strong_inline void spProj5p (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
//  template<class vtype,int N> accelerator_inline void fspProj5p (iMatrix<vtype,N> &hspin,iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N> accelerator_inline void spProj5p (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -1001,17 +1001,17 @@ template<class vtype,int N> strong_inline void spProj5p (iMatrix<vtype,N> &hspin
 | 
			
		||||
// 5m
 | 
			
		||||
////////
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spProj5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spProj5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  spProj5m(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<rtype,N> > = 0> strong_inline void spProj5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<rtype,N> > = 0> accelerator_inline void spProj5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProj5m(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spProj5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spProj5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
    for(int j=0;j<N;j++){
 | 
			
		||||
@@ -1019,19 +1019,19 @@ template<class rtype,class vtype,int N> strong_inline void spProj5m (iMatrix<rty
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void spRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void spRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spRecon5m(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spRecon5m(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void spRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void spRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -1040,19 +1040,19 @@ template<class rtype,class vtype,int N> strong_inline void spRecon5m (iMatrix<rt
 | 
			
		||||
    }}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class rtype,class vtype> strong_inline void accumRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class rtype,class vtype> accelerator_inline void accumRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  accumRecon5m(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void accumRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    accumRecon5m(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
template<class rtype,class vtype,int N> strong_inline void accumRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class rtype,class vtype,int N> accelerator_inline void accumRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
@@ -1063,22 +1063,22 @@ template<class rtype,class vtype,int N> strong_inline void accumRecon5m (iMatrix
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// four spinor projectors for chiral proj
 | 
			
		||||
//  template<class vtype> strong_inline void fspProj5m (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class vtype> strong_inline void spProj5m (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
//  template<class vtype> accelerator_inline void fspProj5m (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
template<class vtype> accelerator_inline void spProj5m (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iScalar<vtype>,SpinorIndex>::notvalue,iScalar<vtype> >::type *temp;
 | 
			
		||||
  spProj5m(hspin._internal,fspin._internal);
 | 
			
		||||
}
 | 
			
		||||
//  template<class vtype,int N> strong_inline void fspProj5m (iVector<vtype,N> &hspin,iVector<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> strong_inline void spProj5m (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
//  template<class vtype,int N> accelerator_inline void fspProj5m (iVector<vtype,N> &hspin,iVector<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProj5m (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iVector<vtype,N>,SpinorIndex>::notvalue,iVector<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++) {
 | 
			
		||||
    spProj5m(hspin._internal[i],fspin._internal[i]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
//  template<class vtype,int N> strong_inline void fspProj5m (iMatrix<vtype,N> &hspin,iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N> strong_inline void spProj5m (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
//  template<class vtype,int N> accelerator_inline void fspProj5m (iMatrix<vtype,N> &hspin,iMatrix<vtype,N> &fspin)
 | 
			
		||||
template<class vtype,int N> accelerator_inline void spProj5m (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
 | 
			
		||||
{
 | 
			
		||||
  //typename std::enable_if<matchGridTensorIndex<iMatrix<vtype,N>,SpinorIndex>::notvalue,iMatrix<vtype,N> >::type *temp;
 | 
			
		||||
  for(int i=0;i<N;i++){ 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user