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 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 #ifndef PANZER_EXPLICIT_TEMPLATE_INSTANTIATION_HPP
44 #define PANZER_EXPLICIT_TEMPLATE_INSTANTIATION_HPP
45 
46 #include "Panzer_Traits.hpp"
47 
48 // ONE template argument
49 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
50  template class name<panzer::Traits::Residual>;
51 
52 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
53  template class name<panzer::Traits::Tangent>;
54 
55 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
56  template class name<panzer::Traits::Jacobian>;
57 
58 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
59  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name) \
60  template class name<panzer::Traits::Hessian>;
61 #else
62  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
63 #endif
64 
65 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_ONE_T(name) \
66  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_ONE_T(name) \
67  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_ONE_T(name) \
68  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_ONE_T(name) \
69  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_ONE_T(name)
70 
71 // TWO template arguments
72 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
73  template class name<panzer::Traits::Residual, panzer::Traits>;
74 
75 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
76  template class name<panzer::Traits::Tangent, panzer::Traits>;
77 
78 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
79  template class name<panzer::Traits::Jacobian, panzer::Traits>;
80 
81 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
82  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name) \
83  template class name<panzer::Traits::Hessian, panzer::Traits>;
84 #else
85  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
86 #endif
87 
88 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TWO_T(name) \
89  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_TWO_T(name) \
90  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_TWO_T(name) \
91  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_TWO_T(name) \
92  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_TWO_T(name)
93 
94 // THREE (one user defined) template arguments
95 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
96  template class name<panzer::Traits::Residual, panzer::Traits,ExtraT>;
97 
98 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
99  template class name<panzer::Traits::Tangent, panzer::Traits,ExtraT>;
100 
101 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
102  template class name<panzer::Traits::Jacobian, panzer::Traits,ExtraT>;
103 
104 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
105  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT) \
106  template class name<panzer::Traits::Hessian, panzer::Traits,ExtraT>;
107 #else
108  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
109 #endif
110 
111 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_T(name,ExtraT) \
112  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_T(name,ExtraT) \
113  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_T(name,ExtraT) \
114  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_T(name,ExtraT) \
115  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_T(name,ExtraT)
116 
117 // THREE (two user defined) template arguments
118 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
119  template class name<panzer::Traits::Residual,FirstExtraT,SecondExtraT>;
120 
121 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
122  template class name<panzer::Traits::Tangent,FirstExtraT,SecondExtraT>;
123 
124 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
125  template class name<panzer::Traits::Jacobian,FirstExtraT,SecondExtraT>;
126 
127 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
128  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
129  template class name<panzer::Traits::Hessian,FirstExtraT,SecondExtraT>;
130 #else
131  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
132 #endif
133 
134 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
135  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
136  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
137  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT) \
138  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_THREE_2U_T(name,FirstExtraT,SecondExtraT)
139 
140 // FOUR (two user defined) template arguments
141 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
142  template class name<panzer::Traits::Residual, panzer::Traits,FirstExtraT,SecondExtraT>;
143 
144 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
145  template class name<panzer::Traits::Tangent, panzer::Traits,FirstExtraT,SecondExtraT>;
146 
147 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
148  template class name<panzer::Traits::Jacobian, panzer::Traits,FirstExtraT,SecondExtraT>;
149 
150 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
151  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
152  template class name<panzer::Traits::Hessian, panzer::Traits,FirstExtraT,SecondExtraT>;
153 #else
154  #define PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
155 #endif
156 
157 #define PANZER_INSTANTIATE_TEMPLATE_CLASS_FOUR_T(name,FirstExtraT,SecondExtraT) \
158  PANZER_INSTANTIATE_TEMPLATE_CLASS_RESIDUAL_FOUR_T(name,FirstExtraT,SecondExtraT) \
159  PANZER_INSTANTIATE_TEMPLATE_CLASS_TANGENT_FOUR_T(name,FirstExtraT,SecondExtraT) \
160  PANZER_INSTANTIATE_TEMPLATE_CLASS_JACOBIAN_FOUR_T(name,FirstExtraT,SecondExtraT) \
161  PANZER_INSTANTIATE_TEMPLATE_CLASS_HESSIAN_FOUR_T(name,FirstExtraT,SecondExtraT)
162 
163 #endif