00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __IPITERATIVEWSMPSOLVERINTERFACE_HPP__
00012 #define __IPITERATIVEWSMPSOLVERINTERFACE_HPP__
00013
00014 #include "IpSparseSymLinearSolverInterface.hpp"
00015
00016 namespace Ipopt
00017 {
00018
00023 class IterativeWsmpSolverInterface: public SparseSymLinearSolverInterface
00024 {
00025 public:
00029 IterativeWsmpSolverInterface();
00030
00032 virtual ~IterativeWsmpSolverInterface();
00034
00036 bool InitializeImpl(const OptionsList& options,
00037 const std::string& prefix);
00038
00039
00043 virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
00044 const Index *ia,
00045 const Index *ja);
00046
00049 virtual double* GetValuesArrayPtr();
00050
00052 virtual ESymSolverStatus MultiSolve(bool new_matrix,
00053 const Index* ia,
00054 const Index* ja,
00055 Index nrhs,
00056 double* rhs_vals,
00057 bool check_NegEVals,
00058 Index numberOfNegEVals);
00059
00063 virtual Index NumberOfNegEVals() const;
00065
00066
00068
00070 virtual bool IncreaseQuality();
00071
00075 virtual bool ProvidesInertia() const
00076 {
00077 return false;
00078 }
00082 EMatrixFormat MatrixFormat() const
00083 {
00084 return CSR_Format_1_Offset;
00085 }
00087
00090 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00092
00093 private:
00103 IterativeWsmpSolverInterface(const IterativeWsmpSolverInterface&);
00104
00106 void operator=(const IterativeWsmpSolverInterface&);
00108
00112 Index dim_;
00113
00115 double* a_;
00117
00121 Index wsmp_num_threads_;
00123 Number wsmp_pivtol_;
00125 Number wsmp_pivtolmax_;
00127 Index wsmp_scaling_;
00129 Index wsmp_write_matrix_iteration_;
00130 Number wsmp_inexact_droptol_;
00131 Number wsmp_inexact_fillin_limit_;
00133
00135 Index matrix_file_number_;
00136
00139 #if 0
00140
00141 Index negevals_;
00142 #endif
00143
00144
00149 bool initialized_;
00152 bool pivtol_changed_;
00155 bool have_symbolic_factorization_;
00157
00161 ipfint* IPARM_;
00163 double* DPARM_;
00165
00170 ESymSolverStatus SymbolicFactorization(const Index* ia, const Index* ja);
00171
00173 ESymSolverStatus InternalSymFact(const Index* ia, const Index* ja);
00174
00177 ESymSolverStatus Factorization(const Index* ia,
00178 const Index* ja,
00179 bool check_NegEVals,
00180 Index numberOfNegEVals);
00181
00184 ESymSolverStatus Solve(const Index* ia,
00185 const Index* ja,
00186 Index nrhs,
00187 double *rhs_vals);
00189 };
00190
00191 }
00192 #endif