diff --git a/Src/Kernels/Spherical/FSphericalKernel.hpp b/Src/Kernels/Spherical/FSphericalKernel.hpp
index 7fe059f5d8d82fd6b388ccf126a59444de02d459..06a60fd25c033c5a3d7bc87db9413ed4223d58fd 100755
--- a/Src/Kernels/Spherical/FSphericalKernel.hpp
+++ b/Src/Kernels/Spherical/FSphericalKernel.hpp
@@ -129,12 +129,6 @@ public:
                           const FComplexe* const FRestrict M2L_Outer_transfer){
         int index_j_k = 0;
 
-        	std::cout << "$$$$$$$$$$$$$$$$$ multipole To Local $$$$$$$$$$$$$$$" << std::endl
-        				<<     " devM2lP " << this->devM2lP << std::endl ;
-        	for (int i = 0 ; i <  this->devM2lP  ; ++i ) {
-        		std::cout << "  " << M2L_Outer_transfer[i] ;
-        	}
-        	std::cout <<  	std::endl;
         // L_j^k
         // HPMSTART(51, "M2L computation (loops)");
         // j from 0 to P
@@ -145,11 +139,9 @@ public:
             for (int k = 0 ; k <= j ; ++k, ++index_j_k){
                 // (-1)^n
                 FReal pow_of_minus_1_for_n = 1.0;
-                    std::cout <<  "Begin  j: " << j << "  k: " << k << std::endl;
 
                 // work with a local variable
                 FComplexe L_j_k = local_exp[index_j_k];
-                L_j_k.setRealImag(0.0, 0.0);
                 // n from 0 to P or do P-j
     //            for (int n = 0 ; n <= Parent::devP /*or*/ /*Parent::devP-j*/ ; ++n){
                     for (int n = 0 ; n <= Parent::devP-j ; ++n){  // faster than double height Parent::devP
@@ -159,13 +151,11 @@ public:
                     // Outer_{j+n}^{-k-l} : here points on the M2L transfer function/expansion term of degree j+n and order |-k-l|
                     const int index_n_j = Parent::harmonic.getPreExpRedirJ(n+j);
 
-                    // due to the symmetry
                     FReal pow_of_minus_1_for_l = pow_of_minus_1_for_n; // (-1)^l
+
                     // We start with l=n (and not l=-n) so that we always set p_Outer_term to a correct value in the first loop.
                     int l = n;
-                    for(/* l = n */ ; l >= 0 ; --l){ // we have -k-l<0 and l>0
-                    		std::cout << " Loop 1    k "<< k << " n+j " << n+j <<"  n " << n <<  "  l " << l  << "  -k-l " << -k-l << " (-1)^(k+l) " << pow_of_minus_1_for_l * pow_of_minus_1_for_k  << " index O " << index_n_j + (k + l)
-                    				<< " index M " << index_n + l << std::endl;
+                    for(/* l = n */ ; l > 0 ; --l){ // we have -k-l<0 and l>0
                         const FComplexe M_n_l = multipole_exp_src[index_n + l];
                         const FComplexe O_n_j__k_l = M2L_Outer_transfer[index_n_j + k + l];
 
@@ -175,21 +165,12 @@ public:
                         L_j_k.incImag( pow_of_minus_1_for_l * pow_of_minus_1_for_k *
                                                     ((M_n_l.getImag() * O_n_j__k_l.getReal()) -
                                                      (M_n_l.getReal() * O_n_j__k_l.getImag())));
-                        std::cout <<   "                M_n_l "<< M_n_l <<   "    O_n+j_(-k-l) " << O_n_j__k_l  << std::endl;
 
                         pow_of_minus_1_for_l = -pow_of_minus_1_for_l;
                     }
-                    // l= 0
-
-                    // Now l=-1, we have to conjugate M and O because we store only positive indexes
 
-                    //
-//                    for(l = 0 ;  l <= 1-k; --l){ // we have -k-l<0 and l<=0
-  //                  for(/* l = 0 */; l >= -n &&  (-k< l; --l){ // we have -k-l<0 and l<=0
-                       for(/* l = 0 */; l >= -n &&  (-k-l) < 0 ; --l){ // we have -k-l<0 and l<=0
-                   		std::cout << " Loop 2     k "<< k << " n+j " << n+j <<"  n " << n <<  " l " << l  << "  -k-l " << -k-l << " (-1)^(k) " <<  pow_of_minus_1_for_k  << " index O " << index_n_j + (k + l)
-                            				<< " index M " << index_n - l << std::endl;
-                       const FComplexe M_n_l        = multipole_exp_src[index_n - l];
+                    for(/* l = 0 */; l >= -n &&  (-k-l) < 0 ; --l){ // we have -k-l<0 and l<=0
+                        const FComplexe M_n_l = multipole_exp_src[index_n - l];
                         const FComplexe O_n_j__k_l = M2L_Outer_transfer[index_n_j + k + l];
 
                         L_j_k.incReal( pow_of_minus_1_for_k *
@@ -198,14 +179,11 @@ public:
                         L_j_k.decImag(  pow_of_minus_1_for_k *
                                                      ((M_n_l.getImag() * O_n_j__k_l.getReal()) +
                                                       (M_n_l.getReal() * O_n_j__k_l.getImag())));
-                        std::cout <<   "                M_n_l "<< M_n_l <<   "    O_n+j_(-k-) " << O_n_j__k_l  << std::endl;
+
                         pow_of_minus_1_for_l = -pow_of_minus_1_for_l;
                     }
-  //                  pow_of_minus_1_for_l = pow_of_minus_1_for_n ;
-//                    for(l=-k; l <= -n ; --l){ // we have -k-l>=0 and l<=0
-                     for(/*l = -n-1 or l = -k */; l >= -n ; --l){ // we have -k-l>=0 and l<=0
-                 		std::cout << " Loop 3     k "<< k <<"  n+j " << n+j <<"  n " << n <<  " l " << l  << "  -k-l " << -k-l << " (-1)^(l) " << pow_of_minus_1_for_l  << " index O " << index_n_j - (k + l)
-                            				<< " index M " << index_n - l << std::endl;
+
+                    for(/*l = -n-1 or l = -k-1 */; l >= -n ; --l){ // we have -k-l>=0 and l<=0
                         const FComplexe M_n_l = multipole_exp_src[index_n - l];
                         const FComplexe O_n_j__k_l = M2L_Outer_transfer[index_n_j - (k + l)];
 
@@ -215,7 +193,6 @@ public:
                         L_j_k.incImag( pow_of_minus_1_for_l *
                                                     ((M_n_l.getReal() * O_n_j__k_l.getImag()) -
                                                      (M_n_l.getImag() * O_n_j__k_l.getReal())));
-                        std::cout <<   "                M_n_l "<< M_n_l <<   "    O_n+j_(-k-l) " << O_n_j__k_l  << std::endl;
 
                         pow_of_minus_1_for_l = -pow_of_minus_1_for_l;
                     }
@@ -225,7 +202,6 @@ public:
 
                 // put in the local vector
                 local_exp[index_j_k] = L_j_k;
-                std::cout <<   "                index_j_k "<<index_j_k<<   "    L_j_k " << L_j_k<< std::endl;
 
                 pow_of_minus_1_for_k = -pow_of_minus_1_for_k;
             }//k
diff --git a/Src/Utils/FMath.hpp b/Src/Utils/FMath.hpp
index 0d7618d0f40e8a7be13851dfc4241ea4ab71c742..4e240139e019db5df25494b8efa40e81b4f6bd78 100755
--- a/Src/Utils/FMath.hpp
+++ b/Src/Utils/FMath.hpp
@@ -4,13 +4,13 @@
 // This software is a computer program whose purpose is to compute the FMM.
 //
 // This software is governed by the CeCILL-C and LGPL licenses and
-// abiding by the rules of distribution of free software.  
-// 
+// abiding by the rules of distribution of free software.
+//
 // This program is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU General Public and CeCILL-C Licenses for more details.
-// "http://www.cecill.info". 
+// "http://www.cecill.info".
 // "http://www.gnu.org/licenses".
 // ===================================================================================
 #ifndef FMATH_HPP
@@ -47,302 +47,302 @@ struct FMath{
     /** To get absolute value */
     template <class NumType>
     static NumType Abs(const NumType inV){
-        return (inV < 0 ? -inV : inV);
+	return (inV < 0 ? -inV : inV);
     }
 
 #ifdef ScalFMM_USE_SSE
     static __m128 Abs(const __m128 inV){
-        return _mm_max_ps(_mm_sub_ps(_mm_setzero_ps(), inV), inV);
+	return _mm_max_ps(_mm_sub_ps(_mm_setzero_ps(), inV), inV);
     }
 
     static __m128d Abs(const __m128d inV){
-        return _mm_max_pd(_mm_sub_pd(_mm_setzero_pd(), inV), inV);
+	return _mm_max_pd(_mm_sub_pd(_mm_setzero_pd(), inV), inV);
     }
 #endif
 #ifdef ScalFMM_USE_AVX
     static __m256 Abs(const __m256 inV){
-        return _mm256_max_ps(_mm256_sub_ps(_mm256_setzero_ps(), inV), inV);
+	return _mm256_max_ps(_mm256_sub_ps(_mm256_setzero_ps(), inV), inV);
     }
 
     static __m256d Abs(const __m256d inV){
-        return _mm256_max_pd(_mm256_sub_pd(_mm256_setzero_pd(), inV), inV);
+	return _mm256_max_pd(_mm256_sub_pd(_mm256_setzero_pd(), inV), inV);
     }
 #endif
 
     /** To get max between 2 values */
     template <class NumType>
     static NumType Max(const NumType inV1, const NumType inV2){
-        return (inV1 > inV2 ? inV1 : inV2);
+	return (inV1 > inV2 ? inV1 : inV2);
     }
 
     /** To get min between 2 values */
     template <class NumType>
     static NumType Min(const NumType inV1, const NumType inV2){
-        return (inV1 < inV2 ? inV1 : inV2);
+	return (inV1 < inV2 ? inV1 : inV2);
     }
 
 #ifdef ScalFMM_USE_SSE
     static __m128 Max(const __m128 inV1, const __m128 inV2){
-        return _mm_max_ps(inV1, inV2);
+	return _mm_max_ps(inV1, inV2);
     }
     static __m128 Min(const __m128 inV1, const __m128 inV2){
-        return _mm_min_ps(inV1, inV2);
+	return _mm_min_ps(inV1, inV2);
     }
 
     static __m128d Max(const __m128d inV1, const __m128d inV2){
-        return _mm_max_pd(inV1, inV2);
+	return _mm_max_pd(inV1, inV2);
     }
     static __m128d Min(const __m128d inV1, const __m128d inV2){
-        return _mm_min_pd(inV1, inV2);
+	return _mm_min_pd(inV1, inV2);
     }
 #endif
 #ifdef ScalFMM_USE_AVX
     static __m256 Max(const __m256 inV1, const __m256 inV2){
-        return _mm256_max_ps(inV1, inV2);
+	return _mm256_max_ps(inV1, inV2);
     }
     static __m256 Min(const __m256 inV1, const __m256 inV2){
-        return _mm256_min_ps(inV1, inV2);
+	return _mm256_min_ps(inV1, inV2);
     }
 
     static __m256d Max(const __m256d inV1, const __m256d inV2){
-        return _mm256_max_pd(inV1, inV2);
+	return _mm256_max_pd(inV1, inV2);
     }
     static __m256d Min(const __m256d inV1, const __m256d inV2){
-        return _mm256_min_pd(inV1, inV2);
+	return _mm256_min_pd(inV1, inV2);
     }
 #endif
 
     /** To know if 2 values seems to be equal */
     template <class NumType>
     static bool LookEqual(const NumType inV1, const NumType inV2){
-        return (Abs(inV1-inV2) < std::numeric_limits<NumType>::epsilon());
-        //const FReal relTol = FReal(0.00001);
-        //const FReal absTol = FReal(0.00001);
-        //return (Abs(inV1 - inV2) <= Max(absTol, relTol * Max(Abs(inV1), Abs(inV2))));
+	return (Abs(inV1-inV2) < std::numeric_limits<NumType>::epsilon());
+	//const FReal relTol = FReal(0.00001);
+	//const FReal absTol = FReal(0.00001);
+	//return (Abs(inV1 - inV2) <= Max(absTol, relTol * Max(Abs(inV1), Abs(inV2))));
     }
 
     /** To know if 2 values seems to be equal */
     template <class NumType>
     static FReal RelatifDiff(const NumType inV1, const NumType inV2){
-        return Abs(inV1 - inV2)*Abs(inV1 - inV2)/Max(Abs(inV1*inV1), Abs(inV2*inV2));
+	return Abs(inV1 - inV2)*Abs(inV1 - inV2)/Max(Abs(inV1*inV1), Abs(inV2*inV2));
     }
 
     /** To get floor of a FReal */
     static float dfloor(const float inValue){
-        return floorf(inValue);
+	return floorf(inValue);
     }
     static double dfloor(const double inValue){
-        return floor(inValue);
+	return floor(inValue);
     }
 
     /** To get ceil of a FReal */
     static float Ceil(const float inValue){
-        return ceilf(inValue);
+	return ceilf(inValue);
     }
     static double Ceil(const double inValue){
-        return ceil(inValue);
+	return ceil(inValue);
     }
 
 #if  defined(ScalFMM_USE_SSE ) && defined(__SSSE4_1__)
     static __m128 dfloor(const __m128 inV){
-        return _mm_floor_ps(inV);
+	return _mm_floor_ps(inV);
     }
 
     static __m128d dfloor(const __m128d inV){
-        return _mm_floor_pd(inV);
+	return _mm_floor_pd(inV);
     }
 
     static __m128 Ceil(const __m128 inV){
-        return _mm_ceil_ps(inV);
+	return _mm_ceil_ps(inV);
     }
 
     static __m128d Ceil(const __m128d inV){
-        return _mm_ceil_pd(inV);
+	return _mm_ceil_pd(inV);
     }
 #endif
 #ifdef ScalFMM_USE_AVX
     static __m256 dfloor(const __m256 inV){
-        return _mm256_floor_ps(inV);
+	return _mm256_floor_ps(inV);
     }
 
     static __m256d dfloor(const __m256d inV){
-        return _mm256_floor_pd(inV);
+	return _mm256_floor_pd(inV);
     }
 
     static __m256 Ceil(const __m256 inV){
-        return _mm256_ceil_ps(inV);
+	return _mm256_ceil_ps(inV);
     }
 
     static __m256d Ceil(const __m256d inV){
-        return _mm256_ceil_pd(inV);
+	return _mm256_ceil_pd(inV);
     }
 #endif
 
     /** To get pow */
     static double pow(double x, double y){
-        return ::pow(x,y);
+	return ::pow(x,y);
     }
     static double pow(float x, float y){
-        return ::powf(x,y);
+	return ::powf(x,y);
     }
     template <class NumType>
     static NumType pow(const NumType inValue, int power){
-        NumType result = 1;
-        while(power-- > 0) result *= inValue;
-        return result;
+	NumType result = 1;
+	while(power-- > 0) result *= inValue;
+	return result;
     }
 
     /** To get pow of 2 */
     static int pow2(const int power){
-        return (1 << power);
+	return (1 << power);
     }
 
     /** To get factorial */
     template <class NumType>
     static double factorial(int inValue){
-        if(inValue==0) return NumType(1.);
-        else {
-            NumType result = NumType(inValue);
-            while(--inValue > 1) result *= NumType(inValue);
-            return result;
-        }
+	if(inValue==0) return NumType(1.);
+	else {
+	    NumType result = NumType(inValue);
+	    while(--inValue > 1) result *= NumType(inValue);
+	    return result;
+	}
     }
 
     /** To know if a value is between two others */
     template <class NumType>
     static bool Between(const NumType inValue, const NumType inMin, const NumType inMax){
-        return ( inMin <= inValue && inValue < inMax );
+	return ( inMin <= inValue && inValue < inMax );
     }
 
     /** To get sqrt of a FReal */
     static float Sqrt(const float inValue){
-        return sqrtf(inValue);
+	return sqrtf(inValue);
     }
     static double Sqrt(const double inValue){
-        return sqrt(inValue);
+	return sqrt(inValue);
     }
     static float Rsqrt(const float inValue){
-        return float(1.0)/sqrtf(inValue);
+	return float(1.0)/sqrtf(inValue);
     }
     static double Rsqrt(const double inValue){
-        return 1.0/sqrt(inValue);
+	return 1.0/sqrt(inValue);
     }
 #ifdef ScalFMM_USE_SSE
     static __m128 Sqrt(const __m128 inV){
-        return _mm_sqrt_ps(inV);
+	return _mm_sqrt_ps(inV);
     }
 
     static __m128d Sqrt(const __m128d inV){
-        return _mm_sqrt_pd(inV);
+	return _mm_sqrt_pd(inV);
     }
 
     static __m128 Rsqrt(const __m128 inV){
-        return _mm_rsqrt_ps(inV);
+	return _mm_rsqrt_ps(inV);
     }
 
     static __m128d Rsqrt(const __m128d inV){
-        return _mm_set_pd1(1.0) / _mm_sqrt_pd(inV);
+	return _mm_set_pd1(1.0) / _mm_sqrt_pd(inV);
     }
 #endif
 #ifdef ScalFMM_USE_AVX
     static __m256 Sqrt(const __m256 inV){
-        return _mm256_sqrt_ps(inV);
+	return _mm256_sqrt_ps(inV);
     }
 
     static __m256d Sqrt(const __m256d inV){
-        return _mm256_sqrt_pd(inV);
+	return _mm256_sqrt_pd(inV);
     }
 
     static __m256 Rsqrt(const __m256 inV){
-        return _mm256_rsqrt_ps(inV);
+	return _mm256_rsqrt_ps(inV);
     }
 
     static __m256d Rsqrt(const __m256d inV){
-        return _mm256_set_pd1(1.0) / _mm256_sqrt_pd(inV);
+	return _mm256_set1_pd(1.0) / _mm256_sqrt_pd(inV);
     }
 #endif
 
     /** To get Log of a FReal */
     static float Log(const float inValue){
-        return logf(inValue);
+	return logf(inValue);
     }
     static double Log(const double inValue){
-        return log(inValue);
+	return log(inValue);
     }
 
     /** To get Log2 of a FReal */
     static float Log2(const float inValue){
-        return log2f(inValue);
+	return log2f(inValue);
     }
     static double Log2(const double inValue){
-        return log2(inValue);
+	return log2(inValue);
     }
 
     /** To get atan2 of a 2 FReal,  The return value is given in radians and is in the
       range -pi to pi, inclusive.  */
     static float Atan2(const float inValue1,const float inValue2){
-        return atan2f(inValue1,inValue2);
+	return atan2f(inValue1,inValue2);
     }
     static double Atan2(const double inValue1,const double inValue2){
-        return atan2(inValue1,inValue2);
+	return atan2(inValue1,inValue2);
     }
 
     /** To get sin of a FReal */
     static float Sin(const float inValue){
-        return sinf(inValue);
+	return sinf(inValue);
     }
     static double Sin(const double inValue){
-        return sin(inValue);
+	return sin(inValue);
     }
 
     /** To get asinf of a float. The result is in the range [0, pi]*/
     static float ASin(const float inValue){
-        return asinf(inValue);
+	return asinf(inValue);
     }
     /** To get asinf of a double. The result is in the range [0, pi]*/
     static double ASin(const double inValue){
-        return asin(inValue);
+	return asin(inValue);
     }
 
     /** To get cos of a FReal */
     static float Cos(const float inValue){
-        return cosf(inValue);
+	return cosf(inValue);
     }
     static double Cos(const double inValue){
-        return cos(inValue);
+	return cos(inValue);
     }
 
     /** To get arccos of a float. The result is in the range [0, pi]*/
     static float ACos(const float inValue){
-        return acosf(inValue);
+	return acosf(inValue);
     }
     /** To get arccos of a double. The result is in the range [0, pi]*/
     static double ACos(const double inValue){
-        return acos(inValue);
+	return acos(inValue);
     }
 
     /** To get atan2 of a 2 FReal */
     static float Fmod(const float inValue1,const float inValue2){
-        return fmodf(inValue1,inValue2);
+	return fmodf(inValue1,inValue2);
     }
     /** return the floating-point remainder of inValue1  / inValue2 */
     static double Fmod(const double inValue1,const double inValue2){
-        return fmod(inValue1,inValue2);
+	return fmod(inValue1,inValue2);
     }
 
     /** To know if a variable is nan, based on the C++0x */
     template <class TestClass>
     static bool IsNan(const TestClass& value){
-        //volatile const TestClass* const pvalue = &value;
-        //return (*pvalue) != value;
-        return std::isnan(value);
+	//volatile const TestClass* const pvalue = &value;
+	//return (*pvalue) != value;
+	return std::isnan(value);
     }
 
     /** To know if a variable is not inf, based on the C++0x */
     template <class TestClass>
     static bool IsFinite(const TestClass& value){
-        // return !(value <= std::numeric_limits<T>::min()) && !(std::numeric_limits<T>::max() <= value);
-        return std::isfinite(value);
+	// return !(value <= std::numeric_limits<T>::min()) && !(std::numeric_limits<T>::max() <= value);
+	return std::isfinite(value);
     }
 
     template <class NumType>
@@ -357,98 +357,98 @@ struct FMath{
 
     /** A class to compute accuracy */
     class FAccurater {
-        int    nbElements;
-        FReal l2Dot;
-        FReal l2Diff;
-        FReal max;
-        FReal maxDiff;
+	int    nbElements;
+	FReal l2Dot;
+	FReal l2Diff;
+	FReal max;
+	FReal maxDiff;
     public:
-        FAccurater() : nbElements(0),l2Dot(0.0), l2Diff(0.0), max(0.0), maxDiff(0.0) {
-        }
-        /** with inital values */
-        FAccurater(const FReal inGood[], const FReal inBad[], const int nbValues)
-            :  nbElements(0),l2Dot(0.0), l2Diff(0.0), max(0.0), maxDiff(0.0)  {
-            add(inGood, inBad, nbValues);
-        }
-
-
-        /** Add value to the current list */
-        void add(const FReal inGood, const FReal inBad){
-            l2Diff          += (inBad - inGood) * (inBad - inGood);
-            l2Dot          += inGood * inGood;
-            max               = Max(max , Abs(inGood));
-            maxDiff         = Max(maxDiff, Abs(inGood-inBad));
-            nbElements += 1 ;
-        }
-        /** Add array of values */
-        void add(const FReal inGood[], const FReal inBad[], const int nbValues){
-            for(int idx = 0 ; idx < nbValues ; ++idx){
-                add(inGood[idx],inBad[idx]);
-            }
-            nbElements += nbValues ;
-        }
-
-        /** Add an accurater*/
-        void add(const FAccurater& inAcc){
-            l2Diff += inAcc.getl2Diff();
-            l2Dot +=  inAcc.getl2Dot();
-            max = Max(max,inAcc.getmax());
-            maxDiff = Max(maxDiff,inAcc.getInfNorm());
-            nbElements += inAcc.getNbElements();
-        }
-
-        FReal getl2Diff() const{
-            return l2Diff;
-        }
-        FReal getl2Dot() const{
-            return l2Dot;
-        }
-        FReal getmax() const{
-            return max;
-        }
-        int getNbElements() const{
-            return nbElements;
-        }
-        void  setNbElements(const int & n) {
-            nbElements = n;
-        }
-
-        /** Get the root mean squared error*/
-        FReal getL2Norm() const{
-            return Sqrt(l2Diff );
-        }
-        /** Get the L2 norm */
-        FReal getRMSError() const{
-            return Sqrt(l2Diff /static_cast<FReal>(nbElements));
-        }
-
-        /** Get the inf norm */
-        FReal getInfNorm() const{
-            return maxDiff;
-        }
-        /** Get the L2 norm */
-        FReal getRelativeL2Norm() const{
-            return Sqrt(l2Diff / l2Dot);
-        }
-        /** Get the inf norm */
-        FReal getRelativeInfNorm() const{
-            return maxDiff / max;
-        }
-        /** Print */
-        template <class StreamClass>
-        friend StreamClass& operator<<(StreamClass& output, const FAccurater& inAccurater){
-            output << "[Error] Relative L2Norm = " << inAccurater.getRelativeL2Norm() << " \t RMS Norm = " << inAccurater.getRMSError() << " \t Relative Inf = " << inAccurater.getRelativeInfNorm();
-            return output;
-        }
-
-        void reset()
-        {
-            l2Dot          = FReal(0);
-            l2Diff          = FReal(0);;
-            max            = FReal(0);
-            maxDiff      = FReal(0);
-            nbElements = 0 ;
-        }
+	FAccurater() : nbElements(0),l2Dot(0.0), l2Diff(0.0), max(0.0), maxDiff(0.0) {
+	}
+	/** with inital values */
+	FAccurater(const FReal inGood[], const FReal inBad[], const int nbValues)
+	    :  nbElements(0),l2Dot(0.0), l2Diff(0.0), max(0.0), maxDiff(0.0)  {
+	    add(inGood, inBad, nbValues);
+	}
+
+
+	/** Add value to the current list */
+	void add(const FReal inGood, const FReal inBad){
+	    l2Diff          += (inBad - inGood) * (inBad - inGood);
+	    l2Dot          += inGood * inGood;
+	    max               = Max(max , Abs(inGood));
+	    maxDiff         = Max(maxDiff, Abs(inGood-inBad));
+	    nbElements += 1 ;
+	}
+	/** Add array of values */
+	void add(const FReal inGood[], const FReal inBad[], const int nbValues){
+	    for(int idx = 0 ; idx < nbValues ; ++idx){
+		add(inGood[idx],inBad[idx]);
+	    }
+	    nbElements += nbValues ;
+	}
+
+	/** Add an accurater*/
+	void add(const FAccurater& inAcc){
+	    l2Diff += inAcc.getl2Diff();
+	    l2Dot +=  inAcc.getl2Dot();
+	    max = Max(max,inAcc.getmax());
+	    maxDiff = Max(maxDiff,inAcc.getInfNorm());
+	    nbElements += inAcc.getNbElements();
+	}
+
+	FReal getl2Diff() const{
+	    return l2Diff;
+	}
+	FReal getl2Dot() const{
+	    return l2Dot;
+	}
+	FReal getmax() const{
+	    return max;
+	}
+	int getNbElements() const{
+	    return nbElements;
+	}
+	void  setNbElements(const int & n) {
+	    nbElements = n;
+	}
+
+	/** Get the root mean squared error*/
+	FReal getL2Norm() const{
+	    return Sqrt(l2Diff );
+	}
+	/** Get the L2 norm */
+	FReal getRMSError() const{
+	    return Sqrt(l2Diff /static_cast<FReal>(nbElements));
+	}
+
+	/** Get the inf norm */
+	FReal getInfNorm() const{
+	    return maxDiff;
+	}
+	/** Get the L2 norm */
+	FReal getRelativeL2Norm() const{
+	    return Sqrt(l2Diff / l2Dot);
+	}
+	/** Get the inf norm */
+	FReal getRelativeInfNorm() const{
+	    return maxDiff / max;
+	}
+	/** Print */
+	template <class StreamClass>
+	friend StreamClass& operator<<(StreamClass& output, const FAccurater& inAccurater){
+	    output << "[Error] Relative L2Norm = " << inAccurater.getRelativeL2Norm() << " \t RMS Norm = " << inAccurater.getRMSError() << " \t Relative Inf = " << inAccurater.getRelativeInfNorm();
+	    return output;
+	}
+
+	void reset()
+	{
+	    l2Dot          = FReal(0);
+	    l2Diff          = FReal(0);;
+	    max            = FReal(0);
+	    maxDiff      = FReal(0);
+	    nbElements = 0 ;
+	}
     };
 };
 
@@ -517,12 +517,12 @@ inline __m128d FMath::ConvertTo<__m128d,double>(const double val){
 #ifdef ScalFMM_USE_AVX
 template <>
 inline __m256 FMath::One<__m256>(){
-    return _mm256_set_ps1(1.0);
+    return _mm256_set1_ps(1.0);
 }
 
 template <>
 inline __m256d FMath::One<__m256d>(){
-    return _mm256_set_pd1(1.0);
+    return _mm256_set1_pd(1.0);
 }
 
 template <>
@@ -537,12 +537,12 @@ inline __m256d FMath::Zero<__m256d>(){
 
 template <>
 inline __m256 FMath::ConvertTo<__m256,float>(const float val){
-    return _mm256_set_ps1(val);
+    return _mm256_set1_ps(val);
 }
 
 template <>
 inline __m256d FMath::ConvertTo<__m256d,double>(const double val){
-    return _mm256_set_pd1(val);
+    return _mm256_set1_pd(val);
 }
 #endif