FEI Version of the Day
fei_Factory_Trilinos.hpp
00001 /*--------------------------------------------------------------------*/
00002 /*    Copyright 2005 Sandia Corporation.                              */
00003 /*    Under the terms of Contract DE-AC04-94AL85000, there is a       */
00004 /*    non-exclusive license for use of this work by or on behalf      */
00005 /*    of the U.S. Government.  Export of this program may require     */
00006 /*    a license from the United States Government.                    */
00007 /*--------------------------------------------------------------------*/
00008 
00009 #ifndef _fei_Factory_Trilinos_hpp_
00010 #define _fei_Factory_Trilinos_hpp_
00011 
00012 #include "fei_trilinos_macros.hpp"
00013 
00014 #include <fei_mpi.h>
00015 
00016 #include <fei_Include_Trilinos.hpp>
00017 
00018 #ifdef HAVE_FEI_EPETRA
00019 #include <fei_VectorTraits_Epetra.hpp>
00020 #include <fei_MatrixTraits_Epetra.hpp>
00021 #include <fei_Trilinos_Helpers.hpp>
00022 #include <fei_LinProbMgr_EpetraBasic.hpp>
00023 #endif
00024 
00025 #include <fei_Factory.hpp>
00026 #include <fei_ParameterSet.hpp>
00027 #include <fei_Reducer.hpp>
00028 #include <fei_Vector_Impl.hpp>
00029 #include <fei_Matrix_Impl.hpp>
00030 #include <fei_MatrixGraph_Impl2.hpp>
00031 #include <fei_SparseRowGraph.hpp>
00032 #include <fei_utils.hpp>
00033 
00034 #undef fei_file
00035 #define fei_file "fei_Factory_Trilinos.hpp"
00036 #include <fei_ErrMacros.hpp>
00037 
00038 /*** Implementation of an fei::Factory which creates instances that use Trilinos
00039      objects (Epetra and AztecOO) as the underlying objects.
00040 */
00041 class Factory_Trilinos : public fei::Factory {
00042  public:
00043   Factory_Trilinos(MPI_Comm comm);
00044 
00045   virtual ~Factory_Trilinos();
00046 
00048   fei::SharedPtr<fei::Factory> clone() const
00049     {
00050       fei::SharedPtr<fei::Factory> factory(new Factory_Trilinos(comm_));
00051       return(factory);
00052     }
00053 
00055     virtual int parameters(int numParams,
00056                            const char* const* paramStrings);
00057 
00059     virtual void parameters(const fei::ParameterSet& parameterset);
00060 
00062   fei::SharedPtr<fei::MatrixGraph>
00063     createMatrixGraph(fei::SharedPtr<fei::VectorSpace> rowSpace,
00064                       fei::SharedPtr<fei::VectorSpace> colSpace,
00065                       const char* name);
00066 
00068   fei::SharedPtr<fei::Vector>
00069     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace, int numVectors=1);
00070 
00071 #ifdef HAVE_FEI_EPETRA
00072 
00076   fei::SharedPtr<fei::Vector>
00077     wrapVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00078                fei::SharedPtr<Epetra_MultiVector> multiVec);
00079 
00084   fei::SharedPtr<fei::Vector>
00085     wrapVector(fei::SharedPtr<fei::MatrixGraph> matGraph,
00086                fei::SharedPtr<Epetra_MultiVector> multiVec);
00087 #endif
00088 
00090   fei::SharedPtr<fei::Vector>
00091     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00092       bool isSolutionVector,
00093       int numVectors=1);
00094 
00096   fei::SharedPtr<fei::Vector>
00097     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00098       int numVectors=1);
00099 
00101   fei::SharedPtr<fei::Vector>
00102     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00103       bool isSolutionVector,
00104       int numVectors=1);
00105 
00106   fei::SharedPtr<fei::Matrix>
00107     createMatrix(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
00108 
00109   fei::SharedPtr<fei::Solver> createSolver(const char* name=0);
00110 
00111   int getOutputLevel() const { return(outputLevel_); }
00112 
00113  private:
00114   void create_LinProbMgr(bool replace_if_already_created=false);
00115 
00116   MPI_Comm comm_;
00117 
00118   fei::SharedPtr<fei::Reducer> reducer_;
00119   fei::SharedPtr<fei::LinearProblemManager> lpm_epetrabasic_;
00120   bool use_lpm_epetrabasic_;
00121   bool useAmesos_;
00122   bool use_feiMatrixLocal_;
00123   bool blockEntryMatrix_;
00124   bool orderRowsWithLocalColsFirst_;
00125 
00126   int outputLevel_;
00127 };
00128 
00129 #endif // _Factory_Trilinos_hpp_
00130 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends