00001 #ifndef CONSTANTEXPR_H
00002 #define CONSTANTEXPR_H
00003
00004 #include "SundanceDefs.h"
00005
00006 #include "ExprBase.h"
00007
00008
00009 namespace Sundance
00010 {
00011
00012 using namespace TSF;
00013 using std::string;
00014
00015 using std::ostream;
00016
00017
00018
00019
00020
00021 class ConstantExpr : public ExprBase
00022 {
00023 public:
00024
00025
00026
00027 ConstantExpr(const double& value);
00028
00029
00030
00031 virtual double value() const ;
00032
00033 virtual void evaluate(const WorkSet& workSet,
00034 const QuadratureFamily& quadFamily,
00035 DenseSerialVector& result) const ;
00036
00037
00038 virtual void evaluate(const AbstractFunctionSpace& targetSpace, const TSFArray<Cell>& cells,
00039 const TSFArray<int>& cellIndices,
00040 const TSFArray<int>& dofIndices,
00041 const TSFArray<Point>& x,
00042 DenseSerialVector& values) const ;
00043
00044
00045 virtual ExprValue average(const Cell& cell) const ;
00046
00047
00048 virtual void derivative(const MultiIndex& d, Expr& result) const ;
00049
00050
00051 virtual void pow(const double& p, Expr& result) const ;
00052
00053
00054
00055
00056 virtual bool operator==(const Expr& other) const ;
00057
00058 virtual bool operator<(const Expr& other) const ;
00059
00060 virtual int sortPriority() const {return CONSTANTEXPR;}
00061
00062
00063
00064 virtual bool isConstant() const {return true;}
00065
00066 virtual bool isZero() const {return TSFUtils::chop(value_)==0;}
00067
00068
00069 virtual bool isSpatiallyConstant() const {return true;}
00070
00071
00072
00073 virtual ExprBase* clone() const ;
00074
00075 virtual void print(ostream& os, bool paren=false) const ;
00076
00077 virtual string toString(bool paren=false) const ;
00078
00079 virtual XMLObject toXML() const ;
00080
00081 private:
00082 double value_;
00083 };
00084
00085 }
00086 #endif