Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_ExplicitTemplateInstantiation.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Panzer: A partial differential equation assembly
4 // engine for strongly coupled complex multiphysics systems
5 //
6 // Copyright 2011 NTESS and the Panzer contributors.
7 // SPDX-License-Identifier: BSD-3-Clause
8 // *****************************************************************************
9 // @HEADER
10 
11 #ifndef PANZER_EXPLICIT_TEMPLATE_INSTANTIATION_HPP
12 #define PANZER_EXPLICIT_TEMPLATE_INSTANTIATION_HPP
13 
14 #include "Panzer_Traits.hpp"
15 
16 // ONE template argument
17 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
18  template class name<panzer::Traits::Residual>;
19 
20 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
21  template class name<panzer::Traits::Tangent>;
22 
23 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
24  template class name<panzer::Traits::Jacobian>;
25 
26 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
27  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name) \
28  template class name<panzer::Traits::Hessian>;
29 #else
30  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
31 #endif
32 
33 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_ONE_T(name) \
34  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
35  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
36  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
37  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
38 
39 // TWO template arguments
40 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
41  template class name<panzer::Traits::Residual, panzer::Traits>;
42 
43 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
44  template class name<panzer::Traits::Tangent, panzer::Traits>;
45 
46 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
47  template class name<panzer::Traits::Jacobian, panzer::Traits>;
48 
49 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
50  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name) \
51  template class name<panzer::Traits::Hessian, panzer::Traits>;
52 #else
53  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
54 #endif
55 
56 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TWO_T(name) \
57  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
58  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
59  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
60  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
61 
62 // THREE (one user defined) template arguments
63 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
64  template class name<panzer::Traits::Residual, panzer::Traits,ExtraT>;
65 
66 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
67  template class name<panzer::Traits::Tangent, panzer::Traits,ExtraT>;
68 
69 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
70  template class name<panzer::Traits::Jacobian, panzer::Traits,ExtraT>;
71 
72 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
73  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT) \
74  template class name<panzer::Traits::Hessian, panzer::Traits,ExtraT>;
75 #else
76  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
77 #endif
78 
79 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_T(name,ExtraT) \
80  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
81  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
82  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
83  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
84 
85 // THREE (two user defined) template arguments
86 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
87  template class name<panzer::Traits::Residual,FirstExtraT,SecondExtraT>;
88 
89 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
90  template class name<panzer::Traits::Tangent,FirstExtraT,SecondExtraT>;
91 
92 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
93  template class name<panzer::Traits::Jacobian,FirstExtraT,SecondExtraT>;
94 
95 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
96  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
97  template class name<panzer::Traits::Hessian,FirstExtraT,SecondExtraT>;
98 #else
99  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
100 #endif
101 
102 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
103  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
104  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
105  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
106  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
107 
108 // FOUR (two user defined) template arguments
109 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
110  template class name<panzer::Traits::Residual, panzer::Traits,FirstExtraT,SecondExtraT>;
111 
112 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
113  template class name<panzer::Traits::Tangent, panzer::Traits,FirstExtraT,SecondExtraT>;
114 
115 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
116  template class name<panzer::Traits::Jacobian, panzer::Traits,FirstExtraT,SecondExtraT>;
117 
118 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
119  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
120  template class name<panzer::Traits::Hessian, panzer::Traits,FirstExtraT,SecondExtraT>;
121 #else
122  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
123 #endif
124 
125 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_FOUR_T(name,FirstExtraT,SecondExtraT) \
126  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
127  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
128  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
129  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
130 
131 #endif