# 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 Eclipse 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

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines