00001 #ifndef VARIATIONALFEFUNC_H 00002 #define VARIATIONALFEFUNC_H 00003 00004 #include "SundanceDefs.h" 00005 00006 #include "SymbolicFunction.h" 00007 00008 00009 namespace Sundance 00010 { 00011 00012 using namespace TSF; 00013 using std::string; 00014 00015 using std::ostream; 00016 00017 /** 00018 * \ingroup UserLevelSymbolics 00019 * Expression subtype that can represent a variational function in 00020 * a finite-element problem 00021 */ 00022 00023 class TestFunction : public SymbolicFunction 00024 { 00025 public: 00026 /** \name User-level methods */ 00027 //@{ 00028 /** construct with a basis */ 00029 TestFunction(const BasisFamily& basis); 00030 /** construct with a basis and a name */ 00031 TestFunction(const BasisFamily& basis, const string& name); 00032 //@} 00033 virtual ~TestFunction(){;} 00034 00035 /** \name Developer-only methods */ 00036 //@{ 00037 /** identify self as a variation */ 00038 virtual bool isVariational() const {return true;} 00039 00040 /** */ 00041 virtual int sortPriority() const {return TESTFUNCTION;} 00042 00043 /** */ 00044 virtual ExprBase* clone() const ; 00045 00046 /** */ 00047 virtual bool getValidWeakForm(Expr& coeff, 00048 Expr& var, 00049 Expr& unk) const ; 00050 //@} 00051 protected: 00052 // nothing 00053 }; 00054 00055 00056 } 00057 #endif