1 //#define CXXBLAS_DEBUG_OUT(x)      std::cerr << x << std::endl;
 2 
 3 #define STR(x)      #x
 4 #define STRING(x)   STR(x)
 5 
 6 #define FLENS_DEFAULT_INDEXTYPE int
 7 
 8 #include <flens/lapack/interface/include/config.h>
 9 
10 
11 namespace flens { namespace lapack {
12 
13 extern "C" {
14 
15 //-- dgerfs --------------------------------------------------------------------
16 void
17 LAPACK_DECL(dgerfs)(const char       *TRANS,
18                     const INTEGER    *N,
19                     const INTEGER    *NRHS,
20                     const DOUBLE     *A,
21                     const INTEGER    *LDA,
22                     const DOUBLE     *AF,
23                     const INTEGER    *LDAF,
24                     const INTEGER    *IPIV,
25                     const DOUBLE     *B,
26                     const INTEGER    *LDB,
27                     DOUBLE           *X,
28                     const INTEGER    *LDX,
29                     DOUBLE           *FERR,
30                     DOUBLE           *BERR,
31                     DOUBLE           *WORK,
32                     INTEGER          *IWORK,
33                     INTEGER          *INFO)
34 {
35     DEBUG_FLENS_LAPACK("dgerfs");
36 //
37 //  Test the input parameters so that we pass LAPACK error checks
38 //
39     *INFO = 0;
40     if (*TRANS!='N' && *TRANS!='T' && *TRANS!='C') {
41         *INFO = -1;
42     } else if (*N<0) {
43         *INFO = -2;
44     } else if (*NRHS<0) {
45         *INFO = -3;
46     } else if (*LDA<std::max(INTEGER(1), *N)) {
47         *INFO = -5;
48     } else if (*LDAF<std::max(INTEGER(1), *N)) {
49         *INFO = -7;
50     } else if (*LDB<std::max(INTEGER(1), *N)) {
51         *INFO = -10;
52     } else if (*LDX<std::max(INTEGER(1), *N)) {
53         *INFO = -12;
54     }
55     if (*INFO!=0) {
56         *INFO = -(*INFO);
57         LAPACK_ERROR("DGERFS", INFO);
58         *INFO = -(*INFO);
59         return;
60     }
61 //
62 //  Call FLENS implementation
63 //
64     Transpose              trans  = getFlensLapackEnum<Transpose>(*TRANS);
65     DConstGeMatrixView     _A     = DConstFSView(*N, *N, A, *LDA);
66     DConstGeMatrixView     _AF    = DConstFSView(*N, *N, AF, *LDAF);
67     IConstDenseVectorView  _IPIV  = IConstArrayView(*N, IPIV, 1);
68     DConstGeMatrixView     _B     = DConstFSView(*N, *NRHS, B, *LDB);
69     DGeMatrixView          _X     = DFSView(*N, *NRHS, X, *LDX);
70     DDenseVectorView       _FERR  = DArrayView(*NRHS, FERR, 1);
71     DDenseVectorView       _BERR  = DArrayView(*NRHS, BERR, 1);
72     DDenseVectorView       _WORK  = DArrayView(*N*3, WORK, 1);
73     IDenseVectorView       _IWORK = IArrayView(*N, IWORK, 1);
74 
75     rfs(trans, _A, _AF, _IPIV, _B, _X, _FERR, _BERR, _WORK, _IWORK);
76 }
77 
78 // extern "C"
79 
80 } } // namespace lapack, flens