1 // Source code for QDLDL, AMD and permutations 2 #include "qdldl/include/qdldl.h" 3 #include "amd/include/amd.h" 4 #include "amd/include/perm.h" 5 #include <stdexcept> 6 #include <string> 7 8 9 namespace qdldl { 10 11 class Solver { 12 13 private: 14 // Matrix L 15 QDLDL_int * Lp; 16 QDLDL_int * Li; 17 QDLDL_float * Lx; 18 19 // Matrix D 20 QDLDL_float * D; 21 QDLDL_float * Dinv; 22 23 // Matrix P (permutation) 24 QDLDL_int * P; 25 QDLDL_int * Pinv; 26 27 // Workspace 28 QDLDL_int * etree; 29 QDLDL_int * Lnz; 30 QDLDL_int * iwork; 31 QDLDL_bool * bwork; 32 QDLDL_float * fwork; 33 34 // Permuted A 35 QDLDL_int * Aperm_p; 36 QDLDL_int * Aperm_i; 37 QDLDL_float * Aperm_x; 38 QDLDL_int * A2Aperm; 39 40 public: 41 QDLDL_int nx; // Size 42 QDLDL_int nnz; // Number of nonzero elements in the matrix 43 44 Solver(QDLDL_int n, QDLDL_int * Ap, QDLDL_int *Ai, QDLDL_float * Ax); 45 QDLDL_float * solve(QDLDL_float * b); 46 void update(QDLDL_float * Anew_x); 47 ~Solver(); 48 49 }; 50 51 } // end namespace 52 53 54 55 56 57 58 59 60 61 62