00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 #ifndef SUNDANCE_EVALMEDIATOR_H
00032 #define SUNDANCE_EVALMEDIATOR_H
00033 
00034 
00035 #include "SundanceDefs.hpp"
00036 #include "SundanceEvalVector.hpp"
00037 #include "SundanceObjectWithVerbosity.hpp"
00038 
00039 namespace Sundance
00040 {
00041 
00042 using namespace Sundance;
00043 
00044 class CoordExpr;
00045 class CellDiameterExpr;
00046 class CurveNormExpr;
00047 class CellVectorExpr;
00048 class MultiIndex; 
00049 class DiscreteFuncElement;
00050 class SparsitySuperset;
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 class AbstractEvalMediator 
00059 {
00060 public:
00061 
00062   AbstractEvalMediator(int verb=0);
00063 
00064 
00065   virtual ~AbstractEvalMediator(){;}
00066 
00067 
00068   void setVerb(int verb, int dfVerb) const 
00069     {verb_ = verb; dfVerb_=dfVerb;}
00070 
00071 
00072   int verb() const {return verb_;}
00073 
00074 
00075   int dfVerb() const {return dfVerb_;}
00076 
00077           
00078 
00079 
00080 
00081   virtual void evalCoordExpr(const CoordExpr* expr,
00082     RCP<EvalVector>& vec) const = 0 ;
00083 
00084 
00085 
00086   virtual void evalDiscreteFuncElement(const DiscreteFuncElement* expr,
00087     const Array<MultiIndex>& mi,
00088     Array<RCP<EvalVector> >& vec) const = 0 ;
00089 
00090 
00091 
00092   virtual void evalCellDiameterExpr(const CellDiameterExpr* expr,
00093     RCP<EvalVector>& vec) const = 0 ;
00094 
00095 
00096 
00097 
00098   virtual void evalCurveNormExpr(const CurveNormExpr* expr,
00099     RCP<EvalVector>& vec) const
00100     {
00101     TEUCHOS_TEST_FOR_EXCEPTION( true , std::runtime_error,
00102     " EvalMediator::evalCurveNormExpr , not possible with the current EvalMediator (only with CurveEvalMediator)");
00103     }
00104 
00105 
00106 
00107   virtual void evalCellVectorExpr(const CellVectorExpr* expr,
00108     RCP<EvalVector>& vec) const = 0 ;
00109 
00110 
00111 
00112   virtual void showResults(std::ostream& os,
00113          const RCP<SparsitySuperset>& sparsity,
00114          const Array<RCP<EvalVector> >& vecResults,
00115          const Array<double>& constantResults) const  ;
00116 private:
00117   mutable int verb_;
00118   mutable int dfVerb_;
00119 };
00120 }
00121 
00122 
00123 #endif