00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __IPMA57TSOLVERINTERFACE_HPP__
00011 #define __IPMA57TSOLVERINTERFACE_HPP__
00012
00013 #include "IpSparseSymLinearSolverInterface.hpp"
00014
00015 namespace Ipopt
00016 {
00020 class Ma57TSolverInterface: public SparseSymLinearSolverInterface
00021 {
00022 public:
00026 Ma57TSolverInterface();
00027
00029 virtual ~Ma57TSolverInterface();
00031
00033 bool InitializeImpl(const OptionsList& options,
00034 const std::string& prefix);
00035
00036
00044 virtual ESymSolverStatus InitializeStructure(
00045 Index dim,
00046 Index nonzeros,
00047 const Index *airn,
00048 const Index *ajcn);
00049
00055 virtual double* GetValuesArrayPtr();
00056
00060 virtual ESymSolverStatus MultiSolve(bool new_matrix,
00061 const Index* airn,
00062 const Index* ajcn,
00063 Index nrhs,
00064 double* rhs_vals,
00065 bool check_NegEVals,
00066 Index numberOfNegEVals);
00067
00074 virtual Index NumberOfNegEVals() const;
00076
00077
00079
00084 virtual bool IncreaseQuality();
00085
00089 virtual bool ProvidesInertia() const
00090 {
00091 return true;
00092 }
00096 EMatrixFormat MatrixFormat() const
00097 {
00098 return Triplet_Format;
00099 }
00101
00104 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00106
00107 private:
00117 Ma57TSolverInterface(const Ma57TSolverInterface&);
00118
00120 void operator=(const Ma57TSolverInterface&);
00122
00126 Index dim_;
00127
00129 Index nonzeros_;
00131
00135 Index negevals_;
00137
00142 bool initialized_;
00145 bool pivtol_changed_;
00149 bool refactorize_;
00151
00155 Number pivtol_;
00157 Number pivtolmax_;
00159 Number ma57_pre_alloc_;
00162 bool warm_start_same_structure_;
00164
00169 double wd_cntl_[5];
00170 ipfint wd_icntl_[20];
00171
00172 ipfint wd_info_[40];
00173 double wd_rinfo_[20];
00174
00175 ipfint wd_lkeep_;
00176 ipfint *wd_keep_;
00177
00178 ipfint *wd_iwork_;
00179
00180 double *wd_fact_;
00181 ipfint wd_lfact_;
00182 ipfint *wd_ifact_;
00183 ipfint wd_lifact_;
00184
00185
00187 double* a_;
00189
00196 ESymSolverStatus SymbolicFactorization(const Index* airn,
00197 const Index* ajcn);
00198
00203 ESymSolverStatus Factorization(const Index* airn,
00204 const Index* ajcn,
00205 bool check_NegEVals,
00206 Index numberOfNegEVals);
00207
00210 ESymSolverStatus Backsolve(Index nrhs,
00211 double *rhs_vals);
00213 };
00214
00215 }
00216 #endif