32
32
#ifndef FEAPP_TEMPLATETYPES_HPP
33
33
#define FEAPP_TEMPLATETYPES_HPP
35
// Includ the MPL vector
35
#include "Sacado_ConfigDefs.h"
37
// Conditionally enable Stokhos stochastic Galerkin expansions
38
#ifdef HAVE_SACADO_STOKHOS
44
// Include the MPL vector
36
45
#include "Sacado_mpl_vector.hpp"
38
47
// Include all of our AD types
39
48
#include "Sacado_MathFunctions.hpp"
40
#include "Sacado_Fad_DFad.hpp"
50
//#include "Sacado_CacheFad_DFad.hpp"
52
#include "Sacado_PCE_OrthogPoly.hpp"
55
// Include ScalarParameterLibrary to specialize traits
56
#include "Sacado_ScalarParameterLibrary.hpp"
42
58
// Typedef AD types to standard names
43
59
typedef double RealType;
44
60
typedef Sacado::Fad::DFad<double> FadType;
46
// Define which types we are using
50
// Conditionally enable Stokhos stochastic Galerkin expansions
51
#ifdef HAVE_SACADO_STOKHOS
52
#include "Sacado_PCE_OrthogPoly.hpp"
53
#include "Stokhos_HermiteEBasis.hpp"
54
62
typedef Sacado::PCE::OrthogPoly<double> SGType;
55
63
typedef Sacado::Fad::DFad< Sacado::PCE::OrthogPoly<double> > SGFadType;
57
#define SGFAD_ACTIVE 1
66
// Set up evaluation traits
70
struct ResidualType {};
71
struct JacobianType {};
72
struct TangentType {};
74
struct SGResidualType {};
75
struct SGJacobianType {};
79
struct EvaluationTraits {
80
template <class EvalT> struct apply {};
83
template <> struct EvaluationTraits::apply<ResidualType> {
84
typedef RealType type; };
85
template <> struct EvaluationTraits::apply<JacobianType> {
86
typedef FadType type; };
87
template <> struct EvaluationTraits::apply<TangentType> {
88
typedef FadType type; };
90
template <> struct EvaluationTraits::apply<SGResidualType> {
91
typedef SGType type; };
92
template <> struct EvaluationTraits::apply<SGJacobianType> {
93
typedef SGFadType type; };
97
// Synonym for the ScalarParameterLibrary/Vector on our traits
98
typedef Sacado::ScalarParameterLibrary<FEApp::EvaluationTraits> ParamLib;
99
typedef Sacado::ScalarParameterVector<FEApp::EvaluationTraits> ParamVec;
101
// Build the MPL vector containing our valid evaluation types
102
typedef Sacado::mpl::vector<> EvalTypes0;
103
typedef Sacado::mpl::push_back<EvalTypes0, FEApp::ResidualType>::type EvalTypes1;
104
typedef Sacado::mpl::push_back<EvalTypes1, FEApp::JacobianType>::type EvalTypes2;
105
typedef Sacado::mpl::push_back<EvalTypes2, FEApp::TangentType>::type EvalTypes3;
107
typedef Sacado::mpl::push_back<EvalTypes3, FEApp::SGResidualType>::type EvalTypes4;
108
typedef Sacado::mpl::push_back<EvalTypes4, FEApp::SGJacobianType>::type EvalTypes5;
60
#define SGFAD_ACTIVE 0
110
typedef EvalTypes3 EvalTypes5;
112
typedef EvalTypes5 EvalTypes;
63
114
// Turn on/off explicit template instantiation
64
115
#define SACADO_ETI
66
// Build the MPL vector containing our valid types
67
typedef Sacado::mpl::vector<> ValidTypes0;
69
typedef Sacado::mpl::push_back<ValidTypes0, RealType>::type ValidTypes1;
71
typedef ValidTypes0 ValidTypes1;
74
typedef Sacado::mpl::push_back<ValidTypes1, FadType>::type ValidTypes2;
76
typedef ValidTypes1 ValidTypes2;
79
typedef Sacado::mpl::push_back<ValidTypes2, SGType>::type ValidTypes3;
81
typedef ValidTypes2 ValidTypes3;
84
typedef Sacado::mpl::push_back<ValidTypes3, SGFadType>::type ValidTypes4;
86
typedef ValidTypes3 ValidTypes4;
88
typedef ValidTypes4 ValidTypes;
90
117
// Define macro for explicit template instantiation
92
#define INSTANTIATE_TEMPLATE_CLASS_REAL(name) template class name<double>;
94
#define INSTANTIATE_TEMPLATE_CLASS_REAL(name)
98
#define INSTANTIATE_TEMPLATE_CLASS_FAD(name) template class name<FadType>;
100
#define INSTANTIATE_TEMPLATE_CLASS_FAD(name)
118
#define INSTANTIATE_TEMPLATE_CLASS_RESIDUAL(name) template class name<FEApp::ResidualType>;
119
#define INSTANTIATE_TEMPLATE_CLASS_JACOBIAN(name) template class name<FEApp::JacobianType>;
120
#define INSTANTIATE_TEMPLATE_CLASS_TANGENT(name) template class name<FEApp::TangentType>;
104
#define INSTANTIATE_TEMPLATE_CLASS_SG(name) template class name<SGType>;
106
#define INSTANTIATE_TEMPLATE_CLASS_SG(name)
110
#define INSTANTIATE_TEMPLATE_CLASS_SGFAD(name) template class name<SGFadType>;
112
#define INSTANTIATE_TEMPLATE_CLASS_SGFAD(name)
115
#define INSTANTIATE_TEMPLATE_CLASS(name) \
116
INSTANTIATE_TEMPLATE_CLASS_REAL(name) \
117
INSTANTIATE_TEMPLATE_CLASS_FAD(name) \
118
INSTANTIATE_TEMPLATE_CLASS_SG(name) \
119
INSTANTIATE_TEMPLATE_CLASS_SGFAD(name)
122
#define INSTANTIATE_TEMPLATE_CLASS_SGRESIDUAL(name) template class name<FEApp::SGResidualType>;
123
#define INSTANTIATE_TEMPLATE_CLASS_SGJACOBIAN(name) template class name<FEApp::SGJacobianType>;
125
#define INSTANTIATE_TEMPLATE_CLASS_SGRESIDUAL(name)
126
#define INSTANTIATE_TEMPLATE_CLASS_SGJACOBIAN(name)
129
#define INSTANTIATE_TEMPLATE_CLASS(name) \
130
INSTANTIATE_TEMPLATE_CLASS_RESIDUAL(name) \
131
INSTANTIATE_TEMPLATE_CLASS_JACOBIAN(name) \
132
INSTANTIATE_TEMPLATE_CLASS_TANGENT(name) \
133
INSTANTIATE_TEMPLATE_CLASS_SGRESIDUAL(name) \
134
INSTANTIATE_TEMPLATE_CLASS_SGJACOBIAN(name)
121
136
#endif // FEAPP_TEMPLATETYPES_HPP