1 #include <flens/lapack/interface/include/config.h>
2
3
4 namespace flens { namespace lapack {
5
6 extern "C" {
7
8 //-- dgetri --------------------------------------------------------------------
9 void
10 LAPACK_DECL(dgetri)(const INTEGER *N,
11 DOUBLE *A,
12 const INTEGER *LDA,
13 INTEGER *IPIV,
14 DOUBLE *WORK,
15 const INTEGER *LWORK,
16 INTEGER *INFO)
17 {
18 DEBUG_FLENS_LAPACK("dgetri");
19
20 using std::max;
21 using std::min;
22 //
23 // Test the input parameters so that we pass LAPACK error checks
24 //
25 *INFO = 0;
26 bool lQuery = (*LWORK==-1);
27
28 if (*N<0) {
29 *INFO = 1;
30 } else if (*LDA<max(INTEGER(1),*N)) {
31 *INFO = 3;
32 } else if (*LWORK<max(INTEGER(1),*N) && !lQuery) {
33 *INFO = 6;
34 }
35
36 if (*INFO!=0) {
37 LAPACK_ERROR("DGETRI", INFO);
38 *INFO = -(*INFO);
39 return;
40 }
41
42 //
43 // Setup FLENS matrix/vector types
44 //
45 DGeMatrixView _A = DFSView(*N, *N, A, *LDA);
46 IDenseVectorView _IPIV = IArrayView(*N, IPIV, 1);
47 DDenseVectorView _WORK = DArrayView(*LWORK, WORK, 1);
48
49 //
50 // Call FLENS implementation
51 //
52 tri(_A, _IPIV, _WORK);
53 }
54
55 } // extern "C"
56
57 } } // namespace lapack, flens
2
3
4 namespace flens { namespace lapack {
5
6 extern "C" {
7
8 //-- dgetri --------------------------------------------------------------------
9 void
10 LAPACK_DECL(dgetri)(const INTEGER *N,
11 DOUBLE *A,
12 const INTEGER *LDA,
13 INTEGER *IPIV,
14 DOUBLE *WORK,
15 const INTEGER *LWORK,
16 INTEGER *INFO)
17 {
18 DEBUG_FLENS_LAPACK("dgetri");
19
20 using std::max;
21 using std::min;
22 //
23 // Test the input parameters so that we pass LAPACK error checks
24 //
25 *INFO = 0;
26 bool lQuery = (*LWORK==-1);
27
28 if (*N<0) {
29 *INFO = 1;
30 } else if (*LDA<max(INTEGER(1),*N)) {
31 *INFO = 3;
32 } else if (*LWORK<max(INTEGER(1),*N) && !lQuery) {
33 *INFO = 6;
34 }
35
36 if (*INFO!=0) {
37 LAPACK_ERROR("DGETRI", INFO);
38 *INFO = -(*INFO);
39 return;
40 }
41
42 //
43 // Setup FLENS matrix/vector types
44 //
45 DGeMatrixView _A = DFSView(*N, *N, A, *LDA);
46 IDenseVectorView _IPIV = IArrayView(*N, IPIV, 1);
47 DDenseVectorView _WORK = DArrayView(*LWORK, WORK, 1);
48
49 //
50 // Call FLENS implementation
51 //
52 tri(_A, _IPIV, _WORK);
53 }
54
55 } // extern "C"
56
57 } } // namespace lapack, flens