74 const unsigned int n_components,
83 auto scratch_for_eval =
84 Kokkos::subview(
data->shared_data[dof_handler_index].scratch_pad,
85 Kokkos::make_pair(0, 0));
91 eval(
data->team_member,
92 data->precomputed_data[dof_handler_index].shape_values,
93 data->precomputed_data[dof_handler_index].shape_gradients,
94 data->precomputed_data[dof_handler_index].co_shape_gradients,
97 for (
unsigned int c = 0; c < n_components; ++c)
100 Kokkos::subview(
data->shared_data[dof_handler_index].values,
104 Kokkos::subview(
data->shared_data[dof_handler_index].gradients,
109 if constexpr (dim == 1)
111 auto temp = Kokkos::subview(
112 data->shared_data[dof_handler_index].scratch_pad,
113 Kokkos::make_pair(0, n_q_points_1d));
116 eval.template gradients<0, true, false, false>(
117 u, Kokkos::subview(grad_u, Kokkos::ALL, 0));
120 eval.template values<0, true, false, false>(u, temp);
121 populate_view<false>(
data->team_member,
127 else if constexpr (dim == 2)
129 constexpr int temp_size = (fe_degree + 1) * n_q_points_1d;
130 auto temp = Kokkos::subview(
131 data->shared_data[dof_handler_index].scratch_pad,
132 Kokkos::make_pair(0, temp_size));
137 eval.template gradients<0, true, false, false>(u, temp);
138 eval.template values<1, true, false, false>(
139 temp, Kokkos::subview(grad_u, Kokkos::ALL, 0));
143 eval.template values<0, true, false, false>(u, temp);
145 eval.template gradients<1, true, false, false>(
146 temp, Kokkos::subview(grad_u, Kokkos::ALL, 1));
150 eval.template values<1, true, false, false>(temp, u);
152 else if constexpr (dim == 3)
159 auto temp1 = Kokkos::subview(
160 data->shared_data[dof_handler_index].scratch_pad,
161 Kokkos::make_pair(0, temp1_size));
162 auto temp2 = Kokkos::subview(
163 data->shared_data[dof_handler_index].scratch_pad,
164 Kokkos::make_pair(temp1_size, temp1_size + temp2_size));
169 eval.template gradients<0, true, false, false>(u, temp1);
170 eval.template values<1, true, false, false>(temp1, temp2);
171 eval.template values<2, true, false, false>(
172 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 0));
176 eval.template values<0, true, false, false>(u, temp1);
179 eval.template gradients<1, true, false, false>(temp1,
181 eval.template values<2, true, false, false>(
182 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 1));
187 eval.template values<1, true, false, false>(temp1, temp2);
189 eval.template gradients<2, true, false, false>(
190 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 2));
195 eval.template values<2, true, false, false>(temp2, u);
206 const unsigned int n_components,
215 auto scratch_for_eval =
216 Kokkos::subview(
data->shared_data[dof_handler_index].scratch_pad,
217 Kokkos::make_pair(0, 0));
223 eval(
data->team_member,
224 data->precomputed_data[dof_handler_index].shape_values,
225 data->precomputed_data[dof_handler_index].shape_gradients,
226 data->precomputed_data[dof_handler_index].co_shape_gradients,
229 for (
unsigned int c = 0; c < n_components; ++c)
232 Kokkos::subview(
data->shared_data[dof_handler_index].values,
236 Kokkos::subview(
data->shared_data[dof_handler_index].gradients,
241 if constexpr (dim == 1)
243 auto temp = Kokkos::subview(
244 data->shared_data[dof_handler_index].scratch_pad,
245 Kokkos::make_pair(0, fe_degree + 1));
250 eval.template values<0, false, false, false>(u, temp);
251 populate_view<false>(
data->team_member,
260 eval.template values<0, false, false, false>(u, temp);
261 eval.template gradients<0, false, true, false>(
262 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp);
263 populate_view<false>(
data->team_member,
269 eval.template gradients<0, false, false, false>(
270 Kokkos::subview(grad_u, Kokkos::ALL, 0), u);
273 else if constexpr (dim == 2)
275 constexpr int temp_size = (fe_degree + 1) * n_q_points_1d;
276 auto temp = Kokkos::subview(
277 data->shared_data[dof_handler_index].scratch_pad,
278 Kokkos::make_pair(0, temp_size));
283 eval.template values<1, false, false, false>(u, temp);
284 eval.template values<0, false, false, false>(temp, u);
288 eval.template gradients<1, false, false, false>(
289 Kokkos::subview(grad_u, Kokkos::ALL, 1), temp);
291 eval.template values<1, false, true, false>(u, temp);
292 eval.template values<0, false, false, false>(temp, u);
293 eval.template values<1, false, false, false>(
294 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp);
295 eval.template gradients<0, false, true, false>(temp, u);
298 else if constexpr (dim == 3)
305 auto temp1 = Kokkos::subview(
306 data->shared_data[dof_handler_index].scratch_pad,
307 Kokkos::make_pair(0, temp1_size));
308 auto temp2 = Kokkos::subview(
309 data->shared_data[dof_handler_index].scratch_pad,
310 Kokkos::make_pair(temp1_size, temp1_size + temp2_size));
315 eval.template values<2, false, false, false>(u, temp1);
316 eval.template values<1, false, false, false>(temp1, temp2);
317 eval.template values<0, false, false, false>(temp2, u);
321 eval.template gradients<2, false, false, false>(
322 Kokkos::subview(grad_u, Kokkos::ALL, 2), temp1);
324 eval.template values<2, false, true, false>(u, temp1);
325 eval.template values<1, false, false, false>(temp1, temp2);
326 eval.template values<2, false, false, false>(
327 Kokkos::subview(grad_u, Kokkos::ALL, 1), temp1);
328 eval.template gradients<1, false, true, false>(temp1,
330 eval.template values<0, false, false, false>(temp2, u);
331 eval.template values<2, false, false, false>(
332 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp1);
333 eval.template values<1, false, false, false>(temp1, temp2);
334 eval.template gradients<0, false, true, false>(temp2, u);