00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef EIGEN_SPARSELU_H
00026 #define EIGEN_SPARSELU_H
00027
00038 template<typename MatrixType, int Backend = DefaultBackend>
00039 class SparseLU
00040 {
00041 protected:
00042 typedef typename MatrixType::Scalar Scalar;
00043 typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
00044 typedef SparseMatrix<Scalar,LowerTriangular> LUMatrixType;
00045
00046 enum {
00047 MatrixLUIsDirty = 0x10000
00048 };
00049
00050 public:
00051
00053 SparseLU(int flags = 0)
00054 : m_flags(flags), m_status(0)
00055 {
00056 m_precision = RealScalar(0.1) * Eigen::precision<RealScalar>();
00057 }
00058
00061 SparseLU(const MatrixType& matrix, int flags = 0)
00062 : m_flags(flags), m_status(0)
00063 {
00064 m_precision = RealScalar(0.1) * Eigen::precision<RealScalar>();
00065 compute(matrix);
00066 }
00067
00078 void setPrecision(RealScalar v) { m_precision = v; }
00079
00083 RealScalar precision() const { return m_precision; }
00084
00093 void setFlags(int f) { m_flags = f; }
00095 int flags() const { return m_flags; }
00096
00097 void setOrderingMethod(int m)
00098 {
00099 ei_assert((m&~OrderingMask) == 0 && m!=0 && "invalid ordering method");
00100 m_flags = (m_flags&~OrderingMask) | (m&OrderingMask);
00101 }
00102
00103 int orderingMethod() const
00104 {
00105 return m_flags&OrderingMask;
00106 }
00107
00109 void compute(const MatrixType& matrix);
00110
00112
00113
00115
00116
00117 template<typename BDerived, typename XDerived>
00118 bool solve(const MatrixBase<BDerived> &b, MatrixBase<XDerived>* x) const;
00119
00121 inline bool succeeded(void) const { return m_succeeded; }
00122
00123 protected:
00124 RealScalar m_precision;
00125 int m_flags;
00126 mutable int m_status;
00127 bool m_succeeded;
00128 };
00129
00133 template<typename MatrixType, int Backend>
00134 void SparseLU<MatrixType,Backend>::compute(const MatrixType& a)
00135 {
00136 ei_assert(false && "not implemented yet");
00137 }
00138
00140 template<typename MatrixType, int Backend>
00141 template<typename BDerived, typename XDerived>
00142 bool SparseLU<MatrixType,Backend>::solve(const MatrixBase<BDerived> &b, MatrixBase<XDerived>* x) const
00143 {
00144 ei_assert(false && "not implemented yet");
00145 return false;
00146 }
00147
00148 #endif // EIGEN_SPARSELU_H