Panzer Version of the Day
Loading...
Searching...
No Matches
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
52// ONE template argument
54#define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
55 template class name<panzer::Traits::Residual>;
56
58#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
59 template class name<panzer::Traits::Tangent>;
60
62#define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
63 template class name<panzer::Traits::Jacobian>;
64
65#ifdef Panzer_BUILD_HESSIAN_SUPPORT
67 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name) \
68 template class name<panzer::Traits::Hessian>;
69#else
70 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
71#endif
72
77#define PANZER_INSTANTIATE_TEMPLATE_CLASS_ONE_T(name) \
78 PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
79 PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
80 PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
81 PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
82
83// TWO template arguments
85#define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
86 template class name<panzer::Traits::Residual, panzer::Traits>;
87
89#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
90 template class name<panzer::Traits::Tangent, panzer::Traits>;
91
93#define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
94 template class name<panzer::Traits::Jacobian, panzer::Traits>;
95
96#ifdef Panzer_BUILD_HESSIAN_SUPPORT
98 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name) \
99 template class name<panzer::Traits::Hessian, panzer::Traits>;
100#else
101 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
102#endif
103
111#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TWO_T(name) \
112 PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
113 PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
114 PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
115 PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
116
117// THREE (one user defined) template arguments
119#define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
120 template class name<panzer::Traits::Residual, panzer::Traits,ExtraT>;
121
123#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
124 template class name<panzer::Traits::Tangent, panzer::Traits,ExtraT>;
125
127#define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
128 template class name<panzer::Traits::Jacobian, panzer::Traits,ExtraT>;
129
130#ifdef Panzer_BUILD_HESSIAN_SUPPORT
132 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT) \
133 template class name<panzer::Traits::Hessian, panzer::Traits,ExtraT>;
134#else
135 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
136#endif
137
143#define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_T(name,ExtraT) \
144 PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
145 PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
146 PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
147 PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
148
149// THREE (two user defined) template arguments
151#define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
152 template class name<panzer::Traits::Residual,FirstExtraT,SecondExtraT>;
153
155#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
156 template class name<panzer::Traits::Tangent,FirstExtraT,SecondExtraT>;
157
159#define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
160 template class name<panzer::Traits::Jacobian,FirstExtraT,SecondExtraT>;
161
162#ifdef Panzer_BUILD_HESSIAN_SUPPORT
164 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
165 template class name<panzer::Traits::Hessian,FirstExtraT,SecondExtraT>;
166#else
167 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
168#endif
169
180#define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
181 PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
182 PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
183 PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
184 PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
185
186// FOUR (two user defined) template arguments
188#define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
189 template class name<panzer::Traits::Residual, panzer::Traits,FirstExtraT,SecondExtraT>;
190
192#define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
193 template class name<panzer::Traits::Tangent, panzer::Traits,FirstExtraT,SecondExtraT>;
194
196#define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
197 template class name<panzer::Traits::Jacobian, panzer::Traits,FirstExtraT,SecondExtraT>;
198
199#ifdef Panzer_BUILD_HESSIAN_SUPPORT
201 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
202 template class name<panzer::Traits::Hessian, panzer::Traits,FirstExtraT,SecondExtraT>;
203#else
204 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
205#endif
206
213#define PANZER_INSTANTIATE_TEMPLATE_CLASS_FOUR_T(name,FirstExtraT,SecondExtraT) \
214 PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
215 PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
216 PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
217 PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
218
219#endif