- Main Page
- Classes
- Files

- File List
- File Members

# 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 Eclipse Public License.
    00004 //
    00005 // $Id: IpMa57TSolverInterface.hpp 2158 2012-12-04 19:24:42Z stefan $
    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 #ifdef FUNNY_MA57_FINT
    00016 #include <cstddef>
    00017 typedef ptrdiff_t ma57int;
    00018 #else
    00019 typedef ipfint ma57int;
    00020 #endif
    00021
    00022 namespace Ipopt
    00023 {
    00027   class Ma57TSolverInterface: public SparseSymLinearSolverInterface
    00028   {
    00029   public:
    00033     Ma57TSolverInterface();
    00034
    00036     virtual ~Ma57TSolverInterface();
    00038
    00040     bool InitializeImpl(const OptionsList&  options,
    00041                         const std::string&  prefix);
    00042
    00043
    00051     virtual ESymSolverStatus InitializeStructure(
    00052       Index        dim,
    00053       Index nonzeros,
    00054       const Index     *airn,
    00055       const Index     *ajcn);
    00056
    00062     virtual double* GetValuesArrayPtr();
    00063
    00067     virtual ESymSolverStatus MultiSolve(bool        new_matrix,
    00068                                         const Index*    airn,
    00069                                         const Index*    ajcn,
    00070                                         Index       nrhs,
    00071                                         double*     rhs_vals,
    00072                                         bool        check_NegEVals,
    00073                                         Index       numberOfNegEVals);
    00074
    00081     virtual Index NumberOfNegEVals() const;
    00083
    00084     //* @name Options of Linear solver */
    00086
    00091     virtual bool IncreaseQuality();
    00092
    00096     virtual bool ProvidesInertia() const
    00097     {
    00098       return true;
    00099     }
    00103     EMatrixFormat MatrixFormat() const
    00104     {
    00105       return Triplet_Format;
    00106     }
    00108
    00111     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
    00113
    00114   private:
    00124     Ma57TSolverInterface(const Ma57TSolverInterface&);
    00125
    00127     void operator=(const Ma57TSolverInterface&);
    00129
    00133     Index dim_;
    00134
    00136     Index nonzeros_;
    00138
    00142     Index negevals_;
    00144
    00149     bool initialized_;
    00152     bool pivtol_changed_;
    00156     bool refactorize_;
    00158
    00162     Number pivtol_;
    00164     Number pivtolmax_;
    00166     Number ma57_pre_alloc_;
    00169     bool warm_start_same_structure_;
    00171
    00176     double   wd_cntl_[5];
    00177     ma57int  wd_icntl_[20];
    00178
    00179     ma57int  wd_info_[40];
    00180     double   wd_rinfo_[20];
    00181
    00182     ma57int  wd_lkeep_;      /* LKEEP >= 5*N + NE + max(N,NE) + 42. */
    00183     ma57int *wd_keep_;
    00184
    00185     ma57int *wd_iwork_;      /* 5 * N. */
    00186
    00187     double  *wd_fact_;
    00188     ma57int  wd_lfact_;
    00189     ma57int *wd_ifact_;
    00190     ma57int  wd_lifact_;
    00191
    00192
    00194     double* a_;
    00196
    00203     ESymSolverStatus SymbolicFactorization(const Index* airn,
    00204                                            const Index* ajcn);
    00205
    00210     ESymSolverStatus Factorization(const Index* airn,
    00211                                    const Index* ajcn,
    00212                                    bool     check_NegEVals,
    00213                                    Index    numberOfNegEVals);
    00214
    00217     ESymSolverStatus Backsolve(Index     nrhs,
    00218                                double   *rhs_vals);
    00220   };
    00221
    00222 } // namespace Ipopt
    00223 #endif

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines