adamantine
instantiation.hh
Go to the documentation of this file.
1 /* SPDX-FileCopyrightText: Copyright (c) 2016 - 2025, the adamantine authors.
2  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3  */
4 
5 #include <boost/preprocessor/seq/for_each_product.hpp>
6 
7 // clang-format off
8 #define ADAMANTINE_DIM (2)(3)
9 #define ADAMANTINE_USE_TABLE (true)(false)
10 #define ADAMANTINE_N_MATERIALS (-1)(1)
11 #define ADAMANTINE_P_ORDER (0)(1)(2)(3)(4)
12 #define ADAMANTINE_FE_DEGREE (1)(2)(3)(4)(5)
13 #define ADAMANTINE_MATERIAL_STATE (adamantine::Solid)(adamantine::SolidLiquid)(adamantine::SolidLiquidPowder)
14 #define ADAMANTINE_QUADRATURE_TYPE (dealii::QGauss<1>)(dealii::QGaussLobatto<1>)
15 // clang-format on
16 
17 // Instantiation of the class for:
18 // - dim = 2 and 3
19 #define ADAMANTINE_D(z, SEQ) \
20  template class adamantine::BOOST_PP_SEQ_ELEM( \
21  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ)>;
22 #define INSTANTIATE_DIM(NAME) \
23  BOOST_PP_SEQ_FOR_EACH_PRODUCT(ADAMANTINE_D, ((NAME))(ADAMANTINE_DIM))
24 
25 // Instantiation of the class for:
26 // - dim = 2 and 3
27 // - n_materials = -1 and 1
28 // - p_order = 0 to 4
29 // - material_state = Solid, SolidLiquid, and SolidLiquidPowder
30 // - memory_space = Host
31 #define ADAMANTINE_D_N_P_M_HOST(z, SEQ) \
32  template class adamantine::BOOST_PP_SEQ_ELEM( \
33  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
34  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
35  dealii::MemorySpace::Host>;
36 #define INSTANTIATE_DIM_NMAT_PORDER_MATERIALSTATES_HOST(NAME) \
37  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
38  ADAMANTINE_D_N_P_M_HOST, \
39  ((NAME))( \
40  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_MATERIAL_STATE))
41 
42 // Instantiation of the class for:
43 // - dim = 2 and 3
44 // - n_materials = -1 and 1
45 // - p_order = 0 to 4
46 // - material_state = Solid, SolidLiquid, and SolidLiquidPowder
47 // - memory_space = Default
48 #define ADAMANTINE_D_N_P_M_DEV(z, SEQ) \
49  template class adamantine::BOOST_PP_SEQ_ELEM( \
50  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
51  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
52  dealii::MemorySpace::Default>;
53 #define INSTANTIATE_DIM_NMAT_PORDER_MATERIALSTATES_DEVICE(NAME) \
54  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
55  ADAMANTINE_D_N_P_M_DEV, \
56  ((NAME))( \
57  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_MATERIAL_STATE))
58 
59 // Instantiation of the class for:
60 // - dim = 2 and 3
61 // - n_materials = -1 and 1
62 // - use_table = true and false
63 // - p_order = 0 to 4
64 // - fe_degree = 1 to 5
65 // - material_state = Solid
66 // - memory_space = Host
67 #define ADAMANTINE_D_N_U_P_F_S_HOST(z, SEQ) \
68  template class adamantine::BOOST_PP_SEQ_ELEM( \
69  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
70  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
71  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::Solid, \
72  dealii::MemorySpace::Host>;
73 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_S_HOST(NAME) \
74  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
75  ADAMANTINE_D_N_U_P_F_S_HOST, \
76  ((NAME))( \
77  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
78 
79 // Instantiation of the class for:
80 // - dim = 2 and 3
81 // - n_material = -1 and 1
82 // - use_table = true and false
83 // - p_order = 0 to 4
84 // - fe_degree = 1 to 5
85 // - material_state = SolidLiquid
86 // - memory_space = Host
87 #define ADAMANTINE_D_N_U_P_F_SL_HOST(z, SEQ) \
88  template class adamantine::BOOST_PP_SEQ_ELEM( \
89  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
90  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
91  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::SolidLiquid, \
92  dealii::MemorySpace::Host>;
93 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_SL_HOST(NAME) \
94  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
95  ADAMANTINE_D_N_U_P_F_SL_HOST, \
96  ((NAME))( \
97  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
98 
99 // Instantiation of the class for:
100 // - dim = 2 and 3
101 // - n_materials = -1 and 1
102 // - use_table = true and false
103 // - p_order = 0 to 4
104 // - fe_degree = 1 to 5
105 // - material_state = SolidLiquidPowder
106 // - memory_space = Host
107 #define ADAMANTINE_D_N_U_P_F_SLP_HOST(z, SEQ) \
108  template class adamantine::BOOST_PP_SEQ_ELEM( \
109  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
110  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
111  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::SolidLiquidPowder, \
112  dealii::MemorySpace::Host>;
113 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_SLP_HOST(NAME) \
114  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
115  ADAMANTINE_D_N_U_P_F_SLP_HOST, \
116  ((NAME))( \
117  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
118 
119 // Instantiation of the class for:
120 // - dim = 2 and 3
121 // - n_materials = -1 and 1
122 // - use_table = true and false
123 // - p_order = 0 to 4
124 // - fe_degree = 1 to 5
125 // - material_state = Solid
126 // - memory_space = Default
127 #define ADAMANTINE_D_N_U_P_F_S_DEV(z, SEQ) \
128  template class adamantine::BOOST_PP_SEQ_ELEM( \
129  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
130  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
131  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::Solid, \
132  dealii::MemorySpace::Default>;
133 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_S_DEVICE(NAME) \
134  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
135  ADAMANTINE_D_N_U_P_F_S_DEV, \
136  ((NAME))( \
137  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
138 
139 // Instantiation of the class for:
140 // - dim = 2 and 3
141 // - n_materials = -1 and 1
142 // - use_table = true and false
143 // - p_order = 0 to 4
144 // - fe_degree = 1 to 5
145 // - material_state = SolidLiquid
146 // - memory_space = Default
147 #define ADAMANTINE_D_N_U_P_F_SL_DEV(z, SEQ) \
148  template class adamantine::BOOST_PP_SEQ_ELEM( \
149  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
150  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
151  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::SolidLiquid, \
152  dealii::MemorySpace::Default>;
153 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_SL_DEVICE(NAME) \
154  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
155  ADAMANTINE_D_N_U_P_F_SL_DEV, \
156  ((NAME))( \
157  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
158 
159 // Instantiation of the class for:
160 // - dim = 2 and 3
161 // - n_materials = -1 and 1
162 // - use_table = true and false
163 // - p_order = 0 to 4
164 // - fe_degree = 1 to 5
165 // - material_state = SolidLiquidPowder
166 // - memory_space = Default
167 #define ADAMANTINE_D_N_U_P_F_SLP_DEV(z, SEQ) \
168  template class adamantine::BOOST_PP_SEQ_ELEM( \
169  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
170  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
171  BOOST_PP_SEQ_ELEM(5, SEQ), adamantine::SolidLiquidPowder, \
172  dealii::MemorySpace::Default>;
173 #define INSTANTIATE_DIM_NMAT_USETABLE_PORDER_FEDEGREE_SLP_DEVICE(NAME) \
174  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
175  ADAMANTINE_D_N_U_P_F_SLP_DEV, \
176  ((NAME))( \
177  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_USE_TABLE)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE))
178 
179 // Instantiation of the class for:
180 // - dim = 2 and 3
181 // - n_materials = -1 and 1
182 // - p_order = 0 to 4
183 // - fe_degree = 1 to 5
184 // - material_state = Solid
185 // - memory_space = Host
186 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
187 #define ADAMANTINE_D_N_P_F_S_Q_HOST(z, SEQ) \
188  template class adamantine::BOOST_PP_SEQ_ELEM( \
189  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
190  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
191  adamantine::Solid, dealii::MemorySpace::Host, \
192  BOOST_PP_SEQ_ELEM(5, SEQ)>;
193 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_S_QUAD_HOST(NAME) \
194  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
195  ADAMANTINE_D_N_P_F_S_Q_HOST, \
196  ((NAME))( \
197  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))
198 
199 // Instantiation of the class for:
200 // - dim = 2 and 3
201 // - n_materials = -1 and 1
202 // - p_order = 0 to 4
203 // - fe_degree = 1 to 5
204 // - material_state = SolidLiquid
205 // - memory_space = Host
206 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
207 #define ADAMANTINE_D_N_P_F_SL_Q_HOST(z, SEQ) \
208  template class adamantine::BOOST_PP_SEQ_ELEM( \
209  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
210  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
211  adamantine::SolidLiquid, dealii::MemorySpace::Host, \
212  BOOST_PP_SEQ_ELEM(5, SEQ)>;
213 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_SL_QUAD_HOST(NAME) \
214  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
215  ADAMANTINE_D_N_P_F_SL_Q_HOST, \
216  ((NAME))( \
217  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))
218 
219 // Instantiation of the class for:
220 // - dim = 2 and 3
221 // - n_materials = -1 and 1
222 // - p_order = 0 to 4
223 // - fe_degree = 1 to 5
224 // - material_state = SolidLiquidPowder
225 // - memory_space = Host
226 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
227 #define ADAMANTINE_D_N_P_F_SLP_Q_HOST(z, SEQ) \
228  template class adamantine::BOOST_PP_SEQ_ELEM( \
229  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
230  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
231  adamantine::SolidLiquidPowder, dealii::MemorySpace::Host, \
232  BOOST_PP_SEQ_ELEM(5, SEQ)>;
233 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_SLP_QUAD_HOST(NAME) \
234  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
235  ADAMANTINE_D_N_P_F_SLP_Q_HOST, \
236  ((NAME))( \
237  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))
238 
239 // Instantiation of the class for:
240 // - dim = 2 and 3
241 // - n_materials = -1 and 1
242 // - p_order = 0 to 4
243 // - fe_degree = 1 to 5
244 // - material_state = Solid
245 // - memory_space = Default
246 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
247 #define ADAMANTINE_D_N_P_F_S_Q_DEV(z, SEQ) \
248  template class adamantine::BOOST_PP_SEQ_ELEM( \
249  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
250  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
251  adamantine::Solid, dealii::MemorySpace::Default, \
252  BOOST_PP_SEQ_ELEM(5, SEQ)>;
253 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_S_QUAD_DEVICE(NAME) \
254  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
255  ADAMANTINE_D_N_P_F_S_Q_DEV, \
256  ((NAME))( \
257  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))
258 
259 // Instantiation of the class for:
260 // - dim = 2 and 3
261 // - n_materials = -1 and 1
262 // - p_order = 0 to 4
263 // - fe_degree = 1 to 5
264 // - material_state = SolidLiquid
265 // - memory_space = Default
266 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
267 #define ADAMANTINE_D_N_P_F_SL_Q_DEV(z, SEQ) \
268  template class adamantine::BOOST_PP_SEQ_ELEM( \
269  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
270  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
271  adamantine::SolidLiquid, dealii::MemorySpace::Default, \
272  BOOST_PP_SEQ_ELEM(5, SEQ)>;
273 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_SL_QUAD_DEVICE(NAME) \
274  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
275  ADAMANTINE_D_N_P_F_SL_Q_DEV, \
276  ((NAME))( \
277  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))
278 
279 // Instantiation of the class for:
280 // - dim = 2 and 3
281 // - n_materials = -1 and 1
282 // - p_order = 0 to 4
283 // - fe_degree = 1 to 5
284 // - material_state = SolidLiquidPowder
285 // - memory_space = Default
286 // - QuadratureType = dealii::QGauss<1> and dealii::QGaussLobatto<1>
287 #define ADAMANTINE_D_N_P_F_SLP_Q_DEV(z, SEQ) \
288  template class adamantine::BOOST_PP_SEQ_ELEM( \
289  0, SEQ)<BOOST_PP_SEQ_ELEM(1, SEQ), BOOST_PP_SEQ_ELEM(2, SEQ), \
290  BOOST_PP_SEQ_ELEM(3, SEQ), BOOST_PP_SEQ_ELEM(4, SEQ), \
291  adamantine::SolidLiquidPowder, dealii::MemorySpace::Default, \
292  BOOST_PP_SEQ_ELEM(5, SEQ)>;
293 #define INSTANTIATE_DIM_NMAT_PORDER_FEDEGREE_SLP_QUAD_DEVICE(NAME) \
294  BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
295  ADAMANTINE_D_N_P_F_SLP_Q_DEV, \
296  ((NAME))( \
297  ADAMANTINE_DIM)(ADAMANTINE_N_MATERIALS)(ADAMANTINE_P_ORDER)(ADAMANTINE_FE_DEGREE)(ADAMANTINE_QUADRATURE_TYPE))