1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//=====================================================
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// File   :  blas_interface.hh
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Author :  L. Plagne <laurent.plagne@edf.fr)>
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) EDF R&D,  lun sep 30 14:23:28 CEST 2002
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//=====================================================
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is free software; you can redistribute it and/or
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// modify it under the terms of the GNU General Public License
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// as published by the Free Software Foundation; either version 2
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// of the License, or (at your option) any later version.
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is distributed in the hope that it will be useful,
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// but WITHOUT ANY WARRANTY; without even the implied warranty of
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// GNU General Public License for more details.
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// You should have received a copy of the GNU General Public License
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// along with this program; if not, write to the Free Software
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef blas_PRODUIT_MATRICE_VECTEUR_HH
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define blas_PRODUIT_MATRICE_VECTEUR_HH
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <c_interface_base.h>
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <complex>
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern "C"
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "blas.h"
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // Cholesky Factorization
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//   void spotrf_(const char* uplo, const int* n, float *a, const int* ld, int* info);
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//   void dpotrf_(const char* uplo, const int* n, double *a, const int* ld, int* info);
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void ssytrd_(char *uplo, const int *n, float *a, const int *lda, float *d, float *e, float *tau, float *work, int *lwork, int *info );
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void dsytrd_(char *uplo, const int *n, double *a, const int *lda, double *d, double *e, double *tau, double *work, int *lwork, int *info );
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void sgehrd_( const int *n, int *ilo, int *ihi, float *a, const int *lda, float *tau, float *work, int *lwork, int *info );
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void dgehrd_( const int *n, int *ilo, int *ihi, double *a, const int *lda, double *tau, double *work, int *lwork, int *info );
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // LU row pivoting
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//   void dgetrf_( int *m, int *n, double *a, int *lda, int *ipiv, int *info );
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//   void sgetrf_(const int* m, const int* n, float *a, const int* ld, int* ipivot, int* info);
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // LU full pivoting
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void sgetc2_(const int* n, float *a, const int *lda, int *ipiv, int *jpiv, int*info );
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void dgetc2_(const int* n, double *a, const int *lda, int *ipiv, int *jpiv, int*info );
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef HAS_LAPACK
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MAKE_STRING2(S) #S
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MAKE_STRING(S) MAKE_STRING2(S)
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define CAT2(A,B) A##B
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define CAT(A,B) CAT2(A,B)
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<class real> class blas_interface;
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char notrans = 'N';
58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char trans = 'T';
59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char nonunit = 'N';
60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char lower = 'L';
61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char right = 'R';
62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic char left = 'L';
63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic int intone = 1;
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR        float
68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR_PREFIX s
69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "blas_interface_impl.hh"
70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#undef SCALAR
71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#undef SCALAR_PREFIX
72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR        double
75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR_PREFIX d
76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "blas_interface_impl.hh"
77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#undef SCALAR
78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#undef SCALAR_PREFIX
79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
84