diff --git a/Hadrons/Modules/MDistil/BContraction.hpp b/Hadrons/Modules/MDistil/BContraction.hpp index 71f6474c..2eaefd7f 100644 --- a/Hadrons/Modules/MDistil/BContraction.hpp +++ b/Hadrons/Modules/MDistil/BContraction.hpp @@ -175,8 +175,10 @@ void TBContraction::execute(void) }; std::vector factor23{{0.,-1.},{0.,1.},{0.,1.}}; //BaryonTensorSet BField3(storage,Nmom,4,Nt,N_1,N_2,N_3); - using BaryonTensorSet = Eigen::Tensor; + using BaryonTensorSet = Eigen::Tensor; BaryonTensorSet BField3(Nmom,4,Nt,N_1,N_2,N_3); + using C2Set = Eigen::Tensor; + C2Set corr(Nmom,4,Nt); std::vector BField2(Nmom*Nt*N_1*N_2*N_3); Complex diquark2; @@ -223,10 +225,25 @@ void TBContraction::execute(void) } //Product ijk * ijk - // for ijk * jik: (4,5),(5,4),(6,6) z.b. - Eigen::array, 3> product_dims = { Eigen::IndexPair(4, 4),Eigen::IndexPair(5, 5) ,Eigen::IndexPair(6, 6) }; - // Whycan't I choose the dimension to be 3??? Want to sum over them, not save each element! - Eigen::Tensor C2 = BField3.contract(BField3,product_dims); + // for ijk * jik: (0,1),(1,0),(2,2) z.b. + Eigen::array, 3> product_dims = { Eigen::IndexPair(0,0),Eigen::IndexPair(1,1) ,Eigen::IndexPair(2,2) }; + for (int imom=0 ; imom < Nmom ; imom++){ + Eigen::Tensor B5 = BField3.chip(imom,0); + for (int is=0 ; is < 4 ; is++){ + Eigen::Tensor B4 = B5.chip(is,0); + for (int t=0 ; t < Nt ; t++){ + Eigen::Tensor B3 = B4.chip(t,0); + Eigen::Tensor C2 = B3.contract(B3,product_dims); + corr(imom,is,t) = C2(0); + } + } + } + //Eigen::Tensor C2 = BField3.contract(BField3,product_dims); + for (int is=0 ; is < 4 ; is++){ + for (int t=0 ; t < Nt ; t++){ + std::cout << "C2(is=" << is << ",t=" << t << ") = " << corr(0,is,t) << std::endl; + } + } } END_MODULE_NAMESPACE