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
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