@@ -71,6 +71,10 @@ namespace las
7171 {
7272 static_cast <T*>(this )->_set (v,cnt,rws,vls);
7373 }
74+ void set (Vec * v, scalar * vls)
75+ {
76+ static_cast <T*>(this )->_set (v,vls);
77+ }
7478 void set (Mat * m, int cntr, int * rws, int cntc, int * cls, scalar * vls)
7579 {
7680 static_cast <T*>(this )->_set (m,cntr,rws,cntc,cls,vls);
@@ -198,6 +202,8 @@ namespace las
198202 virtual void solve (Mat * k, Vec * u, Vec * f) = 0;
199203 virtual ~Solve () {}
200204 };
205+ template <typename T>
206+ Solve * getSolve (int id);
201207 /* *
202208 * Interface for Matrix-Vector multiplication
203209 * @todo Retrieve backend-specific solvers using
@@ -210,6 +216,8 @@ namespace las
210216 virtual void exec (Mat * x, Vec * a, Vec * b) = 0;
211217 virtual ~MatVecMult () {}
212218 };
219+ template <class T >
220+ MatVecMult * getMatVecMult ();
213221 /* *
214222 * Interface for Matrix-Matrix multiplication
215223 * @todo Retrieve backend-specific solvers using
@@ -222,6 +230,56 @@ namespace las
222230 virtual void exec (Mat * a, Mat * b, Mat ** c) = 0;
223231 virtual ~MatMatMult () {}
224232 };
233+ template <class T >
234+ MatMatMult * getMatMatMult ();
235+ /* *
236+ * Interface for Scalar-Matrix multiplication
237+ * If c is NULL performs an in place multiplication
238+ * @todo Retrieve backend-specific solvers using
239+ * backend id classes to do template
240+ * specialization, as above.
241+ */
242+ class ScalarMatMult
243+ {
244+ public:
245+ virtual void exec (scalar s, Mat * a, Mat ** c) = 0;
246+ virtual ~ScalarMatMult () {}
247+ };
248+ template <class T >
249+ ScalarMatMult * getScalarMatMult ();
250+ /*
251+ * interface for C = alpha_1*A+alpha_2*B
252+ */
253+ class MatMatAdd
254+ {
255+ public:
256+ virtual void exec (scalar s1, Mat * a, scalar s2, Mat * b, Mat ** c) = 0;
257+ virtual ~MatMatAdd () {}
258+ };
259+ template <class T >
260+ MatMatAdd * getMatMatAdd ();
261+ /*
262+ * interface for vector vector addition
263+ */
264+ class VecVecAdd
265+ {
266+ public:
267+ virtual void exec (scalar s1, Vec * v1, scalar s2, Vec * v2, Vec *& v3) = 0;
268+ virtual ~VecVecAdd () {}
269+ };
270+ template <class T >
271+ VecVecAdd * getVecVecAdd ();
272+ /*
273+ * Interface for scalar-vector multiplication
274+ */
275+ class ScalarVecMult
276+ {
277+ public:
278+ virtual void exec (scalar s, Vec * x, Vec ** y) = 0;
279+ virtual ~ScalarVecMult () {}
280+ };
281+ template <class T >
282+ ScalarVecMult * getScalarVecMult ();
225283 /*
226284 * Finalize routines which must be called on a matrix when switching from
227285 * add mode to set mode
0 commit comments