Ipopt
trunk
|
00001 // Copyright (C) 2004, 2006 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: Carl Laird, Andreas Waechter IBM 2005-03-17 00008 00009 #ifndef __IPMA27TSOLVERINTERFACE_HPP__ 00010 #define __IPMA27TSOLVERINTERFACE_HPP__ 00011 00012 #include "IpSparseSymLinearSolverInterface.hpp" 00013 00014 namespace Ipopt 00015 { 00019 class Ma27TSolverInterface: public SparseSymLinearSolverInterface 00020 { 00021 public: 00025 Ma27TSolverInterface(); 00026 00028 virtual ~Ma27TSolverInterface(); 00030 00032 bool InitializeImpl(const OptionsList& options, 00033 const std::string& prefix); 00034 00035 00043 virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, 00044 const Index *airn, 00045 const Index *ajcn); 00046 00052 virtual double* GetValuesArrayPtr(); 00053 00057 virtual ESymSolverStatus MultiSolve(bool new_matrix, 00058 const Index* airn, 00059 const Index* ajcn, 00060 Index nrhs, 00061 double* rhs_vals, 00062 bool check_NegEVals, 00063 Index numberOfNegEVals); 00064 00071 virtual Index NumberOfNegEVals() const; 00073 00074 //* @name Options of Linear solver */ 00076 00081 virtual bool IncreaseQuality(); 00082 00086 virtual bool ProvidesInertia() const 00087 { 00088 return true; 00089 } 00093 EMatrixFormat MatrixFormat() const 00094 { 00095 return Triplet_Format; 00096 } 00098 00101 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00103 00104 private: 00114 Ma27TSolverInterface(const Ma27TSolverInterface&); 00115 00117 void operator=(const Ma27TSolverInterface&); 00119 00123 Index dim_; 00124 00126 Index nonzeros_; 00128 00132 Index negevals_; 00134 00139 bool initialized_; 00142 bool pivtol_changed_; 00146 bool refactorize_; 00148 00152 Number pivtol_; 00153 00155 Number pivtolmax_; 00156 00158 Number liw_init_factor_; 00160 Number la_init_factor_; 00162 Number meminc_factor_; 00165 bool warm_start_same_structure_; 00168 bool skip_inertia_check_; 00171 bool ignore_singularity_; 00173 00179 ipfint icntl_[30]; 00181 double cntl_[5]; 00182 00184 ipfint liw_; 00186 ipfint* iw_; 00187 00189 ipfint* ikeep_; 00191 ipfint nsteps_; 00193 ipfint maxfrt_; 00194 00196 ipfint la_; 00198 double* a_; 00199 00202 bool la_increase_; 00205 bool liw_increase_; 00207 00214 ESymSolverStatus SymbolicFactorization(const Index* airn, 00215 const Index* ajcn); 00216 00221 ESymSolverStatus Factorization(const Index* airn, 00222 const Index* ajcn, 00223 bool check_NegEVals, 00224 Index numberOfNegEVals); 00225 00228 ESymSolverStatus Backsolve(Index nrhs, 00229 double *rhs_vals); 00231 }; 00232 00233 } // namespace Ipopt 00234 #endif