00001 #ifndef ESSENTIALBC_H 00002 #define ESSENTIALBC_H 00003 00004 #include "SundanceDefs.h" 00005 00006 #include "CellSet.h" 00007 #include "Expr.h" 00008 #include "QuadratureFamily.h" 00009 #include "GaussLegendre.h" 00010 00011 00012 namespace Sundance 00013 { 00014 00015 using namespace TSF; 00016 using std::string; 00017 00018 using std::ostream; 00019 00020 /** \ingroup UserLevelFE 00021 * EssentialBC represents a strong boundary condition. 00022 */ 00023 00024 class EssentialBC 00025 { 00026 public: 00027 /** name User-level methods */ 00028 //@{ 00029 /** */ 00030 EssentialBC(); 00031 /** */ 00032 EssentialBC(const Expr& expr, 00033 const QuadratureFamily& quad = new GaussLegendre(4)); 00034 /** */ 00035 EssentialBC(const CellSet& cellSet, const Expr& expr, 00036 const QuadratureFamily& quad = new GaussLegendre(4)); 00037 00038 /** */ 00039 EssentialBC& operator&=(const EssentialBC& other); 00040 /** */ 00041 EssentialBC operator&&(const EssentialBC& other) const ; 00042 00043 /** */ 00044 EssentialBC linearization(const Expr& u, const Expr& u0) const ; 00045 00046 /** */ 00047 EssentialBC variation(const Expr& u) const ; 00048 00049 //@} 00050 00051 /** \name Developer-only methods */ 00052 //@{ 00053 /** */ 00054 void print(ostream& os) const ; 00055 00056 /** */ 00057 const TSFArray<CellSet>& cellSets() const {return cellSets_;} 00058 /** */ 00059 const TSFArray<ExprArray>& expr() const {return expr_;} 00060 /** */ 00061 const TSFArray<TSFArray<QuadratureFamily> >& quad() const {return quad_;} 00062 //@} 00063 private: 00064 EssentialBC(const TSFArray<CellSet>& cellSets, 00065 const TSFArray<ExprArray>& expr, 00066 const TSFArray<TSFArray<QuadratureFamily> >& quad); 00067 00068 TSFArray<CellSet> cellSets_; 00069 TSFArray<ExprArray> expr_; 00070 TSFArray<TSFArray<QuadratureFamily> > quad_; 00071 }; 00072 00073 00074 /** \relates EssentialBC 00075 * write to stream 00076 */ 00077 inline ostream& operator<<(ostream& os, EssentialBC& i) 00078 { 00079 i.print(os); 00080 return os; 00081 } 00082 00083 } 00084 #endif