Ipopt  trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
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$
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 Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines