/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2006, 2007 Damien Hocking, KBC Advanced Technologies
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // Authors: Damien Hocking                 KBC    2006-03-20
00006 //        (included his original contribution into Ipopt package on 2006-03-25)
00007 //          Andreas Waechter               IBM    2006-03-25
00008 //           (minor changes and corrections)
00009 //          Scott Turnberg                 CMU    2006-05-12
00010 //           (major revision)
00011 //           (incorporated by AW on 2006-11-11 into Ipopt package)
00012 
00013 
00014 #ifndef __IPMUMPSSOLVERINTERFACE_HPP__
00015 #define __IPMUMPSSOLVERINTERFACE_HPP__
00016 
00017 #include "IpSparseSymLinearSolverInterface.hpp"
00018 
00019 namespace Ipopt
00020 {
00021 
00026   class MumpsSolverInterface: public SparseSymLinearSolverInterface
00027   {
00028   public:
00032     MumpsSolverInterface();
00033 
00035     virtual ~MumpsSolverInterface();
00037 
00039     bool InitializeImpl(const OptionsList& options,
00040                         const std::string& prefix);
00041 
00049     virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
00050         const Index *airn,
00051         const Index *ajcn);
00052 
00058     virtual double* GetValuesArrayPtr();
00059 
00063     virtual ESymSolverStatus MultiSolve(bool new_matrix,
00064                                         const Index* airn,
00065                                         const Index* ajcn,
00066                                         Index nrhs,
00067                                         double* rhs_vals,
00068                                         bool check_NegEVals,
00069                                         Index numberOfNegEVals);
00070 
00077     virtual Index NumberOfNegEVals() const;
00079 
00080     //* @name Options of Linear solver */
00082 
00087     virtual bool IncreaseQuality();
00088 
00092     virtual bool ProvidesInertia() const
00093     {
00094       return true;
00095     }
00099     EMatrixFormat MatrixFormat() const
00100     {
00101       return Triplet_Format;
00102     }
00104 
00107     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00109 
00112     virtual bool ProvidesDegeneracyDetection() const;
00113 
00116     virtual ESymSolverStatus DetermineDependentRows(const Index* ia,
00117         const Index* ja,
00118         std::list<Index>& c_deps);
00119 
00120   private:
00130     MumpsSolverInterface(const MumpsSolverInterface&);
00131 
00133     void operator=(const MumpsSolverInterface&);
00135 
00139     void* mumps_ptr_;
00141 
00145     Index negevals_;
00147 
00152     bool initialized_;
00155     bool pivtol_changed_;
00159     bool refactorize_;
00161 
00165     Number pivtol_;
00166 
00168     Number pivtolmax_;
00169 
00171     Index mem_percent_;
00172 
00174     Index mumps_permuting_scaling_;
00175 
00177     Index mumps_pivot_order_;
00178 
00180     Index mumps_scaling_;
00181 
00184     Number mumps_dep_tol_;
00185 
00188     bool warm_start_same_structure_;
00190 
00193     bool have_symbolic_factorization_;
00194 
00200     ESymSolverStatus SymbolicFactorization();
00201 
00206     ESymSolverStatus Factorization(bool check_NegEVals,
00207                                    Index numberOfNegEVals);
00208 
00211     ESymSolverStatus Solve(Index nrhs, double *rhs_vals);
00213   };
00214 
00215 } // namespace Ipopt
00216 #endif

Generated on Sun Nov 14 14:06:35 2010 for Coin-All by  doxygen 1.4.7