fei_LinearSystem.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_LinearSystem_hpp_
00010 #define _fei_LinearSystem_hpp_
00011 
00012 #include <fei_macros.hpp>
00013 #include <fei_SharedPtr.hpp>
00014 #include <fei_MatrixGraph.hpp>
00015 #include <fei_Matrix.hpp>
00016 #include <fei_Vector.hpp>
00017 #include <fei_DirichletBCManager.hpp>
00018 
00019 namespace fei {
00020   class Factory;
00021   class ParameterSet;
00022 
00026   class LinearSystem {
00027   public:
00029     class Factory {
00030     public:
00032       virtual ~Factory(){}
00033 
00035       virtual fei::SharedPtr<fei::LinearSystem>
00036   createLinearSystem(fei::SharedPtr<fei::MatrixGraph>& matrixGraph);
00037     };
00038 
00040     LinearSystem(fei::SharedPtr<fei::MatrixGraph>& matrixGraph);
00041 
00043     virtual ~LinearSystem();
00044 
00051     virtual int parameters(int numParams,
00052                            const char* const* paramStrings) = 0;
00053 
00056     virtual int parameters(const fei::ParameterSet& params) = 0;
00057 
00059     virtual void setMatrix(fei::SharedPtr<fei::Matrix>& matrix);
00060 
00062     virtual fei::SharedPtr<fei::Matrix> getMatrix()
00063       { return(matrix_); }
00064 
00066     virtual fei::SharedPtr<const fei::Matrix> getMatrix() const
00067       { fei::SharedPtr<const fei::Matrix> const_mat(matrix_);
00068         return(const_mat); }
00069 
00071     virtual void setRHS(fei::SharedPtr<fei::Vector>& rhs)
00072       { rhs_ = rhs; }
00073 
00075     virtual fei::SharedPtr<fei::Vector> getRHS()
00076       { return(rhs_); }
00077 
00079     virtual fei::SharedPtr<const fei::Vector> getRHS() const
00080       { fei::SharedPtr<const fei::Vector> const_rhs(rhs_);
00081         return(const_rhs); }
00082 
00084     virtual void setSolutionVector(fei::SharedPtr<fei::Vector>& soln)
00085       { soln_ = soln; }
00086 
00088     virtual fei::SharedPtr<fei::Vector> getSolutionVector()
00089       { return(soln_); }
00090 
00092     virtual fei::SharedPtr<const fei::Vector> getSolutionVector() const
00093       { fei::SharedPtr<const fei::Vector> const_soln(soln_);
00094       return(const_soln); }
00095 
00098     virtual int putAttribute(const char* name,
00099                              void* attribute);
00100 
00102     virtual int getAttribute(const char* name,
00103                              void*& attribute);
00104 
00120     virtual int loadEssentialBCs(int numIDs,
00121                                  const int* IDs,
00122                                  int idType,
00123                                  int fieldID,
00124                                  int offsetIntoField,
00125                                  const double* prescribedValues);
00126 
00143     virtual int loadEssentialBCs(int numIDs,
00144                                  const int* IDs,
00145                                  int idType,
00146                                  int fieldID,
00147                                  const int* offsetsIntoField,
00148                                  const double* prescribedValues);
00149 
00158     virtual int loadLagrangeConstraint(int constraintID,
00159                const double *weights,
00160                double rhsValue) = 0;
00161 
00171     virtual int loadPenaltyConstraint(int constraintID,
00172               const double *weights,
00173               double penaltyValue,
00174               double rhsValue) = 0;
00175 
00179     virtual int loadComplete(bool applyBCs=true,
00180                              bool globalAssemble=true) = 0;
00181 
00185     virtual int setBCValuesOnVector(fei::Vector* vector) = 0;
00186 
00190     virtual bool eqnIsEssentialBC(int globalEqnIndex) const = 0;
00191 
00196     virtual void getEssentialBCs(std::vector<int>& bcEqns,
00197                                  std::vector<double>& bcVals) const = 0;
00198 
00202     virtual void getConstrainedEqns(std::vector<int>& crEqns) const = 0;
00203 
00204    protected:
00205     fei::SharedPtr<fei::Matrix> matrix_;
00206     fei::SharedPtr<fei::Vector> soln_;
00207     fei::SharedPtr<fei::Vector> rhs_;
00208 
00209     fei::SharedPtr<fei::MatrixGraph> matrixGraph_;
00210     fei::DirichletBCManager* dbcManager_;
00211 
00212     std::vector<char*> attributeNames_;
00213     std::vector<void*> attributes_;
00214   };//class LinearSystem
00215 }//namespace fei
00216 
00217 #endif // _fei_LinearSystem_hpp_

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