00001 // fabric class for Umfpack 00002 00003 #ifndef umfpackFabric_hh 00004 #define umfpackFabric_hh 00005 00006 #include "umfpack.hh" 00007 #include "solverFabric.hh" 00008 00009 namespace concepts { 00010 00011 // ********************************************************* UmfpackFabric ** 00012 00016 class UmfpackFabric : public SolverFabric<Real> { 00017 public: 00018 UmfpackFabric(bool symmetric = false) : symmetric_(symmetric) {} 00019 virtual Operator<Real>* operator()(Operator<Real>& matrix) { 00020 return new Umfpack(matrix, symmetric_); 00021 } 00022 virtual Operator<Real>* operator()(SparseMatrix<Real>& matrix) { 00023 return new Umfpack(matrix, symmetric_); 00024 } 00025 protected: 00026 virtual std::ostream& info(std::ostream& os) const { 00027 return os << "UmfpackFabric()"; 00028 } 00029 private: 00030 bool symmetric_; 00031 }; 00032 00033 } // concepts 00034 00035 #endif // umfpackFabric_hh