00001 /* SuperLU: direct sparse solver 00002 */ 00003 00004 #ifndef SuperLU_hh 00005 #define SuperLU_hh 00006 00007 #include "compositions.hh" 00008 #include "basics/typedefs.hh" 00009 00010 namespace concepts { 00011 00012 // *************************************************************** SuperLU ** 00013 00067 template<class F> 00068 class SuperLU : public VecOperator<F> { 00069 public: 00071 enum order { NATURAL = 0, MMD_PROD = 1, MMD_SUM = 2, COLAMD = 3 }; 00085 SuperLU(const Operator<F>& A, enum order ispec = COLAMD); 00086 virtual ~SuperLU(); 00087 00088 uint iterations() const { return 0; } 00089 protected: 00090 virtual std::ostream& info(std::ostream& os) const; 00091 private: 00093 void* A_; 00094 00096 uint n_; 00097 00099 bool factorized_; 00101 enum order ispec_; 00102 00104 void* L_, * U_; 00106 int *perm_r_, *perm_c_; 00107 00108 virtual void apply_(const Vector<F>& fncY, Vector<F>& fncX); 00109 }; 00110 00111 } // namespace concepts 00112 00113 #endif // SuperLU_hh