FEI Version of the Day
fei_Factory_Aztec.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_Aztec_hpp_
00010 #define _fei_Factory_Aztec_hpp_
00011 
00012 #include "fei_trilinos_macros.hpp"
00013 
00014 #include <fei_mpi.h>
00015 
00016 #include <fei_Aztec_LSVector.hpp>
00017 #include <fei_AztecDMSR_Matrix.hpp>
00018 
00019 #include <fei_Factory.hpp>
00020 #include <fei_ParameterSet.hpp>
00021 #include <fei_Reducer.hpp>
00022 #include <fei_Vector_Impl.hpp>
00023 #include <fei_Matrix_Impl.hpp>
00024 #include <fei_MatrixGraph_Impl2.hpp>
00025 #include <fei_SparseRowGraph.hpp>
00026 #include <fei_utils.hpp>
00027 
00028 #undef fei_file
00029 #define fei_file "fei_Factory_Aztec.hpp"
00030 #include <fei_ErrMacros.hpp>
00031 
00032 /*** Implementation of an fei::Factory which creates instances that use fei-Aztec
00033      objects as the underlying matrix and vector objects.
00034 */
00035 class Factory_Aztec : public fei::Factory {
00036  public:
00037   Factory_Aztec(MPI_Comm comm);
00038 
00039   virtual ~Factory_Aztec();
00040 
00042   fei::SharedPtr<fei::Factory> clone() const
00043     {
00044       fei::SharedPtr<fei::Factory> factory(new Factory_Aztec(comm_));
00045       return(factory);
00046     }
00047 
00049   int parameters(int numParams, const char* const* paramStrings);
00050 
00052   void parameters(const fei::ParameterSet& parameterset);
00053 
00054   fei::SharedPtr<fei::MatrixGraph>
00055     createMatrixGraph(fei::SharedPtr<fei::VectorSpace> rowSpace,
00056                       fei::SharedPtr<fei::VectorSpace> colSpace,
00057                       const char* name = NULL);
00058 
00060   fei::SharedPtr<fei::Vector>
00061     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace, int numVectors=1);
00062 
00064   fei::SharedPtr<fei::Vector>
00065     createVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00066       bool isSolutionVector,
00067       int numVectors=1);
00068 
00070   fei::SharedPtr<fei::Vector>
00071     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00072       int numVectors=1);
00073 
00075   fei::SharedPtr<fei::Vector>
00076     createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00077       bool isSolutionVector,
00078       int numVectors=1);
00079 
00080   fei::SharedPtr<fei::Matrix>
00081     createMatrix(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
00082 
00083   fei::SharedPtr<fei::Solver> createSolver(const char* name=0);
00084 
00085   int getOutputLevel() const { return(outputLevel_); }
00086 
00087  private:
00088   MPI_Comm comm_;
00089 
00090   fei::SharedPtr<fei::Reducer> reducer_;
00091   bool blockEntryMatrix_;
00092 
00093   int outputLevel_;
00094 };
00095 
00096 #endif // _Factory_Aztec_hpp_
00097 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends