- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.5.1/Ipopt/src/Algorithm/LinearSolvers/IpMa57TSolverInterface.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2005, 2006 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Common Public License.
    00004 //
    00005 // $Id: IpMa57TSolverInterface.hpp 699 2006-04-05 21:05:18Z andreasw $
    00006 //
    00007 // Authors:  Michael Hagemann               Univ of Basel 2005-10-28
    00008 //               original version (based on MA27TSolverInterface.hpp)
    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     //* @name Options of Linear solver */
    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_;      /* LKEEP >= 5*N + NE + max(N,NE) + 42. */
    00176     ipfint  *wd_keep_;
    00177
    00178     ipfint  *wd_iwork_;      /* 5 * N. */
    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 } // namespace Ipopt
    00216 #endif