00001 #ifndef SPARSEPRIMALDUALSYSTEM 00002 #define SPARSEPRIMALDUALSYSTEM 00003 00012 #include "PrimalDualSystem.hh" 00013 00014 class SparseSymSolver; 00015 class SparseSymMatrix; 00016 class SimpleVector; 00017 class IotrMaskSeq; 00018 00019 typedef Handle<SparseSymMatrix> SparseSymMatrixHandle; 00020 typedef Handle<LinearOperator> LinearOperatorHandle; 00021 typedef Handle<SparseSymSolver> SparseSymSolverHandle; 00022 typedef Handle<SimpleVector> SimpleVectorHandle; 00023 typedef Handle<IotrMaskSeq> IotrMaskSeqHandle; 00024 00029 class SparsePrimalDualSystem : public PrimalDualSystem { 00030 protected: 00031 SparseSymMatrixHandle mMatrix; 00032 SparseSymSolverHandle mSolver; 00033 SimpleVectorHandle mRhs; 00034 IotrMaskSeqHandle mXmask; 00035 public: 00036 SparsePrimalDualSystem( ElementGather * iclow, ElementGather * icupp, 00037 ElementGather * ieq, 00038 ElementGather * ixlow, ElementGather * ixupp, 00039 SparseSymMatrix * matrix, SparseSymSolver * solver, 00040 IotrMaskSeq * aXmask ); 00041 00042 virtual void assemble( GenMatrix & J, SymMatrix & H, 00043 IotrVector & Dx, IotrVector & omega ); 00044 00045 virtual void matrixChanged(); 00046 virtual void basicSolve( IotrVector & xsol, 00047 IotrVector & rc ); 00048 00049 virtual int isConvex(); 00050 SparseSymMatrix & matrix() { return *mMatrix; } 00051 SparseSymSolver & solver() { return *mSolver; } 00052 }; 00053 00054 typedef Handle<SparsePrimalDualSystem> SparsePrimalDualSystemHandle; 00055 00056 #endif