Ipopt  trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
IpWsmpSolverInterface.hpp
Go to the documentation of this file.
00001 // Copyright (C) 2005, 2010 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:  Carl Laird, Andreas Waechter     IBM    2005-03-17
00008 
00009 
00010 #ifndef __IPWSMPSOLVERINTERFACE_HPP__
00011 #define __IPWSMPSOLVERINTERFACE_HPP__
00012 
00013 #include "IpSparseSymLinearSolverInterface.hpp"
00014 
00015 //#define PARDISO_MATCHING_PREPROCESS
00016 
00017 namespace Ipopt
00018 {
00019 
00024   class WsmpSolverInterface: public SparseSymLinearSolverInterface
00025   {
00026   public:
00030     WsmpSolverInterface();
00031 
00033     virtual ~WsmpSolverInterface();
00035 
00037     bool InitializeImpl(const OptionsList& options,
00038                         const std::string& prefix);
00039 
00040 
00044     virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
00045         const Index *ia,
00046         const Index *ja);
00047 
00050     virtual double* GetValuesArrayPtr();
00051 
00053     virtual ESymSolverStatus MultiSolve(bool new_matrix,
00054                                         const Index* ia,
00055                                         const Index* ja,
00056                                         Index nrhs,
00057                                         double* rhs_vals,
00058                                         bool check_NegEVals,
00059                                         Index numberOfNegEVals);
00060 
00064     virtual Index NumberOfNegEVals() const;
00066 
00067     //* @name Options of Linear solver */
00069 
00071     virtual bool IncreaseQuality();
00072 
00076     virtual bool ProvidesInertia() const
00077     {
00078       return true;
00079     }
00083     EMatrixFormat MatrixFormat() const
00084     {
00085       return CSR_Format_1_Offset;
00086     }
00088 
00091     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00093 
00096     virtual bool ProvidesDegeneracyDetection() const;
00097 
00100     virtual ESymSolverStatus DetermineDependentRows(const Index* ia,
00101         const Index* ja,
00102         std::list<Index>& c_deps);
00103 
00104   private:
00114     WsmpSolverInterface(const WsmpSolverInterface&);
00115 
00117     void operator=(const WsmpSolverInterface&);
00119 
00123     Index dim_;
00124 
00126     Index nonzeros_;
00127 
00129     double* a_;
00130 
00131 #ifdef PARDISO_MATCHING_PREPROCESS
00132 
00135     ipfint* ia2;
00136     ipfint* ja2;
00137     double* a2_;
00138     ipfint* perm2;
00139     double* scale2;
00141 
00142 #endif
00143 
00145 
00149     Index wsmp_num_threads_;
00151     Number wsmp_pivtol_;
00153     Number wsmp_pivtolmax_;
00155     Index wsmp_scaling_;
00158     Number wsmp_singularity_threshold_;
00160     Index wsmp_write_matrix_iteration_;
00163     bool skip_inertia_check_;
00166     bool wsmp_no_pivoting_;
00168 
00170     Index matrix_file_number_;
00171 
00175     Index negevals_;
00177 
00182     bool initialized_;
00185     bool printed_num_threads_;
00189     bool pivtol_changed_;
00192     bool have_symbolic_factorization_;
00195     Index factorizations_since_recomputed_ordering_;
00197 
00201     ipfint* IPARM_;
00203     double* DPARM_;
00205     ipfint* PERM_;
00207     ipfint* INVP_;
00209     ipfint* MRP_;
00211 
00216     ESymSolverStatus SymbolicFactorization(const Index* ia, const Index* ja);
00217 
00219     ESymSolverStatus InternalSymFact(const Index* ia, const Index* ja,
00220                                      Index numberOfNegEVals);
00221 
00224     ESymSolverStatus Factorization(const Index* ia,
00225                                    const Index* ja,
00226                                    bool check_NegEVals,
00227                                    Index numberOfNegEVals);
00228 
00231     ESymSolverStatus Solve(const Index* ia,
00232                            const Index* ja,
00233                            Index nrhs,
00234                            double *rhs_vals);
00236   };
00237 
00238 } // namespace Ipopt
00239 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines