IpSymLinearSolver.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPSYMLINEARSOLVER_HPP__
00010 #define __IPSYMLINEARSOLVER_HPP__
00011
00012 #include "IpUtils.hpp"
00013 #include "IpSymMatrix.hpp"
00014 #include "IpAlgStrategy.hpp"
00015 #include <vector>
00016
00017 namespace Ipopt
00018 {
00019
00021 enum ESymSolverStatus {
00023 SYMSOLVER_SUCCESS,
00025 SYMSOLVER_SINGULAR,
00027 SYMSOLVER_WRONG_INERTIA,
00030 SYMSOLVER_CALL_AGAIN,
00033 SYMSOLVER_FATAL_ERROR
00034 };
00035
00050 class SymLinearSolver: public AlgorithmStrategyObject
00051 {
00052 public:
00055 SymLinearSolver()
00056 {}
00057
00058 virtual ~SymLinearSolver()
00059 {}
00061
00063 virtual bool InitializeImpl(const OptionsList& options,
00064 const std::string& prefix) = 0;
00065
00080 virtual ESymSolverStatus MultiSolve(const SymMatrix &A,
00081 std::vector<SmartPtr<const Vector> >& rhsV,
00082 std::vector<SmartPtr<Vector> >& solV,
00083 bool check_NegEVals,
00084 Index numberOfNegEVals)=0;
00085
00089 ESymSolverStatus Solve(const SymMatrix &A,
00090 const Vector& rhs, Vector& sol,
00091 bool check_NegEVals,
00092 Index numberOfNegEVals)
00093 {
00094 std::vector<SmartPtr<const Vector> > rhsV(1);
00095 rhsV[0] = &rhs;
00096 std::vector<SmartPtr<Vector> > solV(1);
00097 solV[0] = /
00098 return MultiSolve(A, rhsV, solV, check_NegEVals,
00099 numberOfNegEVals);
00100 }
00101
00108 virtual Index NumberOfNegEVals() const =0;
00110
00111
00113
00118 virtual bool IncreaseQuality() =0;
00119
00123 virtual bool ProvidesInertia() const =0;
00125 };
00126
00127
00128 }
00129
00130 #endif