224 const size_t& cell)
const
229 const int numBases(fields_[0].extent(1)), numQP(vector_.extent(1));
231 for (
int dim(0); dim < numDims_; ++dim)
232 for (
int basis(0); basis < numBases; ++basis)
233 fields_[dim](cell, basis) = 0.0;
238 const int X(0), Y(1), Z(2);
239 if (NUM_FIELD_MULT == 0)
241 if (numGradDims_ == 1)
243 for (
int qp(0); qp < numQP; ++qp)
245 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
246 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
247 for (
int basis(0); basis < numBases; ++basis)
249 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
250 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
254 else if (numGradDims_ == 2)
256 for (
int qp(0); qp < numQP; ++qp)
258 tmp[X] = multiplier_ * vector_(cell, qp, X);
259 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
260 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
261 for (
int basis(0); basis < numBases; ++basis)
263 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
264 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
265 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
266 tmp[Y] * basis_(cell, basis, qp, X);
270 else if (numGradDims_ == 3)
272 for (
int qp(0); qp < numQP; ++qp)
274 tmp[X] = multiplier_ * vector_(cell, qp, X);
275 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
276 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
277 for (
int basis(0); basis < numBases; ++basis)
279 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
280 tmp[Z] * basis_(cell, basis, qp, Y);
281 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
282 tmp[X] * basis_(cell, basis, qp, Z);
283 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
284 tmp[Y] * basis_(cell, basis, qp, X);
289 else if (NUM_FIELD_MULT == 1)
291 if (numGradDims_ == 1)
293 for (
int qp(0); qp < numQP; ++qp)
295 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
296 vector_(cell, qp, Y);
297 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
298 vector_(cell, qp, Z);
299 for (
int basis(0); basis < numBases; ++basis)
301 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
302 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
306 else if (numGradDims_ == 2)
308 for (
int qp(0); qp < numQP; ++qp)
310 tmp[X] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
311 vector_(cell, qp, X);
312 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
313 vector_(cell, qp, Y);
314 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
315 vector_(cell, qp, Z);
316 for (
int basis(0); basis < numBases; ++basis)
318 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
319 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
320 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
321 tmp[Y] * basis_(cell, basis, qp, X);
325 else if (numGradDims_ == 3)
327 for (
int qp(0); qp < numQP; ++qp)
329 tmp[X] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
330 vector_(cell, qp, X);
331 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
332 vector_(cell, qp, Y);
333 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
334 vector_(cell, qp, Z);
335 for (
int basis(0); basis < numBases; ++basis)
337 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
338 tmp[Z] * basis_(cell, basis, qp, Y);
339 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
340 tmp[X] * basis_(cell, basis, qp, Z);
341 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
342 tmp[Y] * basis_(cell, basis, qp, X);
349 const int numFieldMults(kokkosFieldMults_.extent(0));
350 if (numGradDims_ == 1)
352 for (
int qp(0); qp < numQP; ++qp)
354 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
355 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
356 for (
int fm(0); fm < numFieldMults; ++fm)
358 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
359 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
361 for (
int basis(0); basis < numBases; ++basis)
363 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
364 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
368 else if (numGradDims_ == 2)
370 for (
int qp(0); qp < numQP; ++qp)
372 tmp[X] = multiplier_ * vector_(cell, qp, X);
373 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
374 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
375 for (
int fm(0); fm < numFieldMults; ++fm)
377 tmp[X] *= kokkosFieldMults_(fm)(cell, qp);
378 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
379 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
381 for (
int basis(0); basis < numBases; ++basis)
383 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
384 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
385 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
386 tmp[Y] * basis_(cell, basis, qp, X);
390 else if (numGradDims_ == 3)
392 for (
int qp(0); qp < numQP; ++qp)
394 tmp[X] = multiplier_ * vector_(cell, qp, X);
395 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
396 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
397 for (
int fm(0); fm < numFieldMults; ++fm)
399 tmp[X] *= kokkosFieldMults_(fm)(cell, qp);
400 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
401 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
403 for (
int basis(0); basis < numBases; ++basis)
405 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
406 tmp[Z] * basis_(cell, basis, qp, Y);
407 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
408 tmp[X] * basis_(cell, basis, qp, Z);
409 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
410 tmp[Y] * basis_(cell, basis, qp, X);