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