MOOCHO (Single Doxygen Collection) Version of the Day
AbstractLinAlgPack_DirectSparseSolver.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef ALAP_DIRECT_SPARSE_SOLVER_H
00043 #define ALAP_DIRECT_SPARSE_SOLVER_H
00044 
00045 #include "AbstractLinAlgPack_Types.hpp"
00046 #include "AbstractLinAlgPack_MatrixConvertToSparse.hpp"
00047 #include "AbstractLinAlgPack_MatrixNonsing.hpp"
00048 #include "Teuchos_RCP.hpp"
00049 #include "Teuchos_AbstractFactory.hpp"
00050 
00051 namespace AbstractLinAlgPack {
00052 
00239 class DirectSparseSolver {
00240 public:
00241 
00244 
00251   class FactorizationStructure {
00252   public:
00254     virtual ~FactorizationStructure() {}
00255   };
00256 
00263   class BasisMatrix : public AbstractLinAlgPack::MatrixNonsing {
00264   public:
00266     typedef Teuchos::RCP<FactorizationStructure>  fact_struc_ptr_t;
00275     virtual const fact_struc_ptr_t&  get_fact_struc() const = 0;
00276   };
00277 
00279   typedef Teuchos::RCP<
00280     const Teuchos::AbstractFactory<BasisMatrix> >   basis_matrix_factory_ptr_t;
00281 
00283   class UnsymmetricRankDeficientException : public std::logic_error
00284   {public: UnsymmetricRankDeficientException (const std::string& what_arg)
00285   : std::logic_error(what_arg) {}};
00286 
00288   class IncompatibleMatrixStructureException : public std::logic_error
00289   {public: IncompatibleMatrixStructureException (const std::string& what_arg)
00290   : std::logic_error(what_arg) {}};
00291 
00293   class InvalidObjectType : public std::logic_error
00294   {public: InvalidObjectType (const std::string& what_arg)
00295   : std::logic_error(what_arg) {}};
00296 
00298   class NoCurrentBasisException : public std::logic_error
00299   {public: NoCurrentBasisException (const std::string& what_arg)
00300   : std::logic_error(what_arg) {}};
00301 
00303   class FactorizationFailure : public std::logic_error
00304   {public: FactorizationFailure (const std::string& what_arg)
00305   : std::logic_error(what_arg) {}};
00306 
00308   
00310   virtual ~DirectSparseSolver() {}
00311 
00314   virtual const basis_matrix_factory_ptr_t basis_matrix_factory() const = 0;
00315 
00326   virtual void estimated_fillin_ratio( value_type estimated_fillin_ratio ) = 0;
00327 
00489   virtual void analyze_and_factor(
00490     const AbstractLinAlgPack::MatrixConvertToSparse   &A
00491     ,DenseLinAlgPack::IVector                            *row_perm
00492     ,DenseLinAlgPack::IVector                            *col_perm
00493     ,size_type                                      *rank
00494     ,BasisMatrix                                    *basis_matrix
00495     ,std::ostream                                   *out            = NULL
00496     ) = 0;
00497   
00580   virtual void factor(
00581     const AbstractLinAlgPack::MatrixConvertToSparse   &A
00582     ,BasisMatrix                                    *basis_matrix
00583     ,const BasisMatrix::fact_struc_ptr_t            &fact_struc    = Teuchos::null
00584     ,std::ostream                                   *out           = NULL
00585     ) = 0;
00586 
00594   virtual const BasisMatrix::fact_struc_ptr_t& get_fact_struc() const = 0;
00595 
00602   virtual void set_uninitialized() = 0;
00603 
00604 };  // end class DirectSparseSolver 
00605 
00606 } // end namespace AbstractLinAlgPack 
00607 
00608 #endif  // ALAP_DIRECT_SPARSE_SOLVER_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines