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
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