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_Include_Trilinos.hpp>
00015 
00016 #ifdef HAVE_FEI_EPETRA
00017 #include <fei_VectorTraits_Epetra.hpp>
00018 #include <fei_MatrixTraits_Epetra.hpp>
00019 #include <fei_Trilinos_Helpers.hpp>
00020 #include <fei_LinProbMgr_EpetraBasic.hpp>
00021 #endif
00022 
00023 #include <fei_Factory.hpp>
00024 #include <fei_ParameterSet.hpp>
00025 #include <fei_Reducer.hpp>
00026 #include <fei_Vector_Impl.hpp>
00027 #include <fei_Matrix_Impl.hpp>
00028 #include <fei_MatrixGraph_Impl2.hpp>
00029 #include <fei_SparseRowGraph.hpp>
00030 #include <fei_utils.hpp>
00031 
00032 #undef fei_file
00033 #define fei_file "fei_Factory_Trilinos.hpp"
00034 #include <fei_ErrMacros.hpp>
00035 
00036 /*** Implementation of an fei::Factory which creates instances that use Trilinos
00037      objects (Epetra and AztecOO) as the underlying objects.
00038 */
00039 class Factory_Trilinos : public fei::Factory {
00040  public:
00041   Factory_Trilinos(MPI_Comm comm);
00042 
00043   virtual ~Factory_Trilinos();
00044 
00046   fei::SharedPtr<fei::Factory> clone() const
00047     {
00048       fei::SharedPtr<fei::Factory> factory(new Factory_Trilinos(comm_));
00049       return(factory);
00050     }
00051 
00053     virtual int parameters(int numParams,
00054                            const char* const* paramStrings);
00055 
00057     virtual void parameters(const fei::ParameterSet& parameterset);
00058 
00060   fei::SharedPtr<fei::MatrixGraph>
00061     createMatrixGraph(fei::SharedPtr<fei::VectorSpace> rowSpace,
00062                       fei::SharedPtr<fei::VectorSpace> colSpace,
00063                       const char* name);
00064 
00066   fei::SharedPtr<fei::Vector>
00067     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace, int numVectors=1);
00068 
00073   fei::SharedPtr<fei::Vector>
00074     wrapVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00075                fei::SharedPtr<Epetra_MultiVector> multiVec);
00076 
00081   fei::SharedPtr<fei::Vector>
00082     wrapVector(fei::SharedPtr<fei::MatrixGraph> matGraph,
00083                fei::SharedPtr<Epetra_MultiVector> multiVec);
00084 
00086   fei::SharedPtr<fei::Vector>
00087     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00088       bool isSolutionVector,
00089       int numVectors=1);
00090 
00092   fei::SharedPtr<fei::Vector>
00093     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00094       int numVectors=1);
00095 
00097   fei::SharedPtr<fei::Vector>
00098     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00099       bool isSolutionVector,
00100       int numVectors=1);
00101 
00102   fei::SharedPtr<fei::Matrix>
00103     createMatrix(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
00104 
00105   fei::SharedPtr<fei::Solver> createSolver(const char* name=0);
00106 
00107   int getOutputLevel() const { return(outputLevel_); }
00108 
00109  private:
00110   void create_LinProbMgr(bool replace_if_already_created=false);
00111 
00112   MPI_Comm comm_;
00113 
00114   fei::SharedPtr<fei::Reducer> reducer_;
00115   fei::SharedPtr<fei::LinearProblemManager> lpm_epetrabasic_;
00116   bool use_lpm_epetrabasic_;
00117   bool useAmesos_;
00118   bool use_feiMatrixLocal_;
00119   bool blockEntryMatrix_;
00120   bool orderRowsWithLocalColsFirst_;
00121 
00122   int outputLevel_;
00123 };
00124 
00125 #endif // _Factory_Trilinos_hpp_
00126 

Generated on Wed May 12 21:30:41 2010 for FEI by  doxygen 1.4.7