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
00032 #ifndef SACADO_ELRFAD_GENERALFADEXPR_HPP
00033 #define SACADO_ELRFAD_GENERALFADEXPR_HPP
00034
00035 #include "Sacado_ELRFad_GeneralFad.hpp"
00036
00037 namespace Sacado {
00038
00039 namespace ELRFad {
00040
00042
00047 template <typename T, typename Storage>
00048 class Expr< GeneralFad<T,Storage> > : public GeneralFad<T,Storage> {
00049
00050 public:
00051
00053 typedef T value_type;
00054
00056 typedef GeneralFad<T,Storage> base_expr_type;
00057
00059 static const int num_args = 1;
00060
00062 Expr() :
00063 GeneralFad<T,Storage>() {}
00064
00066
00069 Expr(const T & x) :
00070 GeneralFad<T,Storage>(x) {}
00071
00073
00076 Expr(const int sz, const T & x) :
00077 GeneralFad<T,Storage>(sz,x) {}
00078
00080
00085 Expr(const int sz, const int i, const T & x) :
00086 GeneralFad<T,Storage>(sz,i,x) {}
00087
00089 Expr(const Expr& x) :
00090 GeneralFad<T,Storage>(x) {}
00091
00093 template <typename S> Expr(const Expr<S>& x) :
00094 GeneralFad<T,Storage>(x) {}
00095
00097 ~Expr() {}
00098
00100 void computePartials(const T& bar, T partials[]) const {
00101 partials[0] = bar;
00102 }
00103
00105 void getTangents(int i, T dots[]) const {
00106 if (i<this->s_.size())
00107 dots[0] = this->s_.dx_[i];
00108 else
00109 dots[0] = 0.0;
00110 }
00111
00113 template <int Arg>
00114 bool isActive() const { return this->s_.size() > 0; }
00115
00117 template <int Arg>
00118 T getTangent(int i) const { return this->s_.dx_[i]; }
00119
00120 };
00121
00123 template <typename T, typename S>
00124 struct ExprPromote< GeneralFad<T,S>, T > {
00125 typedef GeneralFad<T,S> type;
00126 };
00127
00129 template <typename T, typename S>
00130 struct ExprPromote< T, GeneralFad<T,S> > {
00131 typedef GeneralFad<T,S> type;
00132 };
00133
00134 }
00135
00136 }
00137
00138 #include "Sacado_ELRFad_Ops.hpp"
00139
00140 #endif // SACADO_ELRFAD_GENERALFADEXPR_HPP