00001 #ifndef NLPLINSYSSOL 00002 #define NLPLINSYSSOL 00003 00004 #include "IotrRefCount.hh" 00005 #include "IotrHandle.hh" 00006 #include "IotrVector.hh" 00007 00008 class NlpIterate; 00009 class NlpResiduals; 00010 class NlpResidualShift; 00011 class NlpLinsysDiag; 00012 class IotrVector; 00013 class NlpGrads; 00014 00015 typedef Handle<IotrVector> IotrVectorHandle; 00016 00021 class NlpLinsysSol : public IotrRefCount { 00022 protected: 00023 IotrVectorHandle mXsol; 00024 IotrVectorHandle mYsol; 00025 IotrVectorHandle mLambdaSol; 00026 IotrVectorHandle mPiSol; 00027 IotrVectorHandle mGammaSol; 00028 IotrVectorHandle mPhiSol; 00029 public: 00030 IotrVector & x() { return *mXsol; } 00031 IotrVector & y() { return *mYsol; } 00032 IotrVector & lambda() { return *mLambdaSol; } 00033 IotrVector & pi() { return *mPiSol; } 00034 IotrVector & gamma() { return *mGammaSol; } 00035 IotrVector & phi() { return *mPhiSol; } 00036 00037 NlpLinsysSol( IotrVector * x, IotrVector * y, 00038 IotrVector * lambda, IotrVector * pi, 00039 IotrVector * gamma, IotrVector * phi ); 00040 virtual ~NlpLinsysSol(); 00041 virtual void calcRhs( NlpIterate & vars, 00042 NlpResiduals & resids, NlpResidualShift & shift, 00043 NlpGrads & grads ); 00044 // Scales multipliers by -1/(1+2sigma) 00045 virtual void getp( double sigma ); 00046 virtual void scaleWithID( NlpLinsysDiag & diag ); 00047 virtual void scaleWithIDinv( NlpLinsysDiag &diag ); 00048 virtual void copyFrom( NlpLinsysSol & sol ); 00049 virtual void copyInto( IotrVector & vec ); 00050 virtual void copyFrom( IotrVector & vec ); 00051 virtual double dot( NlpLinsysSol & sol ); 00052 virtual void negateMultipliers(); 00053 virtual void scale( double factor ); 00054 virtual void axpy( double alpha, NlpLinsysSol & sol ); 00055 00056 double dualFeasibility() { return mXsol->infnorm(); }; 00057 double penaltyNorm() { return mYsol->infnorm(); } 00058 00059 virtual void inspect(); 00060 virtual void inspectAsMatlab(); 00061 }; 00062 00063 typedef Handle<NlpLinsysSol> NlpLinsysSolHandle; 00064 00065 #endif