418 void apply(field_type& FA_n, field_type& FA_nm1, field_type& FA_np1, dt_type dt,
420 using scalar =
decltype(dt);
426 auto A_n = FA_n.getView();
427 auto A_np1 = FA_np1.getView();
428 auto A_nm1 = FA_nm1.getView();
432 uint32_t(A_n.extent(2))};
434 constexpr uint32_t min_abc_boundary = 1;
435 constexpr uint32_t max_abc_boundary_sub = min_abc_boundary + 1;
438 Kokkos::parallel_for(
441 uint32_t ig = i + lDom.
first()[0];
442 uint32_t jg = j + lDom.
first()[1];
443 uint32_t kg = k + lDom.
first()[2];
446 uint32_t lval = uint32_t(i == 0) + (uint32_t(j == 0) << 1) + (uint32_t(k == 0) << 2)
447 + (uint32_t(i == local_nr[0] - 1) << 3)
448 + (uint32_t(j == local_nr[1] - 1) << 4)
449 + (uint32_t(k == local_nr[2] - 1) << 5);
452 if (Kokkos::popcount(lval) > 1)
456 uint32_t val = uint32_t(ig == min_abc_boundary)
457 + (uint32_t(jg == min_abc_boundary) << 1)
458 + (uint32_t(kg == min_abc_boundary) << 2)
459 + (uint32_t(ig == true_nr[0] - max_abc_boundary_sub) << 3)
460 + (uint32_t(jg == true_nr[1] - max_abc_boundary_sub) << 4)
461 + (uint32_t(kg == true_nr[2] - max_abc_boundary_sub) << 5);
464 if (Kokkos::popcount(val) == 1) {
465 if (ig == min_abc_boundary) {
469 if (jg == min_abc_boundary) {
473 if (kg == min_abc_boundary) {
477 if (ig == true_nr[0] - max_abc_boundary_sub) {
481 if (jg == true_nr[1] - max_abc_boundary_sub) {
485 if (kg == true_nr[2] - max_abc_boundary_sub) {
494 Kokkos::parallel_for(
497 uint32_t ig = i + lDom.
first()[0];
498 uint32_t jg = j + lDom.
first()[1];
499 uint32_t kg = k + lDom.
first()[2];
502 uint32_t lval = uint32_t(i == 0) + (uint32_t(j == 0) << 1) + (uint32_t(k == 0) << 2)
503 + (uint32_t(i == local_nr[0] - 1) << 3)
504 + (uint32_t(j == local_nr[1] - 1) << 4)
505 + (uint32_t(k == local_nr[2] - 1) << 5);
508 if (Kokkos::popcount(lval) > 2)
512 uint32_t val = uint32_t(ig == min_abc_boundary)
513 + (uint32_t(jg == min_abc_boundary) << 1)
514 + (uint32_t(kg == min_abc_boundary) << 2)
515 + (uint32_t(ig == true_nr[0] - max_abc_boundary_sub) << 3)
516 + (uint32_t(jg == true_nr[1] - max_abc_boundary_sub) << 4)
517 + (uint32_t(kg == true_nr[2] - max_abc_boundary_sub) << 5);
520 if (Kokkos::popcount(val) == 2) {
521 if (ig == min_abc_boundary && kg == min_abc_boundary) {
524 }
else if (ig == min_abc_boundary && jg == min_abc_boundary) {
527 }
else if (jg == min_abc_boundary && kg == min_abc_boundary) {
530 }
else if (ig == min_abc_boundary && kg == true_nr[2] - max_abc_boundary_sub) {
533 }
else if (ig == min_abc_boundary && jg == true_nr[1] - max_abc_boundary_sub) {
536 }
else if (jg == min_abc_boundary && kg == true_nr[2] - max_abc_boundary_sub) {
539 }
else if (ig == true_nr[0] - max_abc_boundary_sub && kg == min_abc_boundary) {
542 }
else if (ig == true_nr[0] - max_abc_boundary_sub && jg == min_abc_boundary) {
545 }
else if (jg == true_nr[1] - max_abc_boundary_sub && kg == min_abc_boundary) {
548 }
else if (ig == true_nr[0] - max_abc_boundary_sub
549 && kg == true_nr[2] - max_abc_boundary_sub) {
552 }
else if (ig == true_nr[0] - max_abc_boundary_sub
553 && jg == true_nr[1] - max_abc_boundary_sub) {
556 }
else if (jg == true_nr[1] - max_abc_boundary_sub
557 && kg == true_nr[2] - max_abc_boundary_sub) {
568 Kokkos::parallel_for(
571 uint32_t ig = i + lDom.
first()[0];
572 uint32_t jg = j + lDom.
first()[1];
573 uint32_t kg = k + lDom.
first()[2];
576 uint32_t val = uint32_t(ig == min_abc_boundary)
577 + (uint32_t(jg == min_abc_boundary) << 1)
578 + (uint32_t(kg == min_abc_boundary) << 2)
579 + (uint32_t(ig == true_nr[0] - max_abc_boundary_sub) << 3)
580 + (uint32_t(jg == true_nr[1] - max_abc_boundary_sub) << 4)
581 + (uint32_t(kg == true_nr[2] - max_abc_boundary_sub) << 5);
584 if (Kokkos::popcount(val) == 3) {
585 if (ig == min_abc_boundary && jg == min_abc_boundary
586 && kg == min_abc_boundary) {
589 }
else if (ig == true_nr[0] - max_abc_boundary_sub && jg == min_abc_boundary
590 && kg == min_abc_boundary) {
593 }
else if (ig == min_abc_boundary && jg == true_nr[1] - max_abc_boundary_sub
594 && kg == min_abc_boundary) {
597 }
else if (ig == true_nr[0] - max_abc_boundary_sub
598 && jg == true_nr[1] - max_abc_boundary_sub
599 && kg == min_abc_boundary) {
602 }
else if (ig == min_abc_boundary && jg == min_abc_boundary
603 && kg == true_nr[2] - max_abc_boundary_sub) {
606 }
else if (ig == true_nr[0] - max_abc_boundary_sub && jg == min_abc_boundary
607 && kg == true_nr[2] - max_abc_boundary_sub) {
610 }
else if (ig == min_abc_boundary && jg == true_nr[1] - max_abc_boundary_sub
611 && kg == true_nr[2] - max_abc_boundary_sub) {
614 }
else if (ig == true_nr[0] - max_abc_boundary_sub
615 && jg == true_nr[1] - max_abc_boundary_sub
616 && kg == true_nr[2] - max_abc_boundary_sub) {