00001
00002
00003
00004
00005 #ifndef QPGENLINSYS
00006 #define QPGENLINSYS
00007
00008 #include "LinearSystem.h"
00009 #include "DoubleMatrixHandle.h"
00010 #include "OoqpVectorHandle.h"
00011 #include "OoqpVector.h"
00012
00013 class Data;
00014 class QpGenData;
00015 class QpGen;
00016 class Variables;
00017 class Residuals;
00018 class DoubleLinearSolver;
00019 class LinearAlgebraPackage;
00020
00021
00035 class QpGenLinsys : public LinearSystem {
00036 protected:
00037
00039 OoqpVectorHandle nomegaInv;
00040
00042 OoqpVectorHandle rhs;
00043
00044 QpGen * factory;
00045
00046 QpGenLinsys() {};
00047
00049 int nx, my, mz;
00050
00052 OoqpVectorHandle dd, dq;
00053
00055 OoqpVectorHandle ixupp, icupp, ixlow, iclow;
00056
00058 int nxupp, nxlow, mcupp, mclow;
00059
00060 public:
00061 QpGenLinsys( QpGen * factory,
00062 QpGenData * data,
00063 LinearAlgebraPackage * la );
00064
00065 virtual ~QpGenLinsys() {}
00066
00067
00075 virtual void factor(Data *prob, Variables *vars);
00076
00087 virtual void solve(Data *prob, Variables *vars, Residuals *res,
00088 Variables *step);
00089
00097 virtual void joinRHS( OoqpVector& rhs, OoqpVector& rhs1,
00098 OoqpVector& rhs2, OoqpVector& rhs3 );
00099
00107 virtual void separateVars( OoqpVector& vars1, OoqpVector& vars2,
00108 OoqpVector& vars3, OoqpVector& vars );
00109
00112 virtual void solveXYZS( OoqpVector& stepx, OoqpVector& stepy,
00113 OoqpVector& stepz, OoqpVector& steps,
00114 OoqpVector& ztemp, QpGenData * data );
00115
00125 virtual void solveCompressed( OoqpVector& rhs ) = 0;
00126
00129 virtual void putXDiagonal( OoqpVector& xdiag ) = 0;
00130
00133 virtual void putZDiagonal( OoqpVector& zdiag ) = 0;
00134
00137 virtual void computeDiagonals( OoqpVector& dd, OoqpVector& omega,
00138 OoqpVector& t, OoqpVector& lambda,
00139 OoqpVector& u, OoqpVector& pi,
00140 OoqpVector& v, OoqpVector& gamma,
00141 OoqpVector& w, OoqpVector& phi );
00142 };
00143
00144 #endif