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_FAD_DMFADTRAITS_HPP
00033 #define SACADO_FAD_DMFADTRAITS_HPP
00034
00035 #include "Sacado_Traits.hpp"
00036
00037
00038 namespace Sacado {
00039 namespace Fad {
00040 template <typename T1, typename T2> class DMFad;
00041 }
00042 }
00043
00044 namespace Sacado {
00045
00047 template <typename ValueT, typename ScalarT>
00048 struct Promote< Fad::DMFad<ValueT,ScalarT>, Fad::DMFad<ValueT,ScalarT> > {
00049 typedef Fad::DMFad<ValueT,ScalarT> type;
00050 };
00051
00053 template <typename ValueT, typename ScalarT, typename R>
00054 struct Promote< Fad::DMFad<ValueT,ScalarT>, R > {
00055 typedef typename ValueType< Fad::DMFad<ValueT,ScalarT> >::type value_type_l;
00056 typedef typename ValueType<R>::type value_type_r;
00057 typedef typename Promote<value_type_l,value_type_r>::type value_type;
00058
00059 typedef Fad::DMFad<value_type,ScalarT> type;
00060 };
00061
00063 template <typename L, typename ValueT, typename ScalarT>
00064 struct Promote< L, Fad::DMFad<ValueT, ScalarT> > {
00065 public:
00066
00067 typedef typename ValueType<L>::type value_type_l;
00068 typedef typename ValueType< Fad::DMFad<ValueT,ScalarT> >::type value_type_r;
00069 typedef typename Promote<value_type_l,value_type_r>::type value_type;
00070
00071 typedef Fad::DMFad<value_type,ScalarT> type;
00072 };
00073
00075 template <typename ValueT, typename ScalarT>
00076 struct ScalarType< Fad::DMFad<ValueT,ScalarT> > {
00077 typedef ScalarT type;
00078 };
00079
00081 template <typename ValueT, typename ScalarT>
00082 struct ValueType< Fad::DMFad<ValueT,ScalarT> > {
00083 typedef ValueT type;
00084 };
00085
00087 template <typename ValueT, typename ScalarT>
00088 struct ScalarValueType< Fad::DMFad<ValueT,ScalarT> > {
00089 typedef typename ScalarValueType< ValueT >::type type;
00090 };
00091
00093 template <typename ValueT, typename ScalarT>
00094 struct IsADType< Fad::DMFad<ValueT,ScalarT> > {
00095 static const bool value = true;
00096 };
00097
00099 template <typename ValueT, typename ScalarT>
00100 struct IsScalarType< Fad::DMFad<ValueT,ScalarT> > {
00101 static const bool value = false;
00102 };
00103
00105 template <typename ValueT, typename ScalarT>
00106 struct Value< Fad::DMFad<ValueT,ScalarT> > {
00107 typedef typename ValueType< Fad::DMFad<ValueT,ScalarT> >::type value_type;
00108 static const value_type& eval(const Fad::DMFad<ValueT,ScalarT>& x) {
00109 return x.val(); }
00110 };
00111
00112 }
00113
00114 #endif // SACADO_FAD_DMFADTRAITS_HPP