256 const size_t& cell)
const
261 const int numBases(fields_[0].extent(1)), numQP(vector_.extent(1));
263 for (
int dim(0); dim < numDims_; ++dim)
264 for (
int basis(0); basis < numBases; ++basis)
265 fields_[dim](cell, basis) = 0.0;
270 const int X(0), Y(1), Z(2);
271 if (NUM_FIELD_MULT == 0)
273 if (numGradDims_ == 1)
275 for (
int qp(0); qp < numQP; ++qp)
277 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
278 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
279 for (
int basis(0); basis < numBases; ++basis)
281 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
282 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
286 else if (numGradDims_ == 2)
288 for (
int qp(0); qp < numQP; ++qp)
290 tmp[X] = multiplier_ * vector_(cell, qp, X);
291 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
292 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
293 for (
int basis(0); basis < numBases; ++basis)
295 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
296 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
297 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
298 tmp[Y] * basis_(cell, basis, qp, X);
302 else if (numGradDims_ == 3)
304 for (
int qp(0); qp < numQP; ++qp)
306 tmp[X] = multiplier_ * vector_(cell, qp, X);
307 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
308 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
309 for (
int basis(0); basis < numBases; ++basis)
311 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
312 tmp[Z] * basis_(cell, basis, qp, Y);
313 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
314 tmp[X] * basis_(cell, basis, qp, Z);
315 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
316 tmp[Y] * basis_(cell, basis, qp, X);
321 else if (NUM_FIELD_MULT == 1)
323 if (numGradDims_ == 1)
325 for (
int qp(0); qp < numQP; ++qp)
327 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
328 vector_(cell, qp, Y);
329 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
330 vector_(cell, qp, Z);
331 for (
int basis(0); basis < numBases; ++basis)
333 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
334 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
338 else if (numGradDims_ == 2)
340 for (
int qp(0); qp < numQP; ++qp)
342 tmp[X] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
343 vector_(cell, qp, X);
344 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
345 vector_(cell, qp, Y);
346 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
347 vector_(cell, qp, Z);
348 for (
int basis(0); basis < numBases; ++basis)
350 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
351 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
352 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
353 tmp[Y] * basis_(cell, basis, qp, X);
357 else if (numGradDims_ == 3)
359 for (
int qp(0); qp < numQP; ++qp)
361 tmp[X] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
362 vector_(cell, qp, X);
363 tmp[Y] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
364 vector_(cell, qp, Y);
365 tmp[Z] = multiplier_ * kokkosFieldMults_(0)(cell, qp) *
366 vector_(cell, qp, Z);
367 for (
int basis(0); basis < numBases; ++basis)
369 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
370 tmp[Z] * basis_(cell, basis, qp, Y);
371 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
372 tmp[X] * basis_(cell, basis, qp, Z);
373 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
374 tmp[Y] * basis_(cell, basis, qp, X);
381 const int numFieldMults(kokkosFieldMults_.extent(0));
382 if (numGradDims_ == 1)
384 for (
int qp(0); qp < numQP; ++qp)
386 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
387 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
388 for (
int fm(0); fm < numFieldMults; ++fm)
390 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
391 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
393 for (
int basis(0); basis < numBases; ++basis)
395 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
396 fields_[Z](cell, basis) += -tmp[Y] * basis_(cell, basis, qp, X);
400 else if (numGradDims_ == 2)
402 for (
int qp(0); qp < numQP; ++qp)
404 tmp[X] = multiplier_ * vector_(cell, qp, X);
405 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
406 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
407 for (
int fm(0); fm < numFieldMults; ++fm)
409 tmp[X] *= kokkosFieldMults_(fm)(cell, qp);
410 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
411 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
413 for (
int basis(0); basis < numBases; ++basis)
415 fields_[X](cell, basis) += -tmp[Z] * basis_(cell, basis, qp, Y);
416 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X);
417 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
418 tmp[Y] * basis_(cell, basis, qp, X);
422 else if (numGradDims_ == 3)
424 for (
int qp(0); qp < numQP; ++qp)
426 tmp[X] = multiplier_ * vector_(cell, qp, X);
427 tmp[Y] = multiplier_ * vector_(cell, qp, Y);
428 tmp[Z] = multiplier_ * vector_(cell, qp, Z);
429 for (
int fm(0); fm < numFieldMults; ++fm)
431 tmp[X] *= kokkosFieldMults_(fm)(cell, qp);
432 tmp[Y] *= kokkosFieldMults_(fm)(cell, qp);
433 tmp[Z] *= kokkosFieldMults_(fm)(cell, qp);
435 for (
int basis(0); basis < numBases; ++basis)
437 fields_[X](cell, basis) += tmp[Y] * basis_(cell, basis, qp, Z) -
438 tmp[Z] * basis_(cell, basis, qp, Y);
439 fields_[Y](cell, basis) += tmp[Z] * basis_(cell, basis, qp, X) -
440 tmp[X] * basis_(cell, basis, qp, Z);
441 fields_[Z](cell, basis) += tmp[X] * basis_(cell, basis, qp, Y) -
442 tmp[Y] * basis_(cell, basis, qp, X);