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_EVALCONTEXT_H
00032 #define SUNDANCE_EVALCONTEXT_H
00033 
00034 
00035 #include "SundanceDefs.hpp"
00036 #include "SundanceRegionQuadCombo.hpp"
00037 #include "SundanceSet.hpp"
00038 #include "Teuchos_Utils.hpp"
00039 #include <algorithm>
00040 
00041 
00042 namespace Sundance
00043 {
00044 using namespace Teuchos;
00045 using namespace Sundance;
00046 using Sundance::Set;
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 class EvalContext
00065 {
00066 public:
00067 
00068   EvalContext() : setupVerbosity_(0), evalSetupVerbosity_(0), 
00069                   maxDiffOrder_(0),
00070                   data_() {;}
00071 
00072 
00073 
00074   EvalContext(const RegionQuadCombo& rqc,
00075     const Set<int>& needsDiffOrder,
00076     int contextID)
00077     : setupVerbosity_(0), evalSetupVerbosity_(0),
00078       maxDiffOrder_(*std::max_element(needsDiffOrder.begin(), needsDiffOrder.end())),
00079       data_(rcp(new OrderedTriple<Set<int>, int, RegionQuadCombo>(needsDiffOrder, contextID, rqc)))
00080     {}
00081 
00082 
00083 
00084   void setSetupVerbosity(int v) const {setupVerbosity_ = v;}
00085 
00086 
00087 
00088   int setupVerbosity() const {return setupVerbosity_;}
00089 
00090 
00091 
00092   void setEvalSetupVerbosity(int v) const {evalSetupVerbosity_ = v;}
00093 
00094 
00095 
00096   int evalSetupVerbosity() const {return evalSetupVerbosity_;}
00097 
00098 
00099   bool operator<(const EvalContext& other) const 
00100     {return *data_ < *other.data_;}
00101           
00102 
00103   std::string toString() const
00104     {return "EvalContext[diffOrder=" 
00105         + Teuchos::toString(data_->a())
00106         + ", id=" 
00107         + Teuchos::toString(data_->b())
00108         + ", " + data_->c().toString() + "]";}
00109           
00110 
00111   std::string brief() const
00112     {return "EvalContext[diffOrder=" 
00113         + Teuchos::toString(data_->a())
00114         + ", id=" 
00115         + Teuchos::toString(data_->b())
00116         + "]";}
00117 
00118 
00119   int topLevelDiffOrder() const {return maxDiffOrder_;}
00120 
00121 
00122 
00123   bool needsDerivOrder(int order) const {return data_->a().contains(order);}
00124   
00125 
00126 
00127   static int nextID() {static int rtn=0; return rtn++;}
00128 private:
00129   mutable int setupVerbosity_;
00130   mutable int evalSetupVerbosity_;
00131   int maxDiffOrder_;
00132   RCP<OrderedTriple<Set<int>, int, RegionQuadCombo> > data_;
00133 };
00134 
00135 }
00136 
00137 
00138 namespace std
00139 {
00140 
00141 inline ostream& operator<<(std::ostream& os, 
00142   const Sundance::EvalContext& c)
00143 {
00144   os << c.toString();
00145   return os;
00146 }
00147 }
00148 
00149 namespace Teuchos
00150 {
00151 
00152 inline std::string toString(const Sundance::EvalContext& h)
00153 {return h.toString();}
00154 
00155 }
00156 
00157 
00158 #endif