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_POINTWISEUSERDEFFUNCTOR_H
00032 #define SUNDANCE_POINTWISEUSERDEFFUNCTOR_H
00033 
00034 #include "SundanceDefs.hpp"
00035 #include "SundanceMap.hpp"
00036 #include "SundanceUserDefFunctor.hpp"
00037 #include "SundanceMultiSet.hpp"
00038 #include "PlayaExceptions.hpp"
00039 #include "Teuchos_Array.hpp"
00040 #include "Teuchos_RefCountPtr.hpp"
00041 
00042 
00043 
00044 namespace Sundance
00045 {
00046   using namespace Sundance;
00047   using namespace Teuchos;
00048 
00049   
00050   
00051 
00052 
00053 
00054 
00055 
00056 
00057   class PointwiseUserDefFunctor0 : public UserDefFunctor
00058     {
00059     public:
00060 
00061       PointwiseUserDefFunctor0(const std::string& name, int domainDim, int rangeDim) ;
00062 
00063 
00064       virtual ~PointwiseUserDefFunctor0(){;}
00065 
00066 
00067       void evaluationCallback(int nPoints, int maxDiffOrder,
00068                               const double** in,
00069                               double** out) const ;
00070 
00071 
00072       virtual void eval0(const double* in, double* out) const = 0 ;
00073 
00074 
00075       virtual int maxOrder() const {return 0;}
00076 
00077     private:
00078     };
00079 
00080 
00081 
00082 
00083 
00084 
00085 
00086   class PointwiseUserDefFunctor1 : public PointwiseUserDefFunctor0
00087     {
00088     public:
00089 
00090       PointwiseUserDefFunctor1(const std::string& name, int domainDim, int rangeDim) ;
00091 
00092 
00093       virtual ~PointwiseUserDefFunctor1(){;}
00094 
00095 
00096       void evaluationCallback(int nPoints, int maxDiffOrder,
00097                               const double** in,
00098                               double** out) const ;
00099 
00100 
00101       virtual void eval0(const double* in, double* out) const ;
00102 
00103 
00104       virtual void eval1(const double* in, double* outVals, double* outDerivs) const = 0 ;
00105 
00106 
00107       virtual int maxOrder() const {return 1;}
00108 
00109     private:
00110     };
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118   class PointwiseUserDefFunctor2 : public PointwiseUserDefFunctor1
00119     {
00120     public:
00121 
00122       PointwiseUserDefFunctor2(const std::string& name, int domainDim, int rangeDim) ;
00123 
00124 
00125       virtual ~PointwiseUserDefFunctor2(){;}
00126 
00127 
00128       void evaluationCallback(int nPoints, int maxDiffOrder,
00129                               const double** in,
00130                               double** out) const ;
00131 
00132 
00133       virtual void eval0(const double* in, double* out) const ;
00134 
00135 
00136       virtual void eval1(const double* in, double* outVals, double* outDerivs) const ;
00137 
00138       virtual void eval2(const double* in, double* outVals, double* outDerivs,
00139                          double* outDerivs2) const = 0 ;
00140 
00141 
00142       virtual int maxOrder() const {return 2;}
00143 
00144     private:
00145     };
00146 
00147 
00148 }
00149 
00150 
00151 #endif