snl_fei_Factory.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 _snl_fei_Factory_hpp_
00010 #define _snl_fei_Factory_hpp_
00011 
00012 #include <fei_macros.hpp>
00013 #include <fei_Factory.hpp>
00014 #include <fei_VectorSpace.hpp>
00015 #include <snl_fei_Broker_FEData.hpp>
00016 #include <snl_fei_Broker_LinSysCore.hpp>
00017 #include <fei_Solver.hpp>
00018 #include <fei_LinearSystemCore.hpp>
00019 #include <fei_LibraryWrapper.hpp>
00020 #include <fei_utils.hpp>
00021 #include <fei_Reducer.hpp>
00022 #include <fei_MatrixReducer.hpp>
00023 #include <fei_VectorReducer.hpp>
00024 #include <fei_ParameterSet.hpp>
00025 #include <fei_MatrixGraph_Impl2.hpp>
00026 
00027 #undef fei_file
00028 #define fei_file "snl_fei_Factory.hpp"
00029 #include <fei_ErrMacros.hpp>
00030 
00031 namespace snl_fei {
00032 
00035   class Factory : public virtual fei::Factory {
00036   public:
00038     Factory(MPI_Comm comm, fei::SharedPtr<LibraryWrapper> wrapper);
00039 
00041     Factory(MPI_Comm comm, fei::SharedPtr<LinearSystemCore> lsc);
00042 
00044     Factory(MPI_Comm comm,
00045             fei::SharedPtr<FiniteElementData> feData, int nodeIDType);
00046 
00048     virtual ~Factory();
00049 
00050 
00052     fei::SharedPtr<fei::Factory> clone() const;
00053 
00055     virtual void parameters(const fei::ParameterSet& parameterset);
00056 
00059     virtual fei::SharedPtr<fei::MatrixGraph>
00060       createMatrixGraph(fei::SharedPtr<fei::VectorSpace> rowSpace,
00061                         fei::SharedPtr<fei::VectorSpace> columnSpace,
00062                         const char* name);
00063 
00065     virtual fei::SharedPtr<fei::Vector>
00066       createVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00067        int numVectors=1);
00068 
00070     virtual fei::SharedPtr<fei::Vector> createVector(fei::SharedPtr<fei::VectorSpace> vecSpace,
00071                  bool isSolutionVector,
00072                  int numVectors=1);
00073 
00075     virtual fei::SharedPtr<fei::Vector>
00076       createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00077                    int numVectors=1);
00078 
00080     virtual fei::SharedPtr<fei::Vector>
00081       createVector(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00082          bool isSolutionVector,
00083          int numVectors=1);
00084 
00086     virtual fei::SharedPtr<fei::Matrix> createMatrix(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
00087 
00090     virtual fei::SharedPtr<fei::LinearSystem>
00091       createLinearSystem(fei::SharedPtr<fei::MatrixGraph>& matrixGraph);
00092 
00094     virtual fei::SharedPtr<fei::Solver> createSolver(const char* name=0);
00095 
00097     fei::SharedPtr<LibraryWrapper> get_LibraryWrapper() const;
00098 
00099     int getOutputLevel() const;
00100 
00101   private:
00102     int createBroker(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
00103 
00104     int createBroker_LinSysCore(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00105         fei::SharedPtr<LinearSystemCore> lsc);
00106 
00107     int createBroker_FEData(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
00108           fei::SharedPtr<FiniteElementData> feData);
00109 
00110     MPI_Comm comm_;
00111     fei::SharedPtr<snl_fei::Broker> broker_;
00112     fei::SharedPtr<fei::MatrixGraph> matrixGraph_;
00113     fei::SharedPtr<fei::Reducer> reducer_;
00114 
00115     int nodeIDType_;
00116 
00117     fei::SharedPtr<LinearSystemCore> lsc_;
00118     fei::SharedPtr<FiniteElementData> feData_;
00119     fei::SharedPtr<LibraryWrapper> wrapper_;
00120     int outputLevel_;
00121     bool blockMatrix_;
00122   };//class Factory
00123 }//namespace snl_fei
00124 
00125 #endif // _snl_fei_Factory_hpp_
00126 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends
Generated on Wed Apr 13 10:08:24 2011 for FEI by  doxygen 1.6.3