public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andrea Arteaga" <andyspiros@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/auto-numerical-bench:newinterfaces commit in: NumericInterface/NI_internal/, btl/generic_bench/init/, numbench/, btl/actions/, ...
Date: Sat, 29 Sep 2012 09:21:05 +0000 (UTC)	[thread overview]
Message-ID: <1348910441.0bf9d7c0c2541c7f8e607655a7c6035248b5d32d.spiros@gentoo> (raw)

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 270045 bytes --]

commit:     0bf9d7c0c2541c7f8e607655a7c6035248b5d32d
Author:     Andrea Arteaga <andyspiros <AT> gmail <DOT> com>
AuthorDate: Sat Sep 29 09:20:41 2012 +0000
Commit:     Andrea Arteaga <andyspiros <AT> gmail <DOT> com>
CommitDate: Sat Sep 29 09:20:41 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/auto-numerical-bench.git;a=commit;h=0bf9d7c0

Change BTL actions begins: BLAS levels 1 and 2 are done. Old
implementations cleaned up.

---
 .../NI_internal/FortranDeclarations.hpp            |    3 +
 NumericInterface/NI_internal/FortranInterface.hpp  |   19 +-
 btl/actions/action_MatrixTVector.hpp               |   79 +++
 btl/actions/action_MatrixVector.hpp                |   79 +++
 btl/actions/action_Rank1Update.hpp                 |   77 +++
 btl/actions/action_Rank2Update.hpp                 |   77 +++
 btl/actions/action_SymMatrixVector.hpp             |   78 +++
 btl/actions/action_TriSolveVector.hpp              |   81 +++
 btl/actions/action_aat_product.hh                  |  145 -----
 btl/actions/action_ata_product.hh                  |  145 -----
 btl/actions/action_atv_product.hh                  |  134 ----
 btl/actions/action_axpby.hh                        |  127 ----
 btl/actions/action_axpy.hh                         |  139 ----
 btl/actions/action_axpy.hpp                        |   77 +++
 btl/actions/action_cholesky.hh                     |  129 ----
 btl/actions/action_general_solve.hh                |  137 ----
 btl/actions/action_ger.hh                          |  128 ----
 btl/actions/action_hessenberg.hh                   |  233 -------
 btl/actions/action_least_squares.hh                |  137 ----
 btl/actions/action_lu_decomp.hh                    |  109 ----
 btl/actions/action_lu_solve.hh                     |  136 ----
 btl/actions/action_matrix_matrix_product.hh        |  150 -----
 btl/actions/action_matrix_matrix_product_bis.hh    |  152 -----
 btl/actions/action_matrix_vector_product.hh        |  153 -----
 btl/actions/action_parallel_axpy.hh                |  158 -----
 btl/actions/action_parallel_cholesky.hh            |  130 ----
 btl/actions/action_parallel_lu_decomp.hh           |  142 ----
 .../action_parallel_matrix_vector_product.hh       |  159 -----
 btl/actions/action_parallel_qr_decomp.hh           |  116 ----
 btl/actions/action_parallel_svd_decomp.hh          |  151 -----
 btl/actions/action_parallel_symm_ev.hh             |  138 ----
 btl/actions/action_partial_lu.hh                   |  125 ----
 btl/actions/action_qr_decomp.hh                    |  112 ----
 btl/actions/action_rot.hh                          |  116 ----
 btl/actions/action_rot.hpp                         |   78 +++
 btl/actions/action_stev.hh                         |  119 ----
 btl/actions/action_svd_decomp.hh                   |  115 ----
 btl/actions/action_syev.hh                         |  113 ----
 btl/actions/action_symm_ev.hh                      |  104 ---
 btl/actions/action_symv.hh                         |  139 ----
 btl/actions/action_syr2.hh                         |  133 ----
 btl/actions/action_trisolve.hh                     |  137 ----
 btl/actions/action_trisolve_matrix.hh              |  165 -----
 btl/actions/action_trmm.hh                         |  165 -----
 btl/actions/actionsBLAS.hpp                        |   16 +
 btl/actions/base_action_fftw.hh                    |   86 ---
 btl/actions/basic_actions.hh                       |   21 -
 btl/generic_bench/init/init_function.hh            |   54 --
 btl/generic_bench/init/init_matrix.hh              |   93 ---
 btl/generic_bench/init/init_vector.hh              |   37 --
 btl/generic_bench/static/intel_bench_fixed_size.hh |    6 +-
 btl/generic_bench/timers/STL_perf_analyzer.hh      |   82 ---
 btl/generic_bench/timers/STL_timer.hh              |   78 ---
 .../timers/distributed_perf_analyzer_node.hh       |    1 -
 .../timers/distributed_perf_analyzer_root.hh       |    5 +-
 btl/generic_bench/timers/mixed_perf_analyzer.hh    |   73 ---
 btl/generic_bench/timers/portable_perf_analyzer.hh |    9 +-
 .../timers/portable_perf_analyzer_old.hh           |  134 ----
 btl/generic_bench/timers/x86_perf_analyzer.hh      |  108 ---
 btl/generic_bench/timers/x86_timer.hh              |  246 -------
 btl/generic_bench/utils/LinearCongruential.hh      |   83 ---
 btl/generic_bench/utils/LinearCongruential.hpp     |   77 +++
 btl/libs/BLAS/CMakeLists.txt                       |   60 --
 btl/libs/BLAS/blas.h                               |  681 --------------------
 btl/libs/BLAS/blas_interface.hh                    |   77 ---
 btl/libs/BLAS/blas_interface_impl.hh               |   96 ---
 btl/libs/BLAS/c_interface_base.h                   |   89 ---
 btl/libs/BLAS/cblas_interface_impl.hh              |   96 ---
 btl/libs/BLAS/main.cpp                             |   99 +---
 btl/libs/STL/CMakeLists.txt                        |    2 -
 btl/libs/STL/STL_interface.hh                      |  255 --------
 btl/libs/STL/main.cpp                              |   42 --
 numbench/modules/internal/blasBase.py              |    9 +-
 numbench/testdescr.py                              |   22 +-
 74 files changed, 774 insertions(+), 7302 deletions(-)

diff --git a/NumericInterface/NI_internal/FortranDeclarations.hpp b/NumericInterface/NI_internal/FortranDeclarations.hpp
index 9fe0b04..76dfc01 100644
--- a/NumericInterface/NI_internal/FortranDeclarations.hpp
+++ b/NumericInterface/NI_internal/FortranDeclarations.hpp
@@ -51,6 +51,9 @@ extern "C" {
     void ssymv_(const char*, const int*, const float*, const float*, const int*, const float*, const int*, const float*, float*, const int*);
     void dsymv_(const char*, const int*, const double*, const double*, const int*, const double*, const int*, const double*, double*, const int*);
 
+    void strmv_(const char*, const char*, const char*, const int*, const float*, const int*, float*, const int*);
+    void dtrmv_(const char*, const char*, const char*, const int*, const double*, const int*, double*, const int*);
+
     void strsv_(const char*, const char*, const char*, const int*, const float*, const int*, float*, const int*);
     void dtrsv_(const char*, const char*, const char*, const int*, const double*, const int*, double*, const int*);
 

diff --git a/NumericInterface/NI_internal/FortranInterface.hpp b/NumericInterface/NI_internal/FortranInterface.hpp
index 39dfa84..ab20783 100644
--- a/NumericInterface/NI_internal/FortranInterface.hpp
+++ b/NumericInterface/NI_internal/FortranInterface.hpp
@@ -81,7 +81,7 @@ public:
      * LEVEL 2 BLAS *
      ****************/
 
-    static void matrixVector(const bool& trans, const int& M, const int& N,
+    static void MatrixVector(const bool& trans, const int& M, const int& N,
             const Scalar& alpha, const Scalar* A, const Scalar* x,
             const Scalar& beta, Scalar* y)
     {
@@ -90,26 +90,32 @@ public:
         FORTFUNC(gemv)(&tA, &M, &N, &alpha, A, &LDA, x, &ONE, &beta, y, &ONE);
     }
 
-    static void symmetricMatrixVector(const char& uplo, const int& N,
+    static void SymMatrixVector(const char& uplo, const int& N,
             const Scalar& alpha, const Scalar* A, const Scalar* x,
             const Scalar& beta, Scalar* y)
     {
         FORTFUNC(symv)(&uplo, &N, &alpha, A, &N, x, &ONE, &beta, y, &ONE);
     }
 
-    static void triangularSolveVector(const char& uplo, const char& diag,
+    static void TriMatrixVector(const char& uplo, const int& N,
+            const Scalar* A, Scalar* x)
+    {
+        FORTFUNC(trmv)(&uplo, "N", "N", &N, A, &N, x, &ONE);
+    }
+
+    static void TriSolveVector(const char& uplo,
             const int& N, const Scalar* A, Scalar* x)
     {
-        FORTFUNC(trsv)(&uplo, "N", &diag, &N, A, &N, x, &ONE);
+        FORTFUNC(trsv)(&uplo, "N", "N", &N, A, &N, x, &ONE);
     }
 
-    static void rank1update(const int& M, const int& N, const Scalar& alpha,
+    static void Rank1Update(const int& M, const int& N, const Scalar& alpha,
             const Scalar* x, const Scalar* y, Scalar* A)
     {
         FORTFUNC(ger)(&M, &N, &alpha, x, &ONE, y, &ONE, A, &M);
     }
 
-    static void rank2update(const char& uplo, const int& N, const Scalar& alpha,
+    static void Rank2Update(const char& uplo, const int& N, const Scalar& alpha,
             const Scalar* x, const Scalar* y, Scalar* A)
     {
         FORTFUNC(syr2)(&uplo, &N, &alpha, x, &ONE, y, &ONE, A, &N);
@@ -138,7 +144,6 @@ public:
             tB = Trans;
         }
 
-        const int LDB = transB ? N : K;
         FORTFUNC(gemm)(&tA, &tB, &M, &N, &K, &alpha, A, &LDA, B, &LDB,
                        &beta, C, &M);
     }

diff --git a/btl/actions/action_MatrixTVector.hpp b/btl/actions/action_MatrixTVector.hpp
new file mode 100644
index 0000000..20b360a
--- /dev/null
+++ b/btl/actions/action_MatrixTVector.hpp
@@ -0,0 +1,79 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_MATRIXTVECTOR
+#define ACTION_MATRIXTVECTOR
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_MatrixTVector {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_MatrixTVector(const Action_MatrixTVector&);
+
+public:
+
+    // Constructor
+    Action_MatrixTVector(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), x(lc.fillVector<Scalar>(size)),
+      A_work(size*size), x_work(size), y_work(size)
+    {
+        MESSAGE("Action_MatrixTVector Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "MatrixTVector_" + Interface::name();
+    }
+
+    double fpo() {
+        return 2*double(_size)*double(_size) - double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(A.begin(), A.end(), A_work.begin());
+          std::copy(x.begin(), x.end(), x_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::MatrixVector(true, _size, _size, 1., &A_work[0], &x_work[0],
+                                0., &y_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x;
+    vector_t A_work, x_work, y_work;
+
+};
+
+#endif // ACTION_MATRIXVECTOR

diff --git a/btl/actions/action_MatrixVector.hpp b/btl/actions/action_MatrixVector.hpp
new file mode 100644
index 0000000..923dc7b
--- /dev/null
+++ b/btl/actions/action_MatrixVector.hpp
@@ -0,0 +1,79 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_MATRIXVECTOR
+#define ACTION_MATRIXVECTOR
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_MatrixVector {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_MatrixVector(const Action_MatrixVector&);
+
+public:
+
+    // Constructor
+    Action_MatrixVector(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), x(lc.fillVector<Scalar>(size)),
+      A_work(size*size), x_work(size), y_work(size)
+    {
+        MESSAGE("Action_MatrixVector Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "MatrixVector_" + Interface::name();
+    }
+
+    double fpo() {
+        return 2*double(_size)*double(_size) - double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(A.begin(), A.end(), A_work.begin());
+          std::copy(x.begin(), x.end(), x_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::MatrixVector(false, _size, _size, 1., &A_work[0], &x_work[0],
+                                0., &y_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x;
+    vector_t A_work, x_work, y_work;
+
+};
+
+#endif // ACTION_MATRIXVECTOR

diff --git a/btl/actions/action_Rank1Update.hpp b/btl/actions/action_Rank1Update.hpp
new file mode 100644
index 0000000..bd88ac3
--- /dev/null
+++ b/btl/actions/action_Rank1Update.hpp
@@ -0,0 +1,77 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_RANK1UPDATE
+#define ACTION_RANK1UPDATE
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_Rank1Update {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_Rank1Update(const Action_Rank1Update&);
+
+public:
+
+    // Constructor
+    Action_Rank1Update(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), A_work(size*size),
+      x(lc.fillVector<Scalar>(size)), y(lc.fillVector<Scalar>(size))
+    {
+        MESSAGE("Action_Rank1Update Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "Rank1Update_" + Interface::name();
+    }
+
+    double fpo() {
+        return 3*double(_size)*double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(A.begin(), A.end(), A_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::Rank1Update(_size, _size, 1., &x[0], &y[0], &A_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x, y;
+    vector_t A_work;
+
+};
+
+#endif // ACTION_RANK1UPDATE

diff --git a/btl/actions/action_Rank2Update.hpp b/btl/actions/action_Rank2Update.hpp
new file mode 100644
index 0000000..b0b1693
--- /dev/null
+++ b/btl/actions/action_Rank2Update.hpp
@@ -0,0 +1,77 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_RANK2UPDATE
+#define ACTION_RANK2UPDATE
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_Rank2Update {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_Rank2Update(const Action_Rank2Update&);
+
+public:
+
+    // Constructor
+    Action_Rank2Update(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), A_work(size*size),
+      x(lc.fillVector<Scalar>(size)), y(lc.fillVector<Scalar>(size))
+    {
+        MESSAGE("Action_Rank2Update Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "Rank2Update_" + Interface::name();
+    }
+
+    double fpo() {
+        return 2*double(_size)*double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(A.begin(), A.end(), A_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::Rank2Update('U', _size, 1., &x[0], &y[0], &A_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x, y;
+    vector_t A_work;
+
+};
+
+#endif // ACTION_RANK2UPDATE

diff --git a/btl/actions/action_SymMatrixVector.hpp b/btl/actions/action_SymMatrixVector.hpp
new file mode 100644
index 0000000..e475007
--- /dev/null
+++ b/btl/actions/action_SymMatrixVector.hpp
@@ -0,0 +1,78 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_SYMMATRIXVECTOR
+#define ACTION_SYMMATRIXVECTOR
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_SymMatrixVector {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_SymMatrixVector(const Action_SymMatrixVector&);
+
+public:
+
+    // Constructor
+    Action_SymMatrixVector(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), x(lc.fillVector<Scalar>(size)),
+      y(size), y_work(size)
+    {
+        MESSAGE("Action_SymMatrixVector Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "SymMatrixVector_" + Interface::name();
+    }
+
+    double fpo() {
+        return double(_size)*double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(y.begin(), y.end(), y_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::SymMatrixVector('U', _size, 1., &A[0], &x[0],
+                                0., &y_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x, y;
+    vector_t y_work;
+
+};
+
+#endif // ACTION_MATRIXVECTOR

diff --git a/btl/actions/action_TriSolveVector.hpp b/btl/actions/action_TriSolveVector.hpp
new file mode 100644
index 0000000..2bfefb8
--- /dev/null
+++ b/btl/actions/action_TriSolveVector.hpp
@@ -0,0 +1,81 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_TRISOLVEVECTOR
+#define ACTION_TRISOLVEVECTOR
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_TriSolveVector {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_TriSolveVector(const Action_TriSolveVector&);
+
+public:
+
+    // Constructor
+    Action_TriSolveVector(int size)
+    : _size(size), lc(10),
+      A(lc.fillVector<Scalar>(size*size)), x(lc.fillVector<Scalar>(size)),
+      x_work(size)
+    {
+        MESSAGE("Action_TriSolveVector Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "TriSolveVector_" + Interface::name();
+    }
+
+    double fpo() {
+        return double(_size)*double(_size) - 2*double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(x.begin(), x.end(), x_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::TriSolveVector('U', _size, &A[0], &x_work[0]);
+    }
+
+    Scalar getResidual() {
+        initialize();
+        calculate();
+        Interface::TriMatrixVector('U', _size, &A[0], &x_work[0]);
+        Interface::axpy(_size, -1., &x[0], &x_work[0]);
+        return Interface::norm(_size, &x_work[0]);
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t A, x;
+    vector_t x_work;
+
+};
+
+#endif // ACTION_TRISOLVEVECTOR

diff --git a/btl/actions/action_aat_product.hh b/btl/actions/action_aat_product.hh
deleted file mode 100644
index aa5b35c..0000000
--- a/btl/actions/action_aat_product.hh
+++ /dev/null
@@ -1,145 +0,0 @@
-//=====================================================
-// File   :  action_aat_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_AAT_PRODUCT
-#define ACTION_AAT_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_aat_product {
-
-public :
-
-  // Ctor
-
-  Action_aat_product( int size ):_size(size)
-  {
-    MESSAGE("Action_aat_product Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_matrix<null_function>(X_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-  }
-
-  // invalidate copy ctor
-
-  Action_aat_product( const  Action_aat_product & )
-  {
-    INFOS("illegal call to Action_aat_product Copy Ctor");
-    exit(0);
-  }
-
-  // Dtor
-
-  ~Action_aat_product( void ){
-
-    MESSAGE("Action_aat_product Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_matrix(X,_size);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_matrix(X_ref,_size);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "aat_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return double(_size)*double(_size)*double(_size);
-  }
-
-  inline void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_matrix(X_ref,X,_size);
-
-  }
-
-  inline void calculate( void ) {
-
-      Interface::aat_product(A,X,_size);
-
-  }
-
-  void check_result( void ){
-    if (_size>128) return;
-    // calculation check
-
-    Interface::matrix_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::aat_product(A_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(1);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_matrix X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_matrix X;
-
-
-  int _size;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_ata_product.hh b/btl/actions/action_ata_product.hh
deleted file mode 100644
index 04364fe..0000000
--- a/btl/actions/action_ata_product.hh
+++ /dev/null
@@ -1,145 +0,0 @@
-//=====================================================
-// File   :  action_ata_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_ATA_PRODUCT
-#define ACTION_ATA_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_ata_product {
-
-public :
-
-  // Ctor
-
-  Action_ata_product( int size ):_size(size)
-  {
-    MESSAGE("Action_ata_product Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_matrix<null_function>(X_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-  }
-
-  // invalidate copy ctor
-
-  Action_ata_product( const  Action_ata_product & )
-  {
-    INFOS("illegal call to Action_ata_product Copy Ctor");
-    exit(0);
-  }
-
-  // Dtor
-
-  ~Action_ata_product( void ){
-
-    MESSAGE("Action_ata_product Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_matrix(X,_size);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_matrix(X_ref,_size);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "ata_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size*_size;
-  }
-
-  inline void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_matrix(X_ref,X,_size);
-
-  }
-
-  inline void calculate( void ) {
-
-      Interface::ata_product(A,X,_size);
-
-  }
-
-  void check_result( void ){
-    if (_size>128) return;
-    // calculation check
-
-    Interface::matrix_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::ata_product(A_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(1);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_matrix X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_matrix X;
-
-
-  int _size;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_atv_product.hh b/btl/actions/action_atv_product.hh
deleted file mode 100644
index a823451..0000000
--- a/btl/actions/action_atv_product.hh
+++ /dev/null
@@ -1,134 +0,0 @@
-//=====================================================
-// File   :  action_atv_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_ATV_PRODUCT
-#define ACTION_ATV_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_atv_product {
-
-public :
-
-  Action_atv_product( int size ) : _size(size)
-  {
-    MESSAGE("Action_atv_product Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<null_function>(X_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X,X_stl);
-  }
-
-  // invalidate copy ctor
-  Action_atv_product( const  Action_atv_product & )
-  {
-    INFOS("illegal call to Action_atv_product Copy Ctor");
-    exit(1);
-  }
-
-  ~Action_atv_product( void )
-  {
-    MESSAGE("Action_atv_product Dtor");
-
-    Interface::free_matrix(A,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_vector(B_ref);
-    Interface::free_vector(X_ref);
-  }
-
-  static inline std::string name() { return "atv_" + Interface::name(); }
-
-  double nb_op_base( void ) { return 2.0*_size*_size; }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-    Interface::copy_vector(X_ref,X,_size);
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-    BTL_ASM_COMMENT("begin atv");
-    Interface::atv_product(A,B,X,_size);
-    BTL_ASM_COMMENT("end atv");
-  }
-
-  void check_result( void )
-  {
-    if (_size>128) return;
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::atv_product(A_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(1);
-    }
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_vector B_ref;
-  typename Interface::gene_vector X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_vector B;
-  typename Interface::gene_vector X;
-
-
-  int _size;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_axpby.hh b/btl/actions/action_axpby.hh
deleted file mode 100644
index 98511ab..0000000
--- a/btl/actions/action_axpby.hh
+++ /dev/null
@@ -1,127 +0,0 @@
-//=====================================================
-// File   :  action_axpby.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_AXPBY
-#define ACTION_AXPBY
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_axpby {
-
-public :
-
-  // Ctor
-  Action_axpby( int size ):_size(size),_alpha(0.5),_beta(0.95)
-  {
-    MESSAGE("Action_axpby Ctor");
-
-    // STL vector initialization
-    init_vector<pseudo_random>(X_stl,_size);
-    init_vector<pseudo_random>(Y_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(Y_ref,Y_stl);
-
-    Interface::vector_from_stl(X,X_stl);
-    Interface::vector_from_stl(Y,Y_stl);
-  }
-
-  // invalidate copy ctor
-  Action_axpby( const  Action_axpby & )
-  {
-    INFOS("illegal call to Action_axpby Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-  ~Action_axpby( void ){
-    MESSAGE("Action_axpby Dtor");
-
-    // deallocation
-    Interface::free_vector(X_ref);
-    Interface::free_vector(Y_ref);
-
-    Interface::free_vector(X);
-    Interface::free_vector(Y);
-  }
-
-  // action name
-  static inline std::string name( void )
-  {
-    return "axpby_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 3.0*_size;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_vector(X_ref,X,_size);
-    Interface::copy_vector(Y_ref,Y,_size);
-  }
-
-  inline void calculate( void ) {
-    BTL_ASM_COMMENT("mybegin axpby");
-    Interface::axpby(_alpha,X,_beta,Y,_size);
-    BTL_ASM_COMMENT("myend axpby");
-  }
-
-  void check_result( void ){
-    if (_size>128) return;
-    // calculation check
-    Interface::vector_to_stl(Y,resu_stl);
-
-    STL_interface<typename Interface::real_type>::axpby(_alpha,X_stl,_beta,Y_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(Y_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(2);
-    }
-  }
-
-private :
-
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector Y_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_vector X_ref;
-  typename Interface::gene_vector Y_ref;
-
-  typename Interface::gene_vector X;
-  typename Interface::gene_vector Y;
-
-  typename Interface::real_type _alpha;
-  typename Interface::real_type _beta;
-
-  int _size;
-};
-
-#endif

diff --git a/btl/actions/action_axpy.hh b/btl/actions/action_axpy.hh
deleted file mode 100644
index e4cb3a5..0000000
--- a/btl/actions/action_axpy.hh
+++ /dev/null
@@ -1,139 +0,0 @@
-//=====================================================
-// File   :  action_axpy.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_AXPY
-#define ACTION_AXPY
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_axpy {
-
-public :
-
-  // Ctor
-
-  Action_axpy( int size ):_size(size),_coef(1.0)
-  {
-    MESSAGE("Action_axpy Ctor");
-
-    // STL vector initialization
-
-    init_vector<pseudo_random>(X_stl,_size);
-    init_vector<pseudo_random>(Y_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(Y_ref,Y_stl);
-
-    Interface::vector_from_stl(X,X_stl);
-    Interface::vector_from_stl(Y,Y_stl);
-
-
-  }
-
-  // invalidate copy ctor
-
-  Action_axpy( const  Action_axpy & )
-  {
-    INFOS("illegal call to Action_axpy Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_axpy( void ){
-
-    MESSAGE("Action_axpy Dtor");
-
-    // deallocation
-
-    Interface::free_vector(X_ref);
-    Interface::free_vector(Y_ref);
-
-    Interface::free_vector(X);
-    Interface::free_vector(Y);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "axpy_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_vector(X_ref,X,_size);
-    Interface::copy_vector(Y_ref,Y,_size);
-  }
-
-  inline void calculate( void ) {
-    BTL_ASM_COMMENT("mybegin axpy");
-    Interface::axpy(_coef,X,Y,_size);
-    BTL_ASM_COMMENT("myend axpy");
-  }
-
-  void check_result( void ){
-    if (_size>128) return;
-    // calculation check
-
-    Interface::vector_to_stl(Y,resu_stl);
-
-    STL_interface<typename Interface::real_type>::axpy(_coef,X_stl,Y_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(Y_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(0);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector Y_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_vector X_ref;
-  typename Interface::gene_vector Y_ref;
-
-  typename Interface::gene_vector X;
-  typename Interface::gene_vector Y;
-
-  typename Interface::real_type _coef;
-
-  int _size;
-};
-
-#endif

diff --git a/btl/actions/action_axpy.hpp b/btl/actions/action_axpy.hpp
new file mode 100644
index 0000000..85cb40e
--- /dev/null
+++ b/btl/actions/action_axpy.hpp
@@ -0,0 +1,77 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_AXPY
+#define ACTION_AXPY
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_axpy {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_axpy(const Action_axpy&);
+
+public:
+
+    // Constructor
+    Action_axpy(int size)
+    : _size(size), lc(10),
+      x(lc.fillVector<Scalar>(size)),
+      x_work(size), y_work(size)
+    {
+        MESSAGE("Action_axpy Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "axpy_" + Interface::name();
+    }
+
+    double fpo() {
+        return 2*double(_size);
+    }
+
+    inline void initialize(){
+          std::copy(x.begin(), x.end(), x_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::axpy(_size, 1., &x_work[0], &y_work[0]);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t x;
+    vector_t x_work, y_work;
+
+};
+
+#endif // ACTION_AXPY

diff --git a/btl/actions/action_cholesky.hh b/btl/actions/action_cholesky.hh
deleted file mode 100644
index a1c751b..0000000
--- a/btl/actions/action_cholesky.hh
+++ /dev/null
@@ -1,129 +0,0 @@
-//=====================================================
-// File   :  action_cholesky.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_CHOLESKY
-#define ACTION_CHOLESKY
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include <cmath>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_cholesky {
-
-public :
-
-  // Ctor
-
-  Action_cholesky( int size ):_size(size)
-  {
-    MESSAGE("Action_cholesky Ctor");
-
-    // STL mat/vec initialization
-    init_matrix_symm<pseudo_random>(X_stl,_size);
-    init_matrix<null_function>(C_stl,_size);
-
-    // make sure X is invertible
-    for (int i=0; i<_size; ++i)
-      X_stl[i][i] = std::abs(X_stl[i][i]) * 1e2 + 100;
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref,X_stl);
-    Interface::matrix_from_stl(X,X_stl);
-    Interface::matrix_from_stl(C,C_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size; ++j)
-    {
-      double r = std::max(_size - j -1,0);
-      _cost += 2*(r*j+r+j);
-    }
-  }
-
-  // invalidate copy ctor
-
-  Action_cholesky( const  Action_cholesky & )
-  {
-    INFOS("illegal call to Action_cholesky Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_cholesky( void ){
-
-    MESSAGE("Action_cholesky Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref,_size);
-    Interface::free_matrix(X,_size);
-    Interface::free_matrix(C,_size);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "cholesky_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::cholesky(X,C,_size);
-  }
-
-  void check_result( void ){
-    // calculation check
-//     STL_interface<typename Interface::real_type>::cholesky(X_stl,C_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_general_solve.hh b/btl/actions/action_general_solve.hh
deleted file mode 100644
index 78aebd8..0000000
--- a/btl/actions/action_general_solve.hh
+++ /dev/null
@@ -1,137 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_GENERAL_SOLVE
-#define ACTION_GENERAL_SOLVE
-
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_general_solve {
-
-public:
-
-	// Ctor
-	Action_general_solve( int size ) : _size(size)
-	{
-	    MESSAGE("Action_general_solve Ctor");
-
-	    // STL matrix and vector initialization
-
-	    init_matrix<pseudo_random>(A_stl,_size);
-	    init_vector<pseudo_random>(B_stl,_size);
-	    init_vector<null_function>(X_stl,_size);
-	    init_vector<null_function>(resu_stl,_size);
-
-	    // generic matrix and vector initialization
-
-	    Interface::matrix_from_stl(A_ref,A_stl);
-	    Interface::matrix_from_stl(A,A_stl);
-	    Interface::vector_from_stl(B_ref,B_stl);
-	    Interface::vector_from_stl(B,B_stl);
-	    Interface::vector_from_stl(X_ref,X_stl);
-	    Interface::vector_from_stl(X,X_stl);
-
-
-	}
-
-	// invalidate copy ctor
-
-	Action_general_solve( const  Action_general_solve & )
-	{
-	    INFOS("illegal call to Action_general_solve Copy Ctor");
-	    exit(0);
-	}
-
-	// Dtor
-
-	BTL_DONT_INLINE ~Action_general_solve( void ){
-
-	    MESSAGE("Action_general_solve Dtor");
-
-	    // deallocation
-
-	    Interface::free_matrix(A,_size);
-	    Interface::free_vector(B);
-	    Interface::free_vector(X);
-
-	    Interface::free_matrix(A_ref,_size);
-	    Interface::free_vector(B_ref);
-	    Interface::free_vector(X_ref);
-
-	}
-
-	  // action name
-
-	  static inline std::string name( void )
-	  {
-	    return "general_solve_" + Interface::name();
-	  }
-
-	  double nb_op_base( void ){
-	    return 2.0*_size*_size*_size;
-	  }
-
-	  BTL_DONT_INLINE  void initialize( void ){
-
-	    Interface::copy_matrix(A_ref,A,_size);
-	    Interface::copy_vector(B_ref,B,_size);
-	    Interface::copy_vector(X_ref,X,_size);
-
-	  }
-
-	  BTL_DONT_INLINE void calculate( void ) {
-	      BTL_ASM_COMMENT("#begin general_solve");
-	      Interface::general_solve(A,B,X,_size);
-	      BTL_ASM_COMMENT("end general_solve");
-	  }
-
-	  BTL_DONT_INLINE void check_result() {
-		  // TODO: check result
-	  }
-
-
-private:
-
-	  typename Interface::stl_matrix A_stl;
-	  typename Interface::stl_vector B_stl;
-	  typename Interface::stl_vector X_stl;
-	  typename Interface::stl_vector resu_stl;
-
-	  typename Interface::gene_matrix A_ref;
-	  typename Interface::gene_vector B_ref;
-	  typename Interface::gene_vector X_ref;
-
-	  typename Interface::gene_matrix A;
-	  typename Interface::gene_vector B;
-	  typename Interface::gene_vector X;
-
-
-	  int _size;
-
-
-};
-
-
-#endif// ACTION_GENERAL_SOLVE

diff --git a/btl/actions/action_ger.hh b/btl/actions/action_ger.hh
deleted file mode 100644
index dc766ef..0000000
--- a/btl/actions/action_ger.hh
+++ /dev/null
@@ -1,128 +0,0 @@
-
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_GER
-#define ACTION_GER
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_ger {
-
-public :
-
-  // Ctor
-  BTL_DONT_INLINE Action_ger( int size ):_size(size)
-  {
-    MESSAGE("Action_ger Ctor");
-
-    // STL matrix and vector initialization
-    typename Interface::stl_matrix tmp;
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<pseudo_random>(X_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(X,X_stl);
-  }
-
-  // invalidate copy ctor
-  Action_ger( const  Action_ger & )
-  {
-    INFOS("illegal call to Action_ger Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-  BTL_DONT_INLINE ~Action_ger( void ){
-    MESSAGE("Action_ger Dtor");
-    Interface::free_matrix(A,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_vector(B_ref);
-    Interface::free_vector(X_ref);
-
-  }
-
-  // action name
-  static inline std::string name( void )
-  {
-    return "ger_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-    Interface::copy_vector(X_ref,X,_size);
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-    BTL_ASM_COMMENT("#begin ger");
-    Interface::ger(A,B,X,_size);
-    BTL_ASM_COMMENT("end ger");
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-    // calculation check
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::ger(A_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-3){
-      INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_vector B_ref;
-  typename Interface::gene_vector X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_vector B;
-  typename Interface::gene_vector X;
-
-  int _size;
-};
-
-
-#endif

diff --git a/btl/actions/action_hessenberg.hh b/btl/actions/action_hessenberg.hh
deleted file mode 100644
index 2100ebd..0000000
--- a/btl/actions/action_hessenberg.hh
+++ /dev/null
@@ -1,233 +0,0 @@
-//=====================================================
-// File   :  action_hessenberg.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_HESSENBERG
-#define ACTION_HESSENBERG
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_hessenberg {
-
-public :
-
-  // Ctor
-
-  Action_hessenberg( int size ):_size(size)
-  {
-    MESSAGE("Action_hessenberg Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl,_size);
-
-    init_matrix<null_function>(C_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref,X_stl);
-    Interface::matrix_from_stl(X,X_stl);
-    Interface::matrix_from_stl(C,C_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size-2; ++j)
-    {
-      double r = std::max(0,_size-j-1);
-      double b = std::max(0,_size-j-2);
-      _cost += 6 + 3*b + r*r*4 + r*_size*4;
-    }
-  }
-
-  // invalidate copy ctor
-
-  Action_hessenberg( const  Action_hessenberg & )
-  {
-    INFOS("illegal call to Action_hessenberg Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_hessenberg( void ){
-
-    MESSAGE("Action_hessenberg Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref,_size);
-    Interface::free_matrix(X,_size);
-    Interface::free_matrix(C,_size);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "hessenberg_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::hessenberg(X,C,_size);
-  }
-
-  void check_result( void ){
-    // calculation check
-    Interface::matrix_to_stl(C,resu_stl);
-
-//     STL_interface<typename Interface::real_type>::hessenberg(X_stl,C_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-
-  int _size;
-  double _cost;
-};
-
-template<class Interface>
-class Action_tridiagonalization {
-
-public :
-
-  // Ctor
-
-  Action_tridiagonalization( int size ):_size(size)
-  {
-    MESSAGE("Action_tridiagonalization Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl,_size);
-    
-    for(int i=0; i<_size; ++i)
-    {
-      for(int j=0; j<i; ++j)
-        X_stl[i][j] = X_stl[j][i];
-    }
-    
-    init_matrix<null_function>(C_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref,X_stl);
-    Interface::matrix_from_stl(X,X_stl);
-    Interface::matrix_from_stl(C,C_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size-2; ++j)
-    {
-      double r = std::max(0,_size-j-1);
-      double b = std::max(0,_size-j-2);
-      _cost += 6. + 3.*b + r*r*8.;
-    }
-  }
-
-  // invalidate copy ctor
-
-  Action_tridiagonalization( const  Action_tridiagonalization & )
-  {
-    INFOS("illegal call to Action_tridiagonalization Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_tridiagonalization( void ){
-
-    MESSAGE("Action_tridiagonalization Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref,_size);
-    Interface::free_matrix(X,_size);
-    Interface::free_matrix(C,_size);
-  }
-
-  // action name
-
-  static inline std::string name( void ) { return "tridiagonalization_"+Interface::name(); }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::tridiagonalization(X,C,_size);
-  }
-
-  void check_result( void ){
-    // calculation check
-    Interface::matrix_to_stl(C,resu_stl);
-
-//     STL_interface<typename Interface::real_type>::tridiagonalization(X_stl,C_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_least_squares.hh b/btl/actions/action_least_squares.hh
deleted file mode 100644
index f13c7dc..0000000
--- a/btl/actions/action_least_squares.hh
+++ /dev/null
@@ -1,137 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_LEAST_SQUARES
-#define ACTION_LEAST_SQUARES
-
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_least_squares {
-
-public:
-
-	// Ctor
-	Action_least_squares( int size ) : _size(size)
-	{
-	    MESSAGE("Action_least_squares Ctor");
-
-	    // STL matrix and vector initialization
-
-	    init_matrix<pseudo_random>(A_stl,_size);
-	    init_vector<pseudo_random>(B_stl,_size);
-	    init_vector<null_function>(X_stl,_size);
-	    init_vector<null_function>(resu_stl,_size);
-
-	    // generic matrix and vector initialization
-
-	    Interface::matrix_from_stl(A_ref,A_stl);
-	    Interface::matrix_from_stl(A,A_stl);
-	    Interface::vector_from_stl(B_ref,B_stl);
-	    Interface::vector_from_stl(B,B_stl);
-	    Interface::vector_from_stl(X_ref,X_stl);
-	    Interface::vector_from_stl(X,X_stl);
-
-
-	}
-
-	// invalidate copy ctor
-
-	Action_least_squares( const  Action_least_squares & )
-	{
-	    INFOS("illegal call to Action_least_squares Copy Ctor");
-	    exit(0);
-	}
-
-	// Dtor
-
-	BTL_DONT_INLINE ~Action_least_squares( void ){
-
-	    MESSAGE("Action_least_squares Dtor");
-
-	    // deallocation
-
-	    Interface::free_matrix(A,_size);
-	    Interface::free_vector(B);
-	    Interface::free_vector(X);
-
-	    Interface::free_matrix(A_ref,_size);
-	    Interface::free_vector(B_ref);
-	    Interface::free_vector(X_ref);
-
-	}
-
-	  // action name
-
-	  static inline std::string name( void )
-	  {
-	    return "least_squares_" + Interface::name();
-	  }
-
-	  double nb_op_base( void ){
-	    return 2.0*_size*_size*_size;
-	  }
-
-	  BTL_DONT_INLINE  void initialize( void ){
-
-	    Interface::copy_matrix(A_ref,A,_size);
-	    Interface::copy_vector(B_ref,B,_size);
-	    Interface::copy_vector(X_ref,X,_size);
-
-	  }
-
-	  BTL_DONT_INLINE void calculate( void ) {
-	      BTL_ASM_COMMENT("#begin least_squares");
-	      Interface::least_squares(A,B,X,_size);
-	      BTL_ASM_COMMENT("end least_squares");
-	  }
-
-	  BTL_DONT_INLINE void check_result() {
-		  // TODO: check result
-	  }
-
-
-private:
-
-	  typename Interface::stl_matrix A_stl;
-	  typename Interface::stl_vector B_stl;
-	  typename Interface::stl_vector X_stl;
-	  typename Interface::stl_vector resu_stl;
-
-	  typename Interface::gene_matrix A_ref;
-	  typename Interface::gene_vector B_ref;
-	  typename Interface::gene_vector X_ref;
-
-	  typename Interface::gene_matrix A;
-	  typename Interface::gene_vector B;
-	  typename Interface::gene_vector X;
-
-
-	  int _size;
-
-
-};
-
-
-#endif // ACTION_LEAST_SQUARES

diff --git a/btl/actions/action_lu_decomp.hh b/btl/actions/action_lu_decomp.hh
deleted file mode 100644
index 770c87d..0000000
--- a/btl/actions/action_lu_decomp.hh
+++ /dev/null
@@ -1,109 +0,0 @@
-//=====================================================
-// File   :  action_lu_decomp.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_LU_DECOMP
-#define ACTION_LU_DECOMP
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_lu_decomp {
-
-public :
-
-  // Ctor
-
-  Action_lu_decomp( int size ):_size(size)
-  {
-    MESSAGE("Action_lu_decomp Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl,_size);
-
-    init_matrix<null_function>(C_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref,X_stl);
-    Interface::matrix_from_stl(X,X_stl);
-    Interface::matrix_from_stl(C,C_stl);
-
-    _cost = 2.0*size*size*size/3.0 + size*size;
-  }
-
-  // invalidate copy ctor
-
-  Action_lu_decomp( const  Action_lu_decomp & )
-  {
-    INFOS("illegal call to Action_lu_decomp Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_lu_decomp( void ){
-
-    MESSAGE("Action_lu_decomp Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref,_size);
-    Interface::free_matrix(X,_size);
-    Interface::free_matrix(C,_size);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "lu_decomp_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::lu_decomp(X,C,_size);
-  }
-
-  void check_result( void ){
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_lu_solve.hh b/btl/actions/action_lu_solve.hh
deleted file mode 100644
index 5a81e63..0000000
--- a/btl/actions/action_lu_solve.hh
+++ /dev/null
@@ -1,136 +0,0 @@
-//=====================================================
-// File   :  action_lu_solve.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-#ifndef ACTION_LU_SOLVE
-#define ACTION_LU_SOLVE
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_lu_solve 
-{
-
-public :
-
-  static inline std::string name( void )
-  {
-    return "lu_solve_"+Interface::name();
-  }
-  
-  static double nb_op_base(int size){
-    return 2.0*size*size*size/3.0;  // questionable but not really important
-  }
-
-
-  static double calculate( int nb_calc, int size ) {
-
-    // STL matrix and vector initialization
-    
-    typename Interface::stl_matrix A_stl;
-    typename Interface::stl_vector B_stl;
-    typename Interface::stl_vector X_stl;
-
-    init_matrix<pseudo_random>(A_stl,size);
-    init_vector<pseudo_random>(B_stl,size);
-    init_vector<null_function>(X_stl,size);
-
-    // generic matrix and vector initialization
-
-    typename Interface::gene_matrix A;
-    typename Interface::gene_vector B;
-    typename Interface::gene_vector X;
-
-    typename Interface::gene_matrix LU; 
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X,X_stl);
-    Interface::matrix_from_stl(LU,A_stl);
-  
-    // local variable :
-
-    typename Interface::Pivot_Vector pivot; // pivot vector
-    Interface::new_Pivot_Vector(pivot,size);
-    
-    // timer utilities
-
-    Portable_Timer chronos;
-
-    // time measurement
-
-    chronos.start();
-    
-    for (int ii=0;ii<nb_calc;ii++){
-
-      // LU factorization
-      Interface::copy_matrix(A,LU,size);
-      Interface::LU_factor(LU,pivot,size);
-      
-      // LU solve
-
-      Interface::LU_solve(LU,pivot,B,X,size);
-
-    }
-
-    // Time stop
-
-    chronos.stop();
-
-    double time=chronos.user_time();
-  
-    // check result :
-
-    typename Interface::stl_vector B_new_stl(size);
-    Interface::vector_to_stl(X,X_stl);
-
-    STL_interface<typename Interface::real_type>::matrix_vector_product(A_stl,X_stl,B_new_stl,size); 
-  
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(B_stl,B_new_stl);
-    
-    if (error>1.e-5){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      STL_interface<typename Interface::real_type>::display_vector(B_stl);
-      STL_interface<typename Interface::real_type>::display_vector(B_new_stl);
-      exit(0);
-    }
-    
-    // deallocation and return time
-    
-    Interface::free_matrix(A,size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-    Interface::free_Pivot_Vector(pivot);
-
-    return time;
-  }
-
-};
-  
-
-#endif
-
-
-

diff --git a/btl/actions/action_matrix_matrix_product.hh b/btl/actions/action_matrix_matrix_product.hh
deleted file mode 100644
index f65ee05..0000000
--- a/btl/actions/action_matrix_matrix_product.hh
+++ /dev/null
@@ -1,150 +0,0 @@
-//=====================================================
-// File   :  action_matrix_matrix_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_MATRIX_MATRIX_PRODUCT
-#define ACTION_MATRIX_MATRIX_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_matrix_matrix_product {
-
-public :
-
-  // Ctor
-
-  Action_matrix_matrix_product( int size ):_size(size)
-  {
-    MESSAGE("Action_matrix_matrix_product Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_matrix<pseudo_random>(B_stl,_size);
-    init_matrix<null_function>(X_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(B_ref,B_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(B,B_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-  }
-
-  // invalidate copy ctor
-
-  Action_matrix_matrix_product( const  Action_matrix_matrix_product & )
-  {
-    INFOS("illegal call to Action_matrix_matrix_product Copy Ctor");
-    exit(0);
-  }
-
-  // Dtor
-
-  ~Action_matrix_matrix_product( void ){
-
-    MESSAGE("Action_matrix_matrix_product Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_matrix(B,_size);
-    Interface::free_matrix(X,_size);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_matrix(B_ref,_size);
-    Interface::free_matrix(X_ref,_size);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "matrix_matrix_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size*_size;
-  }
-
-  inline void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_matrix(B_ref,B,_size);
-    Interface::copy_matrix(X_ref,X,_size);
-
-  }
-
-  inline void calculate( void ) {
-      Interface::matrix_matrix_product(A,B,X,_size);
-  }
-
-  void check_result( void ){
-
-    // calculation check
-    if (_size<200)
-    {
-      Interface::matrix_to_stl(X,resu_stl);
-      STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,_size);
-      typename Interface::real_type error=
-        STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-      if (error>1.e-6){
-        INFOS("WRONG CALCULATION...residual=" << error);
-        exit(1);
-      }
-    }
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_matrix B_stl;
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_matrix B_ref;
-  typename Interface::gene_matrix X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_matrix B;
-  typename Interface::gene_matrix X;
-
-
-  int _size;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_matrix_matrix_product_bis.hh b/btl/actions/action_matrix_matrix_product_bis.hh
deleted file mode 100644
index 29c10a6..0000000
--- a/btl/actions/action_matrix_matrix_product_bis.hh
+++ /dev/null
@@ -1,152 +0,0 @@
-//=====================================================
-// File   :  action_matrix_matrix_product_bis.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_MATRIX_MATRIX_PRODUCT_BIS
-#define ACTION_MATRIX_MATRIX_PRODUCT_BIS
-#include "utilities.h"
-#include "STL_interface.hh"
-#include "STL_timer.hh"
-#include <string>
-#include "init_function.hh"
-#include "init_vector.hh"
-#include "init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_matrix_matrix_product_bis {
-
-public :
-
-  static inline std::string name( void )
-  {
-    return "matrix_matrix_"+Interface::name();
-  }
-
-  static double nb_op_base(int size){
-    return 2.0*size*size*size;
-  }
-
-  static double calculate( int nb_calc, int size ) {
-
-    // STL matrix and vector initialization
-
-    typename Interface::stl_matrix A_stl;
-    typename Interface::stl_matrix B_stl;
-    typename Interface::stl_matrix X_stl;
-
-    init_matrix<pseudo_random>(A_stl,size);
-    init_matrix<pseudo_random>(B_stl,size);
-    init_matrix<null_function>(X_stl,size);
-
-    // generic matrix and vector initialization
-
-    typename Interface::gene_matrix A_ref;
-    typename Interface::gene_matrix B_ref;
-    typename Interface::gene_matrix X_ref;
-
-    typename Interface::gene_matrix A;
-    typename Interface::gene_matrix B;
-    typename Interface::gene_matrix X;
-
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(B_ref,B_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(B,B_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-
-    // STL_timer utilities
-
-    STL_timer chronos;
-
-    // Baseline evaluation
-
-    chronos.start_baseline(nb_calc);
-
-    do {
-
-      Interface::copy_matrix(A_ref,A,size);
-      Interface::copy_matrix(B_ref,B,size);
-      Interface::copy_matrix(X_ref,X,size);
-
-
-      //      Interface::matrix_matrix_product(A,B,X,size); This line must be commented !!!!
-    }
-    while(chronos.check());
-
-    chronos.report(true);
-
-    // Time measurement
-
-    chronos.start(nb_calc);
-
-    do {
-
-      Interface::copy_matrix(A_ref,A,size);
-      Interface::copy_matrix(B_ref,B,size);
-      Interface::copy_matrix(X_ref,X,size);
-
-      Interface::matrix_matrix_product(A,B,X,size); // here it is not commented !!!!
-    }
-    while(chronos.check());
-
-    chronos.report(true);
-
-    double time=chronos.calculated_time/2000.0;
-
-    // calculation check
-
-    typename Interface::stl_matrix resu_stl(size);
-
-    Interface::matrix_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-6){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(1);
-    }
-
-    // deallocation and return time
-
-    Interface::free_matrix(A,size);
-    Interface::free_matrix(B,size);
-    Interface::free_matrix(X,size);
-
-    Interface::free_matrix(A_ref,size);
-    Interface::free_matrix(B_ref,size);
-    Interface::free_matrix(X_ref,size);
-
-    return time;
-  }
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_matrix_vector_product.hh b/btl/actions/action_matrix_vector_product.hh
deleted file mode 100644
index 8bab79d..0000000
--- a/btl/actions/action_matrix_vector_product.hh
+++ /dev/null
@@ -1,153 +0,0 @@
-//=====================================================
-// File   :  action_matrix_vector_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_MATRIX_VECTOR_PRODUCT
-#define ACTION_MATRIX_VECTOR_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_matrix_vector_product {
-
-public :
-
-  // Ctor
-
-  BTL_DONT_INLINE Action_matrix_vector_product( int size ):_size(size)
-  {
-    MESSAGE("Action_matrix_vector_product Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<null_function>(X_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(X,X_stl);
-
-  }
-
-  // invalidate copy ctor
-
-  Action_matrix_vector_product( const  Action_matrix_vector_product & )
-  {
-    INFOS("illegal call to Action_matrix_vector_product Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  BTL_DONT_INLINE ~Action_matrix_vector_product( void ){
-
-    MESSAGE("Action_matrix_vector_product Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_vector(B_ref);
-    Interface::free_vector(X_ref);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "matrix_vector_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-    Interface::copy_vector(X_ref,X,_size);
-
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-      BTL_ASM_COMMENT("#begin matrix_vector_product");
-      Interface::matrix_vector_product(A,B,X,_size);
-      BTL_ASM_COMMENT("end matrix_vector_product");
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-
-    // calculation check
-
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::matrix_vector_product(A_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-5){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(0);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_vector B_ref;
-  typename Interface::gene_vector X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_vector B;
-  typename Interface::gene_vector X;
-
-
-  int _size;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_parallel_axpy.hh b/btl/actions/action_parallel_axpy.hh
deleted file mode 100644
index 5053446..0000000
--- a/btl/actions/action_parallel_axpy.hh
+++ /dev/null
@@ -1,158 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_AXPY
-#define ACTION_PARALLEL_AXPY
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include <algorithm>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-#include "blas.h"
-
-using namespace std;
-
-template<class Interface>
-class Action_parallel_axpy {
-public:
-  BTL_DONT_INLINE Action_parallel_axpy( int size ):_size(size), _coef(1.)
-  {
-    MESSAGE("Action_parallel_axpy Ctor");
-    int iZERO = 0, iONE = 1;
-
-    GlobalRows = _size;
-    GlobalCols = 1;
-    BlockRows = 2;
-    BlockCols= 1;
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-      init_vector<pseudo_random>(Global_x_stl, _size);
-      init_vector<pseudo_random>(Global_y_stl, _size);
-    }
-
-    Interface::scatter_matrix(Global_x_stl, Local_x_stl, GlobalRows, GlobalCols, BlockRows, BlockCols, LocalRows, LocalCols);
-    Interface::scatter_matrix(Global_y_stl, Local_y_stl, GlobalRows, GlobalCols, BlockRows, BlockCols, LocalRows, LocalCols);
-
-    Interface::vector_from_stl(Local_x_ref, Local_x_stl);
-    Interface::vector_from_stl(Local_x    , Local_x_stl);
-    Interface::vector_from_stl(Local_y_ref, Local_y_stl);
-    Interface::vector_from_stl(Local_y    , Local_y_stl);
-
-    // Descinit
-    int context = Interface::context();
-    int info;
-    int LD = std::max(1, LocalRows);
-    descinit_(descX, &_size, &iONE, &BlockRows, &BlockCols, &iZERO, &iZERO, &context, &LD, &info);
-    descinit_(descY, &_size, &iONE, &BlockRows, &BlockCols, &iZERO, &iZERO, &context, &LD, &info);
-
-    // Copy Y to Test_y
-    Test_y_stl = Global_y_stl;
-  }
-
-  // Invalidate copy constructor
-  Action_parallel_axpy (const Action_parallel_axpy&)
-  {
-    INFOS("illegal call to Action_parallel_axpy Copy Ctor");
-    exit(1);
-  }
-
-  // Destructor
-  BTL_DONT_INLINE ~Action_parallel_axpy(){
-
-    MESSAGE("Action_parallel_axpy Dtor");
-
-    // deallocation
-
-    Interface::free_vector(Local_x_ref);
-    Interface::free_vector(Local_y_ref);
-
-    Interface::free_vector(Local_x);
-    Interface::free_vector(Local_y);
-  }
-
-  // action name
-  static inline std::string name()
-  {
-    return "axpy_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize(){
-    Interface::copy_vector(Local_x_ref, Local_x, LocalRows*LocalCols);
-    Interface::copy_vector(Local_y_ref, Local_y, LocalRows*LocalCols);
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-      BTL_ASM_COMMENT("#begin axpy");
-      Interface::parallel_axpy(_coef, Local_x, descX, Local_y, descY, _size);
-      BTL_ASM_COMMENT("end axpy");
-  }
-
-  void check_result( void ){
-    int iONE = 1;
-    Interface::vector_to_stl(Local_y, Local_y_stl);
-    Interface::gather_matrix(Global_y_stl, Local_y_stl, GlobalRows, GlobalCols, BlockRows, BlockCols, LocalRows, LocalCols);
-
-    // calculation check
-    if (iamroot) {
-
-      // Compute YTest
-      STL_interface<typename Interface::real_type>::axpy(_coef, Global_x_stl, Test_y_stl, _size);
-
-      typename Interface::real_type error =
-            STL_interface<typename Interface::real_type>::norm_diff(Global_y_stl, Test_y_stl);
-
-      if (error > 1e-5)
-        std::cerr << "Error: " << error << std::endl;
-    }
-
-  }
-
-private:
-  int _size;
-  int GlobalRows, GlobalCols, BlockRows, BlockCols, LocalRows, LocalCols;
-  typename Interface::real_type _coef;
-  bool iamroot;
-
-  typename Interface::stl_vector Global_x_stl;
-  typename Interface::stl_vector Global_y_stl;
-  typename Interface::stl_vector Test_y_stl;
-
-  typename Interface::stl_vector Local_x_stl;
-  typename Interface::stl_vector Local_y_stl;
-
-  typename Interface::gene_vector Local_x_ref;
-  typename Interface::gene_vector Local_y_ref;
-
-  typename Interface::gene_vector Local_x;
-  typename Interface::gene_vector Local_y;
-
-  int descX[9], descY[9];
-};
-
-#endif

diff --git a/btl/actions/action_parallel_cholesky.hh b/btl/actions/action_parallel_cholesky.hh
deleted file mode 100644
index d6bef14..0000000
--- a/btl/actions/action_parallel_cholesky.hh
+++ /dev/null
@@ -1,130 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_CHOLESKY_HH_
-#define ACTION_PARALLEL_CHOLESKY_HH_
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-#include "lapack_interface.hh"
-#include "STL_interface.hh"
-
-#include <string>
-#include <sstream>
-#include <fstream>
-
-template<class Interface>
-class Action_parallel_cholesky {
-  typedef lapack_interface<typename Interface::real_type> LapackInterface;
-
-public :
-
-  // Constructor
-  BTL_DONT_INLINE Action_parallel_cholesky( int size ) : _size(size)
-  {
-    MESSAGE("Action_parallel_cholesky Ctor");
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-        /* Using a constant seed */
-        const unsigned seed = 3;
-        init_SPD_matrix(Global_A_stl, size, seed);
-    }
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    scatter_matrix(Global_A_stl, Local_A_stl, desc, size, size, blocksize, blocksize);
-    LocalRows = desc[8];
-    LocalCols = Local_A_stl.size()/desc[8];
-
-    // Generic local matrix and vectors initialization
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size; ++j) {
-      double r = std::max(_size - j -1,0);
-      _cost += 2*(r*j+r+j);
-    }
-  }
-
-
-  // Invalidate copy constructor
-  Action_parallel_cholesky(const Action_parallel_cholesky&)
-  {
-    INFOS("illegal call to Action_parallel_cholesky copy constructor");
-    exit(1);
-  }
-
-  // Destructor
-  ~Action_parallel_cholesky()
-  {
-    MESSAGE("Action_parallel_cholesky destructor");
-
-    // Deallocation
-    Interface::free_matrix(Local_A    , Local_A_stl.size());
-  }
-
-  // Action name
-  static inline std::string name()
-  {
-    return "cholesky_" + Interface::name();
-  }
-
-  double nb_op_base()
-  {
-    return _cost;
-  }
-
-  BTL_DONT_INLINE void initialize()
-  {
-  }
-
-  BTL_DONT_INLINE void calculate()
-  {
-    Interface::copy_matrix(&Local_A_stl[0], Local_A, Local_A_stl.size());
-    Interface::parallel_cholesky(Local_A, desc);
-  }
-
-  BTL_DONT_INLINE void check_result()
-  {
-    if (_size > 2) {
-      double error = Interface::test_cholesky(Global_A_stl, Local_A, desc);
-      if (iamroot)
-        cout << " {error: " << error << "} ";
-    }
-  }
-
-
-private:
-  int _size, desc[9], LocalRows, LocalCols;
-  double _cost;
-  bool iamroot;
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::gene_matrix Local_A;
-
-  typename Interface::stl_matrix Glotal_Test_stl;
-  typename Interface::stl_matrix Local_Test_stl;
-};
-
-#endif /* ACTION_PARALLEL_CHOLESKY_HH_ */

diff --git a/btl/actions/action_parallel_lu_decomp.hh b/btl/actions/action_parallel_lu_decomp.hh
deleted file mode 100644
index a6b3600..0000000
--- a/btl/actions/action_parallel_lu_decomp.hh
+++ /dev/null
@@ -1,142 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_LU_DECOMP_HH_
-#define ACTION_PARALLEL_LU_DECOMP_HH_
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-#include "lapack_interface.hh"
-#include "STL_interface.hh"
-
-#include <string>
-
-template<class Interface>
-class Action_parallel_lu_decomp {
-
-public :
-
-  // Constructor
-  BTL_DONT_INLINE Action_parallel_lu_decomp( int size ) : _size(size)
-  {
-    MESSAGE("Action_parallel_lu_decomp Ctor");
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-        /* Using a constant seed */
-        const unsigned seed = 3;
-        init_matrix(Global_A_stl, size, seed);
-    }
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    scatter_matrix(Global_A_stl, Local_A_stl, desc, size, size, blocksize, blocksize);
-    LocalRows = desc[8];
-    LocalCols = Local_A_stl.size()/desc[8];
-
-    // Generic local matrix and vectors initialization
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-
-    _cost = 2.0*size*size*size/3.0 + static_cast<double>(size*size);
-  }
-
-
-  // Invalidate copy constructor
-  Action_parallel_lu_decomp(const Action_parallel_lu_decomp&)
-  {
-    INFOS("illegal call to Action_parallel_lu_decomp copy constructor");
-    exit(1);
-  }
-
-  // Destructor
-  ~Action_parallel_lu_decomp()
-  {
-    MESSAGE("Action_parallel_lu_decomp destructor");
-
-    // Deallocation
-    Interface::free_matrix(Local_A    , Local_A_stl.size());
-  }
-
-  // Action name
-  static inline std::string name()
-  {
-    return "lu_decomp_" + Interface::name();
-  }
-
-  double nb_op_base()
-  {
-    return _cost;
-  }
-
-  BTL_DONT_INLINE void initialize()
-  {
-  }
-
-  BTL_DONT_INLINE void calculate()
-  {
-    Interface::copy_matrix(&Local_A_stl[0], Local_A, Local_A_stl.size());
-    Interface::parallel_lu_decomp(Local_A, ipiv_stl, desc);
-  }
-
-  BTL_DONT_INLINE void check_result()
-  {
-//    /* Gather */
-//    typename Interface::stl_matrix Global_Y;
-//    typename Interface::stl_matrix Local_Y(Local_A_stl.size());
-//    Interface::matrix_to_stl(Local_A, Local_Y);
-//    Interface::gather_matrix(Global_Y, Local_Y, desc);
-//
-//    if (iamroot) {
-//
-//      typename Interface::gene_matrix A;
-//      Interface::matrix_from_stl(A, Global_A_stl);
-//      lapack_interface<typename Interface::real_type>::lu_decomp(&Global_A_stl[0], A, _size);
-//      typename Interface::stl_vector correct(A, A+_size*_size);
-//      typename Interface::real_type error = STL_interface<typename Interface::real_type>::norm_diff(Global_Y, correct);
-//      if (error > 10e-5)
-//        cerr << " { !! error : " << error << " !! } ";
-//
-//      Interface::free_matrix(A, _size*_size);
-//    }
-
-
-//    if (_size > 2) {
-//      double error = Interface::test_LU(Global_A_stl, Local_A, desc);
-//      if (iamroot)
-//        cout << " {error: " << error << "} ";
-//    }
-  }
-
-private:
-  int _size, desc[9], LocalRows, LocalCols;
-  double _cost;
-  bool iamroot;
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::gene_matrix Local_A;
-
-  std::vector<int> ipiv_stl;
-};
-
-
-#endif /* ACTION_PARALLEL_LU_DECOMP_HH_ */

diff --git a/btl/actions/action_parallel_matrix_vector_product.hh b/btl/actions/action_parallel_matrix_vector_product.hh
deleted file mode 100644
index 51eafb9..0000000
--- a/btl/actions/action_parallel_matrix_vector_product.hh
+++ /dev/null
@@ -1,159 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_MATRIX_VECTOR_PRODUCT
-#define ACTION_PARALLEL_MATRIX_VECTOR_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include <algorithm>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-#include "blas.h"
-
-template<class Interface>
-class Action_parallel_matrix_vector_product {
-
-public :
-
-  // Ctor
-
-  BTL_DONT_INLINE Action_parallel_matrix_vector_product( int size ):_size(size)
-  {
-    MESSAGE("Action_parallel_matrix_vector_product Ctor");
-    int iZERO = 0, iONE = 1;
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-      init_vector<pseudo_random>(Global_A_stl, size*size);
-      init_vector<pseudo_random>(Global_x_stl, size);
-      init_vector<null_function>(Global_y_stl, size);
-    }
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    Interface::scatter_matrix(Global_A_stl, Local_A_stl, descA, size, size, blocksize, blocksize);
-    Interface::scatter_matrix(Global_x_stl, Local_x_stl, descX, size,    1, blocksize, blocksize);
-    Interface::scatter_matrix(Global_y_stl, Local_y_stl, descY, size,    1, blocksize, blocksize);
-
-    // generic local matrix and vectors initialization
-
-    Interface::matrix_from_stl(Local_A_ref, Local_A_stl);
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-    Interface::vector_from_stl(Local_x_ref, Local_x_stl);
-    Interface::vector_from_stl(Local_x    , Local_x_stl);
-    Interface::vector_from_stl(Local_y_ref, Local_y_stl);
-    Interface::vector_from_stl(Local_y    , Local_y_stl);
-  }
-
-  // invalidate copy ctor
-  Action_parallel_matrix_vector_product( const  Action_parallel_matrix_vector_product & )
-  {
-    INFOS("illegal call to Action_parallel_matrix_vector_product copy constructor");
-    exit(1);
-  }
-
-  // Dtor
-  BTL_DONT_INLINE ~Action_parallel_matrix_vector_product(){
-
-    MESSAGE("Action_parallel_matrix_vector_product destructor");
-
-    // deallocation
-
-    Interface::free_matrix(Local_A_ref, _size*_size);
-    Interface::free_vector(Local_x_ref);
-    Interface::free_vector(Local_y_ref);
-
-    Interface::free_matrix(Local_A, _size*_size);
-    Interface::free_vector(Local_x);
-    Interface::free_vector(Local_y);
-
-  }
-
-  // action name
-  static inline std::string name( void )
-  {
-    return "matrix_vector_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-    Interface::copy_matrix(Local_A_ref, Local_A, Local_A_stl.size());
-    Interface::copy_vector(Local_x_ref, Local_x, Local_x_stl.size());
-    Interface::copy_vector(Local_y_ref, Local_y, Local_y_stl.size());
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-      Interface::parallel_matrix_vector_product(_size, _size, Local_A, descA, Local_x, descX, Local_y, descY);
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-    int GlobalYCols;
-    Interface::vector_to_stl(Local_y, Local_y_stl);
-
-    Interface::gather_matrix(Global_y_stl, Local_y_stl, descY);
-
-    // calculation check
-    if (iamroot) {
-
-      // Compute YTest
-      Test_y_stl.resize(_size);
-      STL_interface<typename Interface::real_type>::matrix_vector_product(Global_A_stl, Global_x_stl, Test_y_stl, _size);
-
-      typename Interface::real_type error = STL_interface<typename Interface::real_type>::norm_diff(Global_y_stl, Test_y_stl);
-
-      if (error > 1e-5)
-        std::cerr << "Error: " << error << " ";
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_vector Global_x_stl;
-  typename Interface::stl_vector Global_y_stl;
-  typename Interface::stl_vector Test_y_stl;
-
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::stl_vector Local_x_stl;
-  typename Interface::stl_vector Local_y_stl;
-
-  typename Interface::gene_matrix Local_A_ref;
-  typename Interface::gene_vector Local_x_ref;
-  typename Interface::gene_vector Local_y_ref;
-
-  typename Interface::gene_matrix Local_A;
-  typename Interface::gene_vector Local_x;
-  typename Interface::gene_vector Local_y;
-
-  bool iamroot;
-  int _size;
-  int descA[9], descX[9], descY[9];
-
-};
-
-
-#endif

diff --git a/btl/actions/action_parallel_qr_decomp.hh b/btl/actions/action_parallel_qr_decomp.hh
deleted file mode 100644
index 3c50fb4..0000000
--- a/btl/actions/action_parallel_qr_decomp.hh
+++ /dev/null
@@ -1,116 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_QR_DECOMP_HH_
-#define ACTION_PARALLEL_QR_DECOMP_HH_
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-#include "lapack_interface.hh"
-#include "STL_interface.hh"
-
-#include <string>
-#include <algorithm>
-
-template<class Interface>
-class Action_parallel_qr_decomp {
-
-public :
-
-  // Constructor
-  BTL_DONT_INLINE Action_parallel_qr_decomp( int size ) : _size(size)
-  {
-    MESSAGE("Action_parallel_qr_decomp Ctor");
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-        /* Using a constant seed */
-        const unsigned seed = 3;
-        init_matrix(Global_A_stl, size, seed);
-    }
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    scatter_matrix(Global_A_stl, Local_A_stl, desc, size, size, blocksize, blocksize);
-    LocalRows = desc[8];
-    LocalCols = Local_A_stl.size()/desc[8];
-
-    // Generic local matrix and vectors initialization
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-
-    _cost = 2.0*size*size*size;
-  }
-
-
-  // Invalidate copy constructor
-  Action_parallel_qr_decomp(const Action_parallel_qr_decomp&)
-  {
-    INFOS("illegal call to Action_parallel_qr_decomp copy constructor");
-    exit(1);
-  }
-
-  // Destructor
-  ~Action_parallel_qr_decomp()
-  {
-    MESSAGE("Action_parallel_qr_decomp destructor");
-
-    // Deallocation
-    Interface::free_matrix(Local_A    , Local_A_stl.size());
-  }
-
-  // Action name
-  static inline std::string name()
-  {
-    return "qr_decomp_" + Interface::name();
-  }
-
-  double nb_op_base()
-  {
-    return _cost;
-  }
-
-  BTL_DONT_INLINE void initialize()
-  {
-  }
-
-  BTL_DONT_INLINE void calculate()
-  {
-    Interface::copy_matrix(&Local_A_stl[0], Local_A, Local_A_stl.size());
-    Interface::parallel_qr_decomp(Local_A, desc);
-  }
-
-  BTL_DONT_INLINE void check_result()
-  {
-  }
-
-private:
-  int _size, desc[9], LocalRows, LocalCols;
-  double _cost;
-  bool iamroot;
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::gene_matrix Local_A;
-};
-
-
-#endif /* ACTION_PARALLEL_QR_DECOMP_HH_ */

diff --git a/btl/actions/action_parallel_svd_decomp.hh b/btl/actions/action_parallel_svd_decomp.hh
deleted file mode 100644
index 3281886..0000000
--- a/btl/actions/action_parallel_svd_decomp.hh
+++ /dev/null
@@ -1,151 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_SVD_DECOMP_HH_
-#define ACTION_PARALLEL_SVD_DECOMP_HH_
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-#include "lapack_interface.hh"
-#include "STL_interface.hh"
-
-#include <string>
-#include <algorithm>
-
-template<class Interface>
-class Action_parallel_svd_decomp {
-
-public :
-
-  // Constructor
-  BTL_DONT_INLINE Action_parallel_svd_decomp( int size ) : _size(size)
-  {
-    MESSAGE("Action_parallel_svd_decomp Ctor");
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-      init_vector<pseudo_random>(Global_A_stl, size*size);
-      init_vector<pseudo_random>(Global_U_stl, size*size);
-      init_vector<pseudo_random>(Global_V_stl, size*size);
-    }
-    init_vector<null_function>(Local_s_stl, size);
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    Interface::scatter_matrix(Global_A_stl, Local_A_stl, descA, size, size, blocksize, blocksize);
-    Interface::scatter_matrix(Global_U_stl, Local_U_stl, descU, size, size, blocksize, blocksize);
-    Interface::scatter_matrix(Global_V_stl, Local_V_stl, descV, size, size, blocksize, blocksize);
-    LocalRows = descA[8];
-    LocalCols = Local_A_stl.size()/descA[8];
-
-    // Generic local matrix and vectors initialization
-    Interface::matrix_from_stl(Local_A_ref, Local_A_stl);
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-    Interface::matrix_from_stl(Local_U_ref, Local_U_stl);
-    Interface::matrix_from_stl(Local_U    , Local_U_stl);
-    Interface::matrix_from_stl(Local_V_ref, Local_V_stl);
-    Interface::matrix_from_stl(Local_V    , Local_V_stl);
-    Interface::vector_from_stl(Local_s_ref, Local_s_stl);
-    Interface::vector_from_stl(Local_s    , Local_s_stl);
-
-    _cost = 2.0*size*size*size;
-  }
-
-
-  // Invalidate copy constructor
-  Action_parallel_svd_decomp(const Action_parallel_svd_decomp&)
-  {
-    INFOS("illegal call to Action_parallel_svd_decomp copy constructor");
-    exit(1);
-  }
-
-  // Destructor
-  ~Action_parallel_svd_decomp()
-  {
-    MESSAGE("Action_parallel_svd_decomp destructor");
-
-    // Deallocation
-    Interface::free_matrix(Local_A_ref, Local_A_stl.size());
-    Interface::free_matrix(Local_A    , Local_A_stl.size());
-    Interface::free_matrix(Local_U_ref, Local_U_stl.size());
-    Interface::free_matrix(Local_U    , Local_U_stl.size());
-    Interface::free_matrix(Local_V_ref, Local_V_stl.size());
-    Interface::free_matrix(Local_V    , Local_V_stl.size());
-    Interface::free_vector(Local_s_ref);
-    Interface::free_vector(Local_s    );
-  }
-
-  // Action name
-  static inline std::string name()
-  {
-    return "svd_decomp_" + Interface::name();
-  }
-
-  double nb_op_base()
-  {
-    return _cost;
-  }
-
-  BTL_DONT_INLINE void initialize()
-  {
-    Interface::copy_matrix(Local_A_ref, Local_A, Local_A_stl.size());
-    Interface::copy_matrix(Local_U_ref, Local_U, Local_U_stl.size());
-    Interface::copy_matrix(Local_V_ref, Local_V, Local_V_stl.size());
-    Interface::copy_vector(Local_s_ref, Local_s, Local_s_stl.size());
-  }
-
-  BTL_DONT_INLINE void calculate()
-  {
-    Interface::parallel_svd_decomp(Local_A, descA, Local_U, descU, Local_V, descV, Local_s);
-  }
-
-  BTL_DONT_INLINE void check_result()
-  {
-  }
-
-private:
-  int _size, descA[9], descU[9], descV[9], LocalRows, LocalCols;
-  double _cost;
-  bool iamroot;
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::gene_matrix Local_A_ref;
-  typename Interface::gene_matrix Local_A;
-
-  typename Interface::stl_matrix Global_U_stl;
-  typename Interface::stl_matrix Local_U_stl;
-  typename Interface::gene_matrix Local_U_ref;
-  typename Interface::gene_matrix Local_U;
-
-  typename Interface::stl_matrix Global_V_stl;
-  typename Interface::stl_matrix Local_V_stl;
-  typename Interface::gene_matrix Local_V_ref;
-  typename Interface::gene_matrix Local_V;
-
-  typename Interface::stl_vector Local_s_stl;
-  typename Interface::gene_vector Local_s_ref;
-  typename Interface::gene_vector Local_s;
-};
-
-
-#endif /* ACTION_PARALLEL_SVD_DECOMP_HH */

diff --git a/btl/actions/action_parallel_symm_ev.hh b/btl/actions/action_parallel_symm_ev.hh
deleted file mode 100644
index 85a1d13..0000000
--- a/btl/actions/action_parallel_symm_ev.hh
+++ /dev/null
@@ -1,138 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARALLEL_SYMM_EV_HH_
-#define ACTION_PARALLEL_SYMM_EV_HH_
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-#include "lapack_interface.hh"
-#include "STL_interface.hh"
-
-#include <string>
-
-template<class Interface>
-class Action_parallel_symm_ev {
-
-public :
-
-  // Constructor
-  BTL_DONT_INLINE Action_parallel_symm_ev( int size ) : _size(size)
-  {
-    MESSAGE("Action_parallel_symm_ev constructor");
-
-    int myid, procnum;
-    blacs_pinfo_(&myid, &procnum);
-    iamroot = (myid == 0);
-
-    // STL matrix and vector initialization
-    if (iamroot) {
-      init_vector<pseudo_random>(Global_A_stl, size*size);
-      init_vector<null_function>(Global_Z_stl, size*size);
-    }
-    init_vector<null_function>(Local_w_stl, size);
-
-    const int blocksize = std::max(std::min(size/4, 64), 2);
-    Interface::scatter_matrix(Global_A_stl, Local_A_stl, descA, size, size, blocksize, blocksize);
-    Interface::scatter_matrix(Global_Z_stl, Local_Z_stl, descZ, size, size, blocksize, blocksize);
-    LocalRows = descA[8];
-    LocalCols = Local_A_stl.size()/descA[8];
-
-    // Generic local matrix and vectors initialization
-    Interface::matrix_from_stl(Local_A_ref, Local_A_stl);
-    Interface::matrix_from_stl(Local_A    , Local_A_stl);
-    Interface::matrix_from_stl(Local_Z_ref, Local_Z_stl);
-    Interface::matrix_from_stl(Local_Z    , Local_Z_stl);
-    Interface::vector_from_stl(Local_w    , Local_w_stl);
-    Interface::vector_from_stl(Local_w_ref, Local_w_stl);
-
-    _cost = size*size*size;
-  }
-
-
-  // Invalidate copy constructor
-  Action_parallel_symm_ev(const Action_parallel_symm_ev&)
-  {
-    INFOS("illegal call to Action_parallel_symm_ev copy constructor");
-    exit(1);
-  }
-
-  // Destructor
-  ~Action_parallel_symm_ev()
-  {
-    MESSAGE("Action_parallel_symm_ev destructor");
-
-    // Deallocation
-    Interface::free_matrix(Local_A_ref, Local_A_stl.size());
-    Interface::free_matrix(Local_A    , Local_A_stl.size());
-    Interface::free_matrix(Local_Z_ref, Local_Z_stl.size());
-    Interface::free_matrix(Local_Z    , Local_Z_stl.size());
-    Interface::free_vector(Local_w_ref);
-    Interface::free_vector(Local_w    );
-  }
-
-  // Action name
-  static inline std::string name()
-  {
-    return "symm_ev_" + Interface::name();
-  }
-
-  double nb_op_base()
-  {
-    return _cost;
-  }
-
-  BTL_DONT_INLINE void initialize()
-  {
-    Interface::copy_matrix(Local_A_ref, Local_A, Local_A_stl.size());
-    Interface::copy_matrix(Local_Z_ref, Local_Z, Local_Z_stl.size());
-    Interface::copy_vector(Local_w_ref, Local_w, Local_w_stl.size());
-  }
-
-  BTL_DONT_INLINE void calculate()
-  {
-    Interface::parallel_symm_ev(Local_A, descA, Local_w, Local_Z, descZ);
-  }
-
-  BTL_DONT_INLINE void check_result()
-  {
-  }
-
-private:
-  int _size, descA[9], descZ[9], LocalRows, LocalCols;
-  double _cost;
-  bool iamroot;
-
-  typename Interface::stl_matrix Global_A_stl;
-  typename Interface::stl_matrix Local_A_stl;
-  typename Interface::gene_matrix Local_A_ref;
-  typename Interface::gene_matrix Local_A;
-
-  typename Interface::stl_matrix Global_Z_stl;
-  typename Interface::stl_matrix Local_Z_stl;
-  typename Interface::gene_matrix Local_Z_ref;
-  typename Interface::gene_matrix Local_Z;
-
-  typename Interface::stl_vector Local_w_stl;
-  typename Interface::gene_vector Local_w_ref;
-  typename Interface::gene_vector Local_w;
-};
-
-
-#endif /* ACTION_PARALLEL_SYMM_EV_HH_ */

diff --git a/btl/actions/action_partial_lu.hh b/btl/actions/action_partial_lu.hh
deleted file mode 100644
index 770ea1d..0000000
--- a/btl/actions/action_partial_lu.hh
+++ /dev/null
@@ -1,125 +0,0 @@
-//=====================================================
-// File   :  action_lu_decomp.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_PARTIAL_LU
-#define ACTION_PARTIAL_LU
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_partial_lu {
-
-public :
-
-  // Ctor
-
-  Action_partial_lu( int size ):_size(size)
-  {
-    MESSAGE("Action_partial_lu Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl,_size);
-    init_matrix<null_function>(C_stl,_size);
-
-    // make sure X is invertible
-    for (int i=0; i<_size; ++i)
-      X_stl[i][i] = X_stl[i][i] * 1e2 + 1;
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref,X_stl);
-    Interface::matrix_from_stl(X,X_stl);
-    Interface::matrix_from_stl(C,C_stl);
-
-    _cost = 2.0*size*size*size/3.0 + size*size;
-  }
-
-  // invalidate copy ctor
-
-  Action_partial_lu( const  Action_partial_lu & )
-  {
-    INFOS("illegal call to Action_partial_lu Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_partial_lu( void ){
-
-    MESSAGE("Action_partial_lu Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref,_size);
-    Interface::free_matrix(X,_size);
-    Interface::free_matrix(C,_size);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "partial_lu_decomp_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::partial_lu_decomp(X,C,_size);
-  }
-
-  void check_result( void ){
-    // calculation check
-//     Interface::matrix_to_stl(C,resu_stl);
-
-//     STL_interface<typename Interface::real_type>::lu_decomp(X_stl,C_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_qr_decomp.hh b/btl/actions/action_qr_decomp.hh
deleted file mode 100644
index 15a4619..0000000
--- a/btl/actions/action_qr_decomp.hh
+++ /dev/null
@@ -1,112 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_QR_DECOMP
-#define ACTION_QR_DECOMP
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_qr_decomp {
-
-public :
-
-  // Ctor
-
-  Action_qr_decomp( int size ) : _size(size)
-  {
-    MESSAGE("Action_qr_decomp Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl ,_size);
-    init_matrix<null_function>(C_stl, _size);
-	init_vector<null_function>(tau_stl, _size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref, X_stl);
-    Interface::matrix_from_stl(X, X_stl);
-    Interface::matrix_from_stl(C, C_stl);
-    Interface::vector_from_stl(tau, tau_stl);
-	
-    _cost = 2.0*size*size*size/3.0 + size*size + 1.0*size/3.0 - 2;
-  }
-
-  // invalidate copy ctor
-
-  Action_qr_decomp( const  Action_qr_decomp & )
-  {
-    INFOS("illegal call to Action_qr_decomp Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_qr_decomp( void ){
-
-    MESSAGE("Action_qr_decomp Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref, _size);
-    Interface::free_matrix(X, _size);
-    Interface::free_matrix(C, _size);
-    Interface::free_vector(tau);
-  }
-
-  // action name
-
-  static inline std::string name()
-  {
-    return "qr_decomp_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref, X, _size);
-  }
-
-  inline void calculate( void ) {
-      Interface::qr_decomp(X, C, tau, _size);
-  }
-
-  void check_result( void ){
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix C_stl;
-  typename Interface::stl_vector tau_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix C;
-  typename Interface::gene_vector tau;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_rot.hh b/btl/actions/action_rot.hh
deleted file mode 100644
index df822a6..0000000
--- a/btl/actions/action_rot.hh
+++ /dev/null
@@ -1,116 +0,0 @@
-
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_ROT
-#define ACTION_ROT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_rot {
-
-public :
-
-  // Ctor
-  BTL_DONT_INLINE Action_rot( int size ):_size(size)
-  {
-    MESSAGE("Action_rot Ctor");
-
-    // STL matrix and vector initialization
-    typename Interface::stl_matrix tmp;
-    init_vector<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::vector_from_stl(A_ref,A_stl);
-    Interface::vector_from_stl(A,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(B,B_stl);
-  }
-
-  // invalidate copy ctor
-  Action_rot( const  Action_rot & )
-  {
-    INFOS("illegal call to Action_rot Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-  BTL_DONT_INLINE ~Action_rot( void ){
-    MESSAGE("Action_rot Dtor");
-    Interface::free_vector(A);
-    Interface::free_vector(B);
-    Interface::free_vector(A_ref);
-    Interface::free_vector(B_ref);
-  }
-
-  // action name
-  static inline std::string name( void )
-  {
-    return "rot_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 6.0*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-    Interface::copy_vector(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-    BTL_ASM_COMMENT("#begin rot");
-    Interface::rot(A,B,0.5,0.6,_size);
-    BTL_ASM_COMMENT("end rot");
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-    // calculation check
-//     Interface::vector_to_stl(X,resu_stl);
-
-//     STL_interface<typename Interface::real_type>::rot(A_stl,B_stl,X_stl,_size);
-
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-//     if (error>1.e-3){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_vector A_stl;
-  typename Interface::stl_vector B_stl;
-
-  typename Interface::gene_vector A_ref;
-  typename Interface::gene_vector B_ref;
-
-  typename Interface::gene_vector A;
-  typename Interface::gene_vector B;
-
-  int _size;
-};
-
-
-#endif

diff --git a/btl/actions/action_rot.hpp b/btl/actions/action_rot.hpp
new file mode 100644
index 0000000..93cba4e
--- /dev/null
+++ b/btl/actions/action_rot.hpp
@@ -0,0 +1,78 @@
+//=====================================================
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+#ifndef ACTION_ROT
+#define ACTION_ROT
+
+#include "LinearCongruential.hpp"
+#include <vector>
+#include <algorithm>
+
+template<class Interface>
+class Action_rot {
+
+    typedef typename Interface::Scalar Scalar;
+    typedef std::vector<Scalar> vector_t;
+
+private:
+    // Invalidate copy constructor
+    Action_rot(const Action_rot&);
+
+public:
+
+    // Constructor
+    Action_rot(int size)
+    : _size(size), lc(10),
+      x(lc.fillVector<Scalar>(size)), y(lc.fillVector<Scalar>(size)),
+      x_work(size), y_work(size)
+    {
+        MESSAGE("Action_rot Constructor");
+    }
+
+    // Action name
+    static std::string name()
+    {
+        return "rot_" + Interface::name();
+    }
+
+    double fpo() {
+        return 2*double(_size);
+    }
+
+    inline void initialize(){
+        std::copy(x.begin(), x.end(), x_work.begin());
+        std::copy(y.begin(), y.end(), y_work.begin());
+    }
+
+    inline void calculate() {
+        Interface::rot(_size, &x_work[0], &y_work[0], 0.5, 0.6);
+    }
+
+    Scalar getResidual() {
+        return 0.;
+    }
+
+private:
+    const int _size;
+    LinearCongruential<> lc;
+
+    const vector_t x, y;
+    vector_t x_work, y_work;
+
+};
+
+#endif // ACTION_AXPY

diff --git a/btl/actions/action_stev.hh b/btl/actions/action_stev.hh
deleted file mode 100644
index e564571..0000000
--- a/btl/actions/action_stev.hh
+++ /dev/null
@@ -1,119 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_STEV
-#define ACTION_STEV
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_stev {
-
-public :
-
-  // Ctor
-
-  Action_stev( int size ) : _size(size)
-  {
-    MESSAGE("Action_stev Ctor");
-
-    // STL vector initialization
-    init_vector<pseudo_random>(D_stl, _size);
-	init_vector<pseudo_random>(E_stl, max(0, _size-1));
-    init_matrix<null_function>(V_stl, _size);
-	init_vector<null_function>(W_stl, _size);
-
-    // generic matrix and vector initialization
-    Interface::vector_from_stl(D_ref, D_stl);
-	Interface::vector_from_stl(E_ref, E_stl);
-    Interface::vector_from_stl(D, D_stl);
-	Interface::vector_from_stl(E, E_stl);
-    Interface::matrix_from_stl(V, V_stl);
-    Interface::vector_from_stl(W, W_stl);
-
-	// FIXME: correct?
-    _cost = size*size*size;
-  }
-
-  // invalidate copy ctor
-
-  Action_stev( const  Action_stev& )
-  {
-    INFOS("illegal call to Action_stev Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_stev( void ){
-
-    MESSAGE("Action_stev Dtor");
-
-    // deallocation
-    Interface::free_vector(D_ref);
-	Interface::free_vector(E_ref);
-    Interface::free_vector(D);
-	Interface::free_vector(E);
-    Interface::free_matrix(V, _size);
-    Interface::free_vector(W);
-  }
-
-  // action name
-
-  static inline std::string name()
-  {
-    return "stev_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_vector(D_ref, D, _size);
-    Interface::copy_vector(E_ref, E, _size-1);
-  }
-
-  inline void calculate( void ) {
-      Interface::stev(D, E, W, V, _size);
-  }
-
-  void check_result( void ){
-  }
-
-private :
-
-  typename Interface::stl_vector D_stl, E_stl;
-  typename Interface::stl_matrix V_stl;
-  typename Interface::stl_vector W_stl;
-
-  typename Interface::gene_vector D_ref, E_ref;
-  typename Interface::gene_vector D, E;
-  typename Interface::gene_matrix V;
-  typename Interface::gene_vector W;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_svd_decomp.hh b/btl/actions/action_svd_decomp.hh
deleted file mode 100644
index be6740a..0000000
--- a/btl/actions/action_svd_decomp.hh
+++ /dev/null
@@ -1,115 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_SVD_DECOMP
-#define ACTION_SVD_DECOMP
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_svd_decomp {
-
-public :
-
-  // Ctor
-
-  Action_svd_decomp( int size ) : _size(size)
-  {
-    MESSAGE("Action_svd_decomp Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(X_stl ,_size);
-    init_matrix<null_function>(U_stl, _size);
-    init_matrix<null_function>(VT_stl, _size);
-	init_vector<null_function>(S_stl, _size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref, X_stl);
-    Interface::matrix_from_stl(X, X_stl);
-    Interface::matrix_from_stl(U, U_stl);
-    Interface::matrix_from_stl(VT, VT_stl);
-    Interface::vector_from_stl(S, S_stl);
-
-    _cost = 4*size*size*size;
-  }
-
-  // invalidate copy ctor
-
-  Action_svd_decomp( const  Action_svd_decomp & )
-  {
-    INFOS("illegal call to Action_svd_decomp Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_svd_decomp( void ){
-
-    MESSAGE("Action_svd_decomp Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref, _size);
-    Interface::free_matrix(X, _size);
-    Interface::free_matrix(U, _size);
-    Interface::free_matrix(VT, _size);
-    Interface::free_vector(S);
-  }
-
-  // action name
-
-  static inline std::string name()
-  {
-    return "svd_decomp_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref, X, _size);
-  }
-
-  inline void calculate( void ) {
-      Interface::svd_decomp(X, U, S, VT, _size);
-  }
-
-  void check_result( void ){
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix U_stl, VT_stl;
-  typename Interface::stl_vector S_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix U, VT;
-  typename Interface::gene_vector S;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_syev.hh b/btl/actions/action_syev.hh
deleted file mode 100644
index b8f33be..0000000
--- a/btl/actions/action_syev.hh
+++ /dev/null
@@ -1,113 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_SYEV
-#define ACTION_SYEV
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_syev {
-
-public :
-
-  // Ctor
-
-  Action_syev( int size ) : _size(size)
-  {
-    MESSAGE("Action_syev Ctor");
-
-    // STL vector initialization
-    init_matrix_symm<pseudo_random>(X_stl ,_size);
-    init_matrix<null_function>(V_stl, _size);
-	init_vector<null_function>(W_stl, _size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(X_ref, X_stl);
-    Interface::matrix_from_stl(X, X_stl);
-    Interface::matrix_from_stl(V, V_stl);
-    Interface::vector_from_stl(W, W_stl);
-
-	// FIXME: correct?
-    _cost = size*size*size;
-  }
-
-  // invalidate copy ctor
-
-  Action_syev( const  Action_syev& )
-  {
-    INFOS("illegal call to Action_syev Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_syev( void ){
-
-    MESSAGE("Action_syev Dtor");
-
-    // deallocation
-    Interface::free_matrix(X_ref, _size);
-    Interface::free_matrix(X, _size);
-    Interface::free_matrix(V, _size);
-    Interface::free_vector(W);
-  }
-
-  // action name
-
-  static inline std::string name()
-  {
-    return "syev_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    Interface::copy_matrix(X_ref, X, _size);
-  }
-
-  inline void calculate( void ) {
-      Interface::syev(X, V, W, _size);
-  }
-
-  void check_result( void ){
-  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix V_stl;
-  typename Interface::stl_vector W_stl;
-
-  typename Interface::gene_matrix X_ref;
-  typename Interface::gene_matrix X;
-  typename Interface::gene_matrix V;
-  typename Interface::gene_vector W;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_symm_ev.hh b/btl/actions/action_symm_ev.hh
deleted file mode 100644
index c696da2..0000000
--- a/btl/actions/action_symm_ev.hh
+++ /dev/null
@@ -1,104 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_SYMM_EV
-#define ACTION_SYMM_EV
-
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-template<class Interface>
-class Action_symm_ev {
-
-public:
-
-	// Ctor
-	Action_symm_ev( int size ) : _size(size)
-	{
-	    MESSAGE("Action_symm_ev Ctor");
-
-	    // STL matrix initialization
-	    init_matrix_symm<pseudo_random>(X_stl,_size);
-	    init_vector<pseudo_random>(W_stl,_size);
-
-	    // generic matrix and vector initialization
-	    Interface::matrix_from_stl(X,X_stl);
-	    Interface::vector_from_stl(W,W_stl);
-
-
-	}
-
-	  // invalidate copy ctor
-
-	  Action_symm_ev( const  Action_symm_ev & )
-	  {
-	    INFOS("illegal call to Action_symm_ev Copy Ctor");
-	    exit(1);
-	  }
-
-	  // Dtor
-
-	  ~Action_symm_ev( void ){
-
-	    MESSAGE("Action_symm_ev Dtor");
-
-	    // deallocation
-	    Interface::free_matrix(X,_size);
-	  }
-
-	  // action name
-
-	  static inline std::string name( void )
-	  {
-	    return "symm_ev_"+Interface::name();
-	  }
-
-	  double nb_op_base( void ){
-		// TODO: is this right?
-	    return _size*_size;
-	  }
-
-	  inline void initialize( void ){
-	  }
-
-	  inline void calculate( void ) {
-	      Interface::symm_ev(X,W,_size);
-	  }
-
-	  void check_result( void ) {
-		  // TODO: check result
-	  }
-
-private :
-
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_vector W_stl;
-
-  typename Interface::gene_matrix X;
-  typename Interface::gene_vector W;
-
-  int _size;
-  double _cost;
-
-};
-
-
-#endif // ACTION_SYMM_EV

diff --git a/btl/actions/action_symv.hh b/btl/actions/action_symv.hh
deleted file mode 100644
index a32b9df..0000000
--- a/btl/actions/action_symv.hh
+++ /dev/null
@@ -1,139 +0,0 @@
-//=====================================================
-// File   :  action_symv.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_SYMV
-#define ACTION_SYMV
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_symv {
-
-public :
-
-  // Ctor
-
-  BTL_DONT_INLINE Action_symv( int size ):_size(size)
-  {
-    MESSAGE("Action_symv Ctor");
-
-    // STL matrix and vector initialization
-    init_matrix_symm<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<null_function>(X_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(X,X_stl);
-
-  }
-
-  // invalidate copy ctor
-
-  Action_symv( const  Action_symv & )
-  {
-    INFOS("illegal call to Action_symv Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-  BTL_DONT_INLINE ~Action_symv( void ){
-    Interface::free_matrix(A,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_vector(B_ref);
-    Interface::free_vector(X_ref);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "symv_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-    Interface::copy_vector(X_ref,X,_size);
-
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-      BTL_ASM_COMMENT("#begin symv");
-      Interface::symv(A,B,X,_size);
-      BTL_ASM_COMMENT("end symv");
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-    if (_size>128) return;
-    // calculation check
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::symv(A_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-5){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(0);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_vector B_ref;
-  typename Interface::gene_vector X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_vector B;
-  typename Interface::gene_vector X;
-
-
-  int _size;
-
-};
-
-
-#endif

diff --git a/btl/actions/action_syr2.hh b/btl/actions/action_syr2.hh
deleted file mode 100644
index 7c6712b..0000000
--- a/btl/actions/action_syr2.hh
+++ /dev/null
@@ -1,133 +0,0 @@
-//=====================================================
-// File   :  action_syr2.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_SYR2
-#define ACTION_SYR2
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_syr2 {
-
-public :
-
-  // Ctor
-
-  BTL_DONT_INLINE Action_syr2( int size ):_size(size)
-  {
-    // STL matrix and vector initialization
-    typename Interface::stl_matrix tmp;
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<pseudo_random>(X_stl,_size);
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::vector_from_stl(B_ref,B_stl);
-    Interface::vector_from_stl(B,B_stl);
-    Interface::vector_from_stl(X_ref,X_stl);
-    Interface::vector_from_stl(X,X_stl);
-  }
-
-  // invalidate copy ctor
-  Action_syr2( const  Action_syr2 & )
-  {
-    INFOS("illegal call to Action_syr2 Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-  BTL_DONT_INLINE ~Action_syr2( void ){
-    Interface::free_matrix(A,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_vector(B_ref);
-    Interface::free_vector(X_ref);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "syr2_" + Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return 2.0*_size*_size;
-  }
-
-  BTL_DONT_INLINE  void initialize( void ){
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_vector(B_ref,B,_size);
-    Interface::copy_vector(X_ref,X,_size);
-  }
-
-  BTL_DONT_INLINE void calculate( void ) {
-      BTL_ASM_COMMENT("#begin syr2");
-      Interface::syr2(A,B,X,_size);
-      BTL_ASM_COMMENT("end syr2");
-  }
-
-  BTL_DONT_INLINE void check_result( void ){
-    // calculation check
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::syr2(A_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-3){
-      INFOS("WRONG CALCULATION...residual=" << error);
-//       exit(0);
-    }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_vector B_ref;
-  typename Interface::gene_vector X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_vector B;
-  typename Interface::gene_vector X;
-
-
-  int _size;
-
-};
-
-
-#endif

diff --git a/btl/actions/action_trisolve.hh b/btl/actions/action_trisolve.hh
deleted file mode 100644
index d6f0b47..0000000
--- a/btl/actions/action_trisolve.hh
+++ /dev/null
@@ -1,137 +0,0 @@
-//=====================================================
-// File   :  action_trisolve.hh
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_TRISOLVE
-#define ACTION_TRISOLVE
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_trisolve {
-
-public :
-
-  // Ctor
-
-  Action_trisolve( int size ):_size(size)
-  {
-    MESSAGE("Action_trisolve Ctor");
-
-    // STL vector initialization
-    init_matrix<pseudo_random>(L_stl,_size);
-    init_vector<pseudo_random>(B_stl,_size);
-    init_vector<null_function>(X_stl,_size);
-    for (int j=0; j<_size; ++j)
-    {
-      for (int i=0; i<j; ++i)
-        L_stl[j][i] = 0;
-      L_stl[j][j] += 3;
-    }
-
-    init_vector<null_function>(resu_stl,_size);
-
-    // generic matrix and vector initialization
-    Interface::matrix_from_stl(L,L_stl);
-    Interface::vector_from_stl(X,X_stl);
-    Interface::vector_from_stl(B,B_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size; ++j)
-    {
-      _cost += 2*j + 1;
-    }
-  }
-
-  // invalidate copy ctor
-
-  Action_trisolve( const  Action_trisolve & )
-  {
-    INFOS("illegal call to Action_trisolve Copy Ctor");
-    exit(1);
-  }
-
-  // Dtor
-
-  ~Action_trisolve( void ){
-
-    MESSAGE("Action_trisolve Dtor");
-
-    // deallocation
-    Interface::free_matrix(L,_size);
-    Interface::free_vector(B);
-    Interface::free_vector(X);
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "trisolve_vector_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-    //Interface::copy_vector(X_ref,X,_size);
-  }
-
-  inline void calculate( void ) {
-      Interface::trisolve_lower(L,B,X,_size);
-  }
-
-  void check_result(){
-    if (_size>128) return;
-    // calculation check
-    Interface::vector_to_stl(X,resu_stl);
-
-    STL_interface<typename Interface::real_type>::trisolve_lower(L_stl,B_stl,X_stl,_size);
-
-    typename Interface::real_type error=
-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-
-    if (error>1.e-4){
-      INFOS("WRONG CALCULATION...residual=" << error);
-      exit(2);
-    } //else INFOS("CALCULATION OK...residual=" << error);
-
-  }
-
-private :
-
-  typename Interface::stl_matrix L_stl;
-  typename Interface::stl_vector X_stl;
-  typename Interface::stl_vector B_stl;
-  typename Interface::stl_vector resu_stl;
-
-  typename Interface::gene_matrix L;
-  typename Interface::gene_vector X;
-  typename Interface::gene_vector B;
-
-  int _size;
-  double _cost;
-};
-
-#endif

diff --git a/btl/actions/action_trisolve_matrix.hh b/btl/actions/action_trisolve_matrix.hh
deleted file mode 100644
index 0fc2bb9..0000000
--- a/btl/actions/action_trisolve_matrix.hh
+++ /dev/null
@@ -1,165 +0,0 @@
-//=====================================================
-// File   :  action_matrix_matrix_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_TRISOLVE_MATRIX_PRODUCT
-#define ACTION_TRISOLVE_MATRIX_PRODUCT
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_trisolve_matrix {
-
-public :
-
-  // Ctor
-
-  Action_trisolve_matrix( int size ):_size(size)
-  {
-    MESSAGE("Action_trisolve_matrix Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_matrix<pseudo_random>(B_stl,_size);
-    init_matrix<null_function>(X_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    for (int j=0; j<_size; ++j)
-    {
-      for (int i=0; i<j; ++i)
-        A_stl[j][i] = 0;
-      A_stl[j][j] += 3;
-    }
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(B_ref,B_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(B,B_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size; ++j)
-    {
-      _cost += 2*j + 1;
-    }
-    _cost *= _size;
-  }
-
-  // invalidate copy ctor
-
-  Action_trisolve_matrix( const  Action_trisolve_matrix & )
-  {
-    INFOS("illegal call to Action_trisolve_matrix Copy Ctor");
-    exit(0);
-  }
-
-  // Dtor
-
-  ~Action_trisolve_matrix( void ){
-
-    MESSAGE("Action_trisolve_matrix Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_matrix(B,_size);
-    Interface::free_matrix(X,_size);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_matrix(B_ref,_size);
-    Interface::free_matrix(X_ref,_size);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "trisolve_matrix_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_matrix(B_ref,B,_size);
-    Interface::copy_matrix(X_ref,X,_size);
-
-  }
-
-  inline void calculate( void ) {
-      Interface::trisolve_lower_matrix(A,B,X,_size);
-  }
-
-  void check_result( void ){
-
-    // calculation check
-
-//     Interface::matrix_to_stl(X,resu_stl);
-//
-//     STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-// //       exit(1);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_matrix B_stl;
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_matrix B_ref;
-  typename Interface::gene_matrix X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_matrix B;
-  typename Interface::gene_matrix X;
-
-  int _size;
-  double _cost;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/action_trmm.hh b/btl/actions/action_trmm.hh
deleted file mode 100644
index 8f78138..0000000
--- a/btl/actions/action_trmm.hh
+++ /dev/null
@@ -1,165 +0,0 @@
-//=====================================================
-// File   :  action_matrix_matrix_product.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef ACTION_TRMM
-#define ACTION_TRMM
-#include "utilities.h"
-#include "STL_interface.hh"
-#include <string>
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-#include "init/init_matrix.hh"
-
-using namespace std;
-
-template<class Interface>
-class Action_trmm {
-
-public :
-
-  // Ctor
-
-  Action_trmm( int size ):_size(size)
-  {
-    MESSAGE("Action_trmm Ctor");
-
-    // STL matrix and vector initialization
-
-    init_matrix<pseudo_random>(A_stl,_size);
-    init_matrix<pseudo_random>(B_stl,_size);
-    init_matrix<null_function>(X_stl,_size);
-    init_matrix<null_function>(resu_stl,_size);
-
-    for (int j=0; j<_size; ++j)
-    {
-      for (int i=0; i<j; ++i)
-        A_stl[j][i] = 0;
-      A_stl[j][j] += 3;
-    }
-
-    // generic matrix and vector initialization
-
-    Interface::matrix_from_stl(A_ref,A_stl);
-    Interface::matrix_from_stl(B_ref,B_stl);
-    Interface::matrix_from_stl(X_ref,X_stl);
-
-    Interface::matrix_from_stl(A,A_stl);
-    Interface::matrix_from_stl(B,B_stl);
-    Interface::matrix_from_stl(X,X_stl);
-
-    _cost = 0;
-    for (int j=0; j<_size; ++j)
-    {
-      _cost += 2*j + 1;
-    }
-    _cost *= _size;
-  }
-
-  // invalidate copy ctor
-
-  Action_trmm( const  Action_trmm & )
-  {
-    INFOS("illegal call to Action_trmm Copy Ctor");
-    exit(0);
-  }
-
-  // Dtor
-
-  ~Action_trmm( void ){
-
-    MESSAGE("Action_trmm Dtor");
-
-    // deallocation
-
-    Interface::free_matrix(A,_size);
-    Interface::free_matrix(B,_size);
-    Interface::free_matrix(X,_size);
-
-    Interface::free_matrix(A_ref,_size);
-    Interface::free_matrix(B_ref,_size);
-    Interface::free_matrix(X_ref,_size);
-
-  }
-
-  // action name
-
-  static inline std::string name( void )
-  {
-    return "trmm_"+Interface::name();
-  }
-
-  double nb_op_base( void ){
-    return _cost;
-  }
-
-  inline void initialize( void ){
-
-    Interface::copy_matrix(A_ref,A,_size);
-    Interface::copy_matrix(B_ref,B,_size);
-    Interface::copy_matrix(X_ref,X,_size);
-
-  }
-
-  inline void calculate( void ) {
-      Interface::trmm(A,B,X,_size);
-  }
-
-  void check_result( void ){
-
-    // calculation check
-
-//     Interface::matrix_to_stl(X,resu_stl);
-//
-//     STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,_size);
-//
-//     typename Interface::real_type error=
-//       STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
-//
-//     if (error>1.e-6){
-//       INFOS("WRONG CALCULATION...residual=" << error);
-// //       exit(1);
-//     }
-
-  }
-
-private :
-
-  typename Interface::stl_matrix A_stl;
-  typename Interface::stl_matrix B_stl;
-  typename Interface::stl_matrix X_stl;
-  typename Interface::stl_matrix resu_stl;
-
-  typename Interface::gene_matrix A_ref;
-  typename Interface::gene_matrix B_ref;
-  typename Interface::gene_matrix X_ref;
-
-  typename Interface::gene_matrix A;
-  typename Interface::gene_matrix B;
-  typename Interface::gene_matrix X;
-
-  int _size;
-  double _cost;
-
-};
-
-
-#endif
-
-
-

diff --git a/btl/actions/actionsBLAS.hpp b/btl/actions/actionsBLAS.hpp
new file mode 100644
index 0000000..0a63675
--- /dev/null
+++ b/btl/actions/actionsBLAS.hpp
@@ -0,0 +1,16 @@
+#include "action_axpy.hpp"
+#include "action_rot.hpp"
+
+#include "action_MatrixVector.hpp"
+#include "action_MatrixTVector.hpp"
+#include "action_SymMatrixVector.hpp"
+#include "action_TriSolveVector.hpp"
+#include "action_Rank1Update.hpp"
+#include "action_Rank2Update.hpp"
+
+/*
+#include "action_MatrixMatrix.hpp"
+#include "action_MatrixTMatrix.hpp"
+#include "action_TriMatrixMatrix.hpp"
+#include "action_TriSolveMatrix.hpp"
+*/

diff --git a/btl/actions/base_action_fftw.hh b/btl/actions/base_action_fftw.hh
deleted file mode 100644
index fb32b51..0000000
--- a/btl/actions/base_action_fftw.hh
+++ /dev/null
@@ -1,86 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef BASE_ACTION_FFTW_HH
-#define BASE_ACTION_FFTW_HH
-
-#include "utilities.h"
-#include "init/init_function.hh"
-#include "init/init_vector.hh"
-
-inline int power(const int& base, const int& exp) {
-  int ret = 1;
-  for (int i = 0; i < exp; ++i)
-    ret *= base;
-  return ret;
-}
-
-template<class Interface>
-class Action_FFTW_base
-{
-public:
-  // Constructor
-  Action_FFTW_base(const int& size, const int& dimensions) :
-      size_(size), dimensions_(dimensions), N_(power(size, dimensions))
-  {
-    // STL vector initialization
-    init_vector < pseudo_random > (X_stl, N_);
-    init_vector < null_function > (Y_stl, N_);
-
-    // Generic vector initialization
-    Interface::vector_from_stl(X, X_stl);
-    Interface::vector_from_stl(Y, Y_stl);
-
-    // To be done by the child:
-    /* initialize plan! */
-  }
-
-  // Invalidate copy constructor
-  Action_FFTW_base( const Action_FFTW_base & )
-  {
-    INFOS("illegal call to Action_FFTW_base Copy Ctor");
-    exit(1);
-  }
-
-  // Destructor:
-  // frees the memory
-  ~Action_FFTW_base()
-  {
-    Interface::free_vector(X);
-    Interface::free_vector(Y);
-  }
-
-  inline void initialize() { }
-
-  inline void calculate( void ) {
-    Interface::fftw_run(p);
-  }
-
-  void check_result( void ){
-  }
-
-
-protected:
-  const int size_, dimensions_, N_;
-
-  typename Interface::stl_vector X_stl, Y_stl;
-  typename Interface::gene_vector X, Y;
-
-  typename Interface::plan p;
-};
-
-#endif /* BASE_ACTION_FFTW_HH */

diff --git a/btl/actions/basic_actions.hh b/btl/actions/basic_actions.hh
deleted file mode 100644
index a3333ea..0000000
--- a/btl/actions/basic_actions.hh
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#include "action_axpy.hh"
-#include "action_axpby.hh"
-
-#include "action_matrix_vector_product.hh"
-#include "action_atv_product.hh"
-
-#include "action_matrix_matrix_product.hh"
-// #include "action_ata_product.hh"
-#include "action_aat_product.hh"
-
-#include "action_trisolve.hh"
-#include "action_trmm.hh"
-#include "action_symv.hh"
-// #include "action_symm.hh"
-#include "action_syr2.hh"
-#include "action_ger.hh"
-#include "action_rot.hh"
-
-// #include "action_lu_solve.hh"
-

diff --git a/btl/generic_bench/init/init_function.hh b/btl/generic_bench/init/init_function.hh
deleted file mode 100644
index 7b3bdba..0000000
--- a/btl/generic_bench/init/init_function.hh
+++ /dev/null
@@ -1,54 +0,0 @@
-//=====================================================
-// File   :  init_function.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  lun sep 30 14:23:18 CEST 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-#ifndef INIT_FUNCTION_HH
-#define INIT_FUNCTION_HH
-
-double simple_function(int index)
-{
-  return index;
-}
-
-double simple_function(int index_i, int index_j)
-{
-  return index_i+index_j;
-}
-
-double pseudo_random(int index)
-{
-  return std::rand()/double(RAND_MAX);
-}
-
-double pseudo_random(int index_i, int index_j)
-{
-  return std::rand()/double(RAND_MAX);
-}
-
-
-double null_function(int index)
-{
-  return 0.0;
-}
-
-double null_function(int index_i, int index_j)
-{
-  return 0.0;
-}
-
-#endif

diff --git a/btl/generic_bench/init/init_matrix.hh b/btl/generic_bench/init/init_matrix.hh
deleted file mode 100644
index c598ffc..0000000
--- a/btl/generic_bench/init/init_matrix.hh
+++ /dev/null
@@ -1,93 +0,0 @@
-//=====================================================
-// File   :  init_matrix.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef INIT_MATRIX_HH
-#define INIT_MATRIX_HH
-
-#include "LinearCongruential.hh"
-
-// The Vector class must satisfy the following part of STL vector concept :
-//            resize() method
-//            [] operator for setting element
-//            value_type defined
-template<double init_function(int,int), class Vector>
-BTL_DONT_INLINE void init_row(Vector & X, int size, int row){
-
-  X.resize(size);
-
-  for (int j=0;j<X.size();j++){
-    X[j]=typename Vector::value_type(init_function(row,j));
-  }
-}
-
-
-// Matrix is a Vector of Vector
-// The Matrix class must satisfy the following part of STL vector concept :
-//            resize() method
-//            [] operator for setting rows
-template<double init_function(int,int),class Vector>
-BTL_DONT_INLINE void init_matrix(Vector &  A, int size){
-  A.resize(size);
-  for (int row=0; row<A.size() ; row++){
-    init_row<init_function>(A[row],size,row);
-  }
-}
-
-template<double init_function(int,int),class Matrix>
-BTL_DONT_INLINE void init_matrix_symm(Matrix&  A, int size){
-  A.resize(size);
-  for (int row=0; row<A.size() ; row++)
-    A[row].resize(size);
-  for (int row=0; row<A.size() ; row++){
-    A[row][row] = init_function(row,row);
-    for (int col=0; col<row ; col++){
-      double x = init_function(row,col);
-      A[row][col] = A[col][row] = x;
-    }
-  }
-}
-
-template<class Matrix> BTL_DONT_INLINE
-void init_matrix(Matrix& A, const int& size, const unsigned& seed)
-{
-  typedef typename Matrix::value_type value_t;
-  A.resize(size*size);
-  LinearCongruential rng(seed);
-  for (typename Matrix::iterator i = A.begin(), end = A.end(); i != end; ++i)
-    *i = rng.get_01();
-}
-
-template<class Matrix> BTL_DONT_INLINE
-void init_SPD_matrix(Matrix& A, const int& size, const unsigned& seed)
-{
-  typedef typename Matrix::value_type value_t;
-  A.resize(size*size);
-  LinearCongruential rng(seed);
-  for (int r = 0; r < size; ++r) {
-      A[r+size*r] = rng.get_01() + size;
-      for (int c = r+1; c < size; ++c) {
-          const value_t v = rng.get_01();
-          A[r+size*c] = v;
-          A[c+size*r] = v;
-      }
-  }
-}
-
-#endif

diff --git a/btl/generic_bench/init/init_vector.hh b/btl/generic_bench/init/init_vector.hh
deleted file mode 100644
index efaf0c9..0000000
--- a/btl/generic_bench/init/init_vector.hh
+++ /dev/null
@@ -1,37 +0,0 @@
-//=====================================================
-// File   :  init_vector.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:18 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef INIT_VECTOR_HH
-#define INIT_VECTOR_HH
-
-// The Vector class must satisfy the following part of STL vector concept :
-//            resize() method
-//            [] operator for setting element
-//            value_type defined
-template<double init_function(int), class Vector>
-void init_vector(Vector & X, int size){
-
-  X.resize(size);
-
-  for (int i=0;i<X.size();i++){
-    X[i]=typename Vector::value_type(init_function(i));
-  }
-}
-
-#endif

diff --git a/btl/generic_bench/static/intel_bench_fixed_size.hh b/btl/generic_bench/static/intel_bench_fixed_size.hh
index b4edcbc..926e617 100644
--- a/btl/generic_bench/static/intel_bench_fixed_size.hh
+++ b/btl/generic_bench/static/intel_bench_fixed_size.hh
@@ -1,7 +1,7 @@
 //=====================================================
 // File   :  intel_bench_fixed_size.hh
 // Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  mar déc 3 18:59:37 CET 2002
+// Copyright (C) EDF R&D,  mar d�c 3 18:59:37 CET 2002
 //=====================================================
 // 
 // This program is free software; you can redistribute it and/or
@@ -55,11 +55,9 @@ double bench_fixed_size(int size, unsigned long long  & nb_calc,unsigned long lo
   
   time_action=time_action/(double(nb_calc));
   
-  action.check_result();
-  
   time_action=time_action-time_baseline;
 
-  return action.nb_op_base()/(time_action*1000000.0);
+  return action.fpo()/(time_action*1000000.0);
 
 }
 

diff --git a/btl/generic_bench/timers/STL_perf_analyzer.hh b/btl/generic_bench/timers/STL_perf_analyzer.hh
deleted file mode 100644
index c9f894b..0000000
--- a/btl/generic_bench/timers/STL_perf_analyzer.hh
+++ /dev/null
@@ -1,82 +0,0 @@
-//=====================================================
-// File   :  STL_perf_analyzer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  mar déc 3 18:59:35 CET 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-#ifndef _STL_PERF_ANALYSER_HH
-#define _STL_PERF_ANALYSER_HH
-
-#include "STL_timer.hh"
-#include "bench_parameter.hh"
-
-template<class ACTION>
-class STL_Perf_Analyzer{
-public:  
-  STL_Perf_Analyzer(unsigned long long nb_sample=DEFAULT_NB_SAMPLE):_nb_sample(nb_sample),_chronos()
-  {
-    MESSAGE("STL_Perf_Analyzer Ctor");
-  }; 
-  STL_Perf_Analyzer( const STL_Perf_Analyzer & ){
-    INFOS("Copy Ctor not implemented");
-    exit(0);
-  };
-  ~STL_Perf_Analyzer( void ){
-    MESSAGE("STL_Perf_Analyzer Dtor");
-  };
-  
-  
-  inline double eval_mflops(int size)
-  {
-
-    ACTION action(size);
-
-    _chronos.start_baseline(_nb_sample);
-      
-    do {
-
-      action.initialize();
-    } while (_chronos.check());
-
-    double baseline_time=_chronos.get_time();
-
-    _chronos.start(_nb_sample);
-    do {
-      action.initialize();
-      action.calculate();
-    } while (_chronos.check());
-
-    double calculate_time=_chronos.get_time();
-
-    double corrected_time=calculate_time-baseline_time;
-    
-    //    cout << size <<" "<<baseline_time<<" "<<calculate_time<<" "<<corrected_time<<" "<<action.nb_op_base() << endl;    
-    
-    return action.nb_op_base()/(corrected_time*1000000.0);
-    //return action.nb_op_base()/(calculate_time*1000000.0);
-    
-  }
-private:
-
-  STL_Timer _chronos;
-  unsigned long long _nb_sample;
-
-  
-};
-
-  
-  
-#endif

diff --git a/btl/generic_bench/timers/STL_timer.hh b/btl/generic_bench/timers/STL_timer.hh
deleted file mode 100644
index 19c54e9..0000000
--- a/btl/generic_bench/timers/STL_timer.hh
+++ /dev/null
@@ -1,78 +0,0 @@
-//=====================================================
-// File   :  STL_Timer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  mar déc 3 18:59:35 CET 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// STL Timer Class. Adapted (L.P.) from the timer class by Musser et Al
-// described int the Book : STL Tutorial and reference guide.
-// Define a timer class for analyzing algorithm performance.
-#include <iostream>
-#include <iomanip>
-#include <vector>
-#include <map>
-#include <algorithm>
-using namespace std;
-
-class STL_Timer {
-public:
-  STL_Timer(){ baseline = false; };  // Default constructor
-  // Start a series of r trials:
-  void start(unsigned int r){
-    reps = r;
-    count = 0;
-    iterations.clear();
-    iterations.reserve(reps);
-    initial = time(0);
-  };
-  // Start a series of r trials to determine baseline time:
-  void start_baseline(unsigned int r)
-  {
-    baseline = true;
-    start(r);
-  }
-  // Returns true if the trials have been completed, else false
-  bool check()
-  {
-    ++count;
-    final = time(0);
-    if (initial < final) {
-      iterations.push_back(count);  
-      initial = final;
-      count = 0;
-    }
-    return (iterations.size() < reps);
-  };
-  // Returns the results for external use
-  double get_time( void )
-  {
-    sort(iterations.begin(), iterations.end());
-    return 1.0/iterations[reps/2];
-  };
-private:
-  unsigned int reps;  // Number of trials
-  // For storing loop iterations of a trial
-  vector<long> iterations;
-  // For saving initial and final times of a trial
-  time_t initial, final;
-  // For counting loop iterations of a trial
-  unsigned long count;
-  // true if this is a baseline computation, false otherwise
-  bool baseline;
-  // For recording the baseline time 
-  double baseline_time;
-};
-

diff --git a/btl/generic_bench/timers/distributed_perf_analyzer_node.hh b/btl/generic_bench/timers/distributed_perf_analyzer_node.hh
index 924eb87..d6ec5c2 100644
--- a/btl/generic_bench/timers/distributed_perf_analyzer_node.hh
+++ b/btl/generic_bench/timers/distributed_perf_analyzer_node.hh
@@ -66,7 +66,6 @@ public:
     if (do_check > 0) {
       action.initialize();
       action.calculate();
-      action.check_result();
     }
 
     /* Return a void value */

diff --git a/btl/generic_bench/timers/distributed_perf_analyzer_root.hh b/btl/generic_bench/timers/distributed_perf_analyzer_root.hh
index bbab901..1fc7c3c 100644
--- a/btl/generic_bench/timers/distributed_perf_analyzer_root.hh
+++ b/btl/generic_bench/timers/distributed_perf_analyzer_root.hh
@@ -62,7 +62,7 @@ public:
     for (int i = 1; i < tries; ++i) {
       Action _action(size);
       if (!silent)
-        std::cout << " " << _action.nb_op_base()*_nb_calc/(m_time_action*1e6) << " " << std::flush;
+        std::cout << " " << _action.fpo()*_nb_calc/(m_time_action*1e6) << " " << std::flush;
       _action.initialize();
       m_time_action = std::min(m_time_action, time_calculate(_action));
     }
@@ -74,10 +74,9 @@ public:
     if (do_check > 0) {
       action.initialize();
       action.calculate();
-      action.check_result();
     }
 
-    return action.nb_op_base()/(time_action*1e6);
+    return action.fpo()/(time_action*1e6);
   }
 
   BTL_DONT_INLINE double time_calculate(Action & action)

diff --git a/btl/generic_bench/timers/mixed_perf_analyzer.hh b/btl/generic_bench/timers/mixed_perf_analyzer.hh
deleted file mode 100644
index e190236..0000000
--- a/btl/generic_bench/timers/mixed_perf_analyzer.hh
+++ /dev/null
@@ -1,73 +0,0 @@
-//=====================================================
-// File   :  mixed_perf_analyzer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  mar déc 3 18:59:36 CET 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-#ifndef _MIXED_PERF_ANALYSER_HH
-#define _MIXED_PERF_ANALYSER_HH
-
-#include "x86_perf_analyzer.hh"
-#include "portable_perf_analyzer.hh"
-
-// choose portable perf analyzer for long calculations and x86 analyser for short ones
-
-
-template<class Action>
-class Mixed_Perf_Analyzer{
-  
-public:  
-  Mixed_Perf_Analyzer( void ):_x86pa(),_ppa(),_use_ppa(true)
-  {
-    MESSAGE("Mixed_Perf_Analyzer Ctor");
-  }; 
-  Mixed_Perf_Analyzer( const Mixed_Perf_Analyzer & ){
-    INFOS("Copy Ctor not implemented");
-    exit(0);
-  };
-  ~Mixed_Perf_Analyzer( void ){
-    MESSAGE("Mixed_Perf_Analyzer Dtor");
-  };
-    
-  
-  inline double eval_mflops(int size)
-  {
-
-    double result=0.0;
-    if (_use_ppa){      
-      result=_ppa.eval_mflops(size);
-      if (_ppa.get_nb_calc()>DEFAULT_NB_SAMPLE){_use_ppa=false;}      
-    }
-    else{      
-      result=_x86pa.eval_mflops(size);
-    }
-
-    return result;
-  }
-
-private:
-
-  Portable_Perf_Analyzer<Action> _ppa;
-  X86_Perf_Analyzer<Action> _x86pa;
-  bool _use_ppa;
-
-};
-
-#endif
-
-  
-    
-  

diff --git a/btl/generic_bench/timers/portable_perf_analyzer.hh b/btl/generic_bench/timers/portable_perf_analyzer.hh
index b207bde..2c6b568 100644
--- a/btl/generic_bench/timers/portable_perf_analyzer.hh
+++ b/btl/generic_bench/timers/portable_perf_analyzer.hh
@@ -55,9 +55,9 @@ public:
     {
       Action _action(size);
       if (!silent) {
-        if (_action.nb_op_base()*_nb_calc < 0)
-	  std::cout << " { op*calc = " << _action.nb_op_base()*_nb_calc << " } " << std::flush;
-        std::cout << " " << _action.nb_op_base()*_nb_calc/(m_time_action*1e6) << " ";
+        if (_action.fpo()*_nb_calc < 0)
+	  std::cout << " { op*calc = " << _action.fpo()*_nb_calc << " } " << std::flush;
+        std::cout << " " << _action.fpo()*_nb_calc/(m_time_action*1e6) << " ";
       }
       _action.initialize();
       m_time_action = std::min(m_time_action, time_calculate(_action));
@@ -70,9 +70,8 @@ public:
     {
       action.initialize();
       action.calculate();
-      action.check_result();
     }
-    return action.nb_op_base()/(time_action*1e6);
+    return action.fpo()/(time_action*1e6);
   }
 
   BTL_DONT_INLINE double time_calculate(Action & action)

diff --git a/btl/generic_bench/timers/portable_perf_analyzer_old.hh b/btl/generic_bench/timers/portable_perf_analyzer_old.hh
deleted file mode 100644
index fce3781..0000000
--- a/btl/generic_bench/timers/portable_perf_analyzer_old.hh
+++ /dev/null
@@ -1,134 +0,0 @@
-//=====================================================
-// File   :  portable_perf_analyzer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  mar d�c 3 18:59:35 CET 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef _PORTABLE_PERF_ANALYZER_HH
-#define _PORTABLE_PERF_ANALYZER_HH
-
-#include "utilities.h"
-#include "timers/portable_timer.hh"
-
-template <class Action>
-class Portable_Perf_Analyzer{
-public:
-  Portable_Perf_Analyzer( void ):_nb_calc(1),_nb_init(1),_chronos(){
-    MESSAGE("Portable_Perf_Analyzer Ctor");
-  };
-  Portable_Perf_Analyzer( const Portable_Perf_Analyzer & ){
-    INFOS("Copy Ctor not implemented");
-    exit(0);
-  };
-  ~Portable_Perf_Analyzer( void ){
-    MESSAGE("Portable_Perf_Analyzer Dtor");
-  };
-
-
-
-  inline double eval_mflops(int size)
-  {
-
-    Action action(size);
-
-//     double time_baseline = time_init(action);
-//     while (time_baseline < MIN_TIME_INIT)
-//     {
-//       _nb_init *= 2;
-//       time_baseline = time_init(action);
-//     }
-//
-//     // optimize
-//     for (int i=1; i<NB_TRIES; ++i)
-//       time_baseline = std::min(time_baseline, time_init(action));
-//
-//     time_baseline = time_baseline/(double(_nb_init));
-
-    double time_action = time_calculate(action);
-    while (time_action < MIN_TIME)
-    {
-      _nb_calc *= 2;
-      time_action = time_calculate(action);
-    }
-
-    // optimize
-    for (int i=1; i<NB_TRIES; ++i)
-      time_action = std::min(time_action, time_calculate(action));
-
-//     INFOS("size="<<size);
-//     INFOS("_nb_init="<<_nb_init);
-//     INFOS("_nb_calc="<<_nb_calc);
-
-    time_action = time_action / (double(_nb_calc));
-
-    action.check_result();
-
-
-    double time_baseline = time_init(action);
-    for (int i=1; i<NB_TRIES; ++i)
-      time_baseline = std::min(time_baseline, time_init(action));
-    time_baseline = time_baseline/(double(_nb_init));
-
-
-
-//     INFOS("time_baseline="<<time_baseline);
-//     INFOS("time_action="<<time_action);
-
-    time_action = time_action - time_baseline;
-
-//     INFOS("time_corrected="<<time_action);
-
-    return action.nb_op_base()/(time_action*1000000.0);
-  }
-
-  inline double time_init(Action & action)
-  {
-    // time measurement
-    _chronos.start();
-    for (int ii=0; ii<_nb_init; ii++)
-      action.initialize();
-    _chronos.stop();
-    return _chronos.user_time();
-  }
-
-
-  inline double time_calculate(Action & action)
-  {
-    // time measurement
-    _chronos.start();
-    for (int ii=0;ii<_nb_calc;ii++)
-    {
-      action.initialize();
-      action.calculate();
-    }
-    _chronos.stop();
-    return _chronos.user_time();
-  }
-
-  unsigned long long get_nb_calc( void )
-  {
-    return _nb_calc;
-  }
-
-
-private:
-  unsigned long long _nb_calc;
-  unsigned long long _nb_init;
-  Portable_Timer _chronos;
-
-};
-
-#endif //_PORTABLE_PERF_ANALYZER_HH

diff --git a/btl/generic_bench/timers/x86_perf_analyzer.hh b/btl/generic_bench/timers/x86_perf_analyzer.hh
deleted file mode 100644
index 37ea21d..0000000
--- a/btl/generic_bench/timers/x86_perf_analyzer.hh
+++ /dev/null
@@ -1,108 +0,0 @@
-//=====================================================
-// File   :  x86_perf_analyzer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  mar d�c 3 18:59:35 CET 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef _X86_PERF_ANALYSER_HH
-#define _X86_PERF_ANALYSER_HH
-
-#include "x86_timer.hh"
-#include "bench_parameter.hh"
-
-template<class ACTION>
-class X86_Perf_Analyzer{
-public:
-  X86_Perf_Analyzer( unsigned long long nb_sample=DEFAULT_NB_SAMPLE):_nb_sample(nb_sample),_chronos()
-  {
-    MESSAGE("X86_Perf_Analyzer Ctor");
-    _chronos.find_frequency();
-  };
-  X86_Perf_Analyzer( const X86_Perf_Analyzer & ){
-    INFOS("Copy Ctor not implemented");
-    exit(0);
-  };
-  ~X86_Perf_Analyzer( void ){
-    MESSAGE("X86_Perf_Analyzer Dtor");
-  };
-
-
-  inline double eval_mflops(int size)
-  {
-
-    ACTION action(size);
-
-    int nb_loop=5;
-    double calculate_time=0.0;
-    double baseline_time=0.0;
-
-    for (int j=0 ; j < nb_loop ; j++){
-
-      _chronos.clear();
-
-      for(int i=0 ; i < _nb_sample  ; i++)
-      {
-        _chronos.start();
-        action.initialize();
-        action.calculate();
-        _chronos.stop();
-        _chronos.add_get_click();
-      }
-
-      calculate_time += double(_chronos.get_shortest_clicks())/_chronos.frequency();
-
-      if (j==0) action.check_result();
-
-      _chronos.clear();
-
-      for(int i=0 ; i < _nb_sample  ; i++)
-      {
-        _chronos.start();
-        action.initialize();
-        _chronos.stop();
-        _chronos.add_get_click();
-
-      }
-
-      baseline_time+=double(_chronos.get_shortest_clicks())/_chronos.frequency();
-
-    }
-
-    double corrected_time = (calculate_time-baseline_time)/double(nb_loop);
-
-
-//     INFOS("_nb_sample="<<_nb_sample);
-//     INFOS("baseline_time="<<baseline_time);
-//     INFOS("calculate_time="<<calculate_time);
-//     INFOS("corrected_time="<<corrected_time);
-
-//    cout << size <<" "<<baseline_time<<" "<<calculate_time<<" "<<corrected_time<<" "<<action.nb_op_base() << endl;
-
-    return action.nb_op_base()/(corrected_time*1000000.0);
-    //return action.nb_op_base()/(calculate_time*1000000.0);
-  }
-
-private:
-
-  X86_Timer _chronos;
-  unsigned long long _nb_sample;
-
-
-};
-
-
-
-#endif

diff --git a/btl/generic_bench/timers/x86_timer.hh b/btl/generic_bench/timers/x86_timer.hh
deleted file mode 100644
index cfb5ee8..0000000
--- a/btl/generic_bench/timers/x86_timer.hh
+++ /dev/null
@@ -1,246 +0,0 @@
-//=====================================================
-// File   :  x86_timer.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
-// Copyright (C) EDF R&D,  mar d�c 3 18:59:35 CET 2002
-//=====================================================
-// 
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-// 
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-#ifndef _X86_TIMER_HH
-#define _X86_TIMER_HH
-
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <unistd.h>
-#include <sys/times.h>
-//#include "system_time.h"
-#define u32 unsigned int
-#include <asm/msr.h>
-#include "utilities.h"
-#include <map>
-#include <fstream>
-#include <string>
-#include <iostream>
-
-// frequence de la becanne en Hz
-//#define FREQUENCY 648000000
-//#define FREQUENCY 1400000000
-#define FREQUENCY 1695000000
-
-using namespace std;
-
-
-class X86_Timer {
-
-public :
-
-  X86_Timer( void ):_frequency(FREQUENCY),_nb_sample(0)
-  {
-    MESSAGE("X86_Timer Default Ctor");    
-  }
-
-  inline void start( void ){
-
-    rdtsc(_click_start.n32[0],_click_start.n32[1]);
-
-  }
-
-
-  inline void stop( void ){
-
-    rdtsc(_click_stop.n32[0],_click_stop.n32[1]);
-
-  }
-  
-
-  inline double frequency( void ){
-    return _frequency;
-  }
-
-  double get_elapsed_time_in_second( void ){
-
-    return (_click_stop.n64-_click_start.n64)/double(FREQUENCY);
-
-
-  }    
-
-  unsigned long long  get_click( void ){
-    
-    return (_click_stop.n64-_click_start.n64);
-
-  }    
-
-  inline void find_frequency( void ){
-
-    time_t initial, final;
-    int dummy=2;
-
-    initial = time(0);
-    start();
-    do {
-      dummy+=2;
-    }
-    while(time(0)==initial);
-    // On est au debut d'un cycle d'une seconde !!!
-    initial = time(0);
-    start();
-    do {
-      dummy+=2;
-    }
-    while(time(0)==initial);
-    final=time(0);
-    stop();
-    //    INFOS("fine grained time : "<<  get_elapsed_time_in_second());
-    //  INFOS("coarse grained time : "<<  final-initial);
-    _frequency=_frequency*get_elapsed_time_in_second()/double(final-initial);
-    ///  INFOS("CPU frequency : "<<  _frequency);        
-
-  }
-
-  void  add_get_click( void ){
-       
-    _nb_sample++;
-    _counted_clicks[get_click()]++;
-    fill_history_clicks();
-
-  }    
-
-  void dump_statistics(string filemane){
-    
-    ofstream outfile (filemane.c_str(),ios::out) ;
-
-    std::map<unsigned long long , unsigned long long>::iterator itr;
-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
-      {      
-      outfile  << (*itr).first << "  " << (*itr).second << endl ;       
-      }      
-    
-    outfile.close();
-
-  }
-
-  void dump_history(string filemane){
-    
-    ofstream outfile (filemane.c_str(),ios::out) ;
-
-
-
-    for(int i=0 ; i<_history_mean_clicks.size() ; i++)
-      {      
-	outfile  << i << " " 
-		 << _history_mean_clicks[i] << " " 
-		 << _history_shortest_clicks[i] << " " 
-		 << _history_most_occured_clicks[i] << endl ;
-      }      
-    
-    outfile.close();
-
-  }
-     
-
-
-  double get_mean_clicks( void ){
-    
-    std::map<unsigned long long,unsigned long long>::iterator itr;
-    
-    unsigned long long mean_clicks=0;
-
-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
-      {      
-	
-	mean_clicks+=(*itr).second*(*itr).first;
-      }      
-
-    return mean_clicks/double(_nb_sample);
-
-  }
-
-  double get_shortest_clicks( void ){
-    
-    return double((*_counted_clicks.begin()).first);
-
-  }
-
-  void fill_history_clicks( void ){
-
-    _history_mean_clicks.push_back(get_mean_clicks());
-    _history_shortest_clicks.push_back(get_shortest_clicks());
-    _history_most_occured_clicks.push_back(get_most_occured_clicks());
-
-  }
-
-
-  double get_most_occured_clicks( void ){
-
-    unsigned long long moc=0;
-    unsigned long long max_occurence=0;
-
-    std::map<unsigned long long,unsigned long long>::iterator itr;
-
-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
-      {      
-	
-	if (max_occurence<=(*itr).second){
-	  max_occurence=(*itr).second;
-	  moc=(*itr).first;
-	}
-      }      
-    
-    return double(moc);    
-
-  }
-  
-  void clear( void )
-  {
-    _counted_clicks.clear();
-
-    _history_mean_clicks.clear();
-    _history_shortest_clicks.clear();
-    _history_most_occured_clicks.clear();
-
-    _nb_sample=0;
-  }
-
-
-    
-private :
-  
-  union
-  {
-    unsigned long int n32[2] ;
-    unsigned long long n64 ;
-  } _click_start;
-
-  union
-  {
-    unsigned long int n32[2] ;
-    unsigned long long n64 ;
-  } _click_stop;
-
-  double _frequency ;
-
-  map<unsigned long long,unsigned long long> _counted_clicks;
-
-  vector<double> _history_mean_clicks;
-  vector<double> _history_shortest_clicks;
-  vector<double> _history_most_occured_clicks;
-
-  unsigned long long _nb_sample;
-
-  
-
-};
-
-
-#endif

diff --git a/btl/generic_bench/utils/LinearCongruential.hh b/btl/generic_bench/utils/LinearCongruential.hh
deleted file mode 100644
index 3aa3716..0000000
--- a/btl/generic_bench/utils/LinearCongruential.hh
+++ /dev/null
@@ -1,83 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef LINEARCONGRUENTIAL_HH_
-#define LINEARCONGRUENTIAL_HH_
-
-#include <vector>
-
-class LinearCongruential
-{
-  typedef std::vector<unsigned> buffer_t;
-  typedef unsigned int_t;
-
-public:
-  LinearCongruential(const int_t& seed) :
-    a_(1664525u), c_(1013904223u), m_(getM()), i_(0)
-  {
-    buffer_.resize(4096/sizeof(unsigned));
-    fillBuffer(seed);
-  }
-
-  int_t a() const { return a_; }
-  int_t c() const { return c_; }
-  int_t m() const { return m_; }
-
-  int_t get_int() {
-    if (i_ >= buffer_.size()) {
-        fillBuffer();
-        i_ = 0;
-    }
-    return buffer_.at(i_++);
-  }
-
-  double get_01() {
-    return static_cast<double>(get_int())/static_cast<double>(m_);
-  }
-
-private:
-  buffer_t buffer_;
-  const int_t a_, c_, m_;
-  std::size_t i_;
-
-  void fillBuffer(const int_t& seed)
-  {
-    buffer_.front() = (seed*a_+c_) & m_;
-    for (
-        typename buffer_t::iterator i = buffer_.begin()+1, end = buffer_.end();
-        i != end; ++i)
-      *i = (*(i-1)*a_ + c_) & m_;
-  }
-
-  void fillBuffer()
-  {
-    const int_t seed = buffer_.back();
-    fillBuffer(seed);
-  }
-
-  static int_t getM()
-  {
-    int_t _m = 1;
-    for (int i = 1; i < 32; ++i) {
-      _m <<= 1;
-      _m += 1;
-    }
-    return _m;
-  }
-};
-
-#endif /* LINEARCONGRUENTIAL_HH_ */

diff --git a/btl/generic_bench/utils/LinearCongruential.hpp b/btl/generic_bench/utils/LinearCongruential.hpp
new file mode 100644
index 0000000..a735f77
--- /dev/null
+++ b/btl/generic_bench/utils/LinearCongruential.hpp
@@ -0,0 +1,77 @@
+#ifndef LINEARCONGRUENTIAL_HPP
+#define LINEARCONGRUENTIAL_HPP
+
+#include "stdint.h"
+#include <vector>
+#include <limits>
+
+template<
+    typename value_t = uint32_t,
+    value_t a = 1664525u,
+    value_t c = 1013904223u
+>
+class LinearCongruential {
+    typedef typename std::vector<value_t> buf_t;
+    typedef typename buf_t::iterator iterator_t;
+    typedef typename buf_t::const_iterator constiterator_t;
+
+public:
+    LinearCongruential(const value_t& seed, const int bufsize = 4*1024)
+        : maxvalue(std::numeric_limits<value_t>::max())
+    {
+        buffer.resize(bufsize);
+        fillBuffer(seed);
+    }
+
+    value_t operator()()
+    {
+        if (j == buffer.end())
+            fillBuffer(buffer.back());
+        return *(j++);
+    }
+
+    template<typename result_t>
+    void fillVector (
+            result_t *vector,
+            const int& size,
+            const result_t& min = 0.,
+            const result_t& max = 1.
+        )
+    {
+        const result_t maxvalue = this->maxvalue;
+        const result_t diff = max-min;
+
+        for (const result_t *const endp = vector+size; vector!=endp; ++vector)
+            *vector = diff * (this->operator()() / maxvalue) + min;
+    }
+
+
+    template<typename result_t>
+    std::vector<result_t> fillVector (
+            const int& size,
+            const result_t& min = 0.,
+            const result_t& max = 1.
+        )
+    {
+        std::vector<result_t> result(size);
+        fillVector(&result[0], size, min, max);
+        return result;
+    }
+
+private:
+    buf_t buffer;
+    constiterator_t j;
+
+    const value_t maxvalue;
+
+    void fillBuffer(int seed)
+    {
+        for (iterator_t i = buffer.begin(), e = buffer.end(); i!=e; ++i) {
+            *i = ((seed *= a) += c);
+        }
+
+        j = buffer.begin();
+    }
+};
+
+#endif // LINEARCONGRUENTIAL_HPP

diff --git a/btl/libs/BLAS/CMakeLists.txt b/btl/libs/BLAS/CMakeLists.txt
deleted file mode 100644
index de42fe0..0000000
--- a/btl/libs/BLAS/CMakeLists.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-
-find_package(ATLAS)
-if (ATLAS_FOUND)
-  btl_add_bench(btl_atlas main.cpp)
-  if(BUILD_btl_atlas)
-    target_link_libraries(btl_atlas ${ATLAS_LIBRARIES})
-    set_target_properties(btl_atlas PROPERTIES COMPILE_FLAGS "-DCBLASNAME=ATLAS -DHAS_LAPACK=1")
-  endif(BUILD_btl_atlas)
-endif (ATLAS_FOUND)
-
-find_package(MKL)
-if (MKL_FOUND)
-  btl_add_bench(btl_mkl main.cpp)
-  if(BUILD_btl_mkl)
-    target_link_libraries(btl_mkl ${MKL_LIBRARIES})
-    set_target_properties(btl_mkl PROPERTIES COMPILE_FLAGS "-DCBLASNAME=INTEL_MKL -DHAS_LAPACK=1")
-  endif(BUILD_btl_mkl)
-endif (MKL_FOUND)
-
-
-find_package(GOTO2)
-if (GOTO2_FOUND)
-  btl_add_bench(btl_goto2 main.cpp)
-  if(BUILD_btl_goto2)
-    target_link_libraries(btl_goto2 ${GOTO_LIBRARIES} )
-    set_target_properties(btl_goto2 PROPERTIES COMPILE_FLAGS "-DCBLASNAME=GOTO2")
-  endif(BUILD_btl_goto2)
-endif (GOTO2_FOUND)
-
-find_package(GOTO)
-if (GOTO_FOUND)
-  if(GOTO2_FOUND)
-    btl_add_bench(btl_goto main.cpp OFF)
-  else()
-    btl_add_bench(btl_goto main.cpp)
-  endif()
-  if(BUILD_btl_goto)
-    target_link_libraries(btl_goto ${GOTO_LIBRARIES} )
-    set_target_properties(btl_goto PROPERTIES COMPILE_FLAGS "-DCBLASNAME=GOTO")
-  endif(BUILD_btl_goto)
-endif (GOTO_FOUND)
-
-find_package(ACML)
-if (ACML_FOUND)
-  btl_add_bench(btl_acml main.cpp)
-  if(BUILD_btl_acml)
-    target_link_libraries(btl_acml ${ACML_LIBRARIES} )
-    set_target_properties(btl_acml PROPERTIES COMPILE_FLAGS "-DCBLASNAME=ACML -DHAS_LAPACK=1")
-  endif(BUILD_btl_acml)
-endif (ACML_FOUND)
-
-if(Eigen_SOURCE_DIR AND CMAKE_Fortran_COMPILER_WORKS)
-  # we are inside Eigen and blas/lapack interface is compilable
-  include_directories(${Eigen_SOURCE_DIR})
-  btl_add_bench(btl_eigenblas main.cpp)
-  if(BUILD_btl_eigenblas)
-    target_link_libraries(btl_eigenblas eigen_blas eigen_lapack )
-    set_target_properties(btl_eigenblas PROPERTIES COMPILE_FLAGS "-DCBLASNAME=EigenBLAS")
-  endif()
-endif()

diff --git a/btl/libs/BLAS/blas.h b/btl/libs/BLAS/blas.h
deleted file mode 100644
index 25607a5..0000000
--- a/btl/libs/BLAS/blas.h
+++ /dev/null
@@ -1,681 +0,0 @@
-#ifndef BLAS_H
-#define BLAS_H
-
-#define BLASFUNC(FUNC) FUNC##_
-
-#ifdef __WIN64__
-typedef long long BLASLONG;
-typedef unsigned long long BLASULONG;
-#else
-typedef long BLASLONG;
-typedef unsigned long BLASULONG;
-#endif
-
-#include <complex>
-
-extern "C" {
-
-int    BLASFUNC(xerbla)(const char *, int *info, int);
-
-float  BLASFUNC(sdot)  (int *, float  *, int *, float  *, int *);
-float  BLASFUNC(sdsdot)(int *, float  *,        float  *, int *, float  *, int *);
-
-double BLASFUNC(dsdot) (int *, float  *, int *, float  *, int *);
-double BLASFUNC(ddot)  (int *, double *, int *, double *, int *);
-double BLASFUNC(qdot)  (int *, double *, int *, double *, int *);
-
-#if defined(F_INTERFACE_GFORT) && !defined(__64BIT__)
-int   BLASFUNC(cdotu)  (int *, float  * , int *, float  *,  int *);
-int   BLASFUNC(cdotc)  (int *, float  *,  int *, float  *,  int *);
-void  BLASFUNC(zdotu)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(zdotc)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(xdotu)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(xdotc)  (double *, int *, double  *, int *, double  *, int *);
-#elif  defined(F_INTERFACE_F2C) || \
-     defined(F_INTERFACE_PGI) || \
-     defined(F_INTERFACE_GFORT) || \
-    (defined(F_INTERFACE_PATHSCALE) && defined(__64BIT__))
-void  BLASFUNC(cdotu)  (float *,  int *, float  * , int *, float  *,  int *);
-void  BLASFUNC(cdotc)  (float *,  int *, float  *,  int *, float  *,  int *);
-void  BLASFUNC(zdotu)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(zdotc)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(xdotu)  (double *, int *, double  *, int *, double  *, int *);
-void  BLASFUNC(xdotc)  (double *, int *, double  *, int *, double  *, int *);
-#else
-std::complex<float>   BLASFUNC(cdotu)  (int *, float  *, int *, float  *, int *);
-std::complex<float>   BLASFUNC(cdotc)  (int *, float  *, int *, float  *, int *);
-std::complex<double>  BLASFUNC(zdotu)  (int *, double  *, int *, double  *, int *);
-std::complex<double>  BLASFUNC(zdotc)  (int *, double  *, int *, double  *, int *);
-double  BLASFUNC(xdotu)  (int *, double  *, int *, double  *, int *);
-double  BLASFUNC(xdotc)  (int *, double  *, int *, double  *, int *);
-#endif
-
-int  BLASFUNC(cdotuw)  (int *, float  *, int *, float  *, int *, float*);
-int  BLASFUNC(cdotcw)  (int *, float  *, int *, float  *, int *, float*);
-int  BLASFUNC(zdotuw)  (int *, double  *, int *, double  *, int *, double*);
-int  BLASFUNC(zdotcw)  (int *, double  *, int *, double  *, int *, double*);
-
-int    BLASFUNC(saxpy) (int *, float  *, float  *, int *, float  *, int *);
-int    BLASFUNC(daxpy) (int *, double *, double *, int *, double *, int *);
-int    BLASFUNC(qaxpy) (int *, double *, double *, int *, double *, int *);
-int    BLASFUNC(caxpy) (int *, float  *, float  *, int *, float  *, int *);
-int    BLASFUNC(zaxpy) (int *, double *, double *, int *, double *, int *);
-int    BLASFUNC(xaxpy) (int *, double *, double *, int *, double *, int *);
-int    BLASFUNC(caxpyc)(int *, float  *, float  *, int *, float  *, int *);
-int    BLASFUNC(zaxpyc)(int *, double *, double *, int *, double *, int *);
-int    BLASFUNC(xaxpyc)(int *, double *, double *, int *, double *, int *);
-
-int    BLASFUNC(scopy) (int *, float  *, int *, float  *, int *);
-int    BLASFUNC(dcopy) (int *, double *, int *, double *, int *);
-int    BLASFUNC(qcopy) (int *, double *, int *, double *, int *);
-int    BLASFUNC(ccopy) (int *, float  *, int *, float  *, int *);
-int    BLASFUNC(zcopy) (int *, double *, int *, double *, int *);
-int    BLASFUNC(xcopy) (int *, double *, int *, double *, int *);
-
-int    BLASFUNC(sswap) (int *, float  *, int *, float  *, int *);
-int    BLASFUNC(dswap) (int *, double *, int *, double *, int *);
-int    BLASFUNC(qswap) (int *, double *, int *, double *, int *);
-int    BLASFUNC(cswap) (int *, float  *, int *, float  *, int *);
-int    BLASFUNC(zswap) (int *, double *, int *, double *, int *);
-int    BLASFUNC(xswap) (int *, double *, int *, double *, int *);
-
-float  BLASFUNC(sasum) (int *, float  *, int *);
-float  BLASFUNC(scasum)(int *, float  *, int *);
-double BLASFUNC(dasum) (int *, double *, int *);
-double BLASFUNC(qasum) (int *, double *, int *);
-double BLASFUNC(dzasum)(int *, double *, int *);
-double BLASFUNC(qxasum)(int *, double *, int *);
-
-int    BLASFUNC(isamax)(int *, float  *, int *);
-int    BLASFUNC(idamax)(int *, double *, int *);
-int    BLASFUNC(iqamax)(int *, double *, int *);
-int    BLASFUNC(icamax)(int *, float  *, int *);
-int    BLASFUNC(izamax)(int *, double *, int *);
-int    BLASFUNC(ixamax)(int *, double *, int *);
-
-int    BLASFUNC(ismax) (int *, float  *, int *);
-int    BLASFUNC(idmax) (int *, double *, int *);
-int    BLASFUNC(iqmax) (int *, double *, int *);
-int    BLASFUNC(icmax) (int *, float  *, int *);
-int    BLASFUNC(izmax) (int *, double *, int *);
-int    BLASFUNC(ixmax) (int *, double *, int *);
-
-int    BLASFUNC(isamin)(int *, float  *, int *);
-int    BLASFUNC(idamin)(int *, double *, int *);
-int    BLASFUNC(iqamin)(int *, double *, int *);
-int    BLASFUNC(icamin)(int *, float  *, int *);
-int    BLASFUNC(izamin)(int *, double *, int *);
-int    BLASFUNC(ixamin)(int *, double *, int *);
-
-int    BLASFUNC(ismin)(int *, float  *, int *);
-int    BLASFUNC(idmin)(int *, double *, int *);
-int    BLASFUNC(iqmin)(int *, double *, int *);
-int    BLASFUNC(icmin)(int *, float  *, int *);
-int    BLASFUNC(izmin)(int *, double *, int *);
-int    BLASFUNC(ixmin)(int *, double *, int *);
-
-float  BLASFUNC(samax) (int *, float  *, int *);
-double BLASFUNC(damax) (int *, double *, int *);
-double BLASFUNC(qamax) (int *, double *, int *);
-float  BLASFUNC(scamax)(int *, float  *, int *);
-double BLASFUNC(dzamax)(int *, double *, int *);
-double BLASFUNC(qxamax)(int *, double *, int *);
-
-float  BLASFUNC(samin) (int *, float  *, int *);
-double BLASFUNC(damin) (int *, double *, int *);
-double BLASFUNC(qamin) (int *, double *, int *);
-float  BLASFUNC(scamin)(int *, float  *, int *);
-double BLASFUNC(dzamin)(int *, double *, int *);
-double BLASFUNC(qxamin)(int *, double *, int *);
-
-float  BLASFUNC(smax)  (int *, float  *, int *);
-double BLASFUNC(dmax)  (int *, double *, int *);
-double BLASFUNC(qmax)  (int *, double *, int *);
-float  BLASFUNC(scmax) (int *, float  *, int *);
-double BLASFUNC(dzmax) (int *, double *, int *);
-double BLASFUNC(qxmax) (int *, double *, int *);
-
-float  BLASFUNC(smin)  (int *, float  *, int *);
-double BLASFUNC(dmin)  (int *, double *, int *);
-double BLASFUNC(qmin)  (int *, double *, int *);
-float  BLASFUNC(scmin) (int *, float  *, int *);
-double BLASFUNC(dzmin) (int *, double *, int *);
-double BLASFUNC(qxmin) (int *, double *, int *);
-
-int    BLASFUNC(sscal) (int *,  float  *, float  *, int *);
-int    BLASFUNC(dscal) (int *,  double *, double *, int *);
-int    BLASFUNC(qscal) (int *,  double *, double *, int *);
-int    BLASFUNC(cscal) (int *,  float  *, float  *, int *);
-int    BLASFUNC(zscal) (int *,  double *, double *, int *);
-int    BLASFUNC(xscal) (int *,  double *, double *, int *);
-int    BLASFUNC(csscal)(int *,  float  *, float  *, int *);
-int    BLASFUNC(zdscal)(int *,  double *, double *, int *);
-int    BLASFUNC(xqscal)(int *,  double *, double *, int *);
-
-float  BLASFUNC(snrm2) (int *, float  *, int *);
-float  BLASFUNC(scnrm2)(int *, float  *, int *);
-
-double BLASFUNC(dnrm2) (int *, double *, int *);
-double BLASFUNC(qnrm2) (int *, double *, int *);
-double BLASFUNC(dznrm2)(int *, double *, int *);
-double BLASFUNC(qxnrm2)(int *, double *, int *);
-
-int    BLASFUNC(srot)  (int *, float  *, int *, float  *, int *, float  *, float  *);
-int    BLASFUNC(drot)  (int *, double *, int *, double *, int *, double *, double *);
-int    BLASFUNC(qrot)  (int *, double *, int *, double *, int *, double *, double *);
-int    BLASFUNC(csrot) (int *, float  *, int *, float  *, int *, float  *, float  *);
-int    BLASFUNC(zdrot) (int *, double *, int *, double *, int *, double *, double *);
-int    BLASFUNC(xqrot) (int *, double *, int *, double *, int *, double *, double *);
-
-int    BLASFUNC(srotg) (float  *, float  *, float  *, float  *);
-int    BLASFUNC(drotg) (double *, double *, double *, double *);
-int    BLASFUNC(qrotg) (double *, double *, double *, double *);
-int    BLASFUNC(crotg) (float  *, float  *, float  *, float  *);
-int    BLASFUNC(zrotg) (double *, double *, double *, double *);
-int    BLASFUNC(xrotg) (double *, double *, double *, double *);
-
-int    BLASFUNC(srotmg)(float  *, float  *, float  *, float  *, float  *);
-int    BLASFUNC(drotmg)(double *, double *, double *, double *, double *);
-
-int    BLASFUNC(srotm) (int *, float  *, int *, float  *, int *, float  *);
-int    BLASFUNC(drotm) (int *, double *, int *, double *, int *, double *);
-int    BLASFUNC(qrotm) (int *, double *, int *, double *, int *, double *);
-
-/* Level 2 routines */
-
-int BLASFUNC(sger)(int *,    int *, float *,  float *, int *,
-		   float *,  int *, float *,  int *);
-int BLASFUNC(dger)(int *,    int *, double *, double *, int *,
-		   double *, int *, double *, int *);
-int BLASFUNC(qger)(int *,    int *, double *, double *, int *,
-		   double *, int *, double *, int *);
-int BLASFUNC(cgeru)(int *,    int *, float *,  float *, int *,
-		    float *,  int *, float *,  int *);
-int BLASFUNC(cgerc)(int *,    int *, float *,  float *, int *,
-		    float *,  int *, float *,  int *);
-int BLASFUNC(zgeru)(int *,    int *, double *, double *, int *,
-		    double *, int *, double *, int *);
-int BLASFUNC(zgerc)(int *,    int *, double *, double *, int *,
-		    double *, int *, double *, int *);
-int BLASFUNC(xgeru)(int *,    int *, double *, double *, int *,
-		    double *, int *, double *, int *);
-int BLASFUNC(xgerc)(int *,    int *, double *, double *, int *,
-		    double *, int *, double *, int *);
-
-int BLASFUNC(sgemv)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(dgemv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(qgemv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(cgemv)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zgemv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(xgemv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-
-int BLASFUNC(strsv) (char *, char *, char *, int *, float  *, int *,
-		     float  *, int *);
-int BLASFUNC(dtrsv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(qtrsv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(ctrsv) (char *, char *, char *, int *, float  *, int *,
-		     float  *, int *);
-int BLASFUNC(ztrsv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(xtrsv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-
-int BLASFUNC(stpsv) (char *, char *, char *, int *, float  *, float  *, int *);
-int BLASFUNC(dtpsv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(qtpsv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(ctpsv) (char *, char *, char *, int *, float  *, float  *, int *);
-int BLASFUNC(ztpsv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(xtpsv) (char *, char *, char *, int *, double *, double *, int *);
-
-int BLASFUNC(strmv) (char *, char *, char *, int *, float  *, int *,
-		     float  *, int *);
-int BLASFUNC(dtrmv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(qtrmv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(ctrmv) (char *, char *, char *, int *, float  *, int *,
-		     float  *, int *);
-int BLASFUNC(ztrmv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-int BLASFUNC(xtrmv) (char *, char *, char *, int *, double *, int *,
-		     double *, int *);
-
-int BLASFUNC(stpmv) (char *, char *, char *, int *, float  *, float  *, int *);
-int BLASFUNC(dtpmv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(qtpmv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(ctpmv) (char *, char *, char *, int *, float  *, float  *, int *);
-int BLASFUNC(ztpmv) (char *, char *, char *, int *, double *, double *, int *);
-int BLASFUNC(xtpmv) (char *, char *, char *, int *, double *, double *, int *);
-
-int BLASFUNC(stbmv) (char *, char *, char *, int *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(dtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(qtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(ctbmv) (char *, char *, char *, int *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(ztbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(xtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-
-int BLASFUNC(stbsv) (char *, char *, char *, int *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(dtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(qtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(ctbsv) (char *, char *, char *, int *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(ztbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-int BLASFUNC(xtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *);
-
-int BLASFUNC(ssymv) (char *, int *, float  *, float *, int *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(dsymv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(qsymv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(csymv) (char *, int *, float  *, float *, int *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(zsymv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(xsymv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-
-int BLASFUNC(sspmv) (char *, int *, float  *, float *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(dspmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(qspmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(cspmv) (char *, int *, float  *, float *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(zspmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(xspmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-
-int BLASFUNC(ssyr) (char *, int *, float   *, float  *, int *,
-		    float  *, int *);
-int BLASFUNC(dsyr) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-int BLASFUNC(qsyr) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-int BLASFUNC(csyr) (char *, int *, float   *, float  *, int *,
-		    float  *, int *);
-int BLASFUNC(zsyr) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-int BLASFUNC(xsyr) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-
-int BLASFUNC(ssyr2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(dsyr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-int BLASFUNC(qsyr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-int BLASFUNC(csyr2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(zsyr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-int BLASFUNC(xsyr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-
-int BLASFUNC(sspr) (char *, int *, float   *, float  *, int *,
-		    float  *);
-int BLASFUNC(dspr) (char *, int *, double  *, double *, int *,
-		    double *);
-int BLASFUNC(qspr) (char *, int *, double  *, double *, int *,
-		    double *);
-int BLASFUNC(cspr) (char *, int *, float   *, float  *, int *,
-		    float  *);
-int BLASFUNC(zspr) (char *, int *, double  *, double *, int *,
-		    double *);
-int BLASFUNC(xspr) (char *, int *, double  *, double *, int *,
-		    double *);
-
-int BLASFUNC(sspr2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *);
-int BLASFUNC(dspr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-int BLASFUNC(qspr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-int BLASFUNC(cspr2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *);
-int BLASFUNC(zspr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-int BLASFUNC(xspr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-
-int BLASFUNC(cher) (char *, int *, float   *, float  *, int *,
-		    float  *, int *);
-int BLASFUNC(zher) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-int BLASFUNC(xher) (char *, int *, double  *, double *, int *,
-		    double *, int *);
-
-int BLASFUNC(chpr) (char *, int *, float   *, float  *, int *, float  *);
-int BLASFUNC(zhpr) (char *, int *, double  *, double *, int *, double *);
-int BLASFUNC(xhpr) (char *, int *, double  *, double *, int *, double *);
-
-int BLASFUNC(cher2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *, int *);
-int BLASFUNC(zher2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-int BLASFUNC(xher2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *, int *);
-
-int BLASFUNC(chpr2) (char *, int *, float   *,
-		     float  *, int *, float  *, int *, float  *);
-int BLASFUNC(zhpr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-int BLASFUNC(xhpr2) (char *, int *, double  *,
-		     double *, int *, double *, int *, double *);
-
-int BLASFUNC(chemv) (char *, int *, float  *, float *, int *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(zhemv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(xhemv) (char *, int *, double  *, double *, int *,
-		     double  *, int *, double *, double *, int *);
-
-int BLASFUNC(chpmv) (char *, int *, float  *, float *,
-		     float  *, int *, float *, float *, int *);
-int BLASFUNC(zhpmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-int BLASFUNC(xhpmv) (char *, int *, double  *, double *,
-		     double  *, int *, double *, double *, int *);
-
-int BLASFUNC(snorm)(char *, int *, int *, float  *, int *);
-int BLASFUNC(dnorm)(char *, int *, int *, double *, int *);
-int BLASFUNC(cnorm)(char *, int *, int *, float  *, int *);
-int BLASFUNC(znorm)(char *, int *, int *, double *, int *);
-
-int BLASFUNC(sgbmv)(char *, int *, int *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(dgbmv)(char *, int *, int *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(qgbmv)(char *, int *, int *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(cgbmv)(char *, int *, int *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zgbmv)(char *, int *, int *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(xgbmv)(char *, int *, int *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-
-int BLASFUNC(ssbmv)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(dsbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(qsbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(csbmv)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zsbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(xsbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-
-int BLASFUNC(chbmv)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zhbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-int BLASFUNC(xhbmv)(char *, int *, int *, double *, double *, int *,
-		    double *, int *, double *, double *, int *);
-
-/* Level 3 routines */
-
-int BLASFUNC(sgemm)(char *, char *, int *, int *, int *, float *,
-	   float  *, int *, float  *, int *, float  *, float  *, int *);
-int BLASFUNC(dgemm)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-int BLASFUNC(qgemm)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-int BLASFUNC(cgemm)(char *, char *, int *, int *, int *, float *,
-	   float  *, int *, float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zgemm)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-int BLASFUNC(xgemm)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-
-int BLASFUNC(cgemm3m)(char *, char *, int *, int *, int *, float *,
-	   float  *, int *, float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zgemm3m)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-int BLASFUNC(xgemm3m)(char *, char *, int *, int *, int *, double *,
-	   double *, int *, double *, int *, double *, double *, int *);
-
-int BLASFUNC(sge2mm)(char *, char *, char *, int *, int *,
-		     float *, float  *, int *, float  *, int *,
-		     float *, float  *, int *);
-int BLASFUNC(dge2mm)(char *, char *, char *, int *, int *,
-		     double *, double  *, int *, double  *, int *,
-		     double *, double  *, int *);
-int BLASFUNC(cge2mm)(char *, char *, char *, int *, int *,
-		     float *, float  *, int *, float  *, int *,
-		     float *, float  *, int *);
-int BLASFUNC(zge2mm)(char *, char *, char *, int *, int *,
-		     double *, double  *, int *, double  *, int *,
-		     double *, double  *, int *);
-
-int BLASFUNC(strsm)(char *, char *, char *, char *, int *, int *,
-	   float *,  float *, int *, float *, int *);
-int BLASFUNC(dtrsm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(qtrsm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(ctrsm)(char *, char *, char *, char *, int *, int *,
-	   float *,  float *, int *, float *, int *);
-int BLASFUNC(ztrsm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(xtrsm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-
-int BLASFUNC(strmm)(char *, char *, char *, char *, int *, int *,
-	   float *,  float *, int *, float *, int *);
-int BLASFUNC(dtrmm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(qtrmm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(ctrmm)(char *, char *, char *, char *, int *, int *,
-	   float *,  float *, int *, float *, int *);
-int BLASFUNC(ztrmm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-int BLASFUNC(xtrmm)(char *, char *, char *, char *, int *, int *,
-	   double *,  double *, int *, double *, int *);
-
-int BLASFUNC(ssymm)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, int *, float  *, float  *, int *);
-int BLASFUNC(dsymm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(qsymm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(csymm)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zsymm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(xsymm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-
-int BLASFUNC(csymm3m)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zsymm3m)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(xsymm3m)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-
-int BLASFUNC(ssyrk)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, float  *, int *);
-int BLASFUNC(dsyrk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-int BLASFUNC(qsyrk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-int BLASFUNC(csyrk)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, float  *, int *);
-int BLASFUNC(zsyrk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-int BLASFUNC(xsyrk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-
-int BLASFUNC(ssyr2k)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float *, int *, float  *, float  *, int *);
-int BLASFUNC(dsyr2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(qsyr2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(csyr2k)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float *, int *, float  *, float  *, int *);
-int BLASFUNC(zsyr2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(xsyr2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-
-int BLASFUNC(chemm)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zhemm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(xhemm)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-
-int BLASFUNC(chemm3m)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, int *, float  *, float  *, int *);
-int BLASFUNC(zhemm3m)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-int BLASFUNC(xhemm3m)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, int *, double *, double *, int *);
-
-int BLASFUNC(cherk)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float  *, float  *, int *);
-int BLASFUNC(zherk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-int BLASFUNC(xherk)(char *, char *, int *, int *, double *, double *, int *,
-	   double *, double *, int *);
-
-int BLASFUNC(cher2k)(char *, char *, int *, int *, float  *, float  *, int *,
-	   float *, int *, float  *, float  *, int *);
-int BLASFUNC(zher2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(xher2k)(char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(cher2m)(char *, char *, char *, int *, int *, float  *, float  *, int *,
-	   float *, int *, float  *, float  *, int *);
-int BLASFUNC(zher2m)(char *, char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-int BLASFUNC(xher2m)(char *, char *, char *, int *, int *, double *, double *, int *,
-	   double*, int *, double *, double *, int *);
-
-int BLASFUNC(sgemt)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *);
-int BLASFUNC(dgemt)(char *, int *, int *, double *, double *, int *,
-		    double *, int *);
-int BLASFUNC(cgemt)(char *, int *, int *, float  *, float  *, int *,
-		    float  *, int *);
-int BLASFUNC(zgemt)(char *, int *, int *, double *, double *, int *,
-		    double *, int *);
-
-int BLASFUNC(sgema)(char *, char *, int *, int *, float  *,
-		    float  *, int *, float *, float  *, int *, float *, int *);
-int BLASFUNC(dgema)(char *, char *, int *, int *, double *,
-		    double *, int *, double*, double *, int *, double*, int *);
-int BLASFUNC(cgema)(char *, char *, int *, int *, float  *,
-		    float  *, int *, float *, float  *, int *, float *, int *);
-int BLASFUNC(zgema)(char *, char *, int *, int *, double *,
-		    double *, int *, double*, double *, int *, double*, int *);
-
-int BLASFUNC(sgems)(char *, char *, int *, int *, float  *,
-		    float  *, int *, float *, float  *, int *, float *, int *);
-int BLASFUNC(dgems)(char *, char *, int *, int *, double *,
-		    double *, int *, double*, double *, int *, double*, int *);
-int BLASFUNC(cgems)(char *, char *, int *, int *, float  *,
-		    float  *, int *, float *, float  *, int *, float *, int *);
-int BLASFUNC(zgems)(char *, char *, int *, int *, double *,
-		    double *, int *, double*, double *, int *, double*, int *);
-
-int BLASFUNC(sgetf2)(int *, int *, float  *, int *, int *, int *);
-int BLASFUNC(dgetf2)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(qgetf2)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(cgetf2)(int *, int *, float  *, int *, int *, int *);
-int BLASFUNC(zgetf2)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(xgetf2)(int *, int *, double *, int *, int *, int *);
-
-//int BLASFUNC(sgetrf)(int *, int *, float  *, int *, int *, int *);
-//int BLASFUNC(dgetrf)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(qgetrf)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(cgetrf)(int *, int *, float  *, int *, int *, int *);
-int BLASFUNC(zgetrf)(int *, int *, double *, int *, int *, int *);
-int BLASFUNC(xgetrf)(int *, int *, double *, int *, int *, int *);
-
-int BLASFUNC(slaswp)(int *, float  *, int *, int *, int *, int *, int *);
-int BLASFUNC(dlaswp)(int *, double *, int *, int *, int *, int *, int *);
-int BLASFUNC(qlaswp)(int *, double *, int *, int *, int *, int *, int *);
-int BLASFUNC(claswp)(int *, float  *, int *, int *, int *, int *, int *);
-int BLASFUNC(zlaswp)(int *, double *, int *, int *, int *, int *, int *);
-int BLASFUNC(xlaswp)(int *, double *, int *, int *, int *, int *, int *);
-
-int BLASFUNC(sgetrs)(char *, int *, int *, float  *, int *, int *, float  *, int *, int *);
-int BLASFUNC(dgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
-int BLASFUNC(qgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
-int BLASFUNC(cgetrs)(char *, int *, int *, float  *, int *, int *, float  *, int *, int *);
-int BLASFUNC(zgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
-int BLASFUNC(xgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
-
-int BLASFUNC(sgesv)(int *, int *, float  *, int *, int *, float *, int *, int *);
-int BLASFUNC(dgesv)(int *, int *, double *, int *, int *, double*, int *, int *);
-int BLASFUNC(qgesv)(int *, int *, double *, int *, int *, double*, int *, int *);
-int BLASFUNC(cgesv)(int *, int *, float  *, int *, int *, float *, int *, int *);
-int BLASFUNC(zgesv)(int *, int *, double *, int *, int *, double*, int *, int *);
-int BLASFUNC(xgesv)(int *, int *, double *, int *, int *, double*, int *, int *);
-
-int BLASFUNC(spotf2)(char *, int *, float  *, int *, int *);
-int BLASFUNC(dpotf2)(char *, int *, double *, int *, int *);
-int BLASFUNC(qpotf2)(char *, int *, double *, int *, int *);
-int BLASFUNC(cpotf2)(char *, int *, float  *, int *, int *);
-int BLASFUNC(zpotf2)(char *, int *, double *, int *, int *);
-int BLASFUNC(xpotf2)(char *, int *, double *, int *, int *);
-
-//int BLASFUNC(spotrf)(char *, int *, float  *, int *, int *);
-//int BLASFUNC(dpotrf)(char *, int *, double *, int *, int *);
-int BLASFUNC(qpotrf)(char *, int *, double *, int *, int *);
-int BLASFUNC(cpotrf)(char *, int *, float  *, int *, int *);
-int BLASFUNC(zpotrf)(char *, int *, double *, int *, int *);
-int BLASFUNC(xpotrf)(char *, int *, double *, int *, int *);
-
-int BLASFUNC(slauu2)(char *, int *, float  *, int *, int *);
-int BLASFUNC(dlauu2)(char *, int *, double *, int *, int *);
-int BLASFUNC(qlauu2)(char *, int *, double *, int *, int *);
-int BLASFUNC(clauu2)(char *, int *, float  *, int *, int *);
-int BLASFUNC(zlauu2)(char *, int *, double *, int *, int *);
-int BLASFUNC(xlauu2)(char *, int *, double *, int *, int *);
-
-int BLASFUNC(slauum)(char *, int *, float  *, int *, int *);
-int BLASFUNC(dlauum)(char *, int *, double *, int *, int *);
-int BLASFUNC(qlauum)(char *, int *, double *, int *, int *);
-int BLASFUNC(clauum)(char *, int *, float  *, int *, int *);
-int BLASFUNC(zlauum)(char *, int *, double *, int *, int *);
-int BLASFUNC(xlauum)(char *, int *, double *, int *, int *);
-
-int BLASFUNC(strti2)(char *, char *, int *, float  *, int *, int *);
-int BLASFUNC(dtrti2)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(qtrti2)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(ctrti2)(char *, char *, int *, float  *, int *, int *);
-int BLASFUNC(ztrti2)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(xtrti2)(char *, char *, int *, double *, int *, int *);
-
-int BLASFUNC(strtri)(char *, char *, int *, float  *, int *, int *);
-int BLASFUNC(dtrtri)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(qtrtri)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(ctrtri)(char *, char *, int *, float  *, int *, int *);
-int BLASFUNC(ztrtri)(char *, char *, int *, double *, int *, int *);
-int BLASFUNC(xtrtri)(char *, char *, int *, double *, int *, int *);
-
-int BLASFUNC(spotri)(char *, int *, float  *, int *, int *);
-int BLASFUNC(dpotri)(char *, int *, double *, int *, int *);
-int BLASFUNC(qpotri)(char *, int *, double *, int *, int *);
-int BLASFUNC(cpotri)(char *, int *, float  *, int *, int *);
-int BLASFUNC(zpotri)(char *, int *, double *, int *, int *);
-int BLASFUNC(xpotri)(char *, int *, double *, int *, int *);
-
-}
-
-#endif

diff --git a/btl/libs/BLAS/blas_interface.hh b/btl/libs/BLAS/blas_interface.hh
deleted file mode 100644
index 19fc3c1..0000000
--- a/btl/libs/BLAS/blas_interface.hh
+++ /dev/null
@@ -1,77 +0,0 @@
-//=====================================================
-// File   :  blas_interface.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:28 CEST 2002
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef blas_PRODUIT_MATRICE_VECTEUR_HH
-#define blas_PRODUIT_MATRICE_VECTEUR_HH
-
-#include <c_interface_base.h>
-#include <complex>
-extern "C"
-{
-#include "blas.h"
-#ifdef CBLAS_INTERFACE
-#  include "cblas.h"
-#endif
-}
-
-#define MAKE_STRING2(S) #S
-#define MAKE_STRING(S) MAKE_STRING2(S)
-
-#define CAT2(A,B) A##B
-#define CAT(A,B) CAT2(A,B)
-
-
-template<class real> class blas_interface;
-
-
-static char notrans = 'N';
-static char trans = 'T';
-static char nonunit = 'N';
-static char lower = 'L';
-static char right = 'R';
-static char left = 'L';
-static int intone = 1;
-
-
-#define SCALAR        float
-#define SCALAR_PREFIX s
-#ifdef CBLAS_INTERFACE
-#  include "cblas_interface_impl.hh"
-#else
-#  include "blas_interface_impl.hh"
-#endif
-#undef SCALAR
-#undef SCALAR_PREFIX
-
-
-#define SCALAR        double
-#define SCALAR_PREFIX d
-#ifdef CBLAS_INTERFACE
-#  include "cblas_interface_impl.hh"
-#else
-#  include "blas_interface_impl.hh"
-#endif
-#undef SCALAR
-#undef SCALAR_PREFIX
-
-#endif
-
-
-

diff --git a/btl/libs/BLAS/blas_interface_impl.hh b/btl/libs/BLAS/blas_interface_impl.hh
deleted file mode 100644
index 63883a9..0000000
--- a/btl/libs/BLAS/blas_interface_impl.hh
+++ /dev/null
@@ -1,96 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-
-#define BLAS_FUNC(NAME) CAT(CAT(SCALAR_PREFIX,NAME),_)
-
-template<> class blas_interface<SCALAR> : public c_interface_base<SCALAR>
-{
-
-public :
-  
-  static SCALAR fone;
-  static SCALAR fzero;
-
-  static inline std::string name()
-  {
-    return MAKE_STRING(CBLASNAME);
-  }
-
-  static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(gemv)(&notrans,&N,&N,&fone,A,&N,B,&intone,&fzero,X,&intone);
-  }
-
-  static inline void symv(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(symv)(&lower, &N,&fone,A,&N,B,&intone,&fzero,X,&intone);
-  }
-
-  static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(syr2)(&lower,&N,&fone,B,&intone,X,&intone,A,&N);
-  }
-
-  static inline void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
-    BLAS_FUNC(ger)(&N,&N,&fone,X,&intone,Y,&intone,A,&N);
-  }
-
-  static inline void rot(gene_vector & A,  gene_vector & B, SCALAR c, SCALAR s, int N){
-    BLAS_FUNC(rot)(&N,A,&intone,B,&intone,&c,&s);
-  }
-
-  static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(gemv)(&trans,&N,&N,&fone,A,&N,B,&intone,&fzero,X,&intone);
-  }
-
-  static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(gemm)(&notrans,&notrans,&N,&N,&N,&fone,A,&N,B,&N,&fzero,X,&N);
-  }
-
-  static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(gemm)(&notrans,&notrans,&N,&N,&N,&fone,A,&N,B,&N,&fzero,X,&N);
-  }
-
-  static inline void aat_product(gene_matrix & A, gene_matrix & X, int N){
-    BLAS_FUNC(syrk)(&lower,&notrans,&N,&N,&fone,A,&N,&fzero,X,&N);
-  }
-
-  static inline void axpy(SCALAR coef, const gene_vector & X, gene_vector & Y, int N){
-    BLAS_FUNC(axpy)(&N,&coef,X,&intone,Y,&intone);
-  }
-
-  static inline void axpby(SCALAR a, const gene_vector & X, SCALAR b, gene_vector & Y, int N){
-    BLAS_FUNC(scal)(&N,&b,Y,&intone);
-    BLAS_FUNC(axpy)(&N,&a,X,&intone,Y,&intone);
-  }
-
-  static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){
-    BLAS_FUNC(copy)(&N, B, &intone, X, &intone);
-    BLAS_FUNC(trsv)(&lower, &notrans, &nonunit, &N, L, &N, X, &intone);
-  }
-
-  static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix & X, int N){
-    BLAS_FUNC(copy)(&N, B, &intone, X, &intone);
-    BLAS_FUNC(trsm)(&right, &lower, &notrans, &nonunit, &N, &N, &fone, L, &N, X, &N);
-  }
-
-  static inline void trmm(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(trmm)(&left, &lower, &notrans,&nonunit, &N,&N,&fone,A,&N,B,&N);
-  }
-
-};
-
-SCALAR blas_interface<SCALAR>::fone = SCALAR(1);
-SCALAR blas_interface<SCALAR>::fzero = SCALAR(0);

diff --git a/btl/libs/BLAS/c_interface_base.h b/btl/libs/BLAS/c_interface_base.h
deleted file mode 100644
index 3b6afbb..0000000
--- a/btl/libs/BLAS/c_interface_base.h
+++ /dev/null
@@ -1,89 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef BTL_C_INTERFACE_BASE_H
-#define BTL_C_INTERFACE_BASE_H
-
-#include "utilities.h"
-#include <vector>
-
-template<class real> class c_interface_base
-{
-
-public:
-
-  typedef real                      real_type;
-  typedef std::vector<real>         stl_vector;
-  typedef std::vector<stl_vector >  stl_matrix;
-
-  typedef real* gene_matrix;
-  typedef real* gene_vector;
-
-  static void free_matrix(gene_matrix & A, int N){
-    delete A;
-  }
-
-  static void free_vector(gene_vector & B){
-    delete B;
-  }
-
-  static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
-    int N = A_stl.size();
-    A = new real[N*N];
-    for (int j=0;j<N;j++)
-      for (int i=0;i<N;i++)
-        A[i+N*j] = A_stl[j][i];
-  }
-
-  static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){
-    int N = B_stl.size();
-    B = new real[N];
-    for (int i=0;i<N;i++)
-      B[i] = B_stl[i];
-  }
-
-  static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){
-    int N = B_stl.size();
-    for (int i=0;i<N;i++)
-      B_stl[i] = B[i];
-  }
-
-  static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){
-    int N = A_stl.size();
-    for (int j=0;j<N;j++){
-      A_stl[j].resize(N);
-      for (int i=0;i<N;i++)
-        A_stl[j][i] = A[i+N*j];
-    }
-  }
-
-  static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){
-    for (int i=0;i<N;i++)
-      cible[i]=source[i];
-  }
-
-  static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){
-    for (int j=0;j<N;j++){
-      for (int i=0;i<N;i++){
-        cible[i+N*j] = source[i+N*j];
-      }
-    }
-  }
-
-};
-
-#endif

diff --git a/btl/libs/BLAS/cblas_interface_impl.hh b/btl/libs/BLAS/cblas_interface_impl.hh
deleted file mode 100644
index 2da195e..0000000
--- a/btl/libs/BLAS/cblas_interface_impl.hh
+++ /dev/null
@@ -1,96 +0,0 @@
-//=====================================================
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-
-#define BLAS_FUNC(NAME) CAT(cblas_,CAT(SCALAR_PREFIX,NAME))
-
-template<> class blas_interface<SCALAR> : public c_interface_base<SCALAR>
-{
-
-public :
-  
-  static SCALAR fone;
-  static SCALAR fzero;
-
-  static inline std::string name()
-  {
-    return MAKE_STRING(CBLASNAME);
-  }
-
-  static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(gemv)(CblasColMajor,CblasNoTrans,N,N,fone,A,N,B,intone,fzero,X,intone);
-  }
-
-  static inline void symv(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(symv)(CblasColMajor,CblasLower,N,fone,A,N,B,intone,fzero,X,intone);
-  }
-
-  static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(syr2)(CblasColMajor,CblasLower,N,fone,B,intone,X,intone,A,N);
-  }
-
-  static inline void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
-    BLAS_FUNC(ger)(CblasColMajor,N,N,fone,X,intone,Y,intone,A,N);
-  }
-
-  static inline void rot(gene_vector & A,  gene_vector & B, SCALAR c, SCALAR s, int N){
-    BLAS_FUNC(rot)(N,A,intone,B,intone,c,s);
-  }
-
-  static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
-    BLAS_FUNC(gemv)(CblasColMajor,CblasTrans,N,N,fone,A,N,B,intone,fzero,X,intone);
-  }
-
-  static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(gemm)(CblasColMajor,CblasNoTrans,CblasNoTrans,N,N,N,fone,A,N,B,N,fzero,X,N);
-  }
-
-  static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(gemm)(CblasColMajor,CblasTrans,CblasNoTrans,N,N,N,fone,A,N,B,N,fzero,X,N);
-  }
-
-  static inline void aat_product(gene_matrix & A, gene_matrix & X, int N){
-    BLAS_FUNC(syrk)(CblasColMajor,CblasLower,CblasNoTrans,N,N,fone,A,N,fzero,X,N);
-  }
-
-  static inline void axpy(SCALAR coef, const gene_vector & X, gene_vector & Y, int N){
-    BLAS_FUNC(axpy)(N,coef,X,intone,Y,intone);
-  }
-
-  static inline void axpby(SCALAR a, const gene_vector & X, SCALAR b, gene_vector & Y, int N){
-    BLAS_FUNC(scal)(N,b,Y,intone);
-    BLAS_FUNC(axpy)(N,a,X,intone,Y,intone);
-  }
-
-  static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){
-    BLAS_FUNC(copy)(N, B, intone, X, intone);
-    BLAS_FUNC(trsv)(CblasColMajor,CblasLower, CblasNoTrans, CblasNonUnit, N, L, N, X, intone);
-  }
-
-  static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix & X, int N){
-    BLAS_FUNC(copy)(N, B, intone, X, intone);
-    BLAS_FUNC(trsm)(CblasColMajor,CblasRight, CblasLower, CblasNoTrans, CblasNonUnit, N, N, fone, L, N, X, N);
-  }
-
-  static inline void trmm(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
-    BLAS_FUNC(trmm)(CblasColMajor,CblasLeft, CblasLower, CblasNoTrans,CblasNonUnit, N,N,fone,A,N,B,N);
-  }
-
-};
-
-SCALAR blas_interface<SCALAR>::fone = SCALAR(1);
-SCALAR blas_interface<SCALAR>::fzero = SCALAR(0);

diff --git a/btl/libs/BLAS/main.cpp b/btl/libs/BLAS/main.cpp
index 401cb5b..da156b8 100644
--- a/btl/libs/BLAS/main.cpp
+++ b/btl/libs/BLAS/main.cpp
@@ -1,8 +1,5 @@
 //=====================================================
-// File   :  main.cpp
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:28 CEST 2002
-// Copyright (C) 2011 Andrea Arteaga <andyspiros@gmail.com>
+// Copyright (C) 2012 Andrea Arteaga <andyspiros@gmail.com>
 //=====================================================
 //
 // This program is free software; you can redistribute it and/or
@@ -19,17 +16,16 @@
 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 //
 
-#ifndef BLAS_INTERFACE
-#  ifndef CBLAS_INTERFACE
-#    define BLAS_INTERFACE
-#  endif
-#endif
+// Include the numeric interface
+#define NI_FORTRAN
+#include "NumericInterface.hpp"
 
+// Include the BTL
 #include "utilities.h"
-#include "blas_interface.hh"
 #include "bench.hh"
-#include "basic_actions.hh"
-#include "action_trisolve_matrix.hh"
+
+// Include the operations
+#include "actionsBLAS.hpp"
 
 #include <string>
 
@@ -37,80 +33,17 @@ BTL_MAIN;
 
 int main(int argv, char **argc)
 {
-  bool
-  axpy=false, axpby=false, rot=false,
-  matrix_vector=false, atv=false, symv=false, syr2=false, ger=false, trisolve_vector=false,
-  matrix_matrix=false, aat=false, trisolve_matrix=false, trmm=false  
-  ;
-  int N = 100;
-  
-  
-  for (int i = 1; i < argv; ++i) {
-    std::string arg = argc[i];
-    if (arg == "axpy") axpy = true;
-    else if (arg == "axpby") axpby = true;
-    else if (arg == "rot") rot = true;
-    else if (arg == "matrix_vector") matrix_vector = true;
-    else if (arg == "atv") atv = true;
-    else if (arg == "symv") symv = true;
-    else if (arg == "syr2") syr2 = true;
-    else if (arg == "ger") ger = true;
-    else if (arg == "trisolve_vector") trisolve_vector = true;
-    else if (arg == "matrix_matrix") matrix_matrix = true;
-    else if (arg == "aat") aat = true;
-    else if (arg == "trisolve_matrix") trisolve_matrix = true;
-    else if (arg == "trmm") trmm = true;
-    
-    else if (arg[0] == '1' && arg[1] == '\0') {
-      axpy = true; axpby = true; rot = true;
-    }
-    else if (arg[0] == '2' && arg[1] == '\0') {
-      matrix_vector=true; atv=true; symv=true; syr2=true; ger=true; trisolve_vector=true;
-    }
-    else if (arg[0] == '3' && arg[1] == '\0') {
-      matrix_matrix=true; aat=true; trisolve_matrix=true; trmm=true;
-    }
-
-    // Check switch -N
-    else if (arg[0] == '-' && arg[1] == 'N') {
-        if (arg[2] != '\0')
-            N = atoi(arg.c_str()+2);
-        else
-            N = atoi(argc[++i]);
-    }
-  }
-
-  if (axpy)
-  bench<Action_axpy<blas_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY, N);
-  if (axpby)
-  bench<Action_axpby<blas_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY, N);
-  if (rot)
-  bench<Action_rot<blas_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY, N);
+    bench<Action_axpy<NumericInterface<double> > >(4, 6000, 20);
+    bench<Action_rot<NumericInterface<double> > >(4, 6000, 20);
 
-  if (matrix_vector)
-  bench<Action_matrix_vector_product<blas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV, N);
-  if (atv)
-  bench<Action_atv_product<blas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV, N);
-  if (symv)
-  bench<Action_symv<blas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV, N);
-  if (syr2)
-  bench<Action_syr2<blas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV, N);
-  if (ger)
-  bench<Action_ger<blas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV, N);
-  if (trisolve_vector)
-  bench<Action_trisolve<blas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM, N);
-
-  if (matrix_matrix)
-  bench<Action_matrix_matrix_product<blas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM, N);
-  if (aat)
-  bench<Action_aat_product<blas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM, N);
-  if (trisolve_matrix)
-  bench<Action_trisolve_matrix<blas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM, N);
-  if (trmm)
-  bench<Action_trmm<blas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM, N);
+    bench<Action_MatrixVector<NumericInterface<double> > >(4, 2000, 20);
+    bench<Action_MatrixTVector<NumericInterface<double> > >(4, 2000, 20);
+    bench<Action_SymMatrixVector<NumericInterface<double> > >(4, 2000, 20);
+    bench<Action_TriSolveVector<NumericInterface<double> > >(4, 2000, 20);
+    bench<Action_Rank1Update<NumericInterface<double> > >(4, 2000, 20);
+    bench<Action_Rank2Update<NumericInterface<double> > >(4, 2000, 20);
 
 
   return 0;
 }
 
-

diff --git a/btl/libs/STL/CMakeLists.txt b/btl/libs/STL/CMakeLists.txt
deleted file mode 100644
index 4cfc2dc..0000000
--- a/btl/libs/STL/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-btl_add_bench(btl_STL main.cpp OFF)

diff --git a/btl/libs/STL/STL_interface.hh b/btl/libs/STL/STL_interface.hh
deleted file mode 100644
index 060cb69..0000000
--- a/btl/libs/STL/STL_interface.hh
+++ /dev/null
@@ -1,255 +0,0 @@
-//=====================================================
-// File   :  STL_interface.hh
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:24 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#ifndef STL_INTERFACE_HH
-#define STL_INTERFACE_HH
-#include <string>
-#include <vector>
-#include "utilities.h"
-
-using namespace std;
-
-template<class real>
-class STL_interface{
-
-public :
-
-  typedef real real_type ;
-
-  typedef std::vector<real>  stl_vector;
-  typedef std::vector<stl_vector > stl_matrix;
-
-  typedef stl_matrix gene_matrix;
-
-  typedef stl_vector gene_vector;
-
-  static inline std::string name( void )
-  {
-    return "STL";
-  }
-
-  static void free_matrix(gene_matrix & A, int N){}
-
-  static void free_vector(gene_vector & B){}
-
-  static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
-    A = A_stl;
-  }
-
-  static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){
-    B = B_stl;
-  }
-
-  static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){
-    B_stl = B ;
-  }
-
-
-  static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){
-    A_stl = A ;
-  }
-
-  static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){
-    for (int i=0;i<N;i++){
-      cible[i]=source[i];
-    }
-  }
-
-
-  static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){
-    for (int i=0;i<N;i++)
-      for (int j=0;j<N;j++)
-        cible[i][j]=source[i][j];
-  }
-
-//   static inline void ata_product(const gene_matrix & A, gene_matrix & X, int N)
-//   {
-//     real somme;
-//     for (int j=0;j<N;j++){
-//       for (int i=0;i<N;i++){
-//         somme=0.0;
-//         for (int k=0;k<N;k++)
-//           somme += A[i][k]*A[j][k];
-//         X[j][i]=somme;
-//       }
-//     }
-//   }
-
-  static inline void aat_product(const gene_matrix & A, gene_matrix & X, int N)
-  {
-    real somme;
-    for (int j=0;j<N;j++){
-      for (int i=0;i<N;i++){
-        somme=0.0;
-        if(i>=j)
-        {
-          for (int k=0;k<N;k++){
-            somme+=A[k][i]*A[k][j];
-          }
-          X[j][i]=somme;
-        }
-      }
-    }
-  }
-
-
-  static inline void matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N)
-  {
-    real somme;
-    for (int j=0;j<N;j++){
-      for (int i=0;i<N;i++){
-        somme=0.0;
-        for (int k=0;k<N;k++)
-          somme+=A[k][i]*B[j][k];
-        X[j][i]=somme;
-      }
-    }
-  }
-
-  static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
-  {
-    real somme;
-    for (int i=0;i<N;i++){
-      somme=0.0;
-      for (int j=0;j<N;j++)
-        somme+=A[j][i]*B[j];
-      X[i]=somme;
-    }
-  }
-
-  static inline void matrix_vector_product(gene_vector& A, gene_vector & B, gene_vector & X, int N)
-  {
-    real somme;
-    for (int i=0;i<N;i++){
-      somme=0.0;
-      for (int j=0;j<N;j++)
-        somme+=A[j*N+i]*B[j];
-      X[i]=somme;
-    }
-  }
-
-  static inline void symv(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
-  {
-    for (int j=0; j<N; ++j)
-      X[j] = 0;
-    for (int j=0; j<N; ++j)
-    {
-      real t1 = B[j];
-      real t2 = 0;
-      X[j] += t1 * A[j][j];
-      for (int i=j+1; i<N; ++i) {
-        X[i] += t1 * A[j][i];
-        t2 += A[j][i] * B[i];
-      }
-      X[j] += t2;
-    }
-  }
-  
-  static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
-  {
-    for (int j=0; j<N; ++j)
-    {
-      for (int i=j; i<N; ++i)
-        A[j][i] += B[i]*X[j] + B[j]*X[i];
-    }
-  }
-
-  static inline void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N)
-  {
-    for (int j=0; j<N; ++j)
-    {
-      for (int i=j; i<N; ++i)
-        A[j][i] += X[i]*Y[j];
-    }
-  }
-
-  static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
-  {
-    real somme;
-    for (int i=0;i<N;i++){
-      somme = 0.0;
-      for (int j=0;j<N;j++)
-        somme += A[i][j]*B[j];
-      X[i] = somme;
-    }
-  }
-
-  static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){
-    for (int i=0;i<N;i++)
-      Y[i]+=coef*X[i];
-  }
-
-  static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){
-    for (int i=0;i<N;i++)
-      Y[i] = a*X[i] + b*Y[i];
-  }
-
-  static inline void trisolve_lower(const gene_matrix & L, const gene_vector & B, gene_vector & X, int N){
-    copy_vector(B,X,N);
-    for(int i=0; i<N; ++i)
-    {
-      X[i] /= L[i][i];
-      real tmp = X[i];
-      for (int j=i+1; j<N; ++j)
-        X[j] -= tmp * L[i][j];
-    }
-  }
-
-  static inline real norm_diff(const stl_vector & A, const stl_vector & B)
-  {
-    int N=A.size();
-    real somme=0.0;
-    real somme2=0.0;
-
-    for (int i=0;i<N;i++){
-      real diff=A[i]-B[i];
-      somme+=diff*diff;
-      somme2+=A[i]*A[i];
-    }
-    return somme/somme2;
-  }
-
-  static inline real norm_diff(const stl_matrix & A, const stl_matrix & B)
-  {
-    int N=A[0].size();
-    real somme=0.0;
-    real somme2=0.0;
-
-    for (int i=0;i<N;i++){
-      for (int j=0;j<N;j++){
-        real diff=A[i][j] - B[i][j];
-        somme += diff*diff;
-        somme2 += A[i][j]*A[i][j];
-      }
-    }
-
-    return somme/somme2;
-  }
-
-  static inline void display_vector(const stl_vector & A)
-  {
-    int N=A.size();
-    for (int i=0;i<N;i++){
-      INFOS("A["<<i<<"]="<<A[i]<<endl);
-    }
-  }
-
-};
-
-#endif

diff --git a/btl/libs/STL/main.cpp b/btl/libs/STL/main.cpp
deleted file mode 100644
index 4e73328..0000000
--- a/btl/libs/STL/main.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-//=====================================================
-// File   :  main.cpp
-// Author :  L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D,  lun sep 30 14:23:23 CEST 2002
-//=====================================================
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// 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 License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-#include "utilities.h"
-#include "STL_interface.hh"
-#include "bench.hh"
-#include "basic_actions.hh"
-
-BTL_MAIN;
-
-int main()
-{
-  bench<Action_axpy<STL_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
-  bench<Action_axpby<STL_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
-  bench<Action_matrix_vector_product<STL_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-  bench<Action_atv_product<STL_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-  bench<Action_symv<STL_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-  bench<Action_syr2<STL_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-  bench<Action_matrix_matrix_product<STL_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-  bench<Action_ata_product<STL_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-  bench<Action_aat_product<STL_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
-  return 0;
-}
-
-

diff --git a/numbench/modules/internal/blasBase.py b/numbench/modules/internal/blasBase.py
index dd786db..bf2faf5 100644
--- a/numbench/modules/internal/blasBase.py
+++ b/numbench/modules/internal/blasBase.py
@@ -21,11 +21,12 @@ import btlBase
 from os.path import join as pjoin
 
 
-avail1 = ('axpy', 'axpby', 'rot')
-avail2 = ('matrix_vector', 'atv', 'symv', 'ger', 'syr2', 'trisolve_vector')
-avail3 = ('matrix_matrix', 'aat', 'trisolve_matrix', 'trmm')
+avail1 = ('axpy', 'rot')
+avail2 = ('MatrixVector', 'MatrixTVector', 'SymMatrixVector',
+          'Rank1Update', 'Rank2Update', 'TriSolveVector')
+avail3 = ('MatrixMatrix', 'MatrixTMatrix', 'TriMatrixMatrix', 'TriSolveMatrix')
 availableTests = avail1 + avail2 + avail3
-defaultTests = ('axpy', 'matrix_vector', 'trisolve_vector', 'matrix_matrix')
+defaultTests = ('axpy', 'MatrixVector', 'TriSolveVector', 'MatrixMatrix')
 
 
 def init(self, args):

diff --git a/numbench/testdescr.py b/numbench/testdescr.py
index 3db919b..1f96080 100644
--- a/numbench/testdescr.py
+++ b/numbench/testdescr.py
@@ -20,18 +20,18 @@ testdescr = {
 'axpy' : 'y = a*x + y',
 'axpby' : 'y = a*x + b*y',
 'rot': 'Apply Givens rotation',
-'matrix_vector': 'Matrix-Vector multiply',
-'atv': 'Transposed Matrix-Vector multiply (A\' * x)',
-'symv': 'Symmetric Matrix-Vector multiply',
-'ger': 'Rank-1 update',
-'syr2': 'Symmetric Rank-2 update',
-'trisolve_vector': 'Triangular system solution',
-'matrix_matrix': 'Matrix-Matrix multiply',
-'aat': 'Symmetric Rank-n update',
-'trisolve_matrix': 'Triangular system solution with n right hand side vectors',
-'trmm': 'Triangular Matrix-Matrix multiply',
+'MatrixVector': 'Matrix-Vector multiply',
+'MatrixTVector': 'Transposed Matrix-Vector multiply (A\' * x)',
+'SymMatrixVector': 'Symmetric Matrix-Vector multiply',
+'Rank1Update': 'Rank-1 update',
+'Rank2Update': 'Symmetric Rank-2 update',
+'TriSolveVector': 'Triangular system solution',
+'MatrixMatrix': 'Matrix-Matrix multiply',
+'MatrixTMatrix': 'Symmetric Rank-n update',
+'TriMatrixMatrix': 'Triangular Matrix-Matrix multiply',
+'TriSolveMatrix': 'Triangular system solution with n right hand side vectors',
 
-# LAPACK
+# LAPACK(e)
 'general_solve': 'Solution of a generic linear system of equations',
 'least_squares': 'Least squares solution',
 'lu_decomp': 'LU-decomposition',


                 reply	other threads:[~2012-09-29  9:21 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1348910441.0bf9d7c0c2541c7f8e607655a7c6035248b5d32d.spiros@gentoo \
    --to=andyspiros@gmail.com \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox