84 auto scratch_for_eval = Kokkos::subview(
data->shared_data->scratch_pad,
85 Kokkos::make_pair(0, 0));
91 eval(
data->team_member,
92 data->precomputed_data->shape_values,
93 data->precomputed_data->shape_gradients,
94 data->precomputed_data->co_shape_gradients,
97 for (
unsigned int c = 0; c < n_components; ++c)
99 auto u = Kokkos::subview(
data->shared_data->values, Kokkos::ALL, c);
100 auto grad_u = Kokkos::subview(
data->shared_data->gradients,
105 if constexpr (dim == 1)
108 Kokkos::subview(
data->shared_data->scratch_pad,
109 Kokkos::make_pair(0, n_q_points_1d));
112 eval.template gradients<0, true, false, false>(
113 u, Kokkos::subview(grad_u, Kokkos::ALL, 0));
116 eval.template values<0, true, false, false>(u, temp);
117 populate_view<false>(
data->team_member,
123 else if constexpr (dim == 2)
125 constexpr int temp_size = (fe_degree + 1) * n_q_points_1d;
126 auto temp = Kokkos::subview(
data->shared_data->scratch_pad,
127 Kokkos::make_pair(0, temp_size));
132 eval.template gradients<0, true, false, false>(u, temp);
133 eval.template values<1, true, false, false>(
134 temp, Kokkos::subview(grad_u, Kokkos::ALL, 0));
138 eval.template values<0, true, false, false>(u, temp);
140 eval.template gradients<1, true, false, false>(
141 temp, Kokkos::subview(grad_u, Kokkos::ALL, 1));
145 eval.template values<1, true, false, false>(temp, u);
147 else if constexpr (dim == 3)
154 auto temp1 = Kokkos::subview(
data->shared_data->scratch_pad,
155 Kokkos::make_pair(0, temp1_size));
157 Kokkos::subview(
data->shared_data->scratch_pad,
158 Kokkos::make_pair(temp1_size,
159 temp1_size + temp2_size));
164 eval.template gradients<0, true, false, false>(u, temp1);
165 eval.template values<1, true, false, false>(temp1, temp2);
166 eval.template values<2, true, false, false>(
167 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 0));
171 eval.template values<0, true, false, false>(u, temp1);
174 eval.template gradients<1, true, false, false>(temp1,
176 eval.template values<2, true, false, false>(
177 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 1));
182 eval.template values<1, true, false, false>(temp1, temp2);
184 eval.template gradients<2, true, false, false>(
185 temp2, Kokkos::subview(grad_u, Kokkos::ALL, 2));
190 eval.template values<2, true, false, false>(temp2, u);
209 auto scratch_for_eval = Kokkos::subview(
data->shared_data->scratch_pad,
210 Kokkos::make_pair(0, 0));
216 eval(
data->team_member,
217 data->precomputed_data->shape_values,
218 data->precomputed_data->shape_gradients,
219 data->precomputed_data->co_shape_gradients,
222 for (
unsigned int c = 0; c < n_components; ++c)
224 auto u = Kokkos::subview(
data->shared_data->values, Kokkos::ALL, c);
225 auto grad_u = Kokkos::subview(
data->shared_data->gradients,
230 if constexpr (dim == 1)
233 Kokkos::subview(
data->shared_data->scratch_pad,
234 Kokkos::make_pair(0, fe_degree + 1));
239 eval.template values<0, false, false, false>(u, temp);
240 populate_view<false>(
data->team_member,
249 eval.template values<0, false, false, false>(u, temp);
250 eval.template gradients<0, false, true, false>(
251 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp);
252 populate_view<false>(
data->team_member,
258 eval.template gradients<0, false, false, false>(
259 Kokkos::subview(grad_u, Kokkos::ALL, 0), u);
262 else if constexpr (dim == 2)
264 constexpr int temp_size = (fe_degree + 1) * n_q_points_1d;
265 auto temp = Kokkos::subview(
data->shared_data->scratch_pad,
266 Kokkos::make_pair(0, temp_size));
271 eval.template values<1, false, false, false>(u, temp);
272 eval.template values<0, false, false, false>(temp, u);
276 eval.template gradients<1, false, false, false>(
277 Kokkos::subview(grad_u, Kokkos::ALL, 1), temp);
279 eval.template values<1, false, true, false>(u, temp);
280 eval.template values<0, false, false, false>(temp, u);
281 eval.template values<1, false, false, false>(
282 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp);
283 eval.template gradients<0, false, true, false>(temp, u);
286 else if constexpr (dim == 3)
293 auto temp1 = Kokkos::subview(
data->shared_data->scratch_pad,
294 Kokkos::make_pair(0, temp1_size));
296 Kokkos::subview(
data->shared_data->scratch_pad,
297 Kokkos::make_pair(temp1_size,
298 temp1_size + temp2_size));
303 eval.template values<2, false, false, false>(u, temp1);
304 eval.template values<1, false, false, false>(temp1, temp2);
305 eval.template values<0, false, false, false>(temp2, u);
309 eval.template gradients<2, false, false, false>(
310 Kokkos::subview(grad_u, Kokkos::ALL, 2), temp1);
312 eval.template values<2, false, true, false>(u, temp1);
313 eval.template values<1, false, false, false>(temp1, temp2);
314 eval.template values<2, false, false, false>(
315 Kokkos::subview(grad_u, Kokkos::ALL, 1), temp1);
316 eval.template gradients<1, false, true, false>(temp1,
318 eval.template values<0, false, false, false>(temp2, u);
319 eval.template values<2, false, false, false>(
320 Kokkos::subview(grad_u, Kokkos::ALL, 0), temp1);
321 eval.template values<1, false, false, false>(temp1, temp2);
322 eval.template gradients<0, false, true, false>(temp2, u);