diff --git a/Src/Kernels/Chebyshev/FChebM2LHandler.hpp b/Src/Kernels/Chebyshev/FChebM2LHandler.hpp index 978b8e3640ef406790a16369308d818cd56c5eff..c4ab7c2c06997a079a897a579ac8687974c0c987 100644 --- a/Src/Kernels/Chebyshev/FChebM2LHandler.hpp +++ b/Src/Kernels/Chebyshev/FChebM2LHandler.hpp @@ -474,15 +474,17 @@ unsigned int Compress(const FReal epsilon, const unsigned int ninteractions, // init SVD const unsigned int LWORK = 2 * (3*nnodes + ninteractions*nnodes); - FReal *const WORK = new FReal [LWORK]; + FReal *const WORK = new FReal [LWORK]{}; // K_col /////////////////////////////////////////////////////////// FReal *const K_col = new FReal [ninteractions * nnodes*nnodes]; - for (unsigned int i=0; i<ninteractions; ++i) - for (unsigned int j=0; j<nnodes; ++j) + for (unsigned int i=0; i<ninteractions; ++i){ + for (unsigned int j=0; j<nnodes; ++j){ FBlas::copy(nnodes, C + i*nnodes*nnodes + j*nnodes, K_col + j*ninteractions*nnodes + i*nnodes); + } + } // singular value decomposition FReal *const Q = new FReal [nnodes*nnodes]; FReal *const S = new FReal [nnodes]; @@ -499,8 +501,8 @@ unsigned int Compress(const FReal epsilon, const unsigned int ninteractions, // Q' -> B B = new FReal [nnodes*k_col]; - for (unsigned int i=0; i<k_col; ++i) - FBlas::copy(nnodes, Q+i, nnodes, B+i*nnodes, 1); + for (unsigned int i=0; i<k_col; ++i){ + FBlas::copy(nnodes, Q+i, nnodes, B+i*nnodes, 1);} // K_row ////////////////////////////////////////////////////////////// FReal *const K_row = C; @@ -511,6 +513,10 @@ unsigned int Compress(const FReal epsilon, const unsigned int ninteractions, if (info_row!=0){ std::stringstream stream; stream << info_row; + delete [] WORK ; + delete [] B ; + delete [] Q ; + delete [] S ; throw std::runtime_error("SVD did not converge with " + stream.str()); } const unsigned int k_row = FSvd::getRank<FReal, ORDER>(S, epsilon); @@ -540,7 +546,6 @@ unsigned int Compress(const FReal epsilon, const unsigned int ninteractions, B + j*nnodes); } } - delete [] V; delete [] S; delete [] K_row;