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_USERDEFFUNCTOR_H
00032 #define SUNDANCE_USERDEFFUNCTOR_H
00033
00034 #include "SundanceDefs.hpp"
00035 #include "SundanceMap.hpp"
00036 #include "SundanceMultiSet.hpp"
00037 #include "PlayaExceptions.hpp"
00038 #include "Teuchos_Array.hpp"
00039 #include "Teuchos_RefCountPtr.hpp"
00040
00041
00042
00043 namespace Sundance
00044 {
00045 using namespace Sundance;
00046 using namespace Teuchos;
00047
00048
00049
00050
00051 class EvalVector;
00052 class EvalManager;
00053
00054
00055
00056
00057
00058 class UserDefFunctor
00059 {
00060 public:
00061
00062 UserDefFunctor(const std::string& name, int domainDim, int rangeDim) ;
00063
00064
00065 virtual ~UserDefFunctor(){;}
00066
00067
00068 const std::string& name(int elemIndex) const {return elemNames_[elemIndex];}
00069
00070
00071 const std::string& name() const {return name_;}
00072
00073
00074
00075 virtual void evaluationCallback(int nPoints, int maxDiffOrder,
00076 const double** in,
00077 double** out) const = 0 ;
00078
00079
00080 virtual void eval0(const Array<double>& in, double* outVals) const ;
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 virtual void eval1(const Array<double>& in, double* outVals,
00091 double* outDerivs) const ;
00092
00093
00094
00095
00096 int domainDim() const {return domainDim_;}
00097
00098
00099 int rangeDim() const {return rangeDim_;}
00100
00101
00102 virtual int maxOrder() const = 0 ;
00103
00104
00105 void reset() const ;
00106
00107 private:
00108 const std::string name_;
00109 Array<string> elemNames_;
00110 const int domainDim_;
00111 const int rangeDim_;
00112 };
00113
00114
00115 }
00116
00117
00118 #endif