mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Multiple local slice fixes
This commit is contained in:
		@@ -261,7 +261,7 @@ void TDistilVectors<FImpl>::execute(void)
 | 
				
			|||||||
              if( t_inv >= Ntfirst && t_inv < Ntfirst + Ntlocal ) {
 | 
					              if( t_inv >= Ntfirst && t_inv < Ntfirst + Ntlocal ) {
 | 
				
			||||||
                for (int ik = dk; ik < nvec; ik += LI){
 | 
					                for (int ik = dk; ik < nvec; ik += LI){
 | 
				
			||||||
                  for (int is = ds; is < Ns; is += SI){
 | 
					                  for (int is = ds; is < Ns; is += SI){
 | 
				
			||||||
                    ExtractSliceLocal(evec3d,epack.evec[ik],0,t_inv,3);
 | 
					                    ExtractSliceLocal(evec3d,epack.evec[ik],0,t_inv-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                    //tmp3d_nospin = evec3d * noise[inoise + nnoise*(t_inv + Nt*(ik+nvec*is))];
 | 
					                    //tmp3d_nospin = evec3d * noise[inoise + nnoise*(t_inv + Nt*(ik+nvec*is))];
 | 
				
			||||||
                    tmp3d_nospin = evec3d * noise(inoise, t_inv, ik, is);
 | 
					                    tmp3d_nospin = evec3d * noise(inoise, t_inv, ik, is);
 | 
				
			||||||
                    tmp3d=zero;
 | 
					                    tmp3d=zero;
 | 
				
			||||||
@@ -289,7 +289,7 @@ void TDistilVectors<FImpl>::execute(void)
 | 
				
			|||||||
            for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
					            for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
				
			||||||
              sink_tslice=zero;
 | 
					              sink_tslice=zero;
 | 
				
			||||||
              for (int ivec = 0; ivec < nvec; ivec++) {
 | 
					              for (int ivec = 0; ivec < nvec; ivec++) {
 | 
				
			||||||
                ExtractSliceLocal(evec3d,epack.evec[ivec],0,t,3);
 | 
					                ExtractSliceLocal(evec3d,epack.evec[ivec],0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                sink_tslice += evec3d * perambulator(t, ivec, dk, inoise,dt,ds);
 | 
					                sink_tslice += evec3d * perambulator(t, ivec, dk, inoise,dt,ds);
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
              InsertSliceLocal(sink_tslice,phi[vecindex],0,t-Ntfirst,Grid::QCD::Tdir);
 | 
					              InsertSliceLocal(sink_tslice,phi[vecindex],0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -263,7 +263,7 @@ void TLapEvec<GImpl>::execute(void)
 | 
				
			|||||||
    RotateEigen( eig[t].evec ); // Rotate the eigenvectors into our phase convention
 | 
					    RotateEigen( eig[t].evec ); // Rotate the eigenvectors into our phase convention
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i=0;i<LPar.Nvec;i++){
 | 
					    for (int i=0;i<LPar.Nvec;i++){
 | 
				
			||||||
      InsertSliceLocal(eig[t].evec[i],eig4d.evec[i],0,t,3);
 | 
					      InsertSliceLocal(eig[t].evec[i],eig4d.evec[i],0,t,Grid::QCD::Tdir);
 | 
				
			||||||
      if(t==0 && Ntfirst==0)
 | 
					      if(t==0 && Ntfirst==0)
 | 
				
			||||||
        eig4d.eval[i] = eig[t].eval[i]; // TODO: Discuss: is this needed? Is there a better way?
 | 
					        eig4d.eval[i] = eig[t].eval[i]; // TODO: Discuss: is this needed? Is there a better way?
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -171,7 +171,7 @@ void TPerambFromSolve<FImpl>::execute(void)
 | 
				
			|||||||
            for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
					            for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
				
			||||||
              ExtractSliceLocal(result_3d,result_nospin,0,t-Ntfirst,Grid::QCD::Tdir);
 | 
					              ExtractSliceLocal(result_3d,result_nospin,0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
              for (int ivec = 0; ivec < nvec_reduced; ivec++) {
 | 
					              for (int ivec = 0; ivec < nvec_reduced; ivec++) {
 | 
				
			||||||
                ExtractSliceLocal(evec3d,epack.evec[ivec],0,t,3);
 | 
					                ExtractSliceLocal(evec3d,epack.evec[ivec],0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                pokeSpin(perambulator(t, ivec, dk, inoise,dt,ds),static_cast<Complex>(innerProduct(evec3d, result_3d)),is);
 | 
					                pokeSpin(perambulator(t, ivec, dk, inoise,dt,ds),static_cast<Complex>(innerProduct(evec3d, result_3d)),is);
 | 
				
			||||||
                std::cout <<  "perambulator(t, ivec, dk, inoise,dt,ds)(is) = (" << t << "," << ivec << "," << dk << "," << inoise << "," << dt << "," << ds << ")(" << is << ") = " <<  perambulator(t, ivec, dk, inoise,dt,ds)()(is)() << std::endl;
 | 
					                std::cout <<  "perambulator(t, ivec, dk, inoise,dt,ds)(is) = (" << t << "," << ivec << "," << dk << "," << inoise << "," << dt << "," << ds << ")(" << is << ") = " <<  perambulator(t, ivec, dk, inoise,dt,ds)()(is)() << std::endl;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -206,7 +206,7 @@ void TPerambulator<FImpl>::execute(void)
 | 
				
			|||||||
              if( t_inv >= Ntfirst && t_inv < Ntfirst + Ntlocal ) {
 | 
					              if( t_inv >= Ntfirst && t_inv < Ntfirst + Ntlocal ) {
 | 
				
			||||||
                for (int ik = dk; ik < nvec; ik += LI){
 | 
					                for (int ik = dk; ik < nvec; ik += LI){
 | 
				
			||||||
                  for (int is = ds; is < Ns; is += SI){ 
 | 
					                  for (int is = ds; is < Ns; is += SI){ 
 | 
				
			||||||
                    ExtractSliceLocal(evec3d,epack.evec[ik],0,t_inv,3);
 | 
					                    ExtractSliceLocal(evec3d,epack.evec[ik],0,t_inv-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                    //tmp3d_nospin = evec3d * noise[inoise + nnoise*(t_inv + Nt*(ik+nvec*is))];
 | 
					                    //tmp3d_nospin = evec3d * noise[inoise + nnoise*(t_inv + Nt*(ik+nvec*is))];
 | 
				
			||||||
                    tmp3d_nospin = evec3d * noise(inoise, t_inv, ik, is);
 | 
					                    tmp3d_nospin = evec3d * noise(inoise, t_inv, ik, is);
 | 
				
			||||||
                    tmp3d=zero;
 | 
					                    tmp3d=zero;
 | 
				
			||||||
@@ -235,7 +235,7 @@ void TPerambulator<FImpl>::execute(void)
 | 
				
			|||||||
              for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
					              for (int t = Ntfirst; t < Ntfirst + Ntlocal; t++) {
 | 
				
			||||||
                ExtractSliceLocal(result_3d,result_nospin,0,t-Ntfirst,Grid::QCD::Tdir);
 | 
					                ExtractSliceLocal(result_3d,result_nospin,0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                for (int ivec = 0; ivec < nvec; ivec++) {
 | 
					                for (int ivec = 0; ivec < nvec; ivec++) {
 | 
				
			||||||
                  ExtractSliceLocal(evec3d,epack.evec[ivec],0,t,3);
 | 
					                  ExtractSliceLocal(evec3d,epack.evec[ivec],0,t-Ntfirst,Grid::QCD::Tdir);
 | 
				
			||||||
                  pokeSpin(perambulator(t, ivec, dk, inoise,dt,ds),static_cast<Complex>(innerProduct(evec3d, result_3d)),is);
 | 
					                  pokeSpin(perambulator(t, ivec, dk, inoise,dt,ds),static_cast<Complex>(innerProduct(evec3d, result_3d)),is);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user