Ipopt
trunk
|
00001 // Copyright (C) 2009 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Andreas Waechter IBM 2009-09-18 00008 // based on IpWsmpSolverInterface.hpp (rev 1483) 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 //* @name Options of Linear solver */ 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 } // namespace Ipopt 00192 #endif