Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Examples  

ProductExpr.h

Go to the documentation of this file.
00001 #ifndef PRODUCTEXPR_H
00002 #define PRODUCTEXPR_H
00003 
00004 #include "SundanceDefs.h"
00005 
00006 #include "Expr.h"
00007 #include "TSFArray.h"
00008 #include "TermListExpr.h"
00009 
00010 
00011 namespace Sundance
00012 {
00013 
00014   using namespace TSF;
00015   using std::string;
00016 
00017   using std::ostream;
00018 
00019   /** \ingroup LowLevelSymbolics
00020    * A product of several expressions with a possible constant factor.
00021    */
00022 
00023   class ProductExpr : public TermListExpr
00024     {
00025     public:
00026       /** \name Developer-only methods */
00027       //@{
00028       /** no detailed doc */
00029       ProductExpr(const Expr& e1, const Expr& e2, const double& sign);
00030       /** */
00031       ProductExpr(const double& constant, const Expr& term, const double& factor);
00032       virtual ~ProductExpr();
00033 
00034       // methods derived from ExprBase
00035 
00036       /** return value */
00037       virtual double value() const ;
00038 
00039       /** */
00040       virtual void evaluate(const WorkSet& workSet,
00041                             const QuadratureFamily& quadFamily,
00042                             DenseSerialVector& result) const ;
00043 
00044       /** */
00045       virtual void evaluate(const AbstractFunctionSpace& targetSpace, const TSFArray<Cell>& cells,
00046                             const TSFArray<int>& cellIndices,
00047                             const TSFArray<int>& dofIndices,
00048                             const TSFArray<Point>& x,
00049                             DenseSerialVector& values) const ;
00050 
00051       /** */
00052       virtual ExprValue average(const Cell& cell) const ;
00053 
00054       /** */
00055       virtual void derivative(const MultiIndex& d, Expr& result) const ;
00056       /** */
00057       virtual void pow(const double& p, Expr& resulit) const ;
00058 
00059       /** */
00060       virtual bool operator==(const Expr& other) const ;
00061       /** */
00062       virtual bool operator<(const Expr& other) const ;
00063       /** */
00064       virtual int sortPriority() const {return PRODUCTEXPR;}
00065 
00066       /** */
00067       virtual ExprBase* clone() const ;
00068 
00069       /** */
00070       virtual bool isProductExpr() const {return true;}
00071 
00072       /** */
00073       virtual void print(ostream& os, bool paren = false) const ;
00074       /** */
00075       virtual string toString(bool paren=false) const ;
00076       /** */
00077       virtual XMLObject toXML() const ;
00078 
00079       /** */
00080       virtual void extractPrefactor(double& prefactor, Expr& result) const ;
00081 
00082       /** */
00083       virtual bool getValidWeakForm(Expr& coeff,
00084                                     Expr& var,
00085                                     Expr& unk) const ;
00086       // TermListExpr methods
00087       /** */
00088       virtual void invert();
00089       /** */
00090       Expr times(const Expr& expr, int sign) ;
00091       /** */
00092       void checkForCancellations(Expr& result);
00093       /** */
00094       virtual double constant() const {return constant_;}
00095 
00096       /** */
00097       virtual void differential(const Expr& u, const Expr& du,
00098                                 Expr& result) const ;
00099 
00100       /** */
00101       virtual void substitute(const Expr& u, const Expr& du,
00102                               Expr& result) const ;
00103       //@}
00104     private:
00105       // n-th order differentiation is done by iterating first derivatives.
00106       // The first derivatives are done with this private method.
00107       /** */
00108       Expr firstDerivative(int dir) const ;
00109 
00110       double constant_;
00111     };
00112 
00113 
00114 
00115 }
00116 #endif

Contact:
Kevin Long (krlong@ca.sandia.gov)


Documentation generated by