7 #ifndef WARPX_COMM_K_H_
8 #define WARPX_COMM_K_H_
21 using namespace amrex;
24 const auto arr_coarse_zeropad = [arr_coarse] (
const int jj,
const int kk,
const int ll) noexcept
26 return arr_coarse.
contains(
jj,kk,ll) ? arr_coarse(
jj,kk,ll) : 0.0_rt;
33 const int rk = (AMREX_SPACEDIM == 1) ? 1 : rr[1];
34 const int rl = (AMREX_SPACEDIM <= 2) ? 1 : rr[2];
37 const int sj = arr_stag[0];
38 const int sk = (AMREX_SPACEDIM == 1) ? 0 : arr_stag[1];
39 const int sl = (AMREX_SPACEDIM <= 2) ? 0 : arr_stag[2];
52 const amrex::Real hj = (sj == 0) ? 0.5_rt : 0._rt;
53 const amrex::Real hk = (sk == 0) ? 0.5_rt : 0._rt;
54 const amrex::Real hl = (sl == 0) ? 0.5_rt : 0._rt;
56 amrex::Real res = 0.0_rt;
58 for (
int jj = 0;
jj < nj;
jj++) {
59 for (
int kk = 0; kk < nk; kk++) {
60 for (
int ll = 0; ll < nl; ll++) {
61 const amrex::Real wj = (rj - amrex::Math::abs(j + hj - (jc +
jj + hj) * rj)) /
static_cast<amrex::Real
>(rj);
62 const amrex::Real wk = (rk - amrex::Math::abs(k + hk - (kc + kk + hk) * rk)) /
static_cast<amrex::Real
>(rk);
63 const amrex::Real wl = (rl - amrex::Math::abs(l + hl - (lc + ll + hl) * rl)) /
static_cast<amrex::Real
>(rl);
64 res += wj * wk * wl * arr_coarse_zeropad(jc+
jj,kc+kk,lc+ll);
68 arr_aux(j,k,l) = arr_fine(j,k,l) + res;
78 using namespace amrex;
81 const auto Bxf_zeropad = [Bxf] (
const int jj,
const int kk,
const int ll) noexcept
87 const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
88 const Real owx = 1.0_rt-wx;
93 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
96 #if defined(WARPX_DIM_1D_Z)
99 const Real bg = owx * Bxg(jg ,0,0)
100 + wx * Bxg(jg+1,0,0);
103 const Real bc = owx * Bxc(jg ,0,0)
104 + wx * Bxc(jg+1,0,0);
107 const Real bf = 0.5_rt*(Bxf_zeropad(j-1,0,0) + Bxf_zeropad(j,0,0));
110 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
113 const Real bg = owx * owy * Bxg(jg ,kg ,0)
114 + owx * wy * Bxg(jg ,kg+1,0)
115 + wx * owy * Bxg(jg+1,kg ,0)
116 + wx * wy * Bxg(jg+1,kg+1,0);
119 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
120 const Real bc = owx * owy * Bxc(jg ,kg ,0)
121 + owx * wy * Bxc(jg ,kg-1,0)
122 + wx * owy * Bxc(jg+1,kg ,0)
123 + wx * wy * Bxc(jg+1,kg-1,0);
126 const Real bf = 0.5_rt*(Bxf_zeropad(j,k-1,0) + Bxf_zeropad(j,k,0));
131 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
132 Real owz = 1.0_rt-wz;
135 const Real bg = owx * owy * owz * Bxg(jg ,kg ,lg )
136 + wx * owy * owz * Bxg(jg+1,kg ,lg )
137 + owx * wy * owz * Bxg(jg ,kg+1,lg )
138 + wx * wy * owz * Bxg(jg+1,kg+1,lg )
139 + owx * owy * wz * Bxg(jg ,kg ,lg+1)
140 + wx * owy * wz * Bxg(jg+1,kg ,lg+1)
141 + owx * wy * wz * Bxg(jg ,kg+1,lg+1)
142 + wx * wy * wz * Bxg(jg+1,kg+1,lg+1);
145 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
146 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
147 const Real bc = owx * owy * owz * Bxc(jg ,kg ,lg )
148 + wx * owy * owz * Bxc(jg+1,kg ,lg )
149 + owx * wy * owz * Bxc(jg ,kg-1,lg )
150 + wx * wy * owz * Bxc(jg+1,kg-1,lg )
151 + owx * owy * wz * Bxc(jg ,kg ,lg-1)
152 + wx * owy * wz * Bxc(jg+1,kg ,lg-1)
153 + owx * wy * wz * Bxc(jg ,kg-1,lg-1)
154 + wx * wy * wz * Bxc(jg+1,kg-1,lg-1);
157 const Real bf = 0.25_rt*(Bxf_zeropad(j,k-1,l-1) + Bxf_zeropad(j,k,l-1) + Bxf_zeropad(j,k-1,l) + Bxf_zeropad(j,k,l));
160 Bxa(j,k,l) = bg + (bf-bc);
170 using namespace amrex;
173 const auto Byf_zeropad = [Byf] (
const int jj,
const int kk,
const int ll) noexcept
180 wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
186 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
189 #if defined(WARPX_DIM_1D_Z)
192 const Real bg = owx * Byg(jg ,0,0)
193 + wx * Byg(jg+1,0,0);
196 const Real bc = owx * Byc(jg ,0,0)
197 + wx * Byc(jg+1,0,0);
200 const Real bf = 0.5_rt*(Byf_zeropad(j-1,0,0) + Byf_zeropad(j,0,0));
203 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
206 const Real bg = owx * owy * Byg(jg ,kg ,0)
207 + owx * wy * Byg(jg ,kg+1,0)
208 + wx * owy * Byg(jg+1,kg ,0)
209 + wx * wy * Byg(jg+1,kg+1,0);
212 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
213 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
214 const Real bc = owx * owy * Byc(jg ,kg ,0)
215 + owx * wy * Byc(jg ,kg-1,0)
216 + wx * owy * Byc(jg-1,kg ,0)
217 + wx * wy * Byc(jg-1,kg-1,0);
220 const Real bf = 0.25_rt*(Byf_zeropad(j,k,0) + Byf_zeropad(j-1,k,0) + Byf_zeropad(j,k-1,0) + Byf_zeropad(j-1,k-1,0));
225 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
226 Real owz = 1.0_rt-wz;
229 const Real bg = owx * owy * owz * Byg(jg ,kg ,lg )
230 + wx * owy * owz * Byg(jg+1,kg ,lg )
231 + owx * wy * owz * Byg(jg ,kg+1,lg )
232 + wx * wy * owz * Byg(jg+1,kg+1,lg )
233 + owx * owy * wz * Byg(jg ,kg ,lg+1)
234 + wx * owy * wz * Byg(jg+1,kg ,lg+1)
235 + owx * wy * wz * Byg(jg ,kg+1,lg+1)
236 + wx * wy * wz * Byg(jg+1,kg+1,lg+1);
239 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
240 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
241 const Real bc = owx * owy * owz * Byc(jg ,kg ,lg )
242 + wx * owy * owz * Byc(jg-1,kg ,lg )
243 + owx * wy * owz * Byc(jg ,kg+1,lg )
244 + wx * wy * owz * Byc(jg-1,kg+1,lg )
245 + owx * owy * wz * Byc(jg ,kg ,lg-1)
246 + wx * owy * wz * Byc(jg-1,kg ,lg-1)
247 + owx * wy * wz * Byc(jg ,kg+1,lg-1)
248 + wx * wy * wz * Byc(jg-1,kg+1,lg-1);
251 const Real bf = 0.25_rt*(Byf_zeropad(j-1,k,l-1) + Byf_zeropad(j,k,l-1) + Byf_zeropad(j-1,k,l) + Byf_zeropad(j,k,l));
255 Bya(j,k,l) = bg + (bf-bc);
265 using namespace amrex;
268 const auto Bzf_zeropad = [Bzf] (
const int jj,
const int kk,
const int ll) noexcept
275 wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
281 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
284 #if defined(WARPX_DIM_1D_Z)
287 const Real bg = owx * Bzg(jg ,0,0)
288 + wx * Bzg(jg+1,0,0);
291 const Real bc = owx * Bzc(jg ,0,0)
292 + wx * Bzc(jg+1,0,0);
295 const Real bf = Bzf_zeropad(j,0,0);
298 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
301 const Real bg = owx * owy * Bzg(jg ,kg ,0)
302 + owx * wy * Bzg(jg ,kg+1,0)
303 + wx * owy * Bzg(jg+1,kg ,0)
304 + wx * wy * Bzg(jg+1,kg+1,0);
307 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
308 const Real bc = owx * owy * Bzc(jg ,kg ,0)
309 + owx * wy * Bzc(jg ,kg+1,0)
310 + wx * owy * Bzc(jg-1,kg ,0)
311 + wx * wy * Bzc(jg-1,kg+1,0);
314 const Real bf = 0.5_rt*(Bzf_zeropad(j-1,k,0) + Bzf_zeropad(j,k,0));
319 const Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
320 const Real owz = 1.0_rt-wz;
323 const Real bg = owx * owy * owz * Bzg(jg ,kg ,lg )
324 + wx * owy * owz * Bzg(jg+1,kg ,lg )
325 + owx * wy * owz * Bzg(jg ,kg+1,lg )
326 + wx * wy * owz * Bzg(jg+1,kg+1,lg )
327 + owx * owy * wz * Bzg(jg ,kg ,lg+1)
328 + wx * owy * wz * Bzg(jg+1,kg ,lg+1)
329 + owx * wy * wz * Bzg(jg ,kg+1,lg+1)
330 + wx * wy * wz * Bzg(jg+1,kg+1,lg+1);
333 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
334 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
335 const Real bc = owx * owy * owz * Bzc(jg ,kg ,lg )
336 + wx * owy * owz * Bzc(jg-1,kg ,lg )
337 + owx * wy * owz * Bzc(jg ,kg-1,lg )
338 + wx * wy * owz * Bzc(jg-1,kg-1,lg )
339 + owx * owy * wz * Bzc(jg ,kg ,lg+1)
340 + wx * owy * wz * Bzc(jg-1,kg ,lg+1)
341 + owx * wy * wz * Bzc(jg ,kg-1,lg+1)
342 + wx * wy * wz * Bzc(jg-1,kg-1,lg+1);
345 const Real bf = 0.25_rt*(Bzf_zeropad(j-1,k-1,l) + Bzf_zeropad(j,k-1,l) + Bzf_zeropad(j-1,k,l) + Bzf_zeropad(j,k,l));
349 Bza(j,k,l) = bg + (bf-bc);
359 using namespace amrex;
362 const auto Exf_zeropad = [Exf] (
const int jj,
const int kk,
const int ll) noexcept
369 wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
375 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
378 #if defined(WARPX_DIM_1D_Z)
381 const Real eg = owx * Exg(jg ,0,0)
382 + wx * Exg(jg+1,0,0);
385 const Real ec = owx * Exc(jg ,0,0)
386 + wx * Exc(jg+1,0,0);
389 const Real ef = Exf_zeropad(j,0,0);
392 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
395 const Real eg = owx * owy * Exg(jg ,kg ,0)
396 + owx * wy * Exg(jg ,kg+1,0)
397 + wx * owy * Exg(jg+1,kg ,0)
398 + wx * wy * Exg(jg+1,kg+1,0);
401 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
402 const Real ec = owx * owy * Exc(jg ,kg ,0)
403 + owx * wy * Exc(jg ,kg+1,0)
404 + wx * owy * Exc(jg-1,kg ,0)
405 + wx * wy * Exc(jg-1,kg+1,0);
408 const Real ef = 0.5_rt*(Exf_zeropad(j-1,k,0) + Exf_zeropad(j,k,0));
413 const Real wz = (l == lg*2) ? 0.0 : 0.5;
414 const Real owz = 1.0_rt-wz;
417 const Real eg = owx * owy * owz * Exg(jg ,kg ,lg )
418 + wx * owy * owz * Exg(jg+1,kg ,lg )
419 + owx * wy * owz * Exg(jg ,kg+1,lg )
420 + wx * wy * owz * Exg(jg+1,kg+1,lg )
421 + owx * owy * wz * Exg(jg ,kg ,lg+1)
422 + wx * owy * wz * Exg(jg+1,kg ,lg+1)
423 + owx * wy * wz * Exg(jg ,kg+1,lg+1)
424 + wx * wy * wz * Exg(jg+1,kg+1,lg+1);
427 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
428 const Real ec = owx * owy * owz * Exc(jg ,kg ,lg )
429 + wx * owy * owz * Exc(jg-1,kg ,lg )
430 + owx * wy * owz * Exc(jg ,kg+1,lg )
431 + wx * wy * owz * Exc(jg-1,kg+1,lg )
432 + owx * owy * wz * Exc(jg ,kg ,lg+1)
433 + wx * owy * wz * Exc(jg-1,kg ,lg+1)
434 + owx * wy * wz * Exc(jg ,kg+1,lg+1)
435 + wx * wy * wz * Exc(jg-1,kg+1,lg+1);
438 const Real ef = 0.5_rt*(Exf_zeropad(j-1,k,l) + Exf_zeropad(j,k,l));
442 Exa(j,k,l) = eg + (ef-ec);
452 using namespace amrex;
455 const auto Eyf_zeropad = [Eyf] (
const int jj,
const int kk,
const int ll) noexcept
461 const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
462 const Real owx = 1.0_rt-wx;
467 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
470 #if defined(WARPX_DIM_1D_Z)
473 const Real eg = owx * Eyg(jg ,0,0)
474 + wx * Eyg(jg+1,0,0);
477 const Real ec = owx * Eyc(jg ,0,0)
478 + wx * Eyc(jg+1,0,0);
481 const Real ef = Eyf_zeropad(j,0,0);
484 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
487 const Real eg = owx * owy * Eyg(jg ,kg ,0)
488 + owx * wy * Eyg(jg ,kg+1,0)
489 + wx * owy * Eyg(jg+1,kg ,0)
490 + wx * wy * Eyg(jg+1,kg+1,0);
493 const Real ec = owx * owy * Eyc(jg ,kg ,0)
494 + owx * wy * Eyc(jg ,kg+1,0)
495 + wx * owy * Eyc(jg+1,kg ,0)
496 + wx * wy * Eyc(jg+1,kg+1,0);
499 const Real ef = Eyf_zeropad(j,k,0);
504 const Real wz = (l == lg*2) ? 0.0 : 0.5;
505 const Real owz = 1.0_rt-wz;
508 const Real eg = owx * owy * owz * Eyg(jg ,kg ,lg )
509 + wx * owy * owz * Eyg(jg+1,kg ,lg )
510 + owx * wy * owz * Eyg(jg ,kg+1,lg )
511 + wx * wy * owz * Eyg(jg+1,kg+1,lg )
512 + owx * owy * wz * Eyg(jg ,kg ,lg+1)
513 + wx * owy * wz * Eyg(jg+1,kg ,lg+1)
514 + owx * wy * wz * Eyg(jg ,kg+1,lg+1)
515 + wx * wy * wz * Eyg(jg+1,kg+1,lg+1);
518 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
519 const Real ec = owx * owy * owz * Eyc(jg ,kg ,lg )
520 + wx * owy * owz * Eyc(jg+1,kg ,lg )
521 + owx * wy * owz * Eyc(jg ,kg-1,lg )
522 + wx * wy * owz * Eyc(jg+1,kg-1,lg )
523 + owx * owy * wz * Eyc(jg ,kg ,lg+1)
524 + wx * owy * wz * Eyc(jg+1,kg ,lg+1)
525 + owx * wy * wz * Eyc(jg ,kg-1,lg+1)
526 + wx * wy * wz * Eyc(jg+1,kg-1,lg+1);
529 const Real ef = 0.5_rt*(Eyf_zeropad(j,k-1,l) + Eyf_zeropad(j,k,l));
533 Eya(j,k,l) = eg + (ef-ec);
543 using namespace amrex;
546 const auto Ezf_zeropad = [Ezf] (
const int jj,
const int kk,
const int ll) noexcept
552 const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
553 const Real owx = 1.0_rt-wx;
558 wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
561 #if defined(WARPX_DIM_1D_Z)
564 const Real eg = owx * Ezg(jg ,0,0)
565 + wx * Ezg(jg+1,0,0);
568 const Real ec = owx * Ezc(jg ,0,0)
569 + wx * Ezc(jg+1,0,0);
572 const Real ef = 0.5_rt*(Ezf_zeropad(j-1,0,0) + Ezf_zeropad(j,0,0));
575 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
578 const Real eg = owx * owy * Ezg(jg ,kg ,0)
579 + owx * wy * Ezg(jg ,kg+1,0)
580 + wx * owy * Ezg(jg+1,kg ,0)
581 + wx * wy * Ezg(jg+1,kg+1,0);
584 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
585 const Real ec = owx * owy * Ezc(jg ,kg ,0)
586 + owx * wy * Ezc(jg ,kg-1,0)
587 + wx * owy * Ezc(jg+1,kg ,0)
588 + wx * wy * Ezc(jg+1,kg-1,0);
591 const Real ef = 0.5_rt*(Ezf_zeropad(j,k-1,0) + Ezf_zeropad(j,k,0));
596 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
597 Real owz = 1.0_rt-wz;
600 const Real eg = owx * owy * owz * Ezg(jg ,kg ,lg )
601 + wx * owy * owz * Ezg(jg+1,kg ,lg )
602 + owx * wy * owz * Ezg(jg ,kg+1,lg )
603 + wx * wy * owz * Ezg(jg+1,kg+1,lg )
604 + owx * owy * wz * Ezg(jg ,kg ,lg+1)
605 + wx * owy * wz * Ezg(jg+1,kg ,lg+1)
606 + owx * wy * wz * Ezg(jg ,kg+1,lg+1)
607 + wx * wy * wz * Ezg(jg+1,kg+1,lg+1);
610 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
611 const Real ec = owx * owy * owz * Ezc(jg ,kg ,lg )
612 + wx * owy * owz * Ezc(jg+1,kg ,lg )
613 + owx * wy * owz * Ezc(jg ,kg+1,lg )
614 + wx * wy * owz * Ezc(jg+1,kg+1,lg )
615 + owx * owy * wz * Ezc(jg ,kg ,lg-1)
616 + wx * owy * wz * Ezc(jg+1,kg ,lg-1)
617 + owx * wy * wz * Ezc(jg ,kg+1,lg-1)
618 + wx * wy * wz * Ezc(jg+1,kg+1,lg-1);
621 const Real ef = 0.5_rt*(Ezf_zeropad(j,k,l-1) + Ezf_zeropad(j,k,l));
625 Eza(j,k,l) = eg + (ef-ec);
658 amrex::Real
const* stencil_coeffs_x =
nullptr,
659 amrex::Real
const* stencil_coeffs_y =
nullptr,
660 amrex::Real
const* stencil_coeffs_z =
nullptr)
662 using namespace amrex;
666 const auto src_arr_zeropad = [src_arr] (
const int jj,
const int kk,
const int ll) noexcept
668 return src_arr.
contains(
jj,kk,ll) ? src_arr(
jj,kk,ll) : 0.0_rt;
672 #if defined(WARPX_DIM_1D_Z)
674 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
683 const int shift = (dst_nodal) ? 0 : 1;
686 const int sj = (dst_nodal) ? src_stag[0] : dst_stag[0];
687 #if (AMREX_SPACEDIM >= 2)
688 const int sk = (dst_nodal) ? src_stag[1] : dst_stag[1];
690 #if defined(WARPX_DIM_3D)
691 const int sl = (dst_nodal) ? src_stag[2] : dst_stag[2];
695 const bool interp_j = (sj == 0);
696 #if (AMREX_SPACEDIM >= 2)
697 const bool interp_k = (sk == 0);
699 #if defined(WARPX_DIM_3D)
700 const bool interp_l = (sl == 0);
703 #if defined(WARPX_DIM_1D_Z)
705 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
708 #elif defined(WARPX_DIM_3D)
715 const amrex::Real wj = (interp_j) ? 0.5_rt : 1.0_rt;
716 #if defined(WARPX_DIM_1D_Z)
717 constexpr amrex::Real wk = 1.0_rt;
718 constexpr amrex::Real wl = 1.0_rt;
719 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
720 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
721 constexpr amrex::Real wl = 1.0_rt;
722 #elif defined(WARPX_DIM_3D)
723 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
724 const amrex::Real wl = (interp_l) ? 0.5_rt : 1.0_rt;
728 const int jmin = (interp_j) ? j - noj/2 +
shift : j;
729 const int jmax = (interp_j) ? j + noj/2 +
shift - 1 : j;
732 #if defined(WARPX_DIM_1D_Z)
737 const int kmin = (interp_k) ? k - nok/2 +
shift : k;
738 const int kmax = (interp_k) ? k + nok/2 +
shift - 1 : k;
742 #if (AMREX_SPACEDIM <= 2)
746 #elif defined(WARPX_DIM_3D)
747 const int lmin = (interp_l) ? l - nol/2 +
shift : l;
748 const int lmax = (interp_l) ? l + nol/2 +
shift - 1 : l;
752 const int nj = jmax - jmin;
753 const int nk = kmax - kmin;
754 const int nl = lmax - lmin;
795 amrex::Real res = 0.0_rt;
797 #if defined(WARPX_DIM_1D_Z)
798 amrex::Real
const* scj = stencil_coeffs_z;
799 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
800 amrex::Real
const* scj = stencil_coeffs_x;
801 amrex::Real
const* sck = stencil_coeffs_z;
802 #elif defined(WARPX_DIM_3D)
803 amrex::Real
const* scj = stencil_coeffs_x;
804 amrex::Real
const* sck = stencil_coeffs_y;
805 amrex::Real
const* scl = stencil_coeffs_z;
808 for (
int ll = 0; ll <= nl; ll++)
810 #if defined(WARPX_DIM_3D)
811 const amrex::Real cl = (interp_l)? scl[ll] : 1.0_rt;
813 const amrex::Real cl = 1.0_rt;
815 for (
int kk = 0; kk <= nk; kk++)
817 #if (AMREX_SPACEDIM >= 2)
818 const amrex::Real ck = (interp_k)? sck[kk] : 1.0_rt;
820 const amrex::Real ck = 1.0_rt;
822 for (
int jj = 0;
jj <= nj;
jj++)
824 const amrex::Real cj = (interp_j)? scj[
jj] : 1.0_rt;
826 res += cj * ck * cl * src_arr_zeropad(jmin+
jj,kmin+kk,lmin+ll);
831 dst_arr(j,k,l) = wj * wk * wl * res;
#define AMREX_FORCE_INLINE
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_efield_x(int j, int k, int l, amrex::Array4< amrex::Real > const &Exa, amrex::Array4< amrex::Real const > const &Exf, amrex::Array4< amrex::Real const > const &Exc, amrex::Array4< amrex::Real const > const &Exg)
Definition: WarpXComm_K.H:353
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_bfield_x(int j, int k, int l, amrex::Array4< amrex::Real > const &Bxa, amrex::Array4< amrex::Real const > const &Bxf, amrex::Array4< amrex::Real const > const &Bxc, amrex::Array4< amrex::Real const > const &Bxg)
Definition: WarpXComm_K.H:72
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_efield_y(int j, int k, int l, amrex::Array4< amrex::Real > const &Eya, amrex::Array4< amrex::Real const > const &Eyf, amrex::Array4< amrex::Real const > const &Eyc, amrex::Array4< amrex::Real const > const &Eyg)
Definition: WarpXComm_K.H:446
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp(int j, int k, int l, amrex::Array4< amrex::Real > const &arr_aux, amrex::Array4< amrex::Real const > const &arr_fine, amrex::Array4< amrex::Real const > const &arr_coarse, const amrex::IntVect &arr_stag, const amrex::IntVect &rr)
Definition: WarpXComm_K.H:14
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_bfield_y(int j, int k, int l, amrex::Array4< amrex::Real > const &Bya, amrex::Array4< amrex::Real const > const &Byf, amrex::Array4< amrex::Real const > const &Byc, amrex::Array4< amrex::Real const > const &Byg)
Definition: WarpXComm_K.H:164
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_bfield_z(int j, int k, int l, amrex::Array4< amrex::Real > const &Bza, amrex::Array4< amrex::Real const > const &Bzf, amrex::Array4< amrex::Real const > const &Bzc, amrex::Array4< amrex::Real const > const &Bzg)
Definition: WarpXComm_K.H:259
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void warpx_interp_nd_efield_z(int j, int k, int l, amrex::Array4< amrex::Real > const &Eza, amrex::Array4< amrex::Real const > const &Ezf, amrex::Array4< amrex::Real const > const &Ezc, amrex::Array4< amrex::Real const > const &Ezg)
Definition: WarpXComm_K.H:537
AMREX_GPU_HOST_DEVICE static constexpr AMREX_FORCE_INLINE IntVect TheNodeVector() noexcept
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box coarsen(const Box &b, int ref_ratio) noexcept
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box shift(const Box &b, int dir, int nzones) noexcept
jj
Definition: check_interp_points_and_weights.py:160
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool contains(int i, int j, int k) const noexcept