MOOCHO (Single Doxygen Collection) Version of the Day
AbstractLinAlgPack_DirectSparseSolverSuperLU.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 #ifdef SPARSE_SOLVER_PACK_USE_SUPERLU
00043 
00044 #ifndef DIRECT_SPARSE_SOLVER_SUPERLU_H
00045 #define DIRECT_SPARSE_SOLVER_SUPERLU_H
00046 
00047 #include <valarray>
00048 #include <vector>
00049 #include <string>
00050 
00051 #include "AbstractLinAlgPack_DirectSparseSolverImp.hpp"
00052 #include "AbstractLinAlgPack_SuperLUSolver.hpp"
00053 #include "DenseLinAlgPack_DVectorClass.hpp"
00054 #include "DenseLinAlgPack_IVector.hpp"
00055 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00056 
00057 namespace AbstractLinAlgPack {
00058 
00063 class DirectSparseSolverSuperLU : public DirectSparseSolverImp {
00064 public:
00065 
00068 
00069   // ToDo: Fill these in!
00070 
00072 
00075 
00077   DirectSparseSolverSuperLU();
00078 
00080 
00083 
00085   const basis_matrix_factory_ptr_t basis_matrix_factory() const;
00087   void estimated_fillin_ratio( value_type estimated_fillin_ratio );
00088 
00090 
00091 protected:
00092 
00095 
00098   class BasisMatrixSuperLU : public BasisMatrixImp {
00099   public:
00100 
00103 
00105     Teuchos::RCP<BasisMatrixImp> create_matrix() const;
00107     void V_InvMtV(
00108       VectorMutable* v_lhs, BLAS_Cpp::Transp trans_rhs1
00109       ,const Vector& v_rhs2) const ;
00110     
00112 
00113   }; // end class BasisMatrixSuperLU
00114 
00117   class FactorizationStructureSuperLU : public FactorizationStructure {
00118   public:
00119     friend class DirectSparseSolverSuperLU;
00120     friend class BasisMatrixSuperLU;
00121   private:
00122     Teuchos::RCP<SuperLUPack::SuperLUSolver>
00123       superlu_solver_;
00124     Teuchos::RCP<SuperLUPack::SuperLUSolver::FactorizationStructure>
00125       fact_struct_;
00126     FactorizationStructureSuperLU();
00127   }; // end class FactorizationStructureSuperLU
00128 
00131   class FactorizationNonzerosSuperLU : public FactorizationNonzeros {
00132   public:
00133     friend class DirectSparseSolverSuperLU;
00134     friend class BasisMatrixSuperLU;
00135   private:
00136     Teuchos::RCP<SuperLUPack::SuperLUSolver::FactorizationNonzeros>
00137       fact_nonzeros_;
00138   }; // end class FactorizationNonzerosSuperLU
00139 
00141 
00144 
00146   const Teuchos::RCP<FactorizationStructure> create_fact_struc() const;
00148   const Teuchos::RCP<FactorizationNonzeros> create_fact_nonzeros() const;
00150   void imp_analyze_and_factor(
00151     const AbstractLinAlgPack::MatrixConvertToSparse   &A
00152     ,FactorizationStructure                         *fact_struc
00153     ,FactorizationNonzeros                          *fact_nonzeros
00154     ,DenseLinAlgPack::IVector                            *row_perm
00155     ,DenseLinAlgPack::IVector                            *col_perm
00156     ,size_type                                      *rank
00157     ,std::ostream                                   *out
00158     );
00160   void imp_factor(
00161     const AbstractLinAlgPack::MatrixConvertToSparse   &A
00162     ,const FactorizationStructure                   &fact_struc
00163     ,FactorizationNonzeros                          *fact_nonzeros
00164     ,std::ostream                                   *out
00165     );
00166 
00168 
00169 private:
00170 
00171   // /////////////////////////////////
00172   // Private data members
00173 
00174   // ////////////////////////////////
00175   // Private member functions
00176 
00177 };  // end class DirectSparseSolverSuperLU 
00178 
00179 // ////////////////////////////////////////
00180 // Inline members
00181 
00182 } // end namespace AbstractLinAlgPack 
00183 
00184 #endif  // DIRECT_SPARSE_SOLVER_SUPERLU_H
00185 
00186 #endif // SPARSE_SOLVER_PACK_USE_SUPERLU
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines